面向对象程序设计课设论文学生成绩评定系统.docx
《面向对象程序设计课设论文学生成绩评定系统.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计课设论文学生成绩评定系统.docx(15页珍藏版)》请在冰豆网上搜索。
面向对象程序设计课设论文学生成绩评定系统
《面向对象程序设计》
课程设计
题目:
《学生成绩评定系统》
院系:
数学与计算科学
专业:
信息与计算科学
姓名学号:
指导老师:
日期:
2015年1月8日
摘要
关键字:
录入学生数据,删除数据,查询数据,显示全部学生数据
程序主要用于对学生成绩进行评定,将学生考试成绩输入,作业成绩,测试成绩输入,然后通过加权平均求出最终成绩,最后将成绩分成字符等级输出,此外这个程序还可以删除,查找,显示全部学生考试情况。
定义一个student类分别对学号、姓名、性别、考试成绩、作业成绩、和测试成绩进行输入,定义成员函数pj()将所有成绩加权以及成员函数gr()将加权后的成绩转化为等级,stu_delete(),stu_find(),display()分别为删除,查询,显示学生的数据,接着定义一个类manage_stu,将前面的student类作为manage_stu成员变量,并定义成员函数input_stu()用于输入N名学生信息,delete_stu(),find_stu(),分别用于删除和查找并显示指定学生,display_stu()用于显示全部学生信息,用户在界面上选择某个数字,通过switch来判断所对应的条件,从而选择调用相应的成员函数,例如选择1.录用学生信息,则调用manage_stu中的input_stu(),输入N名学生姓名,学号,性别,考试成绩,作业成绩,测试成绩后,则成绩存在系统中。
Abstract
Keywords:
input students'data,delete data,query data,
display all the students' dat
Programismainlyusedforassessmentofstudentachievement.Wecaninputstudents’examinationperformance,taskperformanceandtestscoresandthenthenthefinalresultsobtainedbytheweightedaverage.Finally,theperformanceleveloftheoutputintoacharacter,inadditiontothisprogramcanalsodelete,search,displayallstudenttestcases.
Designphase:
wecandefineaClassstudenttoinputrespectivelystudentnumber,name,sex,examinationperformance,taskperformanceandtestscores.Wecandefinememberfunctionpj()toweightallthescores.Andmemberfunctiongr()willconvertweightedscoresintothegrades.Thememberfunctionstu_delete()candeletedatas.Thememberfunctionstu_find()canfinddatas.Andthememberfunctiondisplay()candisplaythestudents’datas.ThenwedefineaClassmanage_stutotaketheprecedingClassstudentasthemembervariablesofit.Wedefinethememberfunctioninput_stu()toinputtheinformationofseveralstudents.Delete_stu()andfind_stu()areusedtorespectivelydeletedatasandfinddatasanddisplaythespecifiedstudents’information.Display_stu()isusedtodisplayallstudentinformation.Theusercanselectoneofthedigitalontheinterface,throughaswitchtodeterminethecorrespondingconditionstoselecttheappropriatememberfunctioncalls.Forexample,ifweselectnumber1:
inputtheinformationofstudents,wecancallthememberfunctioninput_stu()ofClassmanage_stutoinputseveralstudents’name,studentnumber,sex,examinationperformance,taskperformanceandtestscores.Theresultissavedinthesystem.
个人感言
课程设计是一次可以让我们把所学知识与实际相结合的一次机会,我们选择了学生成绩评定系统这一题目。
通过这次比较完整的一个程序设计,让我走出了纯理论的学习,从一种全新的角度去学习。
我体会较深的是互相帮助学习的过程,自己看书学习的经验,还有网上以及其他各种途径获得信息和知识的经验,理论与实际相结合的课程设计,锻炼了我综合运用所学的基础知识解决实际问题的能力,同时也提高了我查询文献资料的水平。
当然,课程设计并不是很好做的,不是你想完成就能完成的,它需要你认真仔细的,且静下心来对待每一个程序块。
因此,在这过程中我也培养了自己的耐心。
通过这个课程设计真的让我收获了很多,说实在的,自己的编程能力不是很强,所以我和队友进行了分工合作,在队友的帮助下明白了什么是dos命令,虽然只是协助工作,但对于自己也算是一种进步。
理解了整个程序之后就开始我主要负责的部分:
CRC卡片以及UML绘图。
刚开始连听都没听过,经过上网查询了两者的定义才明白CRC卡是一个标准索引卡集合,每一张卡片表示一个类。
类代表一系列对象的集合,这些对象是对系统设计的抽象建模,可以是一个人、一件物品等等,类名写在整个CRC卡的最上方。
职责包括这个类对自身信息的了解,以及这些信息将如何运用。
诸如,一个人,他知道他的电话号码、地址、性别等属性,并且他知道他可以说话、行走的行为能力。
这个部分在CRC卡的左边。
协作指代另一个类,我们通过这个类获取我们想要的信息或者相关操作。
这个部分在CRC卡的右边。
UML定义了不同的图,这些图从不同的侧面对系统进行描述。
系统模型将这些不同的侧面综合成一致的整体,便于系统的分析和构造。
上述所用是静态图。
总之,这个课程设计为我打开C++大门,做了这个后才发现C++还有很多很丰富的知识内容,现在学习到的只是冰山一角。
虽然这个代码存在很多方面的不足,时间复杂度和算法方面都有提高的空间,但我相信只要以后我多练习,一定会大有进步。
目录
一、引言1
二、原理1
三、设计内容2
(一)crc卡片3
(二)uml图4
四、程序调试5
五、附录代码7
六、参考文献14
引言
C++课程设计中编写一个程序用来对学生评定成绩。
每名学生都有三个分数:
考试分数、作业分数、和测验分数。
首先将每一项得分转换成字符等级(例如,100~94为A,93~91为A-,90-88为B+等)。
为了得到最终成绩,先将各项成绩转换成分值(例如,A=4.0,A-=3.7,B+=3.3等)。
然后,再将这三项成绩值加权平均(例如:
考试成绩占40%,作业成绩占35%,测验成绩占25%),得到最终得分。
最后,将最终得分再次转换成字符等级成绩。
设计一个用户界面来实现所述要求,并利用CRC卡片设计类和类中的方法,同时给出UML图并实现该程序。
在用户界面上可以输入学生的成绩,还能够查询学生的成绩。
程序主要用于对学生成绩进行评定,将学生考试成绩输入,作业成绩,测试成绩输入,然后通过加权平均求出最终成绩,最后将成绩分成字符等级输出,此外这个程序还可以删除,查找,显示全部学生考试情况。
原理部分
C++通过类来实现封装性,把数据和这些数据有关的操作封装在一个类中,把一些数据指定为私有,使他们与外界隔离,把需要让外界调用的成员函数指定为公用的,外界通过公用的函数来实现对数据的操作,外界与对象唯一的联系渠道就是调用公用的成员函数,所以公用成员函数是用户使用类的公用接口,这就是接口与实现分离。
程序设计者的任务包括两方面,一是设计所需要的各种类和对象,即决定把哪些数据和操作封装在一起,二是考虑怎么向有关对象发送消息,以完成所需任务,对一个大型任务来说,面向程序设计方法大大降低程序设计人员的工作难度,减少出错的机会。
C++提供构造函数来处理对象的初始化,构造函数是一种特殊的成员函数,不需要用户调用它,而是对象建立时自动执行,名字必须与类名相同,以便编译系统自动把它作为构造函数处理,它不具有任何类型,不返回任何值。
设计内容
定义一个student类分别对学号、姓名、性别、考试成绩、作业成绩、和测试成绩进行输入,定义一个float型的数组score[4]用来存放成绩,其中score[0]存放考试成绩,score[1]存放作业成绩,score[2]存放测试成绩,定义成员函数pj()将所有成绩加权后存放在score[3]中,成员函数gr()将加权后的成绩,通过if语句判断它所在的范围从而确定它的等级,stu_delete()用于删除某个学生数据,trcmp(stu[i].n_numble,d_numble)即通过输入的学号与之前存放在数组的学号对比,找到删除的数据后,把后面的数据往前移即stu[j]=stu[j+1],这就使删除的数据被覆盖掉,stu_display()用于输出学生的所有信息,包括学号,姓名,性别,考试成绩,测验成绩,作业成绩以及最终等级,stu_find()同过输入的学号与之前数组里的学号对比,k=strcmp(stu[i].n_numble,d_numble);如果k为0,即找到要查找的学号,
stu[i].dispaly()就可以展示全部关于该学生的信息,成员函数里的stu_input(),则用于输入学生信息。
接着定义一个类manage_stu,将前面的student类作为manage_stu成员变量即studentstu[N+1],定义N+1名学生空间定义N+1名学生空间,并定义成员函数input_stu()用于输入N名学生信息,每输入一次,调用一次student里的input()函数,delete_stu(),find_stu(),分别用于删除和查找并显示指定学生,display_stu()用于显示全部学生信息,通过一个for循环,每次都调用student里的display()函数,通过while中的i来控制是否进行循环,当i变为0即条件为假时,退出循环,用户在界面上选择某个数字,通过switch来判断所对应的条件,从而选择调用相应的成员函数,例如选择1.录用学生信息,通过switch中的数字对应case1,则调用manage_stu中的input_stu(),然后在input_stu()中又调用了student类中的input(),输入N名学生姓名,学号,性别,考试成绩,作业成绩,测试成绩后,则成绩存在系统中。
CRC卡片
Class:
manage_stu
说明:
系统运行时的主窗体
职责:
协作类:
student类
录用学生数据
删除数据
查询数据
显示全部学生数据
UML类图
程序调试
图
(1)用于录入学生信息
图
(2):
用于查找某个学生信息
图(3)删除某个学生信息
图(4)显示全部学生信息
图(5)退出系统
附录
#include
usingnamespacestd;
constintN=5;
classstudent
{
charn_name[10];
charn_numble[10];
charn_sex[3];
floatscore[4];//score[0]考试成绩,score[1]作业成绩,score[2]测试成绩,score[3]加权后的成绩
public:
student();
student(charname[],charnumble[],charsex[],floata,floatb,floatc);
student(student&s);
voidinput();//输入学生信息:
姓名,学号,性别,考试成绩,作业成绩,测试成绩
floatpj();//加权后的分
chargr();//获取等级
voidstu_delete(studentstu[]);//删除
voidstu_find(studentstu[]);//查询
voiddispaly();//显示学生信息:
姓名,学号,性别,考试成绩,作业成绩,测试成绩,等级
};
student:
:
student()
{
strcpy(n_numble,"000");
strcpy(n_name,"noname");
strcpy(n_sex,"male");
score[0]=0;
score[1]=0;
score[2]=0;
score[3]=0;
}
student:
:
student(charname[],charnumble[],charsex[],floata,floatb,floatc)
{
strcpy(n_name,name);
strcpy(n_numble,numble);
strcpy(n_sex,sex);
score[0]=a;
score[1]=b;
score[2]=c;
score[3]=score[0]*0.4+score[1]*0.35+score[2]*0.25;
}
student:
:
student(student&s)
{
strcpy(n_name,s.n_name);
strcpy(n_numble,s.n_numble);
strcpy(n_sex,s.n_sex);
score[0]=s.score[0];
score[1]=s.score[1];
score[2]=s.score[2];
score[3]=score[0]*0.4+score[1]*0.35+score[2]*0.25;
}
voidstudent:
:
input()
{
cout<<"输入学生信息:
"<cout<<"请依次输入姓名,学号,性别,考试成绩,作业成绩,测试成绩"<cin>>n_name>>n_numble>>n_sex>>score[0]>>score[1]>>score[2];
score[3]=score[0]*0.4+score[1]*0.35+score[2]*0.25;
}
floatstudent:
:
pj()
{
returnscore[3];
}
charstudent:
:
gr()
{
if(score[3]>=90&&score[3]<=100)return'A';
if(score[3]>=80&&score[3]<90)return'B';
if(score[3]>=70&&score[3]<80)return'C';
if(score[3]>=60&&score[3]<70)return'D';
if(score[3]<60)return'E';
}
voidstudent:
:
stu_delete(studentstu[])
{
studentt;
inti,k,j;
chard_numble[5];
cout<<"请输入要删除的学生学号:
";
cin>>d_numble;
for(i=0;i{
j=i;
k=strcmp(stu[i].n_numble,d_numble);
if(k==0&&i!
=N)
{
for(;jstu[j]=stu[j+1];
}
if(k==0&&i==N)
{
strcpy(stu[N].n_numble,"0000");
strcpy(stu[N].n_name,"noname");
strcpy(stu[N].n_sex,"男");
stu[N].score[0]=0;
stu[N].score[1]=0;
stu[N].score[2]=0;
stu[N].score[3]=0;
}
}
}
voidstudent:
:
stu_find(studentstu[])
{
inti,k;
chard_numble[5];
cout<<"请输入要查询学生的学号:
";
cin>>d_numble;
for(i=0;i{
k=strcmp(stu[i].n_numble,d_numble);
if(k==0)
{
stu[i].dispaly();
}
}
}
voidstudent:
:
dispaly()
{
cout<<"姓名:
"<"<"<"<"<"<"<}
classmanage_stu
{
//private:
studentstu[N+1];//定义N+1名学生空间
public:
voidinput_stu();//输入N名学生信息
voiddelete_stu();//删除指定学号的学生信息
voidfind_stu();//查找指定学号的学生并显示
voiddisplay_stu();//显示N名学生信息
};
voidmanage_stu:
:
input_stu()//输入N名学生信息
{
inti;
for(i=0;istu[i].input();
}
voidmanage_stu:
:
delete_stu()//删除指定学号的学生信息
{
studentr;
r.stu_delete(stu);
}
voidmanage_stu:
:
find_stu()//查找指定学号的学生并显示
{
studentt;
t.stu_find(stu);
}
voidmanage_stu:
:
display_stu()//显示全部名学生信息
{
studentt;
inti;
for(i=0;istu[i].dispaly();
}
voidmain()
{
inti=1,c;
manage_stus;
while(i)
{
cout<<"学生管理系统:
"<cout<<"1、录入学生信息"<cout<<"2、查找"<cout<<"3、删除"<cout<<"4、显示全部学生信息"<cout<<"5、退出系统"<cout<<"请选择(1--5):
";
cin>>c;
switch(c)
{
case1:
s.input_stu();break;
case2:
s.find_stu();break;
case3:
s.delete_stu();break;
case4:
s.display_stu();break;
case5:
i=0;
}
}
}
参考文献
[1]c++面象对象程序设计谭浩强编著清华大学出版社
[2]c++PrimerStanleyB.Lippman