结构体和枚举的使用之实现通讯录

在之前的文章中我介绍了结构体和枚举类型的内容,现在我们可以编写一个小程序来对这两种复杂类型加以使用。

目录

1、操作内容

2、头文件内容

3、头文件功能实现

1、通讯录界面呈现

2、通讯录初始化

3、添加联系人信息

4、删除指定联系人信息

5、查找指定联系人信息

6、修改指定联系人信息

7、显示所有联系人信息

8、清空所有联系人

9、以名字排序所有联系人

4、主函数调用

1、操作内容

我们通过编写通讯录来进行实现,本次通讯录中所包含的操作内容有:

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

2、头文件内容

#ifndef MailList_H
#define MailList_H

#define _CRT_SECURE_NO_WARNINGS
#define MAX_PERSON 1000
#include <stdio.h>
#include<stdlib.h>
#include<string.h>

//结构体成员,即通讯录中个人信息定义
struct Person
{
	char name[32];
	char sex[8];
	int age;
	char phone[16];
	char address[32];

};

//统计通讯录人员
struct Contact
{
	struct Person _p[MAX_PERSON];
	int cur_count;//当前通讯录中人数,以及当前插入数据的下标
};

//通讯录功能枚举
enum Operat_t
{
	EXIT,
	ADD,
	PRINTF,
	FIND,
	MODIFY,
	DELETE,
	CLEAR,
	SORT,
};

//通讯录界面呈现
int PrinfFace();

//通讯录初始化
void ContactInit(struct Contact *con);

//添加联系人信息
void ContactAdd(struct Contact *con);

//删除指定联系人信息
void ContactDelete(struct Contact *con);

//查找指定联系人信息
void ContactFind(struct Contact *con);

//修改指定联系人信息
void ContactModify(struct Contact *con);

//显示所有联系人信息
void ContactPrintf(struct Contact *con);

//清空所有联系人
void ContactClear(struct Contact *con);

//以名字排序所有联系人
void ContactSort(struct Contact *con);

#endif

3、头文件功能实现

1、通讯录界面呈现

//通讯录界面呈现
int PrinfFace()
{
	printf("********欢迎进入通讯录系统********\n");
	printf("1.添加联系人          2.显示联系人\n");
	printf("3.查找联系人          4.修改联系人\n");
	printf("5.删除联系人          6.清空联系人\n");
	printf("7.排序联系人          0.退出通讯录\n");
	printf("\n");
	int input = 0;
	printf("请输入需要进行的操作序号_>\n");
	scanf("%d", &input);
	return input;
}

2、通讯录初始化

void ContactInit(struct Contact *con)
{
	memset(con, 0x00, sizeof(struct Contact));
	return;
}

3、添加联系人信息

//添加联系人信息
void ContactAdd(struct Contact *con)
{
	system("cls");
	if (con->cur_count == MAX_PERSON)
	{
		printf("通讯录内容已满,无法再进行添加\n");
		return;
	}
	printf("请输入姓名_> ");
	scanf("%s", &con->_p[con->cur_count].name);
	printf("请输入性别_> ");
	scanf("%s", &con->_p[con->cur_count].sex);
	printf("请输入年龄_> ");
	scanf("%d", &con->_p[con->cur_count].age);
	printf("请输入电话_> ");
	scanf("%s", &con->_p[con->cur_count].phone);
	printf("请输入地址_> ");
	scanf("%s", &con->_p[con->cur_count].address);
	con->cur_count++;
	printf("新增联系人完毕\n");
	return;
}

4、删除指定联系人信息

//删除指定联系人信息
void ContactDelete(struct Contact *con)
{
	system("cls");
	if (con->cur_count == 0)
	{
		printf("当前通讯录为空,请先进行添加\n");
		return;
	}
	printf("请输入删除联系人的姓名_>");
	char name[32] = { 0 };
	int status = 0;
	scanf("%s", &name);
	for (int i = 0; i < con->cur_count; i++)
	{
		if (strcmp(name, con->_p[i].name) == 0)
		{
			for (int j = i; j < con->cur_count - 1; j++)
			{
				con->_p[j] = con->_p[j + 1];
			}
			status++;
			con->cur_count--;
		}
	}
	if (status == 0)
	{
		printf("不存在目标联系人\n");
		return;
	}
	else
	{
		printf("成功删除%d个%s联系人\n", status, name);
	}
}

5、查找指定联系人信息

//查找指定联系人信息
void ContactFind(struct Contact *con)
{
	system("cls");
	if (con->cur_count == 0)
	{
		printf("当前通讯录为空,请先进行添加\n");
		return;
	}
	printf("请输入查找联系人的姓名_>");
	char name[32] = { 0 };
	int status = 0;
	scanf("%s", &name);
	for (int i = 0; i < con->cur_count; i++)
	{
		if (strcmp(name, con->_p[i].name) == 0)
		{
			printf("姓名:%s\n", con->_p[i].name);
			printf("性别:%s\n", con->_p[i].sex);
			printf("年龄:%d\n", con->_p[i].age);
			printf("电话:%s\n", con->_p[i].phone);
			printf("地址:%s\n", con->_p[i].address);
			printf("---------------------------\n");
			status++;
		}
	}
	if (status == 0)
	{
		printf("通讯录不存在该联系人\n");
		return;
	}
	else
	{
		printf("一共存在%d个同名联系人\n", status);
	}
}

6、修改指定联系人信息

//修改指定联系人信息
void ContactModify(struct Contact *con)
{
	system("cls");
	if (con->cur_count == 0)
	{
		printf("当前通讯录为空,请先进行添加\n");
		return;
	}
	printf("请输入查找联系人的姓名_>");
	char name[32] = { 0 };
	int status = 0;
	scanf("%s", &name);
	for (int i = 0; i < con->cur_count; i++)
	{
		if (strcmp(name, con->_p[i].name) == 0)
		{
			printf("请输入修改后的姓名_>");
			scanf("%s", &con->_p[i].name);
			printf("请输入修改后的性别_>");
			scanf("%s", &con->_p[i].sex);
			printf("请输入修改后的年龄_>");
			scanf("%d", &con->_p[i].age);
			printf("请输入修改后的电话_>");
			scanf("%s", &con->_p[i].phone);
			printf("请输入修改后的地址_>");
			scanf("%s", &con->_p[i].address);
			printf("---------------------------\n");
			status++;
		}
	}
	if (status == 0)
	{
		printf("通讯录不存在该联系人\n");
	}
	else
	{
		printf("一共存在%d个同名联系人进行修改\n", status);
	}
}

7、显示所有联系人信息

//显示所有联系人信息
void ContactPrintf(struct Contact *con)
{
	system("cls");
	if (con->cur_count == 0)
	{
		printf("当前通讯录为空,请先进行添加\n");
		return;
	}
	for (int i = 0; i < con->cur_count; i++)
	{
		printf("姓名:%s\n", con->_p[i].name);
		printf("性别:%s\n", con->_p[i].sex);
		printf("年龄:%d\n", con->_p[i].age);
		printf("电话:%s\n", con->_p[i].phone);
		printf("地址:%s\n", con->_p[i].address);
		printf("---------------------------\n");
	}
	return;
}

8、清空所有联系人

//清空所有联系人
void ContactClear(struct Contact *con)
{
	system("cls");
	ContactInit(con);
	printf("通讯录清空完毕\n");
}

9、以名字排序所有联系人

//以名字排序所有联系人
void ContactSort(struct Contact *con)
{
	system("cls");
	if (con->cur_count == 0)
	{
		printf("当前通讯录为空,请先进行添加\n");
		return;
	}
	if (con->cur_count == 0)
	{
		printf("当前通讯录为空,请先进行添加\n");
		return;
	}
	for (int i = 0; i < con->cur_count - 1; i++)
	{
		for (int j = 0; j < con->cur_count - i - 1; j++)
		{
			if (strcmp(con->_p[j].name, con->_p[j + 1].name) > 0)
			{
				struct Person p = con->_p[j];
				con->_p[j] = con->_p[j + 1];
				con->_p[j + 1] = p;
			}
		}
	}
	printf("按照人名排序完毕\n");
	return;
}

4、主函数调用

int main()
{
	struct Contact con;
	ContactInit(&con);
	while (1)
	{
		int input = PrinfFace();
		switch (input)
		{
		case EXIT:
			exit(0);
		case ADD:
			ContactAdd(&con);
			break;
		case PRINTF:
			ContactPrintf(&con);
			break;
		case FIND:
			ContactFind(&con);
			break;
		case MODIFY:
			ContactModify(&con);
			break;
		case DELETE:
			ContactDelete(&con);
			break;
		case CLEAR:
			ContactClear(&con);
			break;
		case SORT:
			ContactSort(&con);
			break;
		default:
			printf("输入错误,请重新输入\n");
		}
	}
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值