面向对象C++ 学生成绩管理系统.docx
- 文档编号:30227601
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:19
- 大小:90.23KB
面向对象C++ 学生成绩管理系统.docx
《面向对象C++ 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《面向对象C++ 学生成绩管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
面向对象C++学生成绩管理系统
课程设计(论文)
题目名称学生成绩管理系统
课程名称专业课程设计I
学生姓名
学号
系、专业信息工程系、计算机科学与技术
指导教师
2013年11月15日
1前言
当前的编程语言主要分为面向过程和面向对象两种,其中我们所熟悉的C语言是一种面向过程的语言,而C++则是一种面向对象的语言。
面向对象主要是一种思想,面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。
如数据库系统、交互式界面、应用结构、网络管理结构、人工智能等。
对于此次课程设计学生成绩管理系统的设计,主要是考察我们对面向对象中类的定义和使用,成员变量和成员函数的定义和使用,友元函数的理解和调用,继承性与派生类,文件输入输出的掌握情况,在实际设计中首先定义一个基类stu用来存放学生的基本信息,再定义一个派生类stu1用了存放课程信息.通过本课程设计,我们可以运用C++语言实现所设计的算法,编写较大型的程序,分析和解决实际应用问题,进一步加深、巩固自己所学专业课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
通过本次课程设计我们还可以进一步掌握编写文档、文档排版的能力。
为以后步入社会,走上工作岗位打下坚实的基础.
2需求分析
2。
1任务
某学校学生选择的课程包括选修课和必修课,每门课程有相应的学分,学生每学期可以选择若干门课程,设计学生成绩管理系统,计算学生某一学期的总成绩和平均成绩。
2.2要求
具体要求:
(1)可以进行学生成绩的输入和查询。
(2)可以通过学号查找某个同学的总成绩,学分,平均成绩。
(3)可以查询同学的达标情况和没有及格的科目。
2.3运行环境
(1)WINDOWXP/WINDOW7系统
(2)VisualC++6.0编译环境或DEVC++5.0编译环境
2.4开发工具
C++语言
3分析和设计
3。
1系统分析及设计思路
根据面向对象的思想,通过类来实现设计一个学生成绩管理系统。
首先定义一个基类stu用来存放学生的基本信息(学号(number),姓名(name)),再定义一个派生类stu1用来存放课程信息(课程号(classnumber),课程名(classname),课程总学分(score),平时成绩(pingshifen),实验成绩(shiyanfen),卷面成绩(juanmianfen),总分(zongfen),实得学分(lastscore))。
根据实际情况考虑,有些课程并不需要实验,所以总分有两种算法。
一种是没有实验成绩的总分:
总分=平时成绩×0.3+卷面成绩×0.7另一种有实验的总分:
总分=平时成绩×0.15+实验成绩×0。
15+卷面成绩×0。
7,总学分=∑各科实得学分;总成绩=∑各科总分;平均成绩=总成绩/总学分;main函数用来实现操作,在程序中实现了三个功能:
1输入学生成绩;2学生成绩查询;3达标查询。
main函数通过文件流、I/O流等学习内容实现。
通过建立文件来存储所输入的学生信息以及存储计算的结果。
1.基类stu类的设计:
classstu/*定义一个基类,用来存放学生基本信息*/
{
public:
stu(chara[20],charb[20])
{
strcpy(number,a);
strcpy(name,b);
}
char*getnumber()
{
returnnumber;
}
char*getname()
{
returnname;
}
private:
charnumber[20];
charname[20];
};
2.派生类stu1类的设计:
classstu1:
publicstu/*定义派生类,存放课程信息*/
{
public:
stu1(chara[20],charb[20],charf[10],charg[10],doubleaa,doublebb,doublecc,
doubledd,doubleee,doubleff):
stu(a,b)
{
strcpy(classnumber,f);
strcpy(classname,g);
score=aa;
pingshifen=bb;
shiyanfen=cc;
juanmianfen=dd;
zongfen=ee;
lastscore=ff;
}
friendvoidmain();
private:
charclassnumber[10];
charclassname[10];
doublescore,pingshifen,shiyanfen,juanmianfen,zongfen,lastscore;
};
3。
2主要类图
图3.2.1基类stu类图
图3。
2.2派生类stu1类图
图3。
2.3继承关系类图
3.3函数流程图
整个程序的流程图:
首先判断是否进入学生成绩管理系统,如果进入,通过输入相应的1,2,3选择要实现的功能,如图3.3。
1所示。
图3.3。
1整个程序的主流程图
当进入系统学生成绩管理系统后根据提示选择要进行的操作,学生各科的成绩。
根据提示输入信息,如:
输入课程信息(课程编号,课程名称以及该课程的各项成绩等),输入学生信息(姓名,学号)等一系列的操作。
如图3.3.2所示。
1
N
Y
图3.3。
2输入某科成绩流程图
4具体代码实现
#include
#include #include〈fstream〉 #include〈conio.h〉 usingnamespacestd; classstu/*定义一个基类,存放姓名和学号信息*/ { public: stu(chara[20],charb[20]) { strcpy(number,a); strcpy(name,b); } char*getnumber() { returnnumber; } char*getname() { returnname; } private: charnumber[20]; charname[20]; }; classstu1: publicstu/*定义另一个派生类,存放课程信息和成绩*/ { public: stu1(chara[20],charb[20],charf[10],charg[10],doubleaa,doublebb,doublecc,doubledd,doubleee,doubleff): stu(a,b) { strcpy(classnumber,f); strcpy(classname,g); score=aa; pingshifen=bb; shiyanfen=cc; juanmianfen=dd; zongfen=ee; lastscore=ff; } friendvoidmain(); private: charclassnumber[10]; charclassname[10]; doublescore,pingshifen,shiyanfen,juanmianfen,zongfen,lastscore; }; voidmain()/*主函数*/ { charc;intflag5=0;ints=0; cout<〈"欢迎进入学生管理系统"〈 cout〈〈”进入(y/n)”< cin〉>c; do {/*判断是否进入系统*/ if(c==’n’) break; else { flag5=1; charnumber[10]; charname[20]; inti=0,I=0,j=0;intja=0; ofstream*file[50]; stu1*s1[50];/*定义指针存放课程信息*/ charclassnumber[8]; charclassname[10]; doublescore,pingshifen,shiyanfen,juanmianfen,zongfen,lastscore; boolflag=0; intp; charc4; do {/*选择菜单*/ cout〈<”请选择操作”〈 cout<<”1输入学生成绩信息”〈〈endl; cout<<”2成绩查询”<〈endl; cout<<"3达标查询"〈 do {/*判断输入字符*/ cin〉〉p; if(1〈=p&&p<=3) flag=1; else cout〈〈”指令错误,请重新输入! ”< }while(flag==0); if(p==1)/*进入信息输入系统*/ { cout<〈”进入信息添加"<〈endl; charc1,c2; do{/*信息的输入*/ cout<<"请输入课程编号: "〈 cin>>classnumber; cout〈<”请输入课程名: ”< cin>>classname; do{ cout〈<"请输入学生学号: "〈〈endl; cin〉〉number; cout〈<"请输入学生姓名: ”〈〈endl; cin〉>name; cout〈<"课程总学分: ”〈〈endl; cin〉〉score; cout〈<”学生的平时成绩: "〈〈endl; cin〉>pingshifen; cout〈<”学生的实验成绩: "< cin〉〉shiyanfen; cout〈〈”学生卷面成绩: ”〈 cin〉〉juanmianfen; if(shiyanfen==0)/*总分的算法判断*/ zongfen=pingshifen*0。 3+juanmianfen*0.7; else zongfen=pingshifen*0。 15+shiyanfen*0。 15+juanmianfen*0。 7; if(90<=zongfen&&zongfen〈=100)/*学分的计算*/ lastscore=score; elseif(80〈=zongfen) lastscore=score*0。 8; elseif(70<=zongfen) lastscore=score*0.7; elseif(60〈=zongfen) lastscore=score*0。 6; else lastscore=0; file[j]=newofstream("e: \\eeee。 txt”,ios: : app); /*信息存储文件的建立*/ *file[j]<〈”学号: ”<〈number〈〈”"<〈"课程编号: "〈 "< "<〈score<<"”〈<"平时分: ”<〈pingshifen<〈""<<”实验分: "〈〈shiyanfen<〈""〈<"卷面分: "<〈juanmianfen<<””〈〈”综合成绩: "< "〈〈lastscore<〈"”〈〈endl; j++; s1[I]=newstu1(number,name,classnumber,classname,score,pingshifen,shiyanfen,juanmianfen,zongfen,lastscore); I++; cout<<”数据输入成功,继续输入其他学生成绩? (y/n)”; cin>〉c1; intflag1=0; do { if(c1! =’y’&&c1! ='n’) { cout<〈"错误指令"<〈endl; cin>>c1; } else flag1=1; } while(flag1==0); } while(c1=='y’); cout<<"输入其他课程成绩? (y/n)";/*转入其他成绩输入判断*/ cin>>c2; intflag2=0; do{ if(c2! =’y’&&c2! ='n’) { cout〈〈”错误指令"〈〈endl; cin>〉c2; } else flag2=1; } while(flag2==0); } while(c2==’y’); } if(p==2)/*成绩查询系统*/ { cout<〈”进入成绩查询"〈〈endl; charnum[10]; cout〈<”请输入学号”〈〈endl; cin〉〉num; intii=0;doublesum=0;doublefen=0;doublepingjunfen; for(intj=0;j { if(strcmp((*s1[j]).getnumber(),num)==0)/*判断学号是否存在*/ { cout<<"课程编号: ”<〈(*s1[j])。 classnumber〈<"”〈〈"课程名称: ”<<(*s1[j]).classname<<""〈<”学分: "<<(*s1[j])。 score〈<””<〈”平时成绩: "〈<(*s1[j]).pingshifen<〈”"〈<”实验成绩: ”<<(*s1[j]).shiyanfen<<""〈〈”卷面成绩: "<<(*s1[j])。 juanmianfen<<””〈<"综合成绩: "〈<(*s1[j]).zongfen〈<"”〈<"实得学分: ”〈<(*s1[j])。 lastscore〈<""〈 ii++; sum+=(*s1[j]).lastscore;/*总学分计算*/ if((*s1[j])。 score! =0) {/*平均分的计算*/ fen+=(*s1[j])。 zongfen; pingjunfen=fen/sum; } } } cout<<"共修: ”<〈ii〈〈”科”〈<”"〈<”总学分: ”〈〈sum〈〈"”〈<"总分: "<〈fen<〈”"〈〈”平均分: ”<〈pingjunfen<〈endl; } if(p==3)/*达标查询系统*/ { cout<〈”进入达标查询"<〈endl; charnum[10];doublesum; cout<〈”请输入学号"<〈endl; cin>〉num; for(intj=0;j〈I;j++) { if(strcmp((*s1[j])。 getnumber(),num)==0) { sum+=(*s1[j]).lastscore; if((*s1[j]).zongfen<60)/*未及格学科的*/ { cout〈〈(*s1[j]).classname<<"未及格"<〈endl; } } } if(sum〈10)/*留级判断*/ { cout<<”不好意思同学你未通过,需留级! ”〈〈endl; } } cout<〈”进行其他操作(y/n)”〈 cin>>c4; } while(c4==’y'); } } while(flag5==0); } 5课程设计总结 5.1程序运行结果或预期运行结果 1。 通过输入y/n判断用户是否进入学生成绩管理系统,通过输入对应的序号选择对应的功能,如图5.1。 1所示。 图5.1。 1进入学生成绩管理系统 2.判断输入的数字1,2,3选择对应实现的功能,选择1即表示输入学生成绩,首先输入课程号、课程名称再输入该课程某一学生的信息、课程学分以及该生这门课程的各项成绩,因为高数没有实验,所以实验成绩为0。 如图5.1。 2所示。 图5。 1。 2输入学科1(高数)某一学生该科的各项成绩 3.通过上一个流程选择y,选择输入学科1(高数)的其他学生在该课程的各项成绩,平时分、实验分和卷面分.如图5。 1.3所示 图5.1。 3输入学科1(高数)其他学生该科的各项成绩 4。 当学科1数据和学生在该科的信息输入数据成功后。 继续进行其他学科2(如C++面向对象的课程编号、课程名)的输入操作和其他学生在C++面向对象这科的各项成绩,因为该科有实验,所以有实验成绩.如图5.1。 4所示. 图5.1.4输入学科2(C++面向对象)某一学生该科的各项成绩 5.输入其他学生在学科2(C++面向对象)的各项成绩,如图5.1.5所示。 图5.1.5输入学科2(C++面向对象)其他学生该科的各项成绩 6.当所有学生的所有科目成绩输入数据成功后,选择适当的操作。 下面进行的操作就是各个学生的成绩查询,以输入的数据039号学生和002学生为例。 如图5.1。 6所示. 图5.1。 6学号为039号学生的各科成绩 7.查询其他学生的各科成绩,选择适当的操作。 以输入的学号002号学生为例。 如图5。 1。 7所示。 图5。 1.7学号为002号学生的各科成绩 8.通过查找各个学生的成绩,我们可以对成绩管理系统里的数据有清晰的认识,在必要时可以通过该系统进行统计。 在了解同学成绩后我们需要进行的操作是: 某已学生是否达标,以及该生哪门不及格等信息。 通过适当的操作进行达标查询,以002号为例可以看出: 该生需要留级,未及格的科目为C++面向对象.如图5。 1。 8所示。 图5。 1.8学号为002号学生的达标查询 9。 当所有的数据输入成功、学生的各科成绩计算出来后.可以在程序设置的位置找到我们所输入数据、计算得到的数据存储的文本文件。 课程信息和学生成绩可以从文件读取。 如图5。 1.9所示。 图5.1.9存储输入数据和计算得到数据的文本文件 5.2课程设计体会 课程设计刚开始时,拿着选定的题目不知如何下手。 毕竟课程设计不同于实验课,很多东西都要自己设计。 静下心来,仔细分析题目,再加上指导老师的说明与提示,心中才有了谱.将整个系统根据不同的功能化分成不同的模块,画出各个部分的流程图根据流程图设计代码块。 比如设计一个基类stu和一个派生类stu1再分别进行设计,逐个攻破,最后将其整合起来。 回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,友元函数、文件操作、函数重载.而且学到了很多在书本上所没有学到过的知识.在完成课题过程中,我们发现运行后的界面非常的差,有些成绩之间没有分开,这是设计上的漏洞。 需要给界面添加必要的空格或符号,以用来区分不同的成绩。 使用户界面尽量美观。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。 实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。 果然是团结就是力量,只有互相之间默契、融洽的配合才能换来最终完美的结果。 此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时向同学、老师请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。 参考文献 [1]陈维兴等,C++面向对象程序设计教程(第3版).清华大学出版,2009.6 [2]李素若,张牧等,C++面向对象程序设计。 化学工业出版社,2008.7 [3]张福祥。 C语言程序设计[M]. 辽宁大学出版社,2008.1 [4]牛莉,刘远军等.计算机等级考试辅导教程[M].北京: 中国铁道出版社,2008. 致谢 此次课程让我收获很多的同时也学会了许多知识。 首先要感谢学校为我们课程设计提供了良好的环境,机房过硬的机器配置让我们可以更好、更快的实现我们的课程设计。 这学期的C++面向对象课程设计是陈智老师教的,陈老师对待教学认真负责,上课积极为我们分析重点、难点而且还反复提出。 这让我们在这门学科上对重点难点的掌握层次比较高。 老师上课还时常给我们讲一些专业发展前景和课外内容,这极大地扩充了我们的知识面、丰富了我们的阅历,为以后步入社会打下一些基础。 非常感谢此次负责我们这组课程设计的柳老师.感谢柳老师在课程设计过程中给我的指导,柳老师在检查我们程序时的严谨作风令我钦佩不已。 老师细心的检查我们的程序,并指出我们所出现的问题和欠缺的方面,并且指导我们如何完善,如何使程序更加优化。 这些都是让我们这组课程设计得已顺利完成的条件,感谢各位老师的悉心帮助和教导! 感谢给予我们此次课程设计帮助的同学们! 此外非常感谢此次课程设计的搭档吴娇同学,谢谢她在模块设计提出的种种思想,她细心的态度发现了此次课程设计中不少的问题,她让这次课程设计更加出色、出彩。 最后感谢所有给予我帮助的老师和同学,谢谢你们!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象C+ 学生成绩管理系统 面向 对象 C+ 学生 成绩管理系统