




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文件管理系统开发(kif)案例 -学生成绩管理系统 的设计共四十八页教学目的:了解文件管理系统的设计步骤。将课程(kchng)的主要知识内容融会贯通于该案例中。变松散的知识点的学习为知识的灵活掌握与应用。分别从结构化层面和面向对象的层面了解抽象思维的设计思想。训练学生的综合设计和调试程序的能力。共四十八页教学讲解重点:避免原有内容的重复讲解,突出强调难点和易错点的讲解,包括:复杂数据结构的访问层次和语句结构根据函数功能确定函数参数及返回值类型单链表的操作函数中表头指针的变化根据文件操作数据类型和文件的有无选取(xunq)正确的文件打开方式和文件读写函数。共四十八页通过代码的不同组织了解(lio
2、ji)不同层次的抽象设计思想,包括函数库、接口、类等概念,进一步区分结构化程序设计过程和面向对象设计中函数的不同使用方式和意义通过代码组织理解文件包含的作用、掌握多文件操作的方法。引导学生思考如何对系统功能的进一步完善和对代码的进一步优化。共四十八页学生(xu sheng)成绩管理系统设计要求:学生信息以数据文件的形式存放在磁盘中,包括学号、姓名(xngmng)、语文、数学、英语三门课程的成绩,系统对学生信息可以进行各种增、删、改、排序及对文件进行读写等功能。共四十八页需求分析总体设计详细设计及编码(bin m)代码组织-编程抽象共四十八页能从文件中读入学生记录存于计算机中,同时(tngsh)
3、也能将学生记录保存到磁盘文件;能按不同方式添加(tin ji)新学生记录;一、需求分析能对指定的学生记录进行修改、删除;能按照不同条件查询学生记录可对学生表按条件进行排序可用菜单形式显示系统功能供用户选择,并能从不同功能操作中返回到菜单能对学生成绩进行统计并显示统计结果共四十八页成绩管理更新模块输入模块查询模块统计模块输出模块文件输入键盘输入按学号查询按姓名查询增加记录删除记录修改记录排序记录输出至文件屏幕显示统计各段人数系统功能模块图共四十八页二、总体设计基本流程(lichng)功能模块设计数据结构设计函数功能描述共四十八页开始打开文件读文件并存入数组或链表调用菜单函数选择菜单操作退出系统吗
4、调用相应函数完成相应操作存盘否调用存盘函数结束否是否是1、基本(jbn)流程共四十八页输入模块:实现将数据输入数组或链表查询模块:在数组或链表中实现按不同字段进行查询更新模块:实现对记录的增、删、改、排序等操作统计模块:实现各种统计功能输出模块:实现将处理后的数据写入文件(wnjin)或在屏幕上输出的功能。2、功能模块设计(shj)共四十八页学生成绩(chngj)信息结构struct student char num8; char name20; int s3; /三门课成绩若通过数组实现,则定义结构数组struct student stuN;N为已定义过的符号常量若通过单链表实现(shxin
5、),则单链表结点结构定义:struct node char num8; char name20; int s3; struct node *next;3、数据结构设计共四十八页 display( ) 功能:显示长度为len的学生表中存储的学生记录。 search( ) 功能:在长度为len的学生表中按姓名或学号查找指定的学生记录。 append( ) 功能:在长度为len的学生表的末尾添加新的学生记录 del( ) 功能:从长度为len的学生表中删除(shnch)指定学号的学生 modify(student stu,int len) 功能:修改长度为len的学生表中指定学号的学生记录4、函数功
6、能描述(数据结构(sh j ji u)以结构数组为例)voidstudent stu,int lenvoidstudent stu,int lenintstudent stu,int lenintstudent stu,int lenvoid共四十八页void count(student stu,int len) 功能:对长度为len的学生表按要求(yoqi)进行统计void sort(student stu,int len) 功能:将长度为len的学生表中记录按要求排序void save(student stu,int len) 功能:将长度为len的学生表中记录保存到文件 readfile
7、( ) 功能:将文件中的学生数据读入到学生记录表中,并返回表中的记录数。void menu() 功能:显示系统提供的可选菜单项void main()整个系统的控制部分。intstudent stu共四十八页三、详细(xingx)设计及编码1、主函数的设计:启动程序后,首先从文件中将学生信息读入到结构数组或链表中,然后进入菜单界面供用户选择,根据选择项执行相应的操作,直到(zhdo)退出该管理系统。菜单界面如下:根据前面的基本流程设计出如下的主函数:共四十八页清屏,原型(yunxng)包含在stdlib.h中 int main()struct student stuN;int len;int c
8、hoice;char ch;len= ; /调用读文件函数cout按任意键继续endl;getch();while(1) /注意该循环退出的条件 system(cls); /清屏函数 menu(); /调用菜单显示函数 coutchoice; if(choice=0) /选择退出 coutn保存到文件吗?ch;if(ch=y|ch=Y) save(stu,len);coutn欢迎再次(zi c)使用,按任意键退出endl;getch(); break; 增强交互,要求头文件conio.h暂停程序,直到输入任意一字符readfile(stu)共四十八页 switch(choice) case 1
9、:display(stu,len);break; case 2:search(stu,len);break; case 3: ;break;/添加记录 case 4: ;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:coutn输入错误(cuw),按任意键继续endl;getch(); system( pause ); return 0; len=append(stu,len
10、)len=del(stu,len)共四十八页2、menu函数的设计该函数功能很简单,只需在屏幕上按要求(yoqi)显示菜单项,请自行完成设计。3、display函数(hnsh)的设计分析:遍历长度为len的结构数组stu,输出每个学生的所有信息。注意对结构数组成员的访问层次,尤其是成员本身又为数组的学生成绩,需逐一访问。如第i个学生的第j门课的成绩需表示为:stui.sj故遍历需双重循环。请自行完成代码设计。共四十八页4、search函数的设计设计思路:在长度为len的学生表中按姓名或学号查找指定的学生记录,因有不同的查询条件,所以需设计二级菜单,分别按学号和姓名查询学生记录,根据查询情况分别
11、输出查询到的学生信息或是未找到的提示,然后返回到上级菜单。该函数的流程(lichng)如下:共四十八页开始选择查找方式按学号?选择错误否按姓名?否输入待查学号最后一个学生?是取第一个学生比较找到否?否否取下一个学生比较找到否?是输出未找到提示否输出找到的记录是结束同按学号查找过程,略是共四十八页void search(student stu,int len) int choice,i,j; char num8,name20; system(cls); cout1.按学号查询 2.按姓名(xngmng)查询n; coutchoice; if(choice=1) cout输入学号:num; for
12、(i=0;ilen;i+) if( ) cout学号t姓名t语文t数学t英语t总分endl; t; for(j=0;j3;j+) coutstui.sjt; coutstui.s0+stui.s1+stui.s2endl; cout按任意键继续endl; getch(); return;coutn未找到该生记录,按任意键继续n;getch(); return ; 字符串比较必须通过(tnggu)此函数strcmp(stui.num,num)=0共四十八页 else if(choice=2) cout输入姓名:name; for(i=0;ilen;i+
13、) if(strcmp(,name)=0) cout学号t姓名t语文t数学t英语t总分endl; t; for(j=0;j3;j+)coutstui.sjt; coutstui.s0+stui.s1+stui.s2endl; cout按任意键继续endl; getch(); return;coutn未找到该生记录,按任意键继续n;getch(); return; else coutn选择错误(cuw),按任意键返回endl; getch(); ?思考(sko):比较按姓名和学号两种方式查询的代码,函数如何优化更简洁共四十八页5、ap
14、pend函数的设计设计思路:在学生表中添加新的学生记录。首先输入要添加的学生学号,在原表中查找该学号的记录是否已存在。若已存在,则选择是否重新输入新学生记录,如选择“是”,则返回;否则结束函数返回主菜单。若原表中不存在该学号的学生,则继续输入要添加的学生的姓名(xngmng)和三门课的成绩。添加成功后,学生表的实际长度增加1.根据上述设计思路,请自行完成如下形式的函数设计int append(student stu,int len)?思考(sko):该函数的类型为何要定义为int类型共四十八页6、del函数的设计设计思路:为简单起见,本例中该函数只考虑按学号删除的情况,实际应用中还可按姓名删除
15、学生记录。本例中该函数的设计思路:若学生表为空表,则做相应的提示,然后退出该函数;若非空,则转在表中查找待删除学生的学号。若找到,该学生后的所有记录前移一位删除该记录,然后退出该函数;若未找到,则提示该学生不存在,重新输入新学号后,转继续查找。根据上述设计思路,请自行完成(wn chng)如下形式的函数设计int del(student stu,int len)共四十八页7、modify函数的设计设计思路(sl):若学生表为空表,则做相应的提示,然后退出该函数;若非空,则转在表中查找待修改学生的学号。若找到,输入该学生的新信息,然后退出该函数;若未找到,则提示该学生不存在,重新输入新学号后,转
16、继续查找。请自行(zxng)完成代码设计共四十八页8、count函数的设计分析:该函数的功能是对学生成绩表的统计(tngj),统计(tngj)的内容可以很多,包括每门课程和总分的最高最低分、包括各分数段的人数等,也适宜设计成二级菜单的形式供用户选择,请大家自行完善。共四十八页9、sort函数的设计设计思路:该函数的功能是对学生成绩表按条件排序,排序的条件可以是学号、成绩等,也适宜设计成二级菜单的形式供用户选择。设计程序时注意如下内容:若按学号等字符串类型的成员(chngyun)排序的话,注意比较的方法要通过strcmp函数实现,而不能直接用关系比较运算比较此类成员交换元素时结构变量允许整体赋值
17、,无需逐个成员交换共四十八页10、save函数的设计分析:该函数实现的是将存储于结构数组中的学生记录写入磁盘(c pn)文件的功能。对结构数组适宜选择块读写。函数中注意对文件正确打开与否的判别、对读写成功与否的不同提示等等。代码请自行设计。共四十八页11、readfile函数的设计分析:函数实现从磁盘文件读学生数据到结构数组的功能。对结构数组选择块读写。设计中两个关键点:因学生表的初始长度取决于文件中的记录数,所以读文件的过程中要记录下学生记录的总数,作为(zuwi)函数的返回值提供给其它操作使用。因数据可从文件读也可从键盘输入,所以以读的方式打开一个可能存在也可能不存在的文件应选用“ab+”
18、方式。共四十八页int readfile(student stu) FILE *fp; int i=0,len; fp=fopen(c:student,ab+ ); if(fp=NULL) cout无法打开(d ki)文件 studentn;exit(0); while(!feof(fp) if(fread(&stui,sizeof(student),1,fp)=1)i+; len=i; fclose(fp); cout文件中学生记录数为:lenendl; return len;共四十八页四、代码的组织(1) -结构化C层面上的编程抽象函数与接口:定义函数的目的之一是将整个程序分成多个可操作的
19、部分以降低(jingd)复杂性;接口则是在更高层次上降低(jingd)复杂性。函数使其调用者将访问需要的一系列步骤组合为一个操作;接口则是使其客户将访问需要的一系列函数实现成一个编程抽象。共四十八页接口是库和其客户间的边界,提供库和客户间的交流渠道,也是分离二者的屏障;在不显示库的实现细节的情况(qngkung)下,为客户提供有关使用库的信息。使用(shyng)库文件的源文件只包括其客户需要了解的有关库的信息(只包括函数原型)库代码client.cppmylib.hmylib.cpp客户文件接口文件库文件共四十八页managelib.h内容(接口(ji ku)文件)struct student
20、char num8;char name20;int s3;void display(student stu,int len);void search(student stu,int len);int append(student stu,int len);学生成绩管理系统案例(n l)的代码组织 共四十八页managelib.cpp文件(库文件,包括必要的头文件)#include managelib.hvoid display(student stu,int len) int i,j; if(len=0) cout无记录,按任意键返回(fnhu)endl; getch(); return; (
21、略)此处略去前面定义的除主函数外的所有函数运行时将接口(ji ku)文件插入至此,进一步理解文件包含的作用共四十八页scoremanage.cpp文件内容(客户文件)#include managelib.h#define N 20int main() /主函数的具体(jt)实现 共四十八页代码(di m)的组织(2) -面向对象的编程抽象定义一个(y )学生成绩管理类scoremanage,将对学生信息管理的操作都作为类的成员函数定义在类体内,组织在文件funlib.h。将类成员函数在类体外实现,组织在funlib.cpp中。共四十八页struct student char num8; cha
22、r name20; int s3;接口(ji ku)文件funlib.h包括一个student结构类型和一个成绩(chngj)管理类scoremanage的定义共四十八页class scoremanage private :student stuN;int len; public:scoremanage(student stu1,int len1)/构造函数len=len1;for(int i=0;ilen;i+)stui=stu1i;void display( );void search( );void append( ); ;注意(zh y):类的成员函数可直接操作类的成员stu,无需通过
23、参数使用。思考:append函数和del函数的返回值为何为void类型(lixng),与前面结构化程序不同?共四十八页funlib.cpp文件(类的成员(chngyun)函数实现)#include funlib.hvoid scoremanage:display( ) int i,j; if(len=0) cout无记录,按任意键返回(fnhu)endl; getch(); return; / 输出信息的语句略去其它成员函数实现略成员函数类体外实现类成员,无需也不能重定义共四十八页#include funlib.hint main()struct student stuN;int len,i=
24、0; /通过读文件(wnjin)获取stu内容和记录个数len scoremanage sm(stu,len); 客户(k h)文件manmain.cpp创建scoremanage类对象,自动调用构造函数注意对类对象成员函数调用的方法有别于结构化,如:sm.display();面向对象方法的代码实现请自行完成共四十八页五、应用案例1、手机通讯录管理系统该系统模拟手机通讯录管理系统,实现对手机中的通讯录进行管理 ,基本功能包括:查看功能:具有按类别(libi)查看功能(如朋友、同事、亲人等),当选中某类时,显示出此类所有数据中的姓名和电话号码。添加数据功能:能录入新数据, 包括:姓名,电话号码、
25、分类、电子邮件;当录入重复的姓名和电话号码时,则提示数据录入重复并取消录入;录入的新数据能按递增的顺序自动加入通讯录。共四十八页主界面显示添加修改查询删除按顺序显示按姓名修改按类别查询修改功能:选中某个人的姓名时,可对此人的相应数据进行(jnxng)修改。删除功能:选中某个人的姓名时,可对此人的相应数据进行删除。共四十八页2、火车票售票管理系统该系统(xtng)模拟火车票售票系统(xtng),相关信息如下:车次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数(rn sh)K487 8:18 重庆北 成都东 3:14 700 330K577 11:56 重庆北 成都东 5:06 700 223从数据文件中读入车次信息,系统具有功能如下:录入功能:录入车次信息,可不定时地增加车次数据,并将数据重新保存到文件中共四十八页浏览功能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB32/T 3834-2020水利工程螺杆式启闭机检修技术规程
- DB32/T 3772-2020河蟹与南美白对虾池塘双主养技术规范
- DB32/T 3761.58-2022新型冠状病毒肺炎疫情防控技术规范第58部分:防控区域划分
- DB32/T 3761.39-2021新型冠状病毒肺炎疫情防控技术规范第39部分:超声医学工作场所
- DB32/T 3761.20-2020新型冠状病毒肺炎疫情防控技术规范第20部分:医疗废物处置机构
- DB32/T 3657-2019荷叶离褶伞(鹿茸菇)工厂化生产技术规程
- DB32/T 2197-2022水文自动测报系统数据传输规约
- DB31/T 932-2015粉煤灰在混凝土中应用技术规程
- DB31/T 705-2013普通级实验用羊的病原监测
- DB31/T 680.10-2022城市公共用水定额及其计算方法第10部分:城市轨道交通
- 二级公立医院绩效考核三级手术目录(2020版)
- 2023年辽宁省普通高等学校招生录取普通类本科批(物理学科类)投档最低分
- 电装 集团禁限用工艺-2013版
- 燃气行业数字化转型与智能化
- VDA6.3检查要求与证据清单(VDA6.3检查表)
- 牙周检查记录表
- 外墙涂料吊篮施工方案
- 《新时代劳动教育》新时代劳动价值观
- 山东紫薇种质资源调查报告
- 2023年医疗招聘技术类-影像医学与核医学考试历年真题集锦附答案
- “循环经济关键技术与装备”重点专项2023年度项目申报指南
评论
0/150
提交评论