文章目录
一、作业要求
1. 问题描述
对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
2. 功能要求
本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。
本系统显示这样的菜单:
-
学生基本信息录入
-
学生基本信息显示
-
学生基本信息保存
-
学生基本信息删除
-
学生基本信息修改(要求先输入密码)
-
学生基本信息查询
-
退出系统
二、问题分析
1.数据结构
(1)学生信息
学生信息包括以下几个数据:学号(char) 、姓名(char) 、性别(char) 、年龄(int) 、备注(char) 。所有数据均不能为空。为了能够把学生信息永久保存下来,需要把数据存放在文件中,采用纯文本文件,扩展名为txt。
(2)数据存放
由于学生的学号、姓名、年龄、性别等数据是有内在联系,同属于一个学生,我们希望把这些数据组成一个组合数据,故考虑使用结构体变量将同一个学生的数据封装。
一个结构体变量可以存放一个学生的一组信息,由于我们需要存放多组学生的基本信息,所以考虑使用结构体数组或者链表。
① 结构体数组
A. 随机访问性强
B. 查找速度快
C. 增删的效率低
D. 空间大小固定,不能动态扩展
② 链表
A. 增删效率高
B. 空间大小不固定,可以动态扩展
C. 访问效率低
综上,考虑到单个班级的档案数据量并不会很大,而需很强的访问能力,故选择使用结构体数组。
(3)储存结构设计
学生信息统一存放在结构体Student_type
所有学生存放在数组Student[SIZE]
(学号、姓名、性别、年龄、备注)
\#define SIZE 200 //数组长度
\#define SID_SIZE 15 //学号
\#define NAME_SIZE 20 //姓名
\#define SEX_SIZE 10 //性别
\#define AGE_SIZE 10 //年龄
\#define DESC_SIZE 50 //描述
struct Student_type
{
char sid[SID_SIZE]; //学号
char name[NAME_SIZE]; //姓名
char sex[SEX_SIZE]; //性别
char age[AGE_SIZE]; //年龄
char desc[DESC_SIZE]; //备注
}Student[SIZE];
以上数据均声明为全局变量。
2.模块划分
系统在总体上分为三个模块:主控模块、学生基本信息维护模块、学生基本信息浏览模块。
(1) 主控模块:主要负责打印菜单、指令执行状态的显示以及实现返回机制等用户操作逻辑的维护。
(2) 学生基本信息维护模块:主要实现录入、删除、修改、保存四个功能。
(3) 学生基本信息浏览模块:主要实现显示和查询这两个功能。
3.模块功能分析
(1)主控模块——用户操作逻辑分析
① 为便于用户操作,当指令选项有多种时,提供菜单,并对指令选项进行编码。
② 提供返回机制。当用户选择某一指令、错选非法指令或指令执行失败时,系统返回相应信息,并提供下一步执行方案:
a. 用户选择某一指令后,系统返回执行状态信息;
b. 用户错选非法指令时,系统返回警告信息,并提供重试指令;
c. 指令执行失败时,系统返回执行失败信息,并提供再次执行和返回菜单两种指令。
③ 在主菜单中提供清屏指令,用户选择执行清屏指令后,系统再次打印主菜单。
④ 在删除、退出等指令之后提示是否确认指令,可取消执行此类指令。
⑤ 在每一项输入前提示用户需要输入的信息,以及输入限制。
(2)学生基本信息维护模块
①学生基本信息录入
A. 要求用户先输入学生数量n,再输入学生信息。学生信息存在限制:
a. 学生学号长度为10,只能为数字;
b. 学生姓名长度限制在20以内;
c. 学生性别只能为“男”或“女”;
d. 学生年龄限制在1~100之间;
e. 备注长度限制在20以内。
B. 所接收的数据先与原有数据对比,规定学号唯一,学号重复的学生信 息提示已存在,学号不重复则接收,全部n个学生录入完毕后自动 保存。
C. 建立录入异常处理机制。
②学生基本信息删除
A. 考虑到实际班级档案的数据量不会过于庞大,删除功能使用不多,此 处只提供单个删除功能。
B. 要求用户先输入所删除学生的学号,然后系统在原有数据中搜索是否 存在学号:
a. 存在,则系统打印出该学生基本信息,提供是否确认删除指令;
b. 不存在,系统提示该学生不存在,提供继续删除和返回菜单两项 指令。
C. 删除完成后自动保存。
③学生基本信息修改(先输入密码)
A. 用户选择该功能后,提供输入密码和修改密码两项指令。
B. 考虑到密码设置问题,提供修改密码功能,初始密码为“123456”。
选择输入密码(密码不回显),正确后方可进入修改功能页面,否则 提示密码错误,请重试,错误3次后系统自动关闭。
C. 要求用户先输入学生的学号,查找是否存在该学生。存在则打印出该 学生的基本信息,不存在则给出提示,并提供继续修改和返回菜单 两项指令。
D. 按学号查找后,提供修改学号、姓名、性别、年龄、备注五项选择。
E. 修改完成后自动保存。
④学生基本信息保存
A. 操作过程中数据更新保存在内存,在系统退出或者用户要求保存时将 内存中的数据保存到文件中。
(3)学生基本信息浏览模块
①学生基本信息显示
A. 将所有学生信息按照添加的先后顺序全部显示出来。
B. 显示完毕后返回主菜单。
②学生基本信息查询
A. 提供按学号、姓名、性别、年龄、备注五项查找指令。
B. 要求用户先输入所查询学生的学号,系统根据学号搜索是否存在相应 数据,存在则显示出该学生的所有基本信息,不存在则给出提示,并提供继续搜索和返回菜单两项指令。
4.系统总体业务流程
三、命令编码
功能 | 命令编码 | |
---|---|---|
学生基本信息录入 | 1 | |
学生基本信息删除 | 2 | |
学生基本信息修改 | 3 | |
班级档案管理系统 | 学生基本信息查询 | 4 |
学生基本信息显示 | 5 | |
学生基本信息保存 | 6 | |
清理屏幕 | 7 | |
退出系统 | 8 |
四、模块功能与函数说明
1.主控模块
序号 | 功能 | 函数 |
---|---|---|
1 | 打印菜单 | void print_menu(); |
2 | 读入命令 | void get_command(); |
3 | 回车键返回菜单 | void carriage_back(); |
4 | 将文件中的数据读到结构体数组中 | int load_out(); |
5 | 判断是否存在所查找的学生 | int is_found(char id[SID_SIZE]); |
2.学生信息维护模块
序号 | 功能 | 函数 |
---|---|---|
1 | 学生基本信息录入 | void input_information(); |
2 | 学生基本信息删除 | void delete_information(); |
3 | 学生基本信息修改(需密码) | void change_information(); |
4 | 学生基本信息保存 | void save_information(); |
3.学生信息浏览模块
序号 | 功能 | 函数 |
---|---|---|
1 | 学生基本信息查询 | void invest_information(); |
2 | 学生基本信息显示 | void output_information(); |
4.文件结构设计
序号 | 文件 | 说明 |
---|---|---|
1 | main.c | 主函数 |
2 | headers.h | 声明函数 |
3 | data.h | 全局变量 |
4 | master_control.c | 主控模块函数实现 |
5 | information_maintenance.c | 学生基本信息维护函数实现 |
6 | information_browse.c | 学生基本信息浏览函数实现 |
五、总结
通过此次课程设计,使我真正地明白了设计的重要性,没有设计空谈实现无异于空中建楼。做好设计是做出一个好的程序的核心。在设计过程中,要学会运用“先总后分再总”的思想,从整体上入手,搭建程序整体架构,而后再逐渐细化,逐步实现功能。
六、源码
链接:https://pan.baidu.com/s/1WN_LB2tzLki2YLorXpuCpg?pwd=6666
提取码:6666
注:
- 代码基本功能齐全,部分辅助功能未完善(录入异常未检查)
- 文件写入读出函数的位置,数据存储的文件位置需要根据自己的需要进行更改