C++学生成绩管理系统课程设计报告Word文件下载.docx
《C++学生成绩管理系统课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++学生成绩管理系统课程设计报告Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
请输入(1~7):
(2)通过键盘输入数字1~7后,程序能够执行相应的功能,执行完后回到上述主菜单继续等待用户输入,输入数字7后退出程序。
(3)选择“添加学生成绩记录”后,输入要插入记录的位置。
按程序提示依次输入学号,姓名,性别,成绩,插入记录成功。
(4)选择“显示学生成绩记录”,显示学生成绩表中已有的学生记录的个数,并显示出各个学生记录的相关信息。
(5)选择“查找学生成绩记录”,按提示输入要查找的学生的学号,输入学号,若该学号存在,则输出相应的学生记录,如该学号不存在,则按任意键返回主菜单。
(6)选择“删除学生成绩记录”,按提示输入要删除的学生的学号,输入学号,若改学号存在,则删除相应的学生记录,如果该学号不存在,则按任意键返回主菜单。
(7)选择“保存学生成绩记录”,系统会将已有的学生记录保存在默认的文件名为fname.txt的文件中。
(8)选择“加载学生成绩记录”,系统会提示输入文件名,输入默认的文件名为fname.txt,则可将文件中的相关信息导出。
(9)选择“退出学生成绩管理系统”,按任意键退出系统。
二、解决方案
这是一个很实际的编程实例。
编程要求很详细,内容也比较多,有一定难度。
首先,学生成绩记录是一个复杂的数据结构,至少应包括学号,姓名,性别和成绩。
所以,必须建立一个类student,用来记录学号,姓名,性别和成绩。
此外还得建立一个类stuscore,用来记录多个学生的成绩记录。
1、建立类学生类student,它至少包括学号number,姓名name,性别sex,成绩chengji。
具体如下:
classstudent
{
public:
charname[21];
//姓名
charnumber[11];
//学号
charsex;
//性别
doublechengji;
//成绩
student*next;
//类指针,用来指向下一个记录
student();
voidinit(string&
Name,string&
Number,charSex,doubleChengji);
//输入学生成绩记录
virtual~student();
};
函数init(string&
Number,charSex,doubleChengji)用于输入学生记录,相当于一个注册。
其具体实现如下:
voidstudent:
:
init(string&
Number,charSex,doubleChengji)
intlen;
len=Name.length();
if(len>
20)len=20;
Name.copy(name,len,0);
name[len]=0;
len=Number.length();
10)len=10;
Number.copy(number,len,0);
number[len]=0;
sex=((sex=='
m'
)?
'
f'
);
chengji=Chengji;
}
2、建立学生成绩记录类stuscore,该类是学生成绩记录的集合。
其成员函数则是问题中要求的添加、显示、查找、删除、保存、导出等各种操作。
改类具体如下:
classstuscore
student*head;
public:
booladd_record();
//添加学生成绩记录
voiddisplay_record();
//显示学生成绩记录
intlength();
//学生成绩记录个数
booldelete_record();
//删除学生成绩记录
voidsave_record();
//保存学生成绩记录
voidload_record();
//加载学生成绩记录
boolfind_record();
//查找学生成绩记录
stuscore();
virtual~stuscore();
现在就要编写各个功能的函数实体了:
1添加学生成绩记录add_record(),建立一个链表:
boolstuscore:
add_record()
inti;
intj=1;
stringName;
stringNumber;
charSex;
doubleChengji;
student*newnode,*current,*previous;
current=previous=head;
cout<
<
"
请输入插入的位置:
;
cin>
>
i;
if(i<
=0||i>
length()+1)
{
cout<
输入的位置不正确!
returnfalse;
}
请输入学号:
cin>
Number;
请输入姓名:
Name;
请输入性别:
Sex;
请输入成绩:
Chengji;
newnode=newstudent();
newnode->
init(Name,Number,Sex,Chengji);
next=null;
if(!
newnode)
内存已满!
}
if(i==1)
{
newnode->
next=head;
head=newnode;
returntrue;
else
while(current&
&
j<
i)
{
previous=current;
current=current->
next;
j++;
}
next=current;
previous->
next=newnode;
2显示学生成绩记录display_record(),具体实现如下:
voidstuscore:
display_record()
student*current;
current=head;
表中有"
length()<
条记录!
\n"
if(length())
setiosflags(ios:
left)<
setw(15)<
学号"
姓名"
setw(12)<
性别"
setw(5)<
成绩"
endl;
while(current)
current;
另外,对<
运算符进行了重载,这样就可以直接用cout输出学生成绩记录,函数重载如下:
ostream&
operator<
(ostream&
output,conststudent*addr)
output<
addr->
number<
name<
sex<
chengji<
returnoutput;
3查找学生成绩记录find_record(),具体实现如下:
find_record()
{student*current,*previous;
请输入要查找的学生的学号:
if(current->
number==Number)
cout<
else
current=current->
current)
没有找到该学生!
returnfalse;
returntrue;
4删除学生记录delete_record(),具体实现如下:
delete_record()
strings;
student*current,*previous;
成绩表中有"
个学生成绩记录"
length())
学生成绩表已空!
else{
请输入要删除的学生记录的学号:
s;
number==s)
if(current==head)
{
head=head->
deletecurrent;
cout<
删除成功!
returntrue;
}
else
previous->
next=current->
deletecurrent;
returntrue;
没有找到该学号所对应的学生记录!
returntrue;
5保存学生成绩记录save_record(),具体实现如下:
save_record()
ofstreamfile;
student*current=head;
file.open("
./fname.txt"
ios:
out);
if(!
file)
打开文件失败!
cin.get();
else
if(file&
!
file.eof())
file.write((char*)current,sizeof(*current));
current=current->
保存完成!
file.close();
6加载学生成绩记录load_record(),具体实现如下:
load_record()
ifstreamfile;
charfname[20];
student*n;
n=newstudent();
请输入要打开的文件名(fname.txt):
fname;
file.open(fname,ios:
in);
文件打开失败!
cin.get();
setw(21)<
setw(11)<
while(file&
file.peek()!
=EOF)
file.read((char*)n,sizeof(*n));
n<
file.close();
7计算学生成绩记录的个数length(),具体实现如下:
intstuscore:
length()
intj=0;
{current=current->
j++;
returnj;
三、程序运行结果:
主菜单界面:
1添加学生成绩记录:
2显示学生成绩记录:
3按照①所示再添加几个学生成绩记录,显示结果为:
4查找学生成绩记录:
5删除学生成绩记录:
删除记录后再显示学生成绩记录:
6保存学生成绩记录:
7加载学生成绩记录:
8退出学生成绩系统:
四、课程设计总结
这是一个综合性较强,很实际的一个编程实例。
刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。
可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。
单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。
有时候,一个错误得找好久,才能发现。
本系统的重点就是要会建立两个类。
一个是学生类student,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。
另一个类是学生成绩记录系统类stuscore,该类用来存放多个学生的成绩记录。
难点就是stuscore类里的各个功能的实现。
总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存,加载这三个功能就需要花点心思了,可能是平时用的比较少吧,生疏了。
可见只有通过平时多加练习,才能有助于自己巩固知识点。
最后想说的是,调试程序真的很关键。
调试程序需要较大的耐心。
可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。
有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。
通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。
参考文献:
C++程序设计教程(第二版),罗建军等编著,高等教育出版社