C++实现通讯录管理系统 、C++0基础小白练习项目

前言

该项目是练习C++基础比较不错的项目,可练习数组、指针、循环体、结构体、函数等方面的基础知识

1、系统需求

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按照姓名进行删除指定联系人。
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有信息
  • 退出通讯录:退出当前使用的通讯录

2 菜单栏的实现

命名为Sysmain.cpp
 命名为Sysmain.cpp
这是最简单的实现方法,但丝毫没有封装,没有代码的可复用性

//
#include<iostream>
using namespace std;

int main()
{
	//往往大家都会这样先写出来,但是一个项目的实现往往考虑的就是函数的封装
	cout << " ------------------ 通讯录管理系统 -----------------" << endl;
	cout << " ------------------ 1. 添加联系人信息 -----------------" << endl;
	cout << " ------------------ 2. 删除联系人信息 -----------------" << endl;
	cout << " ------------------ 3. 修改联系人信息 -----------------" << endl;
	cout << " ------------------ 4. 查找联系人信息 -----------------" << endl;
	cout << " ------------------ 5. 清除联系人信息 -----------------" << endl;
	cout << " ------------------ 6. 退出系统       -----------------" << endl;

	system("pause");
	return 0;
}

改进:把功能函数进行封装

void ShowMenu()
{
	cout << " ------------------ 通讯录管理系统 -----------------" << endl;
	cout << " ------------------ 1. 添加联系人信息 -----------------" << endl;
	cout << " ------------------ 2. 删除联系人信息 -----------------" << endl;
	cout << " ------------------ 3. 修改联系人信息 -----------------" << endl;
	cout << " ------------------ 4. 查找联系人信息 -----------------" << endl;
	cout << " ------------------ 5. 清除联系人信息 -----------------" << endl;
	cout << " ------------------ 6. 退出系统       -----------------" << endl;
}

int main()
{
	ShowMenu();
	system("pause");
	return 0;
}

2.退出通讯录系统功能实现

思路:根据用户不同选择(输入),程序来执行不同的功能,可用switch分支架构搭建框架
案例:首先以最简单的退出通讯录系统为例
按理说可以将每一个功能都封装起来,但是退出系统较为简单直接写即可

#include<iostream>
using namespace std;

void ShowMenu()
{
	cout << " ------------------ 通讯录管理系统 -----------------" << endl;
	cout << " ------------------ 1. 添加联系人信息 -----------------" << endl;
	cout << " ------------------ 2. 删除联系人信息 -----------------" << endl;
	cout << " ------------------ 3. 修改联系人信息 -----------------" << endl;
	cout << " ------------------ 4. 查找联系人信息 -----------------" << endl;
	cout << " ------------------ 5. 清除联系人信息 -----------------" << endl;
	cout << " ------------------ 6. 退出系统       -----------------" << endl;
}

int main()
{
	while (true) // 加一个while循环,当某些功能执行完毕重新显示菜单
	{
		ShowMenu();//显示菜单
		int select = 0; //创建一个变量存储用户的输入
		cin >> select;
		switch (select)
		{
		case 1: //1. 添加联系人信息
			break;
		case 2: //2. 删除联系人信息
			break;
		case 3: //3. 修改联系人信息
			break;
		case 4: //4. 查找联系人信息
			break;
		case 5: //5. 清除联系人信息
			break;
		case 6: //6. 退出系统
			cout << "即将退出通讯录系统" << endl;
			system("pause");
			return 0;
			break;
		}
	}
	system("pause");
	return 0;
}

3 添加联系人功能实现

增删改查中首先要实现添加联系人的功能,其他功能才能具体实现。

3.1功能描述与实现步骤

功能描述:添加上限为1000人,每个联系人的信息为: 姓名 性别 联系电话 家庭住址
实现步骤
注意添加添加 #include < string >

  • 设计联系人结构体
  • 设计通讯录结构体
  • main函数中创建通讯录
  • 封装添加联系人功能
  • 测试添加联系人功能
    在这里插入图片描述

3.1.1结构体设计部分

#define MAX 1000
//设计联系人结构体
struct Person
{
	string m_Name;
	string m_Address;
	string m_Phone;
	int m_Age;
};
//设计通讯录结构体
struct AddressBook
{
	//通讯录中保存联系人的数组
	struct Person personArray[MAX];
	//通讯录中当前记录联系人的个数
	int m_Size;
};

3.1.2 添加功能函数实现

首先要在main中创建一个结构体变量

int main()
{
	//创建一个通讯录变量
	AddressBook book;
	//初始化通讯录当前人员个数
	book.m_Size = 0;
	while (true) // 加一个while循环,当某些功能执行完毕重新显示菜单
	{
		上面代码(略)
	}
	system("pause");
	return 0;
}

封装添加功能函数

#include<iostream>
#include<string>
using namespace std;

#define MAX 1000
//设计联系人结构体
struct Person
{};

//设计通讯录结构体
struct AddressBook
{};

void ShowMenu()
{}
//添加联系人功能 传入的是一个地址用指针接受

void addPerson(AddressBook * book)
{
	//判断通讯录是否已满
	if (book->m_Size == MAX)
	{
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}
	else
	{
		//添加具体联系人
		string name;
		cout << "请输入联系人姓名:" << endl;
		cin >> name;
		book->personArray[book->m_Size].m_Name = name;

		string address;
		cout << "请输入联系人地址:" << endl;
		cin >>address;
		book->personArray[book->m_Size].m_Address = address;

		string phone;
		cout << "请输入联系人电话:" << endl;
		cin >> phone;
		book->personArray[book->m_Size].m_Phone = phone;

		int age;
		cout << "请输入联系人年龄:" << endl;
		cin >> age;
		book->personArray[book->m_Size].m_Age = age;
		//更新通讯录人数
		book->m_Size++;
		cout << "添加联系人成功!" << endl;
		system("pause");
		system("cls");
	}
}
int main()

4.删除联系人功能实现

功能描述:根据姓名删除联系人(首先要判断是否存在)
步骤实现

  • 封装检测联系人是否存在
  • 封装删除联系人功能
//检测人员是否存在,如果存在返回联系人所在数组中的具体位置,不存在返回-1
int isExist(AddressBook* book, string name)
{
	for (int i = 0; i < book->m_Size; i++)
	{
		if ( book->personArray[i].m_Name ==name)
		{
			return i;
		}	
	}
	return -1;
}

封装删除联系人功能

void deletePerson(AddressBook *book)
{
	string name;
	cout << "请输入所要删除联系人姓名" << endl;
	cin >> name;
	int p =isExist(book,name);
	if (p != - 1)
	{
		for (int i = p; i < book->m_Size; i++)
		{
			book->personArray[i] = book->personArray[i + 1];
		}
		book->m_Size--;
		cout << "删除成功" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		cout << "未找到该联系人" << endl;
		system("pause");
		system("cls");
	}
}

5.查找联系人功能实现

功能描述:1.可根据姓名特定查找联系人也可 2.显示通讯录中所有联系人
在精确查找中我们复用了之前的isExist()函数

void ShowPerson(AddressBook * book) 
{
	
	if (book->m_Size == 0)
	{
		cout << "联系人还为空" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		int i;
		cout << "输入1精确查找 输入2显示全部联系人" << endl;
		cin >> i;
		if (i == 1)
		{

			string name;
			cout << "请输入您要查找的联系人:" << endl;
			cin >> name;
			isExist(book, name);
			int p = isExist(book, name);
			cout << "联系姓名:" << book->personArray[p].m_Name << "\t";
			cout << "联系人地址" << book->personArray[p].m_Address << "\t";
			cout << "联系人年龄" << book->personArray[p].m_Age << "\t";
			cout << "联系人电话" << book->personArray[p].m_Phone << endl;
		}
		else
		{
			for (int i = 0; i < book->m_Size; i++)
			{
				cout << "联系姓名:" << book->personArray[i].m_Name << "\t";
				cout << "联系人地址" << book->personArray[i].m_Address << "\t";
				cout << "联系人年龄" << book->personArray[i].m_Age << "\t";
				cout << "联系人电话" << book->personArray[i].m_Phone << endl;
			}
			system("pause");
			system("cls");
		}
	}
}

6.修改联系人功能

修改功能其实就是把添加 查找功能做出一个部分代码的结合

void modifyPerson(AddressBook* book)
{
	string name;
	cout << "请输入所要修改联系人姓名" << endl;
	cin >> name;
	int p = isExist(book, name);
	if (p != - 1)
	{
		string name;
		cout << "请输入联系人姓名:" << endl;
		cin >> name;
		book->personArray[p].m_Name = name;

		string address;
		cout << "请输入联系人地址:" << endl;
		cin >> address;
		book->personArray[p].m_Address = address;

		string phone;
		cout << "请输入联系人电话:" << endl;
		cin >> phone;
		book->personArray[p].m_Phone = phone;

		int age;
		cout << "请输入联系人年龄:" << endl;
		cin >> age;
		book->personArray[p].m_Age = age;
		system("pause");
		system("cls");
	}
	else
	{
		cout << "未找到该联系人" << endl;
		system("pause");
		system("cls");
	}
}

7.清空功能

因为本案例并没有涉及文件的读写操作,所以清空联系人实际上相当于修改地址

void cleanPerson(AddressBook* book)
{
	book->m_Size = 0;
	cout << "清空联系人成功" << endl;
	system("pause");
	system("cls");
}

全部代码

#include<iostream>
#include<string>
using namespace std;

#define MAX 1000
//设计联系人结构体
struct Person
{
	string m_Name;
	string m_Address;
	string m_Phone;
	int m_Age;
};

//设计通讯录结构体
struct AddressBook
{
	//通讯录中保存联系人的数组
	struct Person personArray[MAX];
	//通讯录中当前记录联系人的个数
	int m_Size;
};

void ShowMenu()
{
	cout << endl;
	cout << " ------------------ 通讯录管理系统 -----------------" << endl;
	cout << " ------------------ 1. 添加联系人信息 -----------------" << endl;
	cout << " ------------------ 2. 删除联系人信息 -----------------" << endl;
	cout << " ------------------ 3. 修改联系人信息 -----------------" << endl;
	cout << " ------------------ 4. 查找联系人信息 -----------------" << endl;
	cout << " ------------------ 5. 清除联系人信息 -----------------" << endl;
	cout << " ------------------ 6. 退出系统       -----------------" << endl;
}

//添加联系人功能 传入的是一个地址用指针接受
void addPerson(AddressBook * book)
{
	//判断通讯录是否已满
	if (book->m_Size == MAX)
	{
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}
	else
	{
		//添加具体联系人
		string name;
		cout << "请输入联系人姓名:" << endl;
		cin >> name;
		book->personArray[book->m_Size].m_Name = name;

		string address;
		cout << "请输入联系人地址:" << endl;
		cin >>address;
		book->personArray[book->m_Size].m_Address = address;

		string phone;
		cout << "请输入联系人电话:" << endl;
		cin >> phone;
		book->personArray[book->m_Size].m_Phone = phone;

		int age;
		cout << "请输入联系人年龄:" << endl;
		cin >> age;
		book->personArray[book->m_Size].m_Age = age;
		//更新通讯录人数
		book->m_Size++;
		cout << "添加联系人成功!" << endl;
		system("pause");
		system("cls");
	}
}

//检测人员是否存在,如果存在返回联系人所在数组中的具体位置,不存在返回-1
int isExist(AddressBook* book, string name)
{
	for (int i = 0; i < book->m_Size; i++)
	{
		if ( book->personArray[i].m_Name ==name)
		{
			return i;
		}	
	}
	return -1;
}

//显示联系人功能函数
void ShowPerson(AddressBook * book) 
{
	
	if (book->m_Size == 0)
	{
		cout << "联系人还为空" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		int i;
		cout << "输入1精确查找 输入2显示全部联系人" << endl;
		cin >> i;
		if (i == 1)
		{
			string name;
			cout << "请输入您要查找的联系人:" << endl;
			cin >> name;
			int p =isExist(book, name);
			if (p != - 1)
			{
				cout << "联系姓名:" << book->personArray[p].m_Name << "\t";
				cout << "联系人地址" << book->personArray[p].m_Address << "\t";
				cout << "联系人年龄" << book->personArray[p].m_Age << "\t";
				cout << "联系人电话" << book->personArray[p].m_Phone << endl;
				system("pause");
				system("cls");
			}
			else
			{
				cout << "未找到该联系人" << endl;
				system("pause");
				system("cls");
			}
			
		}
		else
		{
			for (int i = 0; i < book->m_Size; i++)
			{
				cout << "联系姓名:" << book->personArray[i].m_Name << "\t";
				cout << "联系人地址" << book->personArray[i].m_Address << "\t";
				cout << "联系人年龄" << book->personArray[i].m_Age << "\t";
				cout << "联系人电话" << book->personArray[i].m_Phone << endl;
			}
			system("pause");
			system("cls");
		}
	}	
}

//删除联系人函数
void deletePerson(AddressBook *book)
{
	string name;
	cout << "请输入所要删除联系人姓名" << endl;
	cin >> name;
	int p =isExist(book,name);
	if (p != - 1)
	{
		for (int i = p; i < book->m_Size; i++)
		{
			book->personArray[i] = book->personArray[i + 1];
		}
		book->m_Size--;
		cout << "删除成功" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		cout << "未找到该联系人" << endl;
		system("pause");
		system("cls");
	}
	return;
}

//修改联系人功能
void modifyPerson(AddressBook* book)
{
	string name;
	cout << "请输入所要修改联系人姓名" << endl;
	cin >> name;
	int p = isExist(book, name);
	if (p != - 1)
	{
		string name;
		cout << "请输入联系人姓名:" << endl;
		cin >> name;
		book->personArray[p].m_Name = name;

		string address;
		cout << "请输入联系人地址:" << endl;
		cin >> address;
		book->personArray[p].m_Address = address;

		string phone;
		cout << "请输入联系人电话:" << endl;
		cin >> phone;
		book->personArray[p].m_Phone = phone;

		int age;
		cout << "请输入联系人年龄:" << endl;
		cin >> age;
		book->personArray[p].m_Age = age;
		system("pause");
		system("cls");
	}
	else
	{
		cout << "未找到该联系人" << endl;
		system("pause");
		system("cls");
	}
}
//清空联系人功能
void cleanPerson(AddressBook* book)
{
	book->m_Size = 0;
	cout << "清空联系人成功" << endl;
	system("pause");
	system("cls");
}

int main()
{
	//创建一个通讯录变量
	AddressBook book;
	//初始化通讯录当前人员个数
	book.m_Size = 0;
	while (true) // 加一个while循环,当某些功能执行完毕重新显示菜单
	{
		ShowMenu();//显示菜单
		int select = 0; //创建一个变量存储用户的输入
		cin >> select;
		switch (select)
		{
		case 1: //1. 添加联系人信息
			addPerson(&book);
			break;
		case 2: //2. 删除联系人信息
			deletePerson(& book);
			break;
		case 3: //3. 修改联系人信息
			modifyPerson(&book);
			break;
		case 4: //4. 查找联系人信息
			ShowPerson(&book);
			break;
		case 5: //5. 清除联系人信息
			cleanPerson(&book);
			break;
		case 6: //6. 退出系统
			cout << "即将退出通讯录系统" << endl;
			system("pause");
			return 0;
			break;
		}
	}
	system("pause");
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值