# ctonxunlu **Repository Path**: litinyana/ctonxunlu ## Basic Information - **Project Name**: ctonxunlu - **Description**: C语言构建的一个通讯录 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-26 - **Last Updated**: 2025-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 📞 C语言通讯录系统 - 双平台版本 ## 项目简介 这是一个用纯C语言开发的**跨平台通讯录管理系统**,包含**Windows**和**Linux**两个独立版本。代码针对不同操作系统特性进行了优化,确保在各平台上都能稳定运行。 ## 🎯 版本对比 | 特性 | Windows版本 | Linux版本 | |------|-------------|-----------| | **文件名** | `contactbook_win.c` | `contactbook.c` | | **清屏命令** | `system("cls")` | `system("clear")` | | **密码输入** | `_getch()` | `getpass("")` | | **头文件** | `` | `` | | **文件模式** | 二进制模式(`"rb"`, `"wb"`) | 文本模式(`"r"`, `"w"`) | | **编译命令** | `gcc contactbook_win.c -o contact.exe` | `gcc contactbook.c -o contact` | ## 📁 核心功能 ### 1. 联系人管理 - **添加联系人**:姓名、电话(手机/办公/家庭)、QQ、地址 - **搜索联系人**:按家庭电话号码搜索 - **查看列表**:分页显示所有联系人(每页20条) - **查看详情**:逐个查看联系人详细信息 - **删除联系人**:按索引删除指定联系人 ### 2. 数据持久化 - **自动保存**:联系人数据保存到 `contacts.dat` 文件 - **二进制存储**:Windows版本使用高效二进制格式 - **文本存储**:Linux版本使用标准文件格式 ### 3. 用户界面 - **欢迎界面**:美观的ASCII艺术标题 - **主菜单**:6个核心功能选项 - **分页导航**:支持前后翻页浏览 - **输入验证**:电话号码必填验证 ## 🚀 快速使用 ### Windows用户 ```bash # 编译 gcc contactbook_win.c -o contact.exe # 运行 contact.exe ``` ### Linux用户 ```bash # 编译 gcc contactbook.c -o contact # 运行 ./contact ``` ## 🛠️ 技术架构 ### 数据结构 ```c struct contacts { char cNameBuf[50]; // 姓名 char cTelBuf[80]; // 手机号码 char cOfficTelBuf[80]; // 办公电话 char cHomeTelBuf[80]; // 家庭电话(搜索键) char cQQNumber[60]; // QQ号码 char cAddress[128]; // 地址 }; ``` ### 核心模块 1. **界面模块**:`ShowWelcome()`, `ShowRootMenu()` 2. **数据模块**:`SavecontactsToFile()`, `GetFileDataCount()` 3. **业务模块**:`Addcontacts()`, `SearchNumber()`, `DeleteData()` 4. **视图模块**:`ViewList()`, `ViewData()` 5. **工具模块**:`ClearScreen()`, `CheckInput()` ## 📋 使用流程 ``` 启动程序 → 显示欢迎界面 → 主菜单选择 → 执行功能 → 返回菜单 ``` ### 菜单选项 1. **添加联系人**:输入完整联系信息 2. **搜索号码**:通过家庭电话搜索 3. **联系人列表**:分页浏览所有联系人 4. **联系人详情**:查看单个联系人详细信息 5. **删除联系人**:按索引删除 6. **退出系统**:安全退出程序 ## 🔍 搜索功能说明 **特别注意**:搜索功能仅支持通过**家庭电话**(`cHomeTelBuf`)进行搜索 - 输入要搜索的家庭电话号码 - 系统遍历所有联系人进行匹配 - 找到后显示完整信息 - 未找到显示提示信息 ## ⚠️ 注意事项 ### 平台差异 1. **Windows版本**使用二进制文件操作,数据更紧凑 2. **Linux版本**使用标准文件操作,兼容性更好 3. 两个版本的数据文件格式不同,**不能直接互换** ### 已知限制 1. **搜索限制**:只能按家庭电话搜索,不支持姓名搜索 2. **删除问题**:删除功能存在数据覆盖问题,可能损坏文件 3. **输入限制**:所有字段使用`scanf("%s")`,不能包含空格 4. **编码问题**:Windows使用GBK,Linux使用UTF-8 ### 文件操作风险 ```c // 删除功能存在缺陷 - 覆盖写入可能导致数据损坏 for(i=0;i<(iDataTotalCount-1);i++) { fread(&contacts, sizeof(struct contacts), 1, file); fwrite(&contacts, sizeof(struct contacts), 1, file); // 风险点 } ``` ## 🐛 常见问题解决 ### Windows版本问题 ``` 错误:undefined reference to '_getch' 解决:使用MinGW或MSVC编译器,确保包含conio.h ``` ### Linux版本问题 ``` 错误:fatal error: sys/io.h: No such file or directory 解决:修改为 #include 和 #include ``` ### 编译警告 ``` 警告:implicit declaration of function 'getpass' 解决:添加 #include 头文件 ``` ## 📝 改进建议 ### 短期改进 1. **修复删除功能**:使用临时文件或链表重写 2. **增强搜索**:支持多字段搜索(姓名、电话等) 3. **输入改进**:使用`fgets()`支持空格输入 ### 长期改进 1. **数据加密**:敏感信息加密存储 2. **导入导出**:支持CSV格式 3. **分组管理**:按类别管理联系人 4. **生日提醒**:添加生日字段和提醒功能 ## 🧪 测试要点 ### 功能测试 - [ ] 添加联系人后能否正确保存 - [ ] 搜索功能是否能找到正确记录 - [ ] 分页显示是否正确计算页数 - [ ] 删除操作后数据是否同步 ### 边界测试 - [ ] 空文件时的处理 - [ ] 大量数据(>1000条)时的性能 - [ ] 输入超长字符串的处理 - [ ] 重复添加相同联系人的处理 ## 🤝 贡献指南 发现bug或想改进功能? 1. Fork本仓库 2. 创建功能分支 3. 提交更改 4. 创建Pull Request **提交Issue时请注明:** - 使用的操作系统版本 - 编译器版本 - 具体错误信息 - 重现步骤 ## 📄 许可证 本项目仅供学习交流使用,遵循MIT许可证。 --- **重要提醒**:建议定期备份`contacts.dat`文件,防止数据丢失! **开始使用**:选择适合您系统的版本,体验简洁高效的通讯录管理!