同济大学c++复习文件管理系统开发案例讲解

上传人:我** 文档编号:114725390 上传时间:2019-11-12 格式:PPT 页数:53 大小:331KB
返回 下载 相关 举报
同济大学c++复习文件管理系统开发案例讲解_第1页
第1页 / 共53页
同济大学c++复习文件管理系统开发案例讲解_第2页
第2页 / 共53页
同济大学c++复习文件管理系统开发案例讲解_第3页
第3页 / 共53页
同济大学c++复习文件管理系统开发案例讲解_第4页
第4页 / 共53页
同济大学c++复习文件管理系统开发案例讲解_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《同济大学c++复习文件管理系统开发案例讲解》由会员分享,可在线阅读,更多相关《同济大学c++复习文件管理系统开发案例讲解(53页珍藏版)》请在金锄头文库上搜索。

1、文件管理系统开发案例 -学生成绩管理系统 的设计,教学目的: 了解文件管理系统的设计步骤。 将课程的主要知识内容融会贯通于该案例中。变松散的知识点的学习为知识的灵活掌握与应用。 分别从结构化层面和面向对象的层面了解抽象思维的设计思想。 训练学生的综合设计和调试程序的能力。,教学讲解重点: 避免原有内容的重复讲解,突出强调难点和易错点的讲解,包括: 复杂数据结构的访问层次和语句结构 根据函数功能确定函数参数及返回值类型 单链表的操作函数中表头指针的变化 根据文件操作数据类型和文件的有无选取正确的文件打开方式和文件读写函数。,通过代码的不同组织了解不同层次的抽象设计思想,包括函数库、接口、类等概念

2、,进一步区分结构化程序设计过程和面向对象设计中函数的不同使用方式和意义 通过代码组织理解文件包含的作用、掌握多文件操作的方法。 引导学生思考如何对系统功能的进一步完善和对代码的进一步优化。,学生成绩管理系统,设计要求: 学生信息以数据文件的形式存放在磁盘中,包括学号、姓名、班级、语文、数学、英语三门课程的成绩,系统对学生信息可以进行各种增、删、改、排序及对文件进行读写等功能。,需求分析 总体设计 详细设计及编码 代码组织-编程抽象,一、需求分析 能从文件中读入学生记录存于计算机中,同时也能将学生记录保存到磁盘文件; 能按不同方式添加新学生记录; 能对指定的学生记录进行修改、删除; 能按照不同条

3、件查询学生记录 能对学生成绩进行统计并显示统计结果 可对学生表按条件进行排序 可用菜单形式显示系统功能供用户选择,并能从不同功能操作中返回到菜单,二、总体设计,基本流程 功能模块设计 数据结构设计 函数功能描述,1、基本流程,输入模块:实现将数据输入数组或链表 查询模块:在数组或链表中实现按不同字段进行查询 更新模块:实现对记录的增、删、改、排序等操作 统计模块:实现各种统计功能 输出模块:实现将处理后的数据写入文件或在屏幕上输出的功能。,2、功能模块设计,学生成绩信息结构 struct student char num8; char name20; int s3; /三门课成绩 若通过数组实

4、现,则定义 结构数组 struct student stuN; N为已定义过的符号常量,若通过单链表实现,则单链表结点结构定义: struct node char num8; char name20; int s3; struct node *next; ,3、数据结构设计,void display(student stu,int len) 功能:显示长度为len的学生表中存储的学生记录。 void search(student stu,int len) 功能:在长度为len的学生表中按姓名或学号查找指 定的学生记录。 int append(student stu,int len) 功能:在长

5、度为len的学生表的末尾添加新的学生记录 int del(student stu,int len) 功能:从长度为len的学生表中删除指定学号的学生 void modify(student stu,int len) 功能:修改长度为len的学生表中指定学号的学生记录,4、函数功能描述(数据结构以结构数组为例),void count(student stu,int len) 功能:对长度为len的学生表按要求进行统计 void sort(student stu,int len) 功能:将长度为len的学生表中记录按要求排序 void save(student stu,int len) 功能:将长

6、度为len的学生表中记录保存到文件 int readfile(student stu) 功能:将文件中的学生数据读入到学生记录表中,并返回表中的记录数。 void menu() 功能:显示系统提供的可选菜单项 void main() 整个系统的控制部分。,三、详细设计及编码,1、主函数的设计: 启动程序后,首先从文件中将学生信息读入到结构数组或链表中,然后进入菜单界面供用户选择,根据选择项执行相应的操作,直到退出该管理系统。菜单界面如下:,根据前面的基本流程设计出如下的主函数:,清屏,原型包含在stdlib.h中,void main() struct student stuN; int len

7、; int choice; char ch; len=readfile(stu); /调用读文件函数 coutchoice; if(choice=0) /选择退出 coutch; if(ch=y|ch=Y) save(stu,len); cout“n欢迎再次使用,按任意键退出“endl; getchar(); break; ,增强交互,switch(choice) case 1:display(stu,len);break; case 2:search(stu,len);break; case 3:len=append(stu,len);break; case 4:len=del(stu,le

8、n);break; case 5:modify(stu,len);break; case 6:count(stu,len);break; case 7:sort(stu,len);break; case 8:save(stu,len);break; default: cout“n输入错误,按任意键继续“endl; getchar(); ,2、menu函数的设计 该函数功能很简单,只需在屏幕上按要求显示菜单项,请自行完成设计。,3、display函数的设计,分析: 遍历长度为len的结构数组stu,输出每个学生的所有信息。注意对结构数组成员的访问层次,尤其是成员本身又为数组的学生成绩,需逐一访问

9、。如第i个学生的第j门课的成绩需表示为: stui.sj 故遍历需双重循环。,void display(student stu,int len) int i,j; if(len=0) cout“无记录,按任意键返回“endl; getchar(); return; cout“学号t姓名t语文t数学t英语t总分“endl; for(i=0;ilen;i+) coutstui.numtstui.namet; for(j=0;j3;j+) coutstui.sj“t“; coutstui.s0+stui.s1+stui.s2endl; cout“按任意键继续“endl; getchar(); ,对结

10、构成员本身是数值型数组的访问方式,4、search函数的设计 设计思路: 在长度为len的学生表中按姓名或学号查找指定的学生记录,因有不同的查询条件,所以需设计二级菜单,分别按学号和姓名查询学生记录,根据查询情况分别输出查询到的学生信息或是未找到的提示,然后返回到上级菜单。 该函数的流程如下:,void search(student stu,int len) int choice,i,j; char num8,name20; system(“cls“); coutchoice; if(choice=1) coutnum; for(i=0;ilen;i+) if(strcmp(stui.num,

11、num)=0) cout“学号t姓名t语文t数学t英语t总分“endl; coutstui.numtstui.namet; for(j=0;j3;j+) coutstui.sj“t“; coutstui.s0+stui.s1+stui.s2endl; cout“按任意键继续“endl; getchar(); return; cout“n未找到该生记录,按任意键继续n“; getchar(); return ; ,字符串比较必须通过此函数,else if(choice=2) coutname; for(i=0;ilen;i+) if(strcmp(stui.name,name)=0) cout“

12、学号t姓名t语文t数学t英语t总分“endl; coutstui.numtstui.namet; for(j=0;j3;j+) coutstui.sj“t“; coutstui.s0+stui.s1+stui.s2endl; cout“按任意键继续“endl; getchar(); return; cout“n未找到该生记录,按任意键继续n“; getchar(); return; else cout“n选择错误,按任意键返回“endl; getchar(); ,?思考:比较按姓名和学号两种方式查询的代码,函数如何优化更简洁,5、append函数的设计 设计思路: 在学生表中添加新的学生记录。

13、 首先输入要添加的学生学号,在原表中查找该学号的记录是否已存在。 若已存在,则选择是否重新输入新学生记录,如选择“是”,则返回;否则结束函数返回主菜单。若原表中不存在该学号的学生,则继续输入要添加的学生的姓名和三门课的成绩。 添加成功后,学生表的实际长度增加1.,int append(student stu,int len) int i; char num8,ch; system(“cls“); while(1) coutnum; if(strcmp(num,“0“)=0) return len; for(i=0;ich; if(ch=y|ch=Y) ; else cout“按任意键返回“en

14、dl; getchar(); return len; ,strcmp(stui.num,num)=0,break,if(i=len)/要添加的学生记录不在原表中 break; strcpy(stulen.num,num); coutstulen.name; coutstulen.s0; coutstulen.s1; coutstulen.s2; ; return len; ,len+,?思考:该函数的类型为何要定义为int类型,6、del函数的设计 设计思路: 为简单起见,本例中该函数只考虑按学号删除的情况,实际应用中还可按姓名删除学生记录。本例中该函数的设计思路: 若学生表为空表,则做相应的

15、提示,然后退出该函数;若非空,则转 在表中查找待删除学生的学号。 若找到,该学生后的所有记录前移一位删除该记录,然后退出该函数;若未找到,则提示该学生不存在,重新输入新学号后,转继续查找。 注意:因该函数会改变学生表的实际长度,所以函数返回值设计为int 类型。,int del(student stu,int len) int i; char num8; if(len=0) coutnum; for(i=0;ilen;i+) if(strcmp(stui.num,num)=0) for(int j=i;jlen-1;j+) stuj=stuj+1; len-; cout“删除成功,按任意键返回“endl; return len; cout“该学号的学生不存在,重新输入“endl; ,结构变量允许整体赋值,7、modify函数的设计 设计思路: 若学生表为空表,则做相应的提示,然后

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号