🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:夏目的C语言宝藏
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn
文章目录
- 前言
- 一、通讯录前期准备
- 1.1菜单函数的实现
- 1.2菜单的功能
- 1.3关于联系人结构体的创建
- 1.4全局变量的定义
- 二、通讯录的功能实现
- 2.1初始化通讯录
- 2.2添加联系人
- 2.3联系人
- 2.4删除联系人
- 2.5查找联系人
- 2.6修改联系人
- 2.7对通讯录中联系人的信息进行排序
- 三、实现通讯录的所有文件展现
- 3.1通讯录函数绘总
- 3.2通讯录函数的实现
- 3.3通讯录测试代码
- 总结
前言
本篇博客夏目浅石带着大家学习大一期末大作业—通讯录的实现,说真的,完成通讯录之前,夏目已经完成了三子棋游戏,扫雷,猜数字游戏这样类似的大作业类型的任务,所以这里会更加熟练的写出来我完成通讯录的逻辑以及C语言代码实现过程。
一、通讯录前期准备
1.1菜单函数的实现
1.先实现菜单函数,能够实现与用户的交互。
代码如下:
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");
}
1.2菜单的功能
1.用switch选择语句和do——while循环语句来实现各自的功能
代码如下:
int main()
{
int input;
//创建通讯录
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);
case 0:
printf("退出通讯录\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
1.3关于联系人结构体的创建
结构体的创建
第一个结构体peoInfo
是是用来存放人的信息,第二个结构体Contact
是通讯录的信息,data
是以第一个结构体为类型的数组,sz
用来记录当前通讯录中实际的人数。
代码如下:
//人的信息
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;
1.4全局变量的定义
利用宏定义处理
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
二、通讯录的功能实现
2.1初始化通讯录
代码如下:
//初始化
void InitContact(Contact* pc)
{
pc->sz=0;
memset(pc->data,0,sizeof(pc->data));
}
2.2添加联系人
代码如下:
//增加联系人
void AddContact(Contact* pc)
{
if(pc->sz==MAX)
{
printf("已满\n");
return;
}
printf("请输入名字:>");
scanf("%s",pc->data[pc->sz].name);
printf("请输入年龄:>");
scanf("%d",&(pc->data[pc->sz].age));
printf("请输入性别:>");
scanf("%s",pc->data[pc->sz].sex);
printf("请输入地址:>");
scanf("%s",pc->data[pc->sz].addr);
printf("请输入电话:>");
scanf("%s",pc->data[pc->sz].tele);
sz++;
}
2.3联系人
代码如下:
//显示联系人
void ShowContact(const Contact* pc)
{
int i=0;
printf("%-20s\t%4s\t%-5s\t%-20s\t%-12s\n","名字","年龄","性别","地址","电话");
for(i=0;i<pc->sz;i++)
{
printf("%-20s\t%4d\t%-5s\t%-20s\t%-12s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].addr,pc->data[i].tele);
}
}
2.4删除联系人
先查找,再删除
代码如下:
int FindByName(Contact* pc,char names[])
{
for(int i=0;i<pc->sz;++i)
{
if(strcmp(pc->data[i].name,names)==0)
{
return i;
}
}
return -1;
}
//删除联系人
void DelContact(Contact* pc)
{
char names[NAME_MAX]={0};
if(pc->sz==0)
{
printf("通讯录为空,无法删除\n");
return;
}
//删除
//找到要删除的人
printf("请输入要删除的人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要删除的人不存在\n");
return;
}
//删除
int j=0;
for(j=ret;j<pc->sz-1;++j)
{
pc->data[j]=pc->data[j+1];
}
pc->sz--;
printf("删除成功\n");
}
2.5查找联系人
代码如下:
//查找指定联系人
SearchContact(const Contact* pc)
{
char names[NAME_MAX];
printf("请输入要查找人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要查找的人不存在\n");
return;
}
//打印信息
printf("%-20s\t%4s\t%-5s\t%-20s\t%-12s\n","名字","年龄","性别","地址","电话");
for(i=0;i<pc->sz;i++)
{
printf("%-20s\t%4d\t%-5s\t%-20s\t%-12s\n",pc->data[ret].name,pc->data[ret].age,pc->data[ret].sex,pc->data[ret].addr,pc->data[ret].tele);
}
}
2.6修改联系人
代码如下:
//修改指定联系人
void ModifyContact(Contact* pc)
{
//要修改就要先查找到
char names[NAME_MAX];
printf("请输入要查找人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要查找的人不存在\n");
return;
}
//修改,从新录入一遍
printf("请输入名字:>");
scanf("%s",pc->data[ret].name);
printf("请输入年龄:>");
scanf("%d",&(pc->data[ret].age));
printf("请输入性别:>");
scanf("%s",pc->data[ret].sex);
printf("请输入地址:>");
scanf("%s",pc->data[ret].addr);
printf("请输入电话:>");
scanf("%s",pc->data[ret].tele);
printf("修改完成\n");
}
2.7对通讯录中联系人的信息进行排序
代码如下:
void SortContact(Contact* pc)
{
if (pc->count == 0)
{
printf("通讯录中没有联系人");
}
else
{
for (int i = 0; i < pc->count - 1; i++)
{
for (int j = 0; j < pc->count-i-1; j++)
{
if ((strcmp(pc->data[j].name, pc->data[j + 1].name)) > 0)
{
PeoInfo tmp = pc->data[j];
pc->data[j] = pc->data[j+1];
pc->data[j + 1] = tmp;
}
}
}
printf("排序成功\n");
}
}
三、实现通讯录的所有文件展现
3.1通讯录函数绘总
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
//人的信息
typedef struct peoInfo
{
char name[20];
int age;
char sex[5];
char addr[30];
char tele[12];
}peoInfo;
typedef struct Contact
{
peoInfo data[100];
int sz;
}Contact;
//初始化
void InitContact(Contact* pc);
//增加联系人
void AddContact(Contact* pc);
//显示联系人
void ShowContact(const Contact* pc);
//删除联系人
void DelContact(const Contact* pc);
//查找指定联系人
void Se0archContact(Contact* pc);
//修改指定联系人
void ModifyContact(Contact* pc);
//排序联系人
void SortContact(Contact* pc);
3.2通讯录函数的实现
//函数实现
#define MAX 100
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
//初始化
void InitContact(Contact* pc)
{
pc->sz=0;
memset(pc->data,0,sizeof(pc->data));
}
//增加联系人
void AddContact(Contact* pc)
{
if(pc->sz==MAX)
{
printf("已满\n");
return;
}
printf("请输入名字:>");
scanf("%s",pc->data[pc->sz].name);
printf("请输入年龄:>");
scanf("%d",&(pc->data[pc->sz].age));
printf("请输入性别:>");
scanf("%s",pc->data[pc->sz].sex);
printf("请输入地址:>");
scanf("%s",pc->data[pc->sz].addr);
printf("请输入电话:>");
scanf("%s",pc->data[pc->sz].tele);
sz++;
}
//显示联系人
void ShowContact(const Contact* pc)
{
int i=0;
printf("%-20s\t%4s\t%-5s\t%-20s\t%-12s\n","名字","年龄","性别","地址","电话");
for(i=0;i<pc->sz;i++)
{
printf("%-20s\t%4d\t%-5s\t%-20s\t%-12s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].addr,pc->data[i].tele);
}
}
int FindByName(Contact* pc,char names[])
{
for(int i=0;i<pc->sz;++i)
{
if(strcmp(pc->data[i].name,names)==0)
{
return i;
}
}
return -1;
}
//删除联系人
void DelContact(Contact* pc)
{
char names[NAME_MAX]={0};
if(pc->sz==0)
{
printf("通讯录为空,无法删除\n");
return;
}
//删除
//找到要删除的人
printf("请输入要删除的人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要删除的人不存在\n");
return;
}
//删除
int j=0;
for(j=ret;j<pc->sz-1;++j)
{
pc->data[j]=pc->data[j+1];
}
pc->sz--;
printf("删除成功\n");
}
//查找指定联系人
SearchContact(const Contact* pc)
{
char names[NAME_MAX];
printf("请输入要查找人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要查找的人不存在\n");
return;
}
//打印信息
printf("%-20s\t%4s\t%-5s\t%-20s\t%-12s\n","名字","年龄","性别","地址","电话");
for(i=0;i<pc->sz;i++)
{
printf("%-20s\t%4d\t%-5s\t%-20s\t%-12s\n",pc->data[ret].name,pc->data[ret].age,pc->data[ret].sex,pc->data[ret].addr,pc->data[ret].tele);
}
}
//修改指定联系人
void ModifyContact(Contact* pc)
{
//要修改就要先查找到
char names[NAME_MAX];
printf("请输入要查找人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要查找的人不存在\n");
return;
}
//修改,从新录入一遍
printf("请输入名字:>");
scanf("%s",pc->data[ret].name);
printf("请输入年龄:>");
scanf("%d",&(pc->data[ret].age));
printf("请输入性别:>");
scanf("%s",pc->data[ret].sex);
printf("请输入地址:>");
scanf("%s",pc->data[ret].addr);
printf("请输入电话:>");
scanf("%s",pc->data[ret].tele);
printf("修改完成\n");
}
void SortContact(Contact* pc)
{
if (pc->count == 0)
{
printf("通讯录中没有联系人");
}
else
{
for (int i = 0; i < pc->count - 1; i++)
{
for (int j = 0; j < pc->count-i-1; j++)
{
if ((strcmp(pc->data[j].name, pc->data[j + 1].name)) > 0)
{
PeoInfo tmp = pc->data[j];
pc->data[j] = pc->data[j+1];
pc->data[j + 1] = tmp;
}
}
}
printf("排序成功\n");
}
}
3.3通讯录测试代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
//人的信息
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* pc)
{
pc->sz=0;
memset(pc->data,0,sizeof(pc->data));
}
//增加联系人
void AddContact(Contact* pc)
{
if(pc->sz==MAX)
{
printf("已满\n");
return;
}
printf("请输入名字:>");
scanf("%s",pc->data[pc->sz].name);
printf("请输入年龄:>");
scanf("%d",&(pc->data[pc->sz].age));
printf("请输入性别:>");
scanf("%s",pc->data[pc->sz].sex);
printf("请输入地址:>");
scanf("%s",pc->data[pc->sz].addr);
printf("请输入电话:>");
scanf("%s",pc->data[pc->sz].tele);
pc->sz++;
}
//显示联系人
void ShowContact(const Contact* pc)
{
int i=0;
printf("%-20s\t%4s\t%-5s\t%-20s\t%-12s\n","名字","年龄","性别","地址","电话");
for(i=0;i<pc->sz;i++)
{
printf("%-20s\t%4d\t%-5s\t%-20s\t%-12s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].addr,pc->data[i].tele);
}
}
删除联系人
//void DelContact(Contact* pc)
//{
// char names[NAME_MAX]={0};
//
// if(pc->sz==0)
// {
// printf("通讯录为空,无法删除\n");
// return;
// }
// //删除
// //找到要删除的人
// printf("请输入要删除的人的名字:>");
// scanf("%s",names);
// int del=0;
// for(int i=0;i<pc->sz;++i)
// {
// if(strcmp(pc->data[i].name,names)==0)
// {
// del=i;
// break;
// }
// }
// //删除
// int j=0;
// for(j=del;j<pc->sz-1;++j)
// {
// pc->data[j]=pc->data[j+1];
// }
// pc->sz--;
// printf("删除成功\n");
//}
int FindByName(Contact* pc,char names[])
{
for(int i=0;i<pc->sz;++i)
{
if(strcmp(pc->data[i].name,names)==0)
{
return i;
}
}
return -1;
}
//删除联系人
void DelContact(Contact* pc)
{
char names[NAME_MAX]={0};
if(pc->sz==0)
{
printf("通讯录为空,无法删除\n");
return;
}
//删除
//找到要删除的人
printf("请输入要删除的人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要删除的人不存在\n");
return;
}
//删除
int j=0;
for(j=ret;j<pc->sz-1;++j)
{
pc->data[j]=pc->data[j+1];
}
pc->sz--;
printf("删除成功\n");
}
//查找指定联系人
void SearchContact(Contact* pc)
{
char names[NAME_MAX];
printf("请输入要查找人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要查找的人不存在\n");
return;
}
//打印信息
printf("%-20s\t%4s\t%-5s\t%-20s\t%-12s\n","名字","年龄","性别","地址","电话");
for(int i=0;i<pc->sz;i++)
{
printf("%-20s\t%4d\t%-5s\t%-20s\t%-12s\n",pc->data[ret].name,pc->data[ret].age,pc->data[ret].sex,pc->data[ret].addr,pc->data[ret].tele);
}
}
//修改指定联系人
void ModifyContact(Contact* pc)
{
//要修改就要先查找到
char names[NAME_MAX];
printf("请输入要查找人的名字:>");
scanf("%s",names);
int ret = FindByName(pc,names);
if(-1==ret)
{
printf("要查找的人不存在\n");
return;
}
//修改,从新录入一遍
printf("请输入名字:>");
scanf("%s",pc->data[ret].name);
printf("请输入年龄:>");
scanf("%d",&(pc->data[ret].age));
printf("请输入性别:>");
scanf("%s",pc->data[ret].sex);
printf("请输入地址:>");
scanf("%s",pc->data[ret].addr);
printf("请输入电话:>");
scanf("%s",pc->data[ret].tele);
printf("修改完成\n");
}
void SortContact(Contact* pc)
{
if (pc->sz == 0)
{
printf("通讯录中没有联系人");
}
else
{
for (int i = 0; i < pc->sz - 1; i++)
{
for (int j = 0; j < pc->sz-i-1; j++)
{
if ((strcmp(pc->data[j].name, pc->data[j + 1].name)) > 0)
{
peoInfo tmp = pc->data[j];
pc->data[j] = pc->data[j+1];
pc->data[j + 1] = tmp;
}
}
}
printf("排序成功\n");
}
}
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;
//创建通讯录
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);
case 0:
printf("退出通讯录\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
总结
我是夏目浅石,希望和你一起学习进步,刷题无数!!!希望各位大佬能一键三连支持一下博主,hhhh~我们下期见喽
如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn
✨ 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力! \textcolor{9c81c1}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向! \textcolor{ed7976}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富! \textcolor{98c091}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!