El lenguaje C implementa la libreta de direcciones (incluido el guardado de archivos)

contenido

1. Resultados de la prueba

2. Idea general

3. Definición de estructura 

4. Construcción de funciones básicas

5. Interpretación del código del módulo

(1), menú de visualización

(2), inicialice la libreta de direcciones

(3), aumentar la capacidad de la libreta de direcciones

(4), añadir contactos

(5), buscar contactos

(6), eliminar contactos

(7), modificar el contacto

(8), ordenar los contactos en la libreta de direcciones por nombre

(9), mostrar libreta de direcciones

(10), guarde el archivo

(11), cargar información del archivo

(12), liberar espacio

6, la implementación general del código

  contacto.h

  contacto.c

  prueba.c


Hola amigos

Hoy, compartiré con ustedes una implementación de una libreta de direcciones, que incluye punteros, estructuras, asignación de memoria dinámica y lectura y escritura de archivos. El artículo es un poco largo. El código completo de la libreta de direcciones se encuentra al final del artículo. I Espero que puedas leerlo con paciencia y ganar algo. Oh

1. Resultados de la prueba

Este es el resultado de usar esta libreta de direcciones inicialmente, todavía no hay una lista de contactos en el archivo.

Después de salir de este programa, encontraremos que hay un archivo de texto debajo de la ruta del proyecto, que registra la información de contacto anterior. Cuando se vuelva a usar el programa, la información de contacto guardada en el archivo se cargará nuevamente. Por favor, vea la imagen a continuación:

La eliminación, búsqueda, clasificación y modificación de los contactos en él no se demostrarán aquí, de lo contrario, las capturas de pantalla serán demasiado largas  . Los amigos interesados ​​​​pueden tomarlo y probarlo en su propio compilador para ver el efecto. Así que vayamos directo al tema ahora~

2. Idea general

El estilo general del código sigue siendo el mismo que los tres ajedrez y buscaminas escritos antes , o se crean tres archivos, o la implementación de cada función se coloca primero en el archivo contact.c y luego en el archivo de encabezado contact.h. estas funciones en Declaración, de modo que se pueda hacer referencia directa a contact.h en el archivo test.c, y se puedan usar las funciones en contact.c, lo que puede garantizar que la lógica de la función principal sea clara, concisa y fácil de entender.

3. Definición de estructura 

Debido a que es una libreta de direcciones, es necesario registrar el nombre, el sexo, la edad, la dirección, el número de teléfono, etc. de cada persona, por lo que defino una estructura de contacto que contiene información diversa sobre una persona.

typedef struct PeoInfo
{
    char name[NAME_MAX];
    int age;
    char number[NUMBER_MAX];
    char adress[ADDR_MAX];
    char sex[SEX_MAX];
}PeoInfo;

 Luego, para facilitar la gestión de la información en la libreta de direcciones, creé una estructura sobre la libreta de direcciones.

typedef struct Contact
{
	PeoInfo* data;//存放数据
	int capacity;//当前通讯录容量
	int sz;//实际有效信息数量
}Contact;

4. Construcción de funciones básicas

enum Option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SORT,
	SHOW
};
void menu()
{
	printf("***************菜单****************\n");
	printf("****** 1.add        2.del    ******\n");
	printf("****** 3.search     4.modify ******\n");
	printf("****** 5.sort       6.show   ******\n");
	printf("****** 0.exit                ******\n");
	printf("***********************************\n");


}
void test()
{
	Contact con;
	InitContact(&con);//初始化通讯录
	int input = 0;
	do
	{
		menu();
		printf("请选择->");
		scanf("%d", &input);
		switch (input)
		{
			case ADD:
				//增加联系人
				AddContact(&con);
				break;
			case DEL:
				//删除联系人
				DeleteContact(&con);
				break;
			case SEARCH:
				//查找联系人
				FindContact(&con);
				break;
			case MODIFY:
				//修改联系人
				ModifyContact(&con);
				break;
			case SORT:
				//对通讯录进行排序(按名字)
				SortContact(&con);
				break;
			case SHOW:
				//显示联系人
				ShowContact(&con);
				break;
			case EXIT:
				SaveContact(&con);
				DestroyContact(&con);
				printf("退出通讯录\n");
				break;
			default:
				printf("选择错误,请重新选择!\n");
				break;
		}
		
	}while (input);
}

 La sentencia do-while y la sentencia switch se utilizan principalmente aquí para conectar varias funciones en serie para formar un proyecto relativamente completo. Dado que el objeto de la operación es la información de la libreta de direcciones, se define una variable con del tipo libreta de direcciones. Mirando este código, no debería ser difícil encontrar que básicamente los parámetros de cada función están en contra. A continuación se explicará una por una cada una de las funciones involucradas en él.

5. Interpretación del código del módulo

(1), menú de visualización

Esto es demasiado simple, vaya directamente al código ~

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

}

No se preocupe, las diversas funciones del menú se explicarán una por una más adelante.

(2), inicialice la libreta de direcciones

Debido a que la libreta de direcciones no tiene información sobre los contactos al principio, debemos establecer su número real de información válida en 0 y luego solicitar un espacio del tamaño de PeoInfo para almacenar la información. Inicialmente, los datos también son información variada. de contactos Establézcalo en vacío. El siguiente paso es establecer la capacidad de esta libreta de direcciones. Si la aplicación espacial falla, se imprimirá un mensaje de error para facilitar la inspección y el mantenimiento posteriores.

Pero si no es la primera vez que usa este programa, la información de contacto registrada anteriormente se cargará automáticamente cuando se inicie el programa, lo cual es conveniente para ver y modificar. Así que utilicé el conocimiento del archivo para escribir una función LoadContact() que carga información (no te preocupes

Su implementación específica se describirá más adelante), que se carga durante la inicialización.

void InitContact(Contact* pc)
{
	assert(pc);
	pc->sz = 0;
	PeoInfo *tmp = (PeoInfo*)malloc(DEFAULT_SZ *sizeof(PeoInfo));
	if (tmp != NULL)
	{
		pc->data = tmp;
	}
	else
	{
		printf("InitContact()::%s\n", strerror(errno));
		return;
	}
	pc->capacity = DEFAULT_SZ;
	LoadContact(pc);

}

(3), aumentar la capacidad de la libreta de direcciones

Esta función se implementa utilizando el conocimiento de la gestión de memoria dinámica. Cada vez que la capacidad de la PC de la libreta de direcciones es igual a la cantidad real de información válida almacenada (la cantidad de personas almacenadas en la libreta de direcciones), necesito aumentar la capacidad de la libreta de direcciones para poder agregar contactos posteriores . Es decir, use la función realloc() para cambiar la capacidad (memoria) de la libreta de direcciones.

int  addcapacity(Contact* pc)
{
	assert(pc);
	if (pc->sz == pc->capacity)
	{
		PeoInfo* tmp = (PeoInfo*)realloc(pc->data, sizeof(PeoInfo)*(pc->capacity+ 2));
		if (tmp != NULL)
		{
			pc->data = tmp;
			pc->capacity += 2;
			//printf("增容成功\n");
			return 1;
		}
		else
		{
			
			printf("addcapacity()::%s\n", strerror(errno));
			return 0;
		}
	}
	return 1;
	
}

(4), añadir contactos

La función AddContact() se usa para agregar contactos. Llamar a esta función significa agregar información de contacto a la libreta de direcciones. Sin embargo, cada vez que se agrega información de contacto, es necesario evaluar la capacidad de la libreta de direcciones. Cuando el registro está lleno , Aumentaré la capacidad. Por lo tanto, al comienzo de la función AddContact(), llamo a una función que escribí. Su función es determinar si la libreta de direcciones se ha llenado. Si la capacidad no aumenta por el momento , se devolverá 1 si el aumento de capacidad tiene éxito o si se considera que no se aumentará, y se devolverá 0 si falla el aumento de capacidad. Los contactos se pueden agregar a la libreta de direcciones solo después de que se considere que la capacidad de la libreta de direcciones es suficiente o que la capacidad se incrementó con éxito.

De hecho, agregar un contacto es muy simple, es decir, asignar un valor a los datos de tipo de contacto en la estructura de la libreta de direcciones. Cada vez que se agrega un contacto, el número real de información válida sz en la libreta de direcciones pc aumenta en uno. .

void AddContact(Contact* pc)
{	
	assert(pc);
	int i=addcapacity(pc);
	if (i)
	{
		printf("请输入姓名->");
		scanf("%s", pc->data[pc->sz].name);
		printf("请输入性别->");
		scanf("%s", pc->data[pc->sz].sex);
		printf("请输入年龄->");
		scanf("%d", &(pc->data[pc->sz].age));
		printf("请输入住址->");
		scanf("%s", pc->data[pc->sz].adress);
		printf("请输入电话->");
		scanf("%s", pc->data[pc->sz].number);
		pc->sz++;
		printf("添加联系人成功!\n");
	}
	else
	{
		printf("AddContact::%s\n", strerror(errno));
	}
			
}

(5), buscar contactos

La información de contacto se almacena en una matriz de tipo de contacto. Buscar un contacto es en realidad equivalente a recorrer la matriz. Cuando se ingresa el nombre del contacto a buscar, se recorrerá la matriz. Devuelve el índice de la matriz si se encuentra y -1 si no se encuentra.

int FindPeoInfo(char* name, Contact* pc)//查找联系人,返回其下标
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (*name == *(pc->data[i].name))
		{
			return i;
		}
	}
	return -1;
}

(6), eliminar contactos

Eliminar un contacto es en realidad sobrescribir el contacto eliminado y mover la información de contacto detrás del contacto que se eliminará hacia adelante. Antes de eliminar un contacto, necesitamos encontrar el índice de matriz correspondiente al contacto, y luego debemos llamar a FindPeoInfo. () función, y luego avanzar el siguiente elemento de este elemento y los siguientes elementos a su vez para cubrir. Una vez completada la cobertura, el número real de personas con información válida sz en la libreta de direcciones se reduce en uno.

void DeleteContact(Contact* pc)//删除联系人
{
	char name[NAME_MAX] = "0";
	int i = 0;
	printf("请输入要删除的联系人姓名->");
	scanf("%s", name);
	//查找联系人
	int flag=FindPeoInfo(name,pc);
	if (flag != -1)
	{
		for (i = flag; i < pc->sz-1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->sz--;
		printf("删除成功!\n");
	}
	else
	{
		printf("没有找到您需要删除的人!\n");
	}
}

(7), modificar el contacto

Modificar un contacto es reasignar los elementos en la matriz de datos de tipo de contacto asignada originalmente para lograr un efecto del cambio. Asimismo, sigue siendo necesario llamar a FindPeoInfo() para encontrar el contacto a modificar antes de modificarlo.

void ModifyContact(Contact* pc)//修改联系人
{
	char name[NAME_MAX] = "0";
	printf("请输入要修改的联系人姓名->");
	scanf("%s", name);
	int flag = FindPeoInfo(name, pc);
	if (flag == -1)
	{
		printf("查无此人\n");
		return;
	}
	else
	{
		int input = 0;
		do
		{
			/*char rename[NAME_MAX] = "0";
			int reage = 0;
			char resex[] = "0";
			char readdress[] = "0";
			char*/
			printf("1.姓名  2.年龄  3.性别  4.住址  5.电话  0.退出\n");
			printf("请输入要修改的选项(按0退出修改)->");
			scanf("%d", &input);
			switch (input)
			{
				case 1:
				
					printf("请输入改正后的姓名->");
					scanf("%s", pc->data[flag].name);
					break;
				case 2:
					printf("请输入改正后的年龄->");
					scanf("%d", &(pc->data[flag].age));
					break;
				case 3:
					printf("请输入改正后的性别->");
					scanf("%s", pc->data[flag].sex);
					break;
				case 4:
					printf("请输入改正后的住址->");
					scanf("%s", pc->data[flag].adress);
					break;
				case 5:
					printf("请输入改正后的电话->");
					scanf("%s", pc->data[flag].number);
					break;
				case 0:
					break;
				default:
					printf("输入错误,请重新输入!\n");
					break;
			}
		} while(input);
		printf("修改成功!\n");
	}

}

 (8), ordenar los contactos en la libreta de direcciones por nombre

Esto también es muy simple, simplemente llame a la función qsort() para ordenar el nombre de la cadena en el tipo de estructura. No entraré en demasiados detalles, solo mira el código~

//对联系人进行排序(按名字)
int compare_Peo(const void* e1, const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name,((PeoInfo*)e2)->name);
}
void SortContact(Contact* pc)
{
	qsort(pc->data, pc->sz, sizeof(pc->data[0]), compare_Peo);
	printf("排序成功\n");
	ShowContact(pc);
}

(9), mostrar libreta de direcciones

La implementación de esta función es determinar primero si el número real de información válida en la libreta de direcciones es 0. Si es 0, significa que no hay nadie en la libreta de direcciones. Si no es 0, atraviesa los datos matriz del tipo de contacto y los imprime uno por uno.

void ShowContact(Contact* pc)//显示通讯录
{
	assert(pc);
	if (pc->sz == 0)
	{
		printf("通讯录里无联系人!\n");
	}
	else
	{
		int i = 0;
		printf("%-7s\t%-7s\t%-6s\t%-20s\t%-15s\n", "姓名", "性别", "年龄", "住址", "电话");
		for (i = 0; i < pc->sz; i++)
		{
			printf("%-7s\t%-7s\t%-6d\t%-20s\t%-15s\n",
				pc->data[i].name, pc->data[i].sex, pc->data[i].age,
				pc->data[i].adress, pc->data[i].number);
		}
	}
}

(10), guarde el archivo

La función de esta función es escribir la modificación de la información en la libreta de direcciones en un archivo en forma binaria y guardarlo en la ruta de este proyecto, lo cual es conveniente para ver la próxima vez que se inicie el programa.

//保存文件
void SaveContact(Contact* pc)
{
	FILE* fp = fopen("contact1.txt", "wb");
	if (fp == NULL)
	{
		printf("SaveContact::open for writting:%s", strerror(errno));
		return;
	}
	//写入文件
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		fwrite(pc->data + i, sizeof(PeoInfo), 1, fp);
	}
	//关闭文件
	fclose(fp);
	fp = NULL;
}

 (11), cargar información del archivo

Al iniciar este programa, primero debemos inicializar la libreta de direcciones (este paso se mencionó anteriormente) y luego cargar la información de contacto guardada anteriormente, de modo que sea conveniente usar este programa para la información de contacto anterior. Leer la información del archivo también es equivalente a agregar contactos, por lo que antes de leer, debe evaluar la capacidad de la libreta de direcciones para ver si es necesario aumentarla.

void LoadContact(Contact* pc)
{
	
	//打开文件
	FILE* pf = fopen("contact1.txt", "rb");
	if (pf == NULL)
	{
		printf("LoadContact::open for reading:%s\n", strerror(errno));
		return;
	}
	//读文件
	PeoInfo tmp = { 0 };
	while (fread(&tmp, sizeof(PeoInfo), 1, pf))
	{
		addcapacity(pc);
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
}

(12), liberar espacio

Debido a que el espacio de la matriz de tipo de contacto en la libreta de direcciones se aplica dinámicamente, cuando finalizamos este programa, primero usamos la función SaveContact() para guardar la información de contacto, luego liberamos este espacio y apuntaremos al puntero a este Establézcalo en NULL para evitar el acceso ilegal.

void DestroyContact(Contact* pc)//销毁
{
	free(pc->data);
	pc->data = NULL;
	pc->capacity = 0;
	pc->sz = 0;
}

6, la implementación general del código

contacto.h

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h> 
//#define MAX_SIZE 10
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define NUMBER_MAX 12
#define DEFAULT_SZ 3


typedef struct PeoInfo
{
	char name[NAME_MAX];
	int age;
	char number[NUMBER_MAX];
	char adress[ADDR_MAX];
	char sex[SEX_MAX];
}PeoInfo;

typedef struct Contact
{
	PeoInfo* data;//存放数据
	int capacity;//当前通讯录容量
	int sz;//实际有效信息数量
}Contact;

void InitContact(Contact* pc);//初始化通讯录
void AddContact(Contact* pc);//增加联系人
void ShowContact(Contact* pc);//显示通讯录
void DeleteContact(Contact* pc);//删除联系人
int FindPeoInfo(char* name, Contact* pc);//查找联系人,返回其下标
void FindContact(Contact* pc);//查找联系人
void ModifyContact(Contact* pc);//修改联系人
void SortContact(Contact* pc);//对联系人进行排序(按名字)
int addcapacity(Contact* pc);//增容
void DestroyContact(Contact* pc);//销毁通讯录
void LoadContact(Contact* pc);//加载通讯录
void SaveContact(Contact* pc);//保存通讯录


contacto.c

#include"contact.h"

//初始化通讯录
void InitContact(Contact* pc)
{
	assert(pc);
	pc->sz = 0;
	PeoInfo *tmp = (PeoInfo*)malloc(DEFAULT_SZ *sizeof(PeoInfo));
	if (tmp != NULL)
	{
		pc->data = tmp;
	}
	else
	{
		printf("InitContact()::%s\n", strerror(errno));
		return;
	}
	pc->capacity = DEFAULT_SZ;
	LoadContact(pc);

}
//判断是否增容
int  addcapacity(Contact* pc)
{
	assert(pc);
	if (pc->sz == pc->capacity)
	{
		PeoInfo* tmp = (PeoInfo*)realloc(pc->data, sizeof(PeoInfo)*(pc->capacity+ 2));
		if (tmp != NULL)
		{
			pc->data = tmp;
			pc->capacity += 2;
			//printf("增容成功\n");
			return 1;
		}
		else
		{
			
			printf("addcapacity()::%s\n", strerror(errno));
			return 0;
		}
	}
	return 1;
	
}
//加载文件
void LoadContact(Contact* pc)
{
	
	//打开文件
	FILE* pf = fopen("contact1.txt", "rb");
	if (pf == NULL)
	{
		printf("LoadContact::open for reading:%s\n", strerror(errno));
		return;
	}
	//读文件
	PeoInfo tmp = { 0 };
	while (fread(&tmp, sizeof(PeoInfo), 1, pf))
	{
		addcapacity(pc);
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
}

//增加联系人
void AddContact(Contact* pc)
{	
	assert(pc);
	int i=addcapacity(pc);
	if (i)
	{
		printf("请输入姓名->");
		scanf("%s", pc->data[pc->sz].name);
		printf("请输入性别->");
		scanf("%s", pc->data[pc->sz].sex);
		printf("请输入年龄->");
		scanf("%d", &(pc->data[pc->sz].age));
		printf("请输入住址->");
		scanf("%s", pc->data[pc->sz].adress);
		printf("请输入电话->");
		scanf("%s", pc->data[pc->sz].number);
		pc->sz++;
		printf("添加联系人成功!\n");
	}
	else
	{
		printf("AddContact::%s\n", strerror(errno));
	}
	
	
	

	
}
void ShowContact(Contact* pc)//显示通讯录
{
	assert(pc);
	if (pc->sz == 0)
	{
		printf("通讯录里无联系人!\n");
	}
	else
	{
		int i = 0;
		printf("%-7s\t%-7s\t%-6s\t%-20s\t%-15s\n", "姓名", "性别", "年龄", "住址", "电话");
		for (i = 0; i < pc->sz; i++)
		{
			printf("%-7s\t%-7s\t%-6d\t%-20s\t%-15s\n",
				pc->data[i].name, pc->data[i].sex, pc->data[i].age,
				pc->data[i].adress, pc->data[i].number);
		}
	}
}
int FindPeoInfo(char* name, Contact* pc)//查找联系人,返回其下标
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (*name == *(pc->data[i].name))
		{
			return i;
		}
	}
	return -1;
}

void DeleteContact(Contact* pc)//删除联系人
{
	char name[NAME_MAX] = "0";
	int i = 0;
	printf("请输入要删除的联系人姓名->");
	scanf("%s", name);
	//查找联系人
	int flag=FindPeoInfo(name,pc);
	if (flag != -1)
	{
		for (i = flag; i < pc->sz-1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->sz--;
		printf("删除成功!\n");
	}
	else
	{
		printf("没有找到您需要删除的人!\n");
	}
}
void FindContact(Contact* pc)//查找联系人
{
	char name[NAME_MAX] = "0";
	printf("请输入要查找的联系人姓名->");
	scanf("%s", name);
	int flag = FindPeoInfo(name, pc);
	if (flag != -1)
	{
		printf("%-7s\t%-7s\t%-6s\t%-20s\t%-15s\n", "姓名", "性别", "年龄", "住址", "电话");

		printf("%-7s\t%-7s\t%-6d\t%-20s\t%-15s\n",
			pc->data[flag].name, pc->data[flag].sex, pc->data[flag].age,
			pc->data[flag].adress, pc->data[flag].number);
	}
	else
	{
		printf("查无此人!\n");
	}
}

void ModifyContact(Contact* pc)//修改联系人
{
	char name[NAME_MAX] = "0";
	printf("请输入要修改的联系人姓名->");
	scanf("%s", name);
	int flag = FindPeoInfo(name, pc);
	if (flag == -1)
	{
		printf("查无此人\n");
		return;
	}
	else
	{
		int input = 0;
		do
		{
			/*char rename[NAME_MAX] = "0";
			int reage = 0;
			char resex[] = "0";
			char readdress[] = "0";
			char*/
			printf("1.姓名  2.年龄  3.性别  4.住址  5.电话  0.退出\n");
			printf("请输入要修改的选项(按0退出修改)->");
			scanf("%d", &input);
			switch (input)
			{
				case 1:
				
					printf("请输入改正后的姓名->");
					scanf("%s", pc->data[flag].name);
					break;
				case 2:
					printf("请输入改正后的年龄->");
					scanf("%d", &(pc->data[flag].age));
					break;
				case 3:
					printf("请输入改正后的性别->");
					scanf("%s", pc->data[flag].sex);
					break;
				case 4:
					printf("请输入改正后的住址->");
					scanf("%s", pc->data[flag].adress);
					break;
				case 5:
					printf("请输入改正后的电话->");
					scanf("%s", pc->data[flag].number);
					break;
				case 0:
					break;
				default:
					printf("输入错误,请重新输入!\n");
					break;
			}
		} while(input);
		printf("修改成功!\n");
	}

}

//对联系人进行排序(按名字)
int compare_Peo(const void* e1, const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name,((PeoInfo*)e2)->name);
}
void SortContact(Contact* pc)
{
	qsort(pc->data, pc->sz, sizeof(pc->data[0]), compare_Peo);
	printf("排序成功\n");
	ShowContact(pc);
}
void DestroyContact(Contact* pc)//空间销毁
{
	free(pc->data);
	pc->data = NULL;
	pc->capacity = 0;
	pc->sz = 0;
}
//保存文件
void SaveContact(Contact* pc)
{
	FILE* fp = fopen("contact1.txt", "wb");
	if (fp == NULL)
	{
		printf("SaveContact::open for writting:%s", strerror(errno));
		return;
	}
	//写入文件
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		fwrite(pc->data + i, sizeof(PeoInfo), 1, fp);
	}
	//关闭文件
	fclose(fp);
	fp = NULL;
}

prueba.c

#include"contact.h"
enum Option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SORT,
	SHOW
};
void menu()
{
	printf("***************菜单****************\n");
	printf("****** 1.add        2.del    ******\n");
	printf("****** 3.search     4.modify ******\n");
	printf("****** 5.sort       6.show   ******\n");
	printf("****** 0.exit                ******\n");
	printf("***********************************\n");


}
void test()
{
	Contact con;
	InitContact(&con);//初始化通讯录
	int input = 0;
	do
	{
		menu();
		printf("请选择->");
		scanf("%d", &input);
		switch (input)
		{
			case ADD:
				//增加联系人
				AddContact(&con);
				break;
			case DEL:
				//删除联系人
				DeleteContact(&con);
				break;
			case SEARCH:
				//查找联系人
				FindContact(&con);
				break;
			case MODIFY:
				//修改联系人
				ModifyContact(&con);
				break;
			case SORT:
				//对通讯录进行排序(按名字)
				SortContact(&con);
				break;
			case SHOW:
				//显示联系人
				ShowContact(&con);
				break;
			case EXIT:
				SaveContact(&con);
				DestroyContact(&con);
				printf("退出通讯录\n");
				break;
			default:
				printf("选择错误,请重新选择!\n");
				break;
		}
		
	}while (input);
}



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

Eso es todo para compartir. ¿Qué tal? ¿Es muy simple? Los amigos que tengan preguntas o no entiendan pueden preguntarme, si encuentran alguna.

Si tiene algún problema o se puede mejorar, también puede enviarlo en el área de comentarios o en el chat privado. Realmente espero recibir sus sugerencias.

Supongo que te gusta

Origin blog.csdn.net/m0_63039919/article/details/123183832
Recomendado
Clasificación