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

 更新时间:2022年02月16日 09:32:10   作者:K媾‍  
大家好,本篇文章主要讲的是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("******************************\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语言通讯录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现车辆出租管理系统

    C语言实现车辆出租管理系统

    这篇文章主要为大家详细介绍了C语言实现车辆出租管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++ 类this及返回自身对象的引用方式

    C++ 类this及返回自身对象的引用方式

    这篇文章主要介绍了C++ 类this及返回自身对象的引用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 详解C语言中free()函数与getpagesize()函数的使用

    详解C语言中free()函数与getpagesize()函数的使用

    这篇文章主要介绍了详解C语言中free()函数与getpagesize()函数的使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • Qt使用QJson模块实现解析Json文件

    Qt使用QJson模块实现解析Json文件

    在项目开发过程中,经常会遇到读写Json文件的需求,掌握Json文件的操作是基础中的基础,下面我们就来看看如何使用QT内置的QJson模块解析Json文件吧
    2023-10-10
  • Qt6子窗口全屏显示的实现示例

    Qt6子窗口全屏显示的实现示例

    在Qt开发中,有时候需要让程序窗口全屏显示,本文主要介绍了Qt6子窗口全屏显示的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • C++在C语言基础之上增强的几个实用特性总结

    C++在C语言基础之上增强的几个实用特性总结

    这篇文章主要介绍了C++在C语言基础之上增强的几个实用特性总结,包括C++中更强的类型约束以及结构体方面等一些更加高级的特性,需要的朋友可以参考下
    2016-03-03
  • C++简易通讯录系统实现流程详解

    C++简易通讯录系统实现流程详解

    这篇文章主要为大家介绍了C语言简易版通讯录的具体实现流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 正确理解C++的构造函数和析构函数

    正确理解C++的构造函数和析构函数

    在C++的学习中,可以把类当作一个模具,类实例化出来的对象就是根据这个模具所产生的实体,对象看作是自己创建的一个新的数据类型。本文主要介绍了类对象通过拷贝函数进行初始化,分析类对象的内存模型,以及通过this指针实现更复杂的功能。最后介绍了析构函数的基础知识
    2021-06-06
  • 简单分析C语言中指针数组与数组指针的区别

    简单分析C语言中指针数组与数组指针的区别

    这篇文章主要介绍了C语言中指针数组与数组指针的区别,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • C++中std::vector的6种初始化方式

    C++中std::vector的6种初始化方式

    这篇文章主要介绍了C++中std::vector的6种初始化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论