El código me compila pero no guarda los registros en el array, pongo el código:
Agenda.h
Código C++:
Ver original
#ifndef AGENDA_H #define AGENDA_H #include <string> #include <array> class Agenda { private: int indice; int tamanio; Contacto* contactos; public: Agenda(); Agenda(int maxCont); bool anyadirContacto(Contacto objcontacto); Contacto* buscarPorNombre(std::string nombre); Contacto* buscarPorTelefono(int telefono); bool borrarPorNombre(std::string nombre); bool modificarPorNombre(std::string nombre, int nuevoTelefono); std::string toString(); }; #endif /* AGENDA_H */
Agenda.cpp
Código C++:
Ver original
#include "Contacto.h" #include "Agenda.h" #include <iostream> #include <string> using namespace std; Agenda::Agenda(){} Agenda::Agenda(int maxCont){ this->indice = 0; this->tamanio = maxCont; this->contactos = new Contacto[maxCont]; } bool Agenda::anyadirContacto(Contacto objcontacto) { if(indice < tamanio){ contactos[indice] = objcontacto; indice++; return true; } else { return false; } } string Agenda::toString(){ cout << "indice: " << indice << "\n"; string res =""; int cont = 1; for (int i = 0 ; i < indice; i++) { res += "\n Contacto " + std::to_string(cont) + "\n" + contactos[i].toString(); cont++; } return res; } Contacto* Agenda::buscarPorNombre(string nombre) { for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) { Contacto contacto = this->contactos[i]; if (&contacto == NULL) { string nom = contacto.getNombre(); if (nom == nombre) { return &contacto; } } } return NULL; } Contacto* Agenda::buscarPorTelefono(int telefono) { for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) { if (&this->contactos[i] != NULL) { int tel = this->contactos[i].getTelefono(); if (tel == telefono) { return &this->contactos[i]; } } } return NULL; } bool Agenda::borrarPorNombre(string nombre ) { for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) { if(&this->contactos[i] != NULL) { string nom = contactos[i].getNombre(); if(nom == nombre){ &(this->contactos[i]) == NULL; return true; } } } return false; } bool Agenda::modificarPorNombre(string nombre, int nuevoTelefono) { for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) { Contacto contacto = this->contactos[i]; string nom = contacto.getNombre(); if (nom == nombre) { contacto.setTelefono(nuevoTelefono); return true; } } return false; }
main.cpp
Código C++:
Ver original
#include <cstdlib> #include "Contacto.h" #include "Agenda.h" #include "Mensajes.h" using namespace std; /** * Código de: http://users.dsic.upv.es/~mpastorg/prg-teleco/cursosPasados/2013-14/tema7/EjercicioAgenda_solucion.pdf * * 2. Haz una clase llamada Agenda para manejar una agenda de teléfonos. Los * objetos instanciados a partir de esa clase tendrán la siguientes funcionalidades: - Construir una agenda a partir de un número máximo de contactos posibles (constructor) - Añadir un contacto nuevo - Listar todos los contactos de la agenda - Buscar un contacto por nombre - Buscar un contacto a partir de un número de teléfono - Borrar un teléfono dado un nombre - Modificar un número de telefono dado un nombre - Puedes añadir más métodos si lo consideras adecuado. - Las entradas de la agenda se modelarán mediante objetos de la clase Contacto que habrá que crear. * Para cada Contacto de la agenda se almacenará la siguiente información: - Nombre - Dirección - Código Postal - Teléfono */ void addContacto(Agenda xagenda); void buscarXNombre(Agenda xagenda); void buscarXTelefono(Agenda xagenda); void borrarXNombre(Agenda xagenda); void modificarXNombre(Agenda xagenda); /*--------------------*/ int main(int argc, char** argv) { int opcion = -1; Agenda* agenda = NULL; while(opcion != 0) { opcion = Mensajes::requestInt( "* Ingrese opción:" + std::string("\n1.Crear una agenda nueva") + std::string("\n2.Añadir contacto") + std::string("\n3.Listar agenda") + std::string("\n4.Buscar un contacto por nombre") + std::string("\n5.Buscar un contacto por telefono") + std::string("\n6.Borrar un contacto por nombre") + std::string("\n7.Modificar un telefono por nombre") + std::string("\n0.Salir")); switch(opcion) { case 1: { int tamanio = Mensajes::requestInt("¿tamaño de la agenda?"); agenda = new Agenda(tamanio); break; } case 2: { addContacto(*agenda); break; } case 3: { Mensajes::messageInfo("CONTACTOS\n" + agenda->toString()); break; } case 4: { buscarXNombre(*agenda); break; } case 5: { buscarXTelefono(*agenda); break; } case 6: { borrarXNombre(*agenda); break; } case 7: { modificarXNombre(*agenda); break; } case 0: { Mensajes::messageInfo("Gracias por usar este sistema :)"); break; } default: { Mensajes::messageInfo("ERROR! Opción equivocada"); break; } } } return 0; } void addContacto(Agenda xagenda){ string nombre = Mensajes::requestString("Ingrese nombre: "); string direccion = Mensajes::requestString("Ingrese dirección: "); int codpos = Mensajes::requestInt("Ingrese código postal: "); int telefono = Mensajes::requestInt("Ingrese telefono: "); Contacto *c = new Contacto(nombre, direccion, codpos, telefono); xagenda.anyadirContacto(*c); } void buscarXNombre(Agenda xagenda){ string nombre = Mensajes::requestString("Ingrese nombre para la búsqueda: "); Contacto *c = xagenda.buscarPorNombre(nombre); if(c != NULL){ Mensajes::messageInfo(c->toString()); } else { Mensajes::messageInfo("El contacto no existe"); } } void buscarXTelefono(Agenda xagenda){ int telefono = Mensajes::requestInt("Ingrese telefono para la búsqueda: "); Contacto *c = xagenda.buscarPorTelefono(telefono); if(c != NULL){ Mensajes::messageInfo(c->toString()); } else { Mensajes::messageInfo("El contacto no existe"); } } void borrarXNombre(Agenda xagenda){ string nombre = Mensajes::requestString("Ingrese nombre para la búsqueda: "); if(xagenda.borrarPorNombre(nombre)){ Mensajes::messageInfo(nombre + " fue eliminado :("); } else { Mensajes::messageInfo("El contacto no existe"); } } void modificarXNombre(Agenda xagenda){ string nombre = Mensajes::requestString("Ingrese nombre para la búsqueda: "); int telefono = Mensajes::requestInt("Editar telefono: "); xagenda.modificarPorNombre(nombre, telefono); }
Sinceramente no sé que hacer, espero sus respuestas y saludos.