1、 面向对象程序设计课程设计 学生成绩管理系统 院 系: 计算机科学技术学院网络工程 班 级: 网络10 1班 姓 名: 李照龙 杨广为 尹跃龙 李学渊 指导教师: 张淑英 2011 年 6 月 22 日面向对象程序设计课程设计任务书一、题目:学生成绩管理系统二、设计要求(1)李照龙组成设计小组。(2)小组成员分工协作完成,要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。(3)查阅相关资料,自学具体课题中涉及到的新知识。(4)根据实现的功能,划分出合理的对象类,明确对象类间的关系。为每个对象类设计正确的属性和方法,为每个方法设计合理的方法体。(5)编程简练,程序功能齐全,能正确运
2、行。(6)课题完成后提交课程设计报告,格式规范,内容详实。其主要内容包括:1-封皮、2-课程设计任务书,3-指导教师评语与成绩、4-目录、5-需求分析、6-概要设计、7-详细设计(含主要代码)、8-调试分析与测试结果、9-用户使用说明、10-附录或参考资料。报告用A4纸打印,中文字体为宋体,西文字体用Time New Roma,小四号字,行距采用“固定值”18磅,首行缩进2字符。(7)课程设计报告内容的说明:需求分析-分析课题需要实现的功能以及要用到的知识点,分析课题涉及的对象间的关系;概要设计-根据实现的功能,划分出合理的对象类,明确对象类间的关系;为每个对象类设计正确的属性和方法,为每个方
3、法设计合理的方法体;详细设计-具体的类、对象和功能的实现以及主要程序代码;调试分析与测试结果-用多组测试用例调试分析系统的正确性、完备性等各项性能指标,写出测试结果;用户使用说明-编写该系统的使用说明书;附录或参考资料-完整的程序代码以及查阅资料的参考文献。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。四、课程设计工作计划2011年6月13日,指导教师讲课,学生根据题目准备资料;2011年6月13日2011年6月17日,设计小组进行总体方案设计和任务分工;每人完成自己承担的程序模块并通过独立编译;2011年6月18日2011年6月23
4、日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;同时撰写报告。2011年6月24日,验收;提交课程设计报告。 指导教师签章: 教研室主任签章 面向对象程学设计课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2011年 6 月 24 日目 录第一部分 需求分析5第二部分 概要设计62.1 总体设计思想62.2函数的实现62.3菜单的实现6第三部分 详细设计(含主要代码)7第四部分 调试分析与测试结果.11第五部分 用户说明书.13第六部分 源代码及参考文献.146.1 源代码.146.2 参考文
5、献.30 一 需求分析本程序设计者根据学生成绩管理的需求而建立一个“学生成绩管理系统”,以方便对成绩的各项管理进行操作。开发目的如:对学生数据的录入,修改,维护和删除。能够根据学生的姓名和学号进行相关信息的查询。可对学生数据进行保存,也能够实现对学生数据的浏览。 二 概要设计2.1 总体设计思想学生成绩管理系统,要具有一些对学生信息的维护,增加,删除,更改,查找,显示,退出的功能,还有根据学生的学号及各门成绩,总成绩进行排序的功能。创建两个类,第一个student类实现对学生信息的描述,如学生姓名,学号和各科成绩等。第二个cla类中的成员函数完成对各种功能的实现,对学生数据的录入,修改,维护和
6、删除。能够根据学生的姓名和学号进行相关信息的查询。可根据学生的学号,各门成绩及总成绩对学生成绩进行排序。可对学生数据进行保存,也能够实现对学生数据的浏览。2.2 函数的实现void Add(); 实现对学生数据信息的添加。void Delete(); 实现对学生数据的删除。 void Modify(); 实现对数据的修改与维护。void Find(); 实现对学生成绩的查询,可按学号及姓名进行查询void Save(); 实现对录入数据的保存。void Print(); 实现对数据信息的读取。 2.3 菜单的实现对于菜单,对于一般的选项我选择使用swich语句来完成,但是还有一个选项是需要来退
7、出的,不能把它和这些选项放在一起来完成,因此我想到了在swich外加个大while语句来进行这个选项的控制,当输入0时就退出系统,只要不输入0就可以进行其他的选项。 三 详细设计class Student:virtual public Personprotected: char classeg20; float english ,AMaths; float cc,algebra,sum=0;public: Student() Duty=2; void Input() /键盘补充输入其它数据 coutnum; coutname; coutclasseg; coutAMaths; coutengl
8、ish; coutcc; coutalgebra; sum+=(cc+AMaths+english+algebra); void Input(ifstream& ifs) ifsnumnameDutyclassegAMathsenglishccalgebrasum; void Output() coutnumtnametclassegtAMathstenglishtcctalgebratsumendl; void Output(ofstream& ofs) ofsnumtnametDutytclassegtAMathstenglishtcctalgebratsumendl; ;建立一个学生类,
9、用来实现对学生相关信息的描述。(李照龙,杨广为)class College private: Person *PL; void Clear(); int College:Cfind(int ID,Person *p1,Person *p2); public: College(); /构造 College(); /析构 void Add(); /增加学生 void Delete(); /删除学生 void Modify(); /修改学生 void Print(); /输出学生信息 void Save(); /学生信息存盘 void Load(int i=0); /学生信息装入 void Find
10、(); /查找 void Build(); /导引 void Stat(); /统计 ;建立College类,其中的成员函数实现对学生数据的录入,修改,维护和删除。能够根据学生的姓名和学号进行相关信息的查询。可对学生数据进行保存,也能够实现对学生数据的浏览。(尹跃龙,李学渊)程序功能模块快:学生成绩管理系统管理员数据录入数据修改数据删除 学 生查看信息修改信息教师查看特定学生查看全部学生录入成绩修改学生成绩退出void College:Add() /增加成员 char c; do coutnext)p=p-next; int ch=2; /coutch; /创建新结点,录入数据,连接到链表 /
11、Teacher *pt; Student *pa; switch(ch) /case 1: pt=new Teacher; pt-Input(); /p-next=pt; /break; case 2: pa=new Student; pa-Input(); p-next=pa; break; default: return; coutc; while(c=y|c=Y); Save(); 四 调试与分析与测试结果这是开机动画 这是登陆时的菜单界面,可根据功能进行相关操作 这是管理学生信息的界面,可按照学号及姓名进行查询 五 用户使用说明 此程序登陆界面以后可按照操作需要选择(1-4)键。选择2
12、键时可分别按学生的姓名和学号进行查询,其中按1键为管理员录入学生信息。选择3键是教师查看学生成绩,选择以后又会弹出一个选择界面(1-5)键,可进行具体查询。4键为退出键。所有初始密码均为123456. 六 附录或参考文献6.1 程序源代#include#include #include #include #include#includeusing namespace std;void jiem();void guanli();void donghua()system(cls);int j;for(j=2;j50;j+) coutsetw(j) endl;coutsetw(j) endl;cou
13、tsetw(j) 合家欢乐endl;coutsetw(j) endl;coutsetw(j) endl;coutsetw(j) | | |endl; coutnnnnn;coutsetw(50-j) endl;coutsetw(50-j) endl;coutsetw(50-j) 合家欢乐endl;coutsetw(50-j) endl;coutsetw(50-j) endl;coutsetw(50-j) | | |endl;system(cls);coutsetw(20) endl;coutsetw(20) endl;coutsetw(20) ? endl;coutsetw(20) 歡 迎 登
14、 陸 endl;coutsetw(20) endl;coutsetw(20) endl;coutsetw(20) endl;coutsetw(20) endl;system(pause); class Person /人员类(抽象类) protected: double num; /编号 char name20; /姓名 int Duty; /人员类别标志(1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师) Person *next; /指针域 public: Person() /基类构造 next=0; /指针域设置为空 virtual Person() /基类虚析构 v
15、irtual void Input()=0; /从键盘输入数据 virtual void Input(ifstream& ifs)=0; /从文件输入数据 virtual void Output()=0; /向屏幕输出数据 virtual void Output(ofstream& ofs)=0; /向文件输出数据 friend class College; ; class Student:virtual public Personprotected: char classeg20; float english ,AMaths; float cc,algebra;public: Student
16、() Duty=2; void Input() /键盘补充输入其它数据 coutnum; coutname; coutclasseg; coutAMaths; coutenglish; coutcc; coutalgebra; /Salary=Incoming(); void Input(ifstream& ifs) ifsnumnameDutyclassegAMathsenglishccalgebra; void Output() coutnumtnametclassegtAMathstenglishtcctalgebraendl; void Output(ofstream& ofs) of
17、snumtnametDutytclassegtAMathstenglishtcctalgebraendl; ;class Teacher :virtual public Personprotected: int topic; char subject20; public : Teacher(int t=0,char T=,char s=) topic=t; strcpy(name,T); strcpy(subject,s); void change() switch(topic) case 1: break; case 2: break; case 3: break; case 4: brea
18、k; char *getTname()return name; char *getsubject()return subject; void amendTname() coutname; void Input() /键盘补充输入其它数据 coutnum; coutname; coutsubject; void Input(ifstream& ifs) ifsnumnamesubjecttopic; void Output() coutnumtnametsubjectttopicendl; void Output(ofstream& ofs) ofsnumtnametsubjectttopice
19、ndl; ; class College private: Person *PL; void Clear(); int College:Cfind(int ID,Person *p1,Person *p2); public: College(); /构造 College(); /析构 void Add(); /增加学生 void Delete(); /删除学生 void Modify(); /修改学生 void Print(); /输出学生信息 void Save(); /学生信息存盘 void Load(); /学生信息装入 void Find(); /查找 void Build(); /导
20、引 void Stat(); /统计 ; College:College() /构造函数(创建1个头结点的链表) Person *p=new Teacher; PL=p; cout+欢迎使用我们的程序!编程成员:李照龙,杨广为,李学渊,尹跃龙n; cout_next; delete p; p=PL; PL=0; void College:Add() /增加成员 char c; do coutnext)p=p-next; int ch=2; /coutch; /创建新结点,录入数据,连接到链表 /Teacher *pt; Student *pa; switch(ch) /case 1: pt=n
21、ew Teacher; pt-Input(); /p-next=pt; /break; case 2: pa=new Student; pa-Input(); p-next=pa; break; default: return; coutc; while(c=y|c=Y); Save(); void College:Clear() /清除所有的成员结点(仅保留头结点) Person *p=PL-next; while(p) PL-next=p-next; delete p; p=PL-next; /查找 void College:Find() /查找 double ID; Person *p1
22、; Person *p2; coutID; /ifstream f(Person.dat,ios:in); p1=PL-next; p2=PL; /p1-Input(f); while(p1) if(p1-num=ID) break; /找到 else p2=p1; /继续查找 p1=p2-next; if(!p1) cout找不到你所查询的人!n请确认你所查询的编号是否出错!n;return; else coutn* 学生信息表 *n; coutOutput(); /查找成员结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针) int College:Cfind(int ID
23、,Person *p1,Person *p2) *p1=PL-next; *p2=PL; while(*p1) if(*p1)-num=ID) break; /找到 else *p2=*p1; /继续查找 *p1=(*p1)-next; return *p1?1:0; void College:Delete() /删除成员 coutn* 删除成员 *n; int num; Person *p1,*p2; coutnum; if(!Cfind(num,&p1,&p2) coutnext=p1-next; /连接 delete p1; cout正确删除!n; Save(); void Colleg
24、e:Modify() /修改学生 coutn* 修改成员 *n; int num; Person *p1,*p2; coutnum; if(!Cfind(num,&p1,&p2) coutOutput(); /输出原来的学生信息(做提示) p1-Input(); /输入新的学生信息(更新) cout修改完成!n; Save(); void College:Print()/输出学生信息 coutn* 学生信息表 *n; coutnext; if(!p) coutOutput(); p=p-next; void College:Save() /学生信息存盘? ofstream f(Person.dat,ios:out|ios:app); /打开文件 /遍历输出至文件 Person *p=PL-next; while(p) p-Output(f); p=p-next; f.close(); /关闭文件 coutbufbufDuty; if(f)