前言
在实现通讯录前,我们需先考虑这个通讯录应该具备哪些功能,以下是我写的通讯录功能预览。
- 添加联系人信息
- 删除指定联系人信息
- 查找指定联系人信息
- 修改指定联系人信息
- 显示所有联系人信息
- 清空所有联系人
- 排序通讯录联系人
代码实现
写通讯录时,我们需要创建三个文件,方便代码的调试和修改。
- test.c 测试整个通讯录的逻辑
- contact.h 通讯录相关功能的函数声明
- contact.c 通讯录相关功能的函数实现
test.c
我们先创建一个菜单供用户选择
static void menu()
{
printf("******************************\n");
printf("**** 1.add 2.del ****\n");
printf("*** 3.search 4.modfy****\n");
printf("*** 5.show 6.sort ***\n");
printf("*** 0.exit ***\n");
printf("******************************\n");
}
然后创建一个枚举类型对应菜单的数据,方便使用switch时看过去更明了。
enum Option
{
EXIT, //退出
ADD, //增加
DEL, //删除
SRARCH, //查找
MODFY, //修改
SHOW, //显示
SORT //排序
};
然后在main函数里面创建一个通讯录的变量(这里的结构体我在contact.h里面定义了)和大概框架给写好。
int main()
{
int input = 0;
struct Contact con;//创建了一个描述通讯录的变量
InitContact(&con);//初始化通讯录
do
{
menu();//菜单
printf("请选择:");
scanf("%d",&input);
switch (input)
{
case EXIT:
printf("退出通讯录\n");
break;
case ADD:
Addcontact(&con);//增加联系人
break;
case DEL:
DelContact(&con);//删除联系人
break;
case SRARCH:
SrarchContact(&con);//查找联系人
break;
case MODFY:
ModfyContact(&con);//修改通讯录
break;
case SHOW:
ShowCotact(&con);//显示通讯录
break;
case SORT:
SortContact(&con);//排序通讯录
break;
default:
printf("选择错误,请重新选择\n");
}
} while (input);
return 0;
}
contact.h
在创建的头文件里把需要的头文件加上,这样其他两个.c文件只需要声明我们自己创建的头文件就可以使用库函数了,然后创建一个结构体来描述一个联系人的信息,用**#define**定义常量,可以更方便的修改。
再创建一个结构体,里面创建一个结构体数组,数组里面存放1000个联系人的信息,再创建一个整型变量,用来记录当前存放了多少个人的信息。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NAME_MAX 20 //名字
#define SEX_MAX 5 //性别
#define TELE_MAX 12 //电话
#define ADDR_MAX 30 //地址
#define DATA_MAX 1000//人数
struct PeoInfo //描述一个人信息的结构体
{
char name[NAME_MAX];//名字
int age;//年龄
char sex[SEX_MAX];//性别
char tele[TELE_MAX];//电话
char addr[ADDR_MAX];//地址
};
//通讯录的结构体
struct Contact
{
struct PeoInfo data[DATA_MAX];
int sz;//记