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

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: