用順序表實現的簡易通訊錄(第一版)
阿新 • • 發佈:2019-02-09
實現一個通訊錄;
通訊錄可以用來儲存1000個人的資訊,每個人的資訊包括:
姓名、性別、年齡、電話、住址
提供方法:
1. 新增聯絡人資訊
2. 刪除指定聯絡人資訊
3. 查詢指定聯絡人資訊
4. 修改指定聯絡人資訊
5. 顯示所有聯絡人資訊
6. 清空所有聯絡人
7. 以名字排序所有聯絡人
//addressbook.h
#pragma once #define MAX_PEOPLES 100 #define MAX_NAME 20 #define MAX_ADDRESS 50 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> typedef struct tag { char name[MAX_NAME]; unsigned char age; char sex[10]; char telephone[12]; char address[MAX_ADDRESS]; }People_t,*PPeople_t; typedef struct peo { People_t per_mesg[MAX_PEOPLES]; int count;//實際的人數 }seqlist,*Pseqlist; enum select{Quit,Add,Delect,Find,Modify,Print,Clear,Sort,}; void add_peo(Pseqlist message); void print_people_message(Pseqlist message); void delete_peo_message(Pseqlist message); void find(Pseqlist message); static int find_peo(Pseqlist message,char *name); void modify(Pseqlist message); void clearall(Pseqlist message); void sort(Pseqlist message); void menu();
//adderssbook.c
#include"AddressBook.h" void menu() { printf("###########################\n"); printf("#1.add############2.delete#\n"); printf("#3.find###########4.modiyf#\n"); printf("#5.print###########6.clear#\n"); printf("#7.sort###########0.quit##\n"); printf("###########################\n"); } void add_peo(Pseqlist message) { assert(message); if (message->count > MAX_PEOPLES) { printf("通訊錄已滿\n"); return; } printf("姓名:>"); scanf("%s",message->per_mesg[message->count].name); printf("年齡:>"); scanf("%d",&message->per_mesg[message->count].age); printf("性別:>"); scanf("%s",message->per_mesg[message->count].sex); printf("電話:>"); scanf("%s",message->per_mesg[message->count].telephone); printf("地址:>"); scanf("%s",message->per_mesg[message->count].address); message->count++; } void print_people_message(Pseqlist message) { assert(message); for (int i = 0; i < message->count; i++) { printf("name : %s ",message->per_mesg[i].name ); printf("age : %d ",message->per_mesg[i].age ); printf("sex : %s ",message->per_mesg[i].sex); printf("telephone : %s ",message->per_mesg [i].telephone); printf("address : %s ",message->per_mesg [i].address); printf("\n"); } } static int find_peo(Pseqlist message,char *name) { assert(message); assert(name); int i = 0; for (i = 0; i < message->count; i++) { if (strcmp(name,message->per_mesg[i].name ) == 0) { return i; } } return -1; } void delete_peo_message(Pseqlist message) { assert(message); if ( message->count <= 0) { printf("通訊錄為空\n"); return ; } printf("請輸入要刪除的聯絡人姓名:>"); char name[10]; scanf("%s",name); int ret = find_peo(message,name); if (ret != -1) { for (int j = ret; j < message->count; j++) { message->per_mesg[j] = message->per_mesg[j+1]; } printf("刪除成功\n"); message->count--; return ; } else { printf("通訊錄中沒有要刪除的聯絡人\n"); } } void find(Pseqlist message) { assert(message); if ( message->count <= 0) { printf("通訊錄為空\n"); return ; } printf("請輸入你要查詢聯絡人的姓名:>"); char name[10]; scanf("%s",name); int ret = find_peo(message,name); if (ret != -1) { printf("name : %s age: %d sex : %s telephone : %s address %s\n",\ message->per_mesg[ret].name,message->per_mesg[ret].age,message->per_mesg[ret].sex,\ message->per_mesg[ret].telephone,message->per_mesg[ret].address); } else { printf("沒有找到該聯絡人\n"); } } void modify(Pseqlist message) { assert(message); if ( message->count <= 0) { printf("通訊錄為空\n"); return ; } printf("請輸入要修改聯絡人的姓名:>"); char name[10]; scanf("%s",name); int ret = find_peo(message,name); if (ret != -1) { printf("請輸入要修改後的名字:>"); scanf("%s",message->per_mesg[ret].name); printf("請輸入修改後的年齡:>"); scanf("%d",&message->per_mesg[ret].age); printf("請輸入修改後的性別:>"); scanf("%s",message->per_mesg[ret].sex); printf("請輸入修改後的電話:>"); scanf("%s",message->per_mesg[ret].telephone); printf("請輸入要修改後的地址:>"); scanf("%s",message->per_mesg[ret].address); printf("修改成功:\n"); } else { printf("要修改的聯絡人不存在\n"); } } void clearall(Pseqlist message) { assert(message); memset(message->per_mesg,0,sizeof(message->per_mesg)); } void sort(Pseqlist message) { //氣泡排序 assert(message); if ( message->count <= 0) { printf("通訊錄為空\n"); return ; } for (int i = 0; i < message->count-1; i++) { int flag = 1; for (int j = 0; j < message->count-1-i; j++) { if (strcmp(message->per_mesg[j].name,message->per_mesg[j+1].name) > 0) { flag = 0; People_t tmp = message->per_mesg[j]; message->per_mesg[j] = message->per_mesg[j+1]; message->per_mesg[j+1] =tmp; } } if (flag) { break; } } }
//test.c
#include"AddressBook.h" int main() { seqlist pro; pro.count = 0; while (1) { menu(); printf("請選擇:>"); int select = 0; scanf("%d",&select); switch(select) { case Add: add_peo(&pro); break; case Delect: delete_peo_message(&pro); break; case Find: find(&pro); break; case Modify: modify(&pro); break; case Print: print_people_message(&pro); break; case Clear: clearall(&pro); break; case Sort: sort(&pro); break; case Quit: exit(0); default : break; } } system("pause"); return 0; }