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语言实现简易通讯录


今天来和大家分享一个简易通讯录(c语言实现)

首先要介绍一下通讯录的基本功能

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

功能:

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息

1.文件的创建

首先是文件的创建,我们这里创建了三个文件,一个头文件,一个测试源文件,一个实现功能的源文件,这样写代码的目的是可以更清晰的了解代码的结构层次以及功能。我们实现每一个函数的功能时要在头文件中声明该函数

菜单循环功能实现

了解了功能后,我们要进行分析具体如何实现,首先需要写出这个通讯录菜单的循环选择功能,这里很容易想到,我们就直接上代码

`void menu()
{
	printf("**************************\n");
	printf("***********1.add     *****\n");
	printf("***********2.delete  *****\n");
	printf("***********3.search  *****\n");
	printf("***********4.modify  *****\n"); 
	printf("***********5.show    *****\n");
	printf("***********0.exit    *****\n");
}`
    enum Option
{
	exit,
	add,
	delete,
	search,
	modify,
	show,
};
int main()
{
    int input=0;
do 
{
	menu();
	printf("请选择:\n");
	scanf("%d", &input);
	switch (input)
	{

	case exit:
		printf("退出通讯录\n");
		break;
	case add:
		//添加
		ADDContact(&con);
		break;
	case delete:
		//删除
		Delete(&con);
		break;
	case search:
		//查找
		Search(&con);
		break;
	case modify:
		//修改
		Modify(&con);
		break;
	case show:
		//显示
		Show(&con);
		break;
	default:
		printf("选择错误请重新选择:\n");
		break;

	}
} while (input);
return 0;
}

写完这个功能后,我们可以进行测试。

2.创建通讯录

之后我们要完成联系人的增删查找的功能,首先是联系人的存储问题,由于一个人有很多信息,是个复杂类型,我们用结构体来解决,那么存储这么多的人的信息,用一个结构体数组即可。

struct People
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char number[NUMBER_MAX];
	char address[ADDRESS_MAX];
};

struct Contact
{
	//创建存放1000人数据的结构体数组
	struct People data[MAX];
	int sz;   //用来存放有效信息的数量
};

这个通讯录结构体Contact中包含了一个结构体数组和记录此时通讯录中的人数。这样我们对这个通讯录结构体进行操作即可。

初始化通讯录

创建好这个通讯录我们就要对它进行初始化,写一个初始化函数void InitContact(struct Contact* pc);

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

这里我们使用了c的库函数直接初始化通讯录信息为0,我们要操作这个通讯录,所以这里我们直接将创建好的通讯录的地址传到函数中使用即可。

添加联系人实现

添加联系人,同样是直接对通讯录进行操作,一样要传通讯录的地址。

void ADDContact(struct Contact* pc)
{


	if (pc->sz == MAX)                       //判断联系人是否已满
    {

		printf("通讯录已满\n");
	}
	else
	{
		printf("请输入名字:\n");
		scanf("%s", pc->data[pc->sz].name);
		printf("请输入年龄:\n");
		scanf("%d", &pc->data[pc->sz].age);
		printf("请输入性别:\n");
		scanf("%s", pc->data[pc->sz].sex);
		printf("请输入电话:\n");
		scanf("%s", pc->data[pc->sz].number);
		printf("请输入地址:\n");
		scanf("%s", pc->data[pc->sz].address);
		printf("添加成功!\n");
		pc->sz++;                            //对sz进行记录,记录此时通讯录中的人数
    }

}

显示联系人实现

这里我们先来实现这个功能是为了可以验证我们其他功能有没有实现。

//显示联系人
void Show(struct Contact* pc)
{
	printf("%15s\t%5s\t%8s\t%15s\t%30s\n", "name","age","sex","number","address"); //各个信息的名称
	for (int i = 0; i < pc->sz; i++)
	{
		printf("%15s\t%5d\t%8s\t%15s\t%30s\n",              //信息的打印
               pc->data[i].name,
               pc->data[i].age, pc->data[i].sex,
               pc->data[i].number,
               pc->data[i].address);            
	}
}

查找联系人

int FIND(struct Contact* pc, char name[])
{
	for (int i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)   //遍历每个人,如果找到返回这个人在数组中的位置,找不到则返回-1
		{
			return i;
		}
	}
	return -1;
}

void Search(struct Contact* pc)
{
	printf("请输入要查找联系人的姓名:\n");
	char name[NAME_MAX] = { 0 };
	scanf("%s", &name);
	int flag = FIND(pc, name);
	if (flag != -1)
	{
		printf("%15s\t%5s\t%8s\t%15s\t%30s\n", "name", "age", "sex", "number", "address");
		printf("%15s\t%5d\t%8s\t%15s\t%30s\n",
               pc->data[flag].name,
               pc->data[flag].age, pc->data[flag].sex,
               pc->data[flag].number,
               pc->data[flag].address);     //如果找到直接打印这个人的信息
	}
	else
	{
		printf("查无此人\n");
	}

}

删除联系人实现

删除联系人我们只需要先找到这个人,在将后面的人全都向前移动一个位置将这个要删除人覆盖即可。

//删除
void Delete(struct Contact* pc)
{
	if (pc->sz == 0)
	{
		printf("通讯录已空,无法删除联系人\n");
		return;
	}
		printf("请输入要删除联系人的姓名:\n");
		char name[NAME_MAX] = { 0 };
		scanf("%s", &name);
		//查找
		int flag = FIND(pc, name);
		if (flag == -1)
		{
			printf("查无此人\n");
		}
		else
		{
			//删除
			for (int j = flag; j < pc->sz - 1; j++)
			{
				pc->data[j] = pc->data[j + 1];
			}
			pc->sz--;             //注意一定要更新此时联系人的个数
			printf("删除成功!\n");
		}
	
}

修改功能实现

//修改
void Modify(struct Contact* pc)
{

	printf("请输入要修改联系人的名字:\n");
	char name[NAME_MAX] = { 0 };
	scanf("%s", &name);
	//查找
	int flag = FIND(pc, name);
	if (flag == -1)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("请输入姓名:\n");
		scanf("%s", pc->data[flag].name);
		printf("请输入年龄:\n");
		scanf("%d", &pc->data[flag].age);
		printf("请输入性别:\n");
		scanf("%s", pc->data[flag].sex);
		printf("请输入电话:\n");
		scanf("%s", pc->data[flag].number);
		printf("请输入地址:\n");
		scanf("%s", pc->data[flag].address);
		printf("修改成功!\n");
	}

}

结果展示

头文件

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<string.h>
#define NAME_MAX 20
#define SEX_MAX 5
#define NUMBER_MAX 12
#define ADDRESS_MAX 30
#define MAX 1000

struct People
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char number[NUMBER_MAX];
	char address[ADDRESS_MAX];
};

struct Contact
{
	//创建存放1000人数据的结构体数组
	struct People data[MAX];
	int sz;   //用来存放有效信息的数量
};

//初始化函数声明
void InitContact(struct Contact* pc);
//添加联系人函数声明
void ADDContact(struct Contact* pc);
//显示通讯录函数
void Show(struct Contact* pc);
//查找某人
void Search(struct Contact* pc);
//删除
void Delete(struct Contact* pc);
//修改
void Modify(struct Contact* pc);

功能实现源文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"contach.h"

//初始化函数
void InitContact(struct Contact* pc)
{
	pc->sz = 0;
	memset(pc->data,0,sizeof(pc->data));
}
//添加联系人函数声明
void ADDContact(struct Contact* pc)
{


	if (pc->sz == MAX)
	{

		printf("通讯录已满\n");
	}
	else
	{
		printf("请输入名字:\n");
		scanf("%s", pc->data[pc->sz].name);
		printf("请输入年龄:\n");
		scanf("%d", &pc->data[pc->sz].age);
		printf("请输入性别:\n");
		scanf("%s", pc->data[pc->sz].sex);
		printf("请输入电话:\n");
		scanf("%s", pc->data[pc->sz].number);
		printf("请输入地址:\n");
		scanf("%s", pc->data[pc->sz].address);
		printf("添加成功!\n");
		pc->sz++;
	}

}
//显示联系人
void Show(struct Contact* pc)
{
	printf("%15s\t%5s\t%8s\t%15s\t%30s\n", "name","age","sex","number","address");
	for (int i = 0; i < pc->sz; i++)
	{
		printf("%15s\t%5d\t%8s\t%15s\t%30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].number, pc->data[i].address);
	}
}
//查找
int FIND(struct Contact* pc, char name[])
{
	for (int i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

void Search(struct Contact* pc)
{
	printf("请输入要查找联系人的姓名:\n");
	char name[NAME_MAX] = { 0 };
	scanf("%s", &name);
	int flag = FIND(pc, name);
	if (flag != -1)
	{
		printf("%15s\t%5s\t%8s\t%15s\t%30s\n", "name", "age", "sex", "number", "address");
		printf("%15s\t%5d\t%8s\t%15s\t%30s\n", pc->data[flag].name, pc->data[flag].age, pc->data[flag].sex, pc->data[flag].number, pc->data[flag].address);
	}
	else
	{
		printf("查无此人\n");
	}

}
//删除
void Delete(struct Contact* pc)
{
	if (pc->sz == 0)
	{
		printf("通讯录已空,无法删除联系人\n");
		return;
	}
		printf("请输入要删除联系人的姓名:\n");
		char name[NAME_MAX] = { 0 };
		scanf("%s", &name);
		//查找
		int flag = FIND(pc, name);
		if (flag == -1)
		{
			printf("查无此人\n");
		}
		else
		{
			//删除
			for (int j = flag; j < pc->sz - 1; j++)
			{
				pc->data[j] = pc->data[j + 1];
			}
			pc->sz--;
			printf("删除成功!\n");
		}
	
}

//修改
void Modify(struct Contact* pc)
{

	printf("请输入要修改联系人的名字:\n");
	char name[NAME_MAX] = { 0 };
	scanf("%s", &name);
	//查找
	int flag = FIND(pc, name);
	if (flag == -1)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("请输入姓名:\n");
		scanf("%s", pc->data[flag].name);
		printf("请输入年龄:\n");
		scanf("%d", &pc->data[flag].age);
		printf("请输入性别:\n");
		scanf("%s", pc->data[flag].sex);
		printf("请输入电话:\n");
		scanf("%s", pc->data[flag].number);
		printf("请输入地址:\n");
		scanf("%s", pc->data[flag].address);
		printf("修改成功!\n");
	}

}

测试源文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"contach.h"
void menu()
{
	printf("**************************\n");
	printf("***********1.add     *****\n");
	printf("***********2.delete  *****\n");
	printf("***********3.search  *****\n");
	printf("***********4.modify  *****\n"); 
	printf("***********5.show    *****\n");
	printf("***********0.exit    *****\n");
}

enum Option
{
	exit,
	add,
	delete,
	search,
	modify,
	show,
};

int main()
{
	int input = 0;
	//创建一个通讯录
	struct Contact con;
	//初始化通讯录
	 InitContact(&con);
    
	do 
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);
		switch (input)
		{

		case exit:
			printf("退出通讯录\n");
			break;
		case add:
			//添加
			ADDContact(&con);
			break;
		case delete:
			//删除
			Delete(&con);
			break;
		case search:
			//查找
			Search(&con);
			break;
		case modify:
			//修改
			Modify(&con);
			break;
		case show:
			//显示
			Show(&con);
			break;
		default:
			printf("选择错误请重新选择:\n");
			break;

		}
	} while (input);
	return 0;
}

在这里插入图片描述

初学,如果哪里写的不对希望大家帮忙指正,我也会更努力向其他人学习,会陆续更新文章。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-28 00:06:47  更:2021-09-28 00:07:14 
 
开发: 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年12日历 -2024/12/29 4:01:33-

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