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