使用c语言实现一个简易的通讯录

实现一个通讯录; 
通讯录可以用来存储1000个人的信息,每个人的信息包括: 
姓名、性别、年龄

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

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

实现方法非常简单,只要按部就班的做,就一定可以实现,加油咯!


Contact.h

#ifndef __CONTACT_H__
#define __CONTACT_H__

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string.h>

enum OPTION//通讯录中的功能选项
{
	EXIT,
	ADD,
	DEL,
	FIND,
	MODIFY,
	SHOW,
	SORT,
	EMPTY
};

enum MODIFY//修改联系人信息的选项
{
	EXIT1,
	NAME,
	AGE,
	SEX
};

#define MAX_NAME 20
#define MAX_SEX 5
#define  MAX 1000

typedef struct PeoInfo//定义一个存放联系人信息的结构体类型
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
}PeoInfo;

typedef struct Contact
{
	PeoInfo data[MAX];//定义一个PeoInfo类型的数组来存放联系人的信息
	int count;//表示联系人的个数
}Contact, *pContact;

void InitContact(pContact pc);//初始化
void AddContact(pContact pc);//增加联系人信息
void DelContact(pContact pc);//删除联系人信息
int Find(pContact pc);//查找某个人的信息,并返回它的下标
void FindContact(pContact pc);//查找联系人信息
void ShowContact(pContact pc);//显示联系人信息
void ModifyContact(pContact pc);//修改联系人信息
void EmptyContact(pContact pc);//清空联系人信息
void SortContact(pContact pc);//排序联系人信息

#endif//__CONTACT_H__

Contact.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "Contact.h"

void InitContact(pContact pc)//初始化
{
	pc->count = 0;
	memset(pc->data, 0, sizeof(pc->data));
}

void menu1()//修改通讯录联系人信息功能菜单
{

	printf("**************************\n");
	printf("**** 1.name   2.age   ****\n");
	printf("**** 3.sex    0.exit1 ****\n");
	printf("**************************\n");
}

void AddContact(pContact pc)//增加信息
{
	if (pc->count == MAX)
	{
		printf("对不起,通讯录已满!");
		return;
	}
	printf("请输入名字:>");
	scanf("%s",pc->data[pc->count].name);
	printf("请输入年龄:>");
	scanf("%d", &pc->data[pc->count].age);
	printf("请输入性别:>");
	scanf("%s", pc->data[pc->count].sex);
	pc->count++;
}

int Find(pContact pc)//查找指定联系人的信息
{
	int i = 0;
	char name[MAX_NAME];
	printf("请输入要查找的联系人的姓名:>");
	scanf("%s",name);
	for (i = 0; i < pc->count;i++)
	{
		if (strcmp(name, pc->data[i].name) == 0)
		{
			return i;
		}
	}
	return -1;
}

void DelContact(pContact pc)//删除联系人
{
	int i = 0;
	if (pc->count == 0)
	{
		printf("对不起,通讯录为空\n");
		return;
	}
	else
	{
		int ret = Find(pc);
		if (ret == -1)
		{
			printf("对不起,没有该联系人\n");
			return;
		}
		else
		{
			for (i = ret; i < pc->count - 1; i++)
			{
				pc->data[i] = pc->data[i + 1];
			}
			pc->count--;
		}
		printf("恭喜您,联系人删除成功\n");
	}
}

void FindContact(pContact pc)//查找通讯录
{
	int ret = Find(pc);
	if (ret != -1)
	{
		printf("姓名:%s\n", pc->data[ret].name);
		printf("年龄:%d\n", pc->data[ret].age);
		printf("性别:%s\n", pc->data[ret].sex);
	}
	else
	{
		printf("对不起,您所查询的联系人不存在\n");
	}
}

void ModifyContact(pContact pc)//修改联系人信息
{
	int ret = Find(pc);
	if (ret == -1)
	{
		printf("对不起,没有您所输入姓名的信息\n");
		return;
	}
	else
	{
		int input = 0;
		menu1();
		printf("请选择要修改的信息>:");
		scanf("%d", &input);
		switch (input)
		{
		case NAME:
			printf("请输入修改后的名字>:");
			scanf("%s", pc->data[ret].name);
			break;
		case AGE:
			printf("请输入修改后的年龄>:");
			scanf("%d", &(pc->data[ret].age));
			break;
		case SEX:
			printf("请输入修改后的性别>:");
			scanf("%s", pc->data[ret].sex);
			break;
		case EXIT1:
			break;
		default:
			printf("选择错误,请重新选择>:");
			break;
		}
		printf("恭喜您,修改联系人信息成功\n");
	}
}
void ShowContact(pContact pc)//显示通讯录联系人信息
{
	int  i = 0;
	if (pc->count == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	for (i = 0; i < pc->count; i++)
	{
		printf("%s %d %s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex);
	}
	printf("--------------------------------------------------------------------\n");
}

void EmptyContact(pContact pc)//清空联系人信息
{
	pc->count = 0;
	printf("恭喜您,联系人清空成功\n");
}

void SortContact(pContact pc)//以名字排序所有联系人(冒泡排序)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < pc->count - 1; i++)
		for (j = 0; j < pc->count - 1 - i; j++)
		{
			if (strcmp(pc->data[j].name, pc->data[j + 1].name)>0)
			{
				PeoInfo tmp;
				tmp = pc->data[j];
				pc->data[j] = pc->data[j + 1];
				pc->data[j + 1] = tmp;
			}
		}
	printf("排序成功,请查看\n");
}


test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"

void menu()//通讯录所有功能菜单
{
	printf("*************************\n");
	printf("*** 1.Add    2.Del    ***\n");
	printf("*** 3.Find   4.modify ***\n");
	printf("*** 5.Show   6.Sort   ***\n"); 
	printf("*** 7.Empty  0.Exit   ***\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 FIND:
			FindContact(&my_con);
			break;
		case MODIFY:
			ModifyContact(&my_con);
			break;
		case SHOW:
			ShowContact(&my_con);
			break;
		case SORT:
			SortContact(&my_con);
			break;
		case EMPTY:
			EmptyContact(&my_con);
			break;
		case EXIT:
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	system("pause");
	return 0;
}

具体实现,请完成各个功能模块后自己尝试。

录制gif动画请使用LICEcap软件,附下载链接:点击打开链接

猜你喜欢

转载自blog.csdn.net/weixin_40123831/article/details/80251838