【C语言】C语言-身份证管理系统(源码+注释)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


系列文章目录


目录

  • 系列文章目录
  • 一、设计要求
      • 代码功能描述
  • 二、设计思路
      • 代码块功能描述
        • 1. 包含标准库头文件
        • 2. 定义结构体和全局变量
        • 3. 添加人员信息
        • 4. 删除人员信息
        • 5. 按年龄查询人员信息
        • 6. 按出生日期查询人员信息
        • 7. 统计某年龄段的人数
        • 8. 保存人员信息到文件
        • 9. 从文件读取人员信息
        • 10. 显示菜单
        • 11. 主函数
  • 三、可视化分析


一、设计要求

代码功能描述

本代码实现了一个简单的人员信息管理系统,能够通过控制台进行人员信息的添加、删除、查询、统计及保存和读取操作。具体功能如下:

  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()
      • 显示操作菜单,用户可以选择不同的功能。
  1. 主函数
    • 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 结构体和相应的功能函数,实现了人员信息的添加、删除、查询、统计、保存和读取功能,并通过菜单引导用户进行操作。


三、可视化分析

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 身份证 ” 获取。👈👈👈


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/793473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java链表LinkedList经典题目

一.LinkedList的方法 首先先看一下链表的方法&#xff1a; 方法解释boolean add(E e)尾插void add(int index, E element)将 e 插入到 index 位置boolean addAll(Collection c)尾插 c 中的元素E remove(int index)删除 index 位置元素boolean remove(Object o)删除遇到的第一…

【7.10更新】Win11 23H2 正式版:22631.3880镜像下载!

微软向Win11 23H2用户推送了七月最新更新补丁KB5040442&#xff0c;系统更新后&#xff0c;版本号将升至22631.3880。本次更新包括了一些安全质量更新&#xff0c;并修复了6月可选更新导致的任务栏无法加载、交互问题&#xff0c;建议大家更新。该版本系统离线制作而成&#xf…

Spring MVC入门2

Postman的使用 接上期我们抛出了一个问题&#xff0c;Postman的使用 可以点击链接下载 https://www.postman.com/downloads/ 安装之后会提示版本升级&#xff0c;直接点击dissmiss即可。 要想发送数据&#xff0c;具体歩奏如下简图&#xff1a; 还有一个更具体的图&#xff…

回归树模型

目录 一、回归树模型vs决策树模型&#xff1a;二、回归树模型的叶结点&#xff1a;三、如何决定每个非叶结点上的特征类型&#xff1a; 本文只介绍回归树模型与决策树模型的区别。如需了解完整的理论&#xff0c;请看链接&#xff1a;决策树模型笔记 一、回归树模型vs决策树模…

jpg图片怎么转成png格式?学会这四种方法,轻松完成图片转换!

jpg图片怎么转成png格式&#xff1f;在数字图像的广袤天地中&#xff0c;JPG与PNG两大格式如同两位各具魅力的艺术家&#xff0c;各自以其独特的风格赢得了人们的喜爱&#xff0c;JPG擅长运用有损压缩的技法&#xff0c;以牺牲部分图像细节为代价&#xff0c;打造出更小巧、更易…

卤味江湖中,周黑鸭究竟该抓住什么赛点?

近年来&#xff0c;卤味江湖的决斗从未停止。 随着休闲卤味、佐餐卤味等细分赛道逐渐形成&#xff0c;“卤味三巨头”&#xff08;周黑鸭、绝味食品、煌上煌&#xff09;的牌桌上有了更多新对手&#xff0c;赛道变挤了&#xff0c;“周黑鸭们”也到了转型关键期。 这个夏天&a…

tableau范围-线图与倾斜图绘制 - 14

范围-线图与倾斜图 1.范围-线图1.1 含义1.2 范围-线图1.2.1 折线图绘制1.2.2 设置计算字段1.2.3 添加详细信息1.2.4 添加参考线1.2.5 结果 2. 倾斜图2.1 含义2.2 倾斜图绘制2.2.1 数据导入2.2.2 创建计算字段2.2.3 排名编辑表计算2.2.4 显示标签2.2.5 标签格式设置2.2.6 修改排…

4.感知机

感知机 ​ 给定输入 x x x&#xff0c;权重 w w w&#xff0c;和偏移 b b b,感知机输出&#xff1a; KaTeX parse error: Unknown column alignment: o at position 16: \begin{array} o̲ \sigma(<w,x>… 或者是二分类&#xff1a;-1或1 Expected node of symbol gro…

【异常】JDK21报错NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member fie

【异常】JDK21报错NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member fie java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field com.sun.tools.javac.tree.JCTree qualid …

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【HMAC(C/C++)】

HMAC(C/C) HMAC是密钥相关的哈希运算消息认证码&#xff08;Hash-based Message Authentication Code&#xff09;&#xff0c;是一种基于Hash函数和密钥进行消息认证的方法。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 生…

Windows netstat命令详解,Windows查看网络连接

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 netstat 常用来…

某客户管理系统Oracle RAC节点异常重启问题详细分析记录

一、故障概述 某日10:58分左右客户管理系统数据库节点1所有实例异常重启&#xff0c;重启后业务恢复正常。经过分析发现&#xff0c;此次实例异常重启的是数据库节点1。 二、故障原因分析 1、数据库日志分析 从节点1的数据库日志来看&#xff0c;10:58:49的时候数据库进程开始…

20240711编译友善之臂的NanoPC-T6开发板的Buildroot

20240711编译友善之臂的NanoPC-T6开发板的Buildroot 2024/7/11 21:02 百度&#xff1a;nanopc t6 wiki https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T6/zh NanoPC-T6/zh 4.4 安装系统 4.4.1 下载固件 4.4.1.1 官方固件 访问此处的下载地址下载固件文件 (位于网盘的&q…

每日刷题(二分图,二分查找,dfs搜索)

目录 1.P3853 [TJOI2007] 路标设置 2.P1129 [ZJOI2007] 矩阵游戏 3.P1330 封锁阳光大学 4.Trees 5.P1141 01迷宫 1.P3853 [TJOI2007] 路标设置 P3853 [TJOI2007] 路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先求出每个路标之间的距离&#xff0c;再二分查找每…

妙笔生词智能写歌词软件:科技赋能艺术还是冲淡原味?

在当今数字化的时代&#xff0c;科技的触角延伸至艺术创作的各个领域&#xff0c;妙笔生词智能写歌词软件便是其中一个引人瞩目的产物。然而&#xff0c;它的出现引发了一场关于科技与艺术关系的深刻思考&#xff1a;究竟是为艺术创作赋予了新的能量&#xff0c;还是在不经意间…

【密码学】哈希函数与加密算法的关系

一、哈希函数的定义 哈希函数&#xff08;Hash Function&#xff09;&#xff0c;也被称为散列函数或杂凑函数&#xff0c; 是一种将任意长度的输入数据&#xff08;通常称为“预映射”或“消息”&#xff09;转换为固定长度输出&#xff08;通常称为“哈希值”、“散列值”、“…

软链接node_modules

公司项目很多微应用的子项目公用同一套模板&#xff0c;也就会使用同一个node_modules 1.先创建3个同样的项目,并安装一个其中的一个node_modules给他丢到外边 2.win r -------> cmd --------> ctrlshift enter(已管理员身份打开cmd) 3.在窗口分别执行以下代码…

医学王者刊!影响因子自创刊只增不减,3区跃升1区,国人发文占比6成!

【SciencePub学术】今天给大家推荐的是一本医学领域的SCI&#xff0c;是1本颇富潜力的国产期刊。影响因子自创刊以来就逐年上涨&#xff0c;凭借自己的努力从中科院3区跃迁至中科院1区&#xff0c;据说很多人已经靠信息差吃上了这本期刊的红利&#xff0c;接下来给大家解析一下…

卷积是如何计算的

使用代码&#xff0c;看卷积是如何计算的。 torch.nn torch.nn.functional srtide 的用法&#xff0c;代表卷积核的步幅 import torch import torch.nn.functional as F # 这个是输入的一个二维矩阵 input torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],…

SpringBoot相关

SpringBoot 1. what springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。 spring项目搭建的缺点&#xff1a; 配置麻烦依赖繁多tomcat启动慢 2 .springboot的特点(why) 自动配置 springboot的自动配置是一个运行时(更准确地说&#xff0c;是应用程…