实现一个通讯录:
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1.添加联系人信息
2.删除指定联系人信息
3.查找指定联系人信息
4.修改指定联系人信息
5.显示所有联系人信息
6.清空所有联系人
7.以名字排序所有联系人
建立一个源文件phone.h和两个头文件main.c,hanshu.c来实现
代码如下:
源文件phone.h如下:
#ifndef __PHONE_H__ #define __PHONE_H__ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 1000 #define NAME 10 #define SEX 5 #define PHONE 12 #define ADDRESS 20 enum OP { EXIT, ADD, DELETE, FIND, CHANGE, SHOW, EMPTY, NAME_SORT, }; typedef struct linkman { char name[NAME]; char sex[SEX]; int age; char phone[PHONE]; char address[ADDRESS]; }link; typedef struct Phonebook { link linkman[MAX]; int count; }Phonebook, *Pho;//Pho为指针类型 void init(Pho phobook); void add(Pho phobook); void delete(Pho phobook); void find(Pho phobook); void change(Pho phobook); void show(Pho phobook); void empty(Pho phobook); void name_sort(Pho phobook); #endif
头文件mian.c如下:
#include"phone.h" #include<stdlib.h> void menu() { printf("\n\t\t*************简易通讯录*************\n"); printf("\t\t\t 1.添加联系人信息\n"); printf("\t\t\t 2.删除指定联系人信息\n"); printf("\t\t\t 3.查找指定联系人信息\n"); printf("\t\t\t 4.修改指定联系人信息\n"); printf("\t\t\t 5.显示所有联系人信息\n"); printf("\t\t\t 6.清空所有联系人\n"); printf("\t\t\t 7.以名字排序所有联系人\n"); printf("\t\t\t 8.退出系统\n"); } int main() { Phonebook phob; int input=1; init(&phob); while (input) { menu(); printf("请输入你要选择的序号>"); scanf("%d", &input); switch (input) { case ADD: add(&phob);break;//添加 case DELETE: delete(&phob); break;//删除 case FIND: find(&phob); break;//查找 case CHANGE:change(&phob); break;//修改 case SHOW: show(&phob); break;//显示 case EMPTY: empty(&phob); break;//清空 case NAME_SORT:name_sort(&phob); break;//名字排序 case EXIT: printf("感谢使用!"); system("pause"); return 0; default: printf("序号输入错误,请重新输入>"); break; } } system("pause"); return 0; }
头文件hanshu.c如下:
#include"phone.h" //由于删除或查找或修改联系人都需要判断是否存在该联系人,所以设置一个静态函数判断联系人是否存在 static int search_linkman(Pho phobook, const char *name) { for (int i = 0; i < (phobook->count); i++) { if (0 == strcmp(name, (phobook->linkman[i]).name)) { return i; } } return -1; } void init(Pho phobook) { phobook->count = 0; } void add(Pho phobook)//通讯录中添加联系人 { if ((phobook->count) > MAX) { printf("通讯录容量已满,不能再添加!"); return; } printf("请输入要添加的联系人姓名>"); scanf("%s", (phobook->linkman)->name); printf("请输入要添加的联系人性别>"); scanf("%s", (phobook->linkman)->sex); printf("请输入要添加的联系人年龄>"); scanf("%d", &(phobook->linkman)->age); printf("请输入要添加的联系人电话>"); scanf("%s", (phobook->linkman)->phone); printf("请输入要添加的联系人地址>"); scanf("%s", (phobook->linkman)->address); printf("\n添加成功\n"); (phobook->count)++; } void delete(Pho phobook) { char nam[10]; int ret = 0; if ((phobook->count) <= 0 || (phobook->count) > MAX) { printf("此通讯录中没有此联系人!\n"); } printf("请输入联系人的姓名>"); scanf("%s", &nam); ret = search_linkman(phobook, nam); if (ret != -1) { for (int j = ret; j < (phobook->count-1); j++) { phobook->linkman[j]=phobook->linkman[j+1]; } (phobook->count)--; printf("删除成功!\n"); } else printf("此通讯录中没有此联系人!\n"); } void find(Pho phobook) { char nam[10]; int ret = 0; if ((phobook->count) <= 0 || (phobook->count) > MAX) { printf("此通讯录中没有此联系人!\n"); return; } printf("请输入联系人的姓名>"); scanf("%s", &nam); ret = search_linkman(phobook, nam); if (ret != -1) { printf("你查找的联系人信息为:\n"); printf("---------姓名:%s\n", phobook->linkman[ret].name); printf("---------性别:%s\n", phobook->linkman[ret].sex); printf("---------年龄:%d\n", phobook->linkman[ret].age); printf("---------电话:%s\n", phobook->linkman[ret].phone); printf("---------地址:%s\n\n", phobook->linkman[ret].address); } else printf("没有找到你要查找的联系人!\n"); } void change(Pho phobook) { char nam[10]; int ret = 0; if ((phobook->count) <= 0 || (phobook->count) > MAX) { printf("此通讯录中没有此联系人!\n"); return; } printf("请输入联系人的姓名>"); scanf("%s", &nam); ret = search_linkman(phobook, nam); if (ret != -1) { printf("请输入联系人新的姓名>"); scanf("%s", (phobook->linkman[ret]).name); printf("请输入联系人新的性别>"); scanf("%s", (phobook->linkman[ret]).sex); printf("请输入联系人新的年龄>"); scanf("%d", &(phobook->linkman[ret]).age); printf("请输入联系人新的电话号码>"); scanf("%s", (phobook->linkman[ret]).phone); printf("请输入联系人新的地址>"); scanf("%s", (phobook->linkman[ret]).address); printf("修改成功\n"); } else printf("此通讯录中此联系人不存在!\n"); } void show(Pho phobook) { if ((phobook->count) == 0) { printf("该通讯录中没有联系人!\n"); } else { printf("***********该通讯录中所有人信息如下>\n"); printf("%10s\t%5s\t%3s\t%10s\t%10s\t\n","姓名","性别","年龄","电话号码","地址"); for (int i = 0; i < phobook->count; i++) { printf("%10s\t%5s\t%3d\t%10s\t%10s\t",(phobook->linkman[i]).name, (phobook->linkman[i]).sex, (phobook->linkman[i]).age, (phobook->linkman[i]).phone, (phobook->linkman[i]).address); } } } void empty(Pho phobook) { if ((phobook->count) == 0) printf("此通讯录中没有联系人!\n"); else { (phobook->count) = 0; printf("清空成功!\n"); } } void name_sort(Pho phobook)//冒泡排序通讯录中所有联系人 { int i = 0, j = 0; int k = phobook->count; if ((phobook->count) == 0) { printf("此通讯录中没有联系人!\n"); return; } for (i = 0; i < (phobook->count) - 1; i++) { for (j = 0; j < (phobook->count) - i - 1; j++) { if (strcmp((phobook->linkman[j]).name, (phobook->linkman[j+1]).name)>0) { link temp = phobook->linkman[j]; phobook->linkman[j] = phobook->linkman[j+1]; phobook->linkman[j+1] = temp; } } } }