C++项目:创建通讯录管理系统

147 阅读6分钟

@[toc]

项目:C++创建通讯录管理系统

1.创建操作界面

创建showMenu函数显示如下界面:

1.添加联系人 2.显示联系人 3.删除联系人
4.查找联系人 5.修改联系人 6.清空联系人 0.退出通讯录

示例 封装showMenu函数显示界面

#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;
	cout <<" *****  0.退出通讯录 *****" << endl;
	cout << "************************" << endl;
}

int main()
{
	showMenu();


	system("pause");

	return 0;
}

2.退出功能

只有输入0时才退出选择界面 示例 输入0退出界面

#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;
	cout <<" *****  0.退出通讯录 *****" << endl;
	cout << "************************" << endl;
}

int main()
{
	int select = 0;

	while (true)//返回0时才退出选择界面
	{ 
		showMenu();
		cout << "请选择: " << endl;
		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.清空联系人
			break;
		case 0://0.退出通讯录
			cout << "欢迎下次使用!" << endl;
			system("pause");
			return 0;
			break;
		}
	}
	
	system("pause");

	return 0;
}

3.添加联系人

程序要求: 联系人上限1000人,信息包含姓名,性别,年龄,联系电话,家庭住址

编程思路: 1.创建person联系人结构体用于存储联系人信息 2.创建addressPerson通讯录结构体用于存储person及联系人数量 3.创建addPerson函数用于添加联系人

3.1先判断联系人数量是否小于1000,小于继续操作否则提示并退出 3.2输入联系人信息并编号

3.1封装联系人结构体

示例 person结构体

struct person
{
	string name;
	string age;
	int sex;//性别:1.男2.女
	int number;
	string address;


};

3.2封装通讯录结构体

示例 addressBooks结构体

#define max 1000;//max最大量为1000

struct addressBooks
{
	//联系人数组
	struct person personarr[max];

	//当前联系人个数
	int size;
	
};

3.3封装添加联系人函数

示例 封装addPerson函数添加联系人

void addPerson(struct addressBooks *namelist )
{
	//判断:如果通讯录达到1000条则退出界面,否则可以继续操作
	if (namelist->size == max)
	{
		cout << "通讯录已满!" << endl;
		return;
	}
	else
	{
		//输入联系人姓名
			string name;
			cout << "请输入联系人姓名:" << endl;
			cin >> name;
			namelist->personArr[namelist->size].name = name;//添加联系人编号

		//输入联系人性别
			cout << "请输入联系人性别:" << endl;
			cout << "1 ------ 男:" << endl;
			cout << "2 ------ 女:" << endl;

			int sex = 0;
		
			while (true)//while循环如果输入的性别不正确则重新输入
			{
				cin >> sex;
				if (sex == 1 || sex == 2)
				{
					namelist->personArr[namelist->size].sex = sex;
					break;
				}
				cout << "请输入正确的性别!" << endl;
			}

		//输入年龄
			int age = 0;
			cout << "请输入联系人年龄:" << endl;
			cin >> age;
			namelist->personArr[namelist->size].age = age;

		//输入电话
			int number = 0;
			cout << "请输入联系人电话:" << endl;
			cin >> number;
			namelist->personArr[namelist->size].number = number;

		//输入地址
			string address;
			cout << "请输入联系人地址:" << endl;
			cin >> address;
			namelist->personArr[namelist->size].address = address;
						
			namelist->size++;//增加联系人数量
			cout << "添加成功!" << endl;
			system("pause");//按任意键继续
			system("cls");//清屏
	}
	
}

case1 中调用addPerson函数

		case 1://1.添加联系人
			addPerson(&namelist);
			break;

4.显示联系人

编程思路: 1.创建showPerson函数用于显示联系人 >>1.1.showPerson先判断联系人数量,数量为0提示没有联系人,不为0则显示联系人内容

示例 封装showPerson函数显示联系人

void showPerson(struct addressBooks* namelist)
{
	if (namelist->size == 0)//判断联系人数量是否为0
	{
		cout << "没有联系人!" << endl;
	}
	else
	{
		for (int i = 0; i < namelist->size; i++)
		{
			cout << "姓名:" << namelist->personArr[i].name << "\t";
			cout << "性别: " << (namelist->personArr[i].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
			cout << "年龄:" << namelist->personArr[i].age << "\t";
			cout << "电话:" << namelist->personArr[i].number << "\t";
			cout << "住址:" << namelist->personArr[i].address << endl;

			system("pause");
			system("cls");
		}
	}
}

示例 调用showPerson函数显示联系人

case 2://2.显示联系人
			showPerson(&namelist);
			break;

5.删除联系人

设计思路: 1.封装函数isExist按联系人姓名查找联系人返回联系人编号,没有返回-1 2.封装函数delPerson在其中调用isExist函数,返回联系人值删除该联系人,若不存在输出查无此人 3.删除后减少对应联系人数量

示例 封装isExist函数查找联系人

int isExist(struct addressBooks* namelist, string name)//整型函数有返回值,返回联系人编号或-1
{
	for (int i = 0; i < namelist->size; i++)
	{
		if (namelist->personArr[i].name == name)//查找联系人并返回编号
		{
			return i;
		}
	}
	return -1;
}

示例 初步测试isExist函数

case 3://3.删除联系人
		{
			string name;
			cout << "请输入联系人姓名:" << endl;
			cin >> name;
			if (isExist(&namelist, name) == -1)
			{
				cout << "查无此人!" << endl;
			}
			
		}
			break;

示例 封装delPerson函数删除联系人

void delPerson(struct addressBooks *namelist)
{
	string name;
	cout << "请输出要删除的联系人姓名:" << endl;
	cin >> name;

	//ret == -1没查到,ret != -1查到了
	int ret = isExist(namelist, name);//调用isExist函数返回联系人编号,用变量ret接受返回值

	if (ret != -1)
	{
		for(int i = ret; i < namelist->size;  i++ )
		{
			namelist->personArr[i] = namelist->personArr[i + 1];//用i+1个联系人的信息覆盖第i个联系人,从而删除i的信息
		}
		namelist->size--;//删除后联系人数量-1
		cout << "删除成功!" << endl;
	}
	else
	{
		cout << "查无此人!" << endl;//isExist函数返回-1则输出查无此人
	}

	system("pause");
	system("cls");
};

6.查找联系人

编程思路: 封装findPerson函数在其中调用isExist函数,根据其返回值输出联系人信息,没有则返回查无此人

示例 封装findPerson函数

void findPerson(struct addressBooks* namelist)
{
	string name;
	cout << "请输入要查找的联系人姓名:" << endl;
	cin >> name;

	int ret = isExist(namelist, name);
	if (ret != -1)
	{
			cout << "姓名:" << namelist->personArr[ret].name << "\t";
			cout << "性别: " << (namelist->personArr[ret].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
			cout << "年龄:" << namelist->personArr[ret].age << "\t";
			cout << "电话:" << namelist->personArr[ret].number << "\t";
			cout << "住址:" << namelist->personArr[ret].address << endl;
	}
	else
	{
		cout << "查无此人" << endl;
		system("pause");
		system("cls");
	}
};

7.修改联系人

编程思路: 封装modifyPerson函数在其中调用isExit函数,根据回值覆盖原联系人信息,无返回值则返回查无此人

示例 modifyPerson函数修改联系人

void modifyPerson(struct addressBooks * namelist)
{
	cout << "请输入要修改的联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(namelist, name);
	if (ret != -1)
	{
		//修改联系人姓名
		cout << "请输入新的联系人姓名:" << endl;
		cin >> name;
		namelist->personArr[ret].name = name;//添加联系人编号

		//输入联系人性别
		cout << "请输入新的联系人性别:" << endl;
		cout << "1 ------ 男:" << endl;
		cout << "2 ------ 女:" << endl;

		int sex = 0;

		while (true)//while循环如果输入的性别不正确则重新输入
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				namelist->personArr[ret].sex = sex;
				break;
			}
			cout << "请输入正确的性别!" << endl;
		}

		//输入年龄
		int age = 0;
		cout << "请输入新的联系人年龄:" << endl;
		cin >> age;
		namelist->personArr[ret].age = age;

		//输入电话
		int number = 0;
		cout << "请输入联系人电话:" << endl;
		cin >> number;
		namelist->personArr[ret].number = number;

		//输入地址
		string address;
		cout << "请输入新的联系人地址:" << endl;
		cin >> address;
		namelist->personArr[ret].address = address;

		cout << "修改成功!" << endl;
	}
	else
	{
		cout << "查无此人!" << endl;
	}

	system("pause");//按任意键继续
	system("cls");//清屏
	
}

8.清空联系人

编程思路: 封装cleanPerson函数清空联系人信息,将联系人数量清零,做逻辑清空

示例 cleanPerson函数逻辑清空联系人

void cleanPerson(struct addressBooks* namelist)
{
	
	while (true)
	{
		int sure;
		cout << "确认要清空联系人列表吗?" << endl;
		cout << "确认回复\"1\"" << endl;
		cout << "取消回复\"0\"" << endl;
		cin >> sure;
		if (sure == 1)
		{
			namelist->size = 0;//联系人数量为0,逻辑清空联系人列表
			cout << "已清空联系人列表!" << endl;
			break;
		}
		else if(sure == 0)
		{
			cout << "取消清空联系人列表!" << endl;
			break;
		}
		else
		{
			cout << "输入有误,请重新输入!" << endl;
		}
	}
	system("pause");
	system("cls");
}

9.完整代码

#include<iostream>
using namespace std;
#include<string>
#define max 1000//定义max最大值为1000

//1.创建选择界面showMenu
void showMenu()
{
	cout << "************************" << endl;
	cout << " *****  1.添加联系人 *****" << endl;
	cout << " *****  2.显示联系人 *****" << endl;
	cout << " *****  3.删除联系人 *****" << endl;
	cout << " *****  4.查找联系人 *****" << endl;
	cout << " *****  5.修改联系人 *****" << endl;
	cout << " *****  6.清空联系人 *****" << endl;
	cout << " *****  0.退出通讯录 *****" << endl;
	cout << "************************" << endl;
}
//2.创建结联系人构体保存联系人信息
struct person
{
	string name;
	int sex;
	int age;
	int number;
	string address;
};
struct addressBooks
{
	struct person personArr[max];
	int size;
};
//3.创建添加联系人函数addPerson
void addPerson(struct addressBooks *namelist )
{
	//判断:如果通讯录达到1000条则退出界面,否则可以继续操作
	if (namelist->size == max)
	{
		cout << "通讯录已满!" << endl;
		return;
	}
	else
	{
		//输入联系人姓名
			string name;
			cout << "请输入联系人姓名:" << endl;
			cin >> name;
			namelist->personArr[namelist->size].name = name;//添加联系人编号

		//输入联系人性别
			cout << "请输入联系人性别:" << endl;
			cout << "1 ------ 男:" << endl;
			cout << "2 ------ 女:" << endl;

			int sex = 0;
		
			while (true)//while循环如果输入的性别不正确则重新输入
			{
				cin >> sex;
				if (sex == 1 || sex == 2)
				{
					namelist->personArr[namelist->size].sex = sex;
					break;
				}
				cout << "请输入正确的性别!" << endl;
			}

		//输入年龄
			int age = 0;
			cout << "请输入联系人年龄:" << endl;
			cin >> age;
			namelist->personArr[namelist->size].age = age;

		//输入电话
			int number = 0;
			cout << "请输入联系人电话:" << endl;
			cin >> number;
			namelist->personArr[namelist->size].number = number;

		//输入地址
			string address;
			cout << "请输入联系人地址:" << endl;
			cin >> address;
			namelist->personArr[namelist->size].address = address;
						
			namelist->size++;//增加联系人数量
			cout << "添加成功!" << endl;
			system("pause");//按任意键继续
			system("cls");//清屏
	}
	
}
void showPerson(struct addressBooks* namelist)
{
	if (namelist->size == 0)//判断联系人数量是否为0
	{
		cout << "没有联系人!" << endl;
	}
	else
	{
		for (int i = 0; i < namelist->size; i++)
		{
			cout << "姓名:" << namelist->personArr[i].name << "\t";
			cout << "性别: " << (namelist->personArr[i].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
			cout << "年龄:" << namelist->personArr[i].age << "\t";
			cout << "电话:" << namelist->personArr[i].number << "\t";
			cout << "住址:" << namelist->personArr[i].address << endl;
		}
			}
	system("pause");
	system("cls");
}
int isExist(struct addressBooks* namelist, string name)//整型函数有返回值,返回联系人编号或-1
{
	for (int i = 0; i < namelist->size; i++)
	{
		if (namelist->personArr[i].name == name)//查找联系人并返回编号
		{
			return i;
		}
	}
	return -1;
}
void delPerson(struct addressBooks *namelist)
{
	string name;
	cout << "请输出要删除的联系人姓名:" << endl;
	cin >> name;

	//ret == -1没查到,ret != -1查到了
	int ret = isExist(namelist, name);//调用isExist函数返回联系人编号,用变量ret接受返回值

	if (ret != -1)
	{
		for(int i = ret; i < namelist->size;  i++ )
		{
			namelist->personArr[i] = namelist->personArr[i + 1];//用i+1个联系人的信息覆盖第i个联系人,从而删除i的信息
		}
		namelist->size--;//删除后联系人数量-1
		cout << "删除成功!" << endl;
	}
	else
	{
		cout << "查无此人!" << endl;//isExist函数返回-1则输出查无此人
	}

	system("pause");
	system("cls");
};
void findPerson(struct addressBooks* namelist)
{
	string name;
	cout << "请输入要查找的联系人姓名:" << endl;
	cin >> name;

	int ret = isExist(namelist, name);
	if (ret != -1)
	{
			cout << "姓名:" << namelist->personArr[ret].name << "\t";
			cout << "性别: " << (namelist->personArr[ret].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
			cout << "年龄:" << namelist->personArr[ret].age << "\t";
			cout << "电话:" << namelist->personArr[ret].number << "\t";
			cout << "住址:" << namelist->personArr[ret].address << endl;
	}
	else
	{
		cout << "查无此人" << endl;
		system("pause");
		system("cls");
	}
};
void modifyPerson(struct addressBooks * namelist)
{
	cout << "请输入要修改的联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(namelist, name);
	if (ret != -1)
	{
		//修改联系人姓名
		cout << "请输入新的联系人姓名:" << endl;
		cin >> name;
		namelist->personArr[ret].name = name;//添加联系人编号

		//输入联系人性别
		cout << "请输入新的联系人性别:" << endl;
		cout << "1 ------ 男:" << endl;
		cout << "2 ------ 女:" << endl;

		int sex = 0;

		while (true)//while循环如果输入的性别不正确则重新输入
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				namelist->personArr[ret].sex = sex;
				break;
			}
			cout << "请输入正确的性别!" << endl;
		}

		//输入年龄
		int age = 0;
		cout << "请输入新的联系人年龄:" << endl;
		cin >> age;
		namelist->personArr[ret].age = age;

		//输入电话
		int number = 0;
		cout << "请输入联系人电话:" << endl;
		cin >> number;
		namelist->personArr[ret].number = number;

		//输入地址
		string address;
		cout << "请输入新的联系人地址:" << endl;
		cin >> address;
		namelist->personArr[ret].address = address;

		cout << "修改成功!" << endl;
	}
	else
	{
		cout << "查无此人!" << endl;
	}

	system("pause");//按任意键继续
	system("cls");//清屏
	
}
void cleanPerson(struct addressBooks* namelist)
{
	
	while (true)
	{
		int sure;
		cout << "确认要清空联系人列表吗?" << endl;
		cout << "确认回复\"1\"" << endl;
		cout << "取消回复\"0\"" << endl;
		cin >> sure;
		if (sure == 1)
		{
			namelist->size = 0;//联系人数量为0,逻辑清空联系人列表
			cout << "已清空联系人列表!" << endl;
			break;
		}
		else if(sure == 0)
		{
			cout << "取消清空联系人列表!" << endl;
			break;
		}
		else
		{
			cout << "输入有误,请重新输入!" << endl;
		}
	}
	system("pause");
	system("cls");
}
int main()
{
	struct addressBooks namelist;
	namelist.size = 0;
	
	while (true)//返回0时才退出选择界面
	{ 
		int select = 0;
		showMenu();
		cout << "请选择: " << endl;
		cin >> select;

		switch(select)
		{
		case 1://1.添加联系人
			addPerson(&namelist);
			break;
		case 2://2.显示联系人
			showPerson(&namelist);
			break;
		case 3://3.删除联系人
		/*{
			string name;
			cout << "请输入联系人姓名:" << endl;
			cin >> name;
			if (isExist(&namelist, name) == -1)
			{
				cout << "查无此人!" << endl;
			}
			
		}*/
			delPerson(&namelist);
			break;
		case 4://4.查找联系人
			findPerson(&namelist);
			break;
		case 5://5.修改联系人
			modifyPerson(&namelist);
			break;
		case 6://6.清空联系人
			cleanPerson(&namelist);
			break;
		case 0://0.退出通讯录
			cout << "欢迎下次使用!" << endl;
			system("pause");
			return 0;
			break;
		}
	}
	


	system("pause");

	return 0;
}