c语言通讯录

contact.h
#ifndef __CONTACT_H__ 
#define __CONTACT_H__ 

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

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


typedef struct Contact
{
	PeoInfo data[MAX];
	int sz;
}Contact, *pContact;


void InitContact(pContact pcon);
void AddContact(pContact pcon);
void ShowContact(const pContact pcon);
void DelContact(pContact pcon);
void SearchContact(pContact pcon);
void ModifyContact(pContact pcon);
void SortContach(pContact pcon);
void ClearContact(pContact pcon);

#endif

contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void InitContact(pContact pcon)
{
	pcon->sz = 0;
	memset(pcon->data, 0, sizeof(pcon->data));
}
void AddContact(pContact pcon)//添加联系人
{
	assert(pcon);
		if (pcon->sz == MAX)
		{
			printf("通讯录已满,请删除一些联系人后再添加");
			return;
		}
		printf("请输入要添加联系人的名字;");
		scanf("%s", pcon->data[pcon->sz].name);
		printf("请输入要添加联系人的性别;");
		scanf("%s", pcon->data[pcon->sz].sex);
		printf("请输入要添加联系人的年龄;");
		scanf("%d", &(pcon->data[pcon->sz].age));
		printf("请输入要添加联系人的地址;");
		scanf("%s", pcon->data[pcon->sz].addr);
		printf("请输入要添加联系人的电话;");
		scanf("%s", pcon->data[pcon->sz].tele);
		pcon->sz++;
		printf("添加成功\n");
}
void ShowContact(const pContact pcon)//浏览联系人
{
	assert(pcon);
	int i = 0;
	printf("%8s\t%8s\t%8s\t%8s\t%8s\n", "name", "sex", "age", "addr", "tele");
	for (i = 0; i < pcon->sz; i++)
	{
		printf("%8s\t", pcon->data[i].name);
		printf("%8s\t", pcon->data[i].sex);
		printf("%8d\t", pcon->data[i].age);
		printf("%8s\t", pcon->data[i].addr);
		printf("%8s\n", pcon->data[i].tele);
	}
}
static int find(pContact pcon,char *name1)//查找函数,找不到返回-1
{
	assert(pcon);
	assert(name1);
	int i = 0;
	for (i = 0; i < pcon->sz; i++)
	{
		if (strcmp(pcon->data[i].name, name1) == 0)
		{
			return i;
		}
	}
	return -1;
}
void DelContact(pContact pcon)//删除联系人
{
	assert(pcon);
	int ret = 0;
	int j = 0;
	int n = 0;
	char name1[20] = { 0 };
	do
	{
		printf("请输入您要删除人的姓名:\n");
		scanf("%s", name1);
		ret = find(pcon, name1);
		if (ret == -1)
		{
			printf("没找到您要删除的联系人,请重新输入:\n");
			scanf("%s", name1);
		}
		else
		{
			for (j = ret; j < pcon->sz; j++)
			{
				pcon->data[j] = pcon->data[j + 1];
			}
			ret = find(pcon, name1);
			if (ret == -1)
			{
				printf("删除联系人成功,继续删除请选择1,结束选择请输入0:\n");
				scanf("%d", &n);
				if (n == -1)
				{
					printf("选择错误,请重新选择:\n");
					scanf("%d", &n);
				}
			}
		}
	} while (n);
}
void SearchContact(pContact pcon)//查找联系人
{
	int ret = 0;
	int n = 0;
	char name1[20] = {0};
	assert(pcon);
	do
	{
		printf("请输入您要查找的联系人姓名:\n");
		scanf("%s", name1);
		ret = find(pcon, name1);
		if (ret != -1)
		{
			printf("%8s\t%8s\t%8s\t%8s\t%8s\n", "name", "sex", "age", "addr", "tele");
			printf("%8s\t", pcon->data[ret].name);
			printf("%8s\t", pcon->data[ret].sex);
			printf("%8d\t", pcon->data[ret].age);
			printf("%8s\t", pcon->data[ret].addr);
			printf("%8s\n", pcon->data[ret].tele);
		}
		else
		{
			printf("没找到您要查找的联系人,请重新输入:\n");
			scanf("%s", name1);
		}
			printf("继续查找请输入1,结束查找请输入0:\n");
			scanf("%d", &n);
			if (n != 1 && n != 0)
			{
				printf("选择错误,请重新选择:\n");
				scanf("%d", &n);
			}
	} while (n);
}
void ModifyContact(pContact pcon)//修改联系人
{
	int n = 0;
	int ret = 0;
	char name1[20] = {0};
	assert(pcon);
	do
	{
		printf("请输入您要修改的联系人姓名:\n");
		scanf("%s", name1);
		ret = find(pcon, name1);
		if (ret == -1)
		{
			printf("没找到您要修改的联系人,请重新输入:\n");
			scanf("%s", name1);
		}
		else
		{
			printf("请输入修改后联系人的名字;");
			scanf("%s", pcon->data[ret].name);
			printf("请输入修改后联系人的性别;");
			scanf("%s", pcon->data[ret].sex);
			printf("请输入修改后联系人的年龄;");
			scanf("%d", &(pcon->data[ret].age));
			printf("请输入修改后联系人的地址;");
			scanf("%s", pcon->data[ret].addr);
			printf("请输入修改后联系人的电话;");
			scanf("%s", pcon->data[ret].tele);
			printf("%8s\t%8s\t%8s\t%8s\t%8s\n", "name", "sex", "age", "addr", "tele");
			printf("%8s\t", pcon->data[ret].name);
			printf("%8s\t", pcon->data[ret].sex);
			printf("%8d\t", pcon->data[ret].age);
			printf("%8s\t", pcon->data[ret].addr);
			printf("%8s\n", pcon->data[ret].tele);
			printf("修改成功,继续修改请输入1,结束修改请输入0:\n");
			scanf("%d", &n);
			if (n != 1 && n != 0)
			{
				printf("选择错误,请重新选择:\n");
				scanf("%d", &n);
			}
		}
	} while (n);
}
void SortContach(pContact pcon)//按姓名排序
{
	int i = 0;
	int j = 0;
	assert(pcon);
	printf(" 将联系人按姓名排序为:\n");
	for (i = 0; i < pcon->sz; i++)
	{
		for (j = 0; j < pcon->sz - i - 1; j++)
		{
			if (strcmp(pcon->data[j].name, pcon->data[j + 1].name)>0)
			{
				PeoInfo tmp;
				tmp = pcon->data[j];
				pcon->data[j] = pcon->data[j + 1];
				pcon->data[j + 1] = tmp;
			}
		}
	}
	ShowContact(pcon);
}
void ClearContact(pContact pcon)
{
	pcon->sz = 0;
	printf("已清空通讯录联系人");
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
	printf("\n\n\n\n");
	printf("**************************************\n");
	printf("******    1 add        2 show   ******\n");
	printf("******    3 search     4 modify ******\n");
	printf("******    5 del        6 sort   ******\n");
	printf("******    7 clear      0 exit   ******\n");
	printf("**************************************\n");
}
enum
{
	EXIT,
	ADD,
	SHOW,
	DEL,
	SEARCH,
	MODIFY,
	SORT,
	CLEAR,
};
void test()
{
	int input = 0;
	Contact my_con;
	InitContact(&my_con);
	do
	{
		menu();
		printf("请输入你要操作的选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD://添加联系人
			AddContact(&my_con);
			break;
		case SHOW://浏览联系人
			ShowContact(&my_con);
			break;
		case DEL://删除联系人
			DelContact(&my_con);
			break;
		case SEARCH://查找联系人
			SearchContact(&my_con);
			break;
		case MODIFY://修改联系人
			ModifyContact(&my_con);
			break;
		case SORT://按姓名排序联系人
			SortContach(&my_con);
			break;
		case CLEAR://清空联系人
			ClearContact(&my_con);
			break;
		default:
			break;
		}
	}
	while (input);
}
int main()
{
	test();
	return 0;
}
下面是运行结果:


以上为通讯录的所有内容,如发现有错误请私信我,大家一起学习进步奋斗奋斗

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值