#include <iostream>
#include <string>
#include <sstream> // Para la alternativa a to_string en versiones antiguas de C++
using namespace std;
const int MAX_PERSONAS = 100; // Tamaño máximo de la agenda
const int MAX_CAMBIOS = 100; // Tamaño máximo del historial de cambios
// Función para convertir int a string (alternativa a to_string si no usas C++11)
string convertir_a_string(int numero) {
ostringstream ss;
ss << numero;
return ss.str();
}
class Persona {
public:
Persona();
friend istream &operator>>(istream &entrada, Persona &obj);
friend ostream &operator<<(ostream &salida, Persona &obj);
~Persona();
string nombre, e_mail;
int tel;
};
Persona::Persona() : nombre("sin nombre"), e_mail("sin email"), tel(0) {}
istream &operator>>(istream &entrada, Persona &obj) {
cout << "Introduce nombre: ";
entrada.ignore(); // Ignorar caracteres residuales
getline(entrada, obj.nombre);
cout << "Introduce e_mail: ";
getline(entrada, obj.e_mail);
cout << "Introduce telefono: ";
entrada >> obj.tel;
return entrada;
}
ostream &operator<<(ostream &salida, Persona &obj) {
salida << "Nombre: " << obj.nombre << endl;
salida << "e_mail: " << obj.e_mail << endl;
salida << "Telefono: " << obj.tel << endl;
return salida;
}
Persona::~Persona() {}
class Agenda {
public:
Agenda();
void meter_datos();
void cambiar_datos();
void mostrar_datos();
void mostrar_cambios();
~Agenda();
private:
Persona personas[MAX_PERSONAS]; // Arreglo de personas
string cambios[MAX_CAMBIOS]; // Arreglo de historial de cambios
int num_personas; // Número actual de personas en la agenda
int num_cambios; // Número actual de cambios registrados
};
Agenda::Agenda() : num_personas(0), num_cambios(0) {}
Agenda::~Agenda() {}
void Agenda::meter_datos() {
if (num_personas >= MAX_PERSONAS) {
cout << "La agenda está llena. No se pueden agregar más personas." << endl;
return;
}
Persona nueva_persona;
cout << "Introduce los datos de la nueva persona:" << endl;
cin >> nueva_persona;
personas[num_personas++] = nueva_persona; // Agregar persona al arreglo
cout << "Persona agregada correctamente." << endl;
}
void Agenda::cambiar_datos() {
if (num_personas == 0) {
cout << "La agenda está vacía. Agrega personas primero." << endl;
return;
}
int indice;
cout << "Personas disponibles en la agenda:" << endl;
for (int i = 0; i < num_personas; ++i) {
cout << i + 1 << ". " << personas[i].nombre << endl;
}
cout << "Elige el número de la persona a modificar: ";
cin >> indice;
--indice; // Ajustar a índice de arreglo
if (indice < 0 || indice >= num_personas) {
cout << "Opción no válida." << endl;
return;
}
Persona &p = personas[indice];
int opcion;
cout << "1. Cambiar nombre\n2. Cambiar e_mail\n3. Cambiar telefono\nElige una opción: ";
cin >> opcion;
switch (opcion) {
case 1: {
string nuevo_nombre;
cout << "Introduce el nuevo nombre: ";
cin.ignore();
getline(cin, nuevo_nombre);
if (num_cambios < MAX_CAMBIOS) {
cambios[num_cambios++] = "Se cambió el nombre de " + p.nombre + " a " + nuevo_nombre;
}
p.nombre = nuevo_nombre;
break;
}
case 2: {
string nuevo_email;
cout << "Introduce el nuevo e_mail: ";
cin.ignore();
getline(cin, nuevo_email);
if (num_cambios < MAX_CAMBIOS) {
cambios[num_cambios++] = "Se cambió el email de " + p.e_mail + " a " + nuevo_email;
}
p.e_mail = nuevo_email;
break;
}
case 3: {
int nuevo_tel;
cout << "Introduce el nuevo teléfono: ";
cin >> nuevo_tel;
if (num_cambios < MAX_CAMBIOS) {
cambios[num_cambios++] = "Se cambió el teléfono de " + convertir_a_string(p.tel) + " a " + convertir_a_string(nuevo_tel);
}
p.tel = nuevo_tel;
break;
}
default:
cout << "Opción no válida." << endl;
}
}
void Agenda::mostrar_datos() {
if (num_personas == 0) {
cout << "La agenda está vacía." << endl;
return;
}
cout << "Datos de las personas en la agenda:" << endl;
for (int i = 0; i < num_personas; ++i) {
cout << personas[i] << endl;
}
}
void Agenda::mostrar_cambios() {
if (num_cambios == 0) {
cout << "No se han realizado cambios." << endl;
return;
}
cout << "Historial de cambios:" << endl;
for (int i = 0; i < num_cambios; ++i) {
cout << cambios[i] << endl;
}
}
int main() {
Agenda agenda;
int opcion;
do {
cout << "\nMenu de Agenda:\n";
cout << "1. Meter datos\n";
cout << "2. Cambiar datos\n";
cout << "3. Mostrar datos\n";
cout << "4. Mostrar cambios\n";
cout << "5. Salir\n";
cout << "Elige una opción: ";
cin >> opcion;
switch (opcion) {
case 1:
agenda.meter_datos();
break;
case 2:
agenda.cambiar_datos();
break;
case 3:
agenda.mostrar_datos();
break;
case 4:
agenda.mostrar_cambios();
break;
case 5:
cout << "Saliendo del programa." << endl;
break;
default:
cout << "Opción no válida." << endl;
}
} while (opcion != 5);
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: