c语言实现通讯录

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

提供功能: 
1. 添加联系人信息 
2. 删除指定联系人信息 
3. 查找指定联系人信息 
4. 修改指定联系人信息 
5. 显示所有联系人信息 
6. 清空所有联系人 

7. 以名字排序所有联系人 

头文件 #include “contact.h”

#ifndef __CONTACT_H__
#define __CONTACT_H__
# include <stdio.h>
# include <stdlib.h>
#define MAX_NAME 20
#define MAX 1000
#define MAX_SEX 5
#define MAX_ADDRESS 40
#define MAX_TELNUM 20

enum condition
{
	EXIT,//退出
	ADD,//添加
	DEL,//删除
	SEARCH,//查找
	MODIFY,//修改
	SHOW,//显示
	EMPTY,//清空
	SORT//排序
};
typedef struct PeoInfor
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int age;
	char telnum[MAX_TELNUM];
	char address[MAX_ADDRESS];
}Peoinfor;
typedef struct Contact
{
	Peoinfor data[MAX];
	int count;
}Contact,*pContact;
//初始化通讯录
void InitContact(pContact pc);
//查找
int FindName(pContact pc, char* name);
int FindnNum(pContact pc, int num);
//添加联系人
void AddContact(pContact pc);
//删除联系人
void DelContact(pContact pc);
//查找联系人
void SearchContact(pContact pc);
//按名字排序
void SortContact(pContact pc);
//修改联系人
void ModifyContact(pContact pc);
#endif //__CONTACT_H__

cotanct.c 文件

# include "contact.h"
//初始化通讯录
void InitContact(pContact pc)
{
	pc->count = 0;
	memset(pc->data, 0, sizeof(pc->data));//将所有初始化为0.
}
int FindName(pContact pc, char* nam)
{
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(pc->data[i].name, nam) == 0)//查找通讯录里是否存在要查找的名字,存在返回下标。
			return i;						//不存在返回-1.
	}
	return -1;
}
int FindNum(pContact pc, char* num)
{
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(pc->data[i].telnum, num) == 0)//查找通讯录里是否存在要查找的电话,存在返回下标,不存在返回-1.
			return i;
	}
	return -1;
}
//添加联系人
void AddContact(pContact pc)
{
	if (pc->count == MAX) //判断通讯录对否人已经满了
	{
		printf("通讯录已满!!!");
		return;
	}
	printf("请输入联系人姓名:>");
	scanf("%s", pc->data[pc->count].name);
	printf("请输入联系人性别:>");
	scanf("%s", pc->data[pc->count].sex);
	printf("请输入联系人年龄:>");
	scanf("%d",&( pc->data[pc->count].age));
	printf("请输入联系人电话:>");
	scanf("%s", pc->data[pc->count].telnum);
	printf("请输入联系人地址:>");
	scanf("%s", pc->data[pc->count].address);
	pc->count++;
}
//显示联系人
void ShowContact(pContact pc)
{
	int i = 0;
	if (pc->count == 0)
	{
		printf("通讯录为空!!!\n");
		return;
	}
	for (i = 0; i < pc->count; i++)
	{
		printf("姓名:%s\n", pc->data[i].name);
		printf("性别:%s\n", pc->data[i].sex);
		printf("年龄:%d\n", pc->data[i].age);
		printf("电话:%s\n", pc->data[i].telnum);
		printf("家庭住址:%s\n", pc->data[i].address);
	}
	printf("\n");
}
//删除联系人
void DelContact(pContact pc)
{
	char name[20] = { 0 };
	int ret = 0;
	int n = 0;
	int i = 0;
	if (pc->count == 0)
		printf("通讯录为空\n");
	else
	{
		printf("请输入要删除人的姓名:>");
		scanf("%s", name);
		ret = FindName(pc, name);
		if (ret != -1)
		{
			printf("你是否要删除该联系人?\n");
			printf("确定请选择1,取消请选择0\n");
			scanf("%d", &n);
			if (n == 1)
			{
				for (i = ret; i < pc->count - 1; i++)
				{
					pc->data[i] = pc->data[i + 1];//朝前覆盖,完成删除。
				}
				pc->count--;
				printf("删除成功\n");
			}
			else
			{
				printf("删除失败\n");
			}
		}
		else
		{
			printf("你要删除的联系人不存在\n");
		}
	}
} 
//查找联系人
void SearchContact(pContact pc)
{
	char name[20];
	char num[20];
	int input = 0;
	int ret = 0;
	do
	{
		printf("**** 1.按照名字查找  2.按照电话查找 0.返回 *****\n");
		printf("请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("请输入你要查找的姓名:>");
			scanf("%s", name);
			ret=FindName(pc, name);
			if (ret != -1)
			{
				printf("姓名:%s\n", pc->data[ret].name);
				printf("性别:%s\n", pc->data[ret].sex);
				printf("年龄:%d\n", pc->data[ret].age);
				printf("电话:%d\n", atoi(pc->data[ret].telnum));
				printf("家庭住址:%s\n", pc->data[ret].address);
			}
			else
				printf("你要查找的联系人不存在\n");
			break;
		case 2:
			printf("请输入你要查找的电话号码:>");
			scanf("%s", num);
			ret = FindNum(pc, num);
			if (ret != -1)
			{
				printf("姓名:%s\n", pc->data[ret].name);
				printf("性别:%s\n", pc->data[ret].sex);
				printf("年龄:%d\n", pc->data[ret].age);
				printf("电话:%d\n", atoi(pc->data[ret].telnum));
				printf("家庭住址:%s\n", pc->data[ret].address);
			}
			else
				printf("你要查找的联系人不存在\n");
			break;
		case 0:
			break;
		default:
			printf("输入有误\n");
			break;
		}
	}while (input);
}
//排序
void SortContact(pContact pc)
{
	int i = 0;
	for (i = 0; i < (pc->count) - 1; i++)
	{
		if (strcmp(pc->data[i].name, pc->data[i+1].name)>0)
		{
			Peoinfor tmp;
			tmp = pc->data[i];
			pc->data[i] = pc->data[i + 1];
			pc->data[i + 1] = tmp;
		}
	}

}
//修改联系人
void ModifyContact(pContact pc)
{
	char name[20] = { 0 };
	int ret = 0;
	int input = 0;
	printf("请输入你要修改联系人的姓名:>");
	scanf("%s", name);
	ret = FindName(pc, name);
	if (ret != -1)
	{
		do
		{
			printf("*************************\n");
			printf("*** 1.姓名     2.性别 ***\n");
			printf("*** 3.年龄     4.电话 ***\n");
			printf("*** 5.家庭住址 0.返回 ***\n");
			printf("*************************\n");
			printf("请输入你要修改的选项>");
			scanf("%d", &input);
			switch (input)
			{
			case 1:
				printf("请输入新的名字:>");
				scanf("%s", pc->data[ret].name);
				break;
			case 2:
				printf("请输入新的性别:>");
				scanf("%s", pc->data[ret].sex);
				break;
			case 3:
				printf("请输入新的年龄:>");
				scanf("%d", &(pc->data[ret].age));
				break;
			case 4:
				printf("请输入新的电话:>");
				scanf("%s", pc->data[ret].telnum);
				break;
			case 5:
				printf("请输入新的家庭住址:>");
				scanf("%s", pc->data[ret].address);
				break;
			case 0:
				break;
			default:
				printf("输入有误请重新输入\n");
				break;
			}
		} while (input);
	}
	else
		printf("你要修改的联系人不存在\n");
}

测试文件 main.c

# include "contact.h"

void menu()
{
	printf("**********************************\n");
	printf("****** 1>添加   2>删除   *********\n");
	printf("****** 3>查找   4>修改   *********\n");
	printf("****** 5>显示   6>清空   *********\n");
	printf("****** 7>排序   0>退出   *********\n");
	printf("**********************************\n");
}
int main()
{
	int input = 0;
	Contact my_con;
	InitContact(&my_con);
	do
	{
		menu();
		printf("请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&my_con);
				break;
		case DEL:
			DelContact(&my_con);
			break;
		case SEARCH:
			SearchContact(&my_con);
			break;
		case MODIFY:
			ModifyContact(&my_con);
			break;
		case SHOW:
			ShowContact(&my_con);
			break;
		case EMPTY:
			InitContact(&my_con);
			break;
		case SORT:
			SortContact(&my_con);
			break;
		case EXIT:
			break;
		default:
				printf("输入有误,请重新输入!\n");
			break;
		}
	} while (input);
	system("pause");
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值