PLE:Unidad7Ejercicio07

/* Programa:        Unidad7jercicio7cpp Fecha:           12/02/2007 Descripción:     Agenda electrónica. Guarda y lee desde fichero. using namespace std;
 * 1) include
 * 2) include
 * 3) include
 * 4) include
 * 5) include
 * 1) include

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);

void 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 }

char menu {       char op; clrscr; 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) { clrscr; 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; } }