模拟一个公民身份证信息管理系统。通过读入文件数据,可以查询每个公民的身份证信息等。同时可以进行身份证校验,并将正确的信息保存至指定文件中。程序开始时,自动从文件读入信息到结构体数组,并提取每个公民的出生年月放入结构体中,同时进行身份证校验位是否正确,判断信息也放入结构体中。写一个实现 2 个日期比较大小的函数:其中参数birth1和birth2存放2个生日的结构体变量,如果 birth1晚于 birth2,函数返回正数, 如果 birth1等于 birth2,函数返回 0, 如果 birth1早于 birth2,函数返回负数。

时间: 2024-04-21 18:29:55 浏览: 16
好的,我会为您模拟一个公民身份证信息管理系统,并编写比较两个日期大小的函数。以下是代码实现: ```python #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 100 // 身份证信息结构体 typedef struct { char name[MAX_LEN]; // 姓名 char id[MAX_LEN]; // 身份证号码 int year; // 出生年份 int month; // 出生月份 int day; // 出生日期 int sex; // 性别:0-女性,1-男性 int valid; // 是否有效:0-无效,1-有效 } IDInfo; // 校验身份证号码是否合法 int checkID(char* id) { int i, sum = 0, ai, wi; char ch; int weights[18] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1}; char codes[11] = "10X98765432"; for (i = 0; i < 17; i++) { ch = id[i]; if (ch < '0' || ch > '9') { return 0; } ai = ch - '0'; wi = weights[i]; sum += ai * wi; } int mod = sum % 11; char code = codes[mod]; return (code == id[17]); } // 读取身份证信息并进行校验 void readIDInfo(IDInfo* pInfo, int n) { FILE* fp = fopen("id_info.txt", "r"); if (!fp) { printf("Failed to open file: id_info.txt\n"); exit(1); } int i; for (i = 0; i < n; i++) { fscanf(fp, "%s %s", pInfo[i].name, pInfo[i].id); if (checkID(pInfo[i].id)) { pInfo[i].valid = 1; int year = (pInfo[i].id[6] - '0') * 1000 + (pInfo[i].id[7] - '0') * 100 + (pInfo[i].id[8] - '0') * 10 + (pInfo[i].id[9] - '0'); int month = (pInfo[i].id[10] - '0') * 10 + (pInfo[i].id[11] - '0'); int day = (pInfo[i].id[12] - '0') * 10 + (pInfo[i].id[13] - '0'); pInfo[i].year = year; pInfo[i].month = month; pInfo[i].day = day; pInfo[i].sex = (pInfo[i].id[16] - '0') % 2; } else { pInfo[i].valid = 0; } } fclose(fp); } // 比较两个日期大小,如果 birth1 晚于 birth2,返回正数; 如果 birth1 等于 birth2,返回 0; 如果 birth1 早于 birth2,返回负数 int compareDate(IDInfo birth1, IDInfo birth2) { if (birth1.year > birth2.year) { return 1; } else if (birth1.year == birth2.year) { if (birth1.month > birth2.month) { return 1; } else if (birth1.month == birth2.month) { if (birth1.day > birth2.day) { return 1; } else if (birth1.day == birth2.day) { return 0; } else { return -1; } } else { return -1; } } else { return -1; } } int main() { int n = 2; IDInfo* pInfo = (IDInfo*)malloc(n * sizeof(IDInfo)); if (!pInfo) { printf("Memory allocation failed.\n"); exit(1); } readIDInfo(pInfo, n); int cmp = compareDate(pInfo[0], pInfo[1]); if (cmp > 0) { printf("%s 的生日晚于 %s 的生日\n", pInfo[0].name, pInfo[1].name); } else if (cmp == 0) { printf("%s 和 %s 的生日相同\n", pInfo[0].name, pInfo[1].name); } else { printf("%s 的生日早于 %s 的生日\n", pInfo[0].name, pInfo[1].name); } free(pInfo); return 0; } ``` 上面的代码实现了以下功能: 1. 定义了身份证信息结构体 `IDInfo`,其中包括姓名、身份证号码、出生年月、性别和是否有效等信息。 2. 定义了函数 `checkID`,用于校验身份证号码是否合法。校验算法采用的是国家标准 GB 11643-1999。 3. 定义了函数 `readIDInfo`,用于从文件中读取身份证信息并进行校验。校验通过的身份证信息将被保存在结构体数组 `pInfo` 中。 4. 定义了函数 `compareDate`,用于比较两个日期大小。该函数接受两个 `IDInfo` 类型的参数 `birth1` 和 `birth2`,如果 `birth1` 晚于 `birth2`,返回正数; 如果 `birth1` 等于 `birth2`,返回 0; 如果 `birth1` 早于 `birth2`,返回负数。 5. 在 `main` 函数中,读取两个公民的身份证信息,并比较两个生日的大小,输出结果。 注意:为了方便起见,身份证信息保存在名为 `id_info.txt` 的文本文件中,每行包括姓名和身份证号码两个字段,用空格分隔。本例中仅读取了两个公民的信息,您可以根据需要修改代码。

相关推荐

最新推荐

recommend-type

数据结构综合课设设计一个哈夫曼的编/译码系统.docx

这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码(复原)。写一个哈夫曼树编码译码系统。 2.基本要求 一个完整的系统应具有以下功能: I:初始化(Initialization)。从终端读入...
recommend-type

C语言从txt文件中逐行读入数据存到数组中的实现方法

下面小编就为大家带来一篇C语言从txt文件中逐行读入数据存到数组中的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

C++从文本文件读取数据到vector中的方法

主要给大家介绍了利用C++如何从文本文件读取数据到vector中,文章通过实例给出示例代码,相信会对大家的理解和学习很有帮助,有需要的朋友们下面来一起看看吧。
recommend-type

汽车租赁信息管理系统源代码 c++.docx

一、为了方便公司管理各种型号的车辆,并实现以下功能: (1)对车辆进行租赁:先输入车牌号,然后输入车辆类别、品牌型号,并在库存中查找该车辆的相关信息,并进行租车。 (2)添加新的车辆信息:主要完成车辆信息...
recommend-type

python将每个单词按空格分开并保存到文件中

主要介绍了python将每个单词按空格分开并保存到文件中,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】增量式PID的simulink仿真实现

# 2.1 Simulink仿真环境简介 Simulink是MATLAB中用于建模、仿真和分析动态系统的图形化环境。它提供了一个直观的用户界面,允许用户使用块和连接线来创建系统模型。Simulink模型由以下元素组成: - **子系统:**将复杂系统分解成更小的、可管理的模块。 - **块:**代表系统中的组件,如传感器、执行器和控制器。 - **连接线:**表示信号在块之间的流动。 Simulink仿真环境提供了广泛的块库,涵盖了各种工程学科,包括控制系统、电子和机械工程。它还支持用户自定义块的创建,以满足特定仿真需求。 # 2. Simulink仿真环境的搭建和建模 ### 2.
recommend-type

训练集和测试集的准确率都99%,但是预测效果不好

即使训练集和测试集的准确率都很高,但是在实际的预测中表现不佳,可能会有以下几个原因: 1. 数据质量问题:模型训练和测试的数据可能存在问题,比如数据标签错误、数据集采样不均衡、数据集中存在异常值等问题,这些问题可能会导致模型在实际预测中表现不佳。 2. 特征工程问题:模型的特征工程可能存在问题,导致模型无法很好地捕捉数据的特征,从而影响预测效果。 3. 模型选择问题:模型的选择可能不合适,比如选择的模型太简单,无法很好地拟合数据,或者选择的模型太复杂,导致过拟合等问题。 4. 超参数调整问题:模型的超参数可能没有调整到最佳状态,需要进行调整。 针对以上可能的原因,可以采取相应的措施进
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。