




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录目录 1.引言 .1 2设计依据及框图 .2 2.1 设计思想 .2 2.2 设计框图、用户界面.2 3.各模块功能及主要模块的流程图 .11 3.1 各模块功能.11 3.2 主要流程图.14 4.软件调试分析 .15 4.1 错误分析.15 4.2 系统特点及缺点.15 5.结语 .16 参考文献 .17 摘要摘要 这一款学生信息管理小系统采用面向对象的设计方法,主要是面对管理端,管 理者可以通过密码登录进入系统对学生的各类数据统进行管理和维护。在主界面中 主要设置了 8 个基本功能:增加学生、显示全部学生、计算平均成绩、删除一个学 生、按年级输出学生信息、按性别输出学生信息、按姓名检
2、索学生、按总分进行排 序。这些功能基本上能满足学生管理的基本要求,此程序可以初步体现课程设计的 目标。 采用 Visual C+作为开发工具,界面简单友好,操作方便易行,便于维护,是 一个功能比较完善的管理系统。 关键字关键字:学生系统;继承;重载;派生 1.引言引言 随着我国经济与计算机技术的日益发展,信息化技术逐渐取代传统人工作 业,而学生也不例外。由于学生信息管理系统应用范围之广,版本各式各样, 功能不尽管理系统相同。如何做出一个比较出众的学生系统,是对程序员的一 种考验,这其中选择一种合适的程序设计语言、一个开发平台和编程思想是至 关重要的。而建成一个数字化的学生信息管理系统,进行统一
3、的管理,管理者 就会对学生情况得到及时准确的了解,并根据具体情况提供及时的查询与修改。 这样,就可以使学生的管理变得更为高效。本系统是从学生信息管理系统最基 本的功能进行设计和开发。 设计希望用 VC+编写一个界面美观流畅学生信息管理系统,管理者能够使用 它对学生数据进行基本的查询、增加、删除、修改等,而且程序运行结果正确,操 作方便,界面美观,逻辑层次清楚,程序结构合理,程序代码精简易懂。 管理者通过密码登录进入学生信息管理系统,根据需要可以实现以下功能:增加 学生、显示全部学生、计算平均成绩、删除一个学生、按年级输出学生信息、按性 别输出学生信息、按姓名检索学生、按总分进行排序。 该学生信
4、息管理系统是采用面向对象的程序设计思想,选择 C+语言进行编写 的,整个程序由一个学生基类和两个年级派生类、若干个函数及主函数构成的。 使用面向对象的程序设计方法是设计一个复杂的软件系统时,首要的问题是确 定该系统是有哪些对象组成的,并且设计这些对象。 本学期,专业开设了 C+面向对象课程设计,为我们提供了一个既动手又动脑 独立实践的机会,这就要求根据所学的 C+程序设计原理与程序设计的知识,能够 针对一个小型的学生信息管理系统,进行系统的任务分析,系统设计,运行调试等, 完成题目要求的功能。学会运用 Visual C+ 6.0 设计学生信息管理系统,从而达到 了解设计一个小型应用系统的目的,
5、提高适应实际,实践编程的能力。 2设计依据及框图设计依据及框图 2.1 设计思想设计思想 学生信息管理系统是一个管理学生数据的服务平台,它应该包括登录界面,通 过输入密码,核对正确进而进入主菜单界面,然后通过需要选择不同的操作,最终 能够达到查询,增添,删除等功能。 2.2 设计框图、用户界面设计框图、用户界面 2.2.1 通过对需求的分析和设计,我初步构造了程序的结构框图。如图 2.1: 开始 登录界面 年 级 输 出 录 入 信 息 平 均 成 绩 显 示 学 生 删 除 学 生 性 别 输 出 姓 名 检 索 总 分 排 序 结 束 程 序 图 2.1 设计框图 2.2.2 根据各模块功
6、能的逐步展开与分析,我完成了程序的全部代码设计,详 见附录。在一次次的调试完善后,成功运行了这个学生管理系统。 1. 这个系统是作为管理端存在的,为了保证信息的隐蔽性及安全性,防止人为 破坏,所以设计一个登录界面,需要输入的密码核实正确后方能进入主菜单操作, 以此来确保只有预先获得密码有管理权限的人才能使用该系统。在此还设定了登录 次数不得多于三次,否则强制退出程序。这里将管理员输入的密码通过 ifelse 语 句判断是否等于 code(预先定义在后台存储的),若相等则跳转至主界面,否则提 示重新输入。代码如下: lab1: system(cls); coutendlendlendl; cou
7、tco; if(co=code) goto lab2; else if(s=4) cout已登录三次,请退出!endl; return 0; else goto lab1; 2.在输入事先设定的密码,经检查正确,就到了主菜单界面,如下图;功能选 择通过管理员输入数字,使用 switch 语句来判断接收,从而能够进入各个子菜单。 图 2.1 主菜单图 lab2:system(cls); coutttt*欢迎使用学生信息管理系统*endlendl; cout1.录入信息endl; cout2.显示全部学生endl; cout3.计算平均成绩endl; cout4.删除一个学生endl; cout5
8、.按年级输出学生信息endl; cout6.按性别输出学生信息endl; cout7.按姓名检索学生endl; cout8.按总分排序endl; cout9.结束程序运行endl endl; coutgetin; switch(getin) 注:lab2 是一个标签,能通过之后的 goto lab2 从各级子菜单快速地跳转回来。 3 .case1 是录入信息菜单,pi是存储学生信息的数组对象,同样通过 switch 语句判断选择,可以不限次地分别录入一、二年级的学生信息,完成后自动保存并 返回主菜单。这里用类类型的指针变量指向已存在的最后一个记录,追加到最后一 个记录后面,然后通过指针指向对象
9、的成员函数 set()从键盘上输入信息,用 new 开辟一段空间以存放该类型的对象,而统计创建的对象个数的变量 i 则进行自加运 算,最后指针指回头结点。增加学生信息,界面如下: case 1: /录入信息 lab3: system(cls); cout1.录入一年级生信息endl; cout2.录入二年级生信息endl; cout3.返回上一级菜单endl; coutc1; switch(c1) case 1: pi=new Student1; pi-set(); i+; goto lab3; case 2: pi=new Student2; pi-set(); i+; goto lab3;
10、 default:goto lab2; break; 图 2.2 录入信息 2 图 5case2 为显示信息菜单,先通过 for 循环语句并利用类指针,从类数组第一 个对象开始调用 display()来显示,直到全部学生显示完毕,最后指针指回头结点, 停止操作并返回主菜单。 case 2: /显示全部信息 system(cls); cout学生信息n学号 姓名 性别(male/female) 语文 英语 数学 年n; for(j=0;jdisplay(); coutc2; switch(c2) case 1:case 2:case 3:default: goto lab2 图 2.3 信息显示
11、图 6case3 计算平均成绩,输入需查询学生的学号,在 for 循环中用 if 语句及指 针来搜寻与之匹配的信息,如果存在则通过函数 getsum()取总成绩,再计算出平均 成绩并用指针 pj-display()输出,否则给出错误提示信息并返回主菜单返回主 菜单后。 case 3:/计算平均成绩 lab4: system(cls); coutendlendl; coutttt*计算平均成绩*endlendl; coutxh; for(j=0;jgetnum()=xh) double sum,ave; sum=pj-getsum(); ave=sum/3; cout学号 姓名 语文 英语 数学
12、 平均成绩endl; coutgetnum() getname() getch() geten() getma() aveendl; else cout此学生不存在,请重新输入!endl; goto lab4; 注:这里的 lab4 为了便于返回重新查询设的标签,与 goto lab4 结合起来用。 图 2.4 查询成绩图 7case4 为删除学生,可以按照姓名或者学号删除,当管理员输入相应选择后, 程序对应先通过查找记录,再对对应对象信息做删除,同样采用 for 循环跟 if 语句, 每删除一个学生变量 i 就进行自减运算,是对象个数及时得到改正,最后指针指向 头结点。按照学号删除的代码如下
13、: int xuehao; coutxuehao; for(j=0;jgetnum()=xuehao) for(int del=j;deli;del+) pdel=pdel+1; i-; cout n 成功删除!n; coutc3; switch(c3) case 1:case 2:case 3:default: goto lab2; 图 2.5 删除信息 1 图 8case5 是按年级输出学生,管理员选择所需年级后,用指针变量 pj定位在 年级号 id 所匹配的第一个对象处,接着执行 display 函数显示信息,j+后继续查 找,用 ji 保证指针不超出范围(i 作为变量统计学生录入个数)
14、。 case 5:/按年级输出学生信息 system(cls); coutttt*按年级输出学生信息* endlendl; cout1.按一年级生输出学生信息endl; cout2.按二年级生输出学生信息endlendl; coutc5; switch(c5) case 1: cout学号 姓名 性别 语文 英语 数学 年龄endl; for(j=0;jgetid()=1) pj-display(); coutc5; switch(c5) case 1:case 2:case 3:default: goto lab2; case 2: cout学号 姓名 性别 语文 英语 数学 年龄endl;
15、 for(j=0;jgetid()=2) pj-display(); coutc5; switch(c5) case 1:case 2:case 3:default: goto lab2; default: coutn 输入错误!n; break; coutc5; switch(c5) case 1:case 2:case 3:default: goto lab2; 图 2.6 1 年级输出图 9case6 按性别输出,也同样指针 pj指向对象的函数 getsex()取性别来与 “female”或“male”比较,相等则调用 display 函数输出学生信息。界面如下: 图 2.7 性别输出图
16、 10case7 按姓名检索信息,管理员输入查询姓名后,系统利用类指针,从头开 始 pi-getname()=xingm(存放输入姓名的变量)查找配对的对象,如果 if 语句 返回真值则执行 display 函数,接着 switch 接收任何数字返回主菜单,最后指针指 向头结点。 case 7: system(cls); coutxingm; for(j=0;jgetname()=xingm) pj-display(); coutc7; switch(c7) case 1:case 2:case 3:default: goto lab2; 11case8 按总分升序排序,使用 for 循环用指
17、针变量 pci指向对象的成员函 数 getsum()取总分,将第一个对象依次和其他对象的比较,若前者总分大于后者, 则通过两个中间变量 htp 和 ztp 把二者的学号与总分对换,以此类推直到排序完成。 接着用 haoj、zongj输出信息。 case 8:/按总分排序 int ci; for(ci=0;cigetnum(); zongci=pci-getsum(); for(n=0;ni;n+) for(m=n+1;mzongm) htp=haom; haom=haon; haon=htp; ztp=zongm; zongm=zongn; zongn=ztp; system(cls); co
18、utendlendl; coutttt*按总分排序* endlendl; cout学生学号 总分n; for(j=0;ji;j+) couthaoj zongjendl; coutc8; switch(c8) case 1:case 2:case 3:default: goto lab2; 图 2.8 总分排序图 12case9 退出程序,用 system(cls)清屏,break 语句跳出。 至此整个程序运行即 switch 语句结束。最后,由于 main 函数定义为 int 型, 要记得加上 return 0 语句。 而程序中使用了输入输出流 iostream、string 类型等,头文件
19、应该包括: #include #include #include #include #include using namespace std; 这其中每个 case 后要加上 break 语句以便终止 switch 语句的执行,另外在一 些经常需要跳转到的地方如主菜单处设为标签 lab,之后使用 goto 语句即可跳转至 此处。 3.各模块功能及主要模块的流程图各模块功能及主要模块的流程图 3.1 各模块功能各模块功能 1.整个程序中构造了一个学生基类,它应该包括学生的共有属性,而两个年级 学生作为派生类,可以从基类中继承共有的成员,并在此基础上增加了年级的特性。 其中学生基类中的函数如表 1
20、: 表 3.1 基类模块表 getid() 取年级号,用于识别一二年级 set() 在派生类中调用,录入信息 display() 在派生类中调用,显示信息 getnum() 取学号 getname() 取姓名 getsum() 取成绩总分 getsex() 取性别 getch() 取语文成绩 geten() 取英语成绩 getma() 取数学成绩 Student getborth() 取出生时间 该程序采用的是类类型来处理学生的所有基本信息。通过对设计要求的分析构 造基类 Student,信息中应包含的学号、姓名、性别等就作为数据成员,而派生类一 二年级学生继承了基类的一些属性,如姓名、学号等
21、,但由于所处的年级不同,需 要增加 id 号来识别年级。而且它应该根据选择自动生成,不需要人为的录入。所以 getid()、set()、display()三个函数分别加上关键字 virtual,使其成为纯虚函数, 留待派生类定义调用同名函数却能实现不同的功能,这就体现了 C+的多态性,既 用不着重载函数,也能通过指针去调用派生类对象中的成员函数。另外增加构造函 数 Student(),并对其数据成员进行赋初值,但 id 不用赋值,留待派生类分别进行 定义。而其余的 8 个函数则是用来取对象的数据。代码如下: class Student public: int id; /一二年级识别 int n
22、um; string name; string sex; double ch,en,ma; /成绩 int borth; int age; Student(); virtual int getid()=0; /一二年级识别 virtual void set()=0; /纯虚函数,在派生类中调用 virtual void display()=0; int getnum(); /取学号 string getname(); /取姓名 double getsum(); /取总成绩 string getsex(); /取性别 double getch(); /取各科成绩 double geten();
23、double getma(); int getborth(); Student:Student() /基类构造 num=0; name=”No name; ch=0;en=0;ma=0; borth=1900; int Student:getnum()/取学号 return num; string Student:getname() return name; string Student:getsex() return sex; double Student:getsum() return ch+en+ma; double Student:getch() return ch; double S
24、tudent:geten() return en; double Student:getma() return ma; int Student:getborth() return borth; 2.而在派生类中我分别定义了五个函数,主要是要体现录入、显示功能和重载, 模块如表 3.2: 表 3.2 学生 1 类模块表 getid() 取 id=1,为一年级学生 set() 录入一年级学生信息 display() 显示一年级学生信息 ostream /一年级生识别 Student1(); /Student1 构造 int getid(); /一年级生识别 void set(); void dis
25、play(); friend ostream; void Student1:set() /录入信息函数 cout输入一年级生信息nnumnamesex chenmaborth; Student1:Student1()/Student1 构造 id=1; int Student1:getid() return id; void Student1:display() /显示信息 coutn 一年级生:nid num name sex ch en ma 2009- borth endl; /一年级生类中重载输入输出符 ostream return in; 3.2 主要流程图主要流程图 1程序运行,管
26、理员进入登录界面,需输入密码。后台通过其密码与数据库中 的比较,通过验证后方可进入主菜单界面,否则重新输入,共有三次机会,之后结 束程序。流程图如下所示: 是 开始 密码 进入主菜单 s=3 结束 否 是 否 图 3.1 登录流程图 2当从主菜单中选择要进行的操作后,分别进入子界面,比如录入信息界面, 操作流程图如下所示: 否 是 开始 选择 1 录入一年级生 选择 2 结束 否 是 录入一年级生返回 图 3.2 录入流程图 4.软件调试分析软件调试分析 4.1 错误分析错误分析 整个的代码编写和程序运行的过程中,我遇到了很多困难,一开始会心烦气躁, 不想往下写。但在调试解决了一个个错误之后,
27、我学习到很多东西。主要出现的错 误如下: 1起初对派生类的概念没有搞清楚,基类中的函数无法调用,在将其改为虚函 数之后,问题解决了; 2输入密码验证时,设置最多能登录三次,否则结束运行,但是却出现无法跳 出循环的情况,经过检查后发现,for 语句一直执行返回操作,应在密码验证超过 三次之后加上输出提示“已登录三次,请退出!”及结束语句“return 0”; 3.由于主函数过长,导致“”没有划分清楚,结果提示文件没有结束,在添 加之后解决了这一问题; 4.最初是在 Word 文档中编写代码,使用了中文的标点符号,到了 VC+无法运 行,认识到:原来任何一个细小的问题都会牵连整个程序,所以任何方面
28、都要仔仔 细细,不能粗心大意。 4.2 系统特点及缺点系统特点及缺点 系统最终基本实现一个小型学生管理系统的主要要求,它代替了人工作业的复 杂繁琐和易错,体现数字化的方便高效。每一步操作系统都会给出提示,能够记录 学生的重要信息,并及时实现增添、删除、修改、查询等功能,而平均成绩等能自 动计算准确。当输入错误时,系统提示并允许重新更改,凸显了人性化。 同时,系统还是暴露了许多缺点。首先,界面不美观,缺乏特点;另外异常处 理效果差,强制退出会导致资料丢失;而网络功能的欠缺,使其只能在单片机上运 行,无法实现资源共享;数据安全仍然没有得到完善的解决,单一的密码识别无法 做到万无一失,用户权限应该有更好的控制措施。这些都需要在今后的运行调试中 去慢慢改进,结合更多的新技术。 5.5.结语结语 经过一个月的努力,我的课程设计任务终于完成了。在这次设计中我不但温 故了以前学过的知识,更学到了很多新的知识。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年高中英语 Unit 22 Environmental Protection Section Ⅶ Writing-报告(教师用书)教学实录 北师大版选修8
- 人工智能训练师(高级)职业技能鉴定参考题(附答案)
- 2025年度福建省职业院校技能大赛-护理技能赛项-高职组考试题库-含答案
- 预防艾滋病活动总结
- 图书馆工作总结
- 2025技术合作项目合同书(模板)
- 写字楼物业管理服务合同范本
- 不锈钢电梯门套制作安装合同范本
- 2025照明设备采购合同范本样本
- 医学资料 医院护理交接班制度培训-2 学习课件
- 《伊索寓言》阅读指导课课件
- 有限空间作业主要事故隐患排查表
- 周版正身图动作详解定稿201503剖析
- 125吨大车轮更换调整方案
- 蒿柳养殖天蚕技术
- 来料检验指导书铝型材
- (高清版)建筑工程裂缝防治技术规程JGJ_T 317-2014
- 手足口病培训课件(ppt)
- 变电站夜间巡视卡
- 医院安全生产大检查自查记录文本表
- 卡通风区三好学生竞选演讲ppt模板
评论
0/150
提交评论