PLE:Unidad5Ejercicio03

/* Programa:        Unidad5Ejercicio03.cpp Fecha:           25/01/2006 Descripción:     Agenda electrónica con array dinámico. using namespace std;
 * 1) include
 * 2) include
 * 3) include
 * 4) include
 * 1) include

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

};

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 main {       unsigned int MAX; contacto *agenda; unsigned int numContactos = 0, num; char nombre[50], telefono[15];

cout << "Introduzca el numero de elementos "; cin >> MAX;

agenda = new contacto[MAX];

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 '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 << "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; } }