C语言用结构体写一个通讯录

来源:互联网 发布:爱奇艺去广告优化版 编辑:程序博客网 时间:2024/05/16 15:50

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

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include <string.h>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 < count; i++){if (!strcmp(goal, (*(p + i)).name)){while (i <= count)//这里是个讲数组第i个元素以后的元素向前挪动,达到删除i元素的目的得一个/                  //算法{*(p + i) = *(p + i + 1);i++;}count--;flag = 0;}elseflag = 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 <  count; 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;}elseflag = 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 < count; 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;}elseflag = 1;}if (flag){printf("输入用户不存在,选择任意键继续,按0键退出:\n");scanf("%d", &flag);}} while (flag);}void display(T*p)//打印所有电话簿的函数{int i = 0;if (count){for (i = 0; i < count; 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 < count; i++){for (j = 0; j < count - i - 1; 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;}

如有不足之处,希望指正

本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1717800

0 0