C语言实现简易通讯录3.0(通讯录信息可以向文件写入,从文件读取)

该博客介绍如何使用C语言改进简易通讯录,使其能够将通讯录信息写入文件并从文件读取,从而实现数据的持久化。通过分析`addressBook.h`、`addressBook.c`和`main.c`三个文件的内容,展示了如何在程序中进行动态内存管理和文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在前文中介绍了如何实现简易通讯录
后来又改进了通讯录,使之可以进行动态内存管理。
但是,我们的通讯录程序是只能一次性使用的,退出程序所有的内容都消失了,那么本文就来实现将通讯录的数据写入到硬盘上的文件。再次打开程序时,再从文件上读取数据。实现数据的持久性。

代码如下:

addressBook.h文件

#pragma once

//头文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_NAME 20
#define MAX_SEX 6
#define MAX_TELE 12
#define MAX_ADDR 20
#define MAX 1000

#define INIT_SZ 3
#define CAP_ADD 2

enum fun
{
   
	EXIT,//从0开始,EXIT = 0
	ADD,//1
	DEL,//2
	SEARCH,//3
	MODIFY,//4
	PRINT,
	SORT,
	DESTORY
};



//个人信息结构体:
typedef struct PeoInfo
{
   
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

通讯录结构体:静态版本
//typedef struct Book
//{
   
//	PeoInfo data[MAX];//
//	int size;//记录当前通讯录中有效的信息个数
//}Book;

//通讯录结构体:动态版本
typedef struct Book
{
   
	PeoInfo* data;//动态版本:记录个人信息
	int size;//记录当前通讯录中有效的信息个数
	int cap;//记录当前的最大容量,以便满了通过动态内存管理来扩充
}Book;

//菜单函数声明:
void menu(void);
void menu_ins(void);

//初始化通讯录函数声明
void InitMsg(Book*);

//增加通讯录信息函数声明:
void AddMsg(Book* );

//打印通讯录信息函数声明:
void PrintMsg(Book* );

//删除通讯录信息函数声明:
void DelMsg(Book* );

//查找通讯录信息函数声明:
void SearchMsg(Book*);

//修改通讯录信息函数声明:
void ModMsg(Book*);

//排序通讯录信息函数声明:
void SortMsg(Book*);

//通讯录动态空间释放函数声明:
void DestroyMsg(Book*);

//检查是否需要增容:
void CheckCap(Book* pc);

//保存通讯录信息到文件中的函数声明:
void SaveMsg(Book*);

//程序打开,初始化通讯录时,加载文件中的数据到通讯录中函数声明:
void LoadMsg(Book*);

//删除文件中通讯录信息,清空通讯录文件
void nothing(Book* pc);

addressBook.c文件

//
//本文件包括  各功能函数:


#include "addressBook.h"

//菜单显示:
void menu()
{
   
	printf("********************************\n");
	printf("******  1.增加    2.删去  ******\n");
	printf("******  3.搜索    4.修改   *****\n");
	printf("******  5.浏览    6.排序   *****\n");
	printf("******  0.退出    7.销毁  *******\n");
	printf("********************************\n");
}
//菜单说明:
void menu_ins()
{
   
	printf("菜单说明\n");
	printf("增加:增加通讯录信息\n");
	printf("删去:输入姓名,删去该姓名对应的通讯录信息\n");
	printf("搜索:输入姓名,搜索并打印该姓名对应的通讯录信息\n");
	printf("修改:输入姓名,修改该姓名对应的通讯录信息\n");
	printf("浏览:打印出全部通讯录信息\n");
	printf("排序:根据姓名/年龄排序通讯录信息\n");
	printf("销毁:清空通讯录及文件中的数据信息\n");
}

//通过姓名来寻找某条通讯录信息函数:
static int FindByName(Book* pc, char* name)
{
   
	for (int i = 0; i < pc->size; i++)
	{
   
		
实训项目,满足以下要求 【要求】 (1)程序的主窗口如左图所示。 程序启动时,窗口左边的“姓名”列表框中显示了本软件中已保存的所有人员姓名,从中选择一个姓名,窗口左边的“详细信息”区域显示此人的详细通讯录内容。 (2)窗口顶部“城市”和“性别”两个列表框中列了可供选择的城市名称和姓名。使用这两个控件,可以筛选感兴趣的内容。例如,在“城市”中选择“南京”,在性别中选择“男”,则在“姓名”列表框中只显示程序所保存的住在南京的男性人员。选择“城市”和“性别”中的“全部”,则列所有人员。 (3)单击“添加”按钮 ,弹一个对话框。通过此对话框,可以添加新的通讯录条目。在添加新条目时,所在城市应从组合框中选择,若组合框中没有想要的城市,可以直接在组合框中键入。要求键入的新城市名能自动添加到“添加”对话框中“所在城市”组合框和主窗口中“城市”组合框的下拉列表中。 (4)在主窗口中点击“删除”按钮 可以删除当前显示的条目。 (5)增加“保存”和“打开”按钮或菜单项,要求能够自动保存所做的添加和删除操作。 (6)所有的数据保存.txt文件中,并能读。比如.txt文件的每一行保存一条记录。如:姓名|性别|生日…………【可选用CFile/CStdioFile类】 【提示】创建通讯类,包括姓名、性别、生日、所在城市、工作单位、办公电话、住宅电话等必要信息
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值