




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录目录 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 个基本功能 增加学生 显示全部学生 计算平均成绩 删除一个学 生 按年级输出学生信息 按性别输出学生信息 按姓名检索学生 按总分进行排 序 这些功能基本上能满足学生管理的基本要求 此程序可以初步体现课程设计的 目标 采用 Visual C 作为开发工具 界面简单友好 操作方便易行 便于维护 是 一个功能比较完善的管理系统 关键字关键字 学生系统 继承 重载 派生 1 1 引言引言 随着我国经济与计算机技术的日益发展 信息化技术逐渐取代传统人工作 业 而学生也不例外 由于学生信息管理系统应用范围之广 版本各式各样 功能不尽管理系统相同 如何做出一个比较出众的学生系统 是对程序员的一 种考验 这其中选择一种合适的程序设计语言 一个开发平台和编程思想是至 关重要的 而建成一个数字化的学生信息管理系统 进行统一的管理 管理者 就会对学生情况得到及时准确的了解 并根据具体情况提供及时的查询与修改 这样 就可以使学生的管理变得更为高效 本系统是从学生信息管理系统最基 本的功能进行设计和开发 设计希望用 VC 编写一个界面美观流畅学生信息管理系统 管理者能够使用 它对学生数据进行基本的查询 增加 删除 修改等 而且程序运行结果正确 操 作方便 界面美观 逻辑层次清楚 程序结构合理 程序代码精简易懂 管理者通过密码登录进入学生信息管理系统 根据需要可以实现以下功能 增加 学生 显示全部学生 计算平均成绩 删除一个学生 按年级输出学生信息 按性 别输出学生信息 按姓名检索学生 按总分进行排序 该学生信息管理系统是采用面向对象的程序设计思想 选择 C 语言进行编写 的 整个程序由一个学生基类和两个年级派生类 若干个函数及主函数构成的 使用面向对象的程序设计方法是设计一个复杂的软件系统时 首要的问题是确 定该系统是有哪些对象组成的 并且设计这些对象 本学期 专业开设了 C 面向对象课程设计 为我们提供了一个既动手又动脑 独立实践的机会 这就要求根据所学的 C 程序设计原理与程序设计的知识 能够 针对一个小型的学生信息管理系统 进行系统的任务分析 系统设计 运行调试等 完成题目要求的功能 学会运用 Visual C 6 0 设计学生信息管理系统 从而达到 了解设计一个小型应用系统的目的 提高适应实际 实践编程的能力 2 2 设计依据及框图 设计依据及框图 2 1 设计思想设计思想 学生信息管理系统是一个管理学生数据的服务平台 它应该包括登录界面 通 过输入密码 核对正确进而进入主菜单界面 然后通过需要选择不同的操作 最终 能够达到查询 增添 删除等功能 2 2 设计框图 用户界面设计框图 用户界面 2 2 1 通过对需求的分析和设计 我初步构造了程序的结构框图 如图 2 1 开始 登录界面 年 级 输 出 录 入 信 息 平 均 成 绩 显 示 学 生 删 除 学 生 性 别 输 出 姓 名 检 索 总 分 排 序 结 束 程 序 图 2 1 设计框图 2 2 2 根据各模块功能的逐步展开与分析 我完成了程序的全部代码设计 详 见附录 在一次次的调试完善后 成功运行了这个学生管理系统 1 这个系统是作为管理端存在的 为了保证信息的隐蔽性及安全性 防止人为 破坏 所以设计一个登录界面 需要输入的密码核实正确后方能进入主菜单操作 以此来确保只有预先获得密码有管理权限的人才能使用该系统 在此还设定了登录 次数不得多于三次 否则强制退出程序 这里将管理员输入的密码通过 if else 语 句判断是否等于 code 预先定义在后台存储的 若相等则跳转至主界面 否则提 示重新输入 代码如下 3 lab1 system cls cout endl endl endl cout co if co code goto lab2 else if s 4 cout 已登录三次 请退出 endl return 0 else goto lab1 2 在输入事先设定的密码 经检查正确 就到了主菜单界面 如下图 功能选 择通过管理员输入数字 使用 switch 语句来判断接收 从而能够进入各个子菜单 图 2 1 主菜单图 lab2 system cls cout t t t 欢迎使用学生信息管理系统 endl 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 9 结束程序运行 endl endl cout getin switch getin 4 注 lab2 是一个标签 能通过之后的 goto lab2 从各级子菜单快速地跳转回来 3 case1 是录入信息菜单 p i 是存储学生信息的数组对象 同样通过 switch 语句判断选择 可以不限次地分别录入一 二年级的学生信息 完成后自动保存并 返回主菜单 这里用类类型的指针变量指向已存在的最后一个记录 追加到最后一 个记录后面 然后通过指针指向对象的成员函数 set 从键盘上输入信息 用 new 开辟一段空间以存放该类型的对象 而统计创建的对象个数的变量 i 则进行自加运 算 最后指针指回头结点 增加学生信息 界面如下 case 1 录入信息 lab3 system cls cout 1 录入一年级生信息 endl cout 2 录入二年级生信息 endl cout 3 返回上一级菜单 endl cout c1 switch c1 case 1 p i new Student1 p i set i goto lab3 case 2 p i new Student2 p i set i goto lab3 default goto lab2 break 5 图 2 2 录入信息 2 图 5 case2 为显示信息菜单 先通过 for 循环语句并利用类指针 从类数组第一 个对象开始调用 display 来显示 直到全部学生显示完毕 最后指针指回头结点 停止操作并返回主菜单 case 2 显示全部信息 system cls cout 学生信息 n 学号 姓名 性别 male female 语文 英语 数学 年 n for j 0 jdisplay cout c2 switch c2 case 1 case 2 case 3 default goto lab2 图 2 3 信息显示图 6 case3 计算平均成绩 输入需查询学生的学号 在 for 循环中用 if 语句及指 针来搜寻与之匹配的信息 如果存在则通过函数 getsum 取总成绩 再计算出平均 成绩并用指针 p j display 输出 否则给出错误提示信息并返回主菜单返回主 菜单后 case 3 计算平均成绩 lab4 system cls cout endl endl cout t t t 计算平均成绩 endl endl cout xh for j 0 jgetnum xh double sum ave sum p j getsum 6 ave sum 3 cout 学号 姓名 语文 英语 数学 平均成绩 endl cout getnum getname getch geten getma ave endl else cout 此学生不存在 请重新输入 endl goto lab4 注 这里的 lab4 为了便于返回重新查询设的标签 与 goto lab4 结合起来用 图 2 4 查询成绩图 7 case4 为删除学生 可以按照姓名或者学号删除 当管理员输入相应选择后 程序对应先通过查找记录 再对对应对象信息做删除 同样采用 for 循环跟 if 语句 每删除一个学生变量 i 就进行自减运算 是对象个数及时得到改正 最后指针指向 头结点 按照学号删除的代码如下 int xuehao cout xuehao for j 0 jgetnum xuehao for int del j del i del p del p del 1 i cout n 成功删除 n cout c3 switch c3 7 case 1 case 2 case 3 default goto lab2 图 2 5 删除信息 1 图 8 case5 是按年级输出学生 管理员选择所需年级后 用指针变量 p j 定位在 年级号 id 所匹配的第一个对象处 接着执行 display 函数显示信息 j 后继续查 找 用 j i 保证指针不超出范围 i 作为变量统计学生录入个数 case 5 按年级输出学生信息 system cls cout t t t 按年级输出学生信息 endl endl cout 1 按一年级生输出学生信息 endl cout 2 按二年级生输出学生信息 endl endl cout c5 switch c5 case 1 cout 学号 姓名 性别 语文 英语 数学 年龄 endl for j 0 jgetid 1 p j display cout c5 switch c5 case 1 case 2 case 3 default goto lab2 case 2 cout 学号 姓名 性别 语文 英语 数学 年龄 endl for j 0 jgetid 2 p j display cout c5 switch c5 case 1 case 2 case 3 default goto lab2 default cout n 输入错误 n break cout c5 switch c5 case 1 case 2 case 3 default goto lab2 图 2 6 1 年级输出图 9 case6 按性别输出 也同样指针 p j 指向对象的函数 getsex 取性别来与 female 或 male 比较 相等则调用 display 函数输出学生信息 界面如下 图 2 7 性别输出图 9 10 case7 按姓名检索信息 管理员输入查询姓名后 系统利用类指针 从头开 始 p i getname xingm 存放输入姓名的变量 查找配对的对象 如果 if 语句 返回真值则执行 display 函数 接着 switch 接收任何数字返回主菜单 最后指针指 向头结点 case 7 system cls cout xingm for j 0 jgetname xingm p j display cout c7 switch c7 case 1 case 2 case 3 default goto lab2 11 case8 按总分升序排序 使用 for 循环用指针变量 p ci 指向对象的成员函 数 getsum 取总分 将第一个对象依次和其他对象的比较 若前者总分大于后者 则通过两个中间变量 htp 和 ztp 把二者的学号与总分对换 以此类推直到排序完成 接着用 hao j zong j 输出信息 case 8 按总分排序 int ci for ci 0 cigetnum zong ci p ci getsum for n 0 n i n for m n 1 mzong m htp hao m hao m hao n hao n htp ztp zong m zong m zong n zong n ztp system cls cout endl endl cout t t t 按总分排序 endl endl 10 cout 学生学号 总分 n for j 0 j i j cout hao j zong j endl cout c8 switch c8 case 1 case 2 case 3 default goto lab2 图 2 8 总分排序图 12 case9 退出程序 用 system cls 清屏 break 语句跳出 至此整个程序运行即 switch 语句结束 最后 由于 main 函数定义为 int 型 要记得加上 return 0 语句 而程序中使用了输入输出流 iostream string 类型等 头文件应该包括 include include include include include using namespace std 这其中每个 case 后要加上 break 语句以便终止 switch 语句的执行 另外在一 些经常需要跳转到的地方如主菜单处设为标签 lab 之后使用 goto 语句即可跳转至 此处 11 3 各模块功能及主要模块的流程图各模块功能及主要模块的流程图 3 1 各模块功能各模块功能 1 整个程序中构造了一个学生基类 它应该包括学生的共有属性 而两个年级 学生作为派生类 可以从基类中继承共有的成员 并在此基础上增加了年级的特性 其中学生基类中的函数如表 1 表 3 1 基类模块表 getid 取年级号 用于识别一二年级 set 在派生类中调用 录入信息 display 在派生类中调用 显示信息 getnum 取学号 getname 取姓名 getsum 取成绩总分 getsex 取性别 getch 取语文成绩 geten 取英语成绩 getma 取数学成绩 Student getborth 取出生时间 该程序采用的是类类型来处理学生的所有基本信息 通过对设计要求的分析构 造基类 Student 信息中应包含的学号 姓名 性别等就作为数据成员 而派生类一 二年级学生继承了基类的一些属性 如姓名 学号等 但由于所处的年级不同 需 要增加 id 号来识别年级 而且它应该根据选择自动生成 不需要人为的录入 所以 getid set display 三个函数分别加上关键字 virtual 使其成为纯虚函数 留待派生类定义调用同名函数却能实现不同的功能 这就体现了 C 的多态性 既 用不着重载函数 也能通过指针去调用派生类对象中的成员函数 另外增加构造函 数 Student 并对其数据成员进行赋初值 但 id 不用赋值 留待派生类分别进行 定义 而其余的 8 个函数则是用来取对象的数据 代码如下 class Student public int id 一二年级识别 int num string name 12 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 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 Student 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 display friend ostream void Student1 set 录入信息函数 cout 输入一年级生信息 n num name sex ch en ma borth Student1 Student1 Student1 构造 id 1 int Student1 getid return id void Student1 display 显示信息 cout n 一年级生 n id num name sex ch en ma 2009 borth endl 一年级生类中重载输入输出符 ostream 14 return in 3 2 主要流程图主要流程图 1 程序运行 管理员进入登录界面 需输入密码 后台通过其密码与数据库中 的比较 通过验证后方可进入主菜单界面 否则重新输入 共有三次机会 之后结 束程序 流程图如下所示 是 开始 密码 进入主菜单 s 3 结束 否 是 否 图 3 1 登录流程图 2 当从主菜单中选择要进行的操作后 分别进入子界面 比如录入信息界面 操作流程图如下所示 15 否 是 开始 选择 1 录入一年级生 选择 2 结束 否 是 录入一年级生返回 图 3 2 录入流程图 4 软件调试分析软件调试分析 4 1 错误分析错误分析 整个的代码编写和程序运行的过程中 我遇到了很多困难 一开始会心烦气躁 不想往下写 但在调试解决了一个个错误之后 我学习到很多东西 主要出现的错 误如下 1 起初对派生类的概念没有搞清楚 基类中的函数无法调用 在将其改为虚函 数之后 问题解决了 2 输入密码验证时 设置最多能登录三次 否则结束运行 但是却出现无法跳 出循环的情况 经过检查后发现 for 语句一直执行返回操作 应在密码验证超过 三次之后加上输出提示 已登录三次 请退出 及结束语句 return 0 3 由于主函数过长 导致 没有划分清楚 结果提示文件没有结束 在添 加之后解决了这一问题 4 最初是在 Word 文档中编写代码 使用了中文的标点符号 到了 VC 无法运 行 认识到 原来任何一个细小的问题都会牵连整个程序 所以任何方面都要仔仔 细细 不能粗心大意 16 4 2 系统特点及缺点系统特点及缺点 系统最终基本实现一个小型学生管理系统的主要要求 它代替了人工作业的复 杂繁琐和易错 体现数字化的方便高效 每一步操作系统都会给出提示 能够记录 学生的重要信息 并及时实现增添 删除 修改 查询等功能 而平均成绩等能自 动计算准确 当输入错误时 系统提示并允许重新更改 凸显了人性化 同时 系统还是暴露了许多缺点 首先 界面不美观 缺乏特点 另外异常处 理效果差 强制退出会导致资料丢失 而网络功能的欠缺 使其只能在单片机上运 行 无法实现资源共享 数据安全仍然没有得到完善的解决 单一的密码识别无法 做到万无一失 用户权限应该有更好的控制措施 这些都需要在今后的运行调试中 去慢慢改进 结合更多的新技术 5 5 结语结语 经过一个月的努力 我的课程设计任务终于完成了 在这次设计中我不但温 故了以前学过的知识 更学到了很多新的知识 对对象这个概念有了比较全面的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时空穿越:地理信息系统(GIS)实践课教案
- 小熊开面馆450字(9篇)
- 个人在线教育平台运营合作
- 技术支持与服务外包合同协议书
- 早教老师专业知识培训课件
- 早教知识培训小结课件
- 农村生物技术合作研发保密协议
- 早教家长基础知识培训课件
- 早恋课件教学课件
- 2025年钳工(技师)职业技能鉴定试卷全真模拟试题
- 山东省临沂市兰山区2022-2023学年小升初数学自主招生备考卷含答案
- 电气设备交接试验方案
- 2023年中国工商银行软件开发中心春季校园招聘500人笔试模拟试题及答案解析
- 地质勘查钻探岩矿心管理通则
- D500-D505 2016年合订本防雷与接地图集
- 北邮社电机拖动与调速技术教学包课后题解
- 社区矫正法课件
- 学校门卫岗位职责及管理制度
- JJG 1105-2015氨气检测仪
- GB/T 8949-2008聚氨酯干法人造革
- GB/T 30544.1-2014纳米科技术语第1部分:核心术语
评论
0/150
提交评论