通讯录的编译

 该通讯录可实现的功能有:

 增、删、查、改和显示、清空所有联系人,动态内存以及按名字排序所有联系人 。
(后续还会添加新的功能)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct contact
{
    char name[1024];
    char nub[1024];
}contact;


typedef struct telephone_book
{
contact* people;
//通讯录中的有效联系人个数
int sequence;
//动态数组的大小
int size;
}telephone_book;

telephone_book your_phone_book;
int menu()
{
	int a = 0;
printf("*********************\n");
printf("请选择你需要的操作\n");
printf("1.添加联系人\n");
printf("2.删除联系人\n");
printf("3.更改联系人\n");
printf("4.查找联系人\n");
printf("5.显示所有联系人\n");
printf("6.清空通讯录\n");
printf("0.退出\n");
printf("*********************\n");
scanf("%d", &a);
return a;
}
enum {
	EXIT = 0,
	ADD,
	DEL,
	MODIFY,
	FIND,
	PRINT,
	CLEAR,
};

void init()
{
	//将通讯录中的内容都改为空
	//int i = 0;
your_phone_book.sequence = 0;
//for(i=0; i<math; i++)\
//{
//strcpy(your_phone_book.people[i].name,"");
//strcpy(your_phone_book.people[i].nub,"");
//}
//将通讯录中的内容都改为0
//memset(your_phone_book.people,0x0,
//	   sizeof(your_phone_book.people));
your_phone_book.size = 1000;
your_phone_book.people = (contact*)
   malloc(sizeof(contact)*your_phone_book.size);
}
void msort()
{
	//对通讯录中的联系人按姓名排序
	int seq = your_phone_book.sequence;
	char nam[1024] = {0};
	char nb[1024] ={0};
	if(your_phone_book.sequence < 1)
	{
	return;
	}
	while(strcmp(your_phone_book.people[seq].name,
		your_phone_book.people[seq-1].name) == -1)
{
strcpy(nam,your_phone_book.people[seq].name);
strcpy(your_phone_book.people[seq].name,
	   your_phone_book.people[seq-1].name);
strcpy(your_phone_book.people[seq-1].name,nam);
strcpy(nb,your_phone_book.people[seq].nub);
strcpy(your_phone_book.people[seq].nub,
	   your_phone_book.people[seq-1].nub);
strcpy(your_phone_book.people[seq-1].nub,nb);
seq--;
}
}
void add_yourphone()
{
	/*int i = 0;
	if(your_phone_book.sequence == your_phone_book.size)
	{
		contact* top = (contact*)
			malloc(sizeof(contact)*your_phone_book.size);
		your_phone_book.size *= 2;
		for(i=0; i<your_phone_book.sequence; i++)
		{
			top[i] = your_phone_book.people[i];
		}
		free(your_phone_book.people);
		your_phone_book.people = top;
	}*/
printf("请输入用户名");
scanf("%s",your_phone_book.people[your_phone_book.sequence].name);
printf("请输入号码");
scanf("%s",your_phone_book.people[your_phone_book.sequence].nub);
msort();
++your_phone_book.sequence;
printf("插入成功!\n");
return;
}
void print_yourphone()
{
	int i = 0;
printf("打印通讯录\n");
for(i=0; i<your_phone_book.sequence;i++)
{
	printf("[%d] %s %s\n",i,your_phone_book.people[i].name,
		your_phone_book.people[i].nub);
	
}
printf("打印成功,共%d位联系人。\n",your_phone_book.sequence);
		return;
}
void del_yourphone()
{

	int num = 0;
printf("请输入您要删除的联系人编号!");
scanf("%d",&num);
if(num<0 || num>=your_phone_book.sequence)
{
printf("输入不合法!请重新输入!\n");
del_yourphone();
return;
}

if(num != your_phone_book.sequence-1)
{
	strcpy(your_phone_book.people[num].name,
		your_phone_book.people[your_phone_book.sequence-1].name);
	strcpy(your_phone_book.people[num].nub,
		your_phone_book.people[your_phone_book.sequence-1].nub);
}
 --your_phone_book.sequence;
printf("删除成功!\n");
}
void modify_yourphone()
{
	char nam[1024] = {0};
	char nb[1024] ={0};
	int num = 0;
printf("请输入您要修改的联系人编号\n");
scanf("%d", &num);
//保证要修改的联系人存在于通讯录中
if(num<0 || num>=your_phone_book.sequence)
{
printf("输入不合法,更改联系人失败!\n");
return;
}
printf("请输入新的联系人姓名:\n" );
scanf("%s",&your_phone_book.people[num].name);
printf("请输入新的联系人电话:\n" );
scanf("%s",&your_phone_book.people[num].nub);
printf("更改成功!\n");
while(num && (num != (your_phone_book.sequence-1)))
{
	if(strcmp(your_phone_book.people[num].name,
		your_phone_book.people[num-1].name)>0)
	{
	if(strcmp(your_phone_book.people[num].name,
		your_phone_book.people[num+1].name)>0)
	{
strcpy(nam,your_phone_book.people[num].name);
strcpy(your_phone_book.people[num].name,
	   your_phone_book.people[num+1].name);
strcpy(your_phone_book.people[num+1].name,nam);
strcpy(nb,your_phone_book.people[num].nub);
strcpy(your_phone_book.people[num].nub,
	   your_phone_book.people[num+1].nub);
strcpy(your_phone_book.people[num+1].nub,nb);	
	num += 1;
	}
	}
	else
	{
	strcpy(nam,your_phone_book.people[num].name);
strcpy(your_phone_book.people[num].name,
	   your_phone_book.people[num-1].name);
strcpy(your_phone_book.people[num-1].name,nam);
strcpy(nb,your_phone_book.people[num].nub);
strcpy(your_phone_book.people[num].nub,
	   your_phone_book.people[num-1].nub);
strcpy(your_phone_book.people[num-1].nub,nb);
num -= 1;
	}
}
return;
}
void find_yourphone()
{
	int count = 0;
	char nam[1024] = {0};
	int i = 0;
	printf("请输入要查找的联系人的姓名:\n");
	scanf("%s", nam);
	for(i=0; i<your_phone_book.sequence; i++)
	{
		if(strcmp(nam,your_phone_book.people[i].name) == 0)
		{
			printf("%s  %s\n",your_phone_book.people[i].name,
				your_phone_book.people[i].nub);
			count++;
		}		
	}
	if(count == 0)
	{
	printf("查找失败,未找到%s!\n",nam);
		return;
	}
printf("查找成功!共找到%d条消息。\n",count);
}
void clear_yourphone()
{
	char num[1024] = {0};
printf("清除所有联系人信息!\n");
printf("确定请按 y ,取消请按 n \n");
scanf("%s", &num);
if(strcmp(num,"y") == 0)
{
	your_phone_book.sequence = 0;
	printf("删除成功!\n");
return;
}
printf("已取消删除\n");
}


int main()
{ 
	//1.创建并初始化通讯录
	init();
	//2.用户对通讯录的操作
while(1)
{
int a = menu();
switch(a)
{
	//增加联系人
case ADD:
add_yourphone();
	break;
    //删除一个联系人
case DEL:
	del_yourphone();
	break;
	//更改联系人
case MODIFY:
	modify_yourphone();
	break;
//查找联系人
case FIND:
	find_yourphone();
	break;
	//打印所有联系人
case PRINT:
	print_yourphone();
	break;
	//清空通讯录
case CLEAR:
	clear_yourphone();
	break;
case EXIT:
	printf("goodbey\n");
	system("pause");
	return 0;
default:
	printf("输入无效,请重新输入!\n");
}
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43223497/article/details/84593678