《学生成绩管理系统》c++程序设计Word文档下载推荐.docx
《《学生成绩管理系统》c++程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《学生成绩管理系统》c++程序设计Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
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
intStudNo;
doubleMath;
doubleEnglish;
doubleAverage;
//------CClass类成员:
CClassNameCStudent
classCClass
{
private:
charCClassName[20];
CStudent*stu[50];
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<
<
---------------学生信息管理程序---------------"
endl;
......
cin>
switch(selection)
{
}
修改后的代码段:
while(selection!
=0)
Q-2:
真是的信息,我们的用户是要输入自己的信息的,但他们的信息就可能不仅仅是数字,或者是单纯的8位数。
对于这个问题,比较简单的方法就是把我们定义的变量给改成“charvar[];
”这种数组类型,从而通过数组的长度去控制用户能输入的最大限度。
IntStuNo;
......
CharStuNo[19];
Q-3:
charvar[];
的比较,查询判断学号。
Charvar[]类型的比较当然不能把我们输入的值作比较,而使用一个头文件#include<
cstring>
然后使用strcmp(str1,str2);
作比较;
str1>
str2时,返回正值。
str1<
str2时,返回负值。
str1==str2时,返回0
Intstr;
......
Cin>
str;
for(i=0;
i<
50;
i++)
if(stu[i]->
StudNo==tr)
charstr[15];
if(strcmp(stu[i]->
StudNo,str)==0)
Q-4:
身份证、学号位数的判断
我的思路是判断stu[time]->
IDNo[18]!
='
\0'
cout<
请输入身份证号码(18位):
\t\t"
;
cin>
stu[time]->
IDNo;
//-----------检验身份证位数
while(stu[time]->
{
DataError!
\n请输入18位身份证号码:
}
....
学号的判断方法同理。
Q-5:
指针数组的正确理解!
在编写程序的时候很多人都不能正确理解什么是指针数组。
一开始的时候我也不是很理解,但在问了老师之后,却有点明白。
虽然老师只是空空的说了一下,并没有写实际的代码给我看。
但欲望的趋势下我上网查看了相关的资料。
方才明白了指针数组的含义。
对这个程序而言,实际上,指针数组就是一个类的成员,这个成员指向的是另外一个类的成员。
并通过指针的方式访问成员变量。
下面是比较简化的代码:
#include<
iostream.h>
string.h>
#include<
process.h>
inttime=0;
charStudNo[20];
voiddisplay();
voidNewA();
CClass:
:
CClass()
for(inti=0;
stu[i]=newCStudent();
}
~CClass()
deletestu[i];
voidCClass:
NewA()//创建学生
请输入ID:
Name;
请输入StuID:
StudNo;
time=time++;
display()
time;
stu[i]->
Name<
\t"
StudNo<
endl;
voidmain()
CClassClassRoom;
ClassRoom.NewA();
ClassRoom.display();
Q-6:
代码太长,程序窗口的显示。
经常程序员要面临的问题就是用户使用界面的显示问题,为给用户提供一个舒适的界面。
因此我就写了几个函数去制作窗口的界面。
voidback()
\t\t\t执行成功!
system("
pause"
);
//任意键继续
cls"
//清除屏幕
voidback_no()
voidtitle()
Q-7:
主菜单的循环
开始在判断主菜单的时候,用的是int去赋值用户的选择选项,但是当用户选择其他字符的时候就会出错,直接跳出程序。
因此我就修改了菜单的循环判断程序。
把while循环改成for循环。
错误的程序代码:
while(selection!
ClassRoom.writein();
1、添加学生信息"
endl
<
2、显示学生信息"
3、修改学生信息"
4、删除学生信息"
5、保存学生信息"
6、查询学生信息"
0、退出程序"
endl<
请选择:
case1:
{
title();
cout<
1.添加学生信息"
ClassRoom.NewAStu();
time=time+1;
};
break;
case2:
2.打印学生信息"
if(time==0)
{
\n\n\t\t\t暂时没有记录!
back_no();
break;
}
else
ClassRoom.OutClassName();
case3:
3.修改学生信息"
ClassRoom.change();
}break;
case4:
{
4.删除学生信息"
ClassRoom.del();
case5:
5.保存学生信息"
ClassRoom.writeino();
case6:
6.查询学生信息"
ClassRoom.find();
}
default:
while(selection<
0||selection>
6)
{
错误输入.请重新输入!
\n"
cin>
system("
};
break;
}
}
修改后程序代码:
for(into=0;
o<
1000;
o++)
cin>
if(strcmp(selection,"
1"
)==0)
title();
cout<
ClassRoom.NewAStu();
time=time+1;
elseif(strcmp(selection,"
2"
if(time==0)
{
cout<
back_no();
else
ClassRoom.OutClassName();
3"
ClassRoom.change();
4"
ClassRoom.del(