通讯录的实现

目录

一 通讯录的基本组成

1 个人的消息 姓名、年龄、性别、地址、电话等。

2 通讯录一共可以装下多个联系人。

3 通讯录的基本功能:

添加联系人、删除联系人、查找联系人、修改联系人、进行排序、清空通讯录等。

二  实现代码

1 test.c 测试

2 contact.c 函数功能的实现

3 contact.h 函数声明部分


一 通讯录的基本组成

1 个人的消息 姓名、年龄、性别、地址、电话等。

 

typedef struct person
{
	char name[20];
	int age;
	char sex[5];
	char address[30];
	char telephone[20];
}person;

2 通讯录一共可以装下多个联系人。

typedef struct contact
{
	person per[MAX];
	int num;
}contact;

 

3 通讯录的基本功能:

添加联系人、删除联系人、查找联系人、修改联系人、进行排序、清空通讯录等。

void menu()
{
	printf("**********************************\n");
	printf("*******1.add        2.delet*******\n");
	printf("*******3.serch      4.modify******\n");
	printf("*******5.shown      6.sort********\n");
	printf("*******7.clear      0.exit********\n");
	printf("**********************************\n");
}

 本文删除联系人与排序均使用了字符串函数,分别为memmove和qsort函数,使用库函数节省了不少时间,今后在解决问题的时候可以是库函数的话可以多使用。

二  实现代码

1 test.c 测试

 

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"

void menu()
{
	printf("**********************************\n");
	printf("*******1.add        2.delet*******\n");
	printf("*******3.serch      4.modify******\n");
	printf("*******5.shown      6.sort********\n");
	printf("*******7.clear      0.exit********\n");
	printf("**********************************\n");
}
int main()
{
	int input;
	contact con;
	Init_contact(&con);
	do
	{
		menu();
		printf("请输入你具体的操作:>\n");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				Add_person(&con);
				break;
			case 2:
				Delete_person(&con);
				break;
			case 3:
				Serch_person(&con);
				break;
			case 4:
				Modify_person(&con);
				break;
			case 5:
				Shown_person(&con);
				break;
			case 6:
				Sort_person(&con);
				break;
			case 7:
			{
				printf("请输入YES,确认清除:>\n");
				char str[10];
				scanf("%s", str);
				if (strcmp(str, "YES") == 0)
				{
					Clear_person(&con);
					printf("清除成功\n");
				}
				else
				{
					printf("已停止清除\n");
					break;
				}
				break;
			}
			case 0:
				printf("退出程序\n");
				return 0;
				break;
			default :
				printf("输入错误,请重新输入\n");
				break;
		}
		system("pause");
		system("cls");
	} while (input);
	return 0;
}

system("pause")与system("cls");对屏幕进行清屏,可以使其看起来更简洁。

2 contact.c 函数功能的实现

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"

int compar(const char* c1, const char* c2)
{
	return strcmp((*(person*)c1).name, (*(person*)c2).name);
}

void Init_contact(contact* con)
{
	con->num = 0;
	memset(con->per, 0, sizeof(con->per));//初始化person数组中的内容
}
//添加联系人
void Add_person(contact* con)
{
	assert(con);
	if (con->num == MAX - 1)
	{
		printf("通讯录已满\n");
		return;
	}
	printf("请输入添加联系人的姓名\n");
	scanf("%s", con->per[con->num].name);
	printf("请输入添加联系人的年龄\n");
	scanf("%d", &(con->per[con->num].age));
	printf("请输入添加联系人的性别\n");
	scanf("%s", con->per[con->num].sex);
	printf("请输入添加联系人的地址\n");
	scanf("%s", con->per[con->num].address);
	printf("请输入添加联系人的电话\n");
	scanf("%s", con->per[con->num].telephone);
	con->num++;

}
//显示联系人
void Shown_person(const contact* con)
{
	assert(con);
	printf("姓名\t年龄\t性别\t地址\t电话\n");
	for (int i = 0; i < con->num; i++)
	{
		printf("%s\t%d\t%s\t%s\t%s\t\n", con->per[i].name, con->per[i].age, con->per[i].sex, con->per[i].address, con->per[i].telephone);
	}
}
//查找联系人
int Serch_person(const contact* con)
{
	assert(con);
	char name[20];
	printf("请输入联系人姓名\n");
	scanf("%s", name);
	for (int i = 0; i <=con->num; i++)
	{
		if (strcmp(name, con->per[i].name) == 0)
		{
			printf("该联系人存在\n");
			return i;
		}
	}
	return -1;
}

void Delete_person(contact* con)
{
	assert(con);
	if (con->num == 0)
	{
		printf("当前通讯录为空,无法删除\n");
		return;
	}
	int ret = Serch_person(con);
	if (ret == -1)
	{
		printf("查无此人\n");
	}
	else
	{
		memmove(con->per + ret, con->per+ ret + 1, sizeof(person) * (con->num - ret-1));  //使用库函数进行移动
		printf("删除成功\n");
		con->num--;
	}
}


void Modify_person(contact* con)
{
	assert(con);
	int ret = Serch_person(con);
	if (ret == -1)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("请输入添加联系人的姓名\n");
		scanf("%s", con->per[ret].name);
		printf("请输入添加联系人的年龄\n");
		scanf("%d", &(con->per[ret].age));
		printf("请输入添加联系人的性别\n");
		scanf("%s", con->per[ret].sex);
		printf("请输入添加联系人的地址\n");
		scanf("%s", con->per[ret].address);
		printf("请输入添加联系人的电话\n");
		scanf("%s", con->per[ret].telephone);
	}
}

void Sort_person(const contact *con)
{
	printf("开始排序\n");
	qsort(con->per, con->num, sizeof(con->per[0]), compar);
}

void Clear_person(contact* con)
{
	if (con->num == 0)
	{
		printf("联系人为空\n");
		return;
	}
	else
	{
		Init_contact(con);
	}
}

3 contact.h 函数声明部分

 

#include<stdio.h>
#include<string.h>
#include<assert.h>
#define MAX 100

typedef struct person
{
	char name[20];
	int age;
	char sex[5];
	char address[30];
	char telephone[20];
}person;
typedef struct contact
{
	person per[MAX];
	int num;
}contact;

//初始化通讯录
void Init_contact(contact* con);
//添加联系人
void Add_person(contact* con);
//显示联系人
void Shown_person(const contact* con);
//查找联系人
int Serch_person(const contact* con);
//删除联系人
void Delete_person(contact* con);
//修改联系人
void Modify_person(contact* con);
//排序
void Sort_person(const contact* con);
//清除联系人
void Clear_person(contact* con);

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值