一、设计要求
代码功能描述
本代码实现了一个简单的人员信息管理系统,能够通过控制台进行人员信息的添加、删除、查询、统计及保存和读取操作。具体功能如下:
1.人员信息结构体定义
- 定义了一个 Person 结构体,包含身份证号 (id)、姓名 (name)、年龄 (age) 和出生日期 (birthdate) 四个字段。
2.全局变量
- Person people[100]:用于存储最多100人的信息。
- int count:当前存储的人员数量。
3.功能实现
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
- 添加人员信息
- void addPerson()
- 提示用户输入人员信息(身份证号、姓名、年龄和出生日期),并将信息存储在全局数组 people 中。
- 删除人员信息
- void deletePerson()
- 提示用户输入要删除的身份证号,查找并删除匹配的人员信息,并将数组中的后续元素前移。
- 按年龄查询人员信息
- void queryByAge()
- 提示用户输入要查询的年龄,遍历数组并输出匹配年龄的人员信息。
- 按出生日期查询人员信息
- void queryByBirthdate()
- 提示用户输入要查询的出生日期,遍历数组并输出匹配出生日期的人员信息。
- 统计某年龄段的人数
- void countByAgeRange()
- 提示用户输入年龄段的最小值和最大值,统计并输出在该年龄段内的人员数量。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
- 保存人员信息到文件
- void saveToFile()
- 将当前存储的所有人员信息保存到文件 people.txt 中。
- 从文件读取人员信息
- void loadFromFile()
- 从文件 people.txt 中读取人员信息,并将其存储在全局数组 people 中。
- 显示菜单
- void showMenu()
- 显示操作菜单,用户可以选择不同的功能。
- 主函数
int main()
- 程序启动时从文件中读取数据。
- 无限循环显示菜单并提示用户选择功能,根据用户的选择调用相应的函数。
- 在退出程序前将当前数据保存到文件中。
根据用户的选择,程序将执行相应的功能,如添加人员信息、删除人员信息、查询人员信息、统计某年龄段人数、保存数据到文件和从文件读取数据等操作。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
二、设计思路
代码块功能描述
1. 包含标准库头文件
#include <stdio.h> // 包含标准输入输出库 #include <stdlib.h> // 包含标准库函数 #include <string.h> // 包含字符串处理函数
- 包含标准库头文件,提供输入输出、内存管理和字符串处理等基本功能。
2. 定义结构体和全局变量
typedef struct { char id[20]; // 身份证号 char name[30]; // 姓名 int age; // 年龄 char birthdate[15]; // 出生日期 } Person; Person people[100]; // 最多存储100人的信息 int count = 0; // 当前人员数量
- 定义
Person
结构体,包含身份证号、姓名、年龄和出生日期。 - 定义全局数组
people
存储最多100人的信息,定义count
记录当前人员数量。
3. 添加人员信息
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
void addPerson() { if (count < 100) { // 此处略去 至少10行代码........ } }
- 检查是否可以添加新人员。
- 提示用户输入新人员的信息并存储到全局数组
people
中。 - 更新人员数量
count
。
4. 删除人员信息
void deletePerson() { char id[20]; printf("请输入要删除的身份证号: "); scanf("%s", id); // 此处略去 至少10行代码........ printf("未找到该身份证号的人员。\n"); }
- 提示用户输入要删除的身份证号。
- 查找匹配的人员信息并删除,将后续元素前移。
- 更新人员数量
count
。
5. 按年龄查询人员信息
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
void queryByAge() { int age; printf("请输入要查询的年龄: "); scanf("%d", &age); // 此处略去 至少10行代码........ }
- 提示用户输入要查询的年龄。
- 遍历数组查找匹配年龄的人员并输出其信息。
6. 按出生日期查询人员信息
void queryByBirthdate() { char birthdate[15]; printf("请输入要查询的出生日期 (YYYY-MM-DD): "); scanf("%s", birthdate); for (int i = 0; i < count; i++) { if (strcmp(people[i].birthdate, birthdate) == 0) { printf("身份证号: %s, 姓名: %s, 年龄: %d, 出生日期: %s\n", people[i].id, people[i].name, people[i].age, people[i].birthdate); } } }
- 提示用户输入要查询的出生日期。
- 遍历数组查找匹配出生日期的人员并输出其信息。
7. 统计某年龄段的人数
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
void countByAgeRange() { int minAge, maxAge, total = 0; printf("请输入年龄段 (最小年龄 最大年龄): "); // 此处略去 至少10行代码........ } printf("年龄段 %d 到 %d 共有 %d 人。\n", minAge, maxAge, total); }
- 提示用户输入年龄段。
- 遍历数组统计在年龄段内的人员数量并输出结果。
8. 保存人员信息到文件
void saveToFile() { FILE *file = fopen("people.txt", "w"); if (file == NULL) { printf("文件打开失败。\n"); return; } // 此处略去 至少10行代码........ printf("人员信息已保存到文件。\n"); }
- 打开文件
people.txt
以写入模式。 - 将人员信息逐行写入文件。
- 关闭文件并提示信息已保存。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
9. 从文件读取人员信息
void loadFromFile() { FILE *file = fopen("people.txt", "r"); if (file == NULL) { // 此处略去 至少10行代码........ fclose(file); printf("人员信息已从文件读取。\n"); }
- 打开文件
people.txt
以读取模式。 - 从文件中逐行读取人员信息并存储到全局数组
people
中。 - 更新人员数量
count
。 - 关闭文件并提示信息已读取。
10. 显示菜单
void showMenu() { printf("请选择功能:\n"); // 此处略去 至少10行代码........ }
- 显示菜单,列出各个功能选项供用户选择。
11. 主函数
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
int main() { int choice; loadFromFile(); // 程序启动时从文件读取数据 while (1) { showMenu(); // 显示菜单 printf("请输入选择: "); scanf("%d", &choice); // 读取用户输入的选择 switch (choice) { // 此处略去 至少20行代码........ default: printf("无效的选择,请重新输入。\n"); // 提示无效选择 } } return 0; // 返回0表示程序正常结束 }
- 程序启动时调用
loadFromFile
从文件读取数据。 - 无限循环显示菜单并提示用户输入选择,根据选择调用相应功能函数。
- 退出前调用
saveToFile
将数据保存到文件。
本程序通过定义 Person
结构体和相应的功能函数,实现了人员信息的添加、删除、查询、统计、保存和读取功能,并通过菜单引导用户进行操作。
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈