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:
-
Primero, se define una
Person
estructura named , que representa la información de un contacto, incluyendo nombre, sexo, edad, número de teléfono y dirección. -
A continuación, se define una clase llamada clase
Addressbooks
para gestionar la libreta de direcciones. Esta clase contiene un contenedorpersonArray
llamadovector
, que se usa para almacenar información de contacto. -
En
Addressbooks
la 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 alpersonArray
contenedor.showPerson()
Función para mostrar contactos. Itera a través depersonArray
cada 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,personArray
busque 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,personArray
busque 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,personArray
busque 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.
-
En la función,
main()
se crea unAddressbooks
objetoaddressbooks
y 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,Addressbooks
se 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:
-
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.
-
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.
-
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.
-
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.
-
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;
}