C++学生成绩管理系统代码_第1页
C++学生成绩管理系统代码_第2页
C++学生成绩管理系统代码_第3页
C++学生成绩管理系统代码_第4页
C++学生成绩管理系统代码_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、代码:/*学生成绩管理系统*类:Student Score Manage*可保存学科:语文 数学 英语*时间段:大一至大四*说明:该程序针对学生数较少的情况,假如面对上千上万的学生数,应该再将其中的存储结构进行改变,* 分别分层次存储,例如大一至大四四个链表表头,在每一个链表中又根据不同分类依据细分,* 例如根据学院、专业等,这样的改变将大大有利于程序进行的寻找、输出、排序等涉及链表的操作,* 当然相应代码也要稍作改变*/#include<iostream>#include<string>#include<fstream>#include<sstrea

2、m>#include<iomanip>#include<conio.h>#include<windows.h>#include<vector>using namespace std;#define CONOBJ 3 /3科科目#define YEARS 4 /4个学年#define SET 4 /4个设置要求class Scorepublic:int scoreCONOBJ; /chinese,math,english三科目分别对应order0、order1、order2,每个学期两次考试,分为期中和期末考试int orderCONOBJ;

3、 /MAX科学科排名int ConOrder; /总排名Score *next; /定义在学生类当中Score()next=NULL;int i;for(i=0;i<CONOBJ;i+)scorei=0;orderi=0;ConOrder=0;/无参构造函数Score(int *sc)next=NULL;int i;for(i=0;i<CONOBJ;i+)scorei=*sc;orderi=0;sc+;ConOrder=0;/只有成绩的构造函数Score(int *sc,int*or,int Con)next=NULL;int j;for(j=0;j<CONOBJ;j+)sc

4、orej=*sc;orderj=*or;sc+;or+;ConOrder=Con;/含全部参数的构造函数int ReturnConScore() /返回总分数return score0+score1+score2;/=class Student/*Student类中包含Score类*用来存储众多的成绩,每个学期两次成绩, 每学年两个学期*/Score *sco; string name;string pro; /专业int clas;int grade;string num;char sex;Student* next;public:/*几个不同参数的Student构造函数的重载,*分别对应不

5、同形式的构造方式*/ Student(string iname):name(iname),next(NULL)sco=NULL; cout<<"tttt成功添加学生"<<name<<"n"/1.单参数时的构造函数Student(string iname="No name",string ipro="none",int iclass=0,int igrade=0,string inum="0",char isex='n'):name(iname)

6、,num(inum),sex(isex),next(NULL),pro(ipro),clas(iclass),grade(igrade)sco=NULL; cout<<"tttt成功添加学生"<<name<<"n"return;/2.用于添加无输入成绩的构造函数Student(string iname,string ipro,int iclas,int igrade,string inum,char isex,int *score):name(iname),pro(ipro),clas(iclas),grade(igr

7、ade),num(inum),sex(isex),next(NULL)sco=new Score(score);cout<<"tttt成功添加学生"<<name<<"n"/3.用于添加有成绩的构造函数 Student(string iname,string ipro,int iclas,int igrade,string inum,char isex,int *score,int conor,int *order):name(iname),pro(ipro),clas(iclas),grade(igrade),num(

8、inum),sex(isex),next(NULL)sco=new Score(score,order,conor);/4.用于从文件读入时候的构造函数int CountOfScore(); /统计已经存储的成绩数量,每个学期两次考试,每次考试算作一次成绩录入 成绩录入总计= 4*igradefriend class Manage; ;/=class Manageint setSET;Student* stu; /*记录是否执行了修改学生信息操作,等于'n'表示未修改信息或者修改完了但已经保存,等于'y'表示已经修改并且还未保存*/char judgeOfAdd

9、;public:Manage()stu=NULL;/*for(int i=0;i<SET;i+)seti=1;*/ judgeOfAdd='n'Start();Manage() /删除所有记录,释放空间Student* p=stu;while(p)p=p->next;delete p;stu=NULL;Student* ReturnStu()return stu;/添加void Add(); /添加学生 void AddScore(Student *istudent); /添加成绩 /浏览 int isEmpty(); int infoPass(string inu

10、m,string iname,char isex,int igrade,int iclas);void SkimAll(); void SkimClas(); void SkimPro(); void SpecSkim(); /指定的其他浏览方式void SkimByScore();void SkimByTerms();void SkimByPlace();void SkimByTest();void SkimByGrade(int igrade); void Find(string T); /查找void PrintAllScore(Score *q);/打印成绩,本程序用来打印第二次开始的

11、考试成绩void InitScore(); /未给出成绩的学生进行 0 赋值void Delete(); /删除void Edit(string Y); /编辑void EditScore(Student *istu);void OrderConscore(); /按总成绩排序void OrderObject(); /排名次void Compare(); /比较 void Save(); /保存int Read(); /读取 string OfProfe(); /选择学院专业int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,L

12、PSTR lpszCmdParam,int nCmdShow); /显示欢迎对话框int countSpecStudent(int igrade); /返回指定年级的学生数int countConStudent(); /返回总学生数/默认设置void DefaultSetting();/进行默认设置 void ReadSet(); /读取默认设置void SaveSet(); /保存默认设置int* ReturnSet(); char ReturnjudgeOfadd();void JudgeOfSave(); /判断是否保存已修改的信息void Start(); /类内部开始运行的操作voi

13、d Interface(); /用户使用界面;/=/Student名空间中的成员函数的函数定义int Student:CountOfScore()Score *p=sco;int i;for(i=0;p;p=p->next,i+);return i;/=/=/Manage名空间中的成员函数的函数定义int* Manage:ReturnSet() return set;/-char Manage:ReturnjudgeOfadd() return judgeOfAdd;/-int Manage:countSpecStudent(int igrade) /返回指定年级的学生数Student

14、*p=stu;int count=0;for(;p!=NULL;p=p->next)if(p->grade=igrade)count+;return count;/-int Manage:countConStudent() /返回总学生数int count=0;for(int i=0;i<CONOBJ;i+)count+=countSpecStudent(i+1);return count;void Manage:AddScore(Student *istudent)system("CLS");/*if(!(istudent->CountOfScor

15、e()<istudent->grade*4) /成绩已经输入满了char judge;cout<<"成绩已经输入完整,不需要再添加修改Y/返回N:"cin>>judge;if(!(judge='Y'|judge='y')return ;*/int i,judge_grade,judge_term;char flag='y',judge_input='y'Score *temp;for(judge_grade=1;judge_grade<=istudent->gra

16、de;judge_grade+)for(judge_term=1;judge_term<=4;judge_term+)/由用户选择是否继续输入printf("n*是否输入大%d第%d次考试成绩是(y)/否(n)/返回(r):",judge_grade,judge_term);cin>>judge_input;if(judge_input='y'|judge_input='Y')printf("n请输入大%d第%d次考试成绩:n",judge_grade,judge_term); /abs(istudent

17、->CountOfScore()-(istudent->grade-1)*4+1)/输入成绩int scoreCONOBJ;for(i=0;i<CONOBJ;i+)if(i=0)cout<<"输入语文成绩:"else if(i=1)cout<<"输入数学成绩:"elsecout<<"输入英语成绩:"cin>>scorei;temp=new Score(score);else if(judge_input='n'|judge_input='N

18、9;)temp=new Score(); /不输入成绩的学生会自动赋分数为0elsereturn ;/返回/做连接操作if(istudent->sco=NULL)istudent->sco=temp;elseScore *p=istudent->sco;while(p->next!=NULL)p=p->next;p->next=temp;temp->next=NULL;/-void Manage:Compare() /比较/-void Manage:OrderObject() /各科目成绩排名次,赋值给score类中的orderif(!isEmpty(

19、)return ; Student *p,*pp;Score *qp,*qpp;int score,ch,ma,eng,igrade=1,times,count=0,c1=0,c2=0,c3=0;while(igrade<=YEARS)if(countSpecStudent(igrade)=0)igrade+;continue;p=stu;times=1; while(times <= igrade*4)p=stu;c1+;/-核心部分-/while(p!=NULL) /p的循环是保证每个学生都进行成绩排序count+;if(p->grade=igrade)qp=p->

20、sco; /qp指向该次所要排成绩的学生的成绩开头处for(int j=0;j<times-1;j+)qp=qp->next;/qpp=qpp->next;/*初始化及更新操作*/qp->ConOrder=countSpecStudent(igrade); /不同年级学生数for(int i=0;i<CONOBJ;i+)qp->orderi=qp->ConOrder; /减少函数而调用采用的方法score=qp->ReturnConScore();ch=qp->score0;ma=qp->score1;eng=qp->score

21、2;pp=stu; /每一次都从头开始进行比较while(pp!=NULL)c3+;if(pp->grade=igrade && pp->num!=p->num)qpp=pp->sco;for(int j=0;j<times-1;j+)qpp=qpp->next;if(qpp->ReturnConScore() <= score)qp->ConOrder-;if(qpp->score0 <= ch)qp->order0-; if(qpp->score1 <= ma)qp->order1-;

22、if(qpp->score2 <= eng)qp->order2-;pp=pp->next;/cout<<p->name<<" "p=p->next;times+;igrade+;/-int WINAPI Manage:WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)MessageBox(NULL,/count,"您好,欢迎使用!","学生成绩管理系统",MB_OK

23、 | MB_ICONINFORMATION);return 0;/-string Manage:OfProfe() /选择学院专业int kh;string i; cout<<"nttn"cout<<"tt 1.工学院 n"cout<<"ttn"cout<<"tt 2.理学院 n"cout<<"ttn"cout<<"tt 3.医学院 n"cout<<"ttn"cout<

24、;<"tt 4.农学院 n"cout<<"ttn"cout<<"tt 5.经管学院 n"cout<<"ttn"cout<<"tt 0.退出选择 n"cout<<"tt n"docout<<" tt请输入相应学院代号:"cin>>kh;while(!(kh>=0&&kh<6);cout<<"t*n"switch

25、 (kh)case 1:cout<<"t* 11.数字媒体技术n" cout<<"t* 12.土木工程n" cout<<"t* 13.建筑学n" cout<<"t* 14.化学工程工艺n" break;case 2:cout<<"t* 21.化学系n"cout<<"t* 22.地理工程n"cout<<"t* 23.环境工程n" break;case 3:cout<&l

26、t;"t* 31.临床医学n"cout<<"t* 32.麻醉学n"cout<<"t* 33.影像学n" break;case 4:cout<<"t* 41.院农业机械n"cout<<"t* 42.水产养殖n" break;case 5:cout<<"t* 51.经济学n"cout<<"t* 52.国际经济贸易n"cout<<"t* 53.金融学n" br

27、eak;int ch;cout<<"t* 0.返回n"cout<<"t*n"do cout<<"t请输入相应专业代号:"cin>>ch;if(ch=0)i=OfProfe();return i;while(!(ch%10>0&&ch%10<4&&ch!=43&&ch/10=kh)|(ch=14&&ch/10=kh); cout<<"t*n" switch (ch)case 11:i

28、="数字媒体技术" break;case 12:i="土木工程" break;case 13:i="建筑学" break;case 14:i="化学工程工艺" break;case 21:i="化学系" break;case 22:i="地理工程" break;case 23:i="环境工程" break;case 31:i="临床医学" break;case 32:i="麻醉学" break;case 33:i=&

29、quot;影像学" break;case 41:i="农业机械" break;case 42:i="水产养殖" break;case 51:i="经济学" break;case 52:i="国际经济贸易" break;case 53:i="金融学" break;default:cout<<"t输入错误。" int judge=1; cout<<"t已经选择""<<i<<"专业&q

30、uot;,是否确定?nt* *nt是(1) 否(0)nt* *"cout<<"nt请选择:" cin>>judge;while(!judge) i=OfProfe();return i;/-int Manage:infoPass(string inum,string iname,char isex,int igrade,int iclas)int value=atoi(inum.c_str(),legal=1,count=1;cout<<"nn信息输入合法性:n"if(!(igrade>=1 &

31、& igrade<=4)cout<<count<<":年级输入不合法,请输入大一大四n"legal=0;count+;else if(!(value >= igrade*10000 && value <= igrade*10000+9999)cout<<count<<":学号输入不正确大一(1000019999)/大二(2000029999).n"legal=0;count+;if(!(iclas>=1 && iclas<=99)cout

32、<<count<<":班级输入不合法,请输入199n"legal=0;count+;if(isex!='w' && isex!='m')cout<<count<<":请输入正确性别,男生-m,女生-wn"legal=0;count+;if(iname.length()>2)cout<<count<<":姓名输入不宜过长n"legal=0;if(count=1)cout<<"ttt输入合法n

33、n"return legal;/-void Manage:Add()system("CLS");Student *p=stu,*q=NULL,*save=NULL;string inum,iname,ipro;int igrade,iclas,count=0;char flag,isex,see='y'if(stu=NULL)cout<<"ttt >>*还没有学生信息!*<<"while(see='y') /备注:循环,判断是否多次输入count+;cout<<en

34、dl<<count<<".n"<<"请输入学号: "cin>>inum;p=stu;while(p) /寻找是否已经存在该学生if(p->num=inum)Find(inum); cout<<"n 提示:该学生已经存在!是否修改信息?(Y/N):" cin>>flag;if(flag='Y'|flag='y') system("CLS");cout<<"ttt 学生及成绩录入n&quo

35、t;Edit(inum); break;save=p;p=p->next;if(p=NULL) /说明没有以上学号的学生,p移动到了链表尽头cout<<"请输入姓名: "cin>>iname;cout<<"请输入性别(男-m/女-w):"cin>>isex; cout<<"请输入年级(大一:1): "cin>>igrade; cout<<"请输入班级: "cin>>iclas;if(!(infoPass(inum,

36、iname,isex,igrade,iclas)cout<<"nttt*是否重新输入Y/N"char judgeOfIn;cin>>judgeOfIn;if(judgeOfIn='y'|judgeOfIn='Y')Add();elsereturn ;cout<<"-n"cout<<"请选择学院及专业:"ipro=OfProfe();cout<<"t已选择:"<<ipro<<"n"c

37、out<<"-n"q=new Student(iname,ipro,iclas,igrade,inum,isex);cout<<"ttt *>>去输入成绩?(Y/N):"while(getchar()!='n'); /cin.clear();cin>>flag;if(flag='Y'|flag='y')AddScore(q);system("CLS");judgeOfAdd='y'if(stu)save->next=q

38、;q->next=NULL;elsestu=q; stu->next=NULL; cout<<"tttt是否继续添加?(Y/N):" cin>>see;InitScore();/OrderConscore();OrderObject();cout<<"tttt按任意键返回->"getch();/-int Manage:isEmpty()char flag;Student *p=stu;if(!stu)cout<<"nttt提示:信息为空!去输入吗?(Y/N):"cin&

39、gt;>flag;if(flag='Y'|flag='y')Add();system("CLS");return 1;elsereturn 0; /空elsereturn 1; /非空/-void Manage:PrintAllScore(Score *q) /打印从大一第二次开始的所有成绩while(q!=NULL) /当学生成绩为空时候,即q=NULL,所以此时q!=NULL的判断在q->next!=NULL的前面,保证了程序的准确性cout<<" "<<setw(1)<<

40、;q->score0<<"/"<<q->order0<<" "<<setw(1)<<q->score1<<"/"<<q->order1<<" "<<setw(1)<<q->score2<<"/"<<q->order2<<" "cout<<setw(3)<<q-&g

41、t;ReturnConScore()/3.0<<" "<<setw(2)<<q->ReturnConScore()<<" "<<setw(3)<<q->ConOrder<<" "<<"n" q=q->next;/-void Manage:SkimClas() /班级if(isEmpty()Student *p=stu;int k;cout<<"你可以选择以下班级:"dok

42、=p->clas;cout<<k<<" "dop=p->next;while(p!=NULL&&k=p->clas);while(p!=NULL);cout<<endl<<"请输入班级:"cin>>k;p=stu;while(p!=NULL&&k!=p->clas) /两个不能对调p=p->next;if(p=NULL)cout<<"输入错误,无该班级。n"cout<<"tttt*

43、n"<<"tttt按任意键返回或继续"<<"ntttt*"getch(); return ;cout<<" n"/ cout<<" 基本信息 成绩/单科排名 n"cout<<" n"cout<<" 姓名 学号 年/班 专业 语文数学英语平均 总分名次n"cout<<" n"p=stu;while(p!=NULL) while(p!=NULL&&p-

44、>clas!=k)p=p->next;if(p!=NULL)cout.left;cout<<" "<<setw(4)<<p->name<<" "<<setw(5)<<p->num<<" "<<setw(3)<<p->grade<<"/"<<p->clas<<" "<<setw(13)<<p-&g

45、t;pro<<" "<<setw(1)<<p->sco->score0<<"/"<<p->sco->order0<<" "<<setw(1)<<p->sco->score1<<"/"<<p->sco->order1<<" "<<setw(1)<<p->sco->score2<&

46、lt;"/"<<p->sco->order2<<" "cout.precision(2);cout<<setw(3)<<p->sco->ReturnConScore()/3.0<<" "<<setw(2)<<p->sco->ReturnConScore()<<" "<<setw(3)<<p->sco->ConOrder<<" &

47、quot;<<"n"PrintAllScore(p->sco->next);elsebreak;p=p->next;cout<<" n"cout<<"tttt*n"<<"tttt按任意键返回或继续"<<"ntttt*"getch(); /-void Manage:SkimPro() /专业 if(isEmpty()Student *p=stu;string i;i=OfProfe();while(p!=NULL&

48、;&i!=p->pro) /这两个顺序不能对调 一旦判断p=NULL就不会进行后面一个判断了 否则会出错p=p->next;if(p=NULL)cout<<"tttt该专业暂时无学生就读。n"cout<<"tttt*n"<<"tttt按任意键返回或继续"<<"ntttt*"getch(); return ;system("CLS");cout<<" n"/ cout<<" 基

49、本信息 成绩/单科排名 n"cout<<" n"cout<<" 姓名 学号 年/班 专业 语文数学英语平均 总分名次n"cout<<" n"while(p!=NULL) while(p!=NULL&&p->pro!=i)p=p->next;if(p!=NULL)cout.left;cout<<" "<<setw(4)<<p->name<<" "<<setw(

50、5)<<p->num<<" "<<setw(3)<<p->grade<<"/"<<p->clas<<" "<<setw(13)<<p->pro<<" "<<setw(1)<<p->sco->score0<<"/"<<p->sco->order0<<" "

51、;<<setw(1)<<p->sco->score1<<"/"<<p->sco->order1<<" "<<setw(1)<<p->sco->score2<<"/"<<p->sco->order2<<" "cout.precision(2);cout<<setw(3)<<p->sco->ReturnConScore

52、()/3.0<<" "<<setw(2)<<p->sco->ReturnConScore()<<" "<<setw(3)<<p->sco->ConOrder<<" "<<"n"PrintAllScore(p->sco->next);elsebreak;p=p->next;cout<<" n"cout<<"tttt*n"

53、;<<"tttt按任意键返回或继续"<<"ntttt*"getch(); /-void Manage:SkimAll() /全部int igrade=1;Student *p;char judge;Score *q;if(!isEmpty()return ;cout<<"tt是:显示详细信息,否:显示最近一次考试成绩【y/n】:"cin>>judge;while(igrade<YEARS+1)p=stu;cout<<"n大"<<igrad

54、e<<":n"cout<<" n"/ cout<<" 基本信息 成绩/单科排名 n"cout<<" n"cout<<" 姓名 学号 年/班 专业 语文数学英语平均 总分名次n"cout<<" n"while(p!=NULL) q=p->sco; if(p->grade=igrade)/打印姓名、学号、年级班级、专业cout.left;cout<<" "<&

55、lt;setw(4)<<p->name<<" "<<setw(5)<<p->num<<" "<<setw(3)<<p->grade<<"/"<<p->clas<<" "<<setw(13)<<p->pro;/判断是否有第一次考试成绩,并输出不同结果if(p->sco=NULL)cout<<" "<<setw(1)<<"-&quo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论