【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 结构体和相应的功能函数,实现了人员信息的添加、删除、查询、统计、保存和读取功能,并通过菜单引导用户进行操作。


三、可视化分析

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于.NETCORE站点程序部署到nginx上无法访问静态文件和无法正确生成文件的问题解决过程。

我的netcore6项目&#xff0c;部署到IIS的时候&#xff0c;生成报告时&#xff0c;需要获取公司LOGO图片放到PDF报告文件中&#xff0c;这时候访问静态图片没有问题。 然后还有生成邀请二维码图片&#xff0c;这时候动态创建图片路径和图片也没有问题&#xff0c;可以在站点的…

Python爬虫教程第4篇-使用BeautifulSoup解析html

文章目录 Beautiful Soup简介安装Beautiful Soup快速开始如何使用Beautiful Soup中的对象TagNameAttributes多值属性 NavigableStringBeautifulSoupComment 遍历文档树子节点tag名字.contents 和 .children.descendants.strings 和 stripped_strings 父节点.parent.parents 兄弟…

git批量删除本地包含某字符串的特定分支

git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删…

JavaScript(9)——作用域的一些问题

如果在函数内部&#xff0c;变量没有声明直接赋值&#xff0c;也会当做全局变量看。强烈不推荐&#xff01;&#xff01; function op() {num 80}op()console.log(num) 在不同作用域下&#xff0c;可能存在变量命名冲突的情况&#xff1a; let num 10 function fn(){let num…

Spring-Spring、IoC、DI、注解开发

1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点&#xff1a; Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合&#xff0c;实现各个层之间的解耦&#xff0c;让我们更专注于业务…

5G中的RedCap

5G中的RedCap&#xff1a;降低能力的重要性和实现方式 随着5G技术的推广和普及&#xff0c;设备和终端的多样化使得网络能力的管理变得更加复杂和关键。RedCap&#xff08;Reduced Capability&#xff09;作为一个重要的概念&#xff0c;旨在解决设备能力差异对网络服务和用户…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十三章 Linux连接档

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

前台线程和后台线程(了解篇)

在多线程编程中&#xff0c;理解线程的不同类型对于编写高效、稳定的程序至关重要。特别地&#xff0c;前台线程&#xff08;Foreground Threads&#xff09;与后台线程&#xff08;Background Threads&#xff09;在行为上有着根本的区别&#xff0c;这些区别直接影响到程序的…

jdevelope安装

准备 1.jdk1.8&#xff08;已经安装不做记录&#xff09; 2.下载jdevelope安装包 3.安装包安装jdevelope开发工具 4.创建或导入项目 下载jdevelope安装包 官网下载地址&#xff1a;https://edelivery.oracle.com 安装包安装jdevelope开发工具 cmd管理员权限运行安装脚本…

【栈和队列OJ题】

栈和队列OJ题 文章目录 栈和队列OJ题1. 用队列实现栈2. 用栈实现队列3. 括号匹配问题4. 循环队列 1. 用队列实现栈 OJ链接&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 好的&#xff0c;我们一起来看一下题目&#xff0c;题目是这样说的 思路&…

2024年06月CCF-GESP编程能力等级认证C++编程三级真题解析

本文收录于专栏《C等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里。订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&…

天润融通引领客服革新,AI大模型助力品牌服务升级

AI时代&#xff0c;消费零售品牌的客户服务应该怎么做&#xff1f; 如今消费者的关注点已经越来越复杂&#xff0c;一条毛巾&#xff0c;关注点就可以包括&#xff1a; 是否婴幼儿可用&#xff0c;是否儿童成人可用&#xff1b;是否可以直接接触皮肤&#xff1b;是否无甲醛、…

张量笔记(4):张量网络

张量分解通常是将高维张量分解成一系列较低维的张量&#xff0c;表示能力相对较低。而张量网络可以表示复杂的高维数据结构&#xff0c;通过连接多个张量形成网络结构&#xff0c;可以更灵活地表示和处理复杂的数据关系。本节主要介绍HT和TT网络。 2.5.1 HT分解——首先我们引入…

一篇文章解锁vue2

本文章对标vue2笔记内容&#xff0c;欢迎补充 文章目录 Vue介绍Vue2的生命周期生命周期钩子 使用vue/cli&#xff08;脚手架&#xff09;创建项目工程组件属性refpropsmixinplugins插件 数组更新检测&#xff08;会改变原数组&#xff09;添加/修改响应式布局vue内置指令自定义…

可道云teamOS,用个人标签和公共标签,文件分类更多样

在信息爆炸的时代&#xff0c;我们每天都在与海量的数据和信息打交道。如何在这些纷繁复杂的信息中快速找到我们需要的&#xff0c;成为了摆在我们面前的一大难题。 为大家介绍一下可道云teamOS个人标签和公共标签功能&#xff0c;让信息的整理与搜索变得简单高效。 一、个人…

MySQL 面试相关问题

写在前面&#xff1a; 不喜勿喷&#xff0c;暴躁作者又不求你给钱【没办法&#xff0c;遇见的狗喷子太多了&#x1f436;】欢迎大家在评论区留言&#xff0c;指正文章中的信息错误有一些其他相关的问题&#xff0c;可以直接评论区留言&#xff0c;作者看到会及时更新到文章末尾…

【thingsbord源码编译】 显示node内存不足

编译thingsbord显示报错 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory问题原因分析 重新安装java版本 编译通过

基于React 实现井字棋

一、简介 这篇文章会基于React 实现井字棋小游戏功能。 二、效果演示 三、技术实现 import {useEffect, useState} from "react";export default (props) > {return <Board/> }const Board () > {let initialState [[, , ], [, , ], [, , ]];const [s…

yolov8、RTDETR无法使用多个GPU训练

yolov8、RTDETR无法使用多个GPU训练 网上看了好多解决方法&#xff1a; 什么命令行 CUDA_VISIBLE_DEVICES0,1 python train.py 环境变量都不行 最后找到解决方案&#xff1a;在ultralytics/engine/trainer.py 中的第246行 将 self.model DDP(self.model, device_ids[RANK])…

OWASP ZAP

OWASP ZAP简介 开放式Web应用程序安全项目&#xff08;OWASP&#xff0c;Open Web Application Security Project&#xff09;是一个组织&#xff0c;它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。ZAP则是OWASP里的工具类项目&#xff0c;也是旗舰项目&a…