Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: matver en 13 Agosto 2017, 20:47 pm



Título: Pregunta básica sobre POO
Publicado por: matver en 13 Agosto 2017, 20:47 pm
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.


Título: Re: Pregunta básica sobre POO
Publicado por: matver en 13 Agosto 2017, 21:14 pm
Aquí algo del código;
Código
  1. #include <math.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5. class ventas{
  6.     float montoventa;
  7.     float producto;
  8.     float cantidadkg;
  9.     public:
  10.            void ventas::asignar_val(float a, float b, float c){
  11.                 montoventa= a;
  12.                 producto= b;
  13.                 cantidadkg=c;
  14.                 }
  15.  
  16. };
  17.  
  18.      int main (){
  19.          int a;
  20.          float b;
  21.          float c;
  22.          float total;
  23.  
  24.          ventas obj_venta;
  25.          cout<<"Ingrese monto de la venta"<<endl;
  26.          cin>>a;
  27.         cout <<"Ingrese tipo de producto:"<<endl;
  28.         cin>>b;
  29.         cout <<"Ingrese cantidad en kg:"<<endl;
  30.         cin>>c;
  31.  
  32. obj_venta.asignar_val(a,b,c);
  33. cout<<"final ingreso de datos\n" <<endl;
  34. system ("pause");
  35. }
  36.  


Título: Re: Pregunta básica sobre POO
Publicado por: ivancea96 en 13 Agosto 2017, 23:31 pm
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.


Título: Re: Pregunta básica sobre POO
Publicado por: matver en 14 Agosto 2017, 00:14 am
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
  1. #include <math.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5. class ventas{
  6.     float producto;
  7.     float montoventa;
  8.     float cantidadkg;
  9.  
  10.     public:
  11.            void asignar_val(float a, float b, float c){
  12.                 producto= a;
  13.                 montoventa= b;
  14.                 cantidadkg=c;
  15.                 }
  16.  
  17. };
  18.  
  19.      int main (){
  20.          int a;
  21.          float b;
  22.          float c;
  23.         int contadorpapas =0,acumupapa=0;  
  24.         int contadorlechuga=0,acumulechuga=0;
  25.         int contadormanzanas=0,acumumanzanas=0;
  26.         int clave=1234;
  27.          float total;
  28.  
  29.          cout<<"Ingrese 1234 para entrar:"<<endl;
  30.          cin>>clave;
  31.          while (clave==1234){
  32.          ventas obj_venta;
  33.  
  34.          cout<<"Tipo de producto"<<endl;
  35. cin>>a;
  36. cout <<"Ingrese monto venta:"<<endl;
  37. cin>>b;
  38. cout <<"Ingrese cantidad en kg:"<<endl;
  39. cin>>c;
  40. cout<<"para salir digite 1, para seguir digite 1234:"<<endl;
  41.          cin>>clave;
  42. obj_venta.asignar_val(a,b,c);
  43.  
  44. if ( a= 1){
  45.    contadorpapas++;
  46.    acumupapa=acumupapa+b;
  47. }
  48. if ( a = 2){
  49.   contadorlechuga++;
  50.   acumulechuga+acumulechuga+b;
  51.  
  52.   }
  53.   if (a=3){
  54.    contadormanzanas++;
  55.    acumumanzanas=acumumanzanas+b;
  56.            }
  57.  
  58. }
  59. cout <<"cantidad de ventas papas:"<<contadorpapas<<endl;
  60. cout <<"Monto total venta papas:"<<acumupapa<<endl;
  61. system("pause");
  62. }
  63.  
  64.  


Título: Re: Pregunta básica sobre POO
Publicado por: ivancea96 en 14 Agosto 2017, 00:46 am
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
  1. vector<Venta> ventas; // Yo cambiaría el nombre de la clase a singular
  2. Venta nuevaVenta;
  3. // Asignar datos a nuevaVenta
  4.  
  5. ventas.push_back(nuevaVenta);
  6.  
  7. for(int i=0; i<ventas.size(); i++){
  8.    cout << ventas[i].getProducto() << endl; // Recuerda hacer getters
  9. }

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.