该通讯录可实现的功能有:
增、删、查、改和显示、清空所有联系人,动态内存以及按名字排序所有联系人 。
(后续还会添加新的功能)
#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;
}