前言
在c语言的学习中,我们学习了结构体。结构体,是C语言学习过程中重要的部分,常用于实现对数据库的管理。学完结构体后,相信大家对结构体有了一定的了解,下面就用C语言实现简易的通讯录吧!
一、通讯录的总体思路
模块化编程
此次的通讯录我用了3大模块实现,分别是"test.c","contact.c",以及"contact.h"。
1."tcst.c"
包括简易菜单以及主函数的实现思路,整体是这样:
(1).简易菜单
//打印菜单
void menu()
{
printf("****************************\n");
printf("*****0.Exit the program*****\n");
printf("*****1. Add a contact*****\n");
printf("*****2. Del a contact*****\n");
printf("*****3.Modife a contact*****\n");
printf("*****4.printf a contact*****\n");
printf("****************************\n");
}
(2).主函数
int main()
{
int input = 0;//输入数组
contact con; //创建对象
ContactInit(&con);
do
{
menu(); //打印菜单
scanf("%d", &input); //输入选项
switch (input) //选择功能
{
case ADD: //增加一位联系人
Add(&con); break;
case DEL: //删除一位联系人
Del(&con); break;
case MODIFE: //修改联系人
Modife(&con); break;
case EXIT: //退出程序
printf("退出程序");
return 0;
case PRINT: //打印联系人
print(&con); break;
default:
printf("输入错误,请重新输入!\n"); break;
}
} while (input);
return 0;
}
2."contact.h"
创建结构体,通讯录中每个人都有不一样的数据类型,信息种类多样,使用结构体来存放联系人的信息。创建枚举类型,在主函数便以代码的理解。整体是这样:
(1).枚举
//枚举,方便代码阅读
enum option
{
EXIT,
ADD,
DEL,
MODIFE,
PRINT,
};
(2).创建结构体
//创建结构体
typedef struct PeoInfo
{
char nane[NAME_MAX]; //名字
char sex[SEX_MAX]; //性别
int age; //年龄
char tele[TELE_MAX]; //电话号码
char addr[ADDR_MAX]; //地址
}People;
//将1000个联系人的信息存入contact
typedef struct contact
{
People data[MAX]; //存1000人的信息
int sz; //记录通讯录中保存的信息个数
}contact;
(3).声明函数
//初始化函数
void ContactInit(contact* p);
//增加一位联系人
void Add(contact* ps);
//删除一位联系人
void Del(contact* ps);
//打印联系人
void print(contact* ps);
3."contact.c"
各个功能的实现,包含通讯录菜单需要的功能。整体是这样:
具体实现我用注释标明了哈~~
void Add(contact* ps)
{
assert(ps);
if (ps->sz == MAX)
{
printf("存储已满");
return;
}
printf("请输入名字:");
scanf("%s",(ps->data)[ps->sz].nane);
printf("请输入性别:");
scanf("%s",(ps->data)[ps->sz].sex);
printf("请输入年龄:");
scanf("%d", &(ps->data)[ps->sz].age);
printf("请输入电话:");
scanf("%s", &(ps->data)[ps->sz].tele);
printf("请输入地址:");
scanf("%s",(ps->data)[ps->sz].addr);
ps->sz++;
printf("添加成功!\n");
}
2.删除一位联系人
//删除一位联系人
void Del(contact* ps)
{
assert(ps);
char arr[20];
printf("请输入要删除的联系人的名字:");
scanf("%s", arr);
int tmp = Fine_contact(ps,arr);
if (tmp == -1)
{
printf("没有找到,返回\n");
return;
}
int i = 0;
for (i = tmp; i < ps->sz; i++)
{
ps->data[i] = ps->data[i + 1];
}
ps->sz--;
printf("删除成功!\n");
}
3.修改联系人
//修改联系人
void Modife(contact* ps)
{
assert(ps);
int arr[20] = { 0 };
printf("请输入需要修改的联系人:\n");
scanf("%s", arr);
int tmp = Fine_contact(ps,arr);
if (tmp == -1)
{
printf("没有找到联系人!\n");
return;
}
printf("请输入名字:");
scanf("%s", (ps->data)[tmp].nane);
printf("请输入性别:");
scanf("%s", (ps->data)[tmp].sex);
printf("请输入年龄:");
scanf("%d", &(ps->data)[tmp].age);
printf("请输入电话:");
scanf("%s", &(ps->data)[ps->sz].tele);
printf("请输入地址:");
scanf("%s", (ps->data)[tmp].addr);
printf("修改成功!\n");
}
4.在屏幕上打印联系人
//打印联系人
void print(contact* ps)
{
printf("%-12s %-5s %-5s %-12s %-12s \n","姓名","性别","年龄","电话号码","地址");
for (int i = 0; i < ps->sz; i++)
{
printf("%-12s %-5s %-5d %-12s %-12s\n", (ps->data)[i].nane, (ps->data)[i].sex, (ps->data)[i].age,( ps->data)[i].tele,(ps->data)[i].addr );
}
}
5.寻找联系人
//寻找联系人
int Fine_contact(contact* ps,char* arr)
{
assert(ps);
int i = 0;
for (i = 0; i < ps->sz; i++)
{
if (0==strcmp(arr,(ps->data)[i].nane))
{
return i;
}
}
return -1;
}
6.通讯录初始化
//初始化函数
void ContactInit(contact* p)
{
p->sz = 0;
memset(p->data, 0, sizeof(p->data));
}
总结
版权归原作者 天雨~流芳 所有, 如有侵权,请联系我们删除。