收藏 分销(赏)

c++成绩管理系统.doc

上传人:pc****0 文档编号:7146906 上传时间:2024-12-27 格式:DOC 页数:15 大小:20.52KB 下载积分:10 金币
下载 相关 举报
c++成绩管理系统.doc_第1页
第1页 / 共15页
c++成绩管理系统.doc_第2页
第2页 / 共15页


点击查看更多>>
资源描述
#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:utstu(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); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服