第1题课程设计

来源:互联网 发布:c语言字符串转化为数字 编辑:程序博客网 时间:2024/04/20 11:42
<span style="font-size:18px;">#include<iostream.h>#include<string.h>#include<iomanip.h>#include<fstream.h>const int M = 20;class stucopy//此类用于拷贝student的数据,用于排序功能的实现{public:char id[20];char sex[10];char name[10];double grade[5];double sumsum;//总成绩double average;//平均成绩};class student//用于保存学生信息的类{friend class list;public:char id[20];//保存学号char sex[10];//保存性别char name[10];//保存名字double grade[5];//保存成绩student(){next=0;for (int i=0;i<20;i++)id[i]=0;for (i=0;i<10;i++)sex[i]=0;for (i=0;i<10;i++)name[i]=0;}void s();void setid(char id1[20]){for(int i=0;i<20;i++)id[i]=id1[i];}void setsex(char sex1[10]){for(int i=0;i<10;i++)sex[i]=sex1[i];}void setname(char name1[10]){for(int i=0;i<10;i++)name[i]=name1[i];}void setgrade(double grade1[5]){for(int i=0;i<5;i++)grade[i]=grade1[i];}student *next;//next指向下一个学生,构成链表char * outid(){return id;};char * outsex(){return sex;};char * outname(){return name;};double outsum(){double sum=0;for(int i=0;i<5;i++)sum+=this->outgrade(i);return sum;}double outav(){return this->outsum()/5;}double outgrade(int i){return grade[i];};void intgrade(int);};void student::intgrade(int j)//用于修改学生的成绩{ switch (j){case 1:  cout<<" 请输入数学成绩:\n";  cin>>grade[0];break;case 2:  cout<<"请输入英语成绩:\n";  cin>>grade[1];break;case 3:  cout<<"请输入政治成绩:\n";  cin>>grade[2];break;case 4:  cout<<"请输入程序设计基础成绩:\n";  cin>>grade[3];break;case 5:  cout<<"请输入物理成绩:\n";  cin>>grade[4];break;}}void student::s()//用于录入学生的信息{cout<<"请输入学号:\n";cin>>id;cout<<"请输入姓名:\n";cin>>name;cout<<"请输入性别:\n";cin>>sex;cout<<"请输入数学成绩:\n";cin>>grade[0];cout<<"请输入英语成绩:\n";cin>>grade[1];cout<<"请输入政治成绩:\n";cin>>grade[2];cout<<"请输入程序设计基础成绩:\n";cin>>grade[3];cout<<"请输入物理成绩:\n";cin>>grade[4];}class list//此类为链表{private:double high[5],low[5];public:student *last,*first;//链表的开头和结尾double totoal;list(){last=0;first=0;};~list();void instu();//新建一个学生的数据void outstu(char *);//根据姓名输出一个学生的信息int delstu(char *n);//根据姓名删除一个学生的信息void outstu1(char *);//根据学号输出一个学生的信息int delstu1(char *n);//根据学号删除一个学生的信息void outsum(char *);//根据姓名输出一个学生的总成绩和平均成绩void outsum1(char *);//根据学号输出一个学生的总成绩和平均成绩void think();//用于输出班级成绩的统计分析void search(char s[10],int);//根据姓名修改一个学生的成绩void search1(char s[20],int);//根据学号修改一个学生的成绩double hi(int i);//求某门课的最高分double lo(int i);//求某门课的最低分void av(int i);//求某门课的平均分void ev(int i);//用于班级成绩统计分析的人数分布输出void scanall();//输出所有学生的信息};list::~list()//析构函数,将所有创建的学生对象删掉{if(first!=0){student *p=first,*temp;while(p!=NULL){temp=p;p=p->next;delete temp;cout<<"ok\n";}}}void list::instu(){ student *p=new student();p->s();if(first==0){first=last=p;}else{last->next=p;last=p;}}void list::outstu(char *n){if(first==0) {cout<<"班级无成员!查无此人!"<<endl;return;}student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outname(),n)==0){ cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础"<<setw(6)<<"物理"<<endl;cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6)<<temp->outsex()<<setw(6)<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outgrade(2)<<setw(14)<<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;}cout<<"查无此人!"<<endl;return;}void list::outstu1(char *n){if(first==0) {cout<<"班级无成员!查无此人!"<<endl;return;}student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outid(),n)==0){ cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础"<<setw(6)<<"物理"<<endl;cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6)<<temp->outsex()<<setw(6)<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outgrade(2)<<setw(14)<<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;}cout<<"查无此人!"<<endl;return;}int list::delstu(char *n){if(first==0) {cout<<"无数据!"<<endl;return 0;}student *temp=first;student *p;if(strcmp(first->outname(),n)==0){ first=first->next;delete temp;cout<<"\n删除成功\n";return 0;}else for(;temp->next!=NULL;temp=temp->next){if(strcmp(temp->next->outname(),n)==0){p=temp->next;temp->next=temp->next->next;delete p;cout<<"\n删除成功\n";return 0;}}cout<<"\n查无此人,删除失败\n";return 0;}int list::delstu1(char *n){if(first==0) {cout<<"无数据!"<<endl;return 0;}student *temp=first;student *p;if(strcmp(first->outid(),n)==0){ first=first->next;delete temp;cout<<"\n删除成功\n";return 0;}else while(temp->next!=NULL){if(strcmp(temp->next->outid(),n)==0){p=temp->next;temp->next=temp->next->next;delete p;cout<<"\n删除成功\n";return 0;}else temp=temp->next;}cout<<"\n查无此人,删除失败\n";return 0;}void list::think(){if(first==0) {cout<<"无数据!"<<endl;return;}    int i=0;student *p=first;while (p!=NULL){p=p->next;i++;}totoal=i;cout<<"人数:"<<i<<endl;cout<<"数学\n";cout<<"最高分:"<<hi(0)<<" "<<"最低分:"<<lo(0)<<" "<<"平均分:";av(0);ev(0);cout<<"英语\n";cout<<"最高分:"<<hi(1)<<" "<<"最低分:"<<lo(1)<<" "<<"平均分:";av(1);ev(1);cout<<"政治\n";cout<<"最高分:"<<hi(2)<<" "<<"最低分:"<<lo(2)<<" "<<"平均分:";av(2);ev(2);cout<<"程序设计基础\n";cout<<"最高分:"<<hi(3)<<" "<<"最低分:"<<lo(3)<<" "<<"平均分:";av(3);ev(3);cout<<"物理\n";cout<<"最高分:"<<hi(4)<<" "<<"最低分:"<<lo(4)<<" "<<"平均分:";av(4);ev(4);}double list::hi(int i){high[i]=0.00;student *temp=first;while(temp!=0){if(temp->outgrade(i)>high[i])high[i]=temp->outgrade(i);temp=temp->next;}return high[i];}double list::lo(int i){low[i]=100;student *temp=first;while(temp!=0){if(temp->outgrade(i)<low[i])low[i]=temp->outgrade(i);temp=temp->next;}return low[i];}void list::av(int i){double aver=0;student *temp=first;while(temp!=NULL){aver+=temp->outgrade(i);temp=temp->next;}cout<<aver/totoal<<endl;}void list::ev(int i){ int a=0,b=0,c=0,d=0,e=0,f=0;student *temp=first;while(temp!=0){switch((int)temp->outgrade(i)/10){case 10:a++;break;case 9:a++;break;case 8:b++;break;case 7:c++;break;case 6:d++;break;case 5:e++;break;default:f++;}temp=temp->next;}cout<<"100-90的人数:"<<a<<"  89-80的人数:"<<b<<"  79-70的人数:"<<c<<"  69-60的人数:"<<d<<"  59-50的人数:"<<e<<"  50以下的人数:"<<f<<"  及格的人数:"<<(a+b+c+d)<<"  不及格的人数:"<<(e+f)<<endl;}void list::search(char s[10],int n){student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outname(),s)==0)temp->intgrade(n);}void list::search1(char s[20],int n){student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outid(),s)==0)temp->intgrade(n);}void list::outsum(char *n){if(first==0) {cout<<"无数据!"<<endl;return;}student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outname(),n)==0){cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8)<<temp->outsex()<<setw(8)<<temp->outsum()<<setw(10)<<temp->outav();return;}cout<<"查无此人!"<<endl;return;}void list::outsum1(char *n){double sum=0;int i=0;double av=0;if(first==0) {cout<<"无数据!"<<endl;return;}student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outid(),n)==0){cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8)<<temp->outsex()<<setw(8)<<temp->outsum()<<setw(10)<<temp->outav();return;}cout<<"查无此人!"<<endl;return;}void list::scanall(){student *temp;for(temp = first;temp!=NULL;temp=temp->next)cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6)<<temp->outsex()<<setw(6)<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outgrade(2)<<setw(14)<<temp->outgrade(3)<<setw(6)<<temp->outgrade(4)<<setw(8)<<temp->outsum()<<setw(10)<<temp->outav()<<endl;}void main(){stucopy stu[M];//复制整个链表的数据于数组,用于排序stucopy stutemp;//临时变量list will;//整个链表student *p, *p1=new student(),*q;//临时变量ifstream input;//输入ofstream output;//输出char file[20],classname[20],temp[80],id[20],name[9],sex1[10];//临时变量int m=0,n=0,j=0,i=0;//临时变量double grade1[5];//临时变量for(i=0;i<20;i++) id[i]=0;for(i=0;i<9;i++) name[i]=0;//初始化do{cout<<"//----------------------------------------------------------\\\n"<<" 0、 退出系统。\n"<<" 1、 成绩的录入:包括学生学号、姓名、性别和各门课程成绩的录入。\n"<<" 2、 成绩的查询:可以根据学号或姓名查询某个学生的成绩。\n"<<" 3、 成绩的修改:可以根据学号或姓名来修改相应的学生的成绩。\n"<<" 4、 数据的删除:可以根据学号或姓名指定删除某个学生的数据。\n"<<" 5、 成绩的统计分析:包括总人数、最高成绩、最低成绩、平均成绩、\n"<<"     各个分数段的人数(100-90、89-80、79-70、69-60、59-50、50以下)、及格率。\n"<<" 6、 总成绩和平均成绩的查询:可以根据学号或姓名查询。\n"<<" 7、 浏览所有学生信息。\n"<<" 8、 将所有学生信息保存成文件。\n"<<" 9、 打开指定的数据文件。\n"<<" 10、 按总成绩排序输出学生信息。\n"<<" 11、 按学号顺序输出学生信息,并可保存成文件。\n"<<"//----------------------------------------------------------\\\n";cout<<endl<<"请输入:";cin>>m;switch(m){case 1:will.instu();break;case 2:cout<<"1.根据学号查询     2.根据姓名查询"<<endl<<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号\n";cin>>id;will.outstu1(id);cout<<"\n";break;case 2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);cout<<"\n";break;}break;case 3:cout<<"1.根据学号查询     2.根据姓名查询"<<endl<<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号\n";cin>>id;will.outstu1(id);cout<<"\n";cout<<setw(6)<<"1.数学"<<setw(6)<<"2.英语"<<setw(6)<<"3.政治  "<<setw(14)<<"4.程序设计基础"<<setw(6)<<"5.物理"<<endl;cout<<"请输入要修改的课程编号:";cin>>j;will.search1(id,j);break;case 2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);cout<<"\n";cout<<setw(6)<<"1.数学"<<setw(6)<<"2.英语"<<setw(6)<<"3.政治  "<<setw(14)<<"4.程序设计基础"<<setw(6)<<"5.物理"<<endl;cout<<"请输入课程编号:";cin>>j;will.search(name,j);break;}break;case 4:cout<<"1.根据学号删除     2.根据姓名删除"<<endl<<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号\n";cin>>id;will.outstu1(id);will.delstu1(id);break;case 2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);will.delstu(name);break;}break;case 5:will.think();break;case 6:cout<<"1.根据学号查询     2.根据姓名查询"<<endl<<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号\n";cin>>id;will.outsum1(id);break;case 2:cout<<"请输入姓名\n";cin>>name;will.outsum(name);break;}break;case 7:cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础"<<setw(6)<<"物理"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";will.scanall();break;case 8:cout<<"请输入文件名:"<<endl;cin>>file;cout<<"请输入班级名称:"<<endl;cin>>classname;output.open(file);p = will.first;output<<classname<<"成绩单"<<endl<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础"<<setw(6)<<"物理"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<endl;for(;p!=NULL;p=p->next)output<<setw(8)<<p->outid()<<setw(8)<<p->outname()<<setw(6)<<p->outsex()<<setw(6)<<p->outgrade(0)<<setw(6)<<p->outgrade(1)<<setw(6)<<p->outgrade(2)<<setw(14)<<p->outgrade(3)<<setw(6)<<p->outgrade(4)<<setw(8)<<p->outsum()<<setw(10)<<p->outav()<<endl;output.close();break;case 9:cout<<"请输入文件名:"<<endl;cin>>file;input.open(file);if (input.fail()){cout<<"File does not exist"<<endl;break;}input.getline(temp,80);input.getline(temp,80);if(input.eof()) {cout<<"文件中无数据!"<<endl;break;}input>>id>>name>>sex1>>grade1[0]>>grade1[1]>>grade1[2]>>grade1[3]>>grade1[4];input>>temp;input>>temp;//将总成绩和平均成绩输入进临时变量p1->setid(id);p1->setname(name);p1->setsex(sex1);p1->setgrade(grade1);will.first=p1;will.last=will.first;while(!input.eof()){p=new student();q=will.last;        will.last->next=p;will.last=p;input>>id>>name>>sex1>>grade1[0]>>grade1[1]>>grade1[2]>>grade1[3]>>grade1[4];will.last->setid(id);will.last->setname(name);will.last->setsex(sex1);will.last->setgrade(grade1);input>>temp;input>>temp;//将总成绩和平均成绩输入进临时变量}will.last=q;will.last->next=NULL;input.close();break;case 10:p=will.first;for(i=0;i<20&&p!=NULL;i++,p=p->next){for (j=0;j<20;j++){stu[i].id[j]=p->id[j];}for (j=0;j<10;j++){stu[i].name[j]=p->name[j];}for (j=0;j<10;j++){stu[i].sex[j]=p->sex[j];}stu[i].sumsum=p->outsum();stu[i].average=p->outav();}for(n=0;n<i-1;n++)for(j=1;j<i;j++){if (stu[n].sumsum<stu[j].sumsum){stutemp=stu[j];stu[j]=stu[n];stu[n]=stutemp;}}cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";for (j=0;j<i;j++)cout<<setw(8)<<stu[j].id<<setw(8)<<stu[j].name<<setw(6)<<stu[j].sex<<setw(8)<<stu[j].sumsum<<setw(10)<<stu[j].average<<endl;break;case 11:p=will.first;for(i=0;i<20&&p!=NULL;i++,p=p->next){for (j=0;j<20;j++){stu[i].id[j]=p->id[j];}for (j=0;j<10;j++){stu[i].name[j]=p->name[j];}for (j=0;j<10;j++){stu[i].sex[j]=p->sex[j];}stu[i].sumsum=p->outsum();stu[i].average=p->outav();for(j=0;j<5;j++)stu[i].grade[j]=p->grade[j];}for(n=0;n<i-1;n++)for(j=1;j<i;j++){if (stu[n].id>stu[j].id){stutemp=stu[j];stu[j]=stu[n];stu[n]=stutemp;}}cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础"<<setw(6)<<"物理"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<endl;for (j=0;j<i;j++)cout<<setw(8)<<stu[j].id<<setw(8)<<stu[j].name<<setw(6)<<stu[j].sex<<setw(6)<<stu[j].grade[0]<<setw(6)<<stu[j].grade[1]<<setw(6)<<stu[j].grade[2]<<setw(14)<<stu[j].grade[3]<<setw(6)<<stu[j].grade[4]<<setw(8)<<stu[j].sumsum<<setw(10)<<stu[j].average<<endl;cout<<"\n 输入1.将上述信息保存成文件;      输入0:返回"<<endl;cin>>m;if (m==1){cout<<"请输入文件名:"<<endl;cin>>file;cout<<"请输入班级名称:"<<endl;cin>>classname;output.open(file);output<<classname<<"成绩单"<<endl<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础"<<setw(6)<<"物理"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<endl;for(j=0;j<i;j++)output<<setw(8)<<stu[j].id<<setw(8)<<stu[j].name<<setw(6)<<stu[j].sex<<setw(6)<<stu[j].grade[0]<<setw(6)<<stu[j].grade[1]<<setw(6)<<stu[j].grade[2]<<setw(14)<<stu[j].grade[3]<<setw(6)<<stu[j].grade[4]<<setw(8)<<stu[j].sumsum<<setw(10)<<stu[j].average<<endl;output.close();}break;}cout<<"\n 输入1: 继续;     输入0: 退出\n";cin>>m;}while(m==1);}</span>


测试结果:

一:主界面



二:录入记录



三:查询记录



四:修改记录



五:删除记录



六:统计分析记录



七:总成绩和平均成绩查询记录



八:浏览记录



九:输出保存记录



0 0
原创粉丝点击