C++课程设计报告学生学籍管理系统.docx
- 文档编号:4163962
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:19
- 大小:438.23KB
C++课程设计报告学生学籍管理系统.docx
《C++课程设计报告学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告学生学籍管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
C++课程设计报告学生学籍管理系统
课程名称:
C++面向对象程序设计
课程设计题目:
大学生学籍管理系统
目录:
一、系统设计目标、意义
二、系统设计思路
三、系统功能介绍
四、输入输出的设计
(1)界面的设计
(2)数据输出设计
(3)系统运行结果
五、详细设计
(1)系统功能结构图
(2)UML
六、附录
七、系统设计、开发过程中遇到的问题
八、心得体会
学生学籍管理系统
一、系统设计目标、意义
(一)系统实现的目标
1、课程设计的任务:
制作一个小型的学生学籍管理系统,要求制作一个菜单,实现数据的录入,数据的显示,数据查找,数据的删除,数据的保存,数据的统计,数据的修改,系统的退出。
系统的设计要求用到C++面向对象的程序设计,要求用到类来实现,同时每一个功能用到一个函数。
2、
(1)基本功能:
学生基本信息(编号,,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩)
成绩统计(各科总成绩,各科平均成绩,各科的及格率)
(2)扩展功能:
学生数据的添加、修改、与删除
学生数据的读取与存储
3、系统特点:
系统要能够对相应的数据进行很好的测试,系统的统计对每一科的总成绩,平均成绩,及格律都进行了统计;系统数据的录入除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,包括学号,,民族,政治面貌,号,生日,性别,数学、英语、计算机的成绩;程序中查找运用了两种查找方式即学号查找和查找。
(二)系统设计的意义
通过设计此项程序,能够对学生的学籍进行统一的管理,对学生的学籍进行录入、修改、保存等功能进行处理,从而能够较快地对信息进行处理,系统数据的录入除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,程序中查找运用了两种查找方式即学号查找和查找,方便查询。
二、系统设计思路
第一步:
分析题目,建立类并派生出它的子类,画出类图。
第二步:
画出流程,根据流程图编写程序清单
第三步:
上机调试程序(使用单步调试,设置断点、分块调试的方法)。
第四步:
及时整理资料,撰写课程设计报告中有关这个题目的容。
三、系统功能介绍
(一)程序对学生学籍的数据处理要求
1能够输入并浏览学生的基本信息;
2能够实现对学生信息的查询和修改;
3能够对成绩进行统计;
4能够对学生的信息进行保存;
(二)系统功能:
资料维护:
系统维护包括对各学生信息和成绩的录入操作。
资料维护:
对数据表中的信息进行浏览。
系统查询:
可以对不同科目的总成绩、不及率、各科平均成绩相关信息。
四、输入输出的设计
1.界面的设计
①、界面设计
程序运行后会出现一个简捷的窗口,便于用户查询数据。
②、功能设计
通过主窗体调用其他窗体,具体实现可以参照系统分析相关容。
应用系统主控界面包括学生信息录入,查找等功能模块。
学生信息录入功能完成学生信息和成绩的输入。
记录查询功能可以对数据各分类的记录进行查询。
2.数据输出设计
主要运行界面:
统计界面:
查找界面:
显示界面:
录入界面:
保存界面:
修改界面:
删除界面:
3、系统运行的结果:
(仅部分)
五、详细设计
1、系统功能结构图:
2、
(1)类:
student
数据成员:
编号,,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩
(2)类:
school
成员函数:
录入函数Input():
输入编号到计算机的成绩;
统计函数count():
统计各科的总成绩,计算平均成绩,统计各科的及格率;
查询函数found():
按学号或查找学生的记录;
修改函数mend():
修改指定学号学生成绩记录;
删除函数del():
删除指定学号学生记录;
输出函数show():
输出班级所有学生成绩记录;
UML图:
六、附录:
(主要代码)
#include
#include
#include
#include
classstudent
{
protected:
intnumber;charname[20];
charsex[6];charplace[20];
charnation[6];charbirth[20];
charparty[10];charid[20];
floatscore[3];
public:
student*next;
student(){}
~student(){}
char*getname(){returnname;}
intgetnumber(){returnnumber;}
doublegetscore(inti){returnscore[i];}
floatgetg(){return(score[0]+score[1]+score[2]);}
voidinput()
{inte=1;
cout<<"\t\t\t按提示输入:
"< cout<<"\t\t输入编号: ";cin>>number; cout<<"\t\t输入: ";cin>>name; do {cout<<"\t\t输入性别: "; cin>>sex; if(strcmp(sex,"男")==0||strcmp(sex,"女")==0) {cout<<"\t\t输入籍贯: ";cin>>place;cout<<"\t\t输入民族: ";cin>>nation; cout<<"\t\t输入生日: ";cin>>birth;cout<<"\t\t输入政治面貌: ";cin>>party; cout<<"\t\t输入号: ";cin>>id;cout<<"\t\t输入数学分数: ";cin>>score[0]; cout<<"\t\t输入英语分数: ";cin>>score[1]; cout<<"\t\t输入计算机分数: ";cin>>score[2]; e=0;} else {cout<<"\t\t\t无此类型性别! 重新输入! "< e=1;} }while(e); return; } voidinput(ifstream&is) {is>>number>>name>>sex>>place>>nation>>birth>>party>>id >>score[0]>>score[1]>>score[2]; is.get();} voidoutput() {cout<<"学生基本信息如下: "< cout<<"编号: "< "< "< "< <<"民族: "< "< "< <<"号: "< "< "< <<"计算机: "< "< } voidoutput(ofstream&os) {os< < < < }};//操纵符指定宽度 classschool {public: school(){head=newstudent;head->next=NULL;key=0;} ~school(){deletehead;} voidinput();voidmend();voiddel(); intfind(student**p,intnum,char*pn="^"); voidfound();voidshow();voidcount(); voidsave();voidbegin();voidclear(); charmainmenu(); intgetkey(){returnkey;} voidsetkey(intk){key=k;} private: student*head;intkey; }; //录入函数 voidschool: : input() {student*p,*p2=NULL; p=head;intn; while(p->next) p=p->next; while(n) {p2=newstudent;p2->input(); p->next=p2;p2->next=NULL;p=p->next; school: : setkey (1); cout<<"\t\t\t按1继续,按0返回: ";cin>>n; }} //子查找函数 intschool: : find(student**p1,intnum,char*pn) {student*p;p=head; while(p->next) { (*p1)=p; if((p->next)->getnumber()==num||! strcmp((p->next)->getname(),pn)) return1;p=p->next; } return0;} //查找函数 voidschool: : found() {student*p; intnum=-1,n=9;charname[20]="^"; do {cout<<"\t\t1: 按编号查找,2: 按查找: "; cin>>n; }while(n<1||n>2); if(n==1) {cout<<"\t\t\t输入编号: "; cin>>num;} if(n==2) {cout<<"\t\t\t输入: "; cin>>name;} if(! find(&p,num,name)) {cout<<"\t\t找不到你要查找的容! "< return;} (p->next)->output(); } //删除函数 voidschool: : del() {student*p,*p2;intnum; cout<<"\t\t\t输入编号: ";cin>>num; if(! find(&p,num,"^")) {cout<<"\t\t找不到你要删除的容! "< return; } (p->next)->output(); p2=p->next;p->next=p2->next; deletep2; school: : setkey (1);} voidschool: : show()//显示函数 {student*p;p=head; while(p->next) {(p->next)->output(); p=p->next; }} //修改函数 voidschool: : mend() {student*p;intnum=-1,n; charname[20]="^"; do {cout<<"\t\t1: 按编号修改,2: 按修改: "; cin>>n; }while(n<1||n>2); if(n==1) {cout<<"\t\t\t输入编号: "; cin>>num; } if(n==2) {cout<<"\t\t\t输入: "; cin>>name; } if(! find(&p,num,name)) {cout<<"\t\t找不到你要修改的容! "< return; } (p->next)->output();(p->next)->input(); school: : setkey (1); } voidschool: : save()//保存函数 {student*p;p=head; ofstreamos("student.txt",ios: : out); if(school: : getkey()==1) { while(p->next) {(p->next)->output(os); p=p->next;} } cout<<"\t\t\t文件已保存! "< school: : setkey(0); } voidschool: : begin()//初始化函数 {student*p,*p2; p=head;clear(); longt; ifstreamis("student.txt",ios: : in); if(! is) {ofstreamos("student.txt",ios: : out); os.close(); return; } intnum=-1; while (1) {num=-1;t=is.tellg(); is>>num; is.seekg(t); if(num<0) {is.close(); return; } p2=newstudent;p2->input(is); p->next=p2;p2->next=NULL;p=p->next; }} voidschool: : clear()//清空函数 {student*p,*p2; p=head->next; while(p) {p2=p;p=p->next; deletep2; }} voidschool: : count()//统计函数 {student*p;p=head; intn=0; doubleg[3]={0,0,0};floatj[3]={0,0,0}; while(p->next) {p=p->next; n++; for(inti=0;i<3;i++) {g[i]=g[i]+(p->getscore(i)); (p->getscore(i))>=60.0? j[i]++: 0; } } cout<<"\t\t\b\b\b\b数学总分: "< "< <<"及格率: "< "< <<"平均分: "< "< <<"\t\t\b\b\b\b计算机总分: "< "< <<"及格率: "< } //主选菜单函数 charschool: : mainmenu() { charn[6]; cout<<"\n\n☆☆☆☆欢迎进入学籍管理系统☆☆☆☆"< <<"****************************"< <<"****************************"< <<"**1: 录入学生信息**"< <<"**2: 显示学生信息**"< <<"**3: 查找学生信息**"< <<"**4: 删除学生信息**"< <<"**5: 修改学生信息**"< <<"**6: 统计学生成绩**"< <<"**7: 保存学生信息**"< <<"**0: 退出系统**"< <<"****************************"< <<"****************************"< <<"请选择: "; cin>>n; returnn[0]; } //主函数 voidmain() {schoolpp; intk=1;charn;pp.begin(); while(k==1) {n=pp.mainmenu(); switch(n) {case'1': pp.input();break; case'2': pp.show();break; case'3': pp.found();break; case'4': pp.del();break; case'5': pp.mend();break; case'6': pp.count();break; case'7': pp.save();break; case'0': if(pp.getkey()==1) {cout<<"\t\t\t是否保存? 1: 保存0: 不保存: "; cin>>k; if(k==1) pp.save(); } pp.clear(); k=0; break;}}} 七、系统设计、开发过程中遇到的问题及创新点 本程序基本完成了题目要求的功能。 但是由于显示的限制,所罗列的学生成绩只给出了数学,英语,计算机的成绩。 程序可通过改进,增加科目数。 程序在显示学生信息时输入过于繁杂,不够清晰明朗,若显示成类似表格的形式就好了。 解决办法将输出函数的输出格式改一下,难点是计算输出点的控制。 至于创新,就是在课题的选择上,我更加偏向于选择自己感兴趣的课题,更加注意程序的实用性 八、心得体会 通过这次课程设计,我学会了很多的知识,我通过自学相关的书籍,浏览,接触了大量的编程知识,在编程过程中逐渐提升自己的自学能力,克服困难的能力。 我觉得首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。 程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。 根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。 理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。 我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告 学生 学籍 管理 系统