中南大学计算机课程设计--学生成绩管理系统
- 格式:doc
- 大小:973.51 KB
- 文档页数:39
机电工程学院中南大学C++可视化程序设计实践题目学生成绩管理系统成员姓名班级: 学号:成员姓名班级: 学号:指导教师夏建芳学院机电工程学院完成时间年月日目录一、设计任务书--------------------------------------------------------二、总体设计方案------------------------------------------------------三、成员设计内容简介--------------------------------------------------四、使用说明及运行实例------------------------------------------------五、项目源程序代码----------------------------------------------------六、课程设计心得------------------------------------------------------七、成绩评定表--------------------------------------------------------一、设计任务书《面向对象程序设计课程设计》是计算机科学与技术专业和软件工程专业集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
其目的在于加深对面向对象程序设计中基础理论和基本知识的理解,培养学生的实践能力,促进理论与实践的结合。
通过课程设计,让学生能够熟练运用C++进行面向对象编程,建立对象模型,降低软件的复杂性,改善软件的重用性和维护性,提高软件的生产效率,全面掌握面向对象编程技术。
任务要求1-3人一组(自由组合),明确分工。
(1)小组负责人一般进行总体设计(包括总体设计流程图、模块函数原型接口设计);(2)模块的程序设计由组长、成员分别完成,并独立调试自己的程序;(3)组长至少完成2个功能模块的设计,成员至少完成3个功能模块的设计;(4)模块组装调试共同完成。
鉴于此,本次以两人组队的方式展开。
项目从6月19日展开至6月26日结束,历时8天完成。
前期花费一天由小组组长进行总体设计;中期由组长和组员分别完成模块程序的设计,耗时7天;最后由组长完成报告。
通过本项目,意在完成一个可以对学生成绩进行各方面管理的系统(主要功能有见下文介绍),同时也将自己所学知识付诸实践,提高自己的能力。
二、总体设计方案1.设计思想(1)分析任务要求,完成系统的开始界面,也就是编写主函数;(2)分析系统中的各个实体及它们之间的关系;(3)选择适当的类,完成类的定义;(4)根据要求的系统功能,完成类中各个成员函数的定义;(5)完成系统的应用模块(功能函数);(6)将主函数与功能函数整合在一个程序中;(7)进行多次的功能调试,以查找纠正错误;(8)完成系统总结报告。
2.设计功能(1)添加学生记录;(2)删除学生记录;(3)显示学生记录;(4)查询学生记录;(5)统计学生记录;(6)排序学生记录;(7)修改学生记录;(8)退出管理系统(包含保存功能)。
3.设计程序流程图(1)层次调用(2)结构视图三、成员设计内容简介为了令程序保持清晰和整洁,防止出错,首先由组长根据任务要求选好头文件,同时设计好程序的基类以及main()函数。
然后各种功能实现所需的功能函数由组长和组员合作完成设计。
整个管理系统中,添加功能(adds())、删除功能(deletes())、显示功能(shows())、查询功能(inquires())、计算平均分函数(Caculateas())、计算总分函数(Caculatets())由组员xx完成。
剩下的打开函数(opens())、统计功能(statistics())、排序功能(ranks())、修改功能(changs())、退出及保存功能(exits())由组长xx完成。
经过两人的合作和努力,终于成功设计出了整个学生成绩管理系统。
四、使用说明及运行实例1.打开界面(1)没有源文件时(2)有源文件时2.添加功能(1)添加前(2)添加时(3)添加后2.删除功能(1)删除前(2)删除时(3)删除后3.显示功能4.查询功能5.统计功能6.排序功能(1)排序前(2)排序后7.修改功能(1)修改前(2)修改时(3)修改后8.退出并保存文件9.文件显示五、项目源程序代码#include<iostream>#include<fstream>#include<cstring>using namespace std;class student //学生类定义{public:int Num;char Name[7];char Sex[7];double Score[3];double Tscore,Ascore;void Register(int num,char * name,char * sex,double score[3],double ascore,double tscore);void Show();};void student::Register(int num,char*name,char * sex,double score[3],double ascore,double tscore){Num=num;strcpy(Name,name);strcpy(Sex,sex);Tscore=tscore;Ascore=ascore;for(int a=0;a<3;a++){Score[a]=score[a];}}void student::Show() //显示{cout<<"\t"<<Num<<"\t\t"<<Name<<"\t"<<Sex<<"\t";for(int a=0;a<3;a++){cout<<Score[a]<<"\t";}cout<<Ascore<<"\t"<<Tscore<<endl;}student stu[100];int count=0;double Caculateas(double * b); //计算平均分double Caculatets(double * b); //计算总分void opens(); //打开文件void adds(); //增加void deletes(); //删除void shows(); //显示void inquires(); //查询void statistics(); //统计void ranks(); //排序void changs(); //修改void exits(); //退出并将数据存在文件中int main() //主函数{int select;opens();while(1){cout<<"\n\n";cout<<" 《欢迎使用学生管理系统》\n\n";cout<<"*********************************************************************** *********"<<endl;cout<<" 1:添加学生记录"<<endl;cout<<" 2:删除学生记录"<<endl;cout<<" 3:显示学生记录"<<endl;cout<<" 4:查询学生记录"<<endl;cout<<" 5:统计学生记录"<<endl;cout<<" 6:排序学生记录"<<endl;cout<<" 7:修改学生记录"<<endl;cout<<" 0:退出管理系统"<<endl;cout<<"\n";cout<<" [请选择]:";cin>>select;switch(select){case 1:adds();break;case 2:deletes();break;case 3:cout<<"\t学号\t\t姓名\t性别\t语文\t数学\t英语\t平均分\t总分"<<endl;cout<<"*********************************************************************** *********"<<endl;shows();break;case 4:inquires();break;case 5:statistics();break;case 6:ranks();cout<<"*******************************排序结果为*******************************"<<endl;cout<<"\t学号\t\t姓名\t性别\t语文\t数学\t英语\t平均分\t总分"<<endl;shows();break;case 7:changs();break;case 0:char b;cout<<"确定要退出程序吗?[Y/N]:";cin>>b;if(b=='Y'||b=='y'){ exits();cout<<"文件保存成功!"<<endl;return 0;} break;default:cout<<"输入错误!请重新出入"<<endl;}}return 0;}double Caculateas(double * b) //计算平均分{double c,sum=0.0;for(int a=0;a<3;a++){sum=*(b+a)+sum;}c=sum/3;return c;}double Caculatets(double * b) //计算总分{double sum=0.0;for(int a=0;a<3;a++){sum=*(b+a)+sum;}return sum;}void opens() // 打开文件{ifstream infile("students.txt");if(!infile){ofstream outfile("students.txt");cout<<"未找到成绩文件,重新创建!"<<endl;}else{charinitial0[8],initial1[8],initial2[8],initial3[8],initial4[8],initial5[8],initia l6[8],initial7[8];int num;char name[7],sex[7];double score[3],ascore,tscore;int i=0;infile>>initial0>>initial1>>initial2>>initial3>>initial4>>initial5>>initia l6>>initial7;while(!infile.eof()){infile>>num>>name>>sex>>score[0]>>score[1]>>score[2]>>ascore>>tscore;stu[i].Register(num,name,sex,score,ascore,tscore);i=i+1;count++;}for(int b=i;b<=i&&b>0;b++){stu[b-1]=stu[b];}count--;}}void adds() //添加{int num;char name[7],sex[7];double score[3],ascore,tscore;if(count<100){int i=count++;cout<<"请依次输入学号、姓名、性别、语文成绩、数学成绩、英语成绩:"<<endl;cin>>num>>name>>sex>>score[0]>>score[1]>>score[2];ascore=Caculateas(score);tscore=Caculatets(score);stu[i].Register(num,name,sex,score,ascore,tscore);cout<<"添加成功!";}else{cout<<"存储空间已满!";}}void deletes() //删除{int num;int b,a=0;cout<<"请输入要删除学生的学生号:";cin>>num;for(int i=0;i<count;i++){if(stu[i].Num==num){for(b=i;b<count;b++){stu[b]=stu[b+1];}count--;cout<<endl<<"***************删除成功***************"<<endl;a++;break;}}if(!a){cout<<"[该学生不存在,请重新输入!]:";}}void shows() //显示{for(int i=0;i<count;i++){stu[i].Show();}}void inquires() //查询{int a=0;int num;cout<<"请输入要查询学生的学号:";cin>>num;for(int i=0;i<count;i++){if(num==stu[i].Num){cout<<"\t学号\t\t姓名\t性别\t语文\t数学\t英语\t平均分\t总分"<<endl;cout<<"******************************************************************* *************"<<endl;stu[i].Show();a++;break;}}if(!a){cout<<"[该学生不存在,请重新输入!]";}}void statistics() //统计{int a,i;double b=0.0,c;cout<<"请输入要统计平均成绩的科目序号[1.语文;2.数学;3.英语]:";cin>>a;switch(a){case 1:for(i=0;i<count;i++){b=b+stu[i].Score[0];}c=b/count;cout<<"你要统计的"<<a<<"平均分为:"<<c<<endl;break;case 2:for(i=0;i<count;i++){b=b+stu[i].Score[1];}c=b/count;cout<<"你要统计的"<<a<<"平均分为:"<<c<<endl;break;case 3:for(i=0;i<count;i++){b=b+stu[i].Score[2];}c=b/count;cout<<"你要统计的"<<a<<"平均分为:"<<c<<endl;break;default:cout<<"输入错误!"<<endl;break;}}void ranks() //排序{student temp;for(int i=0;i<count;i++)for(int j=count-1;j>i;j--)if(stu[j-1].Tscore<stu[j].Tscore){temp=stu[j-1];stu[j-1]=stu[j];stu[j]=temp;}}void changs() //修改{int a;double b,c=0;int num;cout<<"请输入要修改成绩的学生学号:";cin>>num;for(int i=0;i<count;i++){if(num==stu[i].Num){cout<<"请输入要修改成绩的科目的序号[1.语文;2.数学;3.英语]:"; cin>>a;cout<<"请输入修改后的成绩:";cin>>b;switch(a){case 1:stu[i].Score[0]=b;stu[i].Ascore=Caculateas(stu[i].Score);stu[i].Tscore=Caculatets(stu[i].Score);break;case 2:stu[i].Score[1]=b;stu[i].Ascore=Caculateas(stu[i].Score);stu[i].Tscore=Caculatets(stu[i].Score);break;case 3:stu[i].Score[2]=b;stu[i].Ascore=Caculateas(stu[i].Score);stu[i].Tscore=Caculatets(stu[i].Score);break;default:cout<<"输入错误!"<<endl;}c++;break;}}if(!c){cout<<"[该学生不存在,请重新输入!]";}}void exits() //退出并将数据存在文件中{ofstream outfile("students.txt");if(!outfile){cout<<"文件保存失败"<<endl;}outfile<<"\t学号\t\t姓名\t性别\t语文\t数学\t英语\t平均分\t总分"<<endl;for(int i=0;i<count;i++)outfile<<"\t"<<stu[i].Num<<"\t\t"<<stu[i].Name<<"\t"<<stu[i].Sex<<"\t"<<st u[i].Score[0]<<"\t"<<stu[i].Score[1]<<"\t"<<stu[i].Score[2]<<"\t"<<stu[i].Asco re<<"\t"<<stu[i].Tscore<<endl;outfile.close();}六、课程设计心得这次的课程设计实验是对我们进入大学以来学习C++语言的一次大考验。