1、学 号 07770211面向对象程序设计设计说明书学生成绩管理系统起止日期: 年 月 日 至 年 月 日学生姓名 韩雨润班级07软件2班成绩指导教师(签字)电子与信息工程系年 月 日天津城市建设学院课程设计任务书20082009 学年第一学期 电子与信息工程 系 软件工程 专业 07软件2 班级课程设计名称: 面向对象程序设计C课程设计 设计题目: 学生成绩管理系统 完成期限:自 年 月 日至 年 月 日共 周设计依据、要求及主要内容(可另加附页):设计依据:c+程序设计设计要求:通过这次课程设计,需要对C+的各个环节知识形成一个有结构的整体,可以熟练的对C+知识进行综合应用,同时达到对已学知
2、识的全面复习。主要内容:功能要求:学生信息包括学号、姓名、3门考试成绩(英语、高数、C+)。要求利用菜单的形式进行管理。菜单为:1. 排序 (按学号);2. 插入 (输入一个学生的信息将它插入数组中,假定数组按学号有序);3. 查找 (输入一个学生学号,输出其各科成绩);4. 删除 (按输入的学号删除该学生)5. 统计 (若按1,则输入学生的学号统计该生的总分及平均分;若按2,则输入课程求该门课程的总平均分)指导教师(签字): 教研室主任(签字): 批准日期: 年 月 日课程设计进度计划表序号起止日期计划完成内容实际完成情况检查日期检查人签名123456789指导教师批准,并签名: 年 月 日
3、目 录1、设计目的52、总体设计53、详细设计:63.1、程序具体功能63.2、函数功能63.3、调试分析74、源程序和运行结果84.1、源程序84.2、运行结果204.3、心得体会245、 参考文献24学生成绩管理系统1、 设计目的通过实验实现对学生信息系统的管理操作;进一步掌握和利用C+进行程设计的能力;进一步理解和运用结构化程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会利用流程图或N-S图表示算法;掌握书写程设计开发文档的能力(书写课程设计报告);2、总体设计学生成绩管理系统排序插入查询删除统计3、详细设计: 3.1、程序具体功能:1. 排序 (按学号);2. 插入
4、(输入一个学生的信息将它插入数组中,假定数组按学号有序);3. 查找 (输入一个学生学号,输出其各科成绩);4. 删除 (按输入的学号删除该学生)5. 统计 (若按1,则输入学生的学号统计该生的总分及平均分;若按2,则输入课程求该门课程的总平均分)3.2、函数功能:1、struct Tscore 定义成绩结构体2、struct studentbase 定义学生的基本信息,学号,姓名,Tscore的对象3、int main() 定义主函数,有操作界面显示,菜单的选择 4、void read(studentbase &,int ,int ,int ,int,int);定义读文件函数,主要功能是读出
5、一ASC文件形式储存的信息并对应到结构体的各个成员 5、void write(studentbase*,int,int,int );定义写入函数,主要以ASC形式想文件写入信息6、 void insert();定义插入函数8、void LOOK_UP(studentbase* ,int );定义查询函数 9、void To_Delete(studentbase*,int);定义删除函数 10、void statistics( studentbase*,int);定义统计函数11、void display( studentbase*,int );定义显示函数 3.3、调试分析上机调试之前我们对所
6、编的程序作了纸面上的检查,先改正一些不该犯错误,如 没有搭配完整,漏写 ,拼写错误等,这些都是我们通过认真的态度在运行之前可以解决、避免的。而且还可以减少机器时间。往往一连串的错误是由于漏写或写错一个字符引起的。在上机调试过程中,对文件这一节的知识还不够熟悉,所以在解决输入输出流的过程中出了很多问题。4、源程序和运行结果4.1、源程序#include #include #include #define TRUE 1#define FALSE 0using namespace std;struct Tscore unsigned int ShowTheEnglish; unsigned int
7、ShowTheMath; unsigned int ShowTheComputer;struct studentbase char num9; string number; char nam13; string name; Tscore score;void list();/菜单选择void read(studentbase &,int ,int ,int ,int,int);/读取文件并赋给各个结构体成员,还有完成功能选择void write(studentbase*,int,int,int );/写入到文件void compositor(studentbase*,int);/排序(按学号从
8、小到大)void insert();/插入一条记录void LOOK_UP(studentbase* ,int );/查询void To_Delete(studentbase*,int);/删除void statistics( studentbase*,int);/统计void display( studentbase*,int );#include #include studentbase.h#include using namespace std;void compositor(studentbase* com,int c )studentbase cur; /暂时的中间指针int i=1
9、;if(c!=1)for(;ic;i+)int compare=i+1;for(;comparecomcompare.number)cur=comi; comi=comcompare; comcompare=cur; display(com,c);#include #include studentbase.h#include using namespace std;void insert() studentbase insert; int error=TRUE; coutinsert.num;error=FALSE;for(int i=0;i=7&(int)insert.numi!=0;i+)
10、if(int)insert.numi57)cout 输入的学生学号信息有误!请重新输入:;error=TRUE;break; for(int i=0;i=7;i+) if(int)insert.numi=0)insert.numi= ; error=TRUE; coutinsert.nam;error=FALSE;for(int i=0;i=11&(int)insert.nami!=0;i+) if(int)insert.nami90&(int)insert.nami122) cout 输入的学生姓名信息有误!请重新输入:;error=TRUE;break;for(int i=0;i=11;i
11、+)if(int)insert.nami=0)insert.nami= ;error=TRUE;coutinsert.score.ShowTheEnglish;error=FALSE;if(insert.score.ShowTheEnglish100)cout 输入的学生英语成绩信息有误!请重新输入:;error=TRUE;error=TRUE;coutinsert.score.ShowTheMath;error=FALSE;if(insert.score.ShowTheMath100)cout 输入的学生高数成绩信息有误!请重新输入:;error=TRUE;error=TRUE;coutin
12、sert.score.ShowTheComputer;error=FALSE;if(insert.score.ShowTheComputer100)cout 输入的学生C+成绩信息有误!请重新输入:;error=TRUE;read(insert,TRUE,FALSE,FALSE,FALSE,FALSE);#include #include studentbase.h#include using namespace std;void LOOK_UP(studentbase* LOOK,int UP) int i=1; int error=TRUE; bool _Check; char Check
13、=Y; string _LOOK_UP; while(Check=Y|Check=y) while(error=TRUE) cout_LOOK_UP; error=FALSE; for(int i=0;i=7&(int)_LOOK_UPi!=0;i+) if(int)_LOOK_UPi57) cout 要查询的学生学号信息有非数字部分!请重新输入:; error=TRUE; break; for(;i=UP;i+) _Check=false; if(LOOKi.number=_LOOK_UP) _Check=true; Check=n; cout学号:LOOKi.number; cout 姓名
14、:LOOKi.name; cout 英语成绩:LOOKi.score.ShowTheEnglish; cout 高数成绩:LOOKi.score.ShowTheMath; cout C+成绩:LOOKi.score.ShowTheComputerendl; break; if(_Check=0) cout无该学号所对应的学生的信息!请检查是否你输入的学号有误。endl; coutCheck; #include #include studentbase.h#include using namespace std;void To_Delete(studentbase*_todelete,int t
15、o)int i=1;int error=TRUE;bool _Check;char Check=Y;string to_delete;while(Check=Y|Check=y)while(error=TRUE)coutto_delete; error=FALSE;for(int i=0;i=7&(int)to_deletei!=0;i+)if(int)to_deletei57)cout 要删除的学生学号信息有非数字部分!请重新输入:; error=TRUE; break;for(;i=to;i+)_Check=false;if(_todeletei.number=to_delete)_Che
16、ck=true;Check=n;break;if(_Check=0)cout无该学号所对应的学生的信息!请检查是否你输入的学号有误!endl; coutCheck;write(_todelete,to,TRUE,i);#include #include studentbase.h#include using namespace std;void statistics( studentbase*_Statistics,int sta)int select;int i=1;string _Statistics_;cout 【如果您要选择统计一个学生的成绩,请输入“1”】endl;cout 【如果要
17、统计所有学生的一课成绩,请输入“2”】endl;coutselect;error=FALSE;if(select!=1&select!=2)cout 没有选择统计类型!请重新输入:; error=TRUE;if(select=1)error=TRUE; bool _Check; char Check=Y;while(Check=Y|Check=y)while(error=TRUE)cout_Statistics_; error=FALSE; for(int i=0;i=7&(int)_Statistics_i!=0;i+)if(int)_Statistics_i57)cout 学生的学号信息有
18、非数字部分!请重新输入:; error=TRUE; break; for(;i=sta;i+)_Check=false; if(_Statisticsi.number=_Statistics_)cout 该学生的成绩总分为:(_Statisticsi.score.ShowTheComputer+_Statisticsi.score.ShowTheEnglish+_Statisticsi.score.ShowTheMath)endl;cout 该学生的成绩平均分为:(_Statisticsi.score.ShowTheComputer+_Statisticsi.score.ShowTheEngl
19、ish+_Statisticsi.score.ShowTheMath)/3.0)endl;_Check=true; Check=n; break; if(_Check=0)cout无该学号所对应的学生的信息!请检查是否你输入的学号有误!endl; coutCheck;if(select=2)error=TRUE;while(error=TRUE)cout_Statistics_; error=FALSE; if(_Statistics_0!=E&_Statistics_0!=M&_Statistics_0!=C&_Statistics_0!=e&_Statistics_0!=m&_Statis
20、tics_0!=c)cout 没有选择科目!请重新输入:; error=TRUE;int sum=0;if(_Statistics_0=E|_Statistics_0=e)for(;i=sta;i+)sum+=_Statisticsi.score.ShowTheEnglish;cout 平均英语成绩为:(sum/(float)sta)endl;if(_Statistics_0=M|_Statistics_0=m)for(;i=sta;i+)sum+=_Statisticsi.score.ShowTheMath;cout 平均高数成绩为:(sum/(float)sta)endl;if(_Stat
21、istics_0=C|_Statistics_0=c)for(;i=sta;i+)sum+=_Statisticsi.score.ShowTheComputer;cout 平均C+成绩为:(sum/(float)sta)endl;#include #include studentbase.h#include #include using namespace std;int r;void read(studentbase & _read,int _readinsert,int _readcompositor,int _LU,int _to_delete,int _read_Statistics)
22、r=0;studentbase read20 ;char ch= ;ifstream infile(studentbase.txt,ios:in);infile.get(ch);while(ch!=) if(ch=$) r+=1; infile.get(ch); char nu9= ; for(int i=0;ch!=/;i+) nui=ch; infile.get(ch); readr.number=nu; for(int i=0;i=7;i+) readr.numi=nui; if(ch=/) infile.get(ch); char na13= ; for(int i=0;ch!=|;i
23、+) nai=ch; infile.get(ch); readr.name=na; for(int i=0;ireadr.score.ShowTheEnglish; infile.get(ch); if(ch=!) infilereadr.score.ShowTheMath; infile.get(ch); if(ch=) infile readr.score.ShowTheComputer; infile.get(ch);infile.close();if(_readinsert=TRUE)read0=_read;write(read,r,FALSE,0);if(_readcomposito
24、r=TRUE)compositor(read,r);if(_LU=TRUE)LOOK_UP(read,r);if(_to_delete=TRUE)To_Delete(read,r);if(_read_Statistics=TRUE)statistics(read,r);#include #include studentbase.h#include #include using namespace std;void write( studentbase*WR,int round,int WR_Delete,int DE)ofstream outfile; outfile.open(student
25、base.txt,ios:out|ios:trunc); for(int ro=0;ro=round;ro+) if(WR_Delete=TRUE) if(ro=0)continue; if(ro=DE)continue; outfilenumi=0&inumi=0)outfilenumi; outfilenami=0&inami0)outfilenami; outfile|; outfilescore.ShowTheEnglish; outfile!; outfilescore.ShowTheMath; outfile; outfilescore.ShowTheComputer; outfi
26、le; outfile.close();#include #include studentbase.h#include using namespace std;void display(studentbase*dis,int oi) /oi 为输出的指针增量for(int i=1;i=oi;i+)cout学号:number;cout 姓名:name;cout 英语成绩:score.ShowTheEnglish;cout 高数成绩:score.ShowTheMath; cout C+成绩:score.ShowTheComputerendl;#include #include studentbas
27、e.husing namespace std;void list()cout*【功能菜单】*endl;cout*【排序】(输入数字P或p)endl; cout*【插入】(输入数字I或i)endl;cout*【查找】(输入数字C或c)endl;cout*【删除】(输入数字S或s)endl;cout*【统计】(输入数字T或t)endl; cout请输入您选择的功能:;#include #include studentbase.husing namespace std;int main()char i=q;/循环条件以及选择条件 studentbase _Main;cout欢迎使用学生成绩管理系统:
28、i;coutendl;while(i!=N|i!=n) if(i=P|i=p)read(_Main,FALSE,TRUE,FALSE,FALSE,FALSE);couti;while(i!=N&i!=n&i!=Y&i!=y)couti;if(i=Y|i=y) list();cini; coutendl;if(i=N|i=n)cout谢谢使用该系统endl;if(i=I|i=i)insert();couti;while(i!=N&i!=n&i!=Y&i!=y)couti;if(i=Y|i=y)list(); cini; coutendl;if(i=N|i=n)cout谢谢使用该系统endl;if
29、(i=C|i=c)read(_Main,FALSE,FALSE,TRUE,FALSE,FALSE);couti;while(i!=N&i!=n&i!=Y&i!=y)couti;if(i=Y|i=y)list(); cini; coutendl;if(i=N|i=n)cout谢谢使用该系统endl; if(i=S|i=s)read(_Main,FALSE,FALSE,FALSE,TRUE,FALSE);couti;while(i!=N&i!=n&i!=Y&i!=y)couti;if(i=Y|i=y)list(); cini; coutendl;if(i=N|i=n)cout谢谢使用该系统endl; if(i=T|i=t)read(_Main,FALSE,FALSE,FALSE,FALSE,TRUE);couti;while(i!=N&i!=n&i!=Y&