/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

AYUDA CON MI PROGRAMA, POR FAVOR.

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
tossalet2013



Registrado: 27 Mar 2013
Mensajes: 1

MensajePublicado: 27/03/2013 8:54 am
Título: AYUDA CON MI PROGRAMA, POR FAVOR.

Hola buenas tardes a todos:

Soy nuevo en este foro. Os llevo leyendo desde hace mucho tiempo, y por fin me he decidido a darme de alta.

Bueno, os comento cual es mi problema. Estoy implementando un programa que funciona con varias clases. Primero, tengo una clase producto, que contiene el nombre del producto y la cantidad de producto. Tras ello, he implementado una clase llamada seccion, donde tengo un vector de productos, y la cantidad correspondiente de productos, asi como el nombre de la seccion.

Tras ello, he implementado una clase, llamada ListaCompra, que contiene un vector de secciones, y el numero de secciones correspondiente.

Bien, todo esta realizado en Dev C++ 4.9.9.2. Bien, tras compilarlo, he comprobado que toda las funciones van correctamente, excepto la de Nuevo Producto. Al introducir una seccion y un producto por primera vez, todo va correcto. Si vuelvo a introducir otro producto de la misma seccion, tambien funciona correctamente. Pero si trato de introducir un nuevo producto, pero en una seccion nueva, entonces se produce error.

Le he dado mil vueltas, y parece que el error se situa en la zona que os indico entre los asteriscos.

Pensaba que estaba mal sobrecargado el operador =, pero he visto que funciona perfectamente con la funcion Copiar, y en Ordenar.

Por favor, a ver si alguien me pudiera echar una mano, pues estoy absolutamente desesperado.

Aqui os dejo el fuente. Un saludo.

#include <iostream>
#include <conio.h>
#include <string.h>
#include <fstream>

using namespace std;

const int NPMAX=10,NSMAX=10;

class producto{
private:
string nombre_producto;
int cantidad;
public:
producto()
{
cantidad=0;
nombre_producto="";
}
producto(const producto &origen)
{
nombre_producto=origen.nombre_producto;
cantidad=origen.cantidad;
}

~producto()
{

}
producto& operator=(const producto &pro)
{
nombre_producto=pro.nombre_producto;
cantidad=pro.cantidad;
return(*this);
}

bool operator>(producto pro)
{
if (nombre_producto>pro.nombre_producto)
{
return(true);
}
else
{
return(false);
}
}

void Solicitar(int cant,string nombre)
{
nombre_producto=nombre;
cantidad=cant;
}

void Mostrar()
{

cout<<"Nombre del producto:"<<nombre_producto<<endl;
cout<<"Cantidad del producto:"<<cantidad<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
}
void Sumar(int cant)
{
cantidad=cantidad+cant;
}
string MostrarNombreProducto()
{
return(nombre_producto);
}
void PonerACero()
{
cantidad=0;
}
int devolvercantidadproducto()
{
return(cantidad);
}

};

class seccion{
private:
string nombre_seccion;
producto *productos;
int cant_productos;
public:
seccion()
{
cant_productos=0;
nombre_seccion="";
productos=NULL;

}
seccion(const seccion &origen)
{
nombre_seccion=origen.nombre_seccion;
cant_productos=origen.cant_productos;
productos=new producto[cant_productos];
for (int f=0;f<cant_productos;f++)
{
productos[f]=origen.productos[f];
}
}
~seccion()
{
delete [] productos;
}
void Solicitar(string nombreseccion,string nombreproducto,int cantidadproducto)
{
nombre_seccion=nombreseccion;
if (cant_productos==0)
{
cant_productos++;
productos=new producto[1];
productos[0].Solicitar(cantidadproducto,nombreproducto);
}
else
{
producto *auxiliar=new producto[cant_productos];
int f;
for (f=0;f<cant_productos;f++)
{
auxiliar[f]=productos[f];

}

delete[] productos;
cant_productos++;
productos=new producto[cant_productos];
for (int f=0;f<(cant_productos-1);f++)
{
productos[f]=auxiliar[f];

}

delete [] auxiliar;

productos[cant_productos-1].Solicitar(cantidadproducto,nombreproducto);
}
return;
}
void AltaProducto(string nombre,int cant)
{

producto *auxiliar=new producto[cant_productos];
int f;
for (f=0;f<cant_productos;f++)
{
auxiliar[f]=productos[f];

}

delete[] productos;
cant_productos++;
productos=new producto[cant_productos];
for (int f=0;f<(cant_productos-1);f++)
{
productos[f]=auxiliar[f];

}

delete [] auxiliar;
productos[cant_productos-1].Solicitar(cant,nombre);
//cant_productos++;
return;

}

void Mostrar()
{
cout<<endl<<"*-------------*--------------------*"<<endl;
cout<<endl<<"Nombre de la seccion:"<<nombre_seccion<<endl;
cout<<endl<<"*-------------*--------------------*"<<endl;
for (int f=0;f<cant_productos;f++)
{
productos[f].Mostrar();
}
}
string MostrarNombreSeccion()
{
return(nombre_seccion);
}
int CompararProductos(string articulo,int cantidad)
{
int encontrado=0;
for (int f=0;f<cant_productos;f++)
{

if (productos[f].MostrarNombreProducto()==articulo)

{
productos[f].Sumar(cantidad);
encontrado=1;
}

}
return(encontrado);
}
void BuscarProducto(string nombreproducto)
{
for (int f=0;f<cant_productos;f++)
{
if (productos[f].MostrarNombreProducto()==nombreproducto)
{
productos[f].PonerACero();
}
}
}
seccion& operator=(const seccion &p1)
{
nombre_seccion=p1.nombre_seccion;
cant_productos=p1.cant_productos;
for (int f=0;f<cant_productos;f++)
{
productos[f]=p1.productos[f];
}
return(*this);
}
seccion& operator=(string p2)
{
nombre_seccion=p2;
return(*this);
}

bool operator>(seccion p1)
{
if (nombre_seccion>p1.nombre_seccion)
{
return(true);
}
else
{
return(false);
}
}
string devolverseccion()
{
return(nombre_seccion);
}
int cantproductos()
{
return(cant_productos);
}
void Ordenar()
{
producto auxiliar;
for (int f=0;f<(cant_productos-1);f++)
{
for (int g=(1+f);g<cant_productos;g++)
{
if (productos[f]>productos[g])
{
auxiliar=productos[f];
productos[f]=productos[g];
productos[g]=auxiliar;

}
}
}
}
string devolvernombreproducto(int i)
{
return(productos[i].MostrarNombreProducto());
}
int devolvercantidadproducto(int i)
{
return(productos[i].devolvercantidadproducto());
}

};
class listaCompra{
private:

seccion *secciones;
int cant_secciones;
public:
listaCompra()
{
cant_secciones=0;
secciones=NULL;
}
listaCompra(const listaCompra &origen)
{
cant_secciones=origen.cant_secciones;
secciones=new seccion[cant_secciones];
for (int f=0;f<cant_secciones;f++)
{
secciones[f]=origen.secciones[f];
}
}

~listaCompra()
{
delete [] secciones;

}
void solicitar()
{
string nombre_sec;
string nombre_prod;
int cantidad_prod;
int resultado;

cout<<"Introduce seccion:";
cin>>nombre_sec;
int posicion=-1;
for (int g=0;g<cant_secciones;g++)
{

if (secciones[g].MostrarNombreSeccion()==nombre_sec)
{
posicion=g;
}

}
if (posicion!=-1)
{
cout<<"Cantidad de producto:";
cin>>cantidad_prod;
cout<<"Nombre del producto:";
cin>>nombre_prod;
resultado=secciones[posicion].CompararProductos(nombre_prod,cantidad_prod);
if (resultado==0)
{
secciones[posicion].AltaProducto(nombre_prod,cantidad_prod);
}
}
else
{
cout<<"Cantidad de producto:";
cin>>cantidad_prod;
cout<<"Nombre del producto:";
cin>>nombre_prod;
if (cant_secciones==0)
{
cant_secciones++;
secciones=new seccion[cant_secciones];
secciones[0].Solicitar(nombre_sec,nombre_prod,cantidad_prod);

}
else
{
//************************ AQUI PARECE QUE ESTA EL ERROR, PERO NO LO LOCALIZO ****************
seccion *auxiliar=new seccion[cant_secciones];

int f;
for (f=0;f<cant_secciones;f++)
{
auxiliar[f]=secciones[f];
}

delete[] secciones;
cant_secciones++;
secciones=new seccion[cant_secciones];
for (int f=0;f<(cant_secciones-1);f++)
{
secciones[f]=auxiliar[f];
}
delete [] auxiliar;
secciones[cant_secciones-1].Solicitar(nombre_sec,nombre_prod,cantidad_prod);
//**********************************************************************************************
}


}
return;
}
void Copiar()
{
seccion *auxiliar=new seccion[3];
secciones=new seccion[3];
for (int f=0;f<3;f++)
{
auxiliar[f]=secciones[f];
}
}

void mostrar(void){

for (int f=0;f<cant_secciones;f++)
{
secciones[f].Mostrar();
}

}
void Borrar()
{
string nombreproducto;
cout<<"Escribe el nombre del producto a borrar:";
cin>>nombreproducto;
for (int f=0;f<cant_secciones;f++)
{
secciones[f].BuscarProducto(nombreproducto);
}
return;
}
void Ordenar()
{
seccion auxiliar;
for (int f=0;f<(cant_secciones-1);f++)
{
for (int g=(1+f);g<cant_secciones;g++)
{
if (secciones[f]>secciones[g])
{
auxiliar=secciones[f];
secciones[f]=secciones[g];
secciones[g]=auxiliar;

}
}

}
for (int f=0;f<cant_secciones;f++)
{
secciones[f].Ordenar(); //Aqui ordenamos los productos de cada seccion ya ordenada.
}
}
void Guardar()
{
ofstream fichero("datos.txt");
fichero<<cant_secciones<<endl;
for (int f=0;f<cant_secciones;f++)
{
fichero<<secciones[f].devolverseccion()<<endl;
fichero<<secciones[f].cantproductos()<<endl;
for(int g=0;g<secciones[f].cantproductos();g++) //con g recorremos cada producto.
{
fichero<<secciones[f].devolvernombreproducto(g)<<endl;
fichero<<secciones[f].devolvercantidadproducto(g)<<endl;
}
}


fichero.close();
}
void Cargar()
{
string nombreseccion;
int cantidadproducto;
string nombreproducto;
int numerodeproductos;
ifstream fichero("datos.txt");
fichero>>cant_secciones;
for (int f=0;f<cant_secciones;f++)
{
fichero>>nombreseccion;
fichero>>numerodeproductos;
fichero>>nombreproducto;
fichero>>cantidadproducto;
secciones[f].Solicitar(nombreseccion,nombreproducto,cantidadproducto);
for (int g=0;g<(numerodeproductos-1);g++)
{
fichero>>nombreproducto;
fichero>>cantidadproducto;
secciones[f].AltaProducto(nombreproducto,cantidadproducto);
}
}
fichero.close();
}




};
class menu{
private:
listaCompra listaCompras;
public:
menu()
{
//listaCompras.Cargar();
//listaCompras.mostrar();
}
~menu()
{
}
void Mostrar()
{
cout<<"Menu de opciones"<<endl<<"----------------"<<endl;
cout<<"(1) Nuevo producto"<<endl;
cout<<"(2) Borrar producto"<<endl;
cout<<"(3) Ordenar"<<endl;
cout<<"(4) Salir"<<endl;
cout<<"Elegir opcion:";
}
void Solicitar()
{

int opcion;

while (opcion!=4){

cin>>opcion;
switch (opcion)
{
case 1: //Nuevo producto
listaCompras.solicitar();
listaCompras.mostrar();
break;
case 2: //Borrar producto
listaCompras.Borrar();
listaCompras.mostrar();
break;
case 3:
listaCompras.Ordenar();
listaCompras.mostrar();
break;
case 4:
//listaCompras.Guardar();
return;
}
Mostrar();
}






}

};
int main()
{


menu menus;
cout<<"*----LA LISTA DE LA COMPRA----*"<<endl;
menus.Mostrar();
menus.Solicitar();
/*producto productos;
productos.Solicitar(20,"platano");
productos.Mostrar();
seccion secciones;
secciones.Solicitar("fruteria","platano",50);
secciones.Solicitar("fruteria","naranja",20);
secciones.Solicitar("fruteria","peras",80);
secciones.Solicitar("coches","ruedas",20); //mirar este error. Solo sale el nombre de la ultima seccion.

secciones.Mostrar();*/
//cout<<secciones.cantproductos();
//listaCompra a;
//a.Copiar();
getch();

return 0;
}
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com