欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > [c语言日寄]通讯录pro版:文件操作

[c语言日寄]通讯录pro版:文件操作

2025/4/2 1:50:59 来源:https://blog.csdn.net/2401_83741734/article/details/146768598  浏览:    关键词:[c语言日寄]通讯录pro版:文件操作

在这里插入图片描述

【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study


文章目录

    • 前言
    • 功能升级介绍
      • 数据保存功能
      • 数据读取功能
    • 技术实现细节
      • 文件存储格式
      • 保存数据实现
      • 读取数据实现
    • 用户体验优化
      • 操作提示
      • 错误处理
    • 测试与验证
    • 总结


前言

在之前的版本中,我们的通讯录系统已经实现了增加、删除、查找、修改、显示以及排序联系人信息等基本功能。然而,数据存储仅依赖于内存,一旦程序关闭,所有数据都将丢失。这在实际使用中显然是不够的,用户需要一个能够长期保存数据的通讯录。今天,我们将通过新增数据持久化功能,解决这个问题,让通讯录系统更加实用。
点击这里跳转前文:[c语言日寄]基于C语言的命令行通讯录管理系统


功能升级介绍

数据保存功能

用户可以通过选择菜单中的“保存数据”选项,将当前通讯录中的所有联系人信息保存到本地文件中。系统会将联系人的性别、年龄、电话号码、姓名和地址等信息按照一定的格式写入到文件中。在保存之前,系统会提示用户确认操作,避免误操作导致数据丢失。如果用户确认保存,系统会覆盖原有数据文件,确保数据的更新。这一功能的实现,让用户不再担心程序关闭后数据丢失的问题,大大提高了数据的安全性。

数据读取功能

为了方便用户在不同设备或不同时间使用通讯录,我们新增了数据读取功能。用户可以通过选择菜单中的“读取数据”选项,从本地文件中读取之前保存的联系人信息。系统提供了两种读取方式:覆盖原有内容和在原有内容后添加内容。如果用户选择覆盖原有内容,系统会先清空当前通讯录中的所有数据,然后从文件中读取数据并添加到通讯录中;如果用户选择在原有内容后添加内容,系统会直接将文件中的数据添加到当前通讯录的末尾。


技术实现细节

文件存储格式

为了确保数据的可读性和可扩展性,我们采用了简单的文本文件格式来存储联系人信息。每个联系人的信息占用一行,字段之间用空格分隔,具体格式为:性别 年龄 电话号码 姓名 地址。这种格式易于理解和解析,同时也方便用户手动编辑和查看数据文件。

保存数据实现

在保存数据时,系统首先通过fopen函数以写模式打开本地文件“address_book_data.txt”。如果文件打开失败,系统会提示用户并返回错误信息。如果文件打开成功,系统会遍历通讯录链表,将每个联系人的信息通过fprintf函数按照指定的格式写入到文件中。写入完成后,关闭文件并提示用户保存成功。

ADD* save(ADD* head)
{// 确认操作system("cls");printf("* 确定要保存数据吗?这将会覆盖原有数据:(Y/N)");while (getchar() != '\n');char check = 0;if (scanf("%c", &check) <= 0){perror("save - scanf");return NULL;}if (check != 'Y'){system("cls");printf("已取消保存。\n");printf("---------------\n");return NULL;}// 保存FILE* data = fopen("address_book_data.txt","w");if (data == NULL){perror("save - fopen");return NULL;}ADD* now = head->next;while (now != NULL){fprintf(data, "%c %d %s %s %s\n", now->sex, now->age, now->phone, now->name, now->address);now = now->next;}fclose(data);system("cls");printf("数据保存成功!\n");printf("-----------------\n");return head;
}

读取数据实现

在读取数据时,系统首先通过fopen函数以读模式打开本地文件“address_book_data.txt”。如果文件打开失败,系统会提示用户并返回错误信息。如果文件打开成功,系统会根据用户选择的读取方式,执行相应的操作。

  • 如果用户选择覆盖原有内容,系统会先调用clear函数清空当前通讯录链表,然后通过fscanf函数从文件中逐行读取联系人信息,并动态分配内存创建新的联系人节点,将读取到的信息存储到节点中,最后将新节点链接到链表末尾。
  • 如果用户选择在原有内容后添加内容,系统会直接将文件中的数据添加到链表末尾。读取完成后,关闭文件并提示用户读取成功。
ADD* read(ADD* head)
{system("cls");
again:printf("# 请选择读取方式:\n");printf("  1.覆盖原有内容\n");printf("  2.在原有内容后添加内容\n");printf("----------\n");printf("  0.取消读取\n");printf("# 请输入操作数:");int mode = 0;if (scanf("%d",&mode) == 0){perror("read-scanf");return NULL;}switch (mode){case 1:// 清空链表clear(head);case 2:read_2(position(head));break;case 0:system("cls");printf("已取消读取。\n");printf("-------------\n");return NULL;default:system("cls");printf("操作符错误,请从新输入:\n");printf("-------------\n");goto again;//重新启动函数}system("cls");printf("读取成功\n");printf("-------------\n");return head;
}

用户体验优化

操作提示

在数据保存和读取过程中,系统会通过清晰的操作提示引导用户进行操作。例如,在保存数据时,系统会提示用户确认操作,避免误操作导致数据丢失;在读取数据时,系统会提示用户选择读取方式,让用户能够根据自己的需求进行操作。这些操作提示不仅提高了用户操作的准确性,也增强了用户体验。

错误处理

在文件处理过程中,可能会出现各种错误情况,如文件打开失败、读写错误等。为了提高系统的稳定性和可靠性,我们在代码中加入了详细的错误处理机制。如果出现错误,系统会通过perror函数输出错误信息,让用户能够及时了解错误原因,并采取相应的措施。同时,系统会在出现错误时及时终止操作,避免对数据造成进一步的损坏。


测试与验证

为了确保新增功能的稳定性和可靠性,我们对数据保存和读取功能进行了全面的测试。测试用例包括但不限于以下几种情况:

  1. 保存数据测试
    • 保存空通讯录数据,验证文件是否正确生成且为空。
    • 保存包含多个联系人的通讯录数据,验证文件内容是否正确。
    • 连续多次保存数据,验证数据是否正确覆盖。
  2. 读取数据测试
    • 读取空文件,验证系统是否正确提示用户文件为空。
    • 读取包含多个联系人的数据文件,验证数据是否正确读取并添加到通讯录中。
    • 读取格式错误的文件,验证系统是否正确提示用户文件格式错误。
    • 覆盖原有内容读取数据,验证原有数据是否被正确清空并替换为新数据。
    • 在原有内容后添加内容读取数据,验证新数据是否正确添加到通讯录末尾。

经过测试,新增功能在各种情况下均表现良好,能够满足用户对数据持久化的需求。


总结

本次通讯录系统的升级,新增了数据保存和读取功能,实现了数据的持久化存储。这一功能的实现,不仅解决了用户数据丢失的问题,还提高了数据的可移植性,让用户在不同设备之间能够轻松地同步通讯录数据。

关注窝,每三天至少更新一篇优质c语言题目详解~

[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词