广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言模拟实现动态通讯录
  • 348
分享到

C语言模拟实现动态通讯录

2024-04-02 19:04:59 348人浏览 八月长安
摘要

目录1.模拟实现通讯录总体架构一览图2.文件执行任务3.分模块实现 测试模块 test.c头文件 功能函数声明 contact.h功能函数逐一实现1.模拟实现通讯录总体架构

1.模拟实现通讯录总体架构一览图

在这里插入图片描述

2.文件执行任务

在这里插入图片描述

3.分模块实现

 测试模块 test.c

1.为了更好地展示,制作一个菜单,在菜单中有 添加,删除,查找,修改,排序,清空,退出的选项。
2.因为起先要进入程序一趟,所以用do····while循环(输入选项来看具体操作,退出还是其他操作)


 #include "contact.h"
void menu()
{

	printf("*****************************************\n");
	printf("********          Contact          ******\n");
	printf("********     1.add     2. del      ******\n");
	printf("********     3.search  4.modify    ******\n");
	printf("********     5.print   6.empty     ******\n");
	printf("********     7.sort    0.exit      ******\n");
	printf("*****************************************\n");

}
enum Option
//为什么要使用枚举
//因为这样可以防止命名污染,而且使用枚举,枚举成员有默认初始值,默认从0开始,这样省去的诸多的代码量
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	PRINT,
	EMPTY,
	SORT,
};
int main()
{
	//先打印菜单,展示通讯录功能
	int input = 0;
	//先进行设置一个通讯录
	//设置每个人的信息
	//初始化通讯录 
	//通讯录中的一个元素
	contact con; 
	//contact 是自定义数据类型,包括一个联系人的基本信息
	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 PRINT:
			//显示
			PrintContact(&con);
			break;
		case SORT:
			//实现名字排序
			SortContact(&con);
			break;
		case EMPTY:
			//实现清空
			EmptyContact(&con);
			break;
		case EXIT:
			//退出程序
			ExitContact(&con);
			break;
		default:
			printf("输入错误,请重新输入\n");
		}
	} while (input);
	return 0;
}

头文件 功能函数声明 contact.h

1.声明各类功能函数
2.定义各个常量,把常量定义成通俗易懂的变量,便于在多处使用。
3.定义结构体,自定义类型中,有一个联系人的基本信息。


 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_NAME 20 //定义姓名字符串的大小为20
#define MAX_SEX 10 //定义性别字符串的大小为10
#define MAX_TELE 12 //定义电话字符串的大小为12
#define MAX_ADDR 20 //定义地址字符串的大小为20
#define MAX 1000  //定义通讯录的最大容量为1000
#define IN_NUM 3  //在动态申请空间时默认空间为3
#define SET_NUM 2  //当基本信息大于3份时,开辟两个空间
//设置每一个人的信息
//通讯录规定要求一共有1000个人
typedef struct base
{
	char name[MAX_NAME]; //姓名
	char sex[MAX_SEX];   //性别
	int age;             //年龄
	char tele[MAX_TELE]; //电话
	char addr[MAX_ADDR]; //住址
}base;
//设置1000人的通讯录
//静态版
//typedef struct contact
//{
//	 
//	int sz;           //计算当前通讯录中联系人的个数
//	base data[MAX]; //存放联系人的信息
// 
//}contact;
//动态初始化通讯录
typedef struct contact
{
	//有个结构体类型中需要,监视通讯录人数的一项,还有当联系人为3人时,这时候要进行增容
	int sz;   //计算当前联系人的个数
	base* data; //指向动态申请的空间,存放联系人的信息
	int capciaty; //计算当前通讯录中的最大容量
}contact;

//初始化通讯录
void InitContact(contact* pc);
//添加联系人
void AddContact(contact* pc);
//显示
void PrintContact(contact* pc);
//删除联系人
void DelContact(contact* pc);
//查找联系人
void SearchContact(contact* pc);
//修改信息
void ModifyContact(contact* pc);
//排序联系人信息
void SortContact(contact* pc);
//清空联系人信息
void EmptyContact(contact* pc);
//退出程序时,释放空间
void ExitContact(contact* pc);

功能函数逐一实现

contact.c 1.初始化通讯录

动态申请空间
默认在动态空间中存放3个基本单位信息


 void InitContact(contact* pc)
{

	pc->data = (base*)malloc(sizeof(base) * IN_NUM);

	if (pc->data == NULL)
	//如果空间开辟失败
	//退出程序
	{
		perror("InitContact");
		return;
	}
	//把每个成员都设置为0
	pc->sz = 0;
 
	pc->capciaty = IN_NUM;
}

2.添加联系人

当默认的空间被装满时,然后以后的每一次都开辟两个基本空间


void AddContact(contact* pc)
{
//先判断通讯录中是否满了
	//if (pc->sz == MAX)
	//{
	//	printf("通讯录已满,无法添加\n");
	//	return;
	//}
	//动态判断人的个数是否满足3
	if (pc->sz == pc->capciaty)
	{
		printf("开始增容:\n");
		//从新设置一个指针,存放新开辟的内存
		base* ptr = (base*)realloc(pc->data, (pc->capciaty + SET_NUM) * sizeof(base));
		//判断是否开辟成功
		if (ptr == NULL)
		{
			printf("开辟失败\n");
			perror("AddContact");
			return;
		}
		else
		{
			printf("开辟成功\n");
			//开辟成功的话,把ptr转交给data来维护,这样在内存释放的时候只需要释放pc->data
			pc->data = ptr;
			//增加基本信息数量
			pc->capciaty += SET_NUM;
		}
		printf("增容完毕\n");
	}
	//添加
	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].tele);
	printf("住址>");
	scanf("%s", pc->data[pc->sz].addr);
	pc->sz++;
	printf("添加成功\n");
}

3.显示联系人信息

逐一打印联系人信息,注意之间的距离(保持美观)


 //显示
void PrintContact(contact* pc)
{
	//显示标题
	printf("%-20s %-10s %-5s %-15s %-20s\n", "姓名", "性别", "年龄", "电话", "住址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-20s %-10s %-5d %-15s %-20s\n", 
		    pc->data[i].name,
			pc->data[i].sex,
			pc->data[i].age,
			pc->data[i].tele,
			pc->data[i].addr);
	}
}

4.删除联系人

在删除联系人之前,首先要查找要删除联系人的名字,然后进行删除,注意如何删除
让删除的这个单位的后一个单位去覆盖这个删除的单位(这样原来要删除的地方变成了后面一个值) i = i+1
当通讯录中有被删除着的名字时,返回这个单位的下标
当通讯录中没有时,返回-1


 //查找联系人
static int Find_name(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;
}
//删除联系人
void DelContact(contact* pc)
{
	//如果通讯录是空的
	if (pc->sz == 0)
	{
		printf("通讯为空,无需删除\n");
		return;
	}
//下进行查找被删除联系人的名字
	char name[MAX_NAME];
	printf("请输入要删除联系人的名字:");
	scanf("%s", name);
	int ret = Find_name(pc, name);
	if (ret == -1)
	{
		printf("该联系人不存在\n");
		return;
	}
	//删除
	//删除项后边的一项,覆盖前面的一项
	for (int i = ret; i < pc->sz; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("删除成功\n");
}

4.查找联系人

在删除联系人的时候有查找函数,在这里直接引用,并打印。这个人的信息。


 //查找联系人
void SearchContact(contact* pc)
{
	char name[MAX_NAME];
	printf("请输入要查找联系人的名字:");
	scanf("%s", name);
	int ret = Find_name(pc, name);
	if (ret == -1)
	{
		printf("该联系人不存在\n");
		return;
	}
	printf("%-20s %-10s %-5s %-15s %-20s\n", "姓名", "性别", "年龄", "电话", "住址");
	printf("%-20s %-10s %-5d %-15s %-20s\n", pc->data[ret].name,
			pc->data[ret].sex,
			pc->data[ret].age,
			pc->data[ret].tele,
			pc->data[ret].addr);
}

5.修该联系人信息

还是现在通讯录中查找这个联系人,在进行输入修改


 //修改信息
void ModifyContact(contact* pc)
{
	char name[MAX_NAME];
	printf("请输入要修改联系人的名字:");
	scanf("%s", name);
	int ret = Find_name(pc, name);
	if (ret == -1)
	{
		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].tele);
	printf("住址>");
	scanf("%s", pc->data[ret].addr);
}

6.排序联系人姓名

利用冒泡排序对联系人的名字进行排序(也可以使用快排)


 //排序
//交换名字,但是名字要和联系人的信息匹配
//先比较名字,根据名字的大小,再排序
static void SwapByname(base* pa, base* pb)
{
	base b;
	b = *pa;
	*pa = *pb;
	*pb = b;
}
void SortContact(contact* pc)
{
	printf("开始排序\n");
  //使用冒泡排序对联系人的名字进行排序
	int i = 0;
	int j = 0;
	for (i = 0; i < pc->sz; i++)
	{
		for (j = 0; j < pc-> sz - i - 1; j++)
		{
			if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0)
			{
				 //实现交换姓名
				SwapByname(&pc->data[j], &pc->data[j + 1]);
			}
		}
	}
	printf("排序结束\n");
}

7.清空联系人

在这里直接使用sz–,就可以删除


 //清空
void EmptyContact(contact* pc)
{
//如果原来的通讯录是空的就无须清空
	if (pc->sz == 0)
	{
		printf("通讯录为空,无需清空\n");
		return;
	}
	 
	printf("开始清除数据:\n");
	int num = pc->sz;
	for (int i = 0; i < num; i++)
	{
		pc->sz--;
	}
	printf("清空完毕\n");
}

8.退出通讯录

手动开辟,手动释放


 //退出程序,释放空间
void ExitContact(contact* pc)
{
	//释放空间
	free(pc->data);
	pc->data = NULL;
	pc->sz = 0;
	pc->capciaty = 0;
}

运行展示:

在这里插入图片描述

到此这篇关于C语言模拟实现动态通讯录的文章就介绍到这了,更多相关C语言 动态通讯录内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言模拟实现动态通讯录

本文链接: https://www.lsjlt.com/news/131015.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言模拟实现动态通讯录
    目录1.模拟实现通讯录总体架构一览图2.文件执行任务3.分模块实现 测试模块 test.c头文件 功能函数声明 contact.h功能函数逐一实现1.模拟实现通讯录总体架构...
    99+
    2022-11-12
  • C语言怎么模拟实现动态通讯录
    本篇内容主要讲解“C语言怎么模拟实现动态通讯录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么模拟实现动态通讯录”吧!目录模拟实现通讯录总体架构一览图文件执行任务分模块实现 测...
    99+
    2023-06-20
  • C语言模拟实现通讯录程序过程
    目录一、前言二、正文1.大体框架2.界面显示3. 创建通讯录4.初始化通讯录5.增加联系人6.显示联系人7. 删除联系人8.查找联系人9.修改联系人10. 排序联系人一、前言 在上一...
    99+
    2023-02-14
    C语言模拟实现通讯录 C语言模拟通讯录 C语言通讯录
  • C语言之通讯录的模拟实现代码
    目录纲要:一.通讯录的静态版本    1.添加联系人  2.展示联系人  3.删除联系人  4.查找联系人信息  5.修改联系人信息  6.排序联系人 --- 我们使用 qsort ...
    99+
    2022-11-12
  • C语言多功能动态通讯录实现示例
    目录前言一、预设置1,头文件的包含2,联系人的信息格式3,通讯录的信息格式4,通讯录相关宏定义5,通讯录功能枚举6,基本主函数二、功能函数实现1,初始化函数2,查找函数3,打印菜单4...
    99+
    2023-01-31
    C语言多功能动态通讯录 C语言 通讯录
  • C语言与C++动态通讯录超详细实现流程
    目录1、思路以及要实现的功能2、详细步骤2.1 打印菜单界面(建一个源文件test.c)2.2 主函数2.3 初始化函数与加载函数2.4 增加联系人函数AddContact2.5 删...
    99+
    2022-11-13
  • C语言实现动态版通讯录的代码分享
    目录前言初始化函数具体实现代码检查容量函数实现代码销毁通讯录函数实现代码动态版通讯录完整代码前言 哈喽各位友友们,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!我仅已...
    99+
    2023-01-12
    C语言动态版通讯录 C语言动态通讯录 C语言 通讯录
  • C语言动态与静态分别实现通讯录的方法
    这篇文章主要讲解了“C语言动态与静态分别实现通讯录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言动态与静态分别实现通讯录的方法”吧!一.静态通讯录的实现1.环境的分工逻辑由于过程...
    99+
    2023-06-29
  • C语言静态与动态通讯录的实现流程详解
    目录静态通讯录contact.hcontact.ctest.c动态通讯录contact.hcontact.cqsort.ctest.c本次通讯录的代码已经放到我的Gitee仓库中,感...
    99+
    2022-11-12
  • 用C语言实现通讯录
    相信大家都见识过通讯录,通讯录里面一般有的内容为姓名,联系方式,年龄等信息。通讯录的主要功能有:增加、删除、查找、排序、修改、展示等操作。 那么具体应该用C语言怎么实现这个呢?接下来...
    99+
    2022-11-13
  • C语言实现可增容动态通讯录详细过程
    目录创建可自动扩容的通讯录添加用户信息删除用户信息查找联系人修改用户信息以名字将用户排序销毁通讯录创建可自动扩容的通讯录 这里我们想实现通讯录自动扩容,不够了能扩大内存,变得稍微有点...
    99+
    2022-11-13
  • C语言动态与静态分别实现通讯录详细过程
    目录前言:一.静态通讯录的实现1.环境的分工逻辑2.待实现的功能3.contact.h4.contact.c5.test.c6.实现效果二.通讯录动态的实现1.contact.h2....
    99+
    2022-11-13
  • C语言静态与动态通讯录的实现方法是什么
    这篇文章主要讲解了“C语言静态与动态通讯录的实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言静态与动态通讯录的实现方法是什么”吧!静态通讯录在我们学习完C语言的结构体、指针...
    99+
    2023-06-25
  • 基于C语言怎么实现静态通讯录
    这篇文章主要介绍“基于C语言怎么实现静态通讯录”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于C语言怎么实现静态通讯录”文章能帮助大家解决问题。一、项目要求实现一个通讯录通讯录可以用来存储100个...
    99+
    2023-07-02
  • C语言静态动态两版本通讯录实战源码
    目录正片开始静态版本头文件( phonebook.h)接口(test.c)功能板块(phonebook.c)1. 初始化:2. 增添:3.查找4.删除5.修改6.排序7.全览静态版全...
    99+
    2022-11-13
  • C语言实现通讯录程序
    本文实例为大家分享了C语言实现通讯录程序的具体代码,供大家参考,具体内容如下 设计要求: 可以存放1000个人的信息,每个人的信息包括姓名、年龄、性别、电话、住址 通讯录功能包括: ...
    99+
    2022-11-12
  • C语言静态版通讯录的设计与实现
    目录1. 配置运行环境2. 通讯录的实现2.1 通讯录的功能目录2.2 增加信息功能代码的实现2.3 显示信息功能代码的实现2.4 删除信息功能代码的实现2.5 查询信息功能代码的实...
    99+
    2023-05-16
    C语言静态版通讯录 C语言通讯录实现
  • 详解C语言之实现通讯录
    目录基本思路和代码实现其他探讨总结基本思路和代码实现 为了代码清晰易读,我们创建一个Main.c源文件用来实现代码的基本逻辑。创建一个Contact.h源文件用于封装实现功能的函数,...
    99+
    2022-11-12
  • C语言实现通讯录小项目
    本文实例为大家分享了C语言实现通讯录小项目的具体代码,供大家参考,具体内容如下 编写程序实现通讯录的基本功能,可以做到增,删,查,改,打印通讯录,等等功能 test.c #inc...
    99+
    2022-11-12
  • C语言实现通讯录小功能
    本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 头文件contact.h #pragma once #define _CRT_SECURE_NO_...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作