C++课程设计报告学生信息管理系统 .doc
北 华 航 天 工 业 学 院基于C+的面向对象程序设计实例课程设计报告报告题目: 学生信息管理系统 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术 作者所在班级: 作 者 姓 名 : 指导教师姓名: 完 成 时 间 : 2009年6月25日星期四 北华航天工业学院教务处制摘 要在当前的各个大学,中学,小学都需要拥有一套完善的,并且适合自身特点的学生信息管理系统,用它来管理学生信息。如1)添加学生信息。2)删除学生信息。3)修改学生信息。4)查询学生信息。5)显示学生信息。6)综合统计(各课程平均成绩和合格率)。7)总分排序。8)保存功能:将添加、删除、修改结果保存到文本文件中。9)退出系统。以实现对学生信息的统一管理。本文利用Microsoft Visual C+6.0编写程序实现了用户对学生信息的管理操作。该程序中定义了student类和brick类,在brick类中定义了创建函数,显示函数,查找函数,修改编辑函数,添加函数,删除函数,排序函数,平均分函数,求合格率函数。再用这些函数调用student类对象student s100 实现题中要求实现的功能。本系统主要有 十个功能模块:-录入学生信息 查询学生信息 -修改学生的信息- 增加学生的信息 -删除学生的信息 -总分排序-浏览学生信息-求各课程平均成绩-求合格率-浏览关机后学生信已经过全面的系统测试,能够很好的运行,达到了预期的效果。关键词:系统设计 数据库 信息 功能模块 -录入 查询 修改 增加 删除 总分排序 浏览 平均成绩 合格率 关机后目 录摘要第1章 绪 论11.1 课题研究的目的11.2 选题的目的及意义5 1.3 课程设计环境.第2章 系统需求分析12 21 问题描述. 22 功能要求. 23 问题的解决方案.第3章 系统开发的技术背景17 31 数据设计. 311 类设计。. 312 类之间的关系. 313 函数设计. 32 结构设计.第4章 系统实现.41 类实现.42 函数实现. 4.3主函数实现.第5章 系统测试255.1模块测试25 5.2 课程设计过程中遇到的问题.总结37致谢38参考文献39附录40第一章 绪论11 课程设计的目的1)要求学生能够熟练掌握C+语言的基本知识和技能。2)基本掌握面向对象程序设计的基本思路和方法。3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。12 课程设计的背景和意义121 课程设计的背景 当前的各个大学,中学,小学都需要拥有一套完善的,并且适合自身特点的学生信息管理系统,用它来管理学生信息。2. 技术层面的支持122 课程设计的意义实现对学生信息的统一管理。从而提高管理人员的工作效率。13 课程设计环境Microsoft Visual C+6.0笔记本电脑(显示器,鼠标等)第二章 需求分析第二章 需求分析21 问题描述某校学生信息包括学号、姓名、性别、班级、三门课成绩和总成绩。设计一程序实现对学生信息的管理,22 功能要求(1)本程序完成的功能主要有:1)添加学生信息。 2)删除学生信息。3)修改学生信息。4)查询学生信息。5)显示学生信息。6)综合统计(各课程平均成绩和合格率)。7)总分排序。8)保存功能:将添加、删除、修改结果保存到文本文件中。9)退出系统。(2)学生在完成本次课程设计的基本要求后,从便于用户使用和功能完整性的角度考虑进一步完善程序,请参照题目1和2的要求。23 问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤:1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;2)分析系统中的各个实体及它们之间的关系; 3)根据问题描述,设计系统的类层次; 4)完成类层次中各个类的描述; 5)完成类中各个成员函数的定义; 6)完成系统的应用模块; 7)功能调试; 8)完成系统总结报告。 第三章 系统设计31 数据设计311 类设计。Brick类Student类char name5; 姓名 char sex; 性别int schoolnumber; 学号char grade7; 班级int math; 数学int english; 英语int c; c+int ssum 总分brick;static int n;统计文本中对象个数student s100;存放输入的数据student t;比较后交换si与si+1的值int sum();求和函数void input()输入数据函数void output()输出数据函数brick()构造函数void create();创建函数void display();显示函数void search();查找函数void modify();修改编辑函数void add();添加函数void deleted();删除函数void average();平均分函数void sort();排序函数void hegelv();求合格率函数student s100;312 类之间的关系友元类class studentfriend class brick;/模块类中定义模块函数brick void create();void display();void search();void modify();void add();void deleted();void average();void sort();void hegelv(); 通过student s100;调用student 类中的数据成员char name5; char sex;int schoolnumber;char grade7;int math;int english;int c;int ssum ;313 函数设计主函数算法输入的字符存入choose变量中在主函数中需要输出主菜单选择界面,cout<<"-s-浏览关机后学生信息-n" cout<<"-1-录入学生信息-n" cout<<"-2-查询学生信息-n" cout<<"-3-修改学生的信息-n" cout<<"-4-增加学生的信息-n" cout<<"-5-删除学生的信息-n" cout<<"-6-总分排序-n"cout<<"-7-浏览学生信息-n"cout<<"-8-求各课程平均成绩-n"cout<<"-9-求合格率-n" cout<<"-t-退出n"<<"请选择:-n"switch(choose) case'1':-1-录入学生信息 case'2'-2-查询学生信息- case'3':-修改学生的信息- ase'4':-增加学生的信息 case'5':删除学生的信息- case'6':总分排序 case'7':-浏览学生信息- case'8':求各课程平均成绩- case'9':求合格率 case's':-s-浏览关机后学生信息 接着 判断用户是否继续选择,若继续则从新获得用户输入,否则退出程序。/求和函数算法,直接在sum函数中使数学,英语,c+的分数相加/创建函数算法,创建一个文本文件,并从键盘输入的数据 存放在文本文件中,不传递参数 /显示函数算法,打开学生信息管理系统文本文件,通过循环读取数据,并将数据一一输出到屏幕上,不传递参数/修改编辑函数算法,打开学生信息管理系统文本文件,从文件中通过循环读取数据并将它们存放student s100中,对数据进行修改,最后再将数据存放到信息管理系统文本文件中,修改过程是:输入需修改记录的学生号,通过循环查找到该记录后,再输入新数据替代原有数据。/查找函数算法,打开学生信息管理系统文本文件,从文件中通过循环读取数据并将它们存放student s100中,输入需修改记录的学生号,通过循环查找到该记录后,并将数据一一输出到屏幕上,不传递参数。/添加函数算法,打开学生信息管理系统文本文件,从文件中通过循环读取数据并将它们存放到student s100中,输入新添加学生的学号和相应的信息,并将数据存放到student s100中,每输入一条数据,记录数n加1./平均分函数算法,打开学生信息管理系统文本文件,从文件中通过循环读取数据并将它们存放student s100中,定义变量ch,输入ch,当输入m或M时,将数学成绩求和存入s1变量中,再输出s1除于记录数n的结果;当输入e或E时,将英语成绩求和存入s2变量中,再输出s2除于记录数n的结果;当输入c或C时,将C+成绩求和存入s3变量中,再输出s3除于记录数n的结果;/求合格率函数算法,打开学生信息管理系统文本文件,从文件中通过循环读取数据并将它们存放student s100中,定义变量ch,输入ch,当输入m或M时,if(si.math>=60)count1变量自加1,再输出count1除于记录数n的结果;当输入e或E时,if(si.english>=60)count2变量自加1,再输出count2除于记录数n的结果;当输入c或C时,if(si.c>=60)count3变量自加1,再输出count3除于记录数n的结果;/排序函数算法,打开学生信息管理系统文本文件,从文件中通过循环读取数据并将它们存放student s100中,if(si.sum>si+1.sum)使si与si+1互换,最后用循环将所有数据存入学生信息管理系统文本文件中。/删除函数算法,打开学生信息管理系统文本文件,从文件中通过循环读取数据并将它们存放student s100中,输入新删除学生的学号和相应的信息,每删除一条数据,记录数n减1.32 结构设计321 系统流程图StudentOutputSumInputBrick类创建函数Create查找函数Search修改函数Modify添加函数Add删除函数Deleted显示函数Display总分排序Sort求合格率Hegelv求平均分Average显示关机Look322 界面设计主菜单合格率子菜单平均分子菜单第四章 系统实现41 类实现class studentpublic:student()int sum();void input()cout<<"学号(不能重复):"cin>>schoolnumber;cout<<"姓名:"cin>>name;cout<<"性别:"cin>>sex;cout<<"班级:"cin>>grade;cout<<"数学:"cin>>math;cout<<"英语:"cin>>english;cout<<"c+:"cin>>c;void output()cout<<schoolnumber<<'t'<<name<<'t'<<sex<<'t'<<grade<<'t'<<math<<'t'<<english<<'t'<<c<<'t'<<math+english+c<<'t'<<endl;friend class brick;/模块类中定义模块函数private:char name5; char sex;int schoolnumber;char grade7;int math;int english;int c;int ssum ;class brickpublic:brick()void create();void display();void search();void modify();void add();void deleted();void average();void sort();void hegelv();private:static int n;student s100;student t;42 函数实现void input()cout<<"学号(不能重复):"cin>>schoolnumber;cout<<"姓名:"cin>>name;cout<<"性别:"cin>>sex;cout<<"班级:"cin>>grade;cout<<"数学:"cin>>math;cout<<"英语:"cin>>english;cout<<"c+:"cin>>c;void output()cout<<schoolnumber<<'t'<<name<<'t'<<sex<<'t'<<grade<<'t'<<math<<'t'<<english<<'t'<<c<<'t'<<math+english+c<<'t'<<endl; /求和函数int student:sum() int s;s=math+english+c;return s; /创建函数void brick:create() ofstream outfile("d:f1.txt",ios:app);if(!outfile)cout<<"open error!"<<endl;return;int m; cout<<"录入学生信息人数"<<endl;cin>>m; /outfile<<"学号,姓名,性别,班级,数学,英语,c+,总分"<<endl;cout<<"学号,姓名,性别,班级,数学,英语,c+,"<<endl;cout<<"请输入相关信息"<<endl;for(int i=0;i<m;i+)si.input(); for(i=0;i<m;i+) outfile<<si.schoolnumber<<'t'<<si.name<<'t'<<si.sex<<'t'<<si.grade<<'t'<<si.math<<'t'<<si.english<<'t'<<si.c<<'t'<<si.math+si.english+si.c<<'t'<<endl; n+;outfile.close();/显示函数void brick:display()cout<<"学号"<<'t'<<"姓名"<<'t'<<"性别"<<'t'<<"班级"<<'t'<<"数学"<<'t'<<"英语"<<'t'<<"c+"<<'t'<<"总分"<<endl;for(int i=0;i<n;i+) si.output();/查找函数void brick:search()int num,i;cout<<"n请输入学号n"cin>>num;cout<<"学号"<<'t'<<"姓名"<<'t'<<"性别"<<'t'<<"班级"<<'t'<<"数学"<<'t'<<"英语"<<'t'<<"c+"<<'t'<<"总分"<<endl;for( i=0;i<n;i+) if(num=si.schoolnumber)si.output();/修改编辑函数void brick:modify()int num,i,j;char nam5; char se;int number;char gra7;int m;int e;int c;cout<<"n请输入学号n"cin>>num;ofstream outfile("d:f1.txt",ios:app);if(!outfile)cout<<"open error!"<<endl;return;for(i=0;i<n;i+)if(num=si.schoolnumber)for(j=i;j<n-1;j+)sj=sj+1;cout<<"学号,姓名,性别,班级,数学,英语,c+"<<endl;cout<<"请输入相关信息"<<endl;cout<<"学号(不能与其他号重复):"cin>>number;cout<<"姓名:"cin>>nam;cout<<"性别:"cin>>se;cout<<"班级:"cin>>gra;cout<<"数学:"cin>>m;cout<<"英语:"cin>>e;cout<<"c+:"cin>>c;sn-1.schoolnumber=number;strcpy(sn-1.name,nam);sn-1.sex=se;strcpy(sn-1.grade,gra);sn-1.math=m;sn-1.english=e;sn-1.c=c;outfile<<sn-1.schoolnumber<<"t"<<sn-1.name<<"t"<<sn-1.sex<<"t"<<sn-1.grade<<"t"<<sn-1.math<<"t"<<sn-1.english<<"t"<<sn-1.c<<"t"<<sn-1.math+sn-1.english+sn-1.c<<"t"<<endl;outfile.close();cout<<sn-1.schoolnumber<<"t"<<sn-1.name<<"t"<<sn-1.sex<<"t"<<sn-1.grade<<"t"<<sn-1.math<<"t"<<sn-1.english<<"t"<<sn-1.c<<"t"<<sn-1.math+sn-1.english+sn-1.c<<"t"<<endl; /添加函数void brick:add()ofstream outfile("d:f1.txt",ios:app);if(!outfile)cout<<"open error!"<<endl;return;char c;docout<<"学号,姓名,性别,班级,数学,英语,c+"<<endl;cout<<"录入增加学生的信息"<<endl; sn.input();outfile<<sn.schoolnumber<<"t"<<sn.name<<"t"<<sn.sex<<"t"<<sn.grade<<"t"<<sn.math<<"t"<<sn.english<<"t"<<sn.c<<"t"<<sn.math+sn.english+sn.c<<"t"<<endl;cout<<"d:f1.txt中已经了增加"<<sn.schoolnumber<<'t'<<sn.name<<'t'<<sn.sex<<'t'<<sn.grade<<'t'<<sn.math<<'t'<<sn.english<<'t'<<sn.c<<'t'<<sn.math+sn.english+sn.c<<'t'<<endl;n+;cout<<"还要增加吗(y /n) ?"<<endl;cin>>c;while(n<100&&(c='y'|c='Y');outfile.close();/删除函数void brick:deleted() int i,j;int num;cout<<"请输入删除学生的学生号"<<endl;cin>>num;for( i=0;i<n;i+)if(si.schoolnumber=num)n-;for( j=i;j<n;j+)sj=sj+1; ofstream outfile("d:f1.txt",ios:app);if(!outfile)cout<<"open error!"<<endl;return;outfile<<"学号"<<'t'<<"姓名"<<'t'<<"性别"<<'t'<<"班级"<<'t'<<"数学"<<'t'<<"英语"<<'t'<<"c+"<<'t'<<"总分"<<endl;for( i=0;i<n;i+)outfile<<si.schoolnumber<<"t"<<si.name<<"t"<<si.sex<<"t"<<si.grade<<"t"<<si.math<<"t"<<si.english<<"t"<<si.c<<"t"<<si.math+si.english+si.c<<"t"<<endl;outfile.close();cout<<"删除成功"<<endl;void look(char *filename)ifstream ifs(filename,ios:in );if(!ifs)cerr<<"open error!"<<endl;return;char ch;while(ifs.get(ch)cout.put(ch);cout<<endl;ifs.close(); /排序函数void brick:sort()int i;int j;for( i=0;i<n;i+)si.sum();for( j=0;j<n-1;j+)for( i=0;i<n-1-j;i+) if (si.sum()>si+1.sum()t=si; si=si+1; si+1=t;cout<<si.sum()<<endl;cout<<"学号"<<'t'<<"姓名"<<'t'<<"性别"<<'t'<<"班级"<<'t'<<"数学"<<'t'<<"英语"<<'t'<<"c+"<<'t'<<"总分"<<endl;for( i=0;i<n;i+)si.output();/平均分函数void brick:average()float s1=0; float s2=0; float s3=0; char ch;cout<<"你要查的各平均课程(math-m,english-e,c)"<<endl;cin>>ch;switch(ch) case'M':case'm':for(int i=0;i<n;i+)s1=s1+si.math;cout<<"数学平均分"<<s1/n<<endl;break;case'E':case'e':for(int i=0;i<n;i+)s2=s2+si.english;cout<<"英语平均分"<<s2/n<<endl;break; case'C':case'c':for(int i=0;i<n;i+)s3=s3+si.c;cout<<"c平均分"<<s3/n<<endl;break; default:cout<<"非法选项"<<endl; /求合格率函数void brick: hegelv()int count1=0,count2=0,count3=0;char ch;cout<<"你要查的合格率课程(math-m,english-e,c)"<<endl;cin>>ch;switch(ch)case'M':case'm':for(int i=0;i<n;i+) if(si.math>=60)count1+; cout<<(float)count1/n;break;case'E':case'e':for(int i=0;i<n;i+)if(si.english>=60)count2+; cout<<(float)count2/n;break; case'C':case'c':for(int i=0;i<n;i+)if(si.c>=60)count3+; cout<<(float)count3/n;break; default:cout<<"非法选项"<<endl;43 主函数实现int main()brick b; cout<<"学生信息管理系统"<<endl; cout<<">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"<<endl; char choose; /显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数 do cout<<"n- 学生信息管理系统-n"cout<<"-s-浏览关机后学生信息-n" cout<<"-1-录入学生信息-n" cout<<"-2-查询学生信息-n" cout<<"-3-修改学生的信息-n" cout<<"-4-增加学生的信息-n" cout<<"-5-删除学生的信息-n" cout<<"-6-总分排序-n"cout<<"-7-浏览学生信息-n"cout<<"-8-求各课程平均成绩-n"cout<<"-9-求合格率-n" cout<<"-t-退出n"<<"请选择:-n"cout<<"n- 学生信息管理系统-n" cin>>choose; switch(choose) case'1':b.create();break; case'2':b.search();break; case'3':b.modify();break; case'4':b.add();break; case'5':b.deleted();break; case'6':b.sort();break; case'7':b.display();break; case'8':b.average();break; case'9':b.hegelv();break; case's':look("d:f1.txt");break; while(choose!='t'); return 0;第五章 系统测试51模块测试输入函数抓图查询函数抓图添加函数抓图浏览函数抓图总分排序函数抓图平均分函数抓图合格率函数抓图平均分函数抓图退出函数抓图52 课程设计过程中遇到的问题遇到的问题1:开始设计时main函数实现代码太长,不便于阅读程序解决方法:再设计一个brick类,将其 定义成student类的友元类,在brick类中定义/创建函数void brick:create()/显示函数void brick:display()/修改编辑函数void brick:modify()/查找函数void brick:search()/添加函数void brick:add()/删除函数void brick:deleted()/求合格率函数void brick: hegelv()/排序函数void brick:sort()/平均分函数void brick:average(),再用这些函数调用student类的对象student s100实现相应功能,这样可以降低main函数的复杂度,增加程序的可读性。遇到的问题2:定义成student类的友元类后,不能使用命名空间解决方法:将#include<iostream>#include<string>#include<fstream>using namespace std;改成#include<iostream.h>#include<string.h>#include<fstream.h>遇到的问题3:类外调用数据成员不方便。解决方法:在student类中定义成员函数int sum();void input()void output()遇到的问题4:输出结果不对齐。解决方法:语句中加t'如:cout<<schoolnumber<<'t'<<name<<'t'<<sex<<'t'<<grade<<'t'<<math<<'t'<<english<<'t'<<c<<'t'<<math+english+c<<'t'<<endl;cout<<"学号