1.我们需要3个文件一个是text.c address_book.c address_book.h文件,第一个用来编写我们的主函数代码,第二个用来声明第三个文件中的函数和包涵的头文件,第三个主要用来实现我们函数的功能函数,和全局变量的定义。
2.定义两个结构体,第一个种命名为info作为信息存放的结构体,比如说有姓名年龄电话号码地址这样的信息。第二个定义一个通讯录整体,第一个值是info 类型的一个数组可以存放100个人的信息的一个数组。
3.在主函数中打印一个菜单去提供输入数据和对应的菜单。进入不同的函数中实现不同的功能一次结束需要循环下去且这种循环必须要进入一次。
4.实现不同的功能:初始化结构体。
5.对结构体的数据进行增加,删除,显示,查找,退出。
在我们的这个address_book.h中去定义我们的结构体信息可以在所有文件包涵这个头文件这样所有的文件知道类型的定义。
typedef struct infomation {
char name[12];
int age;
char tele[12];
char ars[20];
}info;
typedef struct address_book {
info people[100];
int sz;//当前已经有的人的信息
}list;
你会发现我们这个结构体的这个一些大小的控制是写死的是我们想要后期去更改代码内容,比如说通讯录我们想要存放200人那么怎么办,有特别长的名字输入,或者有特别长的地址那么怎么办?
#define NAME 12
#define TELE 12
#define ADDRESS 20
#define NUMBER 100
typedef struct infomation {
char name[NAME];
int age;
char tele[TELE];
char ars[ADDRESS];
}info;
typedef struct address_book {
info people[NUMBER];
int sz;//当前已经有的人的信息
}list;
//初始化
void Initlist(list* ps)
{
memset(ps->people, 0, sizeof(info) * NUMBER);
ps->sz = 0;
}
list ps;
Initlist(&ps);
1.定义输入变量,菜单函数,进入函数选择,必须进入一次函数。
void menu()
{
printf("******************************\n");
printf("*****1.add*******2.dle********\n");
printf("*****3.show******4.find*******\n");
printf("*****0.Exit*******************\n");
printf("******************************\n");
}
int main()
{
list ps;
Initlist(&ps);
int inupt = 0;
do {
//菜单
menu();
printf("请输入你的选择:");
scanf("%d", &inupt);
switch (inupt)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 0:
break;
default:
printf("输入错误!请重新输入!\n");
break;
}
} while (inupt != 0);
return 0;
}
//增加
void Addlist(list* ps);
//显示
void Showlist(const list* ps);
//查找
void Findlist(const list* ps);
//删除
void Dellist(list* ps);
void Addlist(list* ps)
{
printf("请输入姓名:");
scanf("%s", ps->people[ps->sz].name);
printf("请输入年龄:");
scanf("%d", &(ps->people[ps->sz].age));
printf("请输入电话号码:");
scanf("%s", ps->people[ps->sz].tele);
printf("请输入地址:");
scanf("%s", ps->people[ps->sz].ars);
(ps->sz)++;
}
void Showlist(const list* ps)
{
//列表的形式显示
printf("%12s%5s%12s%20s\n", "姓名", "年龄", "电话号码", "家庭住址");
//打印通讯录中的所有信息
for (int i = 0; i < ps->sz; i++)
{
printf("%12s%5d%12s%20s\n", ps->people[i].name,
ps->people[i].age,
ps->people[i].tele,
ps->people[i].ars);
}
}
1.找到了可以显示对应信息,找不到就打印找不到信息。
2.在删除中我们需要查找,找到了之后是删除。
3.在.c中写一个find()函数提供给address_book.c这个文件使用。
//查找
int Find(list* ps)
{
char name[12];
printf("请输入你想要查找人的名字:");
scanf("%s", name);
//保存数组下标
int xiabiao = -1;
if (ps->sz == 0)
return -1;
for (int j = 0; j < ps->sz; j++)
{
if (strcmp(ps->people[j].name, name) == 0)
{
return xiabiao = j;
}
}
return -1;
}
void Findlist(const list* ps)
{
int a = Find(ps);
if (a != -1)
{
//列表的形式显示
printf("%12s%5s%12s%20s\n", "姓名", "年龄", "电话号码", "家庭住址");
//打印通讯录中的所有信息
printf("%12s%5d%12s%20s\n", ps->people[a].name,
ps->people[a].age,
ps->people[a].tele,
ps->people[a].ars);
}
else
{
printf("找不到这个人的信息!\n");
}
}
这个部分先去找到下标,删除对应下标位置的数值
//删除
void Dellist(list* ps)
{
int xb = Find(ps);
if (xb != -1)
{
//覆盖的思路
int j = 0;
for (j = xb; j < (ps->sz - 1); j++)
{
ps->people[j] = ps->people[j + 1];
}
(ps->sz)--;
printf("找到了并且成功删除!\n");
}
else
{
printf("找不到信息无法删除!\n");
}
}
int cmp( void* p1, void* p2)
{
return strcmp( ((((list*)p1)->people)->name) , ((((list*)p2)->people->name)) );
}
//排序
void sqrt(list* ps)
{
//数组按照年龄排序
qsort(ps->people, ps->sz, sizeof(info), cmp);
printf("排序成功!\n");
}
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#define NAME 12
#define TELE 12
#define ADDRESS 20
#define NUMBER 100
typedef struct infomation {
char name[NAME];
int age;
char tele[TELE];
char ars[ADDRESS];
}info;
typedef struct address_book {
info people[NUMBER];
int sz;//当前已经有的人的信息
}list;
//初始化结构体
void Initlist(list* ps);
//增加
void Addlist(list* ps);
//显示
void Showlist(const list* ps);
//查找
void Findlist(const list* ps);
//删除
void Dellist(list* ps);
//清空所有联系人
void Delevery(list* ps);
//排序
void sqrt(list* ps);
#define _CRT_SECURE_NO_WARNINGS 1
#include"address_book.h"
//查找
int Find(list* ps)
{
char name[12];
printf("请输入你想要查找人的名字:");
scanf("%s", name);
//保存数组下标
int xiabiao = -1;
if (ps->sz == 0)
return -1;
for (int j = 0; j < ps->sz; j++)
{
if (strcmp(ps->people[j].name, name) == 0)
{
return xiabiao = j;
}
}
return -1;
}
//初始化
void Initlist(list* ps)
{
memset(ps->people, 0, sizeof(info) * NUMBER);
ps->sz = 0;
}
//增加
//ps->people[ps->sz].name表示的是info中name数组的数组名称。
// (ps->people + ps->sz)->name
//ps->people[ps->sz] info类型
//(ps->people + ps->sz) info*类型
void Addlist(list* ps)
{
printf("请输入姓名:");
scanf("%s", ps->people[ps->sz].name);
printf("请输入年龄:");
scanf("%d", &(ps->people[ps->sz].age));
printf("请输入电话号码:");
scanf("%s", ps->people[ps->sz].tele);
printf("请输入地址:");
scanf("%s", ps->people[ps->sz].ars);
(ps->sz)++;
}
//显示
void Showlist(const list* ps)
{
//列表的形式显示
printf("%12s%5s%12s%20s\n", "姓名", "年龄", "电话号码", "家庭住址");
//打印通讯录中的所有信息
for (int i = 0; i < ps->sz; i++)
{
printf("%12s%5d%12s%20s\n", ps->people[i].name,
ps->people[i].age,
ps->people[i].tele,
ps->people[i].ars);
}
}
//查找
void Findlist(const list* ps)
{
int a = Find(ps);
if (a != -1)
{
//列表的形式显示
printf("%12s%5s%12s%20s\n", "姓名", "年龄", "电话号码", "家庭住址");
//打印通讯录中的所有信息
printf("%12s%5d%12s%20s\n", ps->people[a].name,
ps->people[a].age,
ps->people[a].tele,
ps->people[a].ars);
}
else
{
printf("找不到这个人的信息!\n");
}
}
//删除
void Dellist(list* ps)
{
int xb = Find(ps);
if (xb != -1)
{
//覆盖的思路
int j = 0;
for (j = xb; j < (ps->sz - 1); j++)
{
ps->people[j] = ps->people[j + 1];
}
(ps->sz)--;
printf("找到了并且成功删除!\n");
}
else
{
printf("找不到信息无法删除!\n");
}
}
//清空所有联系人
void Delevery(list* ps)
{
memset(ps->people, 0, sizeof(info) * NUMBER);
ps->sz = 0;
}
int cmp( void* p1, void* p2)
{
return strcmp( ((((list*)p1)->people)->name) , ((((list*)p2)->people->name)) );
}
//排序
void sqrt(list* ps)
{
//数组按照年龄排序
qsort(ps->people, ps->sz, sizeof(info), cmp);
printf("排序成功!\n");
}
#define _CRT_SECURE_NO_WARNINGS 1
#include"address_book.h"
void menu()
{
printf("******************************\n");
printf("*****1.add*******2.dle********\n");
printf("*****3.show******4.find*******\n");
printf("*****5.dleevery**6.sqrt_name**\n");
printf("*****0.Exit*******************\n");
}
int main()
{
list ps;
Initlist(&ps);
int inupt = 0;
do {
//菜单
menu();
printf("请输入你的选择:");
scanf("%d", &inupt);
switch (inupt)
{
case 1:
Addlist(&ps);
break;
case 2:
Dellist(&ps);
break;
case 3:
Showlist(&ps);
break;
case 4:
Findlist(&ps);
break;
case 5:
Delevery(&ps);
case 6:
sqrt(&ps);
break;
case 0:
break;
default:
printf("输入错误!请重新输入!\n");
break;
}
} while (inupt != 0);
return 0;
}