Advertisement
Guest User

Tienda

a guest
Jan 17th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>
  4. #include <fstream>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8.  
  9. const int NUM_PRODUCTOS = 10;
  10. const int MAX_CESTA = 5;
  11.  
  12. typedef struct{
  13.     string pCodigo;
  14.     string pDescripcion;//(nombre)
  15.     double pPrecio;
  16.     bool pOferta;
  17. }tProductos;
  18. typedef tProductos tpArray[NUM_PRODUCTOS];
  19.  
  20. typedef struct{
  21.     string cCodigo;
  22.     int cUnidades;
  23. }tCesta;
  24. typedef tCesta tcArray[MAX_CESTA];
  25.  
  26. typedef struct{
  27.     tpArray productos;
  28.     tcArray cesta;
  29.     int pContador = 0;
  30.     int cContador = 0;
  31. }tLista;
  32.  
  33. int menu(tLista &lista);
  34. bool cargarProductos(ifstream &productos, tLista &lista);
  35.  
  36. void anadirCesta(tLista &lista);
  37. void mostrarProductos(tLista &lista);
  38. int llenarCesta(tLista &lista);
  39. bool estaEnCatalogo(tLista &lista, string codigo);
  40. bool estaEnCesta(tLista &lista, string codigo);
  41. int posCesta(tLista &lista, string codigo);
  42.  
  43. int confirmarPedido(tLista &lista);
  44. double precioLinea(tLista &lista, string codigo, int unidades);
  45.  
  46. int main()
  47. {
  48.     tLista lista;
  49.     ifstream productos;
  50.     if(cargarProductos(productos, lista))
  51.         menu(lista);
  52.     else
  53.         cout << "[ERROR] No se pudo cargar los productos.";
  54.     return 0;
  55. }
  56.  
  57. int menu(tLista &lista)
  58. {
  59.     int operacion;
  60.     do
  61.     {
  62.         cout << "|-----------BIENVENIDO A HIPERCOR XD-----------------|" << endl;
  63.         cout << "- Que operacion desea realizar?" << endl;
  64.         cout << "--> 1. Anadir productos a su cesta." << endl;
  65.         cout << "--> 2. Confirmar Pedido." << endl;
  66.         cout << "--> 0. Salir." << endl;
  67.         cin >> operacion;
  68.         while(operacion < 0 || operacion > 2)
  69.         {
  70.             cout << "Operacion invalida, introduzca una valida: ";
  71.             cin >> operacion;
  72.         }
  73.  
  74.         if(operacion != 0)
  75.         {
  76.             switch(operacion)
  77.             {
  78.                 case 1: anadirCesta(lista);
  79.                     break;
  80.                 case 2: confirmarPedido(lista);
  81.                     break;
  82.             }
  83.         }
  84.     }while(operacion != 0);
  85.     return 0;
  86. }
  87.  
  88. bool cargarProductos(ifstream &productos, tLista &lista)
  89. {
  90.     bool success = false;
  91.     char aux;
  92.     //---------------Carga de productos desde el archivo------------------------
  93.     productos.open("productos.txt");
  94.     if(productos.is_open())
  95.     {
  96.         for(int i = 0; i<NUM_PRODUCTOS; i++)
  97.         {
  98.             productos >> lista.productos[i].pCodigo;
  99.             //productos.get(aux);//cojemos espacios
  100.             productos >> lista.productos[i].pPrecio;
  101.             //productos.get(aux);//cojemos espacios
  102.             productos >> lista.productos[i].pOferta;
  103.             //productos >> lista.productos[i].pDescripcion;
  104.             productos.get(aux);
  105.             getline(productos, lista.productos[i].pDescripcion);
  106.             lista.pContador++;
  107.         }
  108.         success = true;
  109.         productos.close();
  110.     }
  111.     else
  112.     {
  113.         //cout << "[ERROR] No se pudo encontrar el archivo con el catalogo.";
  114.         success = false;
  115.     }
  116.     return success;
  117. }
  118.  
  119. void anadirCesta(tLista &lista)
  120. {
  121.     mostrarProductos(lista);
  122.     llenarCesta(lista);
  123. }
  124.  
  125. void mostrarProductos(tLista &lista)
  126. {
  127.     string sOferta;
  128.     // mostramos el catalogo
  129.     cout << "CODIGO" << "       " << "DESCRIPCION" << "     " << "PRECIO" << endl;
  130.     cout << endl;
  131.     for(int i = 0; i<NUM_PRODUCTOS; i++)
  132.     {
  133.         cout << left << setw(16) << lista.productos[i].pCodigo;
  134.         cout << left << setw(24) << lista.productos[i].pDescripcion;
  135.         cout << left << setw(4) << lista.productos[i].pPrecio << " ";
  136.         if(lista.productos[i].pOferta == 1)
  137.             sOferta = "OFERTA!";
  138.         else
  139.             sOferta = " ";
  140.         //cout << lista.productos[i].pOferta << " ";
  141.         cout << sOferta << endl;
  142.     }
  143. }
  144.  
  145. int llenarCesta(tLista &lista)
  146. {
  147.     string codigo;
  148.     int cantidad, posicion;
  149.     char opcion = "s" || "n";
  150.  
  151.     cout << endl;
  152.     cout << "|-------------ELIJA LOS PRODUCTOS QUE QUIERE ANADIR A SU CESTA----------|" << endl;
  153.     cout << "--> Introduzca un codigo de producto, a continuacion, su cantidad." << endl;
  154.     cout << "--> Introduzca 'XXX' sin comillas para terminar de llenar su cesta." << endl;
  155.     do{
  156.         //cout << lista.cContador << endl;
  157.         cout << "Codigo de producto: ";
  158.         cin >> codigo;
  159.         if(estaEnCatalogo(lista, codigo) && codigo != "XXX")
  160.         {
  161.             cout << "Unidades: ";
  162.             cin >> cantidad;
  163.             cout << endl;
  164.             if(estaEnCesta(lista, codigo))
  165.             {
  166.                 posicion = posCesta(lista, codigo);
  167.                 cout << "En la cesta hay " << lista.cesta[posicion].cUnidades << " del producto seleccionado" << endl;
  168.                 cout << "Desea incluir las unidades indicadas? (S/N): ";
  169.                 cin >> opcion;
  170.                 cout << endl;
  171.                 if(opcion == 'S' || opcion == 's')
  172.                 {
  173.                     //lista.cesta[lista.cContador].cCodigo = codigo;
  174.                     lista.cesta[posicion].cUnidades = lista.cesta[posicion].cUnidades+cantidad;
  175.                 }
  176.             }
  177.             else
  178.             {
  179.                 //añadimos al array cesta lo que queremos
  180.                 lista.cesta[lista.cContador].cCodigo = codigo;
  181.                 lista.cesta[lista.cContador].cUnidades = cantidad;
  182.                 lista.cContador++;
  183.             }
  184.         }
  185.         else if(codigo != "XXX")
  186.         {
  187.             cout << endl;
  188.             cout << " El codigo indicado es erroneo" << endl;
  189.             cout << endl;
  190.         }
  191.     }while(codigo != "XXX" && lista.cContador < MAX_CESTA);
  192.     return 0;
  193. }
  194.  
  195. bool estaEnCatalogo(tLista &lista, string codigo)
  196. {
  197.     bool esta = false;
  198.     for(int i = 0; i<NUM_PRODUCTOS; i++)
  199.     {
  200.         if(lista.productos[i].pCodigo == codigo) esta = true;
  201.     }
  202.     return esta;
  203. }
  204.  
  205. bool estaEnCesta(tLista &lista, string codigo)
  206. {
  207.     bool esta = false;
  208.     for(int i = 0; i<MAX_CESTA; i++)
  209.     {
  210.         if(lista.cesta[i].cCodigo == codigo) esta = true;
  211.     }
  212.     return esta;
  213. }
  214.  
  215. int posCesta(tLista &lista, string codigo)
  216. {
  217.     int pos = 0;
  218.     for(int i = 0; i<MAX_CESTA; i++)
  219.     {
  220.         if(lista.cesta[i].cCodigo == codigo)
  221.             pos = i;
  222.     }
  223.     return pos;
  224. }
  225.  
  226.  
  227.  
  228. int confirmarPedido(tLista &lista)
  229. {
  230.     ofstream compra;
  231.     double precios, totPrecio;
  232.     compra.open("compras.txt");
  233.     for(int i = 0; i<lista.cContador; i++)
  234.     {
  235.         precios = precioLinea(lista, lista.cesta[i].cCodigo, lista.cesta[i].cUnidades);
  236.         compra << lista.cesta[i].cCodigo << "   " << lista.cesta[i].cUnidades << "  " << precios << endl;
  237.         totPrecio = precios + totPrecio;
  238.         /*cout << lista.cesta[i].cCodigo << " ";
  239.         cout << lista.cesta[i].cUnidades;
  240.         cout << endl;*/
  241.     }
  242.     compra << "XXX";
  243.     compra.close();
  244.     cout << endl;
  245.     cout << "Importe Total: " << totPrecio;
  246.     cout << endl;
  247.     cout << endl;
  248.     return 0;
  249. }
  250.  
  251. double precioLinea(tLista &lista, string codigo, int unidades)
  252. {
  253.     double precio;
  254.     for(int i = 0; i<NUM_PRODUCTOS; i++)
  255.     {
  256.         if(lista.productos[i].pCodigo == codigo)
  257.         {
  258.             if(lista.productos[i].pOferta)
  259.             {
  260.                 precio = round(unidades/2.0) * lista.productos[i].pPrecio;
  261.             }
  262.             else
  263.             {
  264.                 precio = unidades * lista.productos[i].pPrecio;
  265.             }
  266.         }
  267.     }
  268.     return precio;
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement