Fandom

Scratchpad

PLE:Unidad6Ejercicio07

216,230pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

/*
Programa: Ficheros07cpp
Descripción: Agenda electrónica. Guarda y lee desde fichero.
*/
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;

struct contacto
{
    char nombre[50];
    char telefono[15];
};

const unsigned int MAX = 50;

char menu();
void inserta(contacto a[], unsigned int &c, char *n, char *t);
void modifica(contacto a[], unsigned int m, char *n, char *t);
void visualiza(contacto a[], unsigned int c);
void ordena(contacto a[], unsigned int c);
void borra(contacto a[], unsigned int &c, unsigned int b);
void abre(contacto a[], unsigned int &c);
void guarda(contacto a[], unsigned int c);

int main()
{
    contacto agenda[MAX];
    unsigned int numContactos = 0, num;
    char nombre[50], telefono[15];
    char op;

    do
    {
        op = menu();
        switch(op)
        {
            case 'i': cout << "Introduzca nombre: ";
                    cin >> nombre;
                    cout << "Introduzca telefono: ";
                    cin >> telefono;
                    inserta(agenda, numContactos, nombre, telefono);
                    break;
            case 'm': cout << "Introduzca el numero a modificar: ";
                    cin >> num;
                    if( num < numContactos)
                    {
                        cout << "Introduzca nombre nuevo: ";
                        cin >> nombre;
                        cout << "Introduzca telefono nuevo: ";
                        cin >> telefono;
                        modifica(agenda, num , nombre, telefono);
                    }
                    else
                    {
                        cout << endl << "No es posible modificar el elemento indicado ";
                        cout << endl << "Pulsa una tecla para continuar...";
                        cin.ignore();
                        cin.get();
                    }
                    break;
            case 'v': visualiza(agenda, numContactos);
                    break;
            case 'o': ordena(agenda, numContactos);
                    break;
            case 'a': abre(agenda, numContactos);
                    break;
            case 'g': guarda(agenda, numContactos);
                    break;
            case 'b': cout << "Introduzca numero a borrar: ";
                    cin >> num;
                    borra(agenda, numContactos, num);
                    break;
        }
    } while(op != 's'); // se pulsa 's' para salir
    return 0;
}

char menu()
{
    char op;
    system("CLS");
    cout << "================= MENU DE OPCIONES =================" << endl << endl;
    cout << "i - Inserta un nuevo contacto en la agenda" << endl;
    cout << "m - Modifica un contacto de la agenda" << endl;
    cout << "b - Borra un contacto de la agenda" << endl;
    cout << "v - Visualiza los contactos de la agenda" << endl;
    cout << "o - ordena los contactos de la agenda" << endl;
    cout << "a - Abre la agenda desde fichero" << endl;
    cout << "g - Guarda la agenda en fichero" << endl;
    cout << "s - Salir del programa" << endl << endl;
    cout << "Opcion (i, b, m, v, o, s): ";
    cin >> op;
    return op;
}

void inserta(contacto a[], unsigned int &c, char *n, char *t)
{
    strcpy(a[c].nombre, n);
    strcpy(a[c].telefono, t);
    c++;
}

void modifica(contacto a[], unsigned int m, char *n, char *t)
{
    strcpy(a[m].nombre, n);
    strcpy(a[m].telefono, t);
}

void visualiza(contacto a[], unsigned int c)
{
    system("CLS");
    cout << "Num.\tNombre\tTelefono" << endl;
    for(unsigned int i = 0; i < c; i++)
        cout << i << '\t' << a[i].nombre << '\t' << a[i].telefono << endl;
    cout << endl << "Pulsa una tecla para continuar...";
    cin.ignore();
    cin.get();
}

void ordena(contacto a[], unsigned int c)
{
    unsigned int i, j, k;
    contacto aux;
    
    for (i = 0; i < c-1; i++)
    {
        k = i;
        //aux = a[i];
        strcpy(aux.nombre, a[i].nombre);
        strcpy(aux.telefono, a[i].telefono);
        for (j = i+1; j <= c-1; j++)
        {
            if(strcmp(a[j].nombre,aux.nombre) < 0 )
            {
                k = j;
                //aux = a[j];
                strcpy(aux.nombre, a[j].nombre);
                strcpy(aux.telefono, a[j].telefono);
            }
        }
        strcpy(a[k].nombre,a[i].nombre);
        strcpy(a[k].telefono,a[i].telefono);
        strcpy(a[i].nombre, aux.nombre);
        strcpy(a[i].telefono, aux.telefono);
    }
}

void borra(contacto a[], unsigned int &c, unsigned int b)
{
    unsigned int i;
    if(b <= c)
    {
        for(i = b; i < c-1 ; i++)
        {
            strcpy(a[i].nombre, a[i+1].nombre);
            strcpy(a[i].telefono, a[i+1].telefono);
        }
        c--;
    }
    else
    {
        cout << endl << "No es posible borrar el elemento indicado ";
        cout << endl << "Pulsa una tecla para continuar...";
        cin.ignore();
        cin.get();
    }
}

void guarda(contacto a[], unsigned int c)
{
    unsigned int i;
    ofstream fs;
    char nombreAg[80];
    
    cout << "Introduzca nombre archivo: ";
    cin >> nombreAg;
    
    fs.open(nombreAg);
    if(!fs.good())
    {
        cout << "ERROR de apertura ";
    }
    else
    {
        for(i = 0; i < c; i++)
            fs << a[i].nombre << '\t' << a[i].telefono << endl;
        fs.close();
    }
}

void abre(contacto a[], unsigned int &c)
{
    unsigned int i;
    ifstream fe;
    char nombreAg[80], nom[50],tlf[15];
    
    cout << "Introduzca nombre archivo: ";
    cin >> nombreAg;
    
    fe.open(nombreAg);
    if(!fe.good())
    {
        cout << "ERROR de apertura ";
    }
    else
    {
        c = 0;
        fe >> nom >> tlf;
        while(!fe.eof())
        {
            inserta(a, c, nom, tlf);
            fe >> nom >> tlf;
        }
        fe.close();
    }
}

Also on Fandom

Random wikia