您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C++学生成绩管理系统实验报告
C++课程设计报告书题目:学生成绩管理系统专业:信息与计算科学班级:0208403学号:020840306姓名:张亚炬任课老师:文军学生成绩管理系统课程设计报告摘要:本系统主要用于对学生的成绩进行管理。通过本系统,可以将各个学生的成绩记录输入到系统中,保存到文件,便于查阅和相关管理。此外,该系统还能实现对学生成绩记录的显示,查询以及插入或删除学生的成绩记录等功能。一、问题描述编写一个简单的学生成绩管理系统。学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别和成绩四部分组成,学号不超过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(len20)len=20;Name.copy(name,len,0);name[len]=0;len=Number.length();if(len10)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();};现在就要编写各个功能的函数实体了:①添加学生成绩记录add_record(),建立一个链表:boolstuscore::add_record(){inti;intj=1;stringName;stringNumber;charSex;doubleChengji;student*newnode,*current,*previous;current=previous=head;cout请输入插入的位置:;cini;if(i=0||ilength()+1){cout输入的位置不正确!;returnfalse;}cout请输入学号:;cinNumber;cout请输入姓名:;cinName;cout请输入性别:;cinSex;cout请输入成绩:;cinChengji;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&&ji){previous=current;current=current-next;j++;}newnode-next=current;previous-next=newnode;returntrue;}}②显示学生成绩记录display_record(),具体实现如下:voidstuscore::display_record(){student*current;current=head;cout表中有length()条记录!\n;if(length()){coutsetiosflags(ios::left)setw(15)学号setw(15)姓名setw(12)性别setw(5)成绩endl;while(current){coutcurrent;current=current-next;}}}另外,对运算符进行了重载,这样就可以直接用cout输出学生成绩记录,函数重载如下:ostream&operator(ostream&output,conststudent*addr){outputsetiosflags(ios::left)setw(15)addr-numbersetw(15)addr-namesetw(12)addr-sexsetw(5)addr-chengjiendl;returnoutput;}③查找学生成绩记录find_record(),具体实现如下:boolstuscore::find_record(){student*current,*previous;stringNumber;cout请输入要查找的学生的学号:;cinNumber;current=previous=head;while(current){if(current-number==Number){coutsetiosflags(ios::left)setw(15)学号setw(15)姓名setw(12)性别setw(5)成绩endl;coutcurrent;returntrue;}else{previous=current;current=current-next;}}if(!current){cout没有找到该学生!;returnfalse;}returntrue;}④删除学生记录delete_record(),具体实现如下:boolstuscore::delete_record(){strings;student*current,*previous;current=previous=head;cout成绩表中有length()个学生成绩记录endl;if(!length()){cout学生成绩表已空!\n;returnfalse;}else{cout请输入要删除的学生记录的学号:;cins;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;}⑤保存学生成绩记录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();}}⑥加载学生成绩记录load_record(),具体实现如下:voidstuscore::load_record(){ifstreamfile;charfname[20];student*n;n=newstudent();cout请输入要打开的文件名(fname.txt):;cinfname;file.open(fname,ios::in);if(!file){cout文件打开失败!;cin.get();}else{coutsetiosflags(ios::left)setw(21)姓名setw(11)学号setw(5)性别setw(5)成绩endl;while(file&&file.peek()!=EOF){file.read((char*)n,sizeof(*n));coutnendl;}file.close();}}⑦计算学生成绩记录的个数length(),具体实现如下:intstuscore::length(){intj=0;student*current;current=head;while(current){current=current-next;j++;}returnj;}三、程序运行结果:主菜单界面:①添加学生成绩记录:②显示学生
本文标题:C++学生成绩管理系统实验报告
链接地址:https://www.777doc.com/doc-6189177 .html