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

下载本文档

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

文档简介

高级程序设计实践报告课题名称:小型学生成绩管理系统姓名:小戴专业班级:电气1207学号:0909120700指导老师:向老师上课时间:6.24~7.4课程设计目的1、使学生进一步理解和掌握课堂上所学各种根本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;2、使学生掌握软件设计的根本内容和设计方法,并培养学生进行标准化软件设计的能力;3、使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的根本能力。二.设计要求1、需要处理的根底数据1〕学生根本信息:如班级、学号、姓名、性别、年龄、宿舍号码、号码等。2〕学生选修课程的根本信息:课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。2、系统的根本功能*数据的录入:如录入学生的根本信息,以及该学生选修课程的根本信息;*数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其选修课程信息;*数据的插入:插入某个学生信息;*数据的查询:如按学号查询、按姓名查询等;*数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息;*平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息;*列出不及格学生清单〔学号、姓名、不及格的课程和成绩〕。*考虑用文件把数据保存起来〔可选〕。三.概要设计1.整体框架:整个学生成绩管理系统采用链表作为根本数据结构,创立一个类student用于保存学生的数据且是链表中的一个节点。类list作为保存整个链表之用。主函数通过switch语句来根据用户的需要连接各个模块,以实现用户的需要。2.模块根本介绍:1〕.用户输入模块在此模块中,用户将根据菜单提示结合自己的需求输入一个0~8的值,来实现一定的功能。2〕.学生信息录入模块此模块可以让用户从键盘输入每个学生的信息:学号、姓名、性别、各门课程的成绩。用户可插入一个或多个学生信息到当前编辑的班级数据中。用户可删除一个或多个学生信息。3〕.文件保存功能模块用户在确定以录入的成绩无误之后,可以将学生信息以每一班为单位存为一个数据文件。用户输入的学生信息可随时保存数据文件。4〕.文件翻开功能模块用户可以用此模块将数据文件在程序中翻开、编辑,程序只能对当前翻开的数据文件进行编辑。5〕.查询功能模块在此模块里,用户可实现以下操作:1.浏览所有学生信息;2.按学号查询学生信息;3.按姓名查询学生信息;4.查询一个班每个人的总成绩和平均成绩;5.查询一个班某一门课每个人的总成绩和平均成绩;6.列出不及格清单。6〕.报表输出功能模块在此模块中,用户可以浏览所有学生的信息,或者可以按学号输出一个班学生信息:学号、姓名、性别、各门课成绩和总成绩,到屏幕和文件。也可以按平均成绩输出从高到低输出学号、姓名信息。3.模块图:四.详细设计主要功能模块的算法设计思路:1.用户输入模块设计提示用户输入一个0~8的值,并存储在一个整型变量m中。2.学生信息录入模块设计通过应用list中的instu()函数,来新建一个链表中的节点,即一个新的学生信息,来进行成绩的录入功能。成绩修改功能,可以根据姓名或学号进行查询并修改相应的课程的成绩,使用了voidsearch(chars[10],int)和voidsearch1(chars[20],int)函数进行操作。search函数根据姓名查找,search1函数根据学号进行查找。因为学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比拟进行查找的。然后根据整形参数进行对应的课程成绩的修改。成绩删除功能,也是可以根据姓名或学号进行删除,查询的算法和成绩修改功能的查询方法是一样的,当找到要删除的节点时,因为节点都是在堆内存中保存的,所以可以直接delete掉,并将前一个节点的next指针指向被删掉的节点的next指针所指向的节点。3.文件保存功能模块先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级名称和成绩单的开头,然后通过ofstream变量output来进行学生信息的输出,一项一项的输出,并设定格式,直到输出节点为NULL为止,之后关闭output。4.查询功能模块可以根据姓名或学号进行查找,搜索方法和前几个模块相同。通过outstu1(char*n)和outstu(char*n)来进行输出。总成绩和平均成绩的查询通过函数voidoutsum(char*)和voidoutsum1(char*)来完成。通过函数scanall()来浏览所有学生的信息。通过函数think()来进行成绩的统计分析。5.报表输出功能模块通过建立一个新的类classstucopy用于拷贝student的数据,并实现排序功能。创立一个stucopystu[M]数组,将原链表的数据拷贝与数组中,然后用选择排序方法将数组排序,然后用output按照标准的格式输出或保存为数据文件。五.运行结果〔1〕信息的录入〔2〕成绩的查询〔3〕成绩的修改〔4〕数据的删除〔5〕列出不及格清单〔6〕浏览所有学生信息〔7〕保存文件〔8〕按平均成绩排序输出学生信息六.心得体会虽说已经有过一次程序设计的经历,但这次的难度显然是比上次要大的多的。本此程序设计所用时间较长,工作量很大,且所涉及的知识很多,光凭我们在课堂上学的知识是远远不够的。开始的时候我还是很期待这次挑战的,但当我真正着手筹划设计的时候,才发现有些东西已经超过了自己的能力范围了,但这并不意味着我会因此放弃,接着我就去接了几本相关的书籍,在遇到问题的时候我就会去查阅,也确实解决了一些问题,但显然还有许多问题无从下手,这时就不得不向大神求助了。我觉得在编写程序时需要的是灵感,有时苦坐数个小时什么都没做,但有时在夜深人静的时候却一下子解决了好多问题,虽然熬得很晚,却很值得。为了这个程序设计确实是忙活了好久,总算勉强完成了。我相信我收获的绝不仅仅是一个程序,还有在思维上的锻炼,以及编写能力的提高。总而言之,我觉得这次课程设计很有意义,很有价值。附录:#include<iostream.h>#include<string.h>#include<iomanip.h>#include<fstream.h>intgrade_number;//课程数constintM=20;classstucopy//此类用于拷贝student的数据,用于排序功能的实现{public:charid[20];charsex[10];charname[10];charcourse[5];//课程编号doublegrade[2][5]; doublesumsum;//总成绩 doubleaverage;//平均成绩doublexuefen;charage[5];chardorm[5];chartele[20];};classstudent//用于保存学生信息的类{friendclasslist;public:charid[20];//保存学号charsex[10];//保存性别charname[10];//保存名字doublegrade[2][5];//保存成绩charcourse[5];//保存课程编号doublexuefen;charage[5];chardorm[5];chartele[20];student(){next=0;for(inti=0;i<20;i++) id[i]=0;for(inti=0;i<10;i++) sex[i]=0;for(inti=0;i<10;i++) name[i]=0;for(inti=0;i<5;i++)age[i]=0;for(inti=0;i<5;i++)dorm[i]=0;for(inti=0;i<20;i++)tele[i]=0;}voids();voidsetid(charid1[20]){for(inti=0;i<20;i++)id[i]=id1[i];}voidsetsex(charsex1[10]){for(inti=0;i<10;i++)sex[i]=sex1[i];}voidsetname(charname1[10]){for(inti=0;i<10;i++)name[i]=name1[i];}voidsetage(intage1[5]){for(inti=0;i<5;i++)age[i]=age1[i];}voidsetdorm(intdorm1[5]){for(inti=0;i<5;i++)dorm[i]=dorm1[i];}voidsettele(inttele1[5]){for(inti=0;i<5;i++)tele[i]=tele1[i];}voidsetcourse(intcourse1[5]){for(inti=0;i<5;i++)course[i]=course1[i];}student*next;//next指向下一个学生,构成链表char*outid(){returnid;}char*outsex(){returnsex;}char*outname(){returnname;}char*outage(){returnage;}char*outdorm(){returndorm;}char*outtele(){returntele;}doubleoutav(){returnthis->outsum()/grade_number;}doubleoutgrade(inti){returngrade[2][i]=grade[0][i]*0.3+grade[1][i]*0.7;}charoutcourse(inti){returncourse[i];}voidintgrade(int);doubleoutsum(){doublesum=0;for(inti=0;i<grade_number;i++)sum+=this->outgrade(i);returnsum;}};voidstudent::s()//用于录入学生的信息{cout<<"请输入课程数:"<<endl;cin>>grade_number;cout<<"请输入学号:"<<endl;cin>>id;cout<<"请输入姓名:"<<endl;cin>>name;cout<<"请输入性别:"<<endl;cin>>sex;cout<<"请输入年龄:"<<endl;cin>>age;cout<<"请输入宿舍号:"<<endl;cin>>dorm;cout<<"请输入:"<<endl;cin>>tele;for(inti=0;i<grade_number;i++){cout<<"请输入课程编号:"<<endl;cin>>course[i];cout<<"学分:"<<endl;cin>>xuefen;cout<<"平时成绩:"<<endl;cin>>grade[0][i];if(grade[0][i]>100||grade[0][i]<0){cout<<"请输入0~100之间的数!"<<endl;cout<<"请重新输入:"<<endl;cin>>grade[0][i];}cout<<"考试成绩"<<endl;cin>>grade[1][i];if(grade[1][i]>100||grade[1][i]<0){cout<<"请输入0~100之间的数!"<<endl;cout<<"请重新输入:"<<endl;cin>>grade[1][i];}}}voidstudent::intgrade(intj)//用于修改学生的成绩{for(inti=0;i<grade_number;i++)if(j==i+1){cout<<"平时成绩"<<endl;cin>>grade[0][i];if(grade[0][i]>100||grade[0][i]<0){cout<<"请输入0~100之间的数!"<<endl;cout<<"请重新输入:"<<endl;cin>>grade[0][i];}cout<<"考试成绩"<<endl;cin>>grade[1][i];if(grade[1][i]>100||grade[1][i]<0){cout<<"请输入0~100之间的数!"<<endl;cout<<"请重新输入:"<<endl;cin>>grade[1][i];} }}classlist//此类为链表{public:student*last,*first;//链表的开头和结尾doubletotoal;list(){last=0;first=0;};~list();voidinstu();//新建一个学生的数据voidoutstu(char*);//根据姓名输出一个学生的信息intdelstu(char*n);//根据姓名删除一个学生的信息voidoutstu1(char*);//根据学号输出一个学生的信息intdelstu1(char*n);//根据学号删除一个学生的信息voidoutsum(char*);//根据姓名输出一个学生的总成绩和平均成绩voidoutsum1(char*);//根据学号输出一个学生的总成绩和平均成绩voidthink();//用于输出班级成绩的统计分析voidsearch(chars[10],int);//根据姓名修改一个学生的成绩voidsearch1(chars[20],int);//根据学号修改一个学生的成绩voidscanall();//输出所有学生的信息};list::~list()//析构函数,将所有创立的学生对象删掉{if(first!=0){student*p=first,*temp;while(p!=NULL){temp=p;p=p->next;deletetemp;cout<<"ok"<<endl;}}}voidlist::instu(){student*p=newstudent();p->s();if(first==0){first=last=p;}else{last->next=p;last=p;}}voidlist::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(8)<<"性别"<<setw(8)<<"年龄"<<setw(8)<<"宿舍号"<<setw(8)<<"";for(inti=0;i<grade_number;i++) {cout<<setw(8)<<temp->outcourse(i);}cout<<endl; cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8)<<temp->outsex() <<setw(8)<<temp->outage()<<setw(8)<<temp->outdorm()<<setw(8)<<temp->outtele();;for(inti=0;i<grade_number;i++) {cout<<setw(8)<<temp->outgrade(i);}return; }cout<<"查无此人!"<<endl;return;}voidlist::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(8)<<"性别"<<setw(8)<<"年龄"<<setw(8)<<"宿舍号"<<setw(14)<<"";for(inti=0;i<grade_number;i++) {cout<<setw(8)<<temp->outcourse(i);}cout<<endl; cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8)<<temp->outsex() <<setw(8)<<temp->outage()<<setw(8)<<temp->outdorm()<<setw(14)<<temp->outtele();for(inti=0;i<grade_number;i++) {cout<<setw(8)<<temp->outgrade(i);}return; }cout<<"查无此人!"<<endl;return;}intlist::delstu(char*n)//删除学生成绩{ if(first==0){cout<<"无数据!"<<endl;return0;}student*temp=first;student*p;if(strcmp(first->outname(),n)==0){first=first->next;deletetemp;cout<<"\n删除成功\n";return0;}elsefor(;temp->next!=NULL;temp=temp->next) {if(strcmp(temp->next->outname(),n)==0) {p=temp->next;temp->next=temp->next->next;deletep;cout<<"\n删除成功\n";return0;}}cout<<"\n查无此人,删除失败\n";return0;}intlist::delstu1(char*n){ if(first==0){cout<<"无数据!"<<endl;return0;}student*temp=first;student*p;if(strcmp(first->outid(),n)==0){first=first->next;deletetemp;cout<<"\n删除成功\n";return0;}elsewhile(temp->next!=NULL) {if(strcmp(temp->next->outid(),n)==0) {p=temp->next;temp->next=temp->next->next;deletep;cout<<"\n删除成功\n";return0;}elsetemp=temp->next;}cout<<"\n查无此人,删除失败\n";return0;}voidlist::think()//列出不及格清单{cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(14)<<"不及格的课程"<<setw(8)<<"成绩"<<setw(8)<<"重修否"<<endl;student*p=first;for(;p!=NULL;p=p->next)for(intj=0;j<grade_number;j++){if(p->grade[2][j]<60){cout<<setw(8)<<p->outid()<<setw(8)<<p->outname()<<setw(14) <<p->course[j]<<setw(8)<<p->grade[2][j]<<setw(8)<<"重修"<<endl;}}}voidlist::search(chars[10],intn)//根据姓名修改{student*temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outname(),s)==0)temp->intgrade(n);}voidlist::search1(chars[20],intn)//根据学号修改{student*temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outid(),s)==0)temp->intgrade(n);}voidlist::scanall(){ if(first==0){cout<<"班级无成员!查无此人!"<<endl;return;}student*temp=first;for(;temp!=NULL;temp=temp->next) {cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别";for(inti=0;i<grade_number;i++) {cout<<setw(8)<<temp->outcourse(i);}cout<<endl;cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8)<<temp->outsex();for(inti=0;i<grade_number;i++) {cout<<setw(8)<<temp->outgrade(i);}cout<<endl; }}intmain(){stucopystu[M];//复制整个链表的数据于数组,用于排序stucopystutemp;//临时变量 listwill;//整个链表 student*p,*p1=newstudent(),*q;//临时变量ifstreaminput;//输入ofstreamoutput;//输出 charfile[20],classname[20],temp[80],id[20],name[9],sex1[10],age[5],dorm[5],tele[20];//临时变量intm=0,n=0,j=0,i=0;//临时变量 doublegrade1[2][5];//临时变量charcourse1[10];for(i=0;i<20;i++)id[i]=0; for(i=0;i<9;i++)name[i]=0;//初始化do{cout<<"小型学生成绩管理系统"<<endl;cout<<"******************************************************************"<<endl<<"*1成绩的录入:包括学生学号、姓名、性别和各门课程成绩的录入。*"<<endl<<"*2成绩的查询:可以根据学号或姓名查询某个学生的成绩。*"<<endl<<"*3成绩的修改:可以根据学号或姓名来修改相应的学生的成绩。*"<<endl<<"*4数据的删除:可以根据学号或姓名指定删除某个学生的数据。*"<<endl<<"*5列出不及格学生清单〔学号、姓名、不及格的课程和成绩〕。*"<<endl<<"*6浏览所有学生信息。*"<<endl<<"*7将所有学生信息保存成文件。*"<<endl<<"*8按平均成绩排序输出学生信息。*"<<endl<<"******************************************************************"<<endl;cout<<endl<<"请输入:";cin>>m;switch(m){case1:will.instu();break;case2:cout<<"1.根据学号查询2.根据姓名查询"<<endl<<"请输入:";cin>>n;switch(n){case1:cout<<"请输入学号\n";cin>>id;will.outstu1(id);cout<<endl;break;case2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);cout<<endl;break;}break;case3:do{cout<<"1.根据学号修改2.根据姓名修改"<<endl<<"请输入:";cin>>n;switch(n){case1:cout<<"请输入学号\n";cin>>id;will.outstu1(id);cout<<endl;cout<<"请输入课程编号:";cin>>j;will.search1(id,j);break;case2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);cout<<endl;for(inti=0;i<grade_number;i++){cout<<"请输入课程名:"<<endl;cin>>p->course[i];cout<<"平时成绩"<<endl;cin>>p->grade[0][i];cout<<"考试成绩"<<endl;cin>>p->grade[1][i];}cout<<"请输入课程编号:";cin>>j;will.search(name,j);break;}cout<<endl<<"输入1:继续修改输入0:退出修改"<<endl;cin>>m;}while(m==1);break;case4:cout<<"1.根据学号删除2.根据姓名删除"<<endl<<"请输入:";cin>>n;switch(n){case1:cout<<"请输入学号\n";cin>>id;will.outstu1(id);will.delstu1(id);break;case2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);will.delstu(name);break;}break;case5:will.think();break;case6:will.scanall();break;case7:cout<<"请输入文件名:"<<endl;cin>>file;cout<<"请输入班级名称:"<<endl;cin>>classname;output.open(file); p=will.first; output<<classname<<"成绩单"<<endl<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别";

温馨提示

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

评论

0/150

提交评论