目录
1.通讯录需要哪些文件
一共三个文件:头文件、通讯录函数源文件、主函数源文件。
1)头文件:用来进行函数声明、以及类型的定义。
2)通讯录函数文件:用来实现我们所需要的函数的。
3)主函数文件:程序逻辑实现、编译执行的文件。
如下图所示:

2.通讯录的实现步骤
2.1 打印主界面
void menu()
{
printf("****************************************");
printf("******** 1.add 2.del **********");
printf("******** 3.search 4.modify **********");
printf("******** 0.exit **********");
printf("****************************************");
printf("****************************************");
}
2.2 主函数的逻辑实现
主函数内使用dowhile循环体来实现这样的一个循环,具体的不同功能,采用了switch语句,通过输入不同数值来进入不同的功能区。
int main()
{
int input = 0;
//定义通讯录
Contact con;
//初始化
init_contact(&con);
do
{
menu();
printf("请输入:");
scanf("%d", &input);
switch (input)
{
case add:
addcontact(&con);
print(&con);
break;
case del:
delcontact(&con);
print(&con);
break;
case search:
searchcontact(&con);
break;
case modify:
modifycontact(&con);
print(&con);
break;
case exit:
break;
default:
printf("输入错误,请重新输入:\n");
break;
}
} while (input);
return 0;
}
2.3 初始化函数
初始化函数采用了库函数memset,memset怎么使用,见本人博客内存库函数的讲解。
void init_contact(Contact* pd) //初始化
{
pd->sz = 0;
memset(pd->data, 0, sizeof(pd->data));
}
2.4 增加用户信息函数
void addcontact(Contact* pa) //增加用户信息
{
if (pa->sz >= MAX)
{
printf("通讯录已满");
return;
}
printf("请输入名字:");
scanf("%s", &pa->data[pa->sz].name);
printf("请输入性别:");
scanf("%s", &pa->data[pa->sz].sex);
printf("请输入年龄:");
scanf("%d", &pa->data[pa->sz].age);
printf("请输入电话:");
scanf("%s", &pa->data[pa->sz].tele);
printf("请输入地址:");
scanf("%s", &pa->data[pa->sz].address);
pa->sz++;
printf("输入完成\n");
}
2.5 打印所有用户信息函数
void print(const Contact* p) //打印用户
{
int i = 0;
//标题
printf("%-10s\t%-5s\t%-5s\t%-8s\t%-8s\n", "名称","性别","年龄","电话","地址");
for (i = 0; i < p->sz; i++)
{
printf("%-10s\t", p->data[i].name);
printf("%-5s\t", p->data[i].sex);
printf("%-5d\t", p->data[i].age);
printf("%-8s\t", p->data[i].tele);
printf("%-8s\t", p->data[i].address);
printf("\n");
}
}
2.6 查找用户信息函数
void searchcontact(const Contact* ps) //查找用户信息
{
int i = 0;
char sech[10] = { 0 };
printf("请输入要查找的用户名称:");
scanf("%s", &sech);
for (i = 0; i < ps->sz; i++)
{
if (strcmp(sech, ps->data[i].name) == 0)
{
printf("找到了\n");
break;
}
}
if (i == ps->sz)
{
printf("没找到\n");
}
}
2.7 删除用户信息函数
void delcontact(Contact* pd) //删除用户信息
{
if (pd->sz == 0)
{
printf("通讯录内无用户\n");
}
char del[10] = { 0 };
printf("请输入要删除的用户名称:");
scanf("%s", &del);
for (int i = 0; i < pd->sz; i++)
{
if (strcmp(del, pd->data[i].name) == 0)
{
for (; i < pd->sz; i++)
{
pd->data[i] = pd->data[i + 1];
}
}
}
pd->sz--;
printf("删除成功\n");
}
2.8 修改用户信息函数
void modifycontact(Contact* pm) //修改用户信息
{
int i = 0;
char modify[10] = { 0 };
printf("请输入要修改的用户名称:");
scanf("%s", &modify);
for (i = 0; i < pm->sz; i++)
{
if (strcmp(modify, pm->data[i].name) == 0)
{
printf("请输入名字:");
scanf("%s", &pm->data[i].name);
printf("请输入性别:");
scanf("%s", &pm->data[i].sex);
printf("请输入年龄:");
scanf("%d", &pm->data[i].age);
printf("请输入电话:");
scanf("%s", &pm->data[i].tele);
printf("请输入地址:");
scanf("%s", &pm->data[i].address);
printf("修改成功\n");
break;
}
}
if (i == pm->sz)
{
printf("无此用户\n");
}
}
3.总代码
3.1 主函数文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
printf("****************************************\n");
printf("******** 1.add 2.del **********\n");
printf("******** 3.search 4.modify **********\n");
printf("******** 0.exit **********\n");
printf("****************************************\n");
printf("****************************************\n");
}
enum Option
{
exit,
add,
del,
search,
modify,
};
int main()
{
int input = 0;
//定义通讯录
Contact con;
//初始化
init_contact(&con);
do
{
menu();
printf("请输入:");
scanf("%d", &input);
switch (input)
{
case add:
addcontact(&con);
print(&con);
break;
case del:
delcontact(&con);
print(&con);
break;
case search:
searchcontact(&con);
break;
case modify:
modifycontact(&con);
print(&con);
break;
case exit:
break;
default:
printf("输入错误,请重新输入:\n");
break;
}
} while (input);
return 0;
}
3.2 通讯录函数文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void init_contact(Contact* pd) //初始化
{
pd->sz = 0;
memset(pd->data, 0, sizeof(pd->data));
}
void print(const Contact* p) //打印用户
{
int i = 0;
//标题
printf("%-10s\t%-5s\t%-5s\t%-8s\t%-8s\n", "名称","性别","年龄","电话","地址");
for (i = 0; i < p->sz; i++)
{
printf("%-10s\t", p->data[i].name);
printf("%-5s\t", p->data[i].sex);
printf("%-5d\t", p->data[i].age);
printf("%-8s\t", p->data[i].tele);
printf("%-8s\t", p->data[i].address);
printf("\n");
}
}
void addcontact(Contact* pa) //增加用户信息
{
if (pa->sz >= MAX)
{
printf("通讯录已满");
return;
}
printf("请输入名字:");
scanf("%s", &pa->data[pa->sz].name);
printf("请输入性别:");
scanf("%s", &pa->data[pa->sz].sex);
printf("请输入年龄:");
scanf("%d", &pa->data[pa->sz].age);
printf("请输入电话:");
scanf("%s", &pa->data[pa->sz].tele);
printf("请输入地址:");
scanf("%s", &pa->data[pa->sz].address);
pa->sz++;
printf("输入完成\n");
}
void searchcontact(const Contact* ps) //查找用户信息
{
int i = 0;
char sech[10] = { 0 };
printf("请输入要查找的用户名称:");
scanf("%s", &sech);
for (i = 0; i < ps->sz; i++)
{
if (strcmp(sech, ps->data[i].name) == 0)
{
printf("找到了\n");
break;
}
}
if (i == ps->sz)
{
printf("没找到\n");
}
}
void delcontact(Contact* pd) //删除用户信息
{
if (pd->sz == 0)
{
printf("通讯录内无用户\n");
}
char del[10] = { 0 };
printf("请输入要删除的用户名称:");
scanf("%s", &del);
for (int i = 0; i < pd->sz; i++)
{
if (strcmp(del, pd->data[i].name) == 0)
{
for (; i < pd->sz; i++)
{
pd->data[i] = pd->data[i + 1];
}
}
}
pd->sz--;
printf("删除成功\n");
}
void modifycontact(Contact* pm) //修改用户信息
{
int i = 0;
char modify[10] = { 0 };
printf("请输入要修改的用户名称:");
scanf("%s", &modify);
for (i = 0; i < pm->sz; i++)
{
if (strcmp(modify, pm->data[i].name) == 0)
{
printf("请输入名字:");
scanf("%s", &pm->data[i].name);
printf("请输入性别:");
scanf("%s", &pm->data[i].sex);
printf("请输入年龄:");
scanf("%d", &pm->data[i].age);
printf("请输入电话:");
scanf("%s", &pm->data[i].tele);
printf("请输入地址:");
scanf("%s", &pm->data[i].address);
printf("修改成功\n");
break;
}
}
if (i == pm->sz)
{
printf("无此用户\n");
}
}
3.3 头文件
#pragma once
#include<stdio.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 20
#define MAX_ADDRESS 20
#define MAX 1000
typedef struct contact
{
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char tele[MAX_TELE];
char address[MAX_ADDRESS];
}contact;
typedef struct Contact //建立通讯录
{
contact data[MAX];
int sz;
}Contact;
void print(const Contact* p);
void init_contact(Contact* pd);
void addcontact(Contact* pa);
void searchcontact(const Contact* ps);
void delcontact(Contact* pd);
void modifycontact(Contact* pm);
2060

被折叠的 条评论
为什么被折叠?



