




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 湖南工业大学课 程 设 计资 料 袋 计算机与通信学院 学院(系、部) 2010 2011 学年第 一 学期 课程名称 面向对象程序设计 指导教师 职称 学生姓名 专业班级 学号 题 目 学生成绩管理系统(基于控制台应用程序) 成 绩 起止日期 2011 年 1 月 3 日 2011 年 1 月 8 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书12课程设计说明书13源程序(电子文档)1456湖南工业大学课程设计任务书2010 2011 学年第 一 学期 学院(系、部) 专业 班级课程名称: 面向对象程序设计 设计题目: 学生成绩管理系统(基于控制台应用程序) 完成期限:自
2、 2011 年 1 月 3 日至 2011 年 1 月 8 日共 1 周内容及任务一、设计的任务及主要技术参数1 学生成绩的读入和写出模块: 主要功能是读出要管理的成绩文档,保存修改后的成绩文档。实际生活中学生成绩的文件主要以word或excel保存,为了方便操作,我在调试本系统中成绩文件采用了txt的文档格式保存,当然以word文档形式保存也是可以的。2 学生成绩添加删除模块:主要功能是添加、删除学生成绩的操作。删除操作是根据用户的要求实现的。例如用户可以输入要删除学生的学号或是要删除学生的姓名删除学生的信息。此程序输入学生成绩时就计算个人的总分和平均分,并保存到数据结构中相应的变量中。3
3、学生成绩的查询修改模块主要功能是按照用户的要求查询学生的成绩。其中用户可以选择查询单个学生的成绩或是选择修改先查询到要修改的学生信息然后进行相应的修改,成绩查询中包括个人学生的总分和平均分,。4 学生成绩的分类排序汇总模块 主要功能是统计所输入学生的每门学科的总分和平均分,同时可以选择按学号、各科成绩、总分或是平均分进行排序。二、设计任务1 进行系统的需求分析和功能设计。写出系统的需求,分析出系统主要用到的类和对象。然后,画出系统的功能模块图,设计每个模块的功能。2 详细设计,包括类与对象的设计(属性设计、成员函数设计等)、界面设计、类的继承与派生关系等。3 编码实现。即针对每个功能模块进行编
4、码。4 软件测试。首先进行单元模块的测试,单元测试通过以后,再进行集成测试和系统联调。系统编写测试完成后,形成一个可运行的系统。5 要求源程序书写格式规范,可读性好,进行必要的注释,采用缩进格式。6 撰写课程设计说明书三、设计工作量 用文件保存数据,具有简单的数据添加、修改、删除、查询、统计、显示等功能。进度安排起止日期工作内容第1天根据问题描述,分析系统功能,划分功能模块,完成程序的数据设计。第2天详细设计,即针对每个功能模块进行编码第34天各功能模块编码及调试第5天程序整体调试第6天完成设计文档和课程设计说明书主要参考资料1 谭浩强.c+面向对象程序设计m.北京:清华大学出版社,2006.
5、2 谭浩强.c+面向对象程序设计题解与上机指导m.北京:清华大学出版社,2006.3 刘恒洋,杨宏雨.面向对象程序设计案例教程m.北京:机械工业出版社,2010.4 罗建军.c/c+语言程序设计案例教程m.北京:机械工业出版社,2010.5 张海林,杜忠友,姜玉波. visual c+简明教程m.北京:电子工业出版社,2007.6 丁展,四维科技.visual c+游戏开发技术与实例m北京:人民邮电出版社,2005指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日 面向对象程序设计课程设计设计说明书学生成绩管理系统(基于控制台应用程序)起止日期: 2011 年 1 月 3 日
6、 至 2011 年 1 月 8 日学生姓名班级学号成绩指导教师(签字)2010年 1 月 8 日目 录1.问题描述12. 需求分析12.1. 功能需求分析12.1.1. 学生成绩的读入和写出模块12.1.2. 学生成绩添加删除模块12.1.3. 学生成绩的查询修改模块22.1.4. 学生成绩的分类排序汇总模块22.2. 环境需求分析22.3. 方法需求分析23. 概要设计23.1. 系统功能模块图23.2. 系统流程图34. 详细设计44.1. 设计原理44.2. 系统各模块分析设计44.2.1. 学生成绩的读入和写出模块44.2.2. 学生成绩添加删除模块44.2.3. 学生成绩的查询修改模
7、块44.2.4. 学生成绩的分类排序汇总模块55. 编码实现55.1. 系统各模块编码实现55.1.1. 系统的定义55.1.2. 类定义55.1.3. 主函数定义65.1.4. 学生信息修改函数75.1.5. 学生信息删除函数85.1.6. 学生信息修改函数105.1.7. 学生信息查询125.1.8. 学生信息排序显示函数145.1.9. 学生信息读入读出函数156. 调试与测试17 6.1.主界面. 176.2.增加学生信息界面:176.3.删除学生界面:186.4.修改学生信息界面:186.5.查询学生信息界面196.6.排序界面:196.7.操作说明197. 设计总结208. 致谢2
8、19. 参考资料211. 问题描述随着科学技术的发展,计算机领域不断取得新的研究成果。计算机在代替和延伸脑力劳动方面发挥越来越重要的作用,不仅在工业方面而且在日常生活中也越来越离不开计算机。尤其是在学校里,要处理大量的学生数据。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用.作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,有着手工管理所无法比拟的优点。学生成绩管理系统能方便用户迅速、准确处理学生的成绩,得到想要的数据并能将学生的信息以文档保存。本文介绍了简易学生成绩管理系统在microsoft visual
9、 c+ 6.0环境下的实现过程:系统的分析,功能模块的设计,系统的调试和测试。此系统的主要管理的信息有:学生的班级、学号、姓名和四门(可以更改)课的成绩以及学生的总分和平均分。本系统的主要功能有学生成绩的添加、删除、查询、修改,能对学生成绩按分数或学号进行排序,可以根据用户的要求按学号,姓名查询学生的成绩信息,同时计算每位学生的总分和平均分,能将每位同学的信息保存到文件data.txt中以及从文件中读取信息等功能。2. 需求分析2.1. 功能需求分析简易学生成绩管理系统主要有4个大的模块:学生成绩从文件读入和写入,学生成绩的输入添加和删除,学生成绩信息的查询和修改,以及学生成绩的分类排序汇总。
10、2.1.1. 学生成绩的读入和写出模块主要功能是读出要管理的成绩文档,保存修改后的成绩文档。实际生活中学生成绩的文件主要以word或excel保存,为了方便操作,我在调试本系统中成绩文件采用了txt的文档格式保存,当然以word文档形式保存也是可以的。2.1.2. 学生成绩添加删除模块主要功能是添加、删除学生成绩的操作。删除操作是根据用户的要求实现的。例如用户可以输入要删除学生的学号或是要删除学生的姓名删除学生的信息。此程序输入学生成绩时就计算个人的总分和平均分,并保存到数据结构中相应的变量中。2.1.3. 学生成绩的查询修改模块主要功能是按照用户的要求查询学生的成绩。其中用户可以选择查询单个
11、学生的成绩或是选择修改先查询到要修改的学生信息然后进行相应的修改,成绩查询中包括个人学生的总分和平均分。2.1.4. 学生成绩的分类排序汇总模块主要功能是统计所输入学生的每门学科的总分和平均分,同时可以选择按学号、各科成绩、总分或是平均分进行排序。2.2. 环境需求分析 硬件:pc机,档次不低于cpu为piii667,内存为256m,40g硬盘,其它硬件与此相配套。 软件:操作系统为windowsxp、windows2000等,开发工具为vc+6.0,数据库管理系统为sql server2000或access(可选)。2.3. 方法需求分析由于数组存放数据的时候要先确定数组的规模,不能动态的分
12、配内存空间,而单链表是非连续存放的,可以对内存空间进行动态分配,此系统是用单链表完成的。然后定义链表的结点类型为结构就可以实现对学生学号、姓名、成绩等进行保存。每次只要返回头指针,就可以对整个链表进行操作,因此选链表来存放学生信息。3. 概要设计3.1. 系查询学生信息 排序保存信息读取信息链表初始化修改学生信息删除学生信息输入学生信息学 生 成 绩 信 息 管 理 系 统统功能模块图 3.2. 系统流程图开 始退出输入学生信息删除学生信息修改学生信息查询学生信息排序保存信息读取信息请输入学生信息学号姓名数学成绩计算机成绩英语成绩面向对象程序设计成绩输入完毕!输入删除/修改/查询方式按学号删除
13、/修改/查询按姓名删除/修改/查询返回以学号排序以数学成绩排序以计算机成绩排序以英语成绩排序以c+成绩排序以总分排序以平均分排序请选择以何种方式排序显示设计思想:学生成绩管理系统是用面向对象的方法设计,由于数组的存放是连续的,而单链表是非连续存放的,是动态分配内存空间,因此此系统采用单链表来完成。各个功能模块的实现主要转变到对单链表的遍历,添加和删除结点。4. 详细设计4.1. 设计原理学生成绩管理系统以菜单选择,通过调用各个函数,对单链表的遍历,实现不同的功能,不同函数处理后返回的只是一个头结点,但是通过头结点可以找到所有链表中的信息,只要有函数,找到头指针就能进行相应的操作,所以模块化的程
14、序方便以后添加或者删除某些功能,程序中通过system(“cls”)清屏函数实现界面的转换,通过sleep(*)来实现界面的延迟,主函数中的循环保证程序不会退出,一个循环和一个清屏函数实现了主菜单和各子画面的切换(子函数)。这样的话各个子函数都可以调用一开始输入的数据,这样就实现了各个不同函数调用时都能使用整个系统连续起来了。作为一个学生成绩管理系统,增加了文件的读入和写出功能,增加了程序的实用性。4.2. 系统各模块分析设计4.2.1. 学生成绩的读入和写出模块主要功能是读出要管理的成绩文档,保存修改后的成绩文档。文件输入输出流头文件#include定义fstream类用来对磁盘文件的输入输
15、出。定义了一个输出文件流对象ofstream tfile和一个输入文件流对象ifstream tfile。利用ssave()(保存)sload()(读取)函数来实现。在调试本系统中成绩文件采用了txt的文档格式保存,数据保存在data.txt中。4.2.2. 学生成绩添加删除模块主要功能是添加、删除学生成绩的操作。删除操作是根据用户的要求实现的,可以通过选择相应的删除方式(按学号/按姓名)对相应的学生信息进行删除。添加采用函数sadd()删除采用函数sremove()来实现,同时此程序输入学生成绩时就可计算个人的总分和平均分,并保存到数据结构中相应的变量中。4.2.3. 学生成绩的查询修改模块
16、主要功能是按照用户的要求查询学生的成绩。其中用户可以选择查询或者修改方式(按学号查询/按姓名查询)来查询或修改学生的信息保存在相应的变量中,成绩查询中包括学生的总分和平均分。分别采用函数samend()修改和函数ssearch()查询来实现。4.2.4. 学生成绩的分类排序汇总模块主要功能是统计和显示所输入学生的信息,包括学号、姓名、每门学科成绩以及总分和平均分。在排序函数中可以选择按学号(pxh())、各科成绩( pxx()数学、pyy()计算机、pzz()英语、pmm()c+)、总分(paa())或是平均分(pav())进行排序同时统计显示。各函数实现又是采用相应变量进行比较,再将结点进行
17、交换。5. 编码实现5.1. 系统各模块编码实现5.1.1. 系统的定义#include /输入输出流头文件#include /文件输入输出头文件#include /字符串头文件#include / windows的所有资料型态、函数调用、资料结构和常数识别字using namespace std; /标识符被定义于一个名为std的namespace中#define max 100; /宏定义5.1.2. 类定义class student /定义学生类 public: student *next; string name;/姓名 long num;/学号 float x,y,z,m;/数学,计
18、算机,英语,面向对象程序设计 float aa,av;/总分,平均分 void display1() cout cout 学 号 姓 名 数 学 计算机 英 语cout endl; c+ 总 分 平均分endl; endl;void display2()cout num name x y z m aa avnext; delete stu; stu=p; stu=0; void sadd(); /添加 void sremove(); /删除 void samend(); /修改 void ssearch(); /查询 void staxis(); /排序 void ssave(); /保存 v
19、oid sload(); /读取 /排序函数 void pxh();/按学号排序 void pxx(); /按数学成绩排序void pyy(); /按计算机成绩排序void pzz();/按英语成绩排序void pmm();/按面向对象程序设计成绩排序void paa(); /按总分排序void pav();/按平均成绩排序private: student *stu; /头接点 ;5.1.3. 主函数定义void main() /*cout0=黑色 8=灰色endl; cout1=蓝色 9=淡蓝色endl;cout2=绿色 a=淡绿色endl;cout3=浅绿色 b=淡浅绿色endl;cout
20、4=红色 c=淡红色endl;cout5=紫色 d=淡紫色endl;cout6=黄色 e=淡黄色endl;cout7=白色 f=亮白色endl;*/system(color 5f);/5=紫色,f=亮白色char c; cla a; do system(cls); cout( _ ) 学生成绩管理系统 ( o )endl; cout endl;cout 1增加学生 endl; cout 2删除学生 endl; cout 3修改学生 endl; cout 4查询学生信息 endl; cout 5排序 endl; cout 6保存信息 endl; cout 7读取信息 endl; cout 8退出
21、 endl; cout endl; coutc; switch(c) case 1: a.sadd();break; case 2: a.sremove();break; case 3: a.samend();break; case 4: a.ssearch();break; case 5: a.staxis();break; case 6: a.ssave();break; case 7: a.sload();break;case 8:return;break;default: cout命令错误!endl;sleep(1000); while(c!=8); 5.1.4. 学生信息修改函数vo
22、id cla:sadd() student *q; string name1; long num1; float x1,y1,z1,m1; system(cls);a:system(cls);coutendl增加的学生endl; cout 请输入学生的信息:endl; coutnum1;coutname1;coutx1;couty1; coutz1; coutm1;q=new student(name1,num1,x1,y1,z1,m1); q-next=0;q-aa=x1+y1+z1+m1;q-av=(q-aa)/4;if(stu) student *t; t=stu; if(t-num=n
23、um1) cout 该学号已存在,请重新输入!next) if(t-num=num1) cout 该学号已存在,请重新输入!next; t-next=q; else stu=q;cout 输入完毕!endl;sleep(2000); 5.1.5. 学生信息删除函数void cla:sremove() system(cls); coutendl删除学生信息endl; cout 1.按学号删除endl; cout 2.按姓名删除endl; cout 3.返回endl; coutc; switch (c) case 1: long num1; coutnum1;/查找要删除的结点 student *
24、p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1;p1=p1-next; /删除结点 if(p1!=null)/若找到结点,则删除 system(cls);coutendl name学生的学号是numendl;cout 数学:xendl;cout 计算机:yendl;cout 英语:zendl;cout 面向对象程序设计:mendl;cout 总分:aaendl;cout 平均分:avendl;cout 确定删除学号为num1的学生信息吗?y/nc; if(toupper(c)!=y) return; if(p1=stu)
25、/若要删除的结点是第一个结点 stu=p1-next; delete p1; else /若要删除的结点是后续结点 p2-next=p1-next; delete p1; system(cls);cout 找到了学号为num1的学生信息,并删除.n; else /未找到结点system(cls);cout 未找到想要删除的学生!n;sleep(2050);break;case 2: string name1; coutname1; /查找要删除的结点 student *p1,*p2; p1=stu; while(p1) if(p1-name=name1) break; else p2=p1;p
26、1=p1-next; /删除结点 if(p1!=null)/若找到结点,则删除 system(cls);coutendl name学生的学号是numendl;cout 数学:xendl;cout 计算机:yendl;cout 英语:zendl;cout 面向对象程序设计:mendl;cout 总分:aaendl;cout 平均分:avendl; cout 确定删除name1的学生信息吗?y/nc; if(toupper(c)!=y) return; if(p1=stu) /若要删除的结点是第一个结点 stu=p1-next; delete p1; else /若要删除的结点是后续结点 p2-n
27、ext=p1-next; delete p1; system(cls);cout 找到了name1学生的信息,并删除.endl; else /未找到结点 system(cls);cout 未找到想要删除的学生!;sleep(2050);break; case 3: return;default: cout 命令错误!endl;sleep(1000); 5.1.6. 学生信息修改函数void cla:samend() system(cls); coutendl 修改学生信息 endl;cout 1.按学号查询修改endl; cout 2.按姓名查询修改endl; cout 3.返回endl; c
28、outc;system(cls);switch (c) case 1: long num1; coutnum1;/查找要修改的结点 student *p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; if(p1!=null) cout 学号是num1的学生的信息:endl; cout 姓名:nameendl;cout 数学:xendl;cout 计算机:yendl;cout 英语:zendl;cout 面向对象程序设计:mendl;cout 总分:aaendl;cout 平均分:avendl;cou
29、t 请输入修改后的信息:endl;coutp1-name;coutp1-x; coutp1-y; coutp1-z;coutp1-m; p1-aa=p1-x+p1-y+p1-z+p1-m;p1-av=(p1-aa/4);cout 修改成功!endl;sleep(2050); else /未找到接点 cout 未找到要修改的学生信息!endl;sleep(2050);break; case 2: string name1; coutname1; /查找要修改的结点 student *p1,*p2; p1=stu; while(p1) if(p1-name=name1) break; else p
30、2=p1; p1=p1-next; if(p1!=null) cout name1学生的信息:endl; cout 学号:numendl;cout 数学:xendl;cout 计算机:yendl;cout 英语:zendl;cout 面向对象程序设计:mendl;cout 总分:aaendl;cout 平均分:avendl;cout 请输入修改后的信息:endl;coutp1-num;coutp1-x; coutp1-y; coutp1-z;coutp1-m; p1-aa=p1-x+p1-y+p1-z+p1-m;p1-av=(p1-aa/4);cout 修改成功!endl;sleep(2050
31、); else /未找到接点 cout 未找到要修改的学生信息!endl;sleep(2050);break; case 3: return;break;default: cout 命令错误!endl;sleep(1000); 5.1.7. 学生信息查询void cla:ssearch() system(cls); coutendl查询学生信息endl; cout 1.按学号查询endl; cout 2.按姓名查询endl; cout 3.返回endl; coutc; switch (c) case 1: long num1; coutnum1; /查找要查询的结点 student *p1,*
32、p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; if(p1!=null) cout 学号是num1的学生的信息:endl; cout 姓名:nameendl;cout 数学:xendl;cout 计算机:yendl;cout 英语:zendl;cout 面向对象程序设计:mendl;cout 总分:aaendl;cout 平均分:avendl;cout 查询完毕.; sleep(2050); else /未找到接点 cout 未找到要查询的学生信息!n;sleep(2050);break; case 2:
33、 string name1; coutname1; /查找要查询的结点 student *p1,*p2; p1=stu; while(p1) if(p1-name=name1) break; else p2=p1; p1=p1-next; if(p1!=null) cout 姓名是name1的学生的信息:endl; cout 姓名:nameendl;cout 数学:xendl;cout 计算机:yendl;cout 英语:zendl;cout 面向对象程序设计:mendl;cout 总分:aaendl;cout 平均分:avendl;cout 查询完毕.;sleep(2050); else /
34、未找到接点 cout 未找到要查询的学生信息!endl;sleep(2050);break; case 3: return;default: cout命令错误!endl;sleep(1000); 5.1.8. 学生信息排序显示函数排序函数中包括可以选择按学号(pxh())、各科成绩( pxx()数学、pyy()计算机、pzz()英语、pmm()c+)、总分(paa())或是平均分(pav())进行排序同时统计显示。因为基本原理相同,下面为按总分排序的编码,另外六个函数只是变量不同,稍做修改便可。 进入排序功能的主界面函数编码void cla:staxis() system(cls); char
35、 c; coutendl学生信息排序显示 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; coutc; switch (c) case 1:pxh(); break; case 2:pxx(); break; case 3:pyy(); break; case 4:pzz(); break; case 5:pmm(); break;case 6
36、:paa(); break; case 7:pav(); break;case 8:return;default: cout 命令错误!next) n+; p1=p1-next; cout 共有n个学生信息.display1();p1=stu; for(int i=1;iaap1-next-aa) / 如果头结点大于第二个的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /头结点交换 stu=p2; p1=stu; while(p1-next-next) /中间的交换 p2=p1; p1=p1-next; if(p1-aap1-next-aa) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB36-T1786-2023-淡水鱼苗种产地检疫技术规范-江西省
- 冻结肩的治疗
- 2025年考研政治思想道德修养案例分析难点攻克试卷
- 广西桂林市龙胜中学2019-2020学年高二开学考试试题文(数学无答案)
- 互联网慢病管理
- 成本与收益的平衡分析试题及答案
- 骨肿瘤化疗护理规范与实施要点
- 2025年教师资格证学科知识与教学能力(高中)模拟试题:地理专业详解版
- 2025年证券从业资格考试金融市场基础知识模拟试卷新规解读法规解读应用策略
- 2025年银行从业风险管理核心考点精炼试题册
- 健康风险评估知识试题及答案
- 火爆世界的DeepSeek(时政猜想)-2025年中考道德与法治时政热点专练 (解析版)
- 车险代理合同
- 2024年盐城工学院辅导员考试真题
- 全球农业经济的试题及答案
- 2025年高考历史三轮复习之宋元时期
- 高校实验室安全教育与培训措施
- 2025年安徽省C20教育联盟中考一模物理试题(原卷版+解析版)
- 小区违章装修培训
- 疫情防控消毒培训课件
- GB/T 45355-2025无压埋地排污、排水用聚乙烯(PE)管道系统
评论
0/150
提交评论