面向对象C++ 学生成绩管理系统.docx
《面向对象C++ 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《面向对象C++ 学生成绩管理系统.docx(19页珍藏版)》请在冰点文库上搜索。
![面向对象C++ 学生成绩管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-8/7/1542a4a0-efc5-48b6-b332-1f579169ea8e/1542a4a0-efc5-48b6-b332-1f579169ea8e1.gif)
面向对象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++面向对象课程设计是陈智老师教的,陈老师对待教学认真负责,上课积极为我们分析重点、难点而且还反复提出。
这让我们在这门学科上对重点难点的掌握层次比较高。
老师上课还时常给我们讲一些专业发展前景和课外内容,这极大地扩充了我们的知识面、丰富了我们的阅历,为以后步入社会打下一些基础。
非常感谢此次负责我们这组课程设计的柳老师.感谢柳老师在课程设计过程中给我的指导,柳老师在检查我们程序时的严谨作风令我钦佩不已。
老师细心的检查我们的程序,并指出我们所出现的问题和欠缺的方面,并且指导我们如何完善,如何使程序更加优化。
这些都是让我们这组课程设计得已顺利完成的条件,感谢各位老师的悉心帮助和教导!
感谢给予我们此次课程设计帮助的同学们!
此外非常感谢此次课程设计的搭档吴娇同学,谢谢她在模块设计提出的种种思想,她细心的态度发现了此次课程设计中不少的问题,她让这次课程设计更加出色、出彩。
最后感谢所有给予我帮助的老师和同学,谢谢你们!