《自己的成绩管理系统.doc》由会员分享,可在线阅读,更多相关《自己的成绩管理系统.doc(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流自己的成绩管理系统.精品文档.课程设计C+程序设计 题目: 学生成绩管理系统设计队人员: 胡金霞 200814350104 倪静 200814350109漆振华 200814350114阳林志 200814350133 2008级计算机系通信工程一班指导老师: 段筠完成日期:2010年1月3日目录需求分析. 3概要设计.4详细设计.5调试分析.7测试结果.8附录.14I 需求分析:【问题描述】 现有学生成绩信息,内容如下姓名学号 语文数学 英语 张明明01 677882李成友02 789188张辉灿03 688256王露04 564577陈东
2、明05 673847【基本需求】 进行成绩的录入、浏览和查询、排序。 【功能需求】系统以菜单方式工作成绩信息录入功能(成绩信息用文件保存)输入成绩信息浏览功能输出查询功能:(至少一种查询方式)算法按姓名查询按学号查询排序功能:(选择一种排序方式)- - 算法 按升序排序 按降序排序II 概要设计:1、系统总体结构学生成绩管理系统主菜单输入信息增加信息删除信息修改信息查询信息按成绩排序Main()SwitchCase*filejsi按学号按姓名删除goto按学号按姓名查询按语文按数学按英语排序系统分别由主菜单,学生成绩输入,增加学生信息,删除学生信息,查询学生信息,按成绩排序模块构成,通过主菜单
3、可以选择进入各个功能模块,通过各个能模块实现每个功能.每个功能模块调用各函数完成相应的功能.其中:设计目的与内容由倪静完成;算法与源程序由漆振华、阳林志共同完成;最后的调试与测试数据由胡金霞完成。2、模块分析(1)输入、添加及保存信息在主函数的switch()中,用do-while循环进行信息的输入和添加,并按照相应的提示信息判别是否继续添加数据,再在头文件目录下调用ofstream函数以文件的形式保存输入的信息。(2)删除、修改信息用switch()结构调用相应的删除类型,选择1为按学号删除,2为按姓名删除,删除与输入信息一致的数据,并给出提示语句:您确实要删除该学生的记录吗?(y/n);在
4、case3中进行信息的修改,给指定的学生赋以新的数据,如果指定的学生不存在,给出提示信息:您要修改的学生不存在!请重新输入!。(3)查询在case4、case5中分别进行按姓名、按学号查询的操作,输入学生的姓名或学号,输出对应的学生的信息,如果查询的信息不存在,指出:对不起!您要查询的学生不存在!,根据提示语句,确定是否继续查询。(4)按语文、英语、数学排序用switch()结构调用相应的排序类型,选择1为按语文排序,2为按数学排序,3为按英语排序,根据不同的选择用表格的形式对应输出相应的内容,本程序提供两种方法:冒泡法和排序法。III 详细设计1、学生类#include#include#in
5、clude#include #include #include#includeclass student private: public: student(); student(char sname20,long num,int chi,int mat,int eng) friend void main();2、输入、添加及保存信息switch(p) case 0: /输入信息case 1: /添加信息filej=new ofstream(E:程序设计.txt,ios:ate);*filej 姓名 name 学号 number 语文成绩 chinese 数学成绩 math 英语成绩 engli
6、shendl;j+;si=new student(name, number,chinese,math,english);i+;3、删除、修改信息for(int j=t;j=i-1;j+) /删除记录 sj=sj+1;i-;cout该记录已删除!name)=0) /修改信息coutnum;coutchi; coutmat;couteng;sh-chinese=chi;sh-math=mat;sh-english=eng;sh-number=num;cout 数据修改成功!number=n) /按学号查询cout 您要查询的学生是:(*sj).namechinesechinese) /利用选择法进
7、行排序if(sh-chinesechinese) /利用冒泡法进行排序6、输出与退出for(int j=0;ji;j+) /输出coutsetw(10)name | number | (*sj).chinese | (*sj).math | (*sj).englishendl;cout -The End-endl;cout !Bye bye!endl;exit(0); /退出IV 调试分析错误1:-Configuration:Cpp1-Win32 Debug -Compiling.Cpp1.cppE:程序设计新建文件夹Cpp1.cpp(26) : error C2065: time_t : u
8、ndeclared identifierE:程序设计新建文件夹Cpp1.cpp(26) : error C2146: syntax error : missing ; before identifier tE:程序设计新建文件夹Cpp1.cpp(26) : error C2065: t : undeclared identifierE:程序设计新建文件夹Cpp1.cpp(27) : error C2065: time : undeclared identifierE:程序设计新建文件夹Cpp1.cpp(31) : error C2065: ctime : undeclared identifi
9、erE:程序设计新建文件夹Cpp1.cpp(54) : error C2065: x : undeclared identifierE:程序设计新建文件夹Cpp1.cpp(421) : error C2065: setw : undeclared identifierE:程序设计新建文件夹Cpp1.cpp(482) : error C2228: left of .chinese must have class/struct/union type执行 cl.exe 时出错.Cpp1.exe - 4 error(s), 0 warning(s)错误分析:*Si是指针对象,调用形式错误;未包含时间控
10、制的头文件.错误2:-Configuration: Cpp1 - Win32 Debug-Compiling.Cpp1.cppE:程序设计新建文件夹Cpp1.cpp(54) : error C2065: x : undeclared identifierE:程序设计新建文件夹Cpp1.cpp(421) : error C2065: setw : undeclared identify执行 cl.exe 时出错.:Cpp1.exe - 2 error(s), 0 warning(s)错误分析:程序中用到了setw()函数,但是并未包含头文件.错误3:-Configuration: Cpp1 -
11、Win32 Debug-Compiling.Cpp1.cppe:程序设计新建文件夹cpp1.cpp(54) : error C2065: x : undeclared identifier执行 cl.exe 时出错.Cpp1.exe - 1 error(s), 0 warning(s)错误分析:程序中用到了参数x,但是并未定义。修改以上错误后,调试程序:- Configuration: Cpp1 - Win32 Debug -Compiling.Cpp1.cppLinking.Cpp1.exe - 0 error(s), 0 warning(s)V 测试结果VI 附录:1、 程序源代码#inc
12、lude#include#include#include #include#include #includeclass student private:char name20; /姓名 int chinese,math,english; /课程 long number; /学号 public: student(); student(char sname20,long num,int chi,int mat,int eng) strcpy(name,sname);number=num; chinese=chi;math=mat;english=eng; friend void main();vo
13、id main()time_t t; time(&t); cout*endl; cout * 学生成绩管理系统 *endl;cout*endl; cout 系统时间和日期:tctime(&t)endl; cout *0、输入数据 *endl;cout *1、增加数据 *endl;cout *2、删除数据 *endl;cout *3、修改数据 *endl;cout *4、按姓名查询 *endl;cout *5、按学号查询 *endl;cout *6、按成绩排序 *endl;cout *7、输出所有学生的成绩 *endl;cout *8、退出系统 *endl;cout *endl;cout 选择0
14、-8数字进行操作endl;cout =制作人:胡金霞、倪静、阳林志、漆振华=p;if(p=0&p=8)x=1;elsecout 指令错误!请重新输入:endl;while(x=0);doswitch(p) /接收功能选项case 0: /输入数据system(cls);char c;char name20;long number;int chinese,math,english;docout请输入姓名|学号|语文成绩| 数学成绩 | 英语成绩namenumberchinesemathenglish;coutendl;filej=new ofstream(E:程序设计.txt,ios:ate);
15、*filej姓名name学号number语文成绩 chinese数学成绩math英语成绩englishendl;j+;si=new student(name, number,chinese,math,english);i+;coutc;coutendl;do if(c!=y&c!=n) cout 指令错误!请重新输入!c; else x=1; while(x=0); while(c=y); break;case 1: /增加数据char name20,c; long number; int chinese,math,english; docout请输入姓名 |学号|语文成绩|数学成绩|英语成绩
16、namenumberchinesemathenglish; coutendl; filej=new ofstream(E:程序设计.txt,ios:ate);*filej姓名name学号number语文成绩chinese数学成绩math英语成绩englishendl; j+; si=new student(name, number, chinese,math,english); i+; coutc; coutendl; if(c!=y&c!=n) cout 指令错误!请重新输入!c; while(c=y); break; case 2: /删除数据char c;coutendlendl;if(
17、i=0)cout 管理系统中没有输入数据!endl;break;cout -删除一个学生-n;cout 1. 按学号删除n;cout 2. 按姓名删除n;cout -n;coutc;switch(c) case 1: int num,t=0; docoutnum; while (num999999) cout您输入的学号错误,请输入一个六位数的学号 num; for(int t=0;tnumber=num) x=1; cout 您要删除的学生是:(*st).nameendl;cout(*st).name的成绩是:语文:(*st).chinese数学:(*st).math 英语:(*st).en
18、glishendl; coutc; if(c=y|c=Y) for(int j=t;j=i-1;j+) /删除记录 sj=sj+1;i-;cout该记录已删除!endl; goto lab2; else cout该记录未删除!endl; x=1; goto lab2; if(c!=y&c!=n) cout 指令错误!请重新输入!c; if(x=0) cout很抱歉,没有找到您要找的学号!endl; break; while(c=y);case 2: char name20; docoutname; for(int t=0;tname,name)=0) x=1;cout 您要删除的学生是:(*s
19、t).nameendl; cout(*st).name的成绩是:语文:(*st).chinese数学:(*st).math英语:(*st).englishendl;coutc; if(c=y|c=Y) for(int j=t;j=i-1;j+) /删除记录 sj=sj+1; i-; cout该记录已删除!endl; goto lab2; else cout该记录未删除!endl; x=1; goto lab2; if(c!=y&c!=n)cout 指令错误!请重新输入!c;goto lab2;if(x=0) cout很抱歉,没有找到您要找的学生!endl;break; while(c=y);
20、break;case 3: /修改数据char name20,c;long num;int chi,mat,eng;if(i=0)cout 管理系统中没有输入数据!endl;break; docoutname;coutendl;for(int h=0;hname)=0) x=1; coutnum; coutchi; coutmat; couteng; coutchinese=chi;sh-math=mat; sh-english=eng;sh-number=num; cout 数据修改成功!endl;break; if(x=0)cout 您要修改的学生不存在!请重新输入!endl;coutc;
21、coutendl;if(c!=y&c!=n)cout 指令错误!请重新输入!c;while(c=y);break;case 4: /按姓名查询char n20,c;int j=0;if(i=0)cout 管理系统中没有输入数据!endl;break; doint x=0; coutn; coutendl; for(int j=0;ji;j+)if(strcmp(n,(*sj).name)=0) x=1; cout 您要查询的学生是:(*sj).nameendl; cout(*sj).name的成绩是:语文:(*sj).chinese数学:(*sj).math 英语: (*sj).english
22、endl;if(x=0)cout 对不起!您要查询的学生不存在!endl;coutc;coutendl;if(c!=y&c!=n)cout 指令错误!请重新输入!c; while(c=y); break;case 5: /按学号查询int n,j=0;char c;if(i=0)cout 管理系统中没有输入数据!endl;break; doint x=0; coutn; coutendl; for(int j=0;jnumber=n)x=1;cout 您要查询的学生是:(*sj).nameendl;cout(*sj).name的成绩是: 语文:(*sj).chinese数学:(*sj).mat
23、h英语:(*sj).englishendl; if(x=0)cout 对不起!您要查询的学生不存在!endl; coutc; coutendl;if(c!=y&c!=n)cout指令错误!请重新输入!c;while(c=y);break;case 6: /排序模块char c;int k=0;if(i=0)cout 管理系统中没有输入数据!endl;break; lab1:cout -按成绩排序-n;cout 1. 按语文成绩n;cout 2. 按数学成绩n;cout 3. 按英语成绩n;cout -n;coutc;switch(c) case 1:char n20;int r; for(in
24、t k=0;ki;k+) for(int h=0;hchinesechinese) /选择法排序 strcpy(n,(*sh).name); strcpy(*sh).name,(*sk).name); strcpy(*sk).name,n);r=(*sh).number; (*sh).number=(*sk).number;(*sk).number=r; r=(*sh).chinese; (*sh).chinese=(*sk).chinese; (*sk).chinese=r;r=(*sh).math; (*sh).math=(*sk).math; (*sk).math=r; r=(*sh).
25、english; (*sh).english=(*sk).english; (*sk).english=r; /*if(sh-chinesechinese) / 冒泡法排序 strcpy(n,(*sh+).name); strcpy(*sh+).name,(*sh).name); strcpy(*sh).name,n);r=(*sh+).number; (*sh+).number=(*sh).number; (*sh).number=r;r=(*sh+).chinese; (*sh+).chinese=(*sh).chinese; (*sh).chinese=r;r=(*sh+).math;
26、(*sh+).math=(*sh).math; (*sh).math=r;r=(*sh+).english; (*sh+).english=(*sh).english; (*sh).english=r; cout 姓名 |学号 | 语文 | 数学 | 英语 endl; for(int j=0;ji;j+) coutsetw(10)name|number|(*sj).chinese|(*sj).math|(*sj).englishendl;break;goto lab1;case 2: char n20; int r; for(int k=0;ki;k+) for(int h=0;hmathma
27、th) /利用选择法进行排序 strcpy(n,(*sh).name); strcpy(*sh).name,(*sk).name); strcpy(*sk).name,n);r=(*sh).number; (*sh).number=(*sk).number;(*sk).number=r;r=(*sh).chinese; (*sh).chinese=(*sk).chinese; (*sk).chinese=r;r=(*sh).math; (*sh).math=(*sk).math; (*sk).math=r;r=(*sh).english; (*sh).english=(*sk).english
28、; (*sk).english=r; cout 姓名 | 学号 | 语文 | 数学 | 英语 endl; for(int j=0;ji;j+) coutsetw(10)name|number|(*sj).chinese|(*sj).math|(*sj).englishendl;break;goto lab1;case 3: char n20; int r; for(int k=0;ki;k+) for(int h=0;henglishenglish) /选择法排序 strcpy(n,(*sh).name); strcpy(*sh).name,(*sk).name); strcpy(*sk).n
29、ame,n);r=(*sh).number; (*sh).number=(*sk).number;(*sk).number=r;r=(*sh).chinese; (*sh).chinese=(*sk).chinese; (*sk).chinese=r;r=(*sh).math; (*sh).math=(*sk).math; (*sk).math=r;r=(*sh).english; (*sh).english=(*sk).english; (*sk).english=r;cout 姓名 |学号|语文|数学 | 英语 endl; for(int j=0;ji;j+)coutsetw(10)name|number |(*sj).chinese|(*sj).math|(*sj)