当前位置:文档之家› 同济大学c++复习文件管理系统开发案例

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


else if(choice==2) { cout<<"输入姓名:"<<endl; cin>>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(); ?思考:比较按姓名和学号两种方 }
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,len);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(); } } }
成绩管理
输入模块
查询模块
更新模块
统计模块 输出模块
文 件 输 入
键 盘 输 入
按 学 号 查 询
按 姓 名 查 询
增 加 记 录
删 除 记 录
修 改 记 录
排 序 记 录
统 计 各 段 人 数
输 出 至 文 件
屏 幕 显 示
系统功能模块图
二、总体设计
基本流程 功能模块设计 数据结构设计
函数功能描述
4、函数功能描述(数据结构以结构数组为例) void display(student stu[],int len) 功能:显示长度为len的学生表中存储的学生记录。 void search(student stu[],int len) 功能:在长度为len的学生表中按姓名或学号查找指 定的学生记录。 int append(student stu[],int len) 功能:在长度为len的学生表的末尾添加新的学生记录 int del(student stu[],int len) 功能:从长度为len的学生表中删除指定学号的学生
同按学号查找过程,略
输出未找到提示
结束
void search(student stu[],int len) { int choice,i,j; char num[8],name[20]; system("cls"); cout<<"1.按学号查询 2.按姓名查询\n"; cout<<"输入查找方式[1,2]:"; cin>>choice; if(choice==1) { cout<<"输入学号:"<<endl; cin>>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 ;
2、menu函数的设计 该函数功能很简单,只需在屏幕上按 要求显示菜单项,请自行完成设计。
3、display函数的设计 分析:
遍历长度为len的结构数组stu,输出每个学生的所 有信息。注意对结构数组成员的访问层次,尤其是 成员本身又为数组的学生成绩,需逐一访问。如第 i个学生的第j门课的成绩需表示为:
5、append函数的设计 设计思路: 在学生表中添加新的学生记录。 ① 首先输入要添加的学生学号,在原表中查找该 学号的记录是否已存在。
② 若已存在,则选择是否重新输入新学生记录, 如选择“是”,则返回①;否则结束函数返回 主菜单。若原表中不存在该学号的学生,则继 续输入要添加的学生的姓名和三门课的成绩。
通过代码组织理解文件包含的作用、掌
握多文件操作的方法。 引导学生思考如何对系统功能的进一步 完善和对代码的进一步优化。
学生成绩管理系统
设计要求:
学生信息以数据文件的形式存放在磁盘 中,包括学号、姓名、班级、语文、数 学、英语三门课程的成绩,系统对学生
信息可以进行各种增、删、改、排序及
对文件进行读写等功能。
需求分析 总体设计
详细设计及编码
代码组织---编程抽象
一、需求分析
能从文件中读入学生记录存于计算机中,同时也能将 学生记录保存到磁盘文件;
能按不同方式添加新学生记录;
能对指定的学生记录进行修改、删除; 能按照不同条件查询学生记录 能对学生成绩进行统计并显示统计结果 可对学生表按条件进行排序 可用菜单形式显示系统功能供用户选择,并能从不同 功能操作中返回到菜单
根据前面的基本流程设计出如下的主函数:
void main() { struct student stu[N]; int len; 增强交互 int choice; char ch; len=readfile(stu); //调用读文件函数 cout<<"按任意键继续"<<endl; 清屏,原型包含 getchar(); 在stdlib.h中 while(1) //注意该循环退出的条件 { system("cls"); //清屏函数 menu(); //调用菜单显示函数 cout<<"选择菜单项(0~8):"; cin>>choice; if(choice==0) //选择退出 { cout<<"\n保存到文件吗?"<<endl; cin>>ch; if(ch=='y'||ch=='Y') save(stu,len); cout<<"\n欢迎再次使用,按任意键退出"<<endl; getchar(); break;
易错点的讲解,包括:
•复杂数据结构的访问层次和语句结构 •根据函数功能确定函数参数及返回值类型 •单链表的操作函数中表头指针的变化 •根据文件操作数据类型和文件的有无选取
正确的文件打开方式和文件读写函数。
通过代码的不同组织了解不同层次的抽 象设计思想,包括函数库、接口、类等概 念,进一步区分结构化程序设计过程和面 向对象设计中函数的不同使用方式和意义
void modify(student stu[],int len) 功能:修改长度为len的学生表中指定学号的学生记录
void count(student stu[],int len) 功能:对长度为len的学生表按要求进行统计 void sort(student stu[],int len) 功能:将长度为len的学生表中记录按要求排序 void save(student stu[],int len) 功能:将长度为len的学生表中记录保存到文件
3、数据结构设计 学生成绩信息结构 struct student { char num[8]; char name[20]; int s[3]; //三门课成绩 } 若通过数组实现,则定义 结构数组 struct student stu[N]; N为已定义过的符号常量 若通过单链表实现,则单 链表结点结构定义: struct node { char num[8]; char name[20]; int s[3]; struct node *next; }
int readfile(student stu[]) 功能:将文件中的学生数据读入到学生记录表中,并返 回表中的记录数。 void menu() 功能:显示系统提供的可选菜单项
void main() 整个系统的控制部分。
三、详细设计及编码
1、主函数的设计: 启动程序后,首先从文件中将学生信息读入到 结构数组或链表中,然后进入菜单界面供用户 选择,根据选择项执行相应的操作,直到退出 该管理系统。菜单界面如下:
相关主题