《c++课程设计实践报告.pdf》由会员分享,可在线阅读,更多相关《c++课程设计实践报告.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中 南 大 学C+程序设计实践题目学生成绩档案管理系统成员姓名班级学号:指导教师学院完成时间年月日目 录一、二、三、四、程序设计目的程序使用说明程序结构和流程调试与分析12五、六、附录:参考文献一、程序设计目的:一、程序设计目的:总结与心得调试结果展示程序的不足分析程序源代码根据课题要求,设计一“学生成绩管理系统”,它的主要功能是对学生的成绩进行输入、修改和管理。包括录入学生的信息、查询、修改、输出所有信息、统计和退出等功能。在完成这个实验设计的过程中,更加全面地认识C+程序设计。在已有的知识基础上,自学结构体、面向对象等内容。让组员在设计期间,提升对 C+的认识与理解,更好地掌握相关知识,将
2、理论知识运用于实践。具体表现在以下方面:1.熟练运用计算机语言,理解计算机语言的思想。能够合理运用计算机语言编写高效的程序;2.通过课程设计,加深 C+进行面向过程的结构化程序设计。能对系统功能进行分析,并设计合理的模块化结构;3.通过课程设计,理解 C+优越于 C 语言的面向对象的程序编辑。自学对文件操作与文件流等部分;4.通过课程设计,训练 C+程序调试能力,培养分析问题、解决问题和改进问题的能力;5.通过课程设计,开发一个中小型系统,掌握系统研发全过程;6.通过课程设计,培养团队协作能力,提升团队沟通与交流的技巧。二、程序使用说明:二、程序使用说明:该程序使用 C+设计的一个简单学生成绩
3、管理系统,它外观大方,功能多样。它操作人性化,易于操作,能以简便高效的方式对学生成绩进行管理和查询。其具体的功能分为以下几个部分:1.输入学生的数据:只要输入学生的姓名和成绩,学号会自动生成,每输入完一个学生数据,不用再选择,可以继续;2.查询学生成绩:在这个功能里,你可以选择是按照学号还是姓名进行查询,一次只能查找一人;3.修改成绩:该功能是在学号的基础上对学生的姓名和成绩进行修改。学号不会改动;4.输出所有学生成绩:它会将所有录入的学生数据都显示出来;5.统计挂科和优秀人数:在所录入的信息中统计,会显示出优秀多少人和挂科多少人;6.退出系统:退出学生成绩管理系统。开始功能菜单用户选择功能判
4、断执行选择服务三、程序结构和流程三、程序结构和流程:为实现系统功能,本程序主要分为七个模块。它们分别为:显示中文提示选单、录入新的信息、查询信息、修改信息、列出所有的信息、统计信息、退出该程序。这七个函数再通过主函数调用分别得以实现。主函数,首先提供了程序运行时的友好界面,列出了清单,以供用户做出选择,以便决定使用学生成绩管理系统的哪种功能。然后,通过执行选择语句,分别实现其它各个函数的调用功能。Main主函数menu菜单目录录入查询修改输出统计退出四、调试与分析:四、调试与分析:1、调试结果展示:学生成绩管理系统主页面:输入数据:查询成绩:修改学生信息:输出所有学生成绩:统计挂科和优秀人数:
5、2、程序的不足分析由于本程序是分模块设计的,所以每次运行时选择完每一分块的任务并且执行完任务后,并于本次保存,再按任意键又会继续回到原来的用户选择界面,供用户继续选择所需要的任务并执行任务。对于本程序的调试运行,总体上情况良好,具有可实施性,操作简单,使用户能够接受并方便使用。但是,任何程序都有其改进的地方,发现问题并解决问题是追求只是的必经之路,也只有懂得发现问题才能更好的学习 C+程序设计,才能使自己更有效的提高,所以在百般思考的过程中我发现的主要问题有:对于本程序来说,对于本程序来说,录入后的信息不能删除,录入后的信息不能删除,这样的话这样的话只会让文件中的数据越来越多,却不能按照要求去
6、删除。这会给使用者带来不只会让文件中的数据越来越多,却不能按照要求去删除。这会给使用者带来不便。便。五、源程序代码:五、源程序代码:#include#include#include#includeusing namespace std;const char*file=student.dat;const int LIM=10;int ct=0;inline void eatline()while(cin.get()!=n)continue;struct studentint num;char nameLIM;int grade;void menu()/主菜单coutt*endl;coutt 欢迎
7、使用学生成绩管理系统 endl;coutt*endl;coutt*1-输入数据*endl;coutt*2-查询成绩*endl;coutt*3-修改学生信息*endl;coutt*4-输出所有学生成绩*endl;coutt*5-统计挂科和优秀人数*endl;coutt*6-退出系统*endl;coutt*endl;void menu2()/二级菜单coutt*endl;coutt*1-按学号查询*endl;coutt*2-按姓名查询*endl;coutt*a;int na;char snaLIM;fstream find;find.open(file,ios_base:in|ios_base:o
8、ut|ios_base:binary);eatline();student stu;switch(a)case 1:cout请输入学生学号:na;break;case 2:cout请输入学生姓名:sna;break;default:cout选择执行的操作错误!n;cin.clear();while(cin.get()!=n);for(int i=1;i=ct;i+)streampos place=(i-1)*sizeof stu;find.seekp(place);if(find.fail()cerr 查找出错!程序将退出!n;system(pause);exit(EXIT_FAILURE);
9、find.read(char*)&stu,sizeof stu);switch(a)case 1:if(stu.num=na)w=1;coutsetw(6)学号 setw(LIM)姓名 setw(6)成绩endl;coutsetw(6)stu.num:setw(LIM)stu.namesetw(6)stu.gradeendl;break;case 2:if(!strcmp(stu.name,sna)w=1;coutsetw(6)学号setw(LIM)姓名 setw(6)成绩endl;coutsetw(6)stu.num:setw(LIM)stu.namesetw(6)stu.gradeendl
10、;break;default:cout选择执行的操作错误!n;cin.clear();while(cin.get()!=n);if(w=0)cout未找到此人!endl;find.close();void menu5()/二级菜单coutt*endl;coutt*1-按学号修改成绩*endl;coutt*2-按姓名修改成绩*endl;coutt*endl;void aver()/统计及格和优秀人数的函数fstream find;find.open(file,ios_base:in|ios_base:out|ios_base:binary);eatline();student stu;int A
11、=0,C=0;for(int i=1;i=ct;i+)streampos place=(i-1)*sizeof stu;find.seekp(place);if(find.fail()cerr 查找出错!程序将退出!n;system(pause);exit(EXIT_FAILURE);find.read(char*)&stu,sizeof stu);if(stu.grade=90)A+;cout优秀人数为:A 人,挂科人数为:Cendl;find.close();void output()/输出全部学生成绩信息的函数student stu;ifstream find;find.open(fil
12、e,ios_base:in|ios_base:binary);coutsetw(6)学号setw(LIM)姓名setw(6)成绩endl;while(find.read(char*)&stu,sizeof stu)coutfixedright;coutsetw(6)stu.num:setw(LIM)stu.namesetw(6)stu.gradeendl;find.close();int stu_num()/计算数据组数student stu;ifstream stunum;stunum.open(file,ios_base:in|ios_base:binary);if(stunum.is_o
13、pen()stunum.seekg(0);while(stunum.read(char*)&stu,sizeof stu)ct+;stunum.close();return ct;void change()/修改数据函数fstream change;change.open(file,ios_base:in|ios_base:out|ios_base:binary);if(change.eof()change.clear();/清除 EOFcout请输入你要修改的学生学号:rec;eatline();if(recct)cout数据不存在!程序将退出!endl;system(pause);exit
14、(EXIT_FAILURE);student stu;streampos place=(rec-1)*sizeof stu;change.seekg(place);if(change.fail()cerr 查找出错!程序将退出!n;system(pause);exit(EXIT_FAILURE);change.read(char*)&stu,sizeof stu);cout 你选择的是:n;coutsetw(6)学 号 setw(LIM)姓 名 setw(6)成绩endl;coutsetw(6)stu.num:setw(LIM)stu.namesetw(6)stu.gradeendl;if(c
15、hange.eof()change.clear();/清除 EOF 标记 cout 请输入你要修改数据的姓名:;cin.get(stu.name,LIM);eatline();cout stu.grade)if(stu.grade100)cout输入的成绩错误!请重新输入:n;cin.clear();while(cin.get()!=n);continue;break;change.seekp(place);/回到查找到的地点 change.write(char*)&stu,sizeof stu)flush;if(change.fail()cerr 查找失败!程序将退出n;system(pau
16、se);exit(EXIT_FAILURE);change.close();void add()/输入数据,的函数student stu;ofstreamfout(file,ios_base:out|ios_base:appios_base:binary);if(!fout.is_open()|cerr Cant open file file for output:n;exit(EXIT_FAILURE);cout 请输入学生姓名:(按 Enter 键退出输入!):n;cin.get(stu.name,LIM);while(stu.name0!=0)eatline();cout stu.gra
17、de;if(stu.grade100)cout输入的成绩错误!n;cin.clear();while(cin.get()!=n);continue;stu.num=+ct;eatline();fout.write(char*)&stu,sizeof stu);cout 请输入学生姓名:(按 Enter 键退出输入!):n;cin.get(stu.name,LIM);fout.close();int main()ifstream fin;fin.open(file,ios_base:in|ios_base:binary);if(!fin.is_open()student st5=1,小张,100
18、,2,小李,90,3,小王,67,4,小赵,38,5,小乐,59;ofstream fout(file,ios_base:out|ios_base:binary);for(int i=0;i5;i+)fout.write(char*)&sti,sizeof sti);fout.close();fin.close();stu_num();while(1)menu();coutn;switch(n)case 1:eatline();add();break;case 2:find();break;case 3:change();break;case 4:output();break;case 5:a
19、ver();break;case 6:exit(EXIT_FAILURE);default:cout选择执行的操作错误!n;cin.clear();while(cin.get()!=n);continue;/如果选择错误,cin.clear 等语句清除已经输入的内容,程序选择system(pause);system(cls);cin.clear();return 0;六、总结与心得:六、总结与心得:通过这次的课程设计,让我充分的感觉到了要自己设计一个程序是多么的难,这个程序的设计过程中,我清楚的意识到自己的水平有多么的薄弱,每增加一个函数就要调试好久,有时候应为少了一个大括号或是分号,导致要找很久很久。虽然系统可以运行,也具有了一些基本的功能,但我意识到了自己有太多的不足,现阶段还得依靠很多资料才能完成一个程序。附录:参考文献杨长兴主编C+程序设计中国水利水电出版社,2012.01谭浩民主编。C+程序设计实践指导北京:清华大学出版社,2005.7
限制150内