




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文件管理系统开发案例 学生成绩管理系统的设计 教学目的 了解文件管理系统的设计步骤 将课程的主要知识内容融会贯通于该案例中 变松散的知识点的学习为知识的灵活掌握与应用 分别从结构化层面和面向对象的层面了解抽象思维的设计思想 训练学生的综合设计和调试程序的能力 教学讲解重点 避免原有内容的重复讲解 突出强调难点和易错点的讲解 包括 复杂数据结构的访问层次和语句结构根据函数功能确定函数参数及返回值类型单链表的操作函数中表头指针的变化根据文件操作数据类型和文件的有无选取正确的文件打开方式和文件读写函数 通过代码的不同组织了解不同层次的抽象设计思想 包括函数库 接口 类等概念 进一步区分结构化程序设计过程和面向对象设计中函数的不同使用方式和意义通过代码组织理解文件包含的作用 掌握多文件操作的方法 引导学生思考如何对系统功能的进一步完善和对代码的进一步优化 学生成绩管理系统 设计要求 学生信息以数据文件的形式存放在磁盘中 包括学号 姓名 班级 语文 数学 英语三门课程的成绩 系统对学生信息可以进行各种增 删 改 排序及对文件进行读写等功能 需求分析总体设计详细设计及编码代码组织 编程抽象 一 需求分析能从文件中读入学生记录存于计算机中 同时也能将学生记录保存到磁盘文件 能按不同方式添加新学生记录 能对指定的学生记录进行修改 删除 能按照不同条件查询学生记录能对学生成绩进行统计并显示统计结果可对学生表按条件进行排序可用菜单形式显示系统功能供用户选择 并能从不同功能操作中返回到菜单 二 总体设计 基本流程功能模块设计数据结构设计函数功能描述 1 基本流程 输入模块 实现将数据输入数组或链表查询模块 在数组或链表中实现按不同字段进行查询更新模块 实现对记录的增 删 改 排序等操作统计模块 实现各种统计功能输出模块 实现将处理后的数据写入文件或在屏幕上输出的功能 2 功能模块设计 学生成绩信息结构structstudent charnum 8 charname 20 ints 3 三门课成绩 若通过数组实现 则定义结构数组structstudentstu N N为已定义过的符号常量 若通过单链表实现 则单链表结点结构定义 structnode charnum 8 charname 20 ints 3 structnode next 3 数据结构设计 voiddisplay studentstu intlen 功能 显示长度为len的学生表中存储的学生记录 voidsearch studentstu intlen 功能 在长度为len的学生表中按姓名或学号查找指定的学生记录 intappend studentstu intlen 功能 在长度为len的学生表的末尾添加新的学生记录intdel studentstu intlen 功能 从长度为len的学生表中删除指定学号的学生voidmodify studentstu intlen 功能 修改长度为len的学生表中指定学号的学生记录 4 函数功能描述 数据结构以结构数组为例 voidcount studentstu intlen 功能 对长度为len的学生表按要求进行统计voidsort studentstu intlen 功能 将长度为len的学生表中记录按要求排序voidsave studentstu intlen 功能 将长度为len的学生表中记录保存到文件intreadfile studentstu 功能 将文件中的学生数据读入到学生记录表中 并返回表中的记录数 voidmenu 功能 显示系统提供的可选菜单项voidmain 整个系统的控制部分 三 详细设计及编码 1 主函数的设计 启动程序后 首先从文件中将学生信息读入到结构数组或链表中 然后进入菜单界面供用户选择 根据选择项执行相应的操作 直到退出该管理系统 菜单界面如下 根据前面的基本流程设计出如下的主函数 清屏 原型包含在stdlib h中 voidmain structstudentstu N intlen intchoice charch len readfile stu 调用读文件函数cout choice if choice 0 选择退出 cout ch if ch y ch Y save stu len cout n欢迎再次使用 按任意键退出 endl getchar break 增强交互 switch choice case1 display stu len break case2 search stu len break case3 len append stu len break case4 len del stu len break case5 modify stu len break case6 count stu len break case7 sort stu len break case8 save stu len break default cout n输入错误 按任意键继续 endl getchar 2 menu函数的设计该函数功能很简单 只需在屏幕上按要求显示菜单项 请自行完成设计 3 display函数的设计 分析 遍历长度为len的结构数组stu 输出每个学生的所有信息 注意对结构数组成员的访问层次 尤其是成员本身又为数组的学生成绩 需逐一访问 如第i个学生的第j门课的成绩需表示为 stu i s j 故遍历需双重循环 voiddisplay studentstu intlen inti j if len 0 cout 无记录 按任意键返回 endl getchar return cout 学号 t姓名 t语文 t数学 t英语 t总分 endl for i 0 i len i cout stu i num t stu i name t for j 0 j 3 j cout stu i s j t cout stu i s 0 stu i s 1 stu i s 2 endl cout 按任意键继续 endl getchar 对结构成员本身是数值型数组的访问方式 4 search函数的设计设计思路 在长度为len的学生表中按姓名或学号查找指定的学生记录 因有不同的查询条件 所以需设计二级菜单 分别按学号和姓名查询学生记录 根据查询情况分别输出查询到的学生信息或是未找到的提示 然后返回到上级菜单 该函数的流程如下 voidsearch studentstu intlen intchoice i j charnum 8 name 20 system cls cout choice if choice 1 cout num for i 0 i len i if strcmp stu i num num 0 cout 学号 t姓名 t语文 t数学 t英语 t总分 endl cout stu i num t stu i name t for j 0 j 3 j cout stu i s j t cout stu i s 0 stu i s 1 stu i s 2 endl cout 按任意键继续 endl getchar return cout n未找到该生记录 按任意键继续 n getchar return 字符串比较必须通过此函数 elseif choice 2 cout name for i 0 i len i if strcmp stu i name name 0 cout 学号 t姓名 t语文 t数学 t英语 t总分 endl cout stu i num t stu i name t for j 0 j 3 j cout stu i s j t cout stu i s 0 stu i s 1 stu i s 2 endl cout 按任意键继续 endl getchar return cout n未找到该生记录 按任意键继续 n getchar return else cout n选择错误 按任意键返回 endl getchar 思考 比较按姓名和学号两种方式查询的代码 函数如何优化更简洁 5 append函数的设计设计思路 在学生表中添加新的学生记录 首先输入要添加的学生学号 在原表中查找该学号的记录是否已存在 若已存在 则选择是否重新输入新学生记录 如选择 是 则返回 否则结束函数返回主菜单 若原表中不存在该学号的学生 则继续输入要添加的学生的姓名和三门课的成绩 添加成功后 学生表的实际长度增加1 intappend studentstu intlen inti charnum 8 ch system cls while 1 cout num if strcmp num 0 0 returnlen for i 0 i ch if ch y ch Y else cout 按任意键返回 endl getchar returnlen strcmp stu i num num 0 break if i len 要添加的学生记录不在原表中break strcpy stu len num num cout stu len name cout stu len s 0 cout stu len s 1 cout stu len s 2 returnlen len 思考 该函数的类型为何要定义为int类型 6 del函数的设计设计思路 为简单起见 本例中该函数只考虑按学号删除的情况 实际应用中还可按姓名删除学生记录 本例中该函数的设计思路 若学生表为空表 则做相应的提示 然后退出该函数 若非空 则转 在表中查找待删除学生的学号 若找到 该学生后的所有记录前移一位删除该记录 然后退出该函数 若未找到 则提示该学生不存在 重新输入新学号后 转 继续查找 注意 因该函数会改变学生表的实际长度 所以函数返回值设计为int类型 intdel studentstu intlen inti charnum 8 if len 0 cout num for i 0 i len i if strcmp stu i num num 0 for intj i j len 1 j stu j stu j 1 len cout 删除成功 按任意键返回 endl returnlen cout 该学号的学生不存在 重新输入 endl 结构变量允许整体赋值 7 modify函数的设计设计思路 若学生表为空表 则做相应的提示 然后退出该函数 若非空 则转 在表中查找待修改学生的学号 若找到 输入该学生的新信息 然后退出该函数 若未找到 则提示该学生不存在 重新输入新学号后 转 继续查找 请自行完成代码设计 思考 如果既能按姓名又可按学号删除学生信息 程序如何实现 8 count函数的设计分析 该函数的功能是对学生成绩表的统计 统计的内容可以很多 包括每门课程和总分的最高最低分 包括各分数段的人数等 也适宜设计成二级菜单的形式供用户选择 请大家自行完善 本例中为简单起见 只实现了按分数段统计人数的功能 voidcount studentstu intlen inti j pa pb pc pd pe for i 0 i 90 pa elseif stu j s i 80 pb elseif stu j s i 70 pc elseif stu j s i 60 pd elsepe if i 0 cout 语文 endl elseif i 1 cout 数学 endl elsecout 英语 endl cout t优 pa t良 pb t中 pc t cout 及格 pd t不及格 pe endl cout 按任意键返回 endl getchar 思考 若不在该函数内部输出统计结果 而是通过一个数组参数存放统计结果 该函数如何修改 9 sort函数的设计设计思路 该函数的功能是对学生成绩表按条件排序 排序的条件可以是学号 成绩等 也适宜设计成二级菜单的形式供用户选择 请大家自行完善 本例中为简单起见 只实现了按总分由高到低排序的功能 采用冒泡法进行排序 voidsort studentstu intlen inti j totalf totalb totalf totalb分别代表前后相邻两个学生的总分for i 0 i len 1 i for j 0 j len 1 i j totalf stu j s 0 stu j s 1 stu j s 2 totalb stu j 1 s 0 stu j 1 s 1 stu j 1 s 2 if totalf totalb studentt stu j stu j stu j 1 stu j 1 t display stu len cout 按任意键返回 endl getchar 10 save函数的设计分析 该函数实现的是将存储于结构数组中的学生记录写入磁盘文件的功能 对结构数组适宜选择块读写 函数中注意对文件正确打开与否的判别 对读写成功与否的不同提示等等 voidsave studentstu intlen FILE fp fp fopen c student wb if fp NULL cout0 cout n保存成功 文件中记录数为 len endl cout 按任意键继续 endl getchar else system cls cout 无记录被保存 按任意键继续 n getchar fclose fp 11 readfile函数的设计分析 函数实现从磁盘文件读学生数据到结构数组的功能 对结构数组选择块读写 设计中两个关键点 因学生表的初始长度取决于文件中的记录数 所以读文件的过程中要记录下学生记录的总数 作为函数的返回值提供给其它操作使用 因数据可从文件读也可从键盘输入 所以以读的方式打开一个可能存在也可能不存在的文件应选用 ab 方式 intreadfile studentstu FILE fp inti 0 len fp fopen c student ab if fp NULL cout 无法打开文件student n exit 0 while feof fp if fread 四 代码的组织 1 结构化C层面上的编程抽象函数与接口 定义函数的目的之一是将整个程序分成多个可操作的部分以降低复杂性 接口则是在更高层次上降低复杂性 函数使其调用者将访问需要的一系列步骤组合为一个操作 接口则是使其客户将访问需要的一系列函数实现成一个编程抽象 接口是库和其客户间的边界 提供库和客户间的交流渠道 也是分离二者的屏障 在不显示库的实现细节的情况下 为客户提供有关使用库的信息 使用由库导出定义的任何源文件 只包括其客户需要了解的有关库的信息 只包括函数原型 库代码 client cpp mylib h mylib c 客户文件 接口文件 库文件 managelib h内容 接口文件 structstudent charnum 8 charname 20 ints 3 voiddisplay studentstu intlen voidsearch studentstu intlen intappend studentstu intlen intdel studentstu intlen voidmodify studentstu intlen voidcount studentstu intlen voidsort studentstu intlen voidsave studentstu intlen voidmenu 学生成绩管理系统案例的代码组织 managelib cpp文件 库文件 包括必要的头文件 include managelib h include iostream h include stdio h include stdlib h include string h voiddisplay studentstu intlen inti j if len 0 cout 无记录 按任意键返回 endl getchar return 略 此处略去前面定义的除主函数外的所有函数 运行时将接口文件插入至此 进一步理解文件包含的作用 scoremanage cpp文件内容 客户文件 include iostream h include stdio h include stdlib h include string h include managelib h defineN20voidmain 主函数的具体实现 代码的组织 2 面向对象的编程抽象 定义一个学生成绩管理类scoremanage 将对学生信息管理的操作都作为类的成员函数定义在类体内 组织在文件funlib h 将类成员函数在类体外实现 组织在funlib cpp中 structstudent charnum 8 charname 20 ints 3 接口文件funlib h 包括一个student结构类型和一个成绩管理类scoremanage的定义 classscoremanage private studentstu N intlen public scoremanage studentstu1 intlen1 构造函数 len len1 for inti 0 i len i stu i stu1 i voiddisplay voidsearch voidappend voiddel voidmodify voidcount voidsort voidsave 注意 类的成员函数可直接操作类的成员stu 无需通过参数使用 思考 append函数和del函数的返回值为何为void类型 与前面结构化程序不同 funlib cpp文件 类的成员函数实现 include funlib h voidscoremanage display inti j if len 0 cout 无记录 按任意键返回 endl getchar return cout 学号 t姓名 t语文 t数学 t英语 t总分 endl for i 0 i len i cout stu i num t stu i name t for j 0 j 3 j cout stu i s j t cout stu i s 0 stu i s 1 stu i s 2 endl cout 按任意键继续 endl getchar 其它成员函数实现略 清屏 原型包含在stdlib h中 include funlib h voidmain structstudentstu N intlen i 0 intchoice charch FILE fp fp fopen c student a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025城镇公益性岗位人员招聘26人模拟试卷及1套参考答案详解
- 2025贵州罗甸县第一医共体板庚分院招聘合同制专业技术人员考前自测高频考点模拟试题带答案详解
- 2025湖南株洲市工业中等专业学校招聘第一批高层次人才13人模拟试卷及答案详解(有一套)
- 2025年压裂设备专用件项目合作计划书
- 2025年广元市贵商村镇银行科技人才招聘考前自测高频考点模拟试题及参考答案详解
- 2025年注射剂类药品项目发展计划
- 2025年春季中国诚通控股集团有限公司校园招聘49人考前自测高频考点模拟试题带答案详解
- 广播剧《撒野》课件
- IDO1-IN-27-生命科学试剂-MCE
- 2025黑龙江东北林业大学土木与交通学院派遣人才招聘1人考前自测高频考点模拟试题附答案详解(考试直接用)
- 无人仓库运营成本分析-洞察分析
- 幽门螺杆菌治疗进展
- 集装箱质量检测标准
- 导尿术操作并发症及处理规范
- 水利水电工程单元工程施工质量验收评定表及填表说明
- 人工智能训练师理论知识考核要素细目表四级
- 全国职业院校技能大赛高职组(服装创意设计与工艺赛项)备赛试题库(含答案)
- DL∕T 831-2015 大容量煤粉燃烧锅炉炉膛选型导则
- 金相检验中级试题
- 工业园区环保管家技术方案
- (正式版)QBT 8006-2024 年糕 标准
评论
0/150
提交评论