今天我们再改进一下之前的通讯录,现在可以把通讯录的信息保存在文件当中; 一、测试部分 本次保存和读取通讯录的内容都是以二进制的形式保存和读取; 对于测试部分,改动的地方在于销毁通讯录之前,需要把通讯录的内容保存到文件中...,所以在销毁通讯录的函数前加了一个SaveContact函数保存通讯录;函数的具体实现看函数实现部分; #include "C_File Dynamic Contact.h" void menu...; #include "C_File Dynamic Contact.h" void CheakCapacity(Contact* pc); //加载文件的信息到通讯录...LoadContact(Contact* pc) { //以二进制的形式读取 FILE* pf = fopen("Contact.txt", "rb"); assert(pf); //读文件...LoadContact(pc); } //查找函数 //加static修饰这个函数是为了这个函数只能在这个.c文件内用,出了这个文件就用不了 static int FindByName
读文件操作 模块化代码实现 Ⅰ→ test.c Ⅱ→address_book.h Ⅲ→address_book.c ✨最后✨ 概述 这个是在之前的动态版本进行添加,如果你不清楚通讯录的静态或者是动态怎么实现...可以看看博主写的前面两篇通讯录的静态和动态的实现↓ 链接→【C语言】通讯录《静态内存版本》_謓泽的博客-CSDN博客 链接→【C语言】通讯录《动态内存版本》_謓泽的博客-CSDN博客 ----...如果你不会文件操作的话,可以看看我前面写过的内存的一篇博客来看看⇣ ✨链接→【C语言】内存函数_謓泽的博客-CSDN博客 增添の功能↓ (1)→当通讯录退出的时候,把信息写到文件里面。...---- 模块化代码实现 Ⅰ→ test.c 代码示例如下↓ /* @Note1:当通讯录退出的时候,把信息写道文件。 @Note2:当通讯录初始化的时候,加载文件的信息。...} ✨最后✨ 那么这个就已经实现了通讯录的最终版本了,这个项目适合已经把C语言学完的人做。巩固自己以往的能力,做个这个提升自己逻辑思维和代码能力的一个小的项目
今天来改进一下静态版本的通讯录,让通讯录的内存空间可以随大小变化; 一、测试部分 测试部分的改动不大,主要的改动还是在函数实现的部分和声明部分; void menu() { printf...,改用malloc开辟空间 添加联系人的方式,当空间容量不够,使用realloc拓展空间 退出通讯录,需要使用free释放空间以及置空; //动态版本初始化通讯录 void InitContact...); pc->sz = 0; pc->Capacity = DEFAULT_SZ; } //查找函数 //加static修饰这个函数是为了这个函数只能在这个.c文件内用...,出了这个文件就用不了 static int FindByName(Contact* pc, char* name) { int i = 0; for (i = 0; i <...Capacity;//通讯录当前的容量 }Contact; //初始化通讯录 void InitContact(Contact* pc); //打印通讯录
前言: 前面我们已经讲过了顺序表的内容,今天我们就要基于顺序表来实现通讯录的内容 我们需要用C语言模拟一个通讯录可以用来存储1000个人的信息 每个人的信息包括: 姓名、电话、性别、住址、年龄...二、通讯录主函数 void test() { int input = 0; //首先忒有通讯录 Contact con; InitContact(&con); do { menu();...memset函数作用就是将data这个存储到通讯录这个结构体的数组初始化为0; 四、通讯录的添加 void AddContact(Contact* pc) { if (pc->sz == MAX)...contact.c #define _CRT_SECURE_NO_WARNINGS #include"contact.h" #include void InitContact...scanf("%s", pc->data[pos]. addr); } } void ContactBreak(Contact* pc) { assert(pc); } test.c
今天我们来实现一个静态的通讯录,该通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址 提供方法: 添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息...#define _CRT_SECURE_NO_WARNINGS 1 #include "Contact.h" //引用自己的头文件 void menu() { printf...sz = 0; memset(pc->data, 0, sizeof(pc->data)); } //查找函数 //加static修饰这个函数是为了这个函数只能在这个.c文件内用...,出了这个文件就用不了 static int FindByName(Contact* pc,char* name) { int i = 0; for (i = 0; i <...void SearchContact(Contact* pc); //修改通讯录的数据 void ModifyContact(Contact* pc); //排序通讯录
一、通讯录运行图 二、头文件 #include #include #include #include #include<stdlib.h...void sort_contact(contact* con); //销毁通讯录 void destroy_contact(contact* con); //保存文件 void save_contact...(contact* con); //将文件信息保存到通讯录中 void load_contact(contact* con); 三、主界面 #include "contact.h" void menu1...contact con; //初始化通讯录 init_contact(&con); //将文件信息保存到通讯录中 load_contact(&con);...,如果你有兴趣想要了解,可以通过C_Ccpp/C_study/contact at main · Yjun6/C_Ccpp (github.com)找到它们。
动态文件通讯录 导语 动态改进 初始化通讯录与添加联系人的更改 动态通讯录的完全体 动态文件通讯录 完整版代码 导语 这一片博客我会改进上次的静态+文件通讯录,先分析哪里可以改,然后再下手,最后测试。...首先改一下初始化通讯录的函数: contacts.c int initialize(contacts* pc) { assert(pc !...现在我们想办法让这个通讯录读取这些联系人。 打开文件的地方当然要在初始化通讯录的时候读取文件内容。 读取要注意,我们把读取的联系人存在内存时,要先判断能不能放的下,放不下就要增容。...(contacts* pc);//读取文件 contacts.c #include "contacts.h" int find_out(char* p1, contacts* p2) { assert...sizeof(person), 1, p1); } fclose(p1);//关闭文件 p1 = NULL; } test.c #include "contacts.h" enum list {
---- 前言 ---- 检验学习成果最好的方式是实践 在学习完C语言的基础知识以后,就可以简易的实现一些小项目 本文章为手把手讲解实现C语言静态通讯录(好好看,相信不会太难的说) 当你自己完成后一定成就感幸福感满满的...问题描述 ---- 用C语言实现简易通讯录 工具 ---- vs2019 基本框架 ---- 通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址 提供方法...test.c:写通讯录的整体流程和逻辑 contact.c:实现通讯录各种功能函数 创建联系人信息与通讯录结构体 对于联系人信息: 需要包含包括姓名、性别、年龄、电话、住址 对于静态通讯录:...,我们如果还想让通讯录能够保存我们所输入联系人数据(在退出后再打开通讯录) 注:这就需要一点文件操作的知识了(在后面的专题中会仔细讲解) 输出数据 在通讯录运行结束前,我们让通讯录联系人的数据以二进制的形式输出到指定的文件中...(即将数据保存在文件中) 参考代码: //保存通讯录数据 void SaveContact(struct Contact* p) { //fopen函数:找到指定文件并返回文件的地址 //wb
引言: 1.菜单 通讯录也如同游戏,需要菜单来供使用者选择,因此要用do...while......(第一次看我文章的小伙伴可以看看我这两篇文章啦:1.扫雷游戏(有讲解)-CSDN博客 2.猜数字游戏(C语言实现)-CSDN博客) 2.功能总结 通讯录有很多功能,因此我们在做出它之前总结一下他的功能...: 与游戏一样,通常需要三个文件: 1.contact.h 包含函数的声明和某些重要量的定义,这些量定义在头文件中方便源文件的使用,也方便代码的统一修改,使之灵活(用define来说明,如:扫雷中的行和列...} 这里运用了memset函数,具体函数如图所示: 由图可知,需要包含头文件 , void* dest:要被初始化的地址(通常为数组名); int c:用于初始化的数(该题初始化为0...4.test.c函数的实现 #define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" /*静态通讯录*/ void menu()
✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 文章目录 前言 准备工作 静态版通讯录 test.c contact.h...contac.c 动态版通讯录 test.c contact.h contact.c 文件版通讯录 test.c contact.h contact.c 前言 本篇博客将介绍通讯录,所谓的通讯录就是基于增删查改功能...基于此,博主将通过C语言实现三个版本的通讯录。...---- 准备工作 对于三个版本的通讯录设计布局,都是大同小异: 采用模块化的方式,通讯录分为test.c、contact.c两个源文件和contact.h一个头文件。...我们直接从主函数开始入手,也就是test.c文件开始说起 静态版通讯录 test.c #define _CRT_SECURE_NO_WARNINGS #include "contact.h" /* *
1.实现功能 本文将采用C语言来实现一个简单的通讯录,要求功能如下 //实现一个通讯录 //1.可以保存100个人的信息 //2.增加人的信息 //3.删除指定联系人的信息 //4.查找 //5.修改...这里我们用一个头文件contact.h来包装我们所需要的头文件以及函数的声明,使代码看上去更加整洁....头文件contact.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include...功能设计 1.创建一个通讯录并进行初始化 首先我们要明确,一个通讯录里放的应该是什么样的信息,既然是通讯录,肯定得有名字和电话号码,除此之外,也可以有性别,住址或者年龄,为了简单,我们就设计这些元素.我们用一个结构体来存放这些变量...,命名为PeopleInfo类型代表联系人的信息.接下来创建通讯录,通讯录里要有联系人的信息,同时还得记录通讯录里人的个数,这里我们也可以用一个结构体Contact来存放它们. typedef struct
ShowContact(const Contact* pc); void DelContact(Contact* pc); void SearchContact(const Contact* pc); ②contact.c文件...--基本功能实现的函数代码 //contact函数实现contact.c源文件 #define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" int Search_by_name...name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr); } return; } ③test.c文件...--整个通讯录的流程框架 //test.c文件--流程 #define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" void menu()//菜单 {...break; default: printf("选择错误,请重新输入\n"); } printf("\n"); } return 0; } 以上就是完整代码啦,后续将有更多的C语言代码分享哦
前言 目录 前言 一、通讯录: 1.1 通讯录介绍: 1.2 通讯录功能介绍: 效果展示: 二、通讯录的实现: 2.1 通讯录类型的声明: 2.2 通讯录的初始化: 2.3 添加联系人函数: 2.4...查询指定联系人函数: 2.5 删除联系人函数 动态图解: 2.6 修改指定联系人函数 总结 总代码: 主测试区: 函数实现区: 函数声明区: 一、通讯录: 1.1 通讯录介绍: 本次通讯录采用...用一个参数 sz 记录当前联系人个数. 1.2 通讯录功能介绍: 1.添加联系人 2.删除联系人 3.修改联系人 4.查询联系人 5.展示通讯录 效果展示: 二、通讯录的实现: 2.1...定义 通讯录 变量: Contact cont;//创建通讯录cont 对 通讯录 进行合理的 初始化 操作....3.能否保存以前的通讯录信息,当我们下次打开通讯录后,通讯录还保存以前的信息. …… 这些优化,会涉及到文件等后需要学习的知识,下回牛牛在细细分解.今天就到这里啦!!
5、销毁通讯录 6、完整代码 三、通讯录(文件版) 1、保存联系人信息 2、初始化通讯录 3、加载联系人信息 4、完整代码 test.c contact.c contact.h 一、总体设计思路...2、设计框架 与正常的项目设计一样,我们把程序封装在三个文件中: test.c:通讯录的总体逻辑,主要用于对通讯录各功能的测试; contact.c:通讯录各种功能的具体实现; contact.h:各种必要的声明...清空通讯录、退出通讯录; 动态版:动态版的通讯录与静态版通讯录功能一样,但是内部实现由固定大小改为动态增容; 文件版:文件版的通讯录与动态版功能与实现方式一样,但是会在程序退出时把联系人信息保存在文件中...; 我们通过把动态版通讯录改造成文件版通讯录来解决联系人信息存储问题; 文件版通讯录在动态版的基础上增加了两个步骤:一是在销毁通讯录之前把联系人信息存放到 contact.txt 中,避免程序退出后联系人信息丢失...= EOF) { pc->count++; CheckCapacity(pc); } //关闭文件 fclose(pfRead); pfRead = NULL; } 4、完整代码 test.c
1.进阶通讯录特点(下) ①基本的增删查改功能; ②通讯录的空间不固定,大小可以调整; ③通过C语言文件操作来储存通讯录信息到硬盘上; 2.实现步骤 基本实现步骤同上、中两篇 【[C语言]通讯录实现(中...) - CSDN App】http://t.csdnimg.cn/K5tqO 【【C语言】通讯录实现(上) - CSDN App】http://t.csdnimg.cn/ZrZQk 此外还有文件加载、写入...//写入一个sz通讯录联系人数量加一和增加联系人函数一样 } printf("已保存的联系人加载成功啦~\n"); return; } 3.完整C语言通讯录代码 (1)contact.h #pragma...//从pc->data+i的位置开始读写到文件中 } //关闭文件 fclose(pf); pf = NULL; } 4.结语 三版通讯录循序渐进,从最开始的定容增删查改等功能的实现(上篇...),到可以不定容的通讯录(中篇),最后到可以保存数据到文件并从文件中加载保存的联系人(下篇),我们不仅学会了一些基本函数的写法,还学了动态内存函数malloc,realloc等函数的用法,并熟悉了c语言文件的基本操作
C语言通讯录功能的实现 一、项目需求: 我们需要一个通讯录,可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。...建立如下文件 contact.h (头文件,用来引入库函数,存放声明) contact.c (实现通讯录每个部分的功能) test.c (主函数,用于测试通讯录功能是否成功实现) 注意:.c文件需要使用自定义头文件的声明...,要在最前端引入 #include "contact.h" //自定义头文件需要用"" 而不是 三、整体思路 1.创建结构体类型 我们需要一个通讯录,可以用来存储1000个人的信息,每个人的信息包括...default: printf("您输入错误,请重新输入\n"); break; } } while (input); return 0; } 五、反思和总结 这里只是一个简单的C语言项目...通讯录结构体是否可以使用动态内存管理? 如何添加文件功能? 这些都是值得去进一步学习和改进的地方。
\通讯录.txt","r"))==NULL) { printf("nttt 通讯录文件不存在"); if ((fp=fopen("通讯录2.txt","w"))==NULL) {...----"); printf("nt 通讯录文件已建立 "); printf("nt...通讯录文件中无任何纪录 "); printf("nt 按任意键返回主菜单 "); printf...*/ { int i; if ((fp=fopen("c:\通讯录.txt","w"))==NULL) { printf("ntt文件打开失败"); } for (i=0;i<n;i++)...; /*输出提示信息*/ printf("ntt通讯录文件已保存"); printf("ntt谢谢使用,欢迎再次使用!
枚举类型 初始化通讯录 增加通讯录的信息 打印通讯录的信息 删除通讯录的信息 查找通讯录的信息 修改指定通讯录人的信息 排查通讯录当中人员的信息 ✨模块化代码实现 test.c address_book.c... 传统方式编程→所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。...模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。...传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。...模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。
1.实现通讯录菜单 菜单部分的逻辑比较简单,就是利用C语言printf函数打印出这个菜单界面即可。...如果有对memset()函数不了解的朋友可以先移步我的这篇博客,在后续我们还会使用到这个函数: 【C语言】memset()函数 https://blog.csdn.net/weixin_72357342...有关更多动态开辟相关知识可以移步: 【C语言】内存的动态分配与释放 https://blog.csdn.net/weixin_72357342/article/details/134099965?...相关文章推荐 【C语言】malloc()函数详解(动态内存开辟函数) 【C语言】realloc()函数详解(动态内存开辟函数) 【C语言】calloc()函数详解(动态内存开辟函数) 【C语言】...free()函数详解(动态内存释放函数) 【C语言】memcpy()函数 【数据结构实战项目】C语言实现数据结构顺序表万字详解(附完整运行代码) 【实用编程技巧】不想改bug?
关于C语言的知识放在专栏:C 小菜坤日常上传gitee代码:https://gitee.com/qi-dunyan ❤❤❤ 个人简介:双一流非科班的一名小白,期待与各位大佬一起努力!...目录 思路 代码实现 完整代码(可自取) 思路 在前面的文章中,已经讲解了动态版本的通讯录的实现,但是动态通讯录存在一个致命缺陷,就是它不能自动保存数据,而前面一篇文章中学到了数据持久化的方法之一:即把数据存放在磁盘文件上...从文件中读取信息(初始化阶段完成) //读通讯录文件信息 //size_t fread(void* ptr, size_t size, size_t count, FILE* stream) void...); //释放空间 void Destory_contact(struct contact* p); //保存数据 void Storage_Contact(struct contact* p); .c源文件...sz; i++) { fwrite(p->data + i, sizeof(struct message), 1, pfW); } fclose(pfW); pfW = NULL; } .c源文件
领取专属 10元无门槛券
手把手带您无忧上云