C++学生成绩管理系统课程设计报告.docx

上传人:b****5 文档编号:4570994 上传时间:2022-12-06 格式:DOCX 页数:15 大小:197.36KB
下载 相关 举报
C++学生成绩管理系统课程设计报告.docx_第1页
第1页 / 共15页
C++学生成绩管理系统课程设计报告.docx_第2页
第2页 / 共15页
C++学生成绩管理系统课程设计报告.docx_第3页
第3页 / 共15页
C++学生成绩管理系统课程设计报告.docx_第4页
第4页 / 共15页
C++学生成绩管理系统课程设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C++学生成绩管理系统课程设计报告.docx

《C++学生成绩管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++学生成绩管理系统课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

C++学生成绩管理系统课程设计报告.docx

C++学生成绩管理系统课程设计报告

C++课程设计报告书

 

题目:

学生成绩管理系统

专业:

信息与计算科学

班级:

0208403

学号:

*********

******

任课老师:

文军

 

学生成绩管理系统课程设计报告

摘要:

本系统主要用于对学生的成绩进行管理。

通过本系统,可以将各个学生的成绩记录输入到系统中,保存到文件,便于查阅和相关管理。

此外,该系统还能实现对学生成绩记录的显示,查询以及插入或删除学生的成绩记录等功能。

一、问题描述

编写一个简单的学生成绩管理系统。

学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别和成绩四部分组成,学号不超过11个字符,姓名不超过21个字符,性别为’m’(male)或’f’(female),成绩为double型数据。

该系统具有以下功能:

(1)程序开始执行时显示如下版权信息和主菜单:

*******学生成绩管理系统*************

●*1.添加学生成绩记录

●*2.显示学生成绩记录

●*3.查找学生成绩记录

●*4.删除学生成绩记录

●*5.保存学生成绩记录

●*6.加载学生成绩记录

●*7.退出学生成绩管理系统

************************************

请输入(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&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;

}

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;

}

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;

}

}

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)<number<name<sex<chengji<

returnoutput;

}

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;

}

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;

}

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();

}

}

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();

}

}

7计算学生成绩记录的个数length(),具体实现如下:

intstuscore:

:

length()

{

intj=0;

student*current;

current=head;

while(current)

{current=current->next;

j++;

}

returnj;

}

三、程序运行结果:

主菜单界面:

1添加学生成绩记录:

2显示学生成绩记录:

3按照①所示再添加几个学生成绩记录,显示结果为:

4查找学生成绩记录:

5删除学生成绩记录:

删除记录后再显示学生成绩记录:

6保存学生成绩记录:

7加载学生成绩记录:

8退出学生成绩系统:

四、课程设计总结

这是一个综合性较强,很实际的一个编程实例。

刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。

可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。

单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。

有时候,一个错误得找好久,才能发现。

本系统的重点就是要会建立两个类。

一个是学生类student,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。

另一个类是学生成绩记录系统类stuscore,该类用来存放多个学生的成绩记录。

难点就是stuscore类里的各个功能的实现。

总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存,加载这三个功能就需要花点心思了,可能是平时用的比较少吧,生疏了。

可见只有通过平时多加练习,才能有助于自己巩固知识点。

最后想说的是,调试程序真的很关键。

调试程序需要较大的耐心。

可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。

有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。

通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。

参考文献:

C++程序设计教程(第二版),罗建军等编著,高等教育出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1