实现一个通讯录;
通讯录可以用来存储联系人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1.添加联系人信息
2.删除指定联系人信息
3.查找指定联系人信息
4.修改指定联系人信息
5.显示所有联系人信息
6.以名字排序所有联系人
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> enum OP //枚举定义switch转换的接口位置 { NUL, ADD, //ADD=1 DELETE, //DELETE=2 FIND, //FIND=3 ALTER, //ALTER=4 PRINT, //PRINT=5 SORT //SORT=6 }; void menu() { printf("************* 简易通讯录 ************\n"); printf("************* 1.添加联系人信息 ************\n"); printf("************* 2.删除联系人信息 ************\n"); printf("************* 3.查找联系人信息 ************\n"); printf("************* 4.修改联系人信息 ************\n"); printf("************* 5.显示所有联系人 ************\n"); printf("************* 6.排序所有联系人 ************\n"); printf("************* 0. 退 出 ************\n"); } typedef struct man //定义联系人相关信息的结构体 { char name[15]; char sex[6]; char adrr[30]; char phone_num[10]; }Man; Man man[10]; //存储10个联系人信息 int Add_man(Man man[],int n) //添加联系人函数 { int i = 0; char sign = 0; //继续添加时Y/N的输入 char x[10]; while (sign != 'n'&&sign != 'N') { printf("phone_number:"); scanf("%s",&man[n+i].phone_num); printf("name:"); scanf("%s", &man[n + i].name); printf("sex:"); scanf("%s",&man[n+i].sex); printf("address:"); scanf("%s",&man[n+i].adrr); gets(x); printf("\n是否继续添加?(Y/N)"); scanf("%c",&sign); i++; } return (n + i); } int Delete_man(Man man[],int n) //删除联系人信息 { char a[10]; int i = 0; int j = 0; printf("请输入要删除的联系人姓名:"); scanf("%s",a); while (strcmp(man[i].name, a) != 0 && i < n) { i++; } if (i == n) { printf("查无此人,输入有误!"); return (n); } for (j = i; j < n - 1; j++) { strcpy(man[j].phone_num, man[j + 1].phone_num); strcpy(man[j].name, man[j + 1].name); strcpy(man[j].sex, man[j + 1].sex); strcpy(man[j].adrr, man[j + 1].adrr); } printf("Delete success!\n\n\n"); return (n - 1); } void Alter_man(Man man[],int n) //修改联系人信息 { char a[10]; int i = 0; printf("请输入要修改的联系人姓名:"); scanf("%s",a); while (strcmp(man[i].name, a) != 0 && i < n) { i++; } if (i == n) { printf("查无此人,输入有误!\n"); } printf("phone_number:"); scanf("%s",&man[i].phone_num); printf("name:"); scanf("%s",&man[i].name); printf("sex:"); scanf("%s",&man[i].sex); printf("address:"); scanf("%s",&man[i].adrr); printf("Alter success!\n\n\n"); } void Find_man(Man man[],int n) //查找相关联系人 { int choose = 0; printf("******************************\n"); printf("******** 查询方式 **********\n"); printf("***** 1.people_name *****\n"); printf("******************************\n"); printf("***** 2.phone_number *****\n"); printf("******************************\n"); printf("choose one find way:"); scanf("%d",&choose); while (choose != 1 && choose != 2) { printf("输入有误,请重新输入!"); scanf("%d",&choose); } if (choose == 1) { char a[10]; int i = 0; printf("请输入要查找的联系人姓名:"); scanf("%s",a); while (strcmp(man[i].name, a) != 0 && i < n) { i++; } if (i == n) { printf("\n\n查无此人!\n\n"); } else { printf("phone_number:%s\n", man[i].phone_num); printf("name:%s\n", man[i].name); printf("sex:%s\n", man[i].sex); printf("address:%s\n", man[i].adrr); } } if (choose == 2) { char a[10]; int i = 0; printf("请输入要查找的联系人电话:"); scanf("%s",a); while (strcmp(man[i].phone_num, a) != 0 && i < n) { i++; } if (i == n) { printf("\n\n查无此号!\n\n"); } else { printf("phone_number:%s\n", &man[i].phone_num); printf("name:%s\n", man[i].name); printf("sex:%s\n", man[i].sex); printf("address:%s\n", man[i].adrr); } } } void Print_man(Man man[],int n) //显示所有联系人信息 { int i = 0; printf("----------------------------------------------\n"); printf("电话姓名性别地址\n"); printf("----------------------------------------------\n"); for (i = 0; i < n ; i++) { printf("%s \t %s \t %s \t %s\n",man[i].phone_num,man[i].name,man[i].sex,man[i].adrr); } printf("----------------------------------------------\n"); } void Sort_man(Man man[],int n) //按联系人名称排序所有联系人 { int i = 0; int j = 0; struct man tmp; for (i = 0; i < n - 1; i++) { for (j = i; j < n; j++) { if (strcmp(man[i].name, man[j].name)>0) { tmp = man[i]; man[i] = man[j]; man[j] = tmp; } } } for (i = 0; i < n ; i++) { printf("%s \t %s \t %s \t %s\n", man[i].phone_num, man[i].name, man[i].sex, man[i].adrr); } } //主函数 int main() { int input = 1; int ret = 0; while (input) { menu(); printf("请输入您的选项:>"); scanf("%d",&input); switch (input) { case ADD: //利用枚举定义的函数名替代了case后的1,2,3,4等,使得每一个调用函数的入口有意义,而非毫无意义的单纯数字 ret=Add_man(man,ret); break; case DELETE: ret=Delete_man(man,ret); break; case FIND: Find_man(man,ret); break; case ALTER: Alter_man(man,ret); break; case PRINT: Print_man(man,ret); break; case SORT: Sort_man(man,ret); break; case 0: return 0; break; default: break; } } return 0; }
联系人的添加:
联系人的显示:
联系人的排序(按名称排序):
联系人信息的修改:
修改后的联系人显示:
联系人的删除:
查找联系人(按电话或姓名查找):
1.按姓名查找
2.按电话查找: