服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现简易通讯录实例

C语言实现简易通讯录实例

2022-09-24 16:37K媾‍ C/C++

大家好,本篇文章主要讲的是C语言实现简易通讯录实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

一、问题描述

用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("******************************
");
	printf("*****1.add     2.del *********
");
	printf("*****3.search  4.modify*******
");
	printf("*****5.sort    6.print *******
");
	printf("*****0.exit    ***************
");
	printf("******************************
");
}

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("退出登录
");
			break;
		default:
			printf("选择错误,请重新选择
");
			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("通讯录已满,无法添加
");
		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("增加成功
");
 
}

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

代码如下:

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

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

C语言实现简易通讯录实例

 

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("通讯录为空,无需删除
");
		return;
	}
	//1.查找要删除的人
	//有没有
	printf("请输入要删除人的名字
");
	scanf("%s", name);
	
	int pos = FindByName(cp, name);
	
		if (pos == -1)
		{
			printf("要删除的人不存在
");
			return;
		}
		//2.删除
		int i = 0;
		for (i = pos; i < cp -> sz - 1; i++)
		{
			cp->data[i] = cp->data[i + 1];
		}
		cp->sz--;
		printf("删除成功
");
		
}

 

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

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

代码如下

/查找联系人信息
void SearchContact(contact* cp)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要查找人的名字
");
	scanf("%s", name);
	int pos = FindByName(cp, name);
 
	if (pos == -1)
	{
		printf("要查找的人不存在
");
		return;
	}
	else 
	{
		printf("%-5s	 %-5s	 %-5s	 %-12s	 %-20s
", "名字", "年龄", "性别", "电话", "地址");
		printf("%-5s	 %-5d	 %-5s	 %-12s	 %-20s
",
			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("请输入要修改人的名字
");
	scanf("%s", name);
	int pos = FindByName(cp, name);
 
	if (pos == -1)
	{
		printf("要修改的人不存在
");
		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("修改成功
");
		
	}
}

部分功能结果图:

C语言实现简易通讯录实例

 

 总结:

上述简单实现了通讯录的增删改查功能,写出了一个简易通讯录

到此这篇关于C语言实现简易通讯录实例的文章就介绍到这了,更多相关C语言通讯录内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_64397675/article/details/122922095

延伸 · 阅读

精彩推荐
  • C/C++如何把C++的源代码改写成C代码的方法

    如何把C++的源代码改写成C代码的方法

    这篇文章主要介绍了如何把C++的源代码改写成C代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    51CTO9272021-09-14
  • C/C++浅谈C++ IO流

    浅谈C++ IO流

    这篇文章主要介绍了C++ IO流的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下...

    Dabelv7462021-09-24
  • C/C++C语言实现猜数字小游戏(附源代码)

    C语言实现猜数字小游戏(附源代码)

    这篇文章主要介绍了C语言实现猜数字小游戏,附有详细代码,需要的小伙伴可以参考一下,希望对你的辽西有所帮助...

    LoveHoneyYou7872022-01-25
  • C/C++浅析C/C++中动态链接库的创建和调用

    浅析C/C++中动态链接库的创建和调用

    下面小编就为大家带来一篇浅析C/C++中动态链接库的创建和调用。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...

    C++教程网6092021-04-02
  • C/C++C++实现LeetCode(133.克隆无向图)

    C++实现LeetCode(133.克隆无向图)

    这篇文章主要介绍了C++实现LeetCode(133.克隆无向图),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang5422021-12-06
  • C/C++KMP算法最浅显理解(小白教程)

    KMP算法最浅显理解(小白教程)

    这篇文章主要介绍了KMP算法最浅显理解(小白教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    路漫远吾求索4802021-08-06
  • C/C++基于C语言实现扫雷游戏

    基于C语言实现扫雷游戏

    这篇文章主要为大家详细介绍了基于C语言实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    猪事顺利11362021-09-30
  • C/C++C语言-I/O流设计实验

    C语言-I/O流设计实验

    编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或时有能力接收数据的接收端对象,本文为大家介绍C语言中I/...

    小狐狸FM3942021-11-22