elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [APORTE] Programa para una tienda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [APORTE] Programa para una tienda  (Leído 1,785 veces)
Mario Olivera

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
[APORTE] Programa para una tienda
« en: 27 Abril 2015, 04:34 am »

 Hola gente, les dejo un código fuente que hice en C++, es un programita sencillo, pero para el que esté estudiando el tema de la separación de la interfaz de la implementación usando un .h y dos .cpp, les va a ayudar, cualquier error o algo avisen.

PD: use el system("cls") porque la idea es mostrar un poco como se maneja la sepacion de la interfaz de la implementación, no como es la manera correcta de limpiar la consola xD SALUDOS!

main.cpp
Código
  1. #include <iostream>
  2. using std::cin;
  3.  
  4. #include "cabezal.h"
  5.  
  6. int main()
  7. {
  8.  
  9. programa llamador;
  10. llamador.inicio();
  11. cin.get();
  12. return 0;
  13. }

cabezal.h
Código
  1. class programa
  2. {
  3. public:
  4. //FUNCIONES MIENBRO
  5. void inicio();
  6. void mostrarDatos();
  7. void mostrarMenu();
  8. void comprobarOption(int);
  9. void nuevoProducto(int);
  10. };
cabezal.cpp
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. using std::cin;
  5.  
  6. #include "cabezal.h"
  7.  
  8. //VARIABLES
  9. int cantidadDeProductos;
  10. int optionNuevoProducto;
  11. int totalProductos= 0;
  12. double precioProducto;
  13. double total = 0;
  14.  
  15. void programa::inicio()
  16. {
  17. mostrarDatos();
  18. mostrarMenu();
  19. }
  20. void programa::mostrarDatos()
  21. {
  22. cout <<endl <<endl;
  23. cout <<"\t. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  ."
  24. <<"\n\t.                   SUPER-M V 1.0 FIX 0                        ."
  25. <<"\n\t.                                                              ."
  26. <<"\n\t.  DP: MARIO.OLIVERA96@GMAIL.COM                               ."
  27. <<"\n\t.  SINCE: 2015                                                 ."
  28. <<"\n\t  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  "
  29. <<endl <<endl <<endl;
  30. }
  31. void programa::mostrarMenu()
  32. {
  33. int option;
  34. cout <<"MENU" <<endl <<endl;
  35. cout <<"(1) Nuevo Producto\n(2) Terminar compra\n\n";
  36. cout <<"Option: ";
  37. cin >> option;
  38. cout <<"\a";
  39. comprobarOption(option);
  40. }
  41. void programa::comprobarOption(int option)
  42. {
  43.  
  44. switch (option)
  45. {
  46. case 1:
  47. system("cls");
  48. cout <<"Precio: ";
  49. cin  >> precioProducto;
  50. cout <<"\a\nCantidad: ";
  51. cin  >> cantidadDeProductos;
  52. cout <<"\a\n(1)LISTO\t(2) ATRAS\nOption: ";
  53. cin  >> optionNuevoProducto;
  54. cout <<"\a";
  55. nuevoProducto(optionNuevoProducto);
  56.  
  57.  
  58.  
  59.  
  60. break;
  61.  
  62. case 2:
  63. system("cls");
  64. if (totalProductos <= 0)
  65. {
  66. cout <<"COMPRA TERMINADA.\n\nCantidad de productos: 0\n\nTotal a pagar: $0.00"<<endl;
  67. cin.get();
  68. cin.get();
  69. system("cls");
  70. inicio();
  71. }
  72. else
  73. {
  74. cout <<"COMPRA TERMINADA.\n\nCantidad de productos: " <<totalProductos <<"\n\nTotal a pagar: $" <<total <<endl;
  75. cin.get();
  76. cin.get();
  77. total=0;
  78. totalProductos=0;
  79. system("cls");
  80. programa();
  81. }
  82. break;
  83. default:
  84. system("cls");
  85. cout <<"\nVALOR INVALIDO!\nPRESIONE ENTER.\n";
  86. cin.get();
  87. cin.get();
  88. system("cls");
  89. inicio();
  90. break;
  91. cout <"ja!\n";
  92. cin.get();
  93. }
  94. }
  95. void programa::nuevoProducto(int optionNuevoProducto)
  96. {
  97.  
  98. switch (optionNuevoProducto)
  99. {
  100. case 1:
  101. if ((precioProducto >= 0) && (cantidadDeProductos >= 0))
  102. {
  103. totalProductos+= cantidadDeProductos;
  104. total+= cantidadDeProductos * precioProducto;
  105. cout<<totalProductos <<" "<<total;
  106. cin.get();
  107. system("cls");
  108. inicio();
  109. }
  110.  
  111. else
  112. {
  113. cout <<"\nVALORES INVALIDOS!\nPRESIONE ENTER\n";
  114. cin.get();
  115. cin.get();
  116. comprobarOption(1);
  117. }
  118.  
  119. break;
  120.  
  121. case 2:
  122. system("cls");
  123. inicio();
  124. break;
  125. }
  126. }


« Última modificación: 27 Abril 2015, 16:15 pm por Mario Olivera » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [APORTE] Programa para una tienda
« Respuesta #1 en: 27 Abril 2015, 09:05 am »

Buenos días.

Si me aceptas la crítica:

1. La lógica de tu "programa" no debería residir en un constructor. Eso es, por decirlo de forma suave, una aberración. Es mucho mejor tener un método público en "programa" para realizar esta tarea.

2. Separas interfaz de implementación... pero ya está. Creo que el ejemplo sería más útil si separases además la lógica de presentación de la lógica de negocio.

3. Llamar al constructor de la clase desde un miembro sin crear una instancia nueva es otra aberración consecuencia directa de lo comentado en el punto 1. Otro motivo más para cambiar eso.

4. Si una función miembro de una clase no modifica el estado del objeto lo suyo es que sea etiquetada como "const". Si además resulta que dicha función no accede al estado del objeto (las variables miembro de la clase), lo lógico es que dicha función fuese etiquetada como "static". Por cierto, no puedes usar "static" y "const" a la vez en la misma función miembro (básicamente porque una función static no puede acceder, y por tanto modificar, a nada que no sea estático... de hecho en esta función no existirá el puntero implícito "this").

Te animo a seguir mejorando el ejemplo ;)

Un saludo


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines