mi libreta de direcciones

Vamos a implementar una libreta de direcciones en lenguaje C

Esta libreta de direcciones puede contener la información de 1000 personas, incluidos el nombre, la edad, el sexo, el número de teléfono y la dirección de todos.

Las características incluyen:

  1. Añadir contactos
  2. borrar contacto
  3. encontrar un contacto
  4. Editar información de contacto
  5. imprimir información de contacto

contenido

1. Menú

2. Función de prueba, función principal

3. Realización de información de contacto y libreta de direcciones

4. Inicializar la libreta de direcciones

5. Agregar función de contacto

6. Eliminar la función de contacto

7. Función Buscar contactos

8. Modificar la función de contacto

9. Función de contacto de impresión

10. Código completo


1. Menú

void menu()
{
	printf("**************************************\n");
	printf("**************************************\n");
	printf("*****  1.add         2.del      ******\n");
	printf("*****  3.search      4.modify   ******\n");
	printf("*****  5.printf      0.exi      ******\n");
	printf("**************************************\n");
	printf("**************************************\n");
}

2. Función de prueba, función principal

void test()
{
	int input = 0;
	Contact con;
	InitialContact(&con);
	do
	{
		menu();
		printf("请选择:>\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddContact(&con);
			break;
		case 2:
			DelContact(&con);
			break;
		case 3:
			SearchContact(&con);
			break;
		case 4:
			ModifyContact(&con);
			break;
		case 5:
			PrintContact(&con);
			break;
		case 0:
			printf("退出通讯录\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (input);
}

int main()
{
	test();
}

3. Realización de información de contacto y libreta de direcciones

typedef struct peoinfo
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
}peoinfo;

typedef struct Contact
{
	peoinfo data[MAX];
	int sz;
}Contact;

4. Inicializar la libreta de direcciones

void InitialContact(Contact *pc)
{
	assert(pc);
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}

5. Agregar función de contacto

void AddContact(Contact *pc)
{
	assert(pc);
	if (pc->sz == MAX)
	{
		printf("通讯录已经满啦!!!无法添加!!!\n");
		return ;
	}
	printf("请输入名字:\n");
	scanf("%s", pc->data[pc->sz].name);
	printf("请输入年龄:\n");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("请输入性别:\n");
	scanf("%s", pc->data[pc->sz].sex);
	printf("请输入电话:\n");
	scanf("%s", pc->data[pc->sz].tele);
	printf("请输入地址:\n");
	scanf("%s", pc->data[pc->sz].addr);

	pc->sz++;
	printf("添加成功\n");
}

6. Eliminar la función de contacto

void DelContact(Contact *pc)
{
	assert(pc);
	if (pc->sz == 0)
	{
		printf("您已经没有朋友了,无法删除\n");
		return;
	}
	char name[NAME_MAX];
	printf("请输入要删除人的名字:\n");
	scanf("%s", &name);
	int pos = FindByName(pc,name);
	if (pos == -1)
	{
		printf("联系人不存在!\n");
		return;
	}
	int j = pos;
	for (j = pos; j < pc->sz-1; j++)
	{
		pc->data[j] = pc->data[j + 1];
	}
	pc->sz--;
	printf("删除成功\n");
}

7. Función Buscar contactos

void SearchContact( Contact *pc)
{
	char name1[NAME_MAX];
	printf("请输入要查找人的名字:\n");
	scanf("%s", &name1);
	int pos = FindByName(pc, name1);
	if (pos == -1)
	{
		printf("联系人不存在!\n");
		return;
	}
	printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");
	printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[pos].name, pc->data[pos].age,
			pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
}

int FindByName(const Contact *pc,char* name)/*找到返回下标,找不到返回-1*/
{
	assert(pc);
	for (int i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

8. Modificar la función de contacto

void ModifyContact(Contact *pc)
{
	char name[NAME_MAX];
	printf("请输入要修改人的名字:\n");
	scanf("%s", &name);
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("联系人不存在!\n");
		return;
	}
	printf("请输入修改后的名字:\n");
	scanf("%s", pc->data[pos].name);
	printf("请输入修改后的年龄:\n");
	scanf("%d", &(pc->data[pos].age));
	printf("请输入修改后的性别:\n");
	scanf("%s", pc->data[pos].sex);
	printf("请输入修改后的电话:\n");
	scanf("%s", pc->data[pos].tele);
	printf("请输入修改后的地址:\n");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功\n");
}

9. Función de contacto de impresión

void PrintContact(const Contact *pc)
{
	assert(pc);
	printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名","年龄", "性别", "电话", "地址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[i].name, pc->data[i].age,
			pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}

10. Código completo

archivo de encabezado contact.h

#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 30
#define MAX 1000

typedef struct peoinfo
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
}peoinfo;

typedef struct Contact
{
	peoinfo data[MAX];
	int sz;
}Contact;

void AddContact(Contact* pc);

void PrintContact(const Contact* pc);

void InitialContact(Contact* pc);

void DelContact(Contact* pc);

void SearchContact(const Contact* pc);

void ModifyContact(Contact* pc);

int FindByName(Contact* pc, char* name);

archivo fuente prueba.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"


void menu()
{
	printf("**************************************\n");
	printf("**************************************\n");
	printf("*****  1.add         2.del      ******\n");
	printf("*****  3.search      4.modify   ******\n");
	printf("*****  5.printf      0.exi      ******\n");
	printf("**************************************\n");
	printf("**************************************\n");
}


void test()
{
	int input = 0;
	Contact con;
	InitialContact(&con);
	do
	{
		menu();
		printf("请选择:>\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddContact(&con);
			break;
		case 2:
			DelContact(&con);
			break;
		case 3:
			SearchContact(&con);
			break;
		case 4:
			ModifyContact(&con);
			break;
		case 5:
			PrintContact(&con);
			break;
		case 0:
			printf("退出通讯录\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (input);
}

int main()
{
	test();

}

Archivo fuente contacto.c

define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"

void InitialContact(Contact *pc)
{
	assert(pc);
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}

void AddContact(Contact *pc)
{
	assert(pc);
	if (pc->sz == MAX)
	{
		printf("通讯录已经满啦!!!无法添加!!!\n");
		return ;
	}
	printf("请输入名字:\n");
	scanf("%s", pc->data[pc->sz].name);
	printf("请输入年龄:\n");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("请输入性别:\n");
	scanf("%s", pc->data[pc->sz].sex);
	printf("请输入电话:\n");
	scanf("%s", pc->data[pc->sz].tele);
	printf("请输入地址:\n");
	scanf("%s", pc->data[pc->sz].addr);

	pc->sz++;
	printf("添加成功\n");
}

void DelContact(Contact *pc)
{
	assert(pc);
	if (pc->sz == 0)
	{
		printf("您已经没有朋友了,无法删除\n");
		return;
	}
	char name[NAME_MAX];
	printf("请输入要删除人的名字:\n");
	scanf("%s", &name);
	int pos = FindByName(pc,name);
	if (pos == -1)
	{
		printf("联系人不存在!\n");
		return;
	}
	int j = pos;
	for (j = pos; j < pc->sz-1; j++)
	{
		pc->data[j] = pc->data[j + 1];
	}
	pc->sz--;
	printf("删除成功\n");
}

void SearchContact( Contact *pc)
{
	char name1[NAME_MAX];
	printf("请输入要查找人的名字:\n");
	scanf("%s", &name1);
	int pos = FindByName(pc, name1);
	if (pos == -1)
	{
		printf("联系人不存在!\n");
		return;
	}
	printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");
	printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[pos].name, pc->data[pos].age,
			pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
}

void ModifyContact(Contact *pc)
{
	char name[NAME_MAX];
	printf("请输入要修改人的名字:\n");
	scanf("%s", &name);
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("联系人不存在!\n");
		return;
	}
	printf("请输入修改后的名字:\n");
	scanf("%s", pc->data[pos].name);
	printf("请输入修改后的年龄:\n");
	scanf("%d", &(pc->data[pos].age));
	printf("请输入修改后的性别:\n");
	scanf("%s", pc->data[pos].sex);
	printf("请输入修改后的电话:\n");
	scanf("%s", pc->data[pos].tele);
	printf("请输入修改后的地址:\n");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功\n");
}


void PrintContact(const Contact *pc)
{
	assert(pc);
	printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名","年龄", "性别", "电话", "地址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[i].name, pc->data[i].age,
			pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}

int FindByName(const Contact *pc,char* name)/*找到返回下标,找不到返回-1*/
{
	assert(pc);
	for (int i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

Supongo que te gusta

Origin blog.csdn.net/m0_63742310/article/details/123777522
Recomendado
Clasificación