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

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

一、设计要求

代码功能描述

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


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


三、可视化分析

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



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



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





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

相关文章
|
2月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
303 9
|
2月前
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
69 4
|
2月前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
1月前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
129 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
1月前
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
59 12
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
67 1
|
2月前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
125 1
|
2月前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
130 16
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
174 7
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
145 8

热门文章

最新文章