通讯录的实现

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

提供方法:

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

下面是头文件部分

#define _CRT_SECURE_NO_WARNINGS
#define MAN_NAME 15						//定义名字数组中字符元素个数
#define MAN_SEX 5						//定义性别数组中字符元素个数
#define MAX_NUMBER 30					//定义号码数组中字符元素个数
#define MAX_ADDRESS 30					//定义地址数组中字符元素个数
#define MAX 1000						//定义数组中元素个数
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
typedef struct message
{
	char name[MAN_NAME];
	char sex[MAN_SEX];
	int age;
	char number[MAX_NUMBER];
	char address[MAX_ADDRESS];
}meaaage;
typedef struct PEOINF
{
	meaaage adta[MAX];					//定义数组来存储1000个人的信息
	int sz;								//定义变量来记录通讯录中有效信息个数
}ab;

//初始化通讯录
void Iniab(ab* content);				//初始化通讯录函数声明

//增加联系人信息
void addcontent(ab* content);			//增加联系人函数声明

//删除联系人信息
void delcontent(ab* content);			//删除联系人函数声明

//寻找联系人信息
void seekcontent(ab* content);			//寻找联系人函数声明

//修改联系人信息
void modcontent(ab* content);			//修改联系人函数声明

//展示联系人信息
void showcontent(ab* content);			//展示联系人函数声明

//清空联系人信息
void emptycontent(ab* content);			//清空联系人函数声明

//排序联系人信息
void sortcontent(ab* content);			//排序联系人信息函数声明

下面是各个函数部分

#include "ab.h"

//查找名字函数
int Findbyname(ab* content, char name[])								
{
	int i = 0;
	for (i = 0; i < content->sz; i++)
	{
		if (strcmp(name, content->adta[i].name) == 0)
		{
			return i;
		}
	}
	return -1;
}

//查联系人信息函数
int information(ab* content, char name[])
{
		printf("请输入联系人姓名->");
		scanf("%s", name);
		int pos = Findbyname(content, name);							//查找名字函数
		//判断是否有该联系人
		if (pos == -1)
		{
			printf("没有找到该联系人\n");
		}
		else
		{
			//查找到相应联系人,将联系人的信息展示出来
			int i = pos;
			printf("%-7s\t%-5s\t%-5s\t%-15s\t%-15s\n", "姓名", "性别", "年龄", "电话", "住址");
			printf("%-7s\t%-5s\t%-5d\t%-15s\t%-15s\n",
				content->adta[i].name, content->adta[i].sex, content->adta[i].age, content->adta[i].number, content->adta[i].address);
			return i;
		}
}

int_cmp_name(const void* p1, const void* p2)											//字符比较函数
{
	return strcmp(((meaaage*)p1)->name, ((meaaage*)p2)->name);
}

//初始化通讯录函数
void Iniab(ab* content)
{
	content->sz = 0;
	memset(content->adta, 0, sizeof(content->adta));
	return;
}


//增加联系人函数
void addcontent(ab* content)
{
	assert(content);
	//在增加联系人之前要判断通讯录是否满了
	if (content->sz == MAX)												//通讯录满了
	{
		printf("通讯录满了\n");
		return;
	}
	//通讯录没满
	printf("请输入联系人姓名->");						
	scanf("%s", content->adta[content->sz].name);
	printf("请输入联系人性别->");
	scanf("%s",content->adta[content->sz].sex);
	printf("请输入联系人年龄->");
	scanf("%d", &(content->adta[content->sz].age));
	printf("请输入联系人电话->");
	scanf("%s", content->adta[content->sz].number);
	printf("请输入联系人住址->");
	scanf("%s", content->adta[content->sz].address);
	printf("增加联系人成功\n");
	content->sz++;
	return;
}


//删除联系人函数
void delcontent(ab* content)
{
	char name[MAN_NAME] = {0};
	assert(content);
	printf("请输入要删除的联系人姓名->");
	scanf("%s", name);
	int pos = Findbyname(content, name);								//查找名字函数
	//在删除联系人之前先判断是否有该要删除的联系人
	if (pos == -1)
	{
		printf("没有找到要删除的联系人\n");

	}
	else
	{
		int i = 0;
		for (i = pos; i < content->sz; i++)
		{
			content->adta[i] = content->adta[i + 1];
		}
		content->sz--;
		printf("删除指定联系人成功\n");
	}
	return;
}


//寻找联系人函数
void seekcontent(ab* content)
{
	assert(content);
	char name[MAN_NAME] = { 0 };
	information(content, name);											//查联系人信息函数
	return;
}


//修改联系人信息函数
void modcontent(ab* content)
{
	assert(content);
	char name[MAN_NAME] = { 0 };
	int i = information(content, name);														//查联系人信息函数
	printf("请输入要修改信息的联系人姓名->");
	scanf("%s", name);
	//int i
	int pos = Findbyname(content, name);											//查找名字函数
	修改联系人信息
	printf("请输入修改后的信息\n");
	printf("请输入联系人姓名->");
	scanf("%s", content->adta[i].name);
	printf("请输入联系人性别->");
	scanf("%s", content->adta[i].sex);
	printf("请输入联系人年龄->");
	scanf("%d", &(content->adta[i].age));
	printf("请输入联系人电话->");
	scanf("%s", content->adta[i].number);
	printf("请输入联系人住址->");
	scanf("%s", content->adta[i].address);
	printf("修改信息联系人成功\n");
	return;
}


//展示联系人函数
void showcontent(ab* content)
{
	//姓名、性别、年龄、电话、住址
	assert(content);
	int i = 0;
	printf("%-7s\t%-5s\t%-5s\t%-15s\t%-15s\n","姓名","性别","年龄","电话","住址");
	for (i = 0; i < content->sz; i++)
	{
		printf("%-7s\t%-5s\t%-5d\t%-15s\t%-15s\n",
			content->adta[i].name, content->adta[i].sex, content->adta[i].age, content->adta[i].number, content->adta[i].address);
	}
	return;
}

//清空联系人函数
void emptycontent(ab* content)
{
	assert(content);
	char input = 0;
	printf("请确认是否要清空通讯录(Y/N)->");
	while ((getchar()) != '\n')
	{
		;
	}
	if ((input = getchar()) == 'Y')
		Iniab(content);									//初始化函数——将通讯录全部初始化
	return;
}


//排序联系人信息函数
void sortcontent(ab* content)
{
	assert(content);
	//用qsort函数快速实现排序
	qsort(content->adta,content->sz,sizeof(content->adta[0]),int_cmp_name);
	int i = 0;
	printf("%-7s\t%-5s\t%-5s\t%-15s\t%-15s\n", "姓名", "性别", "年龄", "电话", "住址");
	for (i = 0; i < content->sz; i++)
	{
		printf("%-7s\t%-5s\t%-5d\t%-15s\t%-15s\n",
			content->adta[i].name, content->adta[i].sex, content->adta[i].age, content->adta[i].number, content->adta[i].address);
	}
	return;
}

下面是test.c部分

#include "ab.h"
//实现通讯录:通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
//1.添加联系人信息
//2.删除指定联系人信息
//3.查找指定联系人信息
//4.修改指定联系人信息
//5.显示所有联系人信息
//6.清空所有联系人
//7.以名字排序所有联系人
enum mean
{
	EXIT,
	ADD,
	DEL,
	SEEK,
	MOD,
	SHOW,
	EMPTY,
	SORT
};
void mean()
{
	printf("*****************************************************************\n");
	printf("*********           1.add              2.del          ***********\n");
	printf("*********           3.seek             4.mod          ***********\n");
	printf("*********           5.show             6.empty        ***********\n");
	printf("*********           7.sort             0.exit         ***********\n");
	printf("*****************************************************************\n");
}
int main()
{
	//初始化通讯录
	ab content;										//定义结构体变量content
	Iniab(&content);								//初始化通讯录,这里传参选择传地址过去
	int input = 0;
	do
	{
		mean();
		printf("请选择->");
		scanf("%d", &input);
		switch (input)
		{
		case EXIT:
			printf("退出通讯录\n");
			break;
		case ADD:
			addcontent(&content);						//增加联系人函数
			break;
		case DEL:
			delcontent(&content);						//删除联系人函数
			break;
		case SEEK:
			seekcontent(&content);						//寻找联系人函数
			break;
		case MOD:
			modcontent(&content);						//修改联系人函数
			break;
		case SHOW:
			showcontent(&content);						//展示联系人函数
			break;
		case EMPTY:
			emptycontent(&content);						//清空联系人信息
			break;
		case SORT:
			sortcontent(&content);						//排序联系人信息
			break;
		}
	} while (input);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼吐泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值