文章目录
目录
一、实现目标
二、整体步骤
三、具体步骤
1.创建文件
2.反复操作及菜单函数
3.结构体的创建
4.初始化创建的结构体
5.增加联系人
6.删除联系人
7。修改联系人信息
8.查找联系人
9.显示联系人
10.排序
四、完整代码
1.text.c
2.contact.h
3.contact.c
五、运行示例
使用C语言创造一个通讯录,实现增加联系人,删除联系人,修改联系人,查找找联系人,显示所有人信息,排序六大功能,
1.创立三个文件:text.c(实现测试的逻辑),contact.c(函数实现),contact.h(函数声明)
2.使用循环供反复操作,打印菜单函数,switch语句对应玩家在菜单中的选择
3.使用结构体模拟联系人的信息
4.初始化创建的结构体
5.实现增,删,改,查,显示和排序功能
1.创建文件
2.反复操作及菜单函数
void menu()
{
printf("*****************************************\n");
printf("******* 1.add 2.del *******\n");
printf("******* 3.search 4.modify *******\n");
printf("******* 5.show 6.sort *******\n");
printf("******* 0.exit *******\n");
printf("*****************************************\n");
}
int main()
{
int input = 0;
contact con;
Initcontact(&con);
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
Addcontact(&con);
break;
case 2:
Delcontact(&con);
break;
case 3:
Searchcontact(&con);
break;
case 4:
Modifycontact(&con);
break;
case 5:
Showcontact(&con);
break;
case 6:
Sortcontact(&con);
break;
case 0:
printf("已退出");
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
return 0;
}
typedef struct peoinfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}peoinfo;
typedef struct contact
{
peoinfo data[MAX];//最多储存多少联系人
int sz;//储存此时通讯录中联系人人数
}contact;
void Initcontact(contact* p)
{
p->sz = 0;
memset(p->data, 0, sizeof(p->data));//分配空间
}
void Addcontact(contact* p)
{
if (p->sz == 1000)
{
printf("通讯录已满,无法再添加\n");
return ;
}
printf("请输入名字:");
scanf("%s", p->data[p->sz].name);
printf("请输入年龄:");
scanf("%d", &p->data[p->sz].age);
printf("请输入性别:");
scanf("%s", p->data[p->sz].sex);
printf("请输入地址:");
scanf("%s", p->data[p->sz].addr);
printf("请输入电话:");
scanf("%s", p->data[p->sz].tele);
p->sz++;
}
void Delcontact(contact* p)
{
char name[NAME_MAX] = { 0 };
printf("删除人姓名:");
scanf("%s", name);
int ret=find_by_name(p,name);//查找联系人的操作需反复用到,分装函数
if (ret == -1)
{
printf("删除的人不存在\n");
return;
}
int i = 0;
for (i = ret; i < p->sz - 1; i++)
{
p->data[i] = p->data[i + 1];//使用后面数据覆盖前面数据
}
p->sz--;
printf("删除成功\n");
}
int find_by_name(contact*p,char name[])
{
int i = 0;
for (i = 0; i < p->sz; i++)
{
if (strcmp(name, p->data[i].name) == 0)
{
return i;
}
}
return -1;
}
void Modifycontact(contact* p)
{
char name[NAME_MAX] = { 0 };
int i = 0;
printf("修改人姓名:");
scanf("%s", name);
int ret = find_by_name(p, name);
if (ret == -1)
{
printf("修改的人不存在\n");
return;
}
printf("请输入名字:");
scanf("%s", p->data[ret].name);
printf("请输入年龄:");
scanf("%d", &p->data[ret].age);
printf("请输入性别:");
scanf("%s", p->data[ret].sex);
printf("请输入地址:");
scanf("%s", p->data[ret].addr);
printf("请输入电话:");
scanf("%s", p->data[ret].tele);
printf("修改成功\n");
}
void Searchcontact(contact* p)
{
char name[NAME_MAX] = { 0 };
int i = 0;
printf("查找人姓名:");
scanf("%s", name);
int ret=find_by_name(p,name);
if (ret == -1)
{
printf("查找的人不存在\n");
return;
}
printf("%-20s\t%-4s\t%-6s\t%-30s\t%-13s\n", "名字", "年龄", "性别", "地址", "电话");
printf("%-20s\t%-4d\t%-6s\t%-30s\t%-13s\n", p->data[ret].name,
p->data[ret].age,
p->data[ret].sex,
p->data[ret].addr,
p->data[ret].tele);
}
void Showcontact(contact* p)
{
int i = 0;
printf("%-20s\t%-4s\t%-6s\t%-30s\t%-13s\n", "名字", "年龄", "性别", "地址", "电话");
for (i = 0; i < p->sz; i++)
{
printf("%-20s\t%-4d\t%-6s\t%-30s\t%-13s\n", p->data[i].name,
p->data[i].age,
p->data[i].sex,
p->data[i].addr,
p->data[i].tele);
}
}
void Sortcontact(contact* p)
{
if (p->sz == 0)
{
printf("联系人为空,无法排序");
}
int i = 0;
peoinfo tmp ;
for (i = 0; i < p->sz-1; i++)
{
int j = 0;
for (j = 0; j < p->sz - i-1; j++)
{
if (p->data[i].age > p->data[i + 1].age)
{
tmp = p->data[i];
p->data[i] = p->data[i + 1];
p->data[i + 1] = tmp;
}
}
}
printf("排序完成\n");
}
#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("******* 5.show 6.sort *******\n");
printf("******* 0.exit *******\n");
printf("*****************************************\n");
}
int main()
{
int input = 0;
contact con;
Initcontact(&con);
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
Addcontact(&con);
break;
case 2:
Delcontact(&con);
break;
case 3:
Searchcontact(&con);
break;
case 4:
Modifycontact(&con);
break;
case 5:
Showcontact(&con);
break;
case 6:
Sortcontact(&con);
break;
case 0:
printf("已退出");
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
return 0;
}
#pragma once
#include
#include
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 6
#define ADDR_MAX 30
#define TELE_MAX 13
typedef struct peoinfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}peoinfo;
typedef struct contact
{
peoinfo data[MAX];
int sz;
}contact;
void Initcontact(contact* p);
void Addcontact(contact* p);
void Showcontact(contact*p);
void Delcontact(contact*p);
void Searchcontact(contact*p);
void Modifycontact(contact* p);
void Sortcontact(contact* p);
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
int find_by_name(contact*p,char name[])
{
int i = 0;
for (i = 0; i < p->sz; i++)
{
if (strcmp(name, p->data[i].name) == 0)
{
return i;
}
}
return -1;
}
void Initcontact(contact* p)
{
p->sz = 0;
memset(p->data, 0, sizeof(p->data));
}
void Addcontact(contact* p)
{
if (p->sz == 1000)
{
printf("通讯录已满,无法再添加\n");
return ;
}
printf("请输入名字:");
scanf("%s", p->data[p->sz].name);
printf("请输入年龄:");
scanf("%d", &p->data[p->sz].age);
printf("请输入性别:");
scanf("%s", p->data[p->sz].sex);
printf("请输入地址:");
scanf("%s", p->data[p->sz].addr);
printf("请输入电话:");
scanf("%s", p->data[p->sz].tele);
p->sz++;
}
void Showcontact(contact* p)
{
int i = 0;
printf("%-20s\t%-4s\t%-6s\t%-30s\t%-13s\n", "名字", "年龄", "性别", "地址", "电话");
for (i = 0; i < p->sz; i++)
{
printf("%-20s\t%-4d\t%-6s\t%-30s\t%-13s\n", p->data[i].name,
p->data[i].age,
p->data[i].sex,
p->data[i].addr,
p->data[i].tele);
}
}
void Delcontact(contact* p)
{
char name[NAME_MAX] = { 0 };
printf("删除人姓名:");
scanf("%s", name);
int ret=find_by_name(p,name);
if (ret == -1)
{
printf("删除的人不存在\n");
return;
}
int i = 0;
for (i = ret; i < p->sz - 1; i++)
{
p->data[i] = p->data[i + 1];
}
p->sz--;
printf("删除成功\n");
}
void Searchcontact(contact* p)
{
char name[NAME_MAX] = { 0 };
int i = 0;
printf("查找人姓名:");
scanf("%s", name);
int ret=find_by_name(p,name);
if (ret == -1)
{
printf("查找的人不存在\n");
return;
}
printf("%-20s\t%-4s\t%-6s\t%-30s\t%-13s\n", "名字", "年龄", "性别", "地址", "电话");
printf("%-20s\t%-4d\t%-6s\t%-30s\t%-13s\n", p->data[ret].name,
p->data[ret].age,
p->data[ret].sex,
p->data[ret].addr,
p->data[ret].tele);
}
void Modifycontact(contact* p)
{
char name[NAME_MAX] = { 0 };
int i = 0;
printf("修改人姓名:");
scanf("%s", name);
int ret = find_by_name(p, name);
if (ret == -1)
{
printf("修改的人不存在\n");
return;
}
printf("请输入名字:");
scanf("%s", p->data[ret].name);
printf("请输入年龄:");
scanf("%d", &p->data[ret].age);
printf("请输入性别:");
scanf("%s", p->data[ret].sex);
printf("请输入地址:");
scanf("%s", p->data[ret].addr);
printf("请输入电话:");
scanf("%s", p->data[ret].tele);
printf("修改成功\n");
}
void Sortcontact(contact* p)
{
if (p->sz == 0)
{
printf("联系人为空,无法排序");
}
int i = 0;
peoinfo tmp ;
for (i = 0; i < p->sz-1; i++)
{
int j = 0;
for (j = 0; j < p->sz - i-1; j++)
{
if (p->data[i].age > p->data[i + 1].age)
{
tmp = p->data[i];
p->data[i] = p->data[i + 1];
p->data[i + 1] = tmp;
}
}
}
printf("排序完成\n");
}