C++课程设计大作业,设计一个简易通讯录,具有增删查改的功能

这段代码是一个简单的通讯录程序,可以进行联系人的添加、显示、删除、查找、修改以及清空操作。下面是对代码的逐行解释和介绍:

  1. 首先,定义了一个名为Person的结构体,表示一个联系人的信息,包括姓名、性别、年龄、电话和住址。

  2. 接着,定义了一个名为Addressbooks的类,用于管理通讯录。该类中包含了一个名为personArrayvector容器,用于存储联系人信息。

  3. Addressbooks类中,定义了一系列成员函数来实现不同的功能:

    • showMenu()函数用于显示菜单选项,提示用户可以进行的操作。
    • addPerson()函数用于添加联系人。它会依次从用户输入获取联系人的姓名、性别、年龄、电话和住址,并将联系人添加到personArray容器中。
    • showPerson()函数用于显示联系人。它会遍历personArray容器中的每个联系人,并输出其姓名、性别、年龄、电话和住址。
    • deletePerson()函数用于删除联系人。它会要求用户输入要删除的联系人姓名,并在personArray容器中查找该联系人,如果找到则将其删除。
    • findPerson()函数用于查找联系人。它会要求用户输入要查找的联系人姓名,并在personArray容器中查找该联系人,如果找到则输出其详细信息。
    • modifyPerson()函数用于修改联系人信息。它会要求用户输入要修改的联系人姓名,并在personArray容器中查找该联系人,如果找到则允许用户修改其姓名、性别、年龄、电话和住址。
    • cleanPerson()函数用于清空通讯录,即删除所有联系人。
  4. main()函数中,创建了一个Addressbooks对象addressbooks,并通过一个无限循环提供菜单选项供用户选择。根据用户的选择,调用相应的Addressbooks类的成员函数来执行对应的操作。直到用户选择退出通讯录,程序结束。

总体来说,这段代码实现了一个简单的通讯录管理系统,可以方便地添加、显示、删除、查找、修改和清空联系人信息。通过使用面向对象的设计,将联系人信息封装在一个类中,提供了一组操作函数来管理通讯录。代码的结构清晰,易于理解和扩展。

当对代码进行优化时,可以考虑以下几个方面:

  1. 使用更合适的数据结构:目前的代码中使用了数组来存储联系人信息,但在插入和删除联系人时需要移动数组元素,效率较低。可以考虑使用动态数组(例如std::vector)或链表(LinkedList)来存储联系人,以提高插入和删除的效率。

  2. 减少重复代码:目前的代码中,一些功能(例如输入姓名、性别、年龄、电话和住址)在多个函数中出现了重复的代码。可以将这些公共的代码提取出来,作为独立的函数进行复用,减少重复的劳动和代码冗余。

  3. 引入错误处理机制:目前的代码对输入的数据没有进行错误处理,例如当输入非法的性别值或年龄值时,程序没有给出错误提示。可以添加合适的错误处理机制,提醒用户输入正确的数据,并进行适当的容错处理。

  4. 优化查找功能:目前的代码中查找联系人的方式是遍历整个通讯录数组,当通讯录中的联系人数量较多时效率较低。可以考虑使用哈希表(HashMap)或二叉搜索树(Binary Search Tree)等数据结构来优化查找功能,以提高查找的效率。

  5. 使用函数参数传递结构体对象:目前的代码中,每个函数都需要传递Addressbooks对象的指针作为参数,可以考虑将Addressbooks对象作为参数传递给函数,避免使用全局变量,并增加代码的可读性和可维护性。

下面是根据上述优化点对代码进行改进的示例:

#include<iostream>
#include<string>
#include<vector>

using namespace std;

// 联系人结构体
struct Person
{
	string m_Name; // 姓名
	int m_Sex; // 性别:1男 2女
	int m_Age; // 年龄
	string m_Phone; // 电话
	string m_Addr; // 住址
};

// 通讯录类
class Addressbooks
{
private:
	vector<Person> personArray; // 通讯录中保存的联系人数组

public:
	// 添加联系人
	void addPerson();

	// 显示联系人
	void showPerson();

	// 删除联系人
	void deletePerson();

	// 查找联系人
	void findPerson();

	// 修改联系人
	void modifyPerson();

	// 清空联系人
	void cleanPerson();
};

// 菜单界面
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;
}

// 添加联系人
void Addressbooks::addPerson()
{
	Person person;
	cout << "请输入姓名:" << endl;
	cin >> person.m_Name;
	cout << "请输入性别:(1男 2女)" << endl;
	cin >> person.m_Sex;
	cout << "请输入年龄:" << endl;
	cin >> person.m_Age;
	cout << "请输入电话:" << endl;
	cin >> person.m_Phone;
	cout << "请输入住址:" << endl;
	cin >> person.m_Addr;
	personArray.push_back(person);
	cout << "联系人添加成功!" << endl;
}

// 显示联系人
void Addressbooks::showPerson()
{
	if (personArray.empty())
	{
		cout << "通讯录为空!" << endl;
		return;
	}
	for (const auto& person : personArray)
	{
		cout << "姓名:" << person.m_Name << "\t";
		cout << "性别:" << (person.m_Sex == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << person.m_Age << "\t";
		cout << "电话:" << person.m_Phone << "\t";
		cout << "住址:" << person.m_Addr << endl;
	}
}

// 删除联系人
void Addressbooks::deletePerson()
{
	if (personArray.empty())
	{
		cout << "通讯录为空!" << endl;
		return;
	}
	string name;
	cout << "请输入要删除的联系人姓名:" << endl;
	cin >> name;
	for (auto it = personArray.begin(); it != personArray.end(); ++it)
	{
		if (it->m_Name == name)
		{
			personArray.erase(it);
			cout << "联系人删除成功!" << endl;
			return;
		}
	}
	cout << "未找到该联系人!" << endl;
}

// 查找联系人
void Addressbooks::findPerson()
{
	if (personArray.empty())
	{
		cout << "通讯录为空!" << endl;
		return;
	}
	string name;
	cout << "请输入要查找的联系人姓名:" << endl;
	cin >> name;
	for (const auto& person : personArray)
	{
		if (person.m_Name == name)
		{
			cout << "姓名:" << person.m_Name << "\t";
			cout << "性别:" << (person.m_Sex == 1 ? "男" : "女") << "\t";
			cout << "年龄:" << person.m_Age << "\t";
			cout << "电话:" << person.m_Phone << "\t";
			cout << "住址:" << person.m_Addr << endl;
			return;
		}
	}
	cout << "未找到该联系人!" << endl;
}

// 修改联系人
void Addressbooks::modifyPerson()
{
	if (personArray.empty())
	{
		cout << "通讯录为空!" << endl;
		return;
	}
	string name;
	cout << "请输入要修改的联系人姓名:" << endl;
	cin >> name;
	for (auto& person : personArray)
	{
		if (person.m_Name == name)
		{
			cout << "请输入姓名:" << endl;
			cin >> person.m_Name;
			cout << "请输入性别:(1男 2女)" << endl;
			cin >> person.m_Sex;
			cout << "请输入年龄:" << endl;
			cin >> person.m_Age;
			cout << "请输入电话:" << endl;
			cin >> person.m_Phone;
			cout << "请输入住址:" << endl;
			cin >> person.m_Addr;
			cout << "联系人修改成功!" << endl;
			return;
		}
	}
	cout << "未找到该联系人!" << endl;
}

// 清空联系人
void Addressbooks::cleanPerson()
{
	personArray.clear();
	cout << "通讯录已清空!" << endl;
}

int main()
{
	Addressbooks addressbooks;
	int select = 0;
	while (true)
	{
		showMenu();
		cin >> select;
		switch (select)
		{
		case 1: // 添加联系人
			addressbooks.addPerson();
			break;
		case 2: // 显示联系人
			addressbooks.showPerson();
			break;
		case 3: // 删除联系人
			addressbooks.deletePerson();
			break;
		case 4: // 查找联系人
			addressbooks.findPerson();
			break;
		case 5: // 修改联系人
			addressbooks.modifyPerson();
			break;
		case 6: // 清空联系人
			addressbooks.cleanPerson();
			break;
		case 0: // 退出通讯录
			cout << "欢迎下次使用!" << endl;
			return 0;
		default:
			cout << "输入有误,请重新输入!" << endl;
			break;
		}
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/dsafefvf/article/details/131488704