Os voy a dejar el código de las funciones y lo que se supone que debe hacer cada una.
Código
//- Definiciones de funciones ----------------------------------------- void inicializar_agenda(Tagenda& ag){ ag.numEntradas=0; } void a_mayusculas(string& str){ for(int pos=0; pos<str.size(); pos++){ if(str[pos]>='a' && str[pos]<='z'){ str[pos]-=32; } } } void leer_contacto(Tentrada& ent){ string nombre, apellido; long numero; cout<<"Introduce nombre, apellido y numero de contacto: "; cin>>ws; cin>>nombre>>apellido>>numero; a_mayusculas(nombre); a_mayusculas(apellido); ent.nombre=nombre; ent.apellido=apellido; ent.numero=numero; } void insertar_contacto(Tagenda& ag, const Tentrada& ent, bool& ok){ if(ag.numEntradas>=DIM-1) ok=false; else{ int pos=0; while(pos<=ag.numEntradas){ if(ag.entradas[pos].nombre==ent.nombre && ag.entradas[pos].apellido==ent.apellido) ok=false; else{ ok=true; ag.entradas[pos].nombre=ent.nombre; ag.entradas[pos].apellido=ent.apellido; ag.entradas[pos].numero=ent.numero; }//end else ++pos; }//end while }//end else } //int pos_en_agenda(string nom, string apdo, const Tagenda& ag); void eliminar_contacto(Tagenda& ag, string nom, string apdo, bool& ok){ a_mayusculas(nom); a_mayusculas(apdo); int pos=0; while(pos<=ag.numEntradas){ if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo){ ok=true; ag.entradas[pos].nombre=ag.entradas[ag.numEntradas].nombre; ag.entradas[pos].apellido=ag.entradas[ag.numEntradas].apellido; ag.entradas[pos].numero=ag.entradas[ag.numEntradas].numero; --ag.numEntradas; }else ok=false; ++pos; } } long numero(const Tagenda& ag, string nom, string apdo){ long n=0; a_mayusculas(nom); a_mayusculas(apdo); int pos=0; while(pos<=ag.numEntradas){ if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo) n=ag.entradas[pos].numero; ++pos; }//end while return n; } void listar_agenda(const Tagenda& ag){ int pos=0; while(pos<=ag.numEntradas){ cout<<ag.entradas[pos].nombre<<" "<<ag.entradas[pos].apellido<<" "<<ag.entradas[pos].numero; ++pos; }//end while }
ENUNCIADOS:
ara poder utilizar una agenda, primero habrá que inicializarla simplemente poniendo el nº
de entradas a 0. De esto se encargará la función siguiente
void inicializar_agenda(Tagenda& ag).
Para introducir contactos en la agenda se utilizarán las funciones
void leer_contacto(Tentrada& ent),
que se encargará de pedir y leer, de la consola, los datos de un contacto, pasar nombre y
apellido a mayúsculas, y rellenar con ellos los campos de la entrada ent que recibe como
argumento, y
void insertar_contacto(Tagenda& ag, const Tentrada& ent, bool& OK),
que pedirá los datos de un nuevo contacto para agregarlo a la agenda ag; pero si ya existe
una entrada en la agenda con el mismo nombre y apellido o la agenda está llena, no lo
agrega y devuelve false en el parámetro OK, de lo contrario agrega un nuevo registro con
los datos del contacto en la primera posición libre de la agenda y devuelve true en OK.
Recuérdese que los datos de una entrada deberán estar siempre en mayúsculas.
Para eliminar un contacto de la agenda se utilizará la función
void eliminar_contacto(Tagenda& ag, string nom, string apdo,bool& OK),
que buscará la entrada correspondiente al contacto cuyo nombre y apellido se especifican en
los argumentos y, si la encuentra, la elimina de la agenda ag y devuelve true en el
parámetro OK; pero si no lo encuentra, no modifica la agenda y devuelve false en OK. Para
eliminar la entrada bastará con copiar en su lugar del array la entrada situada en la última
posición ocupada y disminuir el número de entradas de la agenda. Se deberá tener cuidado
con las diferencias entre mayúsculas y minúsculas.
Para obtener el número de teléfono de un contacto se utilizará la función
long numero(const Tagenda& ag, string nom, string apdo),
que buscará en la agenda la entrada correspondiente al contacto cuyo nombre y apellido se
especifican en los argumentos y, si lo encuentra, lo devolverá como resultado; pero si no lo
encuentra, devuelve 0. Se deberá tener cuidado con las diferencias entre mayúsculas y
minúsculas.
Para ver en la pantalla el contenido de la agenda se utilizará la función
void listar_agenda(const Tagenda& ag);
que listará cada una de las entradas de la agenda ag en una línea de la pantalla.
He rehecho el ejercicio varias veces, cuando ejecuto el programa me dice que dejó de funcionar.