C++结构体项目----通讯录管理系统

目录

通讯录管理系统

通讯录系统的各个子函数

1. 头文件,结构体

2. 主函数

3. 菜单界面

4. 添加联系人函数

5. 显示联系人

 6. 删除联系人

7. 查找联系人

8. 修改联系人信息

 9. 清空通讯录

10.退出通讯录管理系统 

 源代码

通讯录使用结果展示:


通讯录管理系统

说明:

系统中需要实现的功能如下:

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

通讯录系统的各个子函数

1. 头文件,结构体

#include<iostream>
#include<string>
#include<ctype.h>
#define M 1000    // 定义联系人的最大个数
using namespace std;

struct person {        // 联系人结构体
	string name;       // 姓名
	string sex;        // 性别
	int age;           // 年龄
	string phone;      // 电话
	string addr;       // 地址
};
struct addr_book {
	struct person p_arr[M];
	int size; // 通讯录中人的个数
};

// 菜单界面
void showmenu();
// 1.添加联系人
void add_person(addr_book* abs);
// 2.显示联系人
void show_person(addr_book* abs);
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name);
// 具体的删除
void del_person(addr_book* abs);
// 4.查找联系人
void find_person(addr_book* abs);
// 5.修改联系人信息
void change_person(addr_book* abs);
// 6.清空联系人
void clear_person(addr_book* abs);
// 0.退出函数
bool quite();

2. 主函数

int main()
{
	struct addr_book abs;
	abs.size = 0;
	int select = 0;// 用户输入
	bool flag = true;
	while (flag) {
		// 菜单调用
		showmenu();
		cin >> select;
		switch (select) {
		case 1:
			// 1.添加联系人
			add_person(&abs);  // 利用地址传递,可以修饰实参
			break;
		case 2:
			// 2.显示联系人
			show_person(&abs);
			break;
		case 3:
			// 3.删除联系人
			del_person(&abs);
			break;
		case 4:
			// 4.查找联系人
			find_person(&abs);
			break;
		case 5:
			// 5.修改联系人
			change_person(&abs);
			break;
		case 6:
			// 6.清空联系人
			clear_person(&abs);
			break;
		case 0:
			flag = quite();
			//cout << "欢迎下次使用!" << endl;
			//flag = false;
			system("pause");
			system("cls");
			break;
		}
	}	
	return 0;
}

3. 菜单界面

// 菜单界面
void showmenu()
{
	cout << "--------通讯录管理系统--------" << endl;
	cout << "\t1.添加联系人" << endl;
	cout << "\t2.显示联系人" << endl;
	cout << "\t3.删除联系人" << endl;
	cout << "\t4.查找联系人" << endl;
	cout << "\t5.修改联系人" << endl;
	cout << "\t6.清空联系人" << endl;
	cout << "\t0.推出通讯录" << endl;
	cout << "------------------------------" << endl;
}

4. 添加联系人函数

按1进入添加联系人界面

首先,判断通讯录系统是否已经存满上限个联系人,

分别输入姓名,性别(判断输入是否“男”或者"女",其他情况均输出重新输入),

年龄(判断年龄是否在10到100的范围内,如果超出范围,要求用户重新输入),

电话(判断电话号码是否为三位,如果位数不对要求用户重新输入)(其他位也可以,3位比较方便),

住址后完成录入。

录入完成后,更新通讯录中联系人的个数,并返回菜单界面。

// 1.添加联系人
void add_person(addr_book* abs)
{
	// 判断通讯录是否已满
	if (abs->size == M) {
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}else{
		
		string name;
		// 添加姓名
		cout << "请输入姓名:  ";
		cin >> name;
		abs->p_arr[abs->size].name=name;
		// 添加性别
		string sex;
		cout << "请输入性别: ";
		while (true) {
			cin >> sex;
			if (sex == "男" || sex == "女") {
				abs->p_arr[abs->size].sex = sex;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加年龄
		int age;
		cout << "请输入年龄: ";
		while (true) {
			cin >> age;
			if (age >= 10 && age <= 100) {
				abs->p_arr[abs->size].age = age;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加电话
		cout << "请输入电话: ";
		string phone;
		while (true) {
			cin >> phone;
			if (phone.length() == 3) {
				abs->p_arr[abs->size].phone = phone;
				break;
			}
			else {
				cout << "你输入的电话位数不对,请重新输入: ";
			}
		}
		// 添加地址
		cout << "请输入家庭住址: ";
		cin >> abs->p_arr[abs->size].addr;

		abs->size++;
		cout << "--------添加成功--------" << endl;

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

5. 显示联系人

将通讯录中所有联系人打印出来,同样,先判断通讯录是否为空。

// 2.显示联系人
void show_person(addr_book* abs)
{
	// 判断通讯录中人数是否为0
	if (abs->size == 0) {
		cout << "当前的记录为空" << endl;
	}
	else {
		for (int i = 0; i < abs->size; i++) {
			cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
			cout << abs->p_arr[i].name << "\t" << abs->p_arr[i].sex << "\t" << abs->p_arr[i].age
				<< "\t" << abs->p_arr[i].phone << "\t" << abs->p_arr[i].addr << endl;
		}
	}
	system("pause");
	system("cls");
}

 6. 删除联系人

通过判断联系人是否存在通讯录中的子函数,查找要删除的联系人是否存在通讯录中,找到了就返回当前联系人在通讯录数组中的下标位置,没找到返回-1。

通过联系人的姓名在通讯录中查找要删除的联系人,如果没找到,给用户反馈该用户不存在提示,

如果找到该联系人,用数组的下一个位置的信息覆盖到当前位置,以此类推,将要删除联系人之后的每一个联系人位置更新后,通讯录大小-1即可。

// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name)
{
	for (int i = 0; i < abs->size; i++) {
		if (abs->p_arr[i].name == name) {
			return i;  // 找到返回在数组中的编号
		}
	}
	return -1;
}
// 具体的删除
void del_person(addr_book* abs) 
{
	string name;
	cout << "请输入您要删除的联系人: ";
	cin >> name;
	int ret = isexist(abs, name);
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else {
		// 得到的是要删除的人的数组下标
		// 要删除可以直接将后一个数据覆盖到要删除的数据上
		for (int i = ret; i < abs->size; i++) {
			abs->p_arr[i] = abs->p_arr[i + 1];
		}
		abs->size--;
		cout << "--------删除成功--------" << endl;
	}
	system("pause");
	system("cls");
}

7. 查找联系人

与删除联系人相同,首先判断联系人是否在通讯录系统中,

如果未找到给用户提示该联系人不存在,找到了就打印联系人的所有信息。

// 4.查找联系人
void find_person(addr_book* abs)
{
	cout << "请输入您要查找的联系人: ";
	string name;
	cin >> name;
	int ret = isexist(abs, name);
	if (ret == -1) {
		cout << "您要查找的联系人不存在。" << endl;
	}
	else {
		cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
		cout << abs->p_arr[ret].name << "\t" << abs->p_arr[ret].sex << "\t" << abs->p_arr[ret].age
			<< "\t" << abs->p_arr[ret].phone << "\t" << abs->p_arr[ret].addr << endl;
		cout << "--------查找完毕--------" << endl;
	}
	system("pause");
	system("cls");
}

8. 修改联系人信息

通过联系人姓名在通讯录系统中查找要找的联系人是否存在,如果未找到,给用户反馈,查无此人。

找到要修改的联系人位置后,将新输入的信息覆盖到原本的位置即可。

// 5.修改联系人信息
void change_person(addr_book* abs)
{
	cout << "请输入您要修改的联系人: ";
	string name;
	cin >> name;
	int ret = isexist(abs, name);
	if (ret == -1) {
		cout << "查无此人。" << endl;
		system("pause");// 请按任意键继续
		system("cls");
		
	}
	else {
		string name;
		// 修改姓名
		cout << "请输入姓名:  ";
		cin >> name;
		abs->p_arr[ret].name = name;
		// 修改性别
		string sex;
		cout << "请输入性别: ";
		while (true) {
			cin >> sex;
			if (sex == "男" || sex == "女") {
				abs->p_arr[ret].sex = sex;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加年龄
		int age;
		cout << "请输入年龄: ";
		while (true) {
			cin >> age;
			if (age >= 10 && age <= 100) {
				abs->p_arr[ret].age = age;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加电话
		cout << "请输入电话: ";
		string phone;
		while (true) {
			cin >> phone;
			if (phone.length() == 3) {
				abs->p_arr[ret].phone = phone;
				break;
			}
			else {
				cout << "你输入的电话位数不对,请重新输入: ";
			}
		}
		// 添加地址
		cout << "请输入家庭住址: ";
		cin >> abs->p_arr[ret].addr;

		cout << "--------修改成功--------" << endl;

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

 9. 清空通讯录

直接将size置零就行。

// 6.清空联系人
void clear_person(addr_book* abs)
{
	// 直接将size的数量置为0就ok
	abs->size = 0;
	cout << "--------所有联系人已经全部清空--------" << endl;
	system("pause");
	system("cls");
}

10.退出通讯录管理系统 

通过用户输入判断是否退出系统,将用户输入的y或n统一转为大写进行比较

y退出系统,n回到菜单界面,输入其他内容,提示重新输入

// 0.退出函数
bool quite()
{
	char n;
	cout << "是否确认退出(Y/N): ";
	while (true)
	{		
		cin >> n;
		if (toupper(n) == 'Y') {
			cout << "欢迎下次使用!" << endl;
			return false;
			break;
		}
		else if (toupper(n) == 'N') {
			return true;
			break;			
		}
		else {
			cout << "输入错误,请重新输入: ";
		}		
	}
}

 源代码

#include<iostream>
#include<string>
#include<ctype.h>
#define M 1000    // 定义联系人的最大个数
using namespace std;

struct person {        // 联系人结构体
	string name;       // 姓名
	string sex;        // 性别
	int age;           // 年龄
	string phone;      // 电话
	string addr;       // 地址
};
struct addr_book {
	struct person p_arr[M];
	int size; // 通讯录中人的个数
};

// 菜单界面
void showmenu();
// 1.添加联系人
void add_person(addr_book* abs);
// 2.显示联系人
void show_person(addr_book* abs);
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name);
// 具体的删除
void del_person(addr_book* abs);
// 4.查找联系人
void find_person(addr_book* abs);
// 5.修改联系人信息
void change_person(addr_book* abs);
// 6.清空联系人
void clear_person(addr_book* abs);
// 0.退出函数
bool quite();

int main()
{
	struct addr_book abs;
	abs.size = 0;
	int select = 0;// 用户输入
	bool flag = true;
	while (flag) {
		// 菜单调用
		showmenu();
		cin >> select;
		switch (select) {
		case 1:
			// 1.添加联系人
			add_person(&abs);  // 利用地址传递,可以修饰实参
			break;
		case 2:
			// 2.显示联系人
			show_person(&abs);
			break;
		case 3:
			// 3.删除联系人
			del_person(&abs);
			break;
		case 4:
			// 4.查找联系人
			find_person(&abs);
			break;
		case 5:
			// 5.修改联系人
			change_person(&abs);
			break;
		case 6:
			// 6.清空联系人
			clear_person(&abs);
			break;
		case 0:
			flag = quite();
			//cout << "欢迎下次使用!" << endl;
			//flag = false;
			system("pause");
			system("cls");
			break;
		}
	}	
	return 0;
}
// 菜单界面
void showmenu()
{
	cout << "--------通讯录管理系统--------" << endl;
	cout << "\t1.添加联系人" << endl;
	cout << "\t2.显示联系人" << endl;
	cout << "\t3.删除联系人" << endl;
	cout << "\t4.查找联系人" << endl;
	cout << "\t5.修改联系人" << endl;
	cout << "\t6.清空联系人" << endl;
	cout << "\t0.推出通讯录" << endl;
	cout << "------------------------------" << endl;
}
// 1.添加联系人
void add_person(addr_book* abs)
{
	// 判断通讯录是否已满
	if (abs->size == M) {
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}else{
		
		string name;
		// 添加姓名
		cout << "请输入姓名:  ";
		cin >> name;
		abs->p_arr[abs->size].name=name;
		// 添加性别
		string sex;
		cout << "请输入性别: ";
		while (true) {
			cin >> sex;
			if (sex == "男" || sex == "女") {
				abs->p_arr[abs->size].sex = sex;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加年龄
		int age;
		cout << "请输入年龄: ";
		while (true) {
			cin >> age;
			if (age >= 10 && age <= 100) {
				abs->p_arr[abs->size].age = age;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加电话
		cout << "请输入电话: ";
		string phone;
		while (true) {
			cin >> phone;
			if (phone.length() == 3) {
				abs->p_arr[abs->size].phone = phone;
				break;
			}
			else {
				cout << "你输入的电话位数不对,请重新输入: ";
			}
		}
		// 添加地址
		cout << "请输入家庭住址: ";
		cin >> abs->p_arr[abs->size].addr;

		abs->size++;
		cout << "--------添加成功--------" << endl;

		// 清屏的操作
		system("pause");// 请按任意键继续
		system("cls");
	}
}
// 2.显示联系人
void show_person(addr_book* abs)
{
	// 判断通讯录中人数是否为0
	if (abs->size == 0) {
		cout << "当前的记录为空" << endl;
	}
	else {
		for (int i = 0; i < abs->size; i++) {
			cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
			cout << abs->p_arr[i].name << "\t" << abs->p_arr[i].sex << "\t" << abs->p_arr[i].age
				<< "\t" << abs->p_arr[i].phone << "\t" << abs->p_arr[i].addr << endl;
		}
	}
	system("pause");
	system("cls");
}
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name)
{
	for (int i = 0; i < abs->size; i++) {
		if (abs->p_arr[i].name == name) {
			return i;  // 找到返回在数组中的编号
		}
	}
	return -1;
}
// 具体的删除
void del_person(addr_book* abs) 
{
	string name;
	cout << "请输入您要删除的联系人: ";
	cin >> name;
	int ret = isexist(abs, name);
	if (ret == -1) {
		cout << "查无此人" << endl;
	}
	else {
		// 得到的是要删除的人的数组下标
		// 要删除可以直接将后一个数据覆盖到要删除的数据上
		for (int i = ret; i < abs->size; i++) {
			abs->p_arr[i] = abs->p_arr[i + 1];
		}
		abs->size--;
		cout << "--------删除成功--------" << endl;
	}
	system("pause");
	system("cls");
}
// 4.查找联系人
void find_person(addr_book* abs)
{
	cout << "请输入您要查找的联系人: ";
	string name;
	cin >> name;
	int ret = isexist(abs, name);
	if (ret == -1) {
		cout << "您要查找的联系人不存在。" << endl;
	}
	else {
		cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
		cout << abs->p_arr[ret].name << "\t" << abs->p_arr[ret].sex << "\t" << abs->p_arr[ret].age
			<< "\t" << abs->p_arr[ret].phone << "\t" << abs->p_arr[ret].addr << endl;
		cout << "--------查找完毕--------" << endl;
	}
	system("pause");
	system("cls");
}
// 5.修改联系人信息
void change_person(addr_book* abs)
{
	cout << "请输入您要修改的联系人: ";
	string name;
	cin >> name;
	int ret = isexist(abs, name);
	if (ret == -1) {
		cout << "查无此人。" << endl;
		system("pause");// 请按任意键继续
		system("cls");
		
	}
	else {
		string name;
		// 修改姓名
		cout << "请输入姓名:  ";
		cin >> name;
		abs->p_arr[ret].name = name;
		// 修改性别
		string sex;
		cout << "请输入性别: ";
		while (true) {
			cin >> sex;
			if (sex == "男" || sex == "女") {
				abs->p_arr[ret].sex = sex;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加年龄
		int age;
		cout << "请输入年龄: ";
		while (true) {
			cin >> age;
			if (age >= 10 && age <= 100) {
				abs->p_arr[ret].age = age;
				break;
			}
			else {
				cout << "请重新输入: ";
			}
		}
		// 添加电话
		cout << "请输入电话: ";
		string phone;
		while (true) {
			cin >> phone;
			if (phone.length() == 3) {
				abs->p_arr[ret].phone = phone;
				break;
			}
			else {
				cout << "你输入的电话位数不对,请重新输入: ";
			}
		}
		// 添加地址
		cout << "请输入家庭住址: ";
		cin >> abs->p_arr[ret].addr;

		cout << "--------修改成功--------" << endl;

		// 清屏的操作
		system("pause");// 请按任意键继续
		system("cls");
	}
}
// 6.清空联系人
void clear_person(addr_book* abs)
{
	// 直接将size的数量置为0就ok
	abs->size = 0;
	cout << "--------所有联系人已经全部清空--------" << endl;
	system("pause");
	system("cls");
}
// 0.退出函数
bool quite()
{
	char n;
	cout << "是否确认退出(Y/N): ";
	while (true)
	{		
		cin >> n;
		if (toupper(n) == 'Y') {
			cout << "欢迎下次使用!" << endl;
			return false;
			break;
		}
		else if (toupper(n) == 'N') {
			return true;
			break;			
		}
		else {
			cout << "输入错误,请重新输入: ";
		}		
	}
}

通讯录使用结果展示:

1. 菜单界面

2. 添加联系人

正常添加

 

输入有误的情况下添加

  

 3. 显示联系人

4. 删除联系人

要删除的联系人存在

 

要删除的联系人不存在

  

5. 查找联系人

查找联系人存在于通讯录管理系统中

 

 查找联系人不存在

 

6. 修改联系人

7. 清空联系人

8. 退出通讯录

猜你喜欢

转载自blog.csdn.net/hjl011006/article/details/131222594
今日推荐