【C++基础语法入门】9 通讯录管理系统

【C++基础语法入门】9 通讯录管理系统

    • 1. 系统需求
    • 2. 实现步骤
      • 1.1 菜单功能
      • 1.2 添加联系人
      • 1.3 显示联系人
      • 1.4 删除联系人
      • 1.5 查找联系人
      • 1.6 修改联系人
      • 1.7 清空联系人
    • 3 全部代码展示
    • 4 结果展示

黑马程序员匠心之作|C++教程从0到1入门编程
学习笔记
目标:对C++有初步了解,能够有基础编程能力
案例:通讯录管理系统

1. 系统需求

功能:

  1. 添加联系人(姓名,性别,年龄,联系电话,家庭住址),最多1000人
  2. 显示联系人(所有信息)
  3. 删除联系人(按照姓名方式删除)
  4. 查找联系人(按照姓名查看)
  5. 修改联系人(按照姓名修改)
  6. 清空联系人(清空所有联系人)
  7. 退出通讯录

2. 实现步骤

1.1 菜单功能

void showMenu() {
	cout << "***************************" << endl;
	cout << "通讯录" << "\n 1. 添加联系人" << "\n 2. 显示联系人" << "\n 3. 删除联系人(按照姓名方式删除)" << "\n 4. 查找联系人(按照姓名查看)" << "\n 5. 修改联系人(按照姓名修改)" << "\n 6. 清空联系人(清空所有联系人)" << "\n 0. 退出通讯录" << "\n请输入数字使用对应功能" << endl;
	cout << "***************************" << endl;
}
int main() {
	
	int choose = 0;
	while(true) {
		showMenu();
		cin >> choose;
		switch (choose) {
		case(1):
			cout << "您选择的是1.添加联系人" << endl;
			break;
		case(2):
			cout << "您选择的是2.显示联系人" << endl;
			break;
		case(3):
			cout << "您选择的是3.删除联系人" << endl;
			break;
		case(4):
			cout << "您选择的是4.查找联系人" << endl;
			break;
		case(5):
			cout << "您选择的是5.修改联系人" << endl;
			break;
		case(6):
			cout << "您选择的是6.清空联系人" << endl;
			break;
		case(0):
			cout << "成功退出登录!" << endl;
			system("pause");
			return 0;
			break;
		default:
			cout << "您输入的有误,请重新输入" << endl;
			break;
		}
	}
	
}

1.2 添加联系人

实现步骤:

  1. 设计联系人结构体
struct contact {
	string name;
	int sex;//1 男 2 女
	int age;
	string phone;
	string address;
};
  1. 设计通讯录结构体
#define MAX 1000
//设计通讯录结构体
struct AddressBook {
	struct contact contactArray[MAX];
	int m_Size;//通讯录中人员个数
};
  1. main函数中创建通讯录
int main() {
	
	//创建通讯录结构体变量
	AddressBook abs;
	//初始化通讯录中当前的人数个数
	abs.m_Size = 0;

	int choose = 0;
	while(true) {
		showMenu();
		cin >> choose;
		switch (choose) {
		case(1):
			cout << "您选择的是1.添加联系人" << endl;
			addContact(&abs);//利用地址传递可以修改实参
			break;
		...
}
  1. 封装添加联系人函数
void addContact(struct AddressBook *abs) {
	//判断通讯录是否已满,如果满了不再添加
	if (abs->m_Size == MAX) {
		cout << "通讯录已满,无法添加" << endl;
	}
	else {
		string addName;
		int addSex;
		int addAge;
		string addPhone;
		string addAddress;
		//添加具体联系人
		//姓名
		cout << "请输入联系人姓名:" << endl;
		cin >> addName;
		abs->contactArray[abs->m_Size].name = addName;
		//性别
		while (true) {
			cout << "请选择性别:1.男 2. 女" << endl;
			cin >> addSex;
			if (addSex == 1 || addSex == 2) {
				abs->contactArray[abs->m_Size].sex = addSex;
				break;
			}
			else {
				cout << "您输入有误,请重新输入"<<endl;
			}
		}
		//年龄
		cout << "请输入年龄:" << endl;
		cin >> addAge;
		abs->contactArray[abs->m_Size].age = addAge;

		//联系电话
		cout << "请输入联系电话:" << endl;
		cin >> addPhone;
		abs->contactArray[abs->m_Size].phone = addPhone;

		//家庭住址
		cout << "请输入家庭住址:" << endl;
		cin >> addAddress;
		abs->contactArray[abs->m_Size].address = addAddress;

		//更新通讯录人数
		abs->m_Size++;
		cout << "添加成功" << endl;

		//清屏的操作
		system("pause");//请按任意键继续
		system("cls");//清屏
	}
}
  1. 测试添加联系人功能

1.3 显示联系人

封装显示联系人函数:
思路:判断如果当前通讯录没有联系人,就提示为空,如果大于0,则显示全部信息。

void showContact(struct AddressBook *abs) {
	if (abs->m_Size == 0) {
		cout << "当前通讯录为空" << endl;
	}
	else {
		for (int i = 0; i < abs->m_Size; i++) {
			cout << "姓名:" << abs->contactArray[i].name << "\t";
			cout << "性别:" << (abs->contactArray[i].sex ==1 ?"男":"女") << "\t";//三目运算符
			cout << "年龄:" << abs->contactArray[i].age << "\t";
			cout << "联系电话:" << abs->contactArray[i].phone << "\t";
			cout << "家庭住址:" << abs->contactArray[i].address<< endl;
		}
	}
	//清屏的操作
	system("pause");//请按任意键继续
	system("cls");//清屏
}

1.4 删除联系人

实现步骤

  1. 封装检测联系人是否存在函数
    设计思路:如果存在,返回联系人在通讯录中的位置,不存在返回-1
//检测联系人是否存在
int isExist(struct AddressBook *abs,string inputName) {
	for (int i = 0; i < abs->m_Size; i++) {
		//找到
		if (abs->contactArray[i].name == inputName) {
			return i;//返回在数组中的编号
		}
	}
	return -1;
}

检测代码:

int main() {
	
	...
		case(3):
		{//case代码太长会报错,括起来就不会了
			cout << "您选择的是3.删除联系人" << endl;
			cout << "请输入删除联系人的姓名:" << endl;
			string inputName;
			cin >> inputName;
			if (isExist(&abs, inputName) == -1) {
				cout << "查无此人" << endl;
			}
			else {
				cout << "找到此人" << endl;
			}
			break;
		}
		...
	}
  1. 封装删除函数
    思路:要删除某人,让某人后的数据向前移动,并且让通讯录中记录的人员个数-1
//删除指定联系人
void deleteContact(struct AddressBook *abs) {
	cout << "请输入删除联系人的姓名:" << endl;
	string inputName;
	cin >> inputName;
	//ret == -1;未查到
	int ret = isExist(abs, inputName);
	if (ret != -1) {
		//删除操作
		for (int i = ret; i < abs->m_Size; i++) {
			//数据前移
			abs->contactArray[i] = abs->contactArray[i + 1];
		 }
		abs->m_Size--;//更新通讯录中人员数
		cout << "删除成功" << endl;

	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}
  1. 测试

1.5 查找联系人

//查找指定联系人信息
void findContact(struct AddressBook *abs) {
	cout << "请输入您要查找的联系人:" << endl;
	string inputName;
	cin >> inputName;
	//ret == -1;未查到
	int ret = isExist(abs, inputName);
	if (ret != -1) {
		cout << "姓名:" << abs->contactArray[ret].name << "\t";
		cout << "性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << "\t";//三目运算符
		cout << "年龄:" << abs->contactArray[ret].age << "\t";
		cout << "联系电话:" << abs->contactArray[ret].phone << "\t";
		cout << "家庭住址:" << abs->contactArray[ret].address << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

1.6 修改联系人

//修改指定联系人
void modifyContact(struct AddressBook *abs) {
	cout << "请输入您要修改的联系人:" << endl;
	string inputName;
	cin >> inputName;
	//ret == -1;未查到
	int ret = isExist(abs, inputName);
	if (ret != -1) {
		cout << "您查找联系人的姓名:" << abs->contactArray[ret].name << endl;
		cout << "请输入修改后的姓名:" << endl;
		string name;
		cin >> name;
		abs->contactArray[ret].name = name;

		cout << "您查找联系人的性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << endl;;//三目运算符
		while (true) {
			cout << "请输入修改后的性别,1.男 2.女:" << endl;;
			int sex;
			cin >> sex;
			if (sex == 1 || sex == 2) {
				abs->contactArray[ret].sex = sex;
				break;
			}
			else {
				cout << "您输入有误,请重新输入" << endl;
			}
		}

		cout << "您查找联系人的年龄:" << abs->contactArray[ret].age << endl;
		cout << "请输入修改后的年龄:" << endl;
		int age;
		cin >> age;
		abs->contactArray[ret].age = age;

		cout << "您查找联系人的联系电话:" << abs->contactArray[ret].phone << endl;
		cout << "请输入修改后的联系电话:" << endl;
		string phone;
		cin >> phone;
		abs->contactArray[ret].phone = phone;
		
		cout << "您查找联系人的家庭住址:" << abs->contactArray[ret].address << endl;
		cout << "请输入修改后的家庭住址:" << endl;
		int address;
		cin >> address;
		abs->contactArray[ret].address = address;

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

	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

1.7 清空联系人

实现思路:将通讯录记录的联系人数量置为0,做逻辑清空即可

//清空所有联系人
void cleanContact(struct AddressBook *abs) {
	abs->m_Size = 0;
	cout << "通讯录已清空" << endl;
	system("pause");
	system("cls");
}

3 全部代码展示

#include
using namespace std;
#include
#define MAX 1000

//1. 添加联系人(姓名,性别,年龄,联系电话,家庭住址),最多1000人
//2. 显示联系人(所有信息)
//3. 删除联系人(按照姓名方式删除)
//4. 查找联系人(按照姓名查看)
//5. 修改联系人(按照姓名修改)
//6. 清空联系人(清空所有联系人)
//7. 退出通讯录

//菜单功能
void showMenu() {
	cout << "***************************" << endl;
	cout << "通讯录" << "\n 1. 添加联系人" << "\n 2. 显示联系人" << "\n 3. 删除联系人(按照姓名方式删除)" << "\n 4. 查找联系人(按照姓名查看)" << "\n 5. 修改联系人(按照姓名修改)" << "\n 6. 清空联系人(清空所有联系人)" << "\n 0. 退出通讯录" << "\n请输入数字使用对应功能" << endl;
	cout << "***************************" << endl;
}

//设计联系人结构体
struct contact {
	string name;
	int sex;
	int age;
	string phone;
	string address;
};

//设计通讯录结构体
struct AddressBook {
	struct contact contactArray[MAX];
	int m_Size;//通讯录中人员个数
};

void addContact(struct AddressBook *abs) {
	//判断通讯录是否已满,如果满了不再添加
	if (abs->m_Size == MAX) {
		cout << "通讯录已满,无法添加" << endl;
	}
	else {
		string addName;
		int addSex;
		int addAge;
		string addPhone;
		string addAddress;
		//添加具体联系人
		//姓名
		cout << "请输入联系人姓名:" << endl;
		cin >> addName;
		abs->contactArray[abs->m_Size].name = addName;
		//性别
		while (true) {
			cout << "请选择性别:1.男 2. 女" << endl;
			cin >> addSex;
			if (addSex == 1 || addSex == 2) {
				abs->contactArray[abs->m_Size].sex = addSex;
				break;
			}
			else {
				cout << "您输入有误,请重新输入"<<endl;
			}
		}
		//年龄
		cout << "请输入年龄:" << endl;
		cin >> addAge;
		abs->contactArray[abs->m_Size].age = addAge;

		//联系电话
		cout << "请输入联系电话:" << endl;
		cin >> addPhone;
		abs->contactArray[abs->m_Size].phone = addPhone;

		//家庭住址
		cout << "请输入家庭住址:" << endl;
		cin >> addAddress;
		abs->contactArray[abs->m_Size].address = addAddress;

		//更新通讯录人数
		abs->m_Size++;;
		cout << "添加成功" << endl;

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

void showContact(struct AddressBook *abs) {
	if (abs->m_Size == 0) {
		cout << "当前通讯录为空" << endl;
	}
	else {
		for (int i = 0; i < abs->m_Size; i++) {
			cout << "姓名:" << abs->contactArray[i].name << "\t";
			cout << "性别:" << (abs->contactArray[i].sex ==1 ?"男":"女") << "\t";//三目运算符
			cout << "年龄:" << abs->contactArray[i].age << "\t";
			cout << "联系电话:" << abs->contactArray[i].phone << "\t";
			cout << "家庭住址:" << abs->contactArray[i].address<< endl;
		}
	}
	//清屏的操作
	system("pause");//请按任意键继续
	system("cls");//清屏
}

//检测联系人是否存在
int isExist(struct AddressBook *abs,string inputName) {
	for (int i = 0; i < abs->m_Size; i++) {
		//找到
		if (abs->contactArray[i].name == inputName) {
			return i;//返回在数组中的编号
		}
	}
	return -1;
}

//删除指定联系人
void deleteContact(struct AddressBook *abs) {
	cout << "请输入删除联系人的姓名:" << endl;
	string inputName;
	cin >> inputName;
	//ret == -1;未查到
	int ret = isExist(abs, inputName);
	if (ret != -1) {
		//删除操作
		for (int i = ret; i < abs->m_Size; i++) {
			//数据前移
			abs->contactArray[i] = abs->contactArray[i + 1];
		}
		abs->m_Size--;//更新通讯录中人员数
		cout << "删除成功" << endl;

	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

//查找指定联系人信息
void findContact(struct AddressBook *abs) {
	cout << "请输入您要查找的联系人:" << endl;
	string inputName;
	cin >> inputName;
	//ret == -1;未查到
	int ret = isExist(abs, inputName);
	if (ret != -1) {
		cout << "姓名:" << abs->contactArray[ret].name << "\t";
		cout << "性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << "\t";//三目运算符
		cout << "年龄:" << abs->contactArray[ret].age << "\t";
		cout << "联系电话:" << abs->contactArray[ret].phone << "\t";
		cout << "家庭住址:" << abs->contactArray[ret].address << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

//修改指定联系人
void modifyContact(struct AddressBook *abs) {
	cout << "请输入您要修改的联系人:" << endl;
	string inputName;
	cin >> inputName;
	//ret == -1;未查到
	int ret = isExist(abs, inputName);
	if (ret != -1) {
		cout << "您查找联系人的姓名:" << abs->contactArray[ret].name << endl;
		cout << "请输入修改后的姓名:" << endl;
		string name;
		cin >> name;
		abs->contactArray[ret].name = name;

		cout << "您查找联系人的性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << endl;;//三目运算符
		while (true) {
			cout << "请输入修改后的性别,1.男 2.女:" << endl;;
			int sex;
			cin >> sex;
			if (sex == 1 || sex == 2) {
				abs->contactArray[ret].sex = sex;
				break;
			}
			else {
				cout << "您输入有误,请重新输入" << endl;
			}
		}

		cout << "您查找联系人的年龄:" << abs->contactArray[ret].age << endl;
		cout << "请输入修改后的年龄:" << endl;
		int age;
		cin >> age;
		abs->contactArray[ret].age = age;

		cout << "您查找联系人的联系电话:" << abs->contactArray[ret].phone << endl;
		cout << "请输入修改后的联系电话:" << endl;
		string phone;
		cin >> phone;
		abs->contactArray[ret].phone = phone;
		
		cout << "您查找联系人的家庭住址:" << abs->contactArray[ret].address << endl;
		cout << "请输入修改后的家庭住址:" << endl;
		int address;
		cin >> address;
		abs->contactArray[ret].address = address;

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

	}
	else{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

void cleanContact(struct AddressBook *abs) {
	abs->m_Size = 0;
	cout << "通讯录已清空" << endl;
	system("pause");
	system("cls");
}
int main() {
	
	//创建通讯录结构体变量
	AddressBook abs;
	//初始化通讯录中当前的人数个数
	abs.m_Size = 0;

	int choose = 0;
	while(true) {
		showMenu();
		cin >> choose;
		switch (choose) {
		case(1):
			cout << "您选择的是1.添加联系人" << endl;
			addContact(&abs);//利用地址传递可以修改实参
			break;
		case(2):
			cout << "您选择的是2.显示联系人" << endl;
			showContact(&abs);
			break;
		case(3):
			cout << "您选择的是3.删除联系人" << endl;
			deleteContact(&abs);
			break;
		case(4):
			cout << "您选择的是4.查找联系人" << endl;
			findContact(&abs);
			break;
		case(5):
			cout << "您选择的是5.修改联系人" << endl;
			modifyContact(&abs);
			break;
		case(6):
			cout << "您选择的是6.清空联系人" << endl;
			cleanContact(&abs);
			break;
		case(0):
			cout << "成功退出登录!" << endl;
			system("pause");
			return 0;
			break;
		default:
			cout << "您输入的有误,请重新输入" << endl;
			system("pause");
			system("cls");
			break;
		}
	}
	
}

4 结果展示

***************************
通讯录
 1. 添加联系人
 2. 显示联系人
 3. 删除联系人(按照姓名方式删除)
 4. 查找联系人(按照姓名查看)
 5. 修改联系人(按照姓名修改)
 6. 清空联系人(清空所有联系人)
 0. 退出通讯录
请输入数字使用对应功能
***************************
1
您选择的是1.添加联系人
请输入联系人姓名:
张三
请选择性别:1.男 2. 女
1
请输入年龄:
21
请输入联系电话:
2234738543
请输入家庭住址:
北京
添加成功
请按任意键继续. . .
***************************
通讯录
 1. 添加联系人
 2. 显示联系人
 3. 删除联系人(按照姓名方式删除)
 4. 查找联系人(按照姓名查看)
 5. 修改联系人(按照姓名修改)
 6. 清空联系人(清空所有联系人)
 0. 退出通讯录
请输入数字使用对应功能
***************************
1
您选择的是1.添加联系人
请输入联系人姓名:
李四
请选择性别:1.2.2
请输入年龄:
32
请输入联系电话:
223728278
请输入家庭住址:
山东
添加成功
请按任意键继续. . .
***************************
通讯录
 1. 添加联系人
 2. 显示联系人
 3. 删除联系人(按照姓名方式删除)
 4. 查找联系人(按照姓名查看)
 5. 修改联系人(按照姓名修改)
 6. 清空联系人(清空所有联系人)
 0. 退出通讯录
请输入数字使用对应功能
***************************
2
您选择的是2.显示联系人
姓名:张三      性别:男        年龄:21        联系电话:2234738543    家庭住址:北京
姓名:李四      性别:女        年龄:32        联系电话:223728278     家庭住址:山东
请按任意键继续. . .
***************************
通讯录
 1. 添加联系人
 2. 显示联系人
 3. 删除联系人(按照姓名方式删除)
 4. 查找联系人(按照姓名查看)
 5. 修改联系人(按照姓名修改)
 6. 清空联系人(清空所有联系人)
 0. 退出通讯录
请输入数字使用对应功能
***************************
4
您选择的是4.查找联系人
请输入您要查找的联系人:
张三
姓名:张三      性别:男        年龄:21        联系电话:2234738543    家庭住址:北京
请按任意键继续. . .
***************************
通讯录
 1. 添加联系人
 2. 显示联系人
 3. 删除联系人(按照姓名方式删除)
 4. 查找联系人(按照姓名查看)
 5. 修改联系人(按照姓名修改)
 6. 清空联系人(清空所有联系人)
 0. 退出通讯录
请输入数字使用对应功能
***************************
5
您选择的是5.修改联系人
请输入您要修改的联系人:
张三
您查找联系人的姓名:张三
请输入修改后的姓名:
张小三
您查找联系人的性别:男
请输入修改后的性别,1.男 2.女:
2
您查找联系人的年龄:21
请输入修改后的年龄:
12
您查找联系人的联系电话:2234738543
请输入修改后的联系电话:
4532450823
您查找联系人的家庭住址:北京
请输入修改后的家庭住址:
上海
修改成功!
请按任意键继续. . .

你可能感兴趣的:(C++基础语法入门,C++,c++,编程语言)