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.添加联系人信息;

2.删除指定联系人信息;

3.查找指定联系人信息;

4.修改指定联系人信息;

5.显示所有联系人信息;

6.清空所有联系人;

7.以名字排序所有联系人。

根据上述需求,我们依次定义出所需要的结构体、自定义函数等等。

个人信息结构体定义:

#define MAX_NAME_SIZE 20
#define MAX_SEX_SIZE  3
#define MAX_TEL_SIZE  12
#define MAX_ADDR_SIZE 256

typedef struct PersonInfo
{
	char name[MAX_NAME_SIZE];
	char sex[MAX_SEX_SIZE];
	int age;
	char tel[MAX_TEL_SIZE];
	char address[MAX_ADDR_SIZE];
}PersonInfo;

在定义了个人信息结构体后,还需要定义出通讯录结构体,按照满足题目要求 “当通讯录空间已满时,可以自动扩充通讯录的存储空间”,通讯录结构体定义如下:

typedef struct Contact
{
	PersonInfo* pCont;
	size_t capacity;//通讯录的最大容量
	size_t size;
};

根据题目要求,初步定义出以下函数接口:

void InitContact(Contact* pcnt);//初始化通讯录
void AddContact(Contact* pcnt);//添加联系人信息
void DelContact(Contact* pcnt);//删除指定联系人信息
void FindContact(Contact* pcnt);//查找指定联系人信息
void ModifyContact(Contact* pcnt);//修改指定联系人信息
void ShowContact(Contact* pcnt);//显示所有联系人信息
void ClearContact(Contact* pcnt);//清除所有联系人
void SortContact(Contact* pcnt);//以名字排序所有联系人

根据题目要求,利用顺序表的相关知识实现通讯录管理系统,代码如下:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include<string.h>
#include<stdbool.h>

#define MAX_NAME_SIZE 20
#define MAX_SEX_SIZE  3
#define MAX_TEL_SIZE  12
#define MAX_ADDR_SIZE 256

#define DEFAULT_CONTACT_SIZE 128//通讯录默认空间大小
#define CONTACT_INC_SIZE 20//通讯录空间每次扩容大小

enum { QUIT, ADD, DEL, FIND, MODIFY, SHOW, CLEAR, SORT };

typedef struct PersonInfo
{
	char name[MAX_NAME_SIZE];
	char sex[MAX_SEX_SIZE];
	int age;
	char tel[MAX_TEL_SIZE];
	char address[MAX_ADDR_SIZE];
}PersonInfo;

typedef struct Contact
{
	PersonInfo* pCont;
	size_t capacity;
	size_t size;
}Contact;

//函数声明
void InitContact(Contact* pcnt);//初始化通讯录
void AddContact(Contact* pcnt);//添加联系人信息
void DelContact(Contact* pcnt);//删除指定联系人信息
void FindContact(Contact* pcnt);//查找指定联系人信息
void ModifyContact(Contact* pcnt);//修改指定联系人信息
void ShowContact(Contact* pcnt);//显示所有联系人信息
void ClearContact(Contact* pcnt);//清除所有联系人
void SortContact(Contact* pcnt);//以名字排序所有联系人
void DestroyContact(Contact* pcnt);//程序结束时摧毁通讯录,防止内存泄漏
int FindByName(Contact* pcnt, char Name[]);
bool CheckCapacity(Contact* pcnt);
bool IsEmpty(Contact* pcnt);

int main(int argc, char* argv[])
{
	//初始化通讯录
	Contact cont;
	InitContact(&cont);

	int select = 1;
	while (select)
	{
		printf("**************通 讯 录*****************\n");
		printf("* [1] Add            [2] Del          *\n");
		printf("* [3] Find           [4] Modify       *\n");
		printf("* [5] Show           [6] Clear        *\n");
		printf("* [7] Sort           [0] Quit System  *\n");
		printf("***************************************\n");
		printf("请选择:>");
		scanf("%d", &select);
		if (select == QUIT)
			break;
		switch (select)
		{
		case ADD:
			AddContact(&cont);
			break;
		case DEL:
			DelContact(&cont);
			break;
		case FIND:
			FindContact(&cont);
			break;
		case MODIFY:
			ModifyContact(&cont);
			break;
		case SHOW:
			ShowContact(&cont);
			break;
		case CLEAR:
			ClearContact(&cont);
			break;
		case SORT:
			SortContact(&cont);
			break;
		}
	}
	printf("GoodBye,退出通讯录系统...\n");
	DestroyContact(&cont);
	return 0;
}
void InitContact(Contact* pcnt)
{
	pcnt->pCont = (PersonInfo*)malloc(sizeof(PersonInfo) * DEFAULT_CONTACT_SIZE);
	memset(pcnt->pCont, 0, sizeof(PersonInfo) * DEFAULT_CONTACT_SIZE);//将开辟的空间全部初始化为0
	pcnt->capacity = DEFAULT_CONTACT_SIZE;
	pcnt->size = 0;
}
bool CheckCapacity(Contact* pcnt)
{
	if (pcnt->size >= pcnt->capacity)
	{
		//扩容
		PersonInfo* new_cont = (PersonInfo*)realloc(pcnt->pCont,
			sizeof(PersonInfo) * (pcnt->capacity + CONTACT_INC_SIZE));
		if (pcnt->pCont == NULL)
			return false;

		pcnt->pCont = new_cont;
		pcnt->capacity += CONTACT_INC_SIZE;
		printf("扩容成功.\n");
	}
	return true;
}
bool IsEmpty(Contact* pcnt)
{
	return pcnt->size == 0;
}
void AddContact(Contact* pcnt)
{
	if (!CheckCapacity(pcnt))
	{
		printf("通讯录已满,不能增加联系人信息...\n");
		return;
	}
	printf("姓名:>");
	scanf("%s", pcnt->pCont[pcnt->size].name);
	printf("性别:>");
	scanf("%s", pcnt->pCont[pcnt->size].sex);
	printf("年龄:>");
	scanf("%d", &pcnt->pCont[pcnt->size].age);
	printf("电话:>");
	scanf("%s", pcnt->pCont[pcnt->size].tel);
	printf("住址:>");
	scanf("%s", pcnt->pCont[pcnt->size].address);
	pcnt->size++;
	printf("增添联系人信息成功...\n");
}
void DelContact(Contact* pcnt)
{
	printf("请输入要删除的联系人姓名:>");
	char Name[MAX_NAME_SIZE];
	scanf("%s", Name);
	int index = FindByName(pcnt, Name);
	if (index = -1)
	{
		printf("要删除的联系人不存在...\n");
		return;
	}
	for (int i = index; i < pcnt->size; i++)
	{
		pcnt->pCont[i] = pcnt->pCont[i + 1];
	}
	pcnt->size--;
	printf("删除信息成功...\n");
}
void FindContact(Contact* pcnt)
{
	if (IsEmpty(pcnt))
	{
		printf("通讯录为空,不能查找...\n");
		return;
	}
	char Name[MAX_NAME_SIZE];
	scanf("%s", Name);
	int index = FindByName(pcnt, Name);
	if (index = -1)
	{
		printf("要查找的联系人不存在...\n");
		return;
	}
	printf("%-8s%-6s%-6d%-13s%s\n", pcnt->pCont[index].name,
		pcnt->pCont[index].sex,
		pcnt->pCont[index].age,
		pcnt->pCont[index].tel,
		pcnt->pCont[index].address);
}
void ModifyContact(Contact* pcnt)
{
	if (IsEmpty(pcnt))
	{
		printf("通讯录为空,不能修改...\n");
		return;
	}
	char Name[MAX_NAME_SIZE];
	scanf("%s", Name);
	int index = FindByName(pcnt, Name);
	if (index = -1)
	{
		printf("要修改的联系人不存在...\n");
		return;
	}
	printf("%s", "你想修改什么信息(1-姓名 2-性别 3-年龄 4-电话 5-住址)");
	int select;
	scanf("%d", &select);
	switch (select)
	{
	case 1:
		printf("请输入要修改的姓名:>");
		scanf("%s", pcnt->pCont[index].name);
		break;
	case 2:
		printf("请输入要修改的性别:>");
		scanf("%s", pcnt->pCont[index].sex);
		break;
	case 3:
		printf("请输入要修改的年龄:>");
		scanf("%d", &pcnt->pCont[index].age);
		break;
	case 4:
		printf("请输入要修改的电话:>");
		scanf("%s", pcnt->pCont[index].tel);
		break;
	case 5:
		printf("请输入要修改的住址:>");
		scanf("%s", pcnt->pCont[index].address);
		break;
	}
	printf("修改信息成功...\n");
}
void ShowContact(Contact* pcnt)
{
	printf("%-8s%-6s%-6s%-13s%s\n", "姓名", "性别", "年龄", "电话", "地址");
	for (int i = 0; i < pcnt->size; ++i)
	{
		printf("%-8s%-6s%-6d%-13s%s\n", pcnt->pCont[i].name,
			pcnt->pCont[i].sex,
			pcnt->pCont[i].age,
			pcnt->pCont[i].tel,
			pcnt->pCont[i].address);
	}
}
void ClearContact(Contact* pcnt)
{
	printf("是否确定清除通讯录<Y/N>:>");
	fflush(stdin); //清除上一次的\n
	char ch = getchar();
	if (ch == 'N' || ch == 'n')
	{
		printf("清除通讯录取消....\n");
		return;
	}
	else if (ch == 'Y' || ch == 'y')
	{
		pcnt->size = 0;
		printf("清除通讯录成功....\n");
		return;
	}
	printf("输入错误.....\n");
}
void SortContact(Contact* pcnt)
{
	for (int i = 0; i < pcnt->size - 1; ++i)
	{
		for (int j = 0; j < pcnt->size - i - 1; ++j)
		{
			if (strcmp(pcnt->pCont[j].name, pcnt->pCont[j + 1].name) > 0)
			{
				PersonInfo tmp = pcnt->pCont[j];
				pcnt->pCont[j] = pcnt->pCont[j + 1];
				pcnt->pCont[j + 1] = tmp;
			}
		}
	}
	printf("排序成功.\n");
}
void DestroyContact(Contact* pcnt)
{
	free(pcnt->pCont);
	pcnt->pCont = NULL;
	pcnt->capacity = pcnt->size = 0;
}
int FindByName(Contact* pcnt, char Name[]) 
{
	for (int i = 0; i < pcnt->size; i++)
	{
		if (strcmp(pcnt->pCont[i].name, Name) == 0)
			return i;
	}
	return -1;
}

?

部分调试界面:?

?

?

?

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

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