Sistema de gestión de libreta de direcciones (lenguaje C)


Prefacio

En este artículo presentaremos cómo implementar un sistema de gestión de libreta de direcciones. Sus funciones se presentan a continuación: La libreta de direcciones se puede utilizar para almacenar la información de 1000 personas. La información de cada persona incluye:Nombre, sexo, edad, número de teléfono, dirección. Podemos realizar las siguientes operaciones en la libreta de direcciones: agregar información de contacto, eliminar información de contacto específica, buscar información de contacto específica, modificar información de contacto específica, mostrar toda la información de contacto, borrar todos los contactos, ordenar todo por edad de la persona de contacto.


1. El archivo de encabezado del proyecto contiene la definición de la estructura y la declaración e introducción de la función.

#pragma once
#include <stdio.h>
#define MAXSIZE 1000//通讯录的最大容量
#include <string.h>//使用字符串函数
typedef struct Node
{
    
    
	char name[15];//姓名
	char sex[4];//性别
	int age;//年龄
	char tel[14];//电话号码
	char address[10];//家庭住址
}Node;//
typedef struct people
{
    
    
	int size;//记录当前通讯录中人数多少
	Node node[MAXSIZE];//定义一个数组来记录每一个人的信息
}people;
//初始化结构体
void InitPeople(people* arr);
//向结构体中添加人数
void add(people* arr);
//展示我们通讯录中现有人物的基本信息
void show(const people* arr);
//清空通讯录
void clear(people* arr);
//通过姓名,查找通讯录中具体的那个人
int search(const people* arr);
//删除通讯录中的一个人
void del(people* arr);
//修改通讯录中一个人的信息
void modify(people* arr);
//按照通讯录中人物的年龄进行排序
void sort_contact(people* arr);

2. Implementación de funciones específicas

1. Estructura de inicialización

Porque cuando comenzamos, nuestra libreta de direcciones no estaba llena de información de contacto, por lo que el número actual de personas en la estructura de inicialización es 0.

El código se muestra a continuación:

void InitPeople(people* arr)
{
    
    
	arr->size = 0;
}

2. Agregar información de contacto

Cuando nuestro número actual de personas no alcanza el límite máximo de personas almacenadas en la libreta de direcciones, podemos agregar información de contacto a la libreta de direcciones.

El código se muestra a continuación:

void add(people* arr)
{
    
    
	if (arr->size >= MAXSIZE - 1)
		printf("通讯录已满,无法添加\n");
	printf("请输入您要添加的姓名:>");
	scanf("%s", arr->node[arr->size].name);
	printf("请输入您要添加人的性别:>");
	scanf("%s", arr->node[arr->size].sex);

	printf("请输入您要添加人的年龄:>");
	scanf("%d", &arr->node[arr->size].age);
	printf("请输入您要添加人的电话号码:>");
	scanf("%s", arr->node[arr->size].tel);
	printf("请输入您要添加联系人的地址:>");
	scanf("%s", arr->node[arr->size].address);
	arr->size++;
}

3. Mostrar toda la información de contacto

Cuando el número de contactos en nuestra libreta de direcciones no es 0, imprimimos la información de todos los contactos en nuestra libreta de direcciones.

El código se muestra a continuación:

void show(const people* a)
{
    
    
	if (a->size == 0)
	{
    
    
		printf("您的通讯录为空\n");
		return;
	}
	printf("%-15s%-15s%-15s%-15s%-15s\n", 
	"姓名", "性别", "年龄", "电话", "住址");
	for (int i = 0; i < a->size; i++)
	{
    
    
		printf("%-15s%-15s%-15d%-15s%-15s\n",
		 a->node[i].name, a->node[i].sex,
		  a->node[i].age, a->node[i].tel, a->node[i].address);
	}
	printf("\n");
}

4. Borrar libreta de direcciones

Siempre que el número de personas en la libreta de direcciones se reduzca a 0, se podrá borrar toda la información de contacto.

El código se muestra a continuación:

void clear(people* arr)
{
    
    
	arr->size = 0;
	printf("您的通讯录已经清空\n");
}

5. Encuentra un contacto por nombre

El código se muestra a continuación:

//找到匹配的人名返回下标,否则返回-1
int search(const people* arr)
{
    
    
	char tem[20];
	printf("请输入您要查找的人的名字:>");
	scanf("%s", tem);
	for (int i = 0; i < arr->size; i++)
	{
    
    
		if (strcmp(arr->node[i].name, tem) == 0)
		{
    
    
			return i;
		}
	}
	return -1;
}

6. Eliminar contactos

//在通讯录中查找与输入姓名相同的姓名下标,否则返回-1
int find_by_name(people *arr,char tem[])
{
    
    
	if (arr->size == 0)return -1;
	for (int i = 0; i < arr->size; i++)
	{
    
    
		if (strcmp(arr->node[i].name, tem) == 0)
			return i;
	}
	return -1;
}
void del(people* arr)
{
    
    
	printf("请输入您要删除联系人的姓名:>");
	char tem[20];
	scanf("%s", tem);
	int ret = find_by_name(arr, tem);
	if (ret == -1)printf("您要删除的联系人不存在");
	else
	{
    
    
		for (int i = ret; i < arr->size - 1; i++)
		{
    
    
			strcpy(arr->node[i].name, arr->node[i + 1].name);
			strcpy(arr->node[i].address, arr->node[i + 1].address);
			strcpy(arr->node[i].sex, arr->node[i + 1].sex);
			strcpy(arr->node[i].tel, arr->node[i + 1].tel);
			arr->node[i].age = arr->node[i + 1].age;
		}
		arr->size--;
	}
}

7. Modificar la información de contacto

int find_by_name(people *arr,char tem[])
{
    
    
	if (arr->size == 0)return -1;
	for (int i = 0; i < arr->size; i++)
	{
    
    
		if (strcmp(arr->node[i].name, tem) == 0)
			return i;
	}
	return -1;
}
void modify(people* arr)
{
    
    
	printf("请您输入您要修改哪位联系人的信息:>");
	char tem[20];
	scanf("%s", tem);
	int ret = find_by_name(arr, tem);
	if (ret == -1)
	{
    
    
		printf("您输入的联系人不存在于您的通讯录。\n");
	}
	else
	{
    
    
		printf("请输入您要修改的姓名:>");
		scanf("%s", arr->node[ret].name);
		printf("请输入您要修改人的性别:>");
		scanf("%s", arr->node[ret].sex);
		printf("请输入您要修改人的年龄:>");
		scanf("%d", &arr->node[ret].age);
		printf("请输入您要修改人的电话号码:>");
		scanf("%s", arr->node[ret].tel);
		printf("请输入您要修改联系人的地址:>");
		scanf("%s", arr->node[ret].address);
	}
}

8. Ordenar contactos por edad

Utilizando principalmente la función de biblioteca qsort en lenguaje C

int my_compar(const void* s1, const void* s2)
{
    
    
	return ((Node*)s1)->age - ((Node*)s2)->age;
}
void sort_contact(people* arr)
{
    
    
	qsort(arr->node, arr->size, sizeof(arr->node[0]), my_compar);
}

Resumir

A través de este proyecto, tenemos una comprensión más profunda de las estructuras y funciones. Espero que este blog te sea útil.

Supongo que te gusta

Origin blog.csdn.net/weixin_63614711/article/details/128751886
Recomendado
Clasificación