IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言进阶(实现简易通讯录) -> 正文阅读

[C++知识库]C语言进阶(实现简易通讯录)

目录

一、问题描述

二、功能介绍

二、实现流程

1.创建通讯录

1.创建头文件contact.h

2.定义结构体类型(struct peoInfo)

3.定义通讯录结构体类型(struct contact)

4.#define定义标识符常量

5.功能实现函数的声明

2.创建源文件test.c

1.打印菜单

2.枚举方法定义编号

3.主文件的实现

3.创建源文件contact.c

1.初始化通讯录为0(Initcontact函数实现)

?2.增加通讯录联系人信息(AddContact函数实现)

4.删除通讯录联系人信息?(DelContact函数实现)

5.查找通讯录联系人信息(?SearchContact函数实现)

6.修改联系人信息(ModifyContact函数实现)


一、问题描述

用C语言来写一个简易的通讯录

二、功能介绍

通讯录
1.通讯录中能够存放1000个人的信息
每个人的信息:
名字,年龄,性别,电话,地址
2.增加人的信息
3.删除人的信息
4.修改指定人的信息
5.查找指定人的信息
6.排序

二、实现流程

1.创建通讯录

1.创建头文件contact.h

头文件contact.h用来实现类型的定义和函数的声明。

2.定义结构体类型(struct peoInfo)

一个人的信息包含名字,年龄,性别,电话,地址,所以我们要定义一个结构体类型才能完整的表述。

写一个结构体类型struct peoInfo存放一个人的信息

代码如下:

/类型的定义
typedef struct peoInfo
{
	char name[MAX_NAME];//名字
	char sex[MAX_SEX];//性别
	int age;//年龄
	char tele[MAX_TELE];//电话
	char addr[MAX_ADDR];//地址
}peoInfo;

typedef(类型重命名),struct peoInfo重命名为peoInfo。

3.定义通讯录结构体类型(struct contact)

因为要存放1000个这样的人的信息,所以我们创建一个结构体类型的数组data。再创建一个变量sz来表示这个数组的下标,data数组中存第一个人信息的时候,我们放在下标为sz的位置,这个时候让我们的sz等于0,存第二个人的信息的时候,让我们的sz等于1,这样后续就方便我们通过下标的方式找到存入的每一个人的信息。

代码如下:

peoInfo data[MAX];//存放添加进来的人的信息
	int sz;//记录的是通讯录中有效信息的个数

上述代码加起来就构成了我们的通讯录,很明显这也是一个结构体。

代码如下:

//通讯录
typedef struct contact
{
	peoInfo data[MAX];//存放添加进来的人的信息
	int sz;//记录的是通讯录中有效信息的个数
}contact;

4.#define定义标识符常量

为了后续我们方便随时调整通讯录的大小所以我们把数组的数字挨个用#define定义标识符常量

代码如下:

#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 12
#define MAX_ADDR 30
#define MAX 1000

5.功能实现函数的声明

/初始化通讯录
void Initcontact(contact* cp);

//增加联系人信息
void AddContact(contact* cp);

//打印联系人信息
void PintContact(const contact* cp);

//删除联系人信息
void DelContact(contact* cp);

//查找联系人信息
void SearchContact(contact* cp);

//修改联系人信息
void ModifyContact(contact* cp);

2.创建源文件test.c

源文件test.c测试通讯录的模块

通讯录有了之后,我们要写出通讯录的基本操作逻辑,选择增加联系人,选择删除联系人,选择修改联系人......选择错误,重新选择,选择重新开始等等。

1.打印菜单

代码如下:


void menu()
{
	printf("******************************\n");
	printf("*****1.add     2.del *********\n");
	printf("*****3.search  4.modify*******\n");
	printf("*****5.sort    6.print *******\n");
	printf("*****0.exit    ***************\n");
	printf("******************************\n");
}

2.枚举方法定义编号

代码如下:

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

3.主文件的实现

代码如下

int main()
{
	int input = 0;
	//创建通讯录
	contact con;//通讯录
	//初始化通讯录
	Initcontact(&con);
	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 SORT:
			break;
		case PRINT:
			//打印人的信息
			PintContact(&con);
			break;
		case EXIT:
			printf("退出登录\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}

	} while (input);
	return 0;
}

写出一个菜单来供用户们选择自己想要的功能,采用枚举的方式让程序员看代码的时候能一目了然,一眼就也可以看出来这里要实现的是什么功能。

3.创建源文件contact.c

源文件contact.c来实现我们想要的功能(函数的实现)

1.初始化通讯录为0(Initcontact函数实现)

//初始化通讯录为0
void Initcontact(contact* cp)
{
	cp->sz = 0;//通讯录中人的数量先初始化为0
	memset(cp->data, 0, sizeof(cp->data));//数组内存中每个字节初始化为0

?2.增加通讯录联系人信息(AddContact函数实现)

先判断通讯录人数是不是满了,满了就无法添加,没满就添加联系人信息。

代码如下:

//增加联系人的信息
void AddContact(contact* cp)
{
	if (cp->sz == MAX)
	{
		printf("通讯录已满,无法添加\n");
		return;
	}
	//增加一个人的信息
	printf("请输入名字:>");
	scanf("%s", cp->data[cp->sz].name);
	printf("请输入年龄:>");
	scanf("%d", &(cp->data[cp->sz].age));
	printf("请输入性别:>");
	scanf("%s", cp->data[cp->sz].sex);
	printf("请输入电话:>");
	scanf("%s", cp->data[cp->sz].tele);
	printf("请输入地址:>");
	scanf("%s", cp->data[cp->sz].addr);
	cp->sz++;
	printf("增加成功\n");

}

3.打印通讯录联系人信息(?PintContact函数实现)

代码如下:

//打印联系人的信息
void PintContact(const contact* cp)
{
	//打印标题
	int i = 0;
	printf("%-5s\t %-5s\t %-5s\t %-12s\t %-20s\n", "名字", "年龄", "性别", "电话", "地址");
	for (i = 0; i < cp->sz; i++)
	{
		printf("%-5s\t %-5d\t %-5s\t %-12s\t %-20s\n", 
			cp ->data[i].name,
			cp -> data[i].age,
			cp -> data[i].sex,
			cp -> data[i].tele,
			cp -> data[i].addr);
	}
}

增加完联系人信息之后我们可以打印出来看一看。

4.删除通讯录联系人信息?(DelContact函数实现)

首先判断通讯录里有没有联系人,没有就无需删除,有的话就根据查找函数查找通讯录成员名字来删除所对应的信息。

代码如下:

static int  FindByName(contact* cp, char name[])
{
	int i = 0;
	for (i = 0; i < cp->sz; i++)
	{
		if (strcmp(cp->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

//删除联系人信息
void DelContact(contact* cp)
{
	char name[MAX_NAME] = { 0 };
	if (cp->sz == 0)
	{
		printf("通讯录为空,无需删除\n");
		return;
	}
	//1.查找要删除的人
	//有没有
	printf("请输入要删除人的名字\n");
	scanf("%s", name);
	
	int pos = FindByName(cp, name);
	
		if (pos == -1)
		{
			printf("要删除的人不存在\n");
			return;
		}
		//2.删除
		int i = 0;
		for (i = pos; i < cp -> sz - 1; i++)
		{
			cp->data[i] = cp->data[i + 1];
		}
		cp->sz--;
		printf("删除成功\n");
		
}

5.查找通讯录联系人信息(?SearchContact函数实现)

根据查找函数查找通讯录成员名字来删除所对应的信息。

代码如下

/查找联系人信息
void SearchContact(contact* cp)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要查找人的名字\n");
	scanf("%s", name);
	int pos = FindByName(cp, name);

	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else 
	{
		printf("%-5s\t %-5s\t %-5s\t %-12s\t %-20s\n", "名字", "年龄", "性别", "电话", "地址");
		printf("%-5s\t %-5d\t %-5s\t %-12s\t %-20s\n",
			cp->data[pos].name,
			cp->data[pos].age,
			cp->data[pos].sex,
			cp->data[pos].tele,
			cp->data[pos].addr);

	}
}

6.修改联系人信息(ModifyContact函数实现)

根据查找函数查找通讯录成员名字来修改所对应的信息。

代码如下:

//修改联系人的信息
void ModifyContact(contact* cp)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要修改人的名字\n");
	scanf("%s", name);
	int pos = FindByName(cp, name);

	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	else 
	{
		printf("请输入名字:>");
		scanf("%s", cp->data[pos].name);
		printf("请输入年龄:>");
		scanf("%d", &(cp->data[pos].age));
		printf("请输入性别:>");
		scanf("%s", cp->data[pos].sex);
		printf("请输入电话:>");
		scanf("%s", cp->data[pos].tele);
		printf("请输入地址:>");
		scanf("%s", cp->data[pos].addr);
		printf("修改成功\n");
		
	}
}

部分功能结果图:

?总结:

上述简单实现了通讯录的增删改查功能,写出了一个简易通讯录,如果上述文章有任何问题?,欢迎大佬们提出质疑,我会虚心学习和改正,最重要的是能共同进步,共同成长,学习好编程。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:52:35  更:2022-02-16 12:53:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:05:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码