C++学生成绩管理系统课程设计报告.docx
- 文档编号:10181186
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:21
- 大小:198.19KB
C++学生成绩管理系统课程设计报告.docx
《C++学生成绩管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++学生成绩管理系统课程设计报告.docx(21页珍藏版)》请在冰点文库上搜索。
C++学生成绩管理系统课程设计报告
枣庄学院
信息科学与工程学院
课程设计任务书
题目:
组员:
崔浩、孙睿、韩丰壮
专业:
网络工程
课程:
C++语言程序设计
指导教师:
马怀志职称:
助教
完成时间:
2013年5月----2013年6月
枣庄学院信息科学与工程学院制
年月日
课程设计任务书及成绩评定
课程设计的任务和具体要求(学生根据实际情况填写)
编写一个简单的学生成绩管理系统。
学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别和成绩四部分组成,学号不超过11个字符,姓名不超过21个字符,性别为’m’(male)或’f’(female),成绩为double型数据;系统具有添加、显示查找、记录、删除、保存、加载学生成绩记录,退出学生成绩管理系统的功能
指导教师评语
成绩:
指导教师签字:
日期:
课程设计所需软件、硬件等
一台电脑配备Visualc++6.0软件,
课程设计进度计划
起止日期
工作内容
备注
6-6至6-8
小组收集资料
6-9
组内商量整体规划课程设计
6-10至6-11
组内分工做各自负责的工作
6-12至6-13.
组内汇总各自所做的成果
6-14至6-15
小组用visualc++6.0调试
6-16
撰写任务书
参考文献、资料索引
序号
文献资料名称
编著者
出版单位
1
C++语言程序设计
温秀梅、丁学钧、李建华
清华大学出版社
2
C++程序设计教程(第二版)
罗建军等
高等教育出版社
3
XX文库
未知
未知
目录
一、摘要………………………………………………………………….
二、问题描述……………………………………………………………
1.摘要
本系统主要用于对学生的成绩进行管理。
通过本系统,可以将各个学生的成绩记录输入到系统中,保存到文件,便于查阅和相关管理。
此外,该系统还能实现对学生成绩记录的显示,查询以及插入或删除学生的成绩记录等功能。
2.问题描述
编写一个简单的学生成绩管理系统。
学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别和成绩四部分组成,学号不超过11个字符,姓名不超过21个字符,性别为’m’(male)或’f’(female),成绩为double型数据。
该系统具有以下功能:
程序开始执行时显示如下版权信息和主菜单:
*******学生成绩管理系统*************
●*1.添加学生成绩记录
●*2.显示学生成绩记录
●*3.查找学生成绩记录
●*4.删除学生成绩记录
●*5.保存学生成绩记录
●*6.加载学生成绩记录
●*7.退出学生成绩管理系统
************************************
请输入(1~7):
通过键盘输入数字1~7后,程序能够执行相应的功能,执行完后回到上述主菜单继续等待用户输入,输入数字7后退出程序。
选择“添加学生成绩记录”后,输入要插入记录的位置。
按程序提示依次输入学号,姓名,性别,成绩,插入记录成功。
选择“显示学生成绩记录”,显示学生成绩表中已有的学生记录的个数,并显示出各个学生记录的相关信息。
选择“查找学生成绩记录”,按提示输入要查找的学生的学号,输入学号,若该学号存在,则输出相应的学生记录,如该学号不存在,则按任意键返回主菜单。
选择“删除学生成绩记录”,按提示输入要删除的学生的学号,输入学号,若改学号存在,则删除相应的学生记录,如果该学号不存在,则按任意键返回主菜单。
选择“保存学生成绩记录”,系统会将已有的学生记录保存在默认的文件名为fname.txt的文件中。
选择“加载学生成绩记录”,系统会提示输入文件名,输入默认的文件名为fname.txt,则可将文件中的相关信息导出。
选择“退出学生成绩管理系统”,按任意键退出系统。
3.解决方案
这是一个很实际的编程实例。
编程要求很详细,内容也比较多,有一定难度。
首先,学生成绩记录是一个复杂的数据结构,至少应包括学号,姓名,性别和成绩。
所以,必须建立一个类student,用来记录学号,姓名,性别和成绩。
此外还得建立一个类stuscore,用来记录多个学生的成绩记录。
3.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&Name,string&Number,charSex,doubleChengji)用于输入学生记录,相当于一个注册。
其具体实现如下:
voidstudent:
:
init(string&Name,string&Number,charSex,doubleChengji)
{
intlen;
len=Name.length();
if(len>20)len=20;
Name.copy(name,len,0);
name[len]=0;
len=Number.length();
if(len>10)len=10;
Number.copy(number,len,0);
number[len]=0;
sex=((sex=='m')?
'm':
'f');
chengji=Chengji;
}
3.2建立学生成绩记录类stuscore
该类是学生成绩记录的集合。
其成员函数则是问题中要求的添加、显示、查找、删除、保存、导出等各种操作。
改类具体如下:
classstuscore
{
student*head;
public:
booladd_record();//添加学生成绩记录
voiddisplay_record();//显示学生成绩记录
intlength();//学生成绩记录个数
booldelete_record();//删除学生成绩记录
voidsave_record();//保存学生成绩记录
voidload_record();//加载学生成绩记录
boolfind_record();//查找学生成绩记录
stuscore();
virtual~stuscore();
};
3.3编写各个功能的函数实体
3.3.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;
}
cout<<"请输入学号:
";
cin>>Number;
cout<<"请输入姓名:
";
cin>>Name;
cout<<"请输入性别:
";
cin>>Sex;
cout<<"请输入成绩:
";
cin>>Chengji;
newnode=newstudent();
newnode->init(Name,Number,Sex,Chengji);
newnode->next=null;
if(!
newnode)
{
cout<<"内存已满!
";
returnfalse;
}
if(i==1)
{
newnode->next=head;
head=newnode;
returntrue;
}
Else
{
while(current&&j
{
previous=current;
current=current->next;
j++;
}
newnode->next=current;
previous->next=newnode;
returntrue;
}
}
3.3.2显示学生成绩记录display_record()
具体实现如下:
voidstuscore:
:
display_record()
{
student*current;
current=head;
cout<<"表中有"< \n"; if(length()) { cout< : left)< while(current) { cout< current=current->next; } } } 另外,对<<运算符进行了重载,这样就可以直接用cout输出学生成绩记录,函数重载如下: ostream&operator<<(ostream&output,conststudent*addr) { output< : left)< returnoutput; } 3.3.3查找学生成绩记录find_record() 具体实现如下: boolstuscore: : find_record() {student*current,*previous; stringNumber; cout<<"请输入要查找的学生的学号: "; cin>>Number; current=previous=head; while(current) { if(current->number==Number) { cout< : left)< cout< returntrue; } Else { previous=current; current=current->next; } } if(! current) { cout<<"没有找到该学生! "; returnfalse; } returntrue; } 3.3.4删除学生记录delete_record() 具体实现如下: boolstuscore: : delete_record() { strings; student*current,*previous; current=previous=head; cout<<"成绩表中有"< if(! length()) { cout<<"学生成绩表已空! \n"; returnfalse; } else{ cout<<"请输入要删除的学生记录的学号: " cin>>s; while(current) { if(current->number==s) { if(current==head) { head=head->next; deletecurrent; cout<<"删除成功! "; returntrue; } else { previous->next=current->next; deletecurrent; cout<<"删除成功! "; returntrue; } } else { previous=current; current=current->next; } } if(! current) { cout<<"没有找到该学号所对应的学生记录! "; returnfalse; } } returntrue } 3.3.5保存学生成绩记录save_record() 具体实现如下: voidstuscore: : save_record() {ofstreamfile; student*current=head; file.open("./fname.txt",ios: : out); if(! file) { cout<<"打开文件失败! "; cin.get(); } else { while(current) { if(file&&! file.eof()) file.write((char*)current,sizeof(*current)); current=current->next; } cout<<"保存完成! "; file.close(); } } 3.3.6加载学生成绩记录load_record() 具体实现如下: voidstuscore: : load_record() { ifstreamfile; charfname[20]; student*n; n=newstudent(); cout<<"请输入要打开的文件名(fname.txt): "; cin>>fname; file.open(fname,ios: : in); if(! file) { cout<<"文件打开失败! "; cin.get(); } else { cout< : left)< while(file&&file.peek()! =EOF) { file.read((char*)n,sizeof(*n)); cout< } file.close(); } } 3.3.7计算学生成绩记录的个数length() 具体实现如下: intstuscore: : length() { intj=0; student*current; current=head; while(current) {current=current->next; j++; } returnj; } 四.程序运行结果 4.1主菜单界面 4.2添加学生成绩记录 4.3显示学生成绩记录 4.4再添加几个学生成绩记录 显示结果为: 4.5查找学生成绩记录 4.6删除学生成绩记录 4.7删除记录后再显示学生成绩记录 4.8保存学生成绩记录 4.9加载学生成绩记录 4.10退出学生成绩系统 五.课程设计总结 这是一个综合性较强,很实际的一个编程实例。 刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。 可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。 单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。 有时候,一个错误得找好久,才能发现。 本系统的重点就是要会建立两个类。 一个是学生类student,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。 另一个类是学生成绩记录系统类stuscore,该类用来存放多个学生的成绩记录。 难点就是stuscore类里的各个功能的实现。 总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存,加载这三个功能就需要花点心思了,可能是平时用的比较少吧,生疏了。 可见只有通过平时多加练习,才能有助于自己巩固知识点。 最后想说的是,调试程序真的很关键。 调试程序需要较大的耐心。 可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。 有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。 通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。 参考文献: C++程序设计教程(第二版),罗建军等编著,高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 学生 成绩管理系统 课程设计 报告