最新《学生成绩管理系统》c++程序设计资料.docx
- 文档编号:11960994
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:27
- 大小:272.90KB
最新《学生成绩管理系统》c++程序设计资料.docx
《最新《学生成绩管理系统》c++程序设计资料.docx》由会员分享,可在线阅读,更多相关《最新《学生成绩管理系统》c++程序设计资料.docx(27页珍藏版)》请在冰点文库上搜索。
最新《学生成绩管理系统》c++程序设计资料
一、课程设计目的-----------------------------------------------------------------------P2
二、课程设计时间和实施方式--------------------------------------------------------P2
三、设计思路-----------------------------------------------------------------------------P2
《学生成绩管理系统》系统简介------------------------------------------------------------P2
《学生成绩管理系统》结构图---------------------------------------------------------------P5
《学生成绩管理系统》流程图---------------------------------------------------------------P6
四、附加加功能--------------------------------------------------------------------------P7
五、用户使用指南-----------------------------------------------------------------------P7
六、编程过程中的问题与解决方法--------------------------------------------------P11
七、实训心得体会-----------------------------------------------------------------------P19
附件:
c++实训源程序---《学生成绩管理系统》
使用软件:
Microsoftvisualc++6.0中文版
使用设备:
联想台式机
配置:
AMDAthlon(tm)64Processor3000+
2.00GHz,512MB内存
对几个名词的个人理解:
抽象(abstraction):
这是形成概念的必要手段,是从许多事物中舍弃个别对象、非本质的特征,抽取共同及本质性的特征的过程(即关注事物的本质特征,而不是具体是细节或具体现实)。
对象:
现实世界中客观存在的事物。
但在c++程序中的对象是由类去生成一个个的具体的对象,从而使对象具有该类的基本属性。
比如说:
人具有吃饭睡觉等等基本属性,而说到具体的某一个男人的时候,他同样具有人的基本属性(这就是从类中实例化的对象)。
派生类:
由一个类做为基类,然后定义另外的一个类,再去添加基类的属性。
比如说:
我们再说说人吧。
从人的基本属性中,派生出一个男人的类,那么男人在具有人的基本属性的同时,他同样还具有男人特有的一些属性。
这样通过更多的属性就可以更具体地指向某一类男人或者是某一个男人。
继承:
对一个对象可获得另一个对象的机制,通过继承,低层次的类只须定义它特有的特征,而共享高层次的类中的特征。
简单的可以是一种说成共享关系。
例如:
一个母亲生下一个孩子,她的孩子继承了母亲的血脉,人的特征之外。
同时孩子还能够有他自己的属性。
继承具有重要的意义,它简化了人们对事物的认识和描述。
一、课程设计目的:
目的:
通过课程设计,使学生掌握面向对象的程序设计技术及开发方法。
其中需要掌握的知识点包括:
1、类的抽象技术及开发技术;
2、类的成员变量的定义,成员方法的定义;
3、类之间的继承和派生的关系;
3、类对象的使用;
4、类对象指针的使用等。
二、课程设计时间和实施方式:
本次课程设计安排在本学期2010年1月11号至2010年1月22号(共2周)进行。
本次课程设计采取分散安排与相对集中结合、个别进行与总体进度检查验收结合的方式进行,在指定的课程设计时间段内,安排一定数量的集中讲解与指导时间,学生灵活安排自己的课余时间进行和完成相关设计,指导教师则在检查总体进度上把握学生的设计进程。
三、设计思路:
(根据老师的提示)
实验名称:
《学生成绩管理系统》
简介:
该系统的主要功能是为了实现班级学生成绩的管理,用户可以进入程序后先创建班级,然后输入班级成员的信息。
该系统会记录和统计用户的录入情况,如该系统在记录用户录入学生信息的同时,会统计班级的人数。
同时,该系统还会根据用户输入学生的学号进行判断排序。
因此用户可以不按学生的学号顺序进行录入。
该系统支持用户另存为其他名字的数据文件。
如系统默认把数据保存在myfile.txt文件里面,用户可以选择另存为xxx.txt文件(xxx为用户自定义的名字)。
同时改程序还支持打开其他数据文件。
如用户在上一次的操作中另存文件为xxx.txt,用户就可以根据系统提示打开名为xxx.txt的文件,并且用户在读入数据后系统会自动对更改过的xxx.txt文件进行保存数据。
该系统支持学生信息的修改、删除、查询功能。
(欢迎用户使用该系统!
)
1、建立一个CPerson类,作为基类,成员变量为:
IDNo(身份张号码)、
Name(姓名)、
Addr(住址)、
Tel(电话号码)。
其中,IDNo(身份张号码)、Name(姓名)要求在创建对象时输入。
并且对象创建之后不能修改;其他两个可以在创建时输入,可以创建后输入,并作修改;
2、建立一个CStudent类,继承自CPerson类。
成员变量为:
StudNo(学号)、
Math(数学成绩)、
English(英语成绩)、
Average(评价成绩)。
其中,StudNo要求在创建对象时输入,并且对象创建之后不能修改;
Math(数学成绩),English(英语成绩),可以在创建时输入,可以创建后输入,并作修改;
在输入或者修改Math(数学成绩),English(英语成绩)时计算出Average(评价成绩)。
3、建立一个CClass类。
成员变量为:
ClassName(班级名称)、
CStudent指针数组,
数组大小限定为50。
其中,ClassName(班级名称)要求在创建对象时输入,并且对象创建之后不能修改;
CStudent指针数组初始化时,每个指针值均为NULL;CClass类的析构函数要完成每个CStudent的释放动作。
4、以提示加数字选择的方式来实现一级菜单和二级菜单。
1.创建学生信息→(输入学生具体信息)
2.查看学生信息→(查看学生信息)
1.创建班级→3.修改学生信息→(可以修改地址、成绩和电话)
2.读取班级信息4.删除学生信息→(根据学号删除学生信息)
3.退出程序5.写入文件
6.查询学生信息
0.退出程序
主要代码段:
//------CPerson基类成员:
IDNoNameAddrTel
classCPerson
{
public:
intIDNo;
charName[20];
charAddr[30];
intTel;
};
//------CStudent类--继承自CPerson成员:
StudNoMathEnglishAverage
classCStudent:
publicCPerson
{
public:
intStudNo;
doubleMath;
doubleEnglish;
doubleAverage;
};
//------CClass类成员:
CClassNameCStudent
classCClass
{
private:
charCClassName[20];
CStudent*stu[50];
public:
CClass();
~CClass();
voidCreateClass();
voidOutClassName();
voidNewAStu();
voidchange();
voiddel();
};
《学生成绩管理系统》结构图
《学生成绩管理系统》流程图
四、附加功能:
1.文件的读写功能<支持打开其他数据文件、另存为数据文件>。
2.身份证位数的判断、学号位数的判断。
如:
当用户输入的身份证号码不足18位或者多余18位的时候。
系统程序会自动报错,并提示用户再次输入。
3.用户选择判断。
如:
当选项是1、2、3.....的时候,而用户选择其他字符,系统程序会自动报错,并提示用户再次输入。
4.按姓名查询功能。
5.打开其他文件,在对文件操作后可以自动保存
如:
打开Y.txt文件后,系统会读取Y.txt里面的数据,在对数据进行操作之后,系统可以自动保存Y.txt文件。
五、用户使用指南
1、第一步→创建班级
用户的第一步就是创建班级,选择1选项之后就提示“请输入班级名称:
”提示用户输入班级名称。
2、第二步→进入菜单
用户可以执行的操作的:
1、添加学生信息
2、显示学生信息
3、修改学生信息
4、删除学生信息
5、保存学生信息
6、查询学生信息
0、退出程序
3、第三步→添加学生信息
选择1:
用户按提示输入学生的身份证号码(18位)(IDNo)、姓名(Name)、地址、手机号码、学号(12位)、数学成绩、英语成绩。
在用户输入的过程中可以判断身份证号码的长度(18位)、学生的学号(12位)。
接着可以通过输入的数学成绩和英语成绩计算两门课程的平均分成绩。
当系统程序执行完这一操作,然后跳回主菜单,执行下一操作。
4、第四步→查看学生信息
选择2:
用户可以查看创建的班级名称、班级的人数。
以及班级的所以成员的信息。
如:
学号、身份证号码、姓名、地址、手机号码、数学成绩、英语成绩、平均分成绩。
当系统程序执行完这一操作,然后跳回主菜单,执行下一操作。
5、第五步→修改学生信息
选择3:
用户可以根据提示,选择修改的属性。
学生的地址、手机号码、数学成绩、英语成绩。
再根据提示,修改其属性。
当系统程序执行完这一操作,然后跳回主菜单,执行下一操作。
6、第五步→删除学生信息
选择4:
用户根据提示,输入要删除的学生的学号,程序会根据输入的学号查找用户的信息,并且提出该学生的信息,执行删除的操作。
当系统程序执行完这一操作,然后跳回主菜单,执行下一操作。
7、第六步→写入文件
选择5:
系统程序会默认保存用户输入的信息。
当用户选择该选项时,会提示"文件已默认保存了!
\t现在需要另存为?
(Y/N)",如果用户输入Y或y,程序会提示"请输入文件名称:
"提醒用户输入另存为文件的名字。
系统会自动保存。
当系统程序执行完这一操作,然后跳回主菜单,执行下一操作。
8、第七步→读出学生信息
选择6:
系统程序会提示用户("1、打开上次的文件2、打开其他文件")
当用户选择1时,系统程序会自动调出上一次用户操作的数据。
当系统程序执行完这一操作,然后跳回主菜单,执行下一操作。
当用户选择2时,系统程序会提示用户需要打开的文件(.txt后缀)名
如果存在该文件,系统程序会打开文件,并调用里面的数据进行操作。
如果没有该文件,系统会自动创建一个空白的文件,但里面的信息为空。
9、第八步→退出程序
当用户选择“0”的时候,程序退出使用,返回到操作系统桌面。
六、编程过程中的问题与解决方法(Q-question;S-solution)
Q-1:
菜单的循环输出问题!
S:
在1月3日开始做程序的时候,看到老师给的那些设计要求,然后一开始就想到要做的就是菜单的循环输出。
但在循环的那一块就出了问题。
使用的一个selection选择变量在“ci>>selection;”之后,因为selection>0为真,而我是用“while
(1){…}”去判断循环的,就这样进入了无限的死循环。
错误程序代码段:
while
(1)
{
cout<<"---------------学生信息管理程序---------------"< ...... cin>>selection; switch(selection) { ...... } 修改后的代码段: while(selection! =0) { cout<<"---------------学生信息管理程序---------------"< ...... cin>>selection; switch(selection) { ...... } Q-2: 真是的信息,我们的用户是要输入自己的信息的,但他们的信息就可能不仅仅是数字,或者是单纯的8位数。 S: 对于这个问题,比较简单的方法就是把我们定义的变量给改成“charvar[];”这种数组类型,从而通过数组的长度去控制用户能输入的最大限度。 错误程序代码段: IntStuNo; ...... 修改后的代码段: CharStuNo[19]; ...... Q-3: charvar[];的比较,查询判断学号。 S: Charvar[]类型的比较当然不能把我们输入的值作比较,而使用一个头文件#include str1>str2时,返回正值。 str1 str1==str2时,返回0 错误程序代码段: Intstr; ...... Cin>>str; for(i=0;i<50;i++) if(stu[i]->StudNo==tr) ...... 修改后的代码段: charstr[15]; ...... Cin>>str; for(i=0;i<50;i++) if(strcmp(stu[i]->StudNo,str)==0) ...... Q-4: 身份证、学号位数的判断 S: 我的思路是判断stu[time]->IDNo[18]! ='\0' 修改后的代码段: cout<<"请输入身份证号码(18位): \t\t"; cin>>stu[time]->IDNo;//-----------检验身份证位数 while(stu[time]->IDNo[18]! ='\0') { cout<<"DataError! \n请输入18位身份证号码: \t\t"; cin>>stu[time]->IDNo; } .... 学号的判断方法同理。 Q-5: 指针数组的正确理解! S: 在编写程序的时候很多人都不能正确理解什么是指针数组。 一开始的时候我也不是很理解,但在问了老师之后,却有点明白。 虽然老师只是空空的说了一下,并没有写实际的代码给我看。 但欲望的趋势下我上网查看了相关的资料。 方才明白了指针数组的含义。 对这个程序而言,实际上,指针数组就是一个类的成员,这个成员指向的是另外一个类的成员。 并通过指针的方式访问成员变量。 下面是比较简化的代码: #include #include #include inttime=0; classCPerson { public: charName[20]; }; classCStudent: publicCPerson { public: charStudNo[20]; }; classCClass { private: charCClassName[20]; CStudent*stu[50]; public: CClass(); ~CClass(); voiddisplay(); voidNewA(); }; CClass: : CClass() { for(inti=0;i<50;i++) { stu[i]=newCStudent(); } } CClass: : ~CClass() { for(inti=0;i<50;i++) { deletestu[i]; } } voidCClass: : NewA()//创建学生 { cout<<"请输入ID: \t\t"; cin>>stu[time]->Name; cout<<"请输入StuID: \t\t"; cin>>stu[time]->StudNo; time=time++; } voidCClass: : display() { for(inti=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生成绩管理系统 最新 学生 成绩管理系统 c+ 程序设计 资料