c语言实现通讯录(静态) 本人第一次写博客,如有不好的地方,请见谅
目录
实现通讯录,
1.存放1000人的信息 2, 每个人的信息包含(名字,年龄,性别,电话,地址),结构体 3,增加人的信息 4,删除人的信息 5,修改人的信息 6,查找指定人的信息 7,排序人的信息
后续会发布动态版的通讯录
开始实现通讯录
首先要先初始化信息,可在头文件里面实现
1 2 3 4 5 6 7 8 9 typedef struct peoinfo { char name[max_name] ; char sex[max_sex] ; int age; char tele[max_tele] ; char addr[max_addr] ; }peoinfo;
同时在上方定义一些变量,以便后续修改
1 2 3 4 5 #define max_name 20 #define max_sex 10 #define max_tele 12 #define max_addr 30 #define max 1000
菜单的实现,与用户进行交互
1 2 3 4 5 6 7 8 void menu () { printf ("******************************\n" ); printf ("***1,add 2,dele***********\n" ); printf ("***3,search 4,modify*********\n" ); printf ("***5,sort 6,print**********\n" ); printf ("************0,exit************\n" ); }
可使用枚举对这些量进行实现,在case语句中显得更加直观
1 2 3 4 5 6 7 8 9 10 enum option// 使用枚举让case中更加显而易见 { exit , add, dele, search, modify, sort, print };
主函数
选择为0,会打印退出通讯录
选择在1-6中会调用相关的函数,并对函数进行实现
若选择不为0-6范围内,则会提示选择错误,请重新输入一个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 int main() { // 使用增删查改,多样化实现,可以使用菜单 int input; // 创建通讯录 // peoinfo data[max];// 每次使用peoinfo都要加struct比较麻烦 //i nt sz = 0 ;可以将两者结合,使用一个结构体变量 contact con; // 初始化通讯录的函数 initcontact(&con);// 会改变应该要传递地址 do { menu(); printf("请选择" ); scanf("%d" , &input); switch (input) { case add: // 增加人的信息,总得知道当前通讯录有几个信息,要知道通讯录中当前总共有几个元素 addcontact(&con);// 会改变con用传地址 break ; case dele: delcontact(&con);// 也会改变通讯录,因此传地址 break ; case search: searchcontact(&con); break ; case modify: modifycontact(&con); break ; case sort: break ; case print: printcontact(&con);// 把通讯录里面相关信息打印出来不会改变,但是传地址效率更高 break ; case exit : printf("退出通讯录" ); break ; default: printf("选择错误" ); break ; } } while (input); return 0 ; }
对其中进行实现
1.实现通讯录多个人的信息,放在contact.h里面
1 2 3 4 5 typedef struct contact { peoinfo data[max]; int sz; }contact;
均在这里面对函数进行实现
2.初始化通讯录
1 2 3 4 5 6 void initcontact(contact* pc) { pc -> sz = 0 ; memset (pc->data , 0, sizeof(pc->data )); }
3.增加通讯录人的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 void addcontact(contact* pc) { if (pc-> sz == max) { printf("通讯录已满,无法添加" ); return; } printf("请输入一个人的名字" ); scanf ("%s", pc->data [pc-> sz].name ); printf("请输入年龄" ); scanf ("%d", &(pc->data [pc-> sz].age)); printf("请输入性别" ); scanf ("%s", pc->data [pc-> sz].sex); printf("请输入电话" ); scanf ("%s", pc->data [pc-> sz].tele); printf("请输入地址" ); scanf ("%s", pc->data [pc-> sz].addr); pc -> sz++; printf("添加成功" ); }
3.打印人的信息
1 2 3 4 5 6 7 8 9 10 11 12 void printcontact(const contact* pc) { int i = 0 ; printf("%-20s %-5s %-5s %-12s %-20s\n" , "名字" ,"年龄" ,"性别" ,"电话" ,"地址" ); for (i = 0; i < pc-> sz; i++) { printf ("%-20s %-5d %-5s %-12s %-20s\n", pc->data [i].name , pc->data [i].age, pc->data [i].sex, pc->data [i].tele, pc->data [i].addr); } }
4.删除人的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 static int findbyname(contact*pc, char name []) { int i = 0 ; for (i = 0; i < pc-> sz; i++) { if (strcmp(pc->data [i].name ,name )==0 ) return i; } return -1 ; } void delcontact(contact*pc) { char name [max_name]; if (pc-> sz == 0 ) { printf("通讯录为空,无需删除\n" ); return; } printf("请输入要删除人的名字" ); scanf("%s" , name ); int pos=findbyname(pc, name ); if (pos == -1 ) { printf("要删除的人不存在" ); return; } int i;for (i = pos; i < pc-> sz-1 ; i++) { pc ->data [i] = pc->data [i + 1 ]; }pc -> sz--; printf("删除成功" ); }
5.查找人的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 void searchcontact(contact*pc) { char name [max_name]; printf("请输入要查找人的名字" ); scanf("%s" , name ); int pos = findbyname(pc, name ); if (pos == -1 ) { printf("要查找的人不存在" ); return; } else { printf ("%-20s %-5d %-5s %-12s %-20s\n", pc->data [pos].name , pc->data [pos].age, pc->data [pos].sex, pc->data [pos].tele, pc->data [pos].addr); } }
6.修改人的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 void modifycontact(contact*pc) { // 首先是查找 char name[max_name]; printf ("请输入要修改人的名字" ); scanf("%s" , name); int pos = findbyname(pc, name);// 通过名字查找,sz对应的数大于0 ,因此当pos =-1 时,就没找到 //告诉有或没有 if (pos == -1 ) { printf ("要修改的人不存在" ); return ; } else { printf ("请输入一个人的名字" ); scanf("%s" , pc->data[pos ].name); printf ("请输入年龄" ); scanf("%d" , &(pc->data[pos ].age)); printf ("请输入性别" ); scanf("%s" , pc->data[pos ].sex); printf ("请输入电话" ); scanf("%s" , pc->data[pos ].tele); printf ("请输入地址" ); scanf("%s" , pc->data[pos ].addr); printf ("修改成功" ); } }