Hola a todos, vengo a pedir ayuda con este código porque la verdad estoy trabado con este código de c++, resulta que necesito hacer gestionar los contactos en un array y buscando en internet debo usar punteros.
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.