通讯录项目的实现

一、通讯录项目实现步骤

 创建通讯录->初始化通讯录->实现通讯录删添功能->实现通讯录修改某联系人功能->实现搜索联系人功能->实现重新排序通讯录所有联系人功能->实现展示通讯人所有联系人功能->....等,目前就先实现通讯录基本的功能吧.

二、各个步骤的阐释与注解 

1.通讯录的创建与初始化 

通讯录是保存联系人信息的功能,想想咱们手机上的通讯人,每一个联系人都会有(姓名,性别,年龄,手机号,住址等信息栏),故联系人是一个复杂的对象,那咱们就可以创建 一个结构体。

​#define MAX_NAME 20     
#define MAX_SEX 10
#define MAX_ADD 50
#define MAX_PHONE 25
#define MAX_COUNT 1000
typedef struct people
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int old;
	char phone[MAX_PHONE];
	char address[MAX_ADD];
}people;

​

这里数组的大小是我宏定义过的,这样我们就方便后期的统一修改。这时候我们就又有一个问题,因为我们创建的联系人的结构体数组是直接创建了1000的容量,我该怎么知道此时通讯录保存了多少人,是很麻烦一件事,所有我们进行了下面的优化,来解决了这一问题。

通讯录项目的实现_第1张图片

用size来记录此时通讯人保存的人数,若没有联系人,则size的值为0。这样一个完美的通讯录类型创建完成,这里我们定义一个变量:contact con;下面就开始通讯录的初始化了。

通讯录项目的实现_第2张图片 初始化也是挺简单的,只需要运用一个memset函数,简单对memset注释一下吧,memset的第一个形参值的是你要操作的变量,第二形参是,你要初始化的值,注意这里初始化的值,是按每个字节初始化的,第三个是你要初始化的字符数,也就是字节数。

2.通讯的增加与删除功能 

通讯录项目的实现_第3张图片

你看,这里size的作用就体现出来,没有size你就不知道当前通讯录是一种什么状态,是满,还是怎么的。这里要记得,添加完联系人后,记得讲size的值+1

通讯录项目的实现_第4张图片

这里,是实现了一个由联系人姓名来找到联系人,因为后面的删除,修改,查找功能都离不开这个功能,所有单独封装一个函数。若查找成功,则返回其下标,否则返回-1以表示该联系人不存在,

通讯录项目的实现_第5张图片 

这里,没什么要着重说明的,记得size的值--都行。 

3.通讯录的修改与查找功能

通讯录项目的实现_第6张图片 

上面是通讯录的修改功能

通讯录项目的实现_第7张图片

这是通讯录的查找功能

4.通讯录的排序与展示

通讯录项目的实现_第8张图片

这里对通讯录的排序要利用一个排序函数qsort,上面是我们编程者自己实现的排序原则,此函数的确有些复杂,这是关于qsort的详解,若想跟深入的理解qsort函数,可以去模拟实现一下。我也把有关次,模拟的讲解链接,放在这

排序神器——qsort函数之详解-CSDN博客

冒泡排序进阶之模拟qsort排序函数(回调函数用法讲解)-CSDN博客

通讯录项目的实现_第9张图片

咱们用的通讯录,肯定有各种排序功能,而这里我则就实现了两种。 

通讯录项目的实现_第10张图片

这里则是通讯录的展示功能

三、完整的代码展示如下

1.test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
	printf("欢迎来到高智能梦涵通讯录\n");
	printf("添加联系人请按数字-----1\n");
	printf("删除联系人请按数字-----2\n");
	printf("修改联系人请按数字-----3\n");
	printf("查找联系人请按数字-----4\n");
	printf("展示已有联系人请按数字-5\n");
	printf("重新排序联系人请按数字-6\n");
	printf("挂断智能梦涵机器人请按-0\n");
}
enum funtion
{
	EXIT,
	ADD,
	REMOVE,
	CHANGE,
	SEARCH,
	SHOW,
	SORT,
};
int main()
{
	int input = 0;
	contact con;
	Initcon(&con);
	do
	{
		system("cls");
		menu();
		scanf("%d",&input);
		switch(input)
		{
		case ADD:
			Add_contact(&con);
			system("pause");
			break;
		case REMOVE:
			Remove_contact(&con);	
			system("pause");
			break;
		case CHANGE:
			Change_contact(&con);
			system("pause");
			break;
		case SEARCH:
			Search_contact(&con);
			system("pause");
			break;
		case SHOW:
			Show_contact(&con);
			system("pause");
			break;
		case SORT:
			Sort_contact(&con);
			system("pause");
			break;
		case EXIT:
			system("cls");
			printf("主人,期待与你的下次相遇\n");
			break;
		default:
			printf("找不到此功能,请重新输入\n");
		}
	}while(input);
	return 0;
}
2.contact.h (通讯录功能函数的声明)
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"

void Initcon(contact* con)
{
	memset(con,0,sizeof(contact));
	//memset(con->date,0,sizeof(con->date));
	//con->size = 0;
}
void Add_contact(contact* con)
{
	//判断通讯录是否已达到满值
	if(con->size == MAX_COUNT)
		printf("通讯录已满,请删除一些失联人后再添加\n");
	else
	{
		printf("请输入联系人姓名>.");
		scanf("%s",con->date[con->size].name);
		printf("请输入联系人性别>.");
		scanf("%s",con->date[con->size].sex);
		printf("请输入联系人年龄>.");
		scanf("%d",&con->date[con->size].old);
		printf("请输入联系人电话>.");
		scanf("%s",con->date[con->size].phone);
		printf("请输入联系人地址>.");
		scanf("%s",con->date[con->size].address);
	}
	con->size++;
	printf("添加成功\n");
}
void Show_contact(contact* con)
{
	int i = 0;
	printf("%-10s\t %-10s\t %-10s\t %-10s\t %-10s\n","姓名","性别","年龄","电话","地址");
	for(i=0;isize;i++)
	{
		printf("%-10s\t %-10s\t %-10d\t %-10s\t %-10s\n",con->date[i].name,
			con->date[i].sex,
			con->date[i].old,
			con->date[i].phone,
			con->date[i].address);
	}
}
static int Find(contact* con)
{
	int i = 0;char zmh[MAX_NAME];
	printf("请输入你要操作的对象>.");
	scanf("%s",zmh);
	for(i=0;isize;i++)
	{
		if(!(strcmp(zmh,con->date[i].name)))
			return i;
	}
	if(i==con->size)
		return -1;
}
void Remove_contact(contact* con)
{
	int ret = Find(con);
	if(-1==ret)
		printf("该联系人不存在\n");
	else
	{
		int i = 0;
		for(i=ret;isize-1;i++)
		{
			con->date[i] = con->date[i+1];
		}
		con->size--;
		printf("删除成功\n");
	}
}
void Change_contact(contact* con)
{
	int ret = Find(con);
	if(-1==ret)
		printf("该联系人不存在\n");
	else
	{
		printf("请输入联系人姓名>.");
		scanf("%s",con->date[ret].name);
		printf("请输入联系人性别>.");
		scanf("%s",con->date[ret].sex);
		printf("请输入联系人年龄>.");
		scanf("%d",&con->date[ret].old);
		printf("请输入联系人电话>.");
		scanf("%s",con->date[ret].phone);
		printf("请输入联系人地址>.");
		scanf("%s",con->date[ret].address);
		printf("修改成功\n");
	}
}
void Search_contact(contact* con)
{
	int ret = Find(con);
	if(-1==ret)
		printf("该联系人不存在\n");
	else
	{
		printf("%-10s\t %-10s\t %-10s\t %-10s\t %-10s\n","姓名","性别","年龄","电话","地址");
		printf("%-10s\t %-10s\t %-10d\t %-10s\t %-10s\n",con->date[ret].name,
			con->date[ret].sex,
			con->date[ret].old,
			con->date[ret].phone,
			con->date[ret].address);
	}
}
static int cmp_int(const void* e1,const void* e2)
{
	return *(int*)e1-*(int*)e2;
}
static int cmp_char(const void* e1,const void* e2)
{//这里之所以用const关键字,是因为咱们只是用此函数比较的,为了变量的安全性,加上const以表不能修改
	return strcmp(((people*)e1)->name,((people*)e2)->name);
}
void Sort_contact(contact* con)
{
	int input = 0;
	printf("按姓名字典序排序,请输入--1\n");
	printf("按年龄的大小排序,请输入--2\n");
	printf("更多排序方式 ,等梦涵更新哦!");
	printf("请选择你要排序的方式>.");
	scanf("%d",&input);
	switch(input)
	{
	case 1:qsort(con->date,con->size,sizeof(con->date[0]),cmp_char);
		break;
	case 2:qsort(con->date,con->size-1,sizeof(con->date[0]),cmp_int);
		break;
		/*目前只提供两种类型的其中一种排序原则,原理都是一样的*/
	default:
		break;
	}
	printf("排序成功\n");
}
3.contact.c(通讯录功能函数的实现) 
#define _CRT_SECURE_NO_WARNINGS 1

#include
#include
#include
#include

#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_ADD 50
#define MAX_PHONE 25
#define MAX_COUNT 1000
//创建通讯录
typedef struct people
{
    char name[MAX_NAME];
    char sex[MAX_SEX];
    int old;
    char phone[MAX_PHONE];
    char address[MAX_ADD];
}people;
typedef struct contact
{
    people date[MAX_COUNT];
    int size;
}contact;
//初始化通讯录
void Initcon(contact* con);
//添加联系人
void Add_contact(contact* con);
//删除联系人
void Remove_contact(contact* con);
//修改联系人
void Change_contact(contact* con);
//查找联系人
void Search_contact(contact* con);
//重新排序
void Sort_contact(contact* con);
//展示联系人
void Show_contact(contact* con);

 

 

你可能感兴趣的:(java,前端,服务器)