###实现一个通讯录的基本增删查改功能。
###代码实现
contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#define MAX 1000
typedef struct PeInfo
{
char name[20];
int age;
char sex[10];
char tele[20];
char addr[30];
}PeInfo;
typedef struct Contact
{
PeInfo data[MAX];
int sz;
}Contact, *pContact;
void init_con(pContact p);//初始化通讯录
void Add_con(pContact p);// 添加联系人信息
void Dele_con(pContact p);//删除指定联系人信息
void Find_con(pContact p);//查找指定联系人信息
void Revise_con(pContact p);//修改指定联系人信息
void Display_con(pContact p);//显示所有联系人信息
void Empty_con(pContact p);//清空所有联系人
void Sort_con(pContact p);//以名字排序所有联系人
void adj(pContact p, int i);//写入数据
contact.c
#include"contact.h"
void adj(pContact p, int i)//写入数据
{
printf("请输入姓名:\n");
scanf("%s", p->data[i].name);
printf("请输入年龄:\n");
scanf("%d", &(p->data[i].age));
printf("请输入性别:\n");
scanf("%s", p->data[i].sex);
printf("请输入电话:\n");
scanf("%s", p->data[i].tele);
printf("请输入住址:\n");
scanf("%s", p->data[i].addr);
}
void init_con(pContact p)
{
int sz = sizeof(p->data);
p->sz = 0;
memset(p->data, 0, sz);
}
void Add_con(pContact p)// 添加联系人信息
{
if(p->sz == MAX )
{
printf("通讯录已满!\n");
return ;
}
adj(p, p->sz);//写入数据
p->sz++;
}
void Dele_con(pContact p)//删除指定联系人信息
{
int i=0;
int j=0;
char ch=0;
char name[20]={0};
if(p->sz==0)
{
printf("通讯录为空\n");
return;
}
while(1)
{
printf("输入删除对象姓名:");
scanf("%s", name);
for(i=0; i<p->sz; i++)
{
if(strcmp(name, p->data[i].name)==0)
break;
}
if(i==p->sz)
{
printf("不存在\n");
return;
}
printf("确认是否删除?y/n\n");
scanf("%c", &ch);
if(ch=='y')
{
for(j=i; j<(p->sz-1); j++)
{
p->data[j]=p->data[j+1];
}
p->sz--;
return;
}
else
return;
}
}
void Find_con(pContact p)//查找指定联系人信息
{
int i=0;
char name[20]={0};
printf("所查找人姓名:");
scanf("%s", name);
for(i=0; i<p->sz; i++)
{
if(strcmp(name, p->data[i].name)==0)
{
printf("%15s%10s%10s%20s%20s\n","name","age","sex","tele","addr");
printf("%15s%10d%10s%20s%20s\n",p->data[i].name, p->data[i].age, p->data[i].sex,
p->data[i].tele, p->data[i].addr);
return;
}
}
if(i==p->sz)
printf("不存在\n");
return;
}
void Revise_con(pContact p)//修改指定联系人信息
{
int i=0;
char name[20]={0};
if(p->sz==0)
{
printf("通讯录为空");
return;
}
printf("输入修改对象姓名:");
scanf("%s", name);
for(i=0; i<p->sz; i++)
{
if(strcmp(name, p->data[i].name)==0)
{
printf("要修改人信息:\n");
printf("%15s%10s%10s%20s%20s\n","name","age","sex","tele","addr");
printf("%15s%10d%10s%20s%20s\n",p->data[i].name,
p->data[i].age, p->data[i].sex,
p->data[i].tele, p->data[i].addr);
printf("修改为:\n");
adj(p, i);
printf("修改完成\n");
return;
}
}
if(i==p->sz)
printf("不存在\n");
return;
}
void Display_con(pContact p)//显示所有联系人信息
{
int i=0;
printf("%15s%10s%10s%20s%20s\n","name","age","sex","tele","addr");
if(p->sz==0)
{
printf("空\n ");
}
for(i=0; i<p->sz; i++)
{
printf("%15s%10d%10s%20s%20s\n",p->data[i].name, p->data[i].age, p->data[i].sex,
p->data[i].tele, p->data[i].addr);
}
}
void Empty_con(pContact p)//清空所有联系人
{
while (1)
{
char ch=0;
printf("确认删除?y/n\n");
scanf("%c", &ch);
if(ch=='y')
{
p->sz=0;
break;
}
else if(ch=='n')
break;
else
continue;
}
return;
}
void Sort_con(pContact p)//按字母排序所有联系人
{
int i = 0;
int j = 0;
for(i=0;i<p->sz-1;i++)
{
for(j=0;j<p->sz-1-i;j++)
{
if(strcmp(p->data[j].name,p->data[j+1].name)>0)
{
PeInfo temp;
temp = p->data[j];
p->data[j] = p->data[j+1];
p->data[j+1] = temp;
}
}
}
printf("排序完成\n");
return;
}
test.c//测试部分
#include"contact.h"
void menu()//菜单打印
{
printf("**************************\n");
printf("***** 通 讯 录 *****\n");
printf("**************************\n");
printf("***** 1.添加 2.删除 *****\n");
printf("***** 3.查找 4.修改 *****\n");
printf("***** 5.列表 6.清空 *****\n");
printf("***** 7.排序 8.退出 *****\n");
printf("**************************\n");
}
int main()
{
Contact con;
int input = 0;
init_con(&con);
do{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
Add_con(&con);
break;
case 2:
Dele_con(&con);
break;
case 3:
Find_con(&con);
break;
case 4:
Revise_con(&con);
break;
case 5:
Display_con(&con);
break;
case 6:
Empty_con(&con);
break;
case 7:
Sort_con(&con);
break;
case 0:
exit(1);
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}while(1);
return 0;
}
###以下为通讯录界面,以及部分功能的实现界面
若有不正之处恳请请留言指正