用C语言实现通讯录所有功能(顺序表结构)

目录

前言:

简要分析:

1.大概构架

2.初始化联系人信息

3.加载联系人信息

4.增加联系人信息

5.展示联系人信息

6.查找联系人信息

7.删除联系人信息

8.修改联系人信息

9.排序联系人信息

10.保存联系人信息

11.释放空间

12.总体代码呈现

Contact.h

test.c

Contact.c

13.小总结


前言:

        在写通讯录之前我先给大家大致讲一下我们在实现过程中要用的知识。

        在我实现的通讯录里用到了指针、结构体、枚举、qsort快排、动态内存管理和文件的内容,如果大家伙对前几个内容不熟悉可以看我上一个博客,已经非常非常详细的进行了讲解~!下面就是链接。

https://blog.csdn.net/weixin_69725192/article/details/125015971?spm=1001.2014.3001.5501


简要分析:

        在通讯录的实现中主要有增加联系人信息、删除联系人信息、查找联系人信息、修改联系人信息、显示联系人信息、排序联系人信息,在实现这些功能还要有很多分功能,接下来我会一边给大家分析,一边给大家写代码~!


1.大概构架

        首先我们要将上面所述的几个大功能排列出来,然后通过分装函数的形式进行对其实现。

        我们还要清楚一个人的信息要有姓名、年龄、性别、电话、地址这几个信息,所以我们要将人的信息也进行分装,这里我用的是结构体。

        在增删通讯录的时候,我们要记录通讯录里有几个人的信息从而进行对容量的掌控,所以也要有人的信息、最大容量和当前有几个人的信息,这里我也将其进行了分装。

        为了看的更清楚,我在switch语句用枚举的形式进行对菜单内容的选择。

        接下来就是大概框架的代码,接下来我就要对构架里的函数进行实现了,大家先熟悉一下功能,方便后面的实现哦~!

void menu()
{
	printf("*****************************************\n");
	printf("****** 1. add           2. del    *******\n");
	printf("****** 3. search        4. modify *******\n");
	printf("****** 5. show          6. sort   *******\n");
	printf("****** 7. save          0. exit   *******\n");
	printf("*****************************************\n");
}

enum Option//选择
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT,
	SAVE
};

typedef struct PeoInfo//一个人的信息
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];

}PeoInfo;

typedef struct Contact//用来操作通讯录
{
	struct PeoInfo* data;//存放通讯录的信息
	int size;//记录已有的元素个数
	int capacity;//当前通讯录的最大容量

}Contact;

void test()
{
	int input = 0;
	struct Contact Con;
	InitContact(&Con);
	do
	{
		menu();
		printf("请选择操作->");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&Con);//添加联系人
			break;
		case DEL:
			DelContact(&Con);//删除联系人
			break;
		case SEARCH:
			SearchContact(&Con);//查找联系人
			break;
		case MODIFY:
			ModifyContact(&Con);//更改联系人
			break;
		case SHOW:
			ShowContact(&Con);//展示联系人
			break;
		case SORT:
			SortContact(&Con);//排序
			break;
		case SAVE:
			SaveContact(&Con);//保存
			break;
		case EXIT:
			SaveContact(&Con);//保存通讯录内容到文件夹
			DestroyContact(&Con);//释放动态内存
			break;
		default:
			printf("输入错误,请重新输入~!\n");
			break;
		}
	} while (input);
}

int main()
{
	test();
	return 0;
}

2.初始化联系人信息

        在我们进行添加的时候,首先要对联系人的所有信息进行初始化,当然如果我们如果已经保存过了联系人信息,我们也要将保存好的信息赋给联系人信息(在下面会讲)。

void InitContact(struct Contact* pc)
{
	assert(pc);
	pc->data = (PeoInfo*)malloc(DEFAULT_SZ * sizeof(struct PeoInfo));//给data开辟一个动态内存,大小为struct(PeoInfo)
	if (pc->data == NULL)//判断是否开辟成功
	{
		perror("data");//如果错误就输出错误原因,并返回
		return;
	}
	pc->size = 0;//初始化
	pc->capacity = DEFAULT_SZ;//初始化
	LoadContact(pc);//把文件中已经存放的通讯录中的信息加载到通讯录中
}

3.加载联系人信息

        在我们初始化联系人信息之后,我们先要进行对上次使用通讯录后的信息进行拷贝,如果没有的话就跳过这个操作。

void LoadContact(struct Contact* pc)
{
	assert(pc);
	PeoInfo tmp = { 0 };
	FILE* pfRead = fopen("contact.dat", "rb");//二进制读取
	if (pfRead == NULL)
	{
		perror("LoadContact");//报错误原因
		return;
	}
	while (fread(&tmp, sizeof(PeoInfo), 1, pfRead))//将保存过的放到tmp临时变量中
	{
		CheckCapcity(pc);//读取过程中如果满了就增容
		pc->data[pc->size] = tmp;//将tmp临时变量里的内容赋到通讯录中
		pc->size++;//增加一个人size++
	}
	fclose(pfRead);//关闭,置空
	pfRead = NULL;
}

4.增加联系人信息

        在添加联系人时候,我们要考虑到容量的问题,当我们添加、添加、添加,到最大容量了,我们要对其增容,所以在增加之前,我们要先对通讯录容量进行检查,如果当前通讯录的总人数小于最大容量,那么就不用增容,如果等于了,那就增容~!

        在添加完联系人之后,一定一定要记得记录通讯录里的人数,也就是下面的size++,只有加了才能有效的进行判断并增容~!

void CheckCapcity(struct Contact* pc)
{
	assert(pc);
	if (pc->size == pc->capacity)
	{
		PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));//先开辟一个空间
		if (ptr != NULL)//如果开辟成功了
		{
			pc->data = ptr;//就把它赋给data
			pc->capacity += 2;//最大容量增加
			printf("增容成功\n");
		}
		else
		{
			printf("增容失败\n");
		}
	}
}

void AddContact(struct Contact* pc)
{
	assert(pc);
	//检测当前通讯录的容量
	//1. 如果满了,就增加空间
	//2. 如果不满,啥事都不干
	CheckCapcity(pc);//这里传的也是指针~!!!!
	//增加数据
	printf("请输入名字:>");
	scanf("%s", pc->data[pc->size].name);
	printf("请输入年龄:>");
	scanf("%d", &(pc->data[pc->size].age));
	printf("请输入性别:>");
	scanf("%s", pc->data[pc->size].sex);
	printf("请输入电话:>");
	scanf("%s", pc->data[pc->size].tele);
	printf("请输入地址:>");
	scanf("%s", pc->data[pc->size].addr);
	pc->size++;//添加完一个,size增加
	printf("添加成功\n");
}

5.展示联系人信息

        在我们添加的途中,我们想看看我们联系人中有谁,这时候我们就要用到展示联系人这个功能了。

        当然如果通讯录为空,那么我们就展示补了,如果不为空,我们就对通讯里里所保存的所有人的信息进行展示。

void ShowContact(struct Contact* pc)
{
	assert(pc);
	if (pc->size == 0)
		printf("通信录为空\n");
	else
	{
		int i = 0;
		printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\n", 
			"名字", "年龄", "性别", "电话", "地址");//标题
		for (i = 0; i < pc->size; i++)//数据
		{
			printf("%-20s\t%-4d\t%-5s\t%-12s\t%-30s\n",
				pc->data[i].name,
				pc->data[i].age,
				pc->data[i].sex,
				pc->data[i].tele,
				pc->data[i].addr);
		}
	}
}

6.查找联系人信息

        当我们要查找这个联系人的信息时,我们要输入这个联系人的姓名进行查找。首先我们要先找这个联系人在不在我们通讯录里,如果没有找到这个联系人,那么当然查找失败,如果有这个联系人,那么把这个人的信息打印出来。

int FindByName(struct Contact* pc , char name[MAX_NAME])
{
	assert(pc);
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
			return i;//找到了
	}
	return -1;//没找到
}

void SearchContact(struct Contact* pc)
{
	assert(pc);
	char name[MAX_NAME];
	int pos = 0;
	printf("请输入要查找人的姓名:>");
	scanf("%s", name);
	pos = FindByName(pc, name);
	
	if (pos == -1)
		printf("要查找的人不存在\n");
	else
	{
		printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
		printf("%-20s\t%-4d\t%-5s\t%-12s\t%-30s\n",
			pc->data[pos].name,
			pc->data[pos].age,
			pc->data[pos].sex,
			pc->data[pos].tele,
			pc->data[pos].addr);
	}
}

7.删除联系人信息

        当我们要删除联系人信息时,同上一个功能一样,我们首先先要输入这个人的姓名,然后根据姓名去查找通讯录里有没有这个人,如果没这个人,那么就删除失败,如果有这个人我们进行删除(在这里我用的是覆盖的方法去删除)。

int FindByName(struct Contact* pc , char name[MAX_NAME])
{
	assert(pc);
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
			return i;//找到了
	}
	return -1;//没找到
}


void DelContact(struct Contact* pc)
{
	assert(pc);
	char name[MAX_NAME];
	int pos = 0;
	printf("请输入要删除人的姓名:>");
	scanf("%s", name);
	//1. 查找要删除的人在什么位置
	//找到了返回名字所在元素的下标
	//找不到返回 -1
	pos = FindByName(pc, name);//传的是地址pc和输入的名字

	//删除联系人
	if (pos == -1)
		printf("要删除的联系人不存在\n");
	else
	{
		int j = 0;
		for (j = pos; j < pc->size - 1; j++)//覆盖
		{
			pc->data[j] = pc->data[j + 1];
		}
		pc->size--;
		printf("删除成功\n");
	}
}

8.修改联系人信息

        在修改联系人的时候,我们也要先输入姓名,然后根据这个姓名去找这个人在不在通讯录里,如果不在通讯录里,那么修改失败。如果在通讯录里,那么重新输入这个人的信息,将原来的信息进行覆盖。

int FindByName(struct Contact* pc , char name[MAX_NAME])
{
	assert(pc);
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
			return i;//找到了
	}
	return -1;//没找到
}

void ModifyContact(struct Contact* pc)
{
	assert(pc);
	char name[MAX_NAME];
	int pos = 0;
	printf("请输入要修改人的姓名:>");
	scanf("%s", name);
	pos = FindByName(pc, name);

	if (pos == -1)
		printf("要修改的人不存在\n");
	else//如果存在就重新输入一遍人的信息进行覆盖
	{
		printf("请输入名字:>");
		scanf("%s", pc->data[pos].name);
		printf("请输入年龄:>");
		scanf("%d", &(pc->data[pos].age));
		printf("请输入性别:>");
		scanf("%s", pc->data[pos].sex);
		printf("请输入电话:>");
		scanf("%s", pc->data[pos].tele);
		printf("请输入地址:>");
		scanf("%s", pc->data[pos].addr);
		printf("修改成功\n");
	}
}

9.排序联系人信息

        在排序联系人的时候,我们先要选择要按照什么方式进行排序,这里我给了两个排序方式,一个是按照名字排序、一个是按照年龄排序,如果大家伙还有别的需求,可以按照自己的需求进行改进~!

        在这里我用到了qsort这个函数,也就是快排,大家如果没见过这个函数,可以去看我上一篇博客,我在开头就给了链接,或者直接去我主页找,就是这个文章的上一个哦~!

void Menu()
{
	printf("*****************************************\n");
	printf("****** 1. name           2. age    *******\n");
	printf("*****************************************\n");
}

int char_cmp(const void* p1, const void* p2)
{
	//return strcmp(((struct PeoInfo*)p1), ((struct PeoInfo*)p2));
	return strcmp(((struct PeoInfo*)p1)->name, ((struct PeoInfo*)p2)->name);
}
int int_cmp(const void* p1, const void* p2)
{
	return ((struct PeoInfo*)p1)->age - ((struct PeoInfo*)p2)->age;
}

void SortContact(struct Contact* pc)
{
	assert(pc);
	int input;
	do
	{
		Menu();
		printf("请输入按照什么要求排序:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			//qsort(pc->data->name, pc->size, sizeof(struct PeoInfo), char_cmp);
			qsort(pc->data, pc->size, sizeof(struct PeoInfo), char_cmp);//进行排序
			printf("成功按照姓名进行排序~!\n");
			input = 0;
			break;
		case 2:
			qsort(pc->data, pc->size, sizeof(struct PeoInfo), int_cmp);//进行排序
			printf("成功按照年龄进行排序~!\n");
			input = 0;
			break;
		default:
			printf("输入错误,请重新输入~!\n");
			break;
		}
	} while (input);
}

10.保存联系人信息

        为了实现保存联系人这个操作,我们这里用到了文件的方式对其进行存储,当我们输入完信息后,可以进行对所有信息进行保存。

        为了更合理,这个功能在我们退出的时候也会进行实现~!

void SaveContact(struct Contact* pc)
{
	assert(pc);
	FILE* pfWrite = fopen("contact.dat", "wb");//把通讯录中的信息写到文件中
	if (pfWrite == NULL)//判断是否打开成功
	{
		perror("SaveContact");
		return;
	}
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pfWrite);//以二进制的形式进行写入文件
	}
	fclose(pfWrite);
	pfWrite = NULL;
}

11.释放空间

        在我们添加联系人之后,为了保证不出现内存泄漏的问题,我们申请完动态空间后不用了要对其进行释放,这个操作是在我们退出这个程序的时候进行实现的。

        在我们退出程序的时候这个功能和上面那个保存联系人是一起实现的~!

void DestroyContact(struct Contact* pc)
{
	assert(pc);
	free(pc->data);
	pc->data = NULL;
}

12.总体代码呈现

Contact.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define MAX_NAME 20
#define MAX_AGE 4
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30

#define DEFAULT_SZ 3
enum Option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT,
	SAVE
};

typedef struct PeoInfo
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];

}PeoInfo;

typedef struct Contact
{
	struct PeoInfo* data;//存放通讯录的信息
	int size;//记录已有的元素个数
	int capacity;//当前通讯录的最大容量

}Contact;


//初始化通讯录函数
void InitContact(struct Contact* pc);

//将通讯录加载过来
void LoadContact(struct Contact* pc);

//增加联系人
void AddContact(struct Contact* pc);

//展示联系人
void ShowContact(struct Contact* pc);

//删除联系人
void DelContact(struct Contact* pc);

//查找联系人
void SearchContact(struct Contact* pc);

//修改联系人
void ModifyContact(struct Contact* pc);

//保存联系人
void SaveContact(struct Contact* pc);

//排序联系人
void SortContact(struct Contact* pc);

//释放动态空间
void DestroyContact(struct Contact* pc);

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"Contact.h"

void menu()
{
	printf("*****************************************\n");
	printf("****** 1. add           2. del    *******\n");
	printf("****** 3. search        4. modify *******\n");
	printf("****** 5. show          6. sort   *******\n");
	printf("****** 7. save          0. exit   *******\n");
	printf("*****************************************\n");
}

void test()
{
	int input = 0;
	struct Contact Con;
	InitContact(&Con);
	do
	{
		menu();
		printf("请选择操作->");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&Con);
			break;
		case DEL:
			DelContact(&Con);
			break;
		case SEARCH:
			SearchContact(&Con);
			break;
		case MODIFY:
			ModifyContact(&Con);
			break;
		case SHOW:
			ShowContact(&Con);
			break;
		case SORT:
			SortContact(&Con);
			break;
		case SAVE:
			SaveContact(&Con);
			break;
		case EXIT:
			SaveContact(&Con);//保存通讯录内容到文件夹
			DestroyContact(&Con);//释放动态内存
			break;
		default:
			printf("输入错误,请重新输入~!\n");
			break;
		}
	} while (input);
}

int main()
{
	test();
	return 0;
}

Contact.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"Contact.h"

void Menu()
{
	printf("*****************************************\n");
	printf("****** 1. name           2. age    *******\n");
	printf("*****************************************\n");
}

//声明函数
void CheckCapcity(struct Contact* pc);

void LoadContact(struct Contact* pc)
{
	assert(pc);
	PeoInfo tmp = { 0 };
	FILE* pfRead = fopen("contact.dat", "rb");//二进制读取
	if (pfRead == NULL)
	{
		perror("LoadContact");//报错误原因
		return;
	}
	while (fread(&tmp, sizeof(PeoInfo), 1, pfRead))//将保存过的放到tmp临时变量中
	{
		CheckCapcity(pc);//读取过程中如果满了就增容
		pc->data[pc->size] = tmp;//将tmp临时变量里的内容赋到通讯录中
		pc->size++;//增加一个人size++
	}
	fclose(pfRead);//关闭,置空
	pfRead = NULL;
}

void InitContact(struct Contact* pc)
{
	assert(pc);
	pc->data = (PeoInfo*)malloc(DEFAULT_SZ * sizeof(struct PeoInfo));//给data开辟一个动态内存,大小为struct(PeoInfo)
	if (pc->data == NULL)//判断是否开辟成功
	{
		perror("data");//如果错误就输出错误原因,并返回
		return;
	}
	pc->size = 0;//初始化
	pc->capacity = DEFAULT_SZ;//初始化
	LoadContact(pc);//把文件中已经存放的通讯录中的信息加载到通讯录中
}



void CheckCapcity(struct Contact* pc)
{
	assert(pc);
	if (pc->size == pc->capacity)
	{
		PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));//先开辟一个空间
		if (ptr != NULL)//如果开辟成功了
		{
			pc->data = ptr;//就把它赋给data
			pc->capacity += 2;//最大容量增加
			printf("增容成功\n");
		}
		else
		{
			printf("增容失败\n");
		}
	}
}


void AddContact(struct Contact* pc)
{
	assert(pc);
	//检测当前通讯录的容量
	//1. 如果满了,就增加空间
	//2. 如果不满,啥事都不干
	CheckCapcity(pc);//这里传的也是指针~!!!!
	//增加数据
	printf("请输入名字:>");
	scanf("%s", pc->data[pc->size].name);
	printf("请输入年龄:>");
	scanf("%d", &(pc->data[pc->size].age));
	printf("请输入性别:>");
	scanf("%s", pc->data[pc->size].sex);
	printf("请输入电话:>");
	scanf("%s", pc->data[pc->size].tele);
	printf("请输入地址:>");
	scanf("%s", pc->data[pc->size].addr);
	pc->size++;//添加完一个,size增加
	printf("添加成功\n");
}


void ShowContact(struct Contact* pc)
{
	assert(pc);
	if (pc->size == 0)
		printf("通信录为空\n");
	else
	{
		int i = 0;
		printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\n", 
			"名字", "年龄", "性别", "电话", "地址");//标题
		for (i = 0; i < pc->size; i++)//数据
		{
			printf("%-20s\t%-4d\t%-5s\t%-12s\t%-30s\n",
				pc->data[i].name,
				pc->data[i].age,
				pc->data[i].sex,
				pc->data[i].tele,
				pc->data[i].addr);
		}
	}
}

int FindByName(struct Contact* pc , char name[MAX_NAME])
{
	assert(pc);
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
			return i;//找到了
	}
	return -1;//没找到
}


void DelContact(struct Contact* pc)
{
	assert(pc);
	char name[MAX_NAME];
	int pos = 0;
	printf("请输入要删除人的姓名:>");
	scanf("%s", name);
	//1. 查找要删除的人在什么位置
	//找到了返回名字所在元素的下标
	//找不到返回 -1
	pos = FindByName(pc, name);//传的是地址pc和输入的名字

	//删除联系人
	if (pos == -1)
		printf("要删除的联系人不存在\n");
	else
	{
		int j = 0;
		for (j = pos; j < pc->size - 1; j++)//覆盖
		{
			pc->data[j] = pc->data[j + 1];
		}
		pc->size--;
		printf("删除成功\n");
	}
}


void SearchContact(struct Contact* pc)
{
	assert(pc);
	char name[MAX_NAME];
	int pos = 0;
	printf("请输入要查找人的姓名:>");
	scanf("%s", name);
	pos = FindByName(pc, name);
	
	if (pos == -1)
		printf("要查找的人不存在\n");
	else
	{
		printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
		printf("%-20s\t%-4d\t%-5s\t%-12s\t%-30s\n",
			pc->data[pos].name,
			pc->data[pos].age,
			pc->data[pos].sex,
			pc->data[pos].tele,
			pc->data[pos].addr);
	}
}

void ModifyContact(struct Contact* pc)
{
	assert(pc);
	char name[MAX_NAME];
	int pos = 0;
	printf("请输入要修改人的姓名:>");
	scanf("%s", name);
	pos = FindByName(pc, name);

	if (pos == -1)
		printf("要修改的人不存在\n");
	else//如果存在就重新输入一遍人的信息进行覆盖
	{
		printf("请输入名字:>");
		scanf("%s", pc->data[pos].name);
		printf("请输入年龄:>");
		scanf("%d", &(pc->data[pos].age));
		printf("请输入性别:>");
		scanf("%s", pc->data[pos].sex);
		printf("请输入电话:>");
		scanf("%s", pc->data[pos].tele);
		printf("请输入地址:>");
		scanf("%s", pc->data[pos].addr);
		printf("修改成功\n");
	}
}

int char_cmp(const void* p1, const void* p2)
{
	//return strcmp(((struct PeoInfo*)p1), ((struct PeoInfo*)p2));
	return strcmp(((struct PeoInfo*)p1)->name, ((struct PeoInfo*)p2)->name);
}
int int_cmp(const void* p1, const void* p2)
{
	return ((struct PeoInfo*)p1)->age - ((struct PeoInfo*)p2)->age;
}

void SortContact(struct Contact* pc)
{
	assert(pc);
	int input;
	do
	{
		Menu();
		printf("请输入按照什么要求排序:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			//qsort(pc->data->name, pc->size, sizeof(struct PeoInfo), char_cmp);
			qsort(pc->data, pc->size, sizeof(struct PeoInfo), char_cmp);//进行排序
			printf("成功按照姓名进行排序~!\n");
			input = 0;
			break;
		case 2:
			qsort(pc->data, pc->size, sizeof(struct PeoInfo), int_cmp);//进行排序
			printf("成功按照年龄进行排序~!\n");
			input = 0;
			break;
		default:
			printf("输入错误,请重新输入~!\n");
			break;
		}
	} while (input);
}


void DestroyContact(struct Contact* pc)
{
	assert(pc);
	free(pc->data);
	pc->data = NULL;
}

void SaveContact(struct Contact* pc)
{
	assert(pc);
	FILE* pfWrite = fopen("contact.dat", "wb");//把通讯录中的信息写到文件中
	if (pfWrite == NULL)//判断是否打开成功
	{
		perror("SaveContact");
		return;
	}
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pfWrite);//以二进制的形式进行写入文件
	}
	fclose(pfWrite);
	pfWrite = NULL;
}

13.小总结

        在这里我用的多文件的形式进行编写的,这里可能还可以实现一些功能,我想到的是删除所有联系人信息,但是又感觉不太合理,当然这个功能很简单,只要将联系人初始化就好了,大家如果对我这篇文章有疑问或者建议,欢迎大家在评论区中告诉我,我们一起讨论,一起学习,一起进大厂~!

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NPC Online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值