当前位置:首页 » 《随便一记》 » 正文

没有她的通讯录(C语言实现)

28 人参与  2023年04月01日 10:57  分类 : 《随便一记》  评论

点击全文阅读


在这里插入图片描述

?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}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!


点击全文阅读


本文链接:http://zhangshiyu.com/post/57750.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1