Pregunta básica sobre POO

Iniciado por matver, 13 Agosto 2017, 20:47 PM

0 Miembros y 1 Visitante están viendo este tema.

matver

Mediante programación estructurada a este problema si pude resolverlo y me gustó la solución pero quiero resolver el mismo problema ahora mediante POO y tengo la siguiente duda: El problema es: En un local de ventas de frutas y verduras  por cada venta se tiene como dato:  el producto que se vendió, la cantidad vendida, y el monto de la venta.Y quiero saber cantidad de ventas realizadas, monto total de las ventas. Pienso resolverlo de la siguiente manera:Crear una clase llamada Venta con atributos: producto, cantidad, precio y luego un método para asignar valor a las variables, acumular las ventas y contar las ventas. Quiero saber si estoy bien orientado en la estructura de la solución.

matver

Aquí algo del código;
Código (cpp) [Seleccionar]

#include <math.h>
#include <iostream>

using namespace std;
class ventas{
     float montoventa;
     float producto;
     float cantidadkg;
     public:
            void ventas::asignar_val(float a, float b, float c){
                 montoventa= a;
                 producto= b;
                 cantidadkg=c;
                 }

};
     
      int main (){
          int a;
          float b;
          float c;
          float total;
         
          ventas obj_venta;
          cout<<"Ingrese monto de la venta"<<endl;
          cin>>a;
         cout <<"Ingrese tipo de producto:"<<endl;
         cin>>b;
         cout <<"Ingrese cantidad en kg:"<<endl;
         cin>>c;

obj_venta.asignar_val(a,b,c);
cout<<"final ingreso de datos\n" <<endl;
system ("pause");
}

ivancea96

Si solo es 1 venta, está bien.

Para hacer varias ventas, un vector de ventas podría servir.
Hazlo como creas (el problema completo), postealo de nuevo y vemos :p

Y por cierto, dentro de la clase no hace falta que pongas el "ventas::" antes de una función.

matver

#3
Ivan: Me gustaría que me cuestes un poco como utilizarías un arreglo  porque a mi me fue muy mal usando arreglos y no se usarlos todavia. Te pido que me cuentes si es posible como utilizarías tu un arreglo en este problema. Con respecto al problema creo que lo resolvi con lo que la POO tiene de programacion estructurada veras:
Como resolví esta vez puedo saber la cantidad de ventas por productos, y el monto total de las ventas por productos. 1 es papa, 2 lechugas , 3 manzanas. La pregunta es si esta soculión es aceptable teniendo en cuenta el paradigma POO. GRacias
Código (cpp) [Seleccionar]

#include <math.h>
#include <iostream>

using namespace std;
class ventas{
    float producto;
    float montoventa;
    float cantidadkg;
   
    public:
           void asignar_val(float a, float b, float c){
                producto= a;
                montoventa= b;
                cantidadkg=c;
                }

};
     
     int main (){
         int a;
         float b;
         float c;
        int contadorpapas =0,acumupapa=0;  
        int contadorlechuga=0,acumulechuga=0;
        int contadormanzanas=0,acumumanzanas=0;
        int clave=1234;
         float total;
         
         cout<<"Ingrese 1234 para entrar:"<<endl;
         cin>>clave;
         while (clave==1234){
         ventas obj_venta;
         
         cout<<"Tipo de producto"<<endl;
cin>>a;
cout <<"Ingrese monto venta:"<<endl;
cin>>b;
cout <<"Ingrese cantidad en kg:"<<endl;
cin>>c;
cout<<"para salir digite 1, para seguir digite 1234:"<<endl;
         cin>>clave;
obj_venta.asignar_val(a,b,c);

if ( a= 1){
   contadorpapas++;
   acumupapa=acumupapa+b;
}
if ( a = 2){
  contadorlechuga++;
  acumulechuga+acumulechuga+b;
 
  }
  if (a=3){
   contadormanzanas++;
   acumumanzanas=acumumanzanas+b;
           }
           
}
cout <<"cantidad de ventas papas:"<<contadorpapas<<endl;
cout <<"Monto total venta papas:"<<acumupapa<<endl;
system("pause");
}


ivancea96

No le estás dando ningún uso a obj_venta. Podrías quitarlo y todo iría igual.

Tu solución al problema es correcta. De todos modos, el problema es un pocoe scaso. Te propongo lo del array. El tema del array serviría para saber cuantas ventas individuales se han hecho. Así harías uso de tu clase y, por qué no, de la clase "vector", por ejemplo.

La clase vector no sé si la usaste, en cualquier caso,e s muy simple. Es un array redimensionable:

Código (cpp) [Seleccionar]
vector<Venta> ventas; // Yo cambiaría el nombre de la clase a singular
Venta nuevaVenta;
// Asignar datos a nuevaVenta

ventas.push_back(nuevaVenta);

for(int i=0; i<ventas.size(); i++){
    cout << ventas[i].getProducto() << endl; // Recuerda hacer getters
}


Luego, si quieres ver cuantos hay de cada, tendrías que recorrer el array sumando. Es cierto que es más eficiente del modo que lo tienes hecho, con variables separadas, pero esto da más juego, ya que estás con POO. (También puedes mantener las variables de cuenta)

En cualquier caso, la razón de POO es esa, servir cuando se la necesita. En el código que diste ahora, no se la necesita.