c语言结构体通讯录例题,C语言用结构体写一个通讯录

今天写了个通讯录,给大家看一下

#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;

}

如有不足之处,希望指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值