当前位置:编程学习 > C/C++ >>

C++程序设计 题目

学生成绩管理

任务:① 对30个同学的3门课程求总分,按总分进行从高到低排序。

      ② 实现增加、删除一个同学成绩功能

③ 对结果进行输出 

    要求:可以使用冒泡、选择、插入、快速、归并、堆排序等任意一种排序算法,在上交资料中请写明:使用什么排序算法、存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法

追问:这是编程题 可能我没说清楚
答案:#include "iostream"
#include "string"
using namespace std;
class student
{
public:
 int studentnumber;
 float score;
 student *next;
};
student *head=NULL;
student *creat()
{
 student *p1;
 student *p2;
 p1=new student;
 head=p1;
 p2=p1;
 cout<<"请输入学生的学号,以0结束"<<endl;
 cin>>p1->studentnumber;
 if (p1->studentnumber!=0)
 {
  cout<<"请输入学生3门分数的总分"<<endl;
  cin>>p1->score;
 }
 else
 {
  delete p1;p2=NULL;head=NULL;return head;
 }
 while(p1->studentnumber!=0)
 {
  p2=p1;
  p1=new student;
  cout<<"请输入学生的学号,以0结束"<<endl;
  cin>>p1->studentnumber;
  if(p1->studentnumber!=0)
  {
   cout<<"请输入学生3门分数的总分"<<endl;
   cin>>p1->score;
  }
  p2->next=p1;
 }
 delete p1;
 p2->next=NULL;
 return head;
}
void Showstuchent(student *head)
{
 cout<<endl;
 cout<<"学生信息如下:"<<endl;
 while (head)
 {
  cout<<"学生学号"<<head->studentnumber<<"\t";
  cout<<"分数"<<head->score<<endl;
  head=head->next;
 }
}
void insert(student *head,int studentnumber,float score)
{
 student *list=new student;
 student *l;
 while(head)
 {
  l=head;
  head=head->next;
 }
 list->studentnumber=studentnumber;
 list->score=score;
 list->next=NULL;
 l->next=list;
}
void Delete(student *head,int studentnumber)
{
 student *l;
 if (head->studentnumber==studentnumber)
 {
  l=head;
  head=head->next;
  ::head=head;
  delete l;
  cout<<"操作成功"<<endl;
  return;
 }
 while(head)
 {
  if (head->next=NULL)
  {
   cout<<"找不到要删除的学号."<<endl;
   return;
  }
  if (head->next->studentnumber==studentnumber)
  {
   l=head->next;
   head->next=l->next;
   delete l;
   cout<<"操作成功"<<endl;
   return;
  }
  head=head->next;
 }
 cout<<"找不到要删除的学号."<<endl;
}
int getstudentnum(student *head)
{
 int studentnumber=0;
 while (head)
 {
  studentnumber++;
  head=head->next;
 }
 return studentnumber;
}
int main()
{
 string str;
begin:
 cout<<"1-重建学生成绩管理2-显示学生3-插入学生4-删除学生5-学生学号Q-退出"<<endl;
 cin>>str;
 if (str[0]=='1')
 {
  creat();
  system("cls");
  goto begin;
 }
 else if(str[0]=='2')
 {
  if(head==NULL)
  {
   cout<<"学生成绩档案为空,请增加学生成绩"<<endl<<"按回车键返回主程序"<<endl;
   cin.get();
   cin.get();
   system("cls");
   goto begin;
  }
  Showstuchent(head);
  goto begin;
 }
 else if(str[0]=='3')
 {
  int studentnumber;
  float score;
  cout<<"请输入要插入的学生学号:"<<endl;
  string str1;cin>>str1;
  studentnumber=atoi(str1.c_str());
  cout<<"请出入要插入的学生总分:"<<endl;
  string str2;cin>>str2;
  score=atof(str2.c_str());
  insert(head,studentnumber,score);
  cout<<"操作完毕,按回车键返回主程序"<<endl;
  system("cls");
  goto begin;
 }
 else if(str[0]=='4')
 {
  if(head==NULL)
  {
   cout<<"学生成绩档案为空,请增加学生成绩"<<endl<<"按回车键返回主程序"<<endl;
   cin.get();
   cin.get();
   system("cls");
   goto begin;
  }
  int studentnumber;
  cout<<"请输入要删除的学生学号:"<<endl;
  string str3;cin>>str3;
  studentnumber=atoi(str3.c_str());
  Delete(head,studentnumber);
  system("cls");
  goto begin;
 }
 else if(str[0]=='5')
 {
  cout<<"学生数目为:"<<getstudentnum(head)<<endl<<"按回车键返回主程序"<<endl;
  cin.get();
  cin.get();
  system("cls");
  goto begin;
 }
 system("pause");
}

基本是这样的,有些细节部分你自己改下吧

?安排研究生课程表。设有m个研究生和可选修的n门课程,如果某个研究生选修的两门课程安排在同一时间内上课,则这两门课程就会发生冲突,要求不冲突地安排课程表。

上一个:C++ 拦截导弹问题
下一个:C++寻路算法

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,