今天写了个通讯录,给大家看一下
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
extern meau();//目录函数就没写出来了,大家可以自己写一下
typedef struct T//定义一个结构体
{
char name[10];
char sex[4];
int age;
char tetl[13];
char add[20];
}T;
int count = 0;//全局变量,用来记录电话个数
void add(T *p)//添加目录
{
int falg = 0;
do
{
printf("请输入姓名:\n");//这里需要注意的是结构体指针的运用,根据scanf函数的特性
scanf("%s", (*(p + count)).name);//输入字符串的时候不用取地址,输入整形的时候需要取地址
printf("请输入性别:\n");
scanf("%s", (*(p + count)).sex);
printf("请输入年龄:\n");
scanf("%d", &((*(p + count)).age));
printf("请输入电话号码:\n");
scanf("%s", (*(p + count)).tetl);
printf("请输入用户地址:\n");
scanf("%s", (*(p + count)).add);
count++;
printf("输入完成!按0退出,按任意键继续输入!\n");
scanf("%d", &falg);
} while (falg);
}
void dele(T*p) //删除通讯录的函数
{
int i = 0;
int flag = 0;
char goal[10] = {0};
do
{
printf("请输入要删除的用户名:\n");
scanf("%s", goal);
for (i = 0; i
{
if (!strcmp(goal, (*(p + i)).name))
{
while (i <= count)//这里是个讲数组第i个元素以后的元素向前挪动,达到删除i元素的目的得一个/ //算法
{
*(p + i) = *(p + i + 1);
i++;
}
count--;
flag = 0;
}
else
flag = 1;
}
if (flag)
{
printf("输入用户不存在,按任意键重新输入,按0意键退出:\n");
scanf("%d", &flag);
}
} while (flag);
}
void find(T*p)//查找函数
{
int i = 0;
int flag = 0;
char goal[10] = { 0 };
do
{
printf("请输入要查找的用户名:\n");
scanf("%s", goal);
for (i = 0; i
{
if (!strcmp(goal, (*(p + i)).name))
{
printf("姓名:%s\n", (*(p + i)).name);
printf("性别:%s\n", (*(p + i)).sex);
printf("年龄:%d\n", (*(p + i)).age);
printf("电话号码:%s\n", (*(p + i)).tetl);
printf("家庭地址:%s\n", (*(p + i)).add);
flag = 0;
}
else
flag = 1;
}
if (flag)
{
printf("输入用户不存在,选择0退出,按任意键继续查找\n");
scanf("%d", &flag);
}
} while (flag);
}
void revise(T*p)//修改函数
{
int i = 0;
int flag = 0;
char goal[10] = { 0 };
do
{
printf("请输入要查找的用户名:\n");
scanf("%s", goal);
for (i = 0; i
{
if (!(strcmp(goal, (*(p + i)).name)))
{
printf("请选择你要修改的内容:\n1.姓名\n2.性别\n3.年龄\n4.电话号码\n5.家庭住址\n");
scanf("%d", &flag);
switch (flag)
{
case 1:
{
printf("请输入新的姓名:\n");
scanf("%s", (*(p + i)).name);
break;
}
case 2:
{
printf("请输入新的性别:\n");
scanf("%s", (*(p + i)).sex);
break;
}
case 3:
{
printf("请输入新的年龄:\n");
scanf("%d", &((*(p + i)).age));
break;
}
case 4:
{
printf("请输入新的电话号码:\n");
scanf("%s", (*(p + i)).tetl);
break;
}
case 5:
{
printf("请输入新的用户地址:\n");
scanf("%s", (*(p + i)).add);
break;
}
default:
{
printf("指令有误,请重新输入!\n");
break;
}
}
flag = 0;
}
else
flag = 1;
}
if (flag)
{
printf("输入用户不存在,选择任意键继续,按0键退出:\n");
scanf("%d", &flag);
}
} while (flag);
}
void display(T*p)//打印所有电话簿的函数
{
int i = 0;
if (count)
{
for (i = 0; i
{
printf("姓名:%s\n", (*(p + i)).name);
printf("性别:%s\n", (*(p + i)).sex);
printf("年龄:%d\n", (*(p + i)).age);
printf("电话号码:%s\n", (*(p + i)).tetl);
printf("家庭地址:%s\n", (*(p + i)).add);
}
}
else
{
printf("电话簿内无内容!\n");
}
}
void empty(T*p)//清空函数,这里我没有将数组内容清空,而是将count改为0,使电话薄刷新
{
count = 0;
}
void dobble(T*p)//冒泡排序对姓名排序
{
int i = 0;
int j = 0;
for (i = 0; i
{
for (j = 0; j
{
if (strcmp((*(p + j)).name, (*(p + j+1)).name) > 0)
{
*(p + count) = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = *(p + count);
}
}
}
}
int main()
{
T tel[1000];
T*p = tel;
int key = 0;
do
{
meau();
printf("请选择:\n");
scanf("%d", &key);
switch (key)
{
case 1:
{
add(p);
break;
}
case 2:
{
dele(p);
break;
}
case 3:
{
find(p);
break;
}
case 4:
{
revise(p);
break;
}
case 5:
{
display(p);
break;
}
case 6:
{
empty(p);
break;
}
case 7:
{
dobble(p);
break;
}
case 0:
{
return 0;
}
default:
{
printf("输入错误,请重新输入!\n");
break;
}
}
} while (key);
system("pause");
return 0;
}
如有不足之处,希望指正