C语言通讯录管理系统:完整代码与结构解析
本内容提供了一套完整的C语言通讯录管理系统源码,涵盖人员信息的增删改查(CRUD)、按号码排序以及文件持久化存储功能,适合C语言初学者学习结构体数组与文件操作的实战案例。
设计与功能概览
该通讯录管理系统旨在通过控制台界面实现联系人数据的数字化管理。系统以二进制文件 data.txt 作为底层数据存储介质,利用内存中的结构体数组 a[50] 进行逻辑运算。根据设计要求,系统实现了以下核心模块:
- 信息录入:支持批量输入新联系人的电话、姓名、工作单位及地址,并自动校验电话号码唯一性以防止重复记录。
- 信息查询:通过指定电话号码快速检索对应联系人详情。
- 信息修改与删除:允许针对特定电话号码更新详细信息或将其从文件中彻底移除。
- 智能插入:支持在现有记录的特定位置之后插入新条目。
- 数据排序:对通讯录内的记录按电话号码进行升序排列并重新保存至文件。
- 统计显示:汇总当前系统中的联系人总数并格式化输出所有数据。
第1步:编译运行环境准备
由于代码中使用了 Windows API 相关的库,建议在 Windows 环境下使用 gcc 或 MSVC 编译器进行编译。运行后,屏幕将以特定的色彩组合展示菜单交互界面。
第2步:数据结构定义与宏配置
系统采用定长结构体存储联系人信息,并通过宏定义简化了长度计算和格式字符串的处理。这是理解后续读写逻辑的基础。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct list)
// 将结构体字段映射为格式化打印所需的参数列表
#define DATA a[i].num, a[i].name, a[i].job, a[i].address
// 定义表格输出模板,用于对齐显示各项属性
#define FORMAT "\t\t || %-12d %-12s %-19s %-20s ||\n"
struct list {
int num; // 电话号码
char name[15]; // 姓名
char job[30]; // 工作单位
char address[30]; // 通讯地址
};
struct list a[50]; // 全局数组,模拟数据库表
第3步:主程序与控制流程
main 函数作为入口点,首先设置控制台颜色(system("color 5e")),随后进入 while(n) 循环。用户选择数字键(1-8)触发不同的功能函数,每次执行完毕需按下任意键继续并重新加载菜单,实现了类似 GUI 的循环交互体验。
第4步:核心数据写入(录入功能)
在 in() 函数中,系统首先以 "a+" 模式读取现有文件到内存数组中。接着判断是否为新录入:fread 逐块读取 LEN 长度的字节。若确认添加新成员,会遍历现有数组检查是否存在相同电话号码(a[i].num == a[m].num)。校验通过后,调用 fwrite 将结构化数据追加写入磁盘,确保数据落盘。
第5步:数据变更(修改与删除)
修改和删除逻辑共享相似的文件流处理方式:先读取全量数据到内存,定位目标索引后,再清空原文件并以 "w+" 模式重写剩余有效数据。这体现了简单的“读-改-写”事务模型。例如,del() 在找到目标后会通过 for (j = i + 1; j < m; j++) a[j - 1] = a[j]; 移动内存中的数据覆盖要删除的记录,然后减少计数器 m--,最后全量覆写文件。
关键技术总结
该示例清晰地展示了 C 语言在处理简单业务逻辑时的底层操作方式。特别是利用 fread/fwrite 配合固定大小结构体的做法,虽然不如现代 SQL 数据库灵活,但在没有第三方依赖的环境中,是构建轻量级桌面应用程序的经典方案。对于需要长期维护的场景,建议进一步优化错误处理机制及大文件 IO 性能。
以上就是C语言通讯录管理系统源码及逻辑优化的详细内容,更多关于C语言开发项目的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









