Fandom

Scratchpad

PLE:Unidad6Ejercicio07

219,607pages on
this wiki
Add New Page
Discuss this page0 Share
/*
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();
    }
}

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.

Also on Fandom

Random wikia