Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <fstream>
- #include <cmath>
- using namespace std;
- const int NUM_PRODUCTOS = 10;
- const int MAX_CESTA = 5;
- typedef struct{
- string pCodigo;
- string pDescripcion;//(nombre)
- double pPrecio;
- bool pOferta;
- }tProductos;
- typedef tProductos tpArray[NUM_PRODUCTOS];
- typedef struct{
- string cCodigo;
- int cUnidades;
- }tCesta;
- typedef tCesta tcArray[MAX_CESTA];
- typedef struct{
- tpArray productos;
- tcArray cesta;
- int pContador = 0;
- int cContador = 0;
- }tLista;
- int menu(tLista &lista);
- bool cargarProductos(ifstream &productos, tLista &lista);
- void anadirCesta(tLista &lista);
- void mostrarProductos(tLista &lista);
- int llenarCesta(tLista &lista);
- bool estaEnCatalogo(tLista &lista, string codigo);
- bool estaEnCesta(tLista &lista, string codigo);
- int posCesta(tLista &lista, string codigo);
- int confirmarPedido(tLista &lista);
- double precioLinea(tLista &lista, string codigo, int unidades);
- int main()
- {
- tLista lista;
- ifstream productos;
- if(cargarProductos(productos, lista))
- menu(lista);
- else
- cout << "[ERROR] No se pudo cargar los productos.";
- return 0;
- }
- int menu(tLista &lista)
- {
- int operacion;
- do
- {
- cout << "|-----------BIENVENIDO A HIPERCOR XD-----------------|" << endl;
- cout << "- Que operacion desea realizar?" << endl;
- cout << "--> 1. Anadir productos a su cesta." << endl;
- cout << "--> 2. Confirmar Pedido." << endl;
- cout << "--> 0. Salir." << endl;
- cin >> operacion;
- while(operacion < 0 || operacion > 2)
- {
- cout << "Operacion invalida, introduzca una valida: ";
- cin >> operacion;
- }
- if(operacion != 0)
- {
- switch(operacion)
- {
- case 1: anadirCesta(lista);
- break;
- case 2: confirmarPedido(lista);
- break;
- }
- }
- }while(operacion != 0);
- return 0;
- }
- bool cargarProductos(ifstream &productos, tLista &lista)
- {
- bool success = false;
- char aux;
- //---------------Carga de productos desde el archivo------------------------
- productos.open("productos.txt");
- if(productos.is_open())
- {
- for(int i = 0; i<NUM_PRODUCTOS; i++)
- {
- productos >> lista.productos[i].pCodigo;
- //productos.get(aux);//cojemos espacios
- productos >> lista.productos[i].pPrecio;
- //productos.get(aux);//cojemos espacios
- productos >> lista.productos[i].pOferta;
- //productos >> lista.productos[i].pDescripcion;
- productos.get(aux);
- getline(productos, lista.productos[i].pDescripcion);
- lista.pContador++;
- }
- success = true;
- productos.close();
- }
- else
- {
- //cout << "[ERROR] No se pudo encontrar el archivo con el catalogo.";
- success = false;
- }
- return success;
- }
- void anadirCesta(tLista &lista)
- {
- mostrarProductos(lista);
- llenarCesta(lista);
- }
- void mostrarProductos(tLista &lista)
- {
- string sOferta;
- // mostramos el catalogo
- cout << "CODIGO" << " " << "DESCRIPCION" << " " << "PRECIO" << endl;
- cout << endl;
- for(int i = 0; i<NUM_PRODUCTOS; i++)
- {
- cout << left << setw(16) << lista.productos[i].pCodigo;
- cout << left << setw(24) << lista.productos[i].pDescripcion;
- cout << left << setw(4) << lista.productos[i].pPrecio << " ";
- if(lista.productos[i].pOferta == 1)
- sOferta = "OFERTA!";
- else
- sOferta = " ";
- //cout << lista.productos[i].pOferta << " ";
- cout << sOferta << endl;
- }
- }
- int llenarCesta(tLista &lista)
- {
- string codigo;
- int cantidad, posicion;
- char opcion = "s" || "n";
- cout << endl;
- cout << "|-------------ELIJA LOS PRODUCTOS QUE QUIERE ANADIR A SU CESTA----------|" << endl;
- cout << "--> Introduzca un codigo de producto, a continuacion, su cantidad." << endl;
- cout << "--> Introduzca 'XXX' sin comillas para terminar de llenar su cesta." << endl;
- do{
- //cout << lista.cContador << endl;
- cout << "Codigo de producto: ";
- cin >> codigo;
- if(estaEnCatalogo(lista, codigo) && codigo != "XXX")
- {
- cout << "Unidades: ";
- cin >> cantidad;
- cout << endl;
- if(estaEnCesta(lista, codigo))
- {
- posicion = posCesta(lista, codigo);
- cout << "En la cesta hay " << lista.cesta[posicion].cUnidades << " del producto seleccionado" << endl;
- cout << "Desea incluir las unidades indicadas? (S/N): ";
- cin >> opcion;
- cout << endl;
- if(opcion == 'S' || opcion == 's')
- {
- //lista.cesta[lista.cContador].cCodigo = codigo;
- lista.cesta[posicion].cUnidades = lista.cesta[posicion].cUnidades+cantidad;
- }
- }
- else
- {
- //añadimos al array cesta lo que queremos
- lista.cesta[lista.cContador].cCodigo = codigo;
- lista.cesta[lista.cContador].cUnidades = cantidad;
- lista.cContador++;
- }
- }
- else if(codigo != "XXX")
- {
- cout << endl;
- cout << " El codigo indicado es erroneo" << endl;
- cout << endl;
- }
- }while(codigo != "XXX" && lista.cContador < MAX_CESTA);
- return 0;
- }
- bool estaEnCatalogo(tLista &lista, string codigo)
- {
- bool esta = false;
- for(int i = 0; i<NUM_PRODUCTOS; i++)
- {
- if(lista.productos[i].pCodigo == codigo) esta = true;
- }
- return esta;
- }
- bool estaEnCesta(tLista &lista, string codigo)
- {
- bool esta = false;
- for(int i = 0; i<MAX_CESTA; i++)
- {
- if(lista.cesta[i].cCodigo == codigo) esta = true;
- }
- return esta;
- }
- int posCesta(tLista &lista, string codigo)
- {
- int pos = 0;
- for(int i = 0; i<MAX_CESTA; i++)
- {
- if(lista.cesta[i].cCodigo == codigo)
- pos = i;
- }
- return pos;
- }
- int confirmarPedido(tLista &lista)
- {
- ofstream compra;
- double precios, totPrecio;
- compra.open("compras.txt");
- for(int i = 0; i<lista.cContador; i++)
- {
- precios = precioLinea(lista, lista.cesta[i].cCodigo, lista.cesta[i].cUnidades);
- compra << lista.cesta[i].cCodigo << " " << lista.cesta[i].cUnidades << " " << precios << endl;
- totPrecio = precios + totPrecio;
- /*cout << lista.cesta[i].cCodigo << " ";
- cout << lista.cesta[i].cUnidades;
- cout << endl;*/
- }
- compra << "XXX";
- compra.close();
- cout << endl;
- cout << "Importe Total: " << totPrecio;
- cout << endl;
- cout << endl;
- return 0;
- }
- double precioLinea(tLista &lista, string codigo, int unidades)
- {
- double precio;
- for(int i = 0; i<NUM_PRODUCTOS; i++)
- {
- if(lista.productos[i].pCodigo == codigo)
- {
- if(lista.productos[i].pOferta)
- {
- precio = round(unidades/2.0) * lista.productos[i].pPrecio;
- }
- else
- {
- precio = unidades * lista.productos[i].pPrecio;
- }
- }
- }
- return precio;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement