Tarea principal de diseño de curso de C ++, diseño de una libreta de direcciones simple, con la función de agregar, eliminar, verificar y modificar

Este código es un programa de libreta de direcciones simple, que puede agregar, mostrar, eliminar, buscar, modificar y borrar contactos. La siguiente es una explicación línea por línea y una introducción al código:

  1. Primero, se define una Personestructura named , que representa la información de un contacto, incluyendo nombre, sexo, edad, número de teléfono y dirección.

  2. A continuación, se define una clase llamada clase Addressbookspara gestionar la libreta de direcciones. Esta clase contiene un contenedor personArrayllamado vector, que se usa para almacenar información de contacto.

  3. En Addressbooksla clase se definen una serie de funciones miembro para lograr diferentes funciones:

    • showMenu()La función se utiliza para mostrar opciones de menú, incitando al usuario a posibles operaciones.
    • addPerson()La función se utiliza para agregar contactos. A su vez, obtendrá el nombre, el sexo, la edad, el teléfono y la dirección del contacto de la entrada del usuario y agregará el contacto al personArraycontenedor.
    • showPerson()Función para mostrar contactos. Itera a través de personArraycada contacto en el contenedor y genera su nombre, sexo, edad, teléfono y dirección.
    • deletePerson()función para eliminar un contacto. Le pedirá al usuario que ingrese el nombre del contacto para eliminar, personArraybusque ese contacto en el contenedor y elimínelo si lo encuentra.
    • findPerson()Función para buscar contactos. Le pedirá al usuario que ingrese el nombre del contacto que está buscando, personArraybusque ese contacto en un contenedor y muestre sus detalles si lo encuentra.
    • modifyPerson()La función se utiliza para modificar la información de contacto. Le pedirá al usuario que ingrese el nombre del contacto a modificar, personArraybusque el contacto en el contenedor y, si lo encuentra, permita que el usuario modifique el nombre, el sexo, la edad, el teléfono y la dirección.
    • cleanPerson()La función se utiliza para borrar la libreta de direcciones, es decir, eliminar todos los contactos.
  4. En la función, main()se crea un Addressbooksobjeto addressbooksy se presentan las opciones del menú para que el usuario seleccione a través de un ciclo infinito. Según la elección del usuario, Addressbooksse llama a la función miembro de la clase correspondiente para realizar la operación correspondiente. Hasta que el usuario elija salir de la libreta de direcciones, el programa finaliza.

En general, este código implementa un sistema simple de administración de la libreta de direcciones, que puede agregar, mostrar, eliminar, buscar, modificar y borrar fácilmente la información de contacto. Mediante el uso del diseño orientado a objetos, la información de contacto se encapsula en una clase y se proporciona un conjunto de funciones operativas para administrar la libreta de direcciones. El código está claramente estructurado y es fácil de entender y ampliar.

Al optimizar su código, tenga en cuenta los siguientes aspectos:

  1. Use una estructura de datos más adecuada: el código actual usa una matriz para almacenar información de contacto, pero al insertar y eliminar contactos, los elementos de la matriz deben moverse, lo que es ineficiente. Puede considerar usar una matriz dinámica (como std::vector) o una lista vinculada (LinkedList) para almacenar contactos para mejorar la eficiencia de inserción y eliminación.

  2. Reducir el código repetitivo: en el código actual, algunas funciones (como ingresar el nombre, el sexo, la edad, el número de teléfono y la dirección) tienen código repetido en múltiples funciones. Estos códigos comunes se pueden extraer y reutilizar como funciones independientes para reducir la duplicación de trabajo y la redundancia de códigos.

  3. Introducir un mecanismo de manejo de errores: el código actual no realiza el manejo de errores en los datos de entrada. Por ejemplo, cuando se ingresa un valor de género o edad ilegal, el programa no da un mensaje de error. Se pueden agregar mecanismos de manejo de errores apropiados para recordar al usuario que ingrese los datos correctos y realice la tolerancia a fallas adecuada.

  4. Optimice la función de búsqueda: la forma de encontrar contactos en el código actual es recorrer toda la matriz de la libreta de direcciones, lo que es menos eficiente cuando hay muchos contactos en la libreta de direcciones. Puede considerar el uso de estructuras de datos como HashMap o Binary Search Tree para optimizar la función de búsqueda y mejorar la eficiencia de la búsqueda.

  5. Use parámetros de función para pasar objetos de estructura: en el código actual, cada función necesita pasar el puntero del objeto Addressbooks como un parámetro. Puede considerar pasar el objeto Addressbooks como un parámetro a la función, evitando el uso de variables globales y aumentando la legibilidad y la capacidad de mantenimiento del código.

El siguiente es un ejemplo de cómo mejorar el código de acuerdo con los puntos de optimización anteriores:

#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;
}

Supongo que te gusta

Origin blog.csdn.net/dsafefvf/article/details/131488704
Recomendado
Clasificación