实现一个通讯录
要求:
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
思路:
TDD(测试驱动开发)思想,模块化编程!
代码实现
头文件Contact的实现
#ifndef _CONTACT_H__
#define _CONTACT_H__
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_PHONE 20
#define MAX_ADDR 30
#define MAX_PEO 1000
enum OPTION //通讯录的功能选项
{
EXIT, //退出
ADD, //添加联系人信息
DELETE, //删除指定联系人信息
SEARCH, //查找指定联系人信息
MODIFY, //修改指定联系人信息
SHOW, //显示所有联系人信息
EMPTY, //清空所有联系人
SORT, //以名字排序所有联系人
};
enum Mod_list//修改联系人信息的选项
{
EXITMODIFY,
NAME,
SEX,
AGE,
PHONE,
ADDRESS,
};
enum Sort_list//排序方式的选项
{
EXIT_SORT,
NAME_SORT,
AGE_SORT,
PHONE_SORT,
ADDRESS_SORT,
};
typedef struct PeoInfo
{
char name[MAX_NAME];//名字
char sex[MAX_SEX];//性别
int age;//年龄
char phone[MAX_PHONE];//电话
char address[MAX_ADDR];//地址
}PeoInfo;
typedef struct Contact
{
PeoInfo data[MAX_PEO];//通讯录
int count;//通讯录人数
}Contact,*pContact;
void menu();
void InitContact(pContact pc);//初始化通讯录函数
void AddContact(pContact pc);//添加联系人信息函数
void DeleteContact(pContact pc);//删除指定联系人信息函数
void SearchContact(pContact pc);//查找指定联系人信息函数
void ModifyContact(pContact pc);//修改指定联系人信息函数
void ShowContact(pContact pc);//显示所有联系人信息函数
void EmptyContact(pContact pc);//清空所有联系人函数
void SortContact(pContact pc);//排序所有联系人函数
#endif
头文件Bubble_sort的实现
#ifndef _BUBBLE_SORT_H__
#define _BUBBLE_SORT_H__
void bubble_sort(void *base, int sz, int width, int(*cmp)(const void *e1, const void *e2));
int cmp_name(const void* e1, const void* e2);
int cmp_age(const void* e1, const void* e2);
int cmp_phone(const void* e1, const void* e2);
int cmp_address(const void* e1, const void* e2);
#endif
Contact定义函数的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include "Contact.h" #include "Bubble_sort.h" void menu()//功能选择菜单 { printf("*****************************************\n"); printf("********* 1.ADD 2.DELETE *********\n"); printf("********* 3.SEARCH 4.MODIFY *********\n"); printf("********* 5.SHOW 6.EMPTY *********\n"); printf("********* 7.SORT 0.EXIT *********\n"); printf("*****************************************\n"); } void Mod_list()//修改信息选择菜单 { printf("*****************************************\n"); printf("********* 1.name 2.sex *********\n"); printf("********* 3.age 4.phone *********\n"); printf("********* 5.address 0.exit *********\n"); printf("*****************************************\n"); } void Sort_list()//排序方式选择菜单 { printf("*****************************************\n"); printf("********* 1.name 2.age *********\n"); printf("********* 3.phone 4.address *********\n"); printf("********* 0.exit *********\n"); printf("*****************************************\n"); } int find_person(pContact pc)//查找有无该联系人,若有,则返回该联系人下标;若无,返回-1 { char person_name[MAX_NAME]; int i = 0; assert(pc); printf("请输入要查找人的姓名:"); assert(1 == scanf("%s", person_name)); for (i = 0; i < pc->count; i++) { if (strcmp(person_na