C语言之简单通讯录制作

手机在人们生活中越来越普遍了,每个人的手机中都有一个通讯录,那么今天我就用c语言给大家实现一个简易版的手机通讯录,要求如下:
实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址

提供方法如下:

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息
  6. 清空所有联系人
  7. 以名字排序所有联系人
  8. 保存联系人到文件
  9. 加载联系人

具体实现过程如下,主要是应用结构体,简单易懂

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>

#define NameMax 20
#define SexMax 3
#define TelMax 11
#define AddressMax 20
#define PeopleMax 1000

typedef char Persontype;

typedef struct PERSON
{
	Persontype Name[NameMax];//  姓名
	Persontype Sex[SexMax];  // 性别
	int Age;          // 年龄
	Persontype Tel[TelMax]; //联系方式
	Persontype Address[AddressMax]; //地址

}Person;

typedef struct BOOK
{
	Person Data[PeopleMax];//Address_Book结构体最大存储容量
	int count;    //当前已存储人数
}Book;

void Initbook(Book* people); //初始化

void show_person(Book* people);//打印

void Add_person(Book *people);// 增加成员

void Del_person(Book* people);//删除成员

int Find_person(Book* people);//查找成员

void Change_person(Book* people);//修改成员

void BubbleSort_person(Book* people);//冒泡排序



//初始化
void Initbook(Book* people)
{
	people->count = 0;
}

//打印
void show_person(Book* people)
{
	if (people == NULL)
	{
		printf("通讯录为空!\n");
		return;
	}
	if (people->count == 0)
	{
		printf("通讯录为空!\n");
	}
	int i = 0;
	for (; i <= people->count - 1; ++i)
	{
		printf("Name:%s\n", people->Data[i].Name);
		printf("Sex:%s\n", people->Data[i].Sex);
		printf("Age:%d\n", people->Data[i].Age);
		printf("Tel:%s\n", people->Data[i].Tel);
		printf("Addre:%s\n", people->Data[i].Address);
	}
	printf("\n");
}


//增加成员
void Add_person(Book *people)
{
	assert(people);
	int i = 0;
	if (people->count > PeopleMax)
	{
		printf("通讯录已满!\n");
		return;
	}
	printf("请输入姓名:\n");
	scanf("%s", (people->Data[people->count]).Name);
	printf("请输入性别:\n");
	scanf("%s", (people->Data[people->count]).Sex);
	printf("请输入年龄:\n");
	scanf("%d", &(people->Data[people->count]).Age);
	printf("请输入联系方式:\n");
	scanf("%s", (people->Data[people->count]).Tel);
	printf("请输入住址:\n");
	scanf("%s", (people->Data[people->count]).Address);
	printf("增加成功!\n");
	people->count++;
	printf("count = %d\n", people->count);

}
//删除成员
void Del_person(Book* people)
{
	if (people == NULL)
	{
		printf("通讯录为空!\n");
		return;
	}
	int ret = Find_person(people);
	if (ret != -1)
	{
		int i = ret;
		for (; i < people->count - 1; ++i)
		{
			people->Data[i] = people->Data[i + 1];
		}
		people->count--;
		printf("count = %d\n", people->count);
	}
	else
	{
		printf("没有该成员!\n");
	}
}

//查找成员
int Find_person(Book* people)
{
	assert(people);
	char name[20];
	printf("请输入姓名:\n");
	scanf("%s", name);
	int i = 0;
	for (; i < people->count; ++i)
	{
		if (strcmp(people->Data[i].Name, name) == 0)
		{
			printf("Name:%s\tSex:%s\tAge:%d\tTel:%s\tAddre:%s\n", people->Data[i].Name, people->Data[i].Sex, people->Data[i].Age, people->Data[i].Tel, people->Data[i].Address);
			return i;
			printf("下标为 %d\n", i);
		}
	}
	printf("没有找到该联系人!\n");
	return -1;
}

//修改成员
void Alter_person(Book* people)
{
	assert(people);
	int ret = Find_person(people);
	if (ret != -1)
	{
		printf("Name->:\n");
		scanf("%s", people->Data[ret].Name);
		printf("Sex->:\n");
		scanf("%s", people->Data[ret].Sex);
		printf("Age->:\n");
		scanf("%d", &(people->Data[ret]).Age);
		printf("Tel->:\n");
		scanf("%s", people->Data[ret].Tel);
		printf("Add->:\n");
		scanf("%s", people->Data[ret].Address);
	}
	else
	{
		printf("没有该成员!\n");
		return;
	}
}

void BubbleSort_person(Book* people)
{
	if (people == NULL)
	{
		printf("空通讯录!\n");
		return;
	}
	int i = 0;
	for (; i < people->count - 1; ++i)
	{
		int j = 0;
		for (; j < people->count - 1 - i; ++j)
		{
			if (strcmp(people->Data[j].Name, people->Data[j + 1].Name) > 0)
			{
				char tmp[NameMax];
				strcpy(tmp, people->Data[j].Name);
				strcpy(people->Data[j].Name, people->Data[j + 1].Name);
				strcpy(people->Data[j + 1].Name, tmp);
			}
		}
	}
	show_person(people);
}

void menu()
{
	printf("***     通讯录      *********************\n");
	printf("* 1、  增加成员     *********************\n");
	printf("* 2、  删除成员     *********************\n");
	printf("* 3、  查找成员     *********************\n");
	printf("* 4、  修改成员     *********************\n");
	printf("* 5、  显示成员     *********************\n");
	printf("* 6、  清空成员     *********************\n");
	printf("* 7、    排序       *********************\n");
	printf("* 8、    退出       *********************\n");
}

int main()
{
	Book people;
	Initbook(&people);
	while (1)
	{
		menu();
		int n = 0;
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			Add_person(&people);
			break;
		case 2:
			Del_person(&people);
			break;
		case 3:
			Find_person(&people);
			break;
		case 4:
			Alter_person(&people);
			break;
		case 5:
			show_person(&people);
			break;
		case 6:
			Initbook(&people);
			break;
		case 7:
			BubbleSort_person(&people);
			break;
		case 8:
			exit(0);
		default:
		{
			printf("输入错误!\n");
			break;
		}
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值