资讯专栏INFORMATION COLUMN

❤️C语言通讯录管理系统(简易版)❤️

justCoding / 1567人阅读


本篇博客是关于C语言通讯录的介绍,来看看这你是否能写出一个这样的系统呢?

?Hi~ o( ̄▽ ̄)ブ这里是猪猪程序员
? 很高兴见到你O(∩_∩)O! ? 现在正在发芽中…
?欢迎关注?点赞?收藏⭐️留言?
?本文由猪猪原创,CSDN首发!?首发时间:?2021年9月25日?
?️ 博主水平有限,如果发现错误,一定要及时告知作者哦 o( ̄︶ ̄)o!感谢感谢!
?博主的码云 gitee,平常博主写的程序代码都在里面。

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

提供方法:

?一、通讯录

??实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

提供方法:

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息
  6. 清空所有联系人
  7. 以名字排序所有联系人

??注:这是一个简单的通讯录,实现方案是初级版。
只能在程序运行期间存在(没有写入文件)。

?二、菜单实现和用户交互

void menu(){		printf("=====================/n");		printf(" 1. 新增联系人/n");		printf(" 2. 删除联系人/n");		printf(" 3. 查找联系人/n");		printf(" 4. 修改联系人/n");		printf(" 5. 查看所有联系人/n");		printf(" 6. 清空所有联系人/n");		printf(" 7. 以名字排序所有联系人/n");		printf(" 0. 退出/n");		printf("=====================/n");}

?三、主函数

⭐️⭐️1.enum选项

enum Option{	EXIT,	ADD,	DEL,	SEARCH,	MODIFY,	SHOW,	EMPTY,	SORT,};

enum枚举常量,里面默认对应的值是从0~7,刚好和菜单中的选项匹配起来了

⭐️⭐️2.switch判断

do	{		menu();		printf("请选择:>");		scanf("%d", &input);		switch(input)		{			case ADD:				AddContact(&con);				break;			case DEL:				DelContact(&con);				break;			case SEARCH:				SearchContact(&con);				break;			case MODIFY:				ModifyContact(&con);					break;			case SHOW:				ShowContact(&con);				break;			case EMPTY:				EmptyContact(&con);				break;			case EXIT:				printf("退出通讯录/n");				break;			default:				printf("选择错误/n");				break;		}	} while (input);

?四、定义联系人和通讯录

⭐️⭐️1.定义联系人结构体

#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 20#define ADDR_MAX 30struct PeoInfo{	char name[NAME_MAX];	int age;	char sex[SEX_MAX];	char tele[TELE_MAX];	char addr[ADDR_MAX];};

??注意事项:

  1. 我使用了四个define定义的常量,这样要修改最大值的时候更方便
  2. 定义的struct结构体可以存放:姓名、性别、年龄、电话、住址

⭐️⭐️2.定义通讯录结构体

#define MAX 1000struct Contact{	struct PeoInfo date[MAX];	int sz;};

??注意事项:

  1. struct PeoInfo date[MAX]这个数组可以存放1000人的信息
  2. sz表示当前通讯录里面的人数

⭐️⭐️3.定义结构体变量

struct PeoInfo con;

?五、通讯录初始化

#include#include"contact.h"void Initcontact(struct Contact* pc){	pc->sz = 0;	memset(pc->date, 0, MAX * sizeof(struct PeoInfo));}

??注意事项:

  1. 将信息都赋值为0,否则 struct里面都是随机值
  2. memset开辟了一块动态内存空间,相关知识请查阅我写的博客:关于memset用法

?六、新增联系人

void AddContact(struct Contact* pc){	struct PeoInfo tmp = { 0 };	if (pc->sz == MAX)	{		printf("通讯录已满1000人");	}	else	{		printf("请输入名字:>");		scanf("%s", tmp.name);		printf("请输入年龄:>");		scanf("%d", tmp.age));		printf("请输入性别:>");		scanf("%s", tmp.sex);		printf("请输入电话:>");		scanf("%s", tmp.tele);		printf("请输入地址:>");		scanf("%s", tmp.addr);		pc->data[pc->sz] = tmp;		printf("添加成功!");		pc->sz++;	}}

??注意事项:

每次添加选择放在下标为szdata数组里面

?七、查找联系人

??注意事项:

  1. 我发现无论是删除联系人、修改联系人、查看所有联系人都需要一个查找所有联系人的动作,因此我们写出一个查找所有联系人的函数
int FindContactByName(struct Contact* pc, char name[]){	int i = 0;	for (i = 0; i < pc->sz; i++)	{		if (strcmp(pc->data[i].name, name) == 0)		{			return i;		}	}	return -1;}

??注意事项:

  1. strcmp库函数来比较data数组中的名字与要查找的名字是否相同
  2. 相同则返回下标,不同则返回-1
void SearchContact(struct Contact* pc){	char name[NAME_MAX] = { 0 };	printf("请输入要查找人的名字:>");	scanf("%s", name);	int pos= FindContactByName(pc, name);	if (-1 == pos)	{		printf("查无此人");	}	else	{		printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "姓名", "年龄", "性别", "电话", "地址");		printf("%15s/t%5s/t%8s/t%15s/t%30s/n",			pc->data[pos].name,			pc->data[pos].age,			pc->data[pos].sex,			pc->data[pos].tele,			pc->data[pos].addr);	}}

?八、删除联系人

void DelContact(struct Contact* pc){	if (pc->sz == 0)	{		printf("通讯录为空,无法删除/n");	}	char name[NAME_MAX] = { 0 };	printf("请输入要删除人的名字");	scanf_s("%s", name);	int pos=FindContactByName(pc,name);//按照名字去查找,找到了就返回下标,未找到就返回-1	if (pos == -1)	{		printf("指定联系人不存在/n");	}	else	{		int j = 0;		for (j = pos; j < pc->sz-1; j++)		{			pc->data[j] = pc->data[j + 1];		}		pc->sz--;		printf("删除成功!/n");	}}

?九、修改联系人

void ModifyContact(struct Contact* pc){	char name[NAME_MAX] = { 0 };	printf("请输入要修改人的名字:>");	scanf("%s", name);	int pos = FindContactByName(pc, name);	if (-1 == pos)	{		printf("要修改的人不存在/n");	}	else	{		printf("请输入新的名字:>");		scanf("%s", pc->data[pos].name);//选择放在下标为sz的data里面		printf("请输入新的年龄:>");		scanf("%d", &(pc->data[pos].age));		printf("请输入新的性别:>");		scanf("%s", pc->data[pos].sex);		printf("请输入新的电话:>");		scanf("%s", pc->data[pos].tele);		printf("请输入新的地址:>");		scanf("%s", pc->data[pos].addr);	}}

?十、查看所有联系人

void ShowContact(struct Contact* pc){	int i = 0;	printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "姓名", "年龄", "性别", "电话", "地址");//打印标题	for (i = 0; i < pc->sz; i++)	{		printf("%15s/t%5s/t%8s/t%15s/t%30s/n",			pc->data[i].name, 			pc->data[i].age, 			pc->data[i].sex, 			pc->data[i].tele, 			pc->data[i].addr);	}}

?十一、清空所有联系人

void EmptyContact(struct Contact* pc){	pc->sz = 0;	memset(pc->data, 0, MAX * sizeof(struct PeoInfo));}

??注意事项:

memset不是开辟内存的 是将内存空间中的数据清零的

?十二、以名字排序所有联系人

void SortContact(struct Contact* pc){	qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByname);}

??注意事项:

有关qsort相关的知识,请参考此篇博客

?十三、完整代码

⭐️⭐️contact.h

#define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1#include#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 20#define ADDR_MAX 30#define MAX 100#include #include #include struct PeoInfo{	char name[NAME_MAX];	int age;	char sex[SEX_MAX];	char tele[TELE_MAX];	char addr[ADDR_MAX];};struct Contact{	struct PeoInfo data[MAX];	int sz;};//初始化通讯录void InitContact(struct Contact* pc);//清空所有联系人void EmptyContact(struct Contact* pc);//增加联系人void AddContact(struct Contact* pc);//显示所有的联系人void ShowContact(struct Contact* pc);//删除指定联系人void DelContact(struct Contact* pc);//查找指定联系人void SearchContact(const struct Contact* pc);//修改指定联系人void ModifyContact(struct Contact* pc);

⭐️⭐️test.c

#define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1#include#include "contact.h"void menu(){	printf("=====================/n");	printf(" 1. 新增联系人/n");	printf(" 2. 删除联系人/n");	printf(" 3. 查找联系人/n");	printf(" 4. 修改联系人/n");	printf(" 5. 查看所有联系人/n");	printf(" 6. 清空所有联系人/n");	printf(" 7. 以名字排序所有联系人/n");	printf(" 0. 退出/n");	printf("=====================/n");	printf(" 请输入您的选择:");}enum Option{	EXIT,	ADD,	DEL,	SEARCH,	MODIFY,	SHOW,	EMPTY,	SORT,};//枚举常量,里面对应的值是从0~6,刚好和菜单匹配起来了int main(){	int input = 0;	struct Contact con;	InitContact(&con);	do	{		menu();		printf("请选择:>");		scanf_s("%d", &input);		switch (input)		{		case ADD:			AddContact(&con);			break;		case DEL:			DelContact(&con);			break;		case SEARCH:			SearchContact(&con);			break;		case MODIFY:			ModifyContact(&con);			break;		case SHOW:			ShowContact(&con);			break;		case EMPTY:			EmptyContact(&con);			break;		case EXIT:			printf("退出通讯录/n");			break;		default:			printf("选择错误/n");			break;		}	} while (input);		return 0;}

⭐️⭐️contact.c

#define _CRT_SECURE_NO_WARNINGS 1#include#include "contact.h"void InitContact(struct Contact* pc){	pc->sz = 0;	memset(pc->data, 0, MAX * sizeof(struct PeoInfo));}void AddContact(struct Contact* pc){	struct PeoInfo tmp = { 0 };	if (pc->sz == MAX)	{		printf
                 
               
              

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121138.html

相关文章

  • C语言实现简易动态电话簿&amp;&amp;文末提供源代码下载

    摘要:导航前言功能函数结构设定菜单交互主函数通讯录初始化新增联系人查找联系人删除联系人修改联系人查看所有联系人清空所有联系人以名字排序所有联系人结尾语前言本文将实现一个简易的电话簿管理。信息包括名字,性别,电话号码,年龄,住址。 ...

    苏丹 评论0 收藏0
  • 苏州程序大白一文从基础手把手教你Python数据可视化大佬☀《❤记得收藏❤

    ☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》 目录 ?️‍?开讲啦!!!!?️‍?苏州程序大白?️‍??博主介绍前言数据关系可视化散点图 Scatter plots折线图强调连续性 Emphasizing continuity with line plots同时显示多了图表 数据种类的可视化 Plotting with categorical da...

    Drinkey 评论0 收藏0
  • 整理2万字带你走进C语言(详细讲解+代码演示+图解)❤(强烈建议收藏!!!)

    目录 一、什么是C语言? 二、第一个C语言程序 代码 程序分析  程序运行 一个工程中出现两个及以上的main函数 代码 运行结果 分析 三、数据类型 数据各种类型 为什么会有这么多的数据类型? 计算机单位  各个数据类型的大小  注意事项 数据类型的使用 四、变量和常量 变量的分类 变量的使用 变量的作用域和生命周期  常量 五、字符串+转义字符+注释 字符串  转义字符 注释 六、选择语句  ...

    邱勇 评论0 收藏0
  • 【51单片机】☀万物互联☀一招搞定单片机(持续更新中......)

    目录 第一章:单片机概述 单片机的应用领域: STC89C52单片机: 单片机命名规则:  单片机内部结构图:  单片机管脚图:  单片机最小系统: 进制表: 新建一个工程:  检查单片机驱动是否安装完成: 打开Keil uVision集成开发环境 选择Atmel下的AT89C52 创建源文件   第二章:LED LED介绍:  点亮LED:   第一章:单片机概述 单片机(Micro Contr...

    idisfkj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<