Exámenes Resueltos FP - Primer Semestre
Para uso exclusivo con fines de estudio. Se prohíbe su uso para entregas calificables y/o uso comercial.
This commit is contained in:
@ -0,0 +1,255 @@
|
||||
//Examen Febrero 2015 - Grupos D, G y H
|
||||
//Fernando M<>ndez Torrubiano
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
using namespace std;
|
||||
|
||||
|
||||
//Constantes:
|
||||
const int NUM_PROD = 5;
|
||||
const int NUM_PED = 3;
|
||||
|
||||
//Tipos:
|
||||
typedef struct tProducto {
|
||||
string codigo;
|
||||
string descripcion;
|
||||
float precio;
|
||||
bool oferta;
|
||||
};
|
||||
typedef tProducto tProductos[NUM_PROD];
|
||||
typedef struct tListaProductos {
|
||||
tProductos producto;
|
||||
int contador;
|
||||
};
|
||||
|
||||
typedef struct tCesta {
|
||||
string nombre;
|
||||
int unidades;
|
||||
float precioProducto;
|
||||
};
|
||||
typedef tCesta tCestas[NUM_PED];
|
||||
typedef struct tPedidos{
|
||||
tCestas cesta;
|
||||
int contador;
|
||||
};
|
||||
|
||||
|
||||
//Funciones:
|
||||
void inicia(tListaProductos&, tPedidos&);
|
||||
bool cargar(tListaProductos&);
|
||||
void ejecutarMenu(tListaProductos&, tPedidos&);
|
||||
int menu();
|
||||
void muestraProductos(tListaProductos&);
|
||||
string tBoolToString(tListaProductos&, const int&);
|
||||
void crearCesta(tListaProductos&, tPedidos&);
|
||||
bool buscarProducto(const tListaProductos&, const tPedidos&);
|
||||
bool procesaCesta(tListaProductos&, tPedidos&);
|
||||
float total(tListaProductos&, tPedidos&, const int&, float&);
|
||||
|
||||
int main() {
|
||||
tListaProductos productos;
|
||||
tPedidos pedidos;
|
||||
|
||||
inicia(productos, pedidos);
|
||||
if (cargar(productos)) {
|
||||
ejecutarMenu(productos, pedidos);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void inicia(tListaProductos& productos, tPedidos& pedidos) {
|
||||
productos.contador = 0;
|
||||
pedidos.contador = 0;
|
||||
for (int i = 0; i < NUM_PROD; i++){
|
||||
productos.producto[i].codigo = "";
|
||||
productos.producto[i].descripcion = "";
|
||||
productos.producto[i].precio = 0;
|
||||
productos.producto[i].oferta = false;
|
||||
if (i < NUM_PED) {
|
||||
pedidos.cesta[i].nombre = "";
|
||||
pedidos.cesta[i].unidades = 0;
|
||||
pedidos.cesta[i].precioProducto = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool cargar(tListaProductos& productos) {
|
||||
bool carga = false;
|
||||
ifstream archivo;
|
||||
|
||||
archivo.open("productos.txt");
|
||||
if (!archivo.is_open()) {
|
||||
cout << "Error al cargar la lista de productos." << endl;
|
||||
carga = false;
|
||||
}
|
||||
else {
|
||||
archivo >> productos.producto[productos.contador].codigo;
|
||||
while ((productos.producto[productos.contador].codigo != "XXX") && (productos.contador < NUM_PROD)) {
|
||||
archivo >> productos.producto[productos.contador].precio;
|
||||
archivo >> productos.producto[productos.contador].oferta;
|
||||
getline(archivo, productos.producto[productos.contador].descripcion);
|
||||
productos.contador++;
|
||||
archivo >> productos.producto[productos.contador].codigo;
|
||||
}
|
||||
carga = true;
|
||||
}
|
||||
archivo.close();
|
||||
|
||||
return carga;
|
||||
}
|
||||
|
||||
void ejecutarMenu(tListaProductos& productos, tPedidos& pedidos) {
|
||||
int opc = 1;
|
||||
|
||||
while (opc != 0) {
|
||||
muestraProductos(productos);
|
||||
opc = menu();
|
||||
switch (opc){
|
||||
case 0: break;
|
||||
case 1: crearCesta(productos, pedidos); break;
|
||||
case 2: procesaCesta(productos, pedidos); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
system("cls");
|
||||
}
|
||||
}
|
||||
|
||||
int menu() {
|
||||
int opc = 0;
|
||||
|
||||
cout << endl << setw(40) << setfill('=') << "\n" << setw(char(0));
|
||||
cout << "1.-A<>adir productos a la cesta." << endl;
|
||||
cout << "2.-Confirmar pedido." << endl;
|
||||
cout << "0.-SALIR." << endl;
|
||||
cout << setw(40) << setfill('=') << "\n" << setw(char(0));
|
||||
|
||||
do {
|
||||
cout << "Introduzca una opcion: ";
|
||||
cin >> opc;
|
||||
} while (opc < 0 || opc > 2);
|
||||
|
||||
return opc;
|
||||
}
|
||||
void muestraProductos(tListaProductos& productos) {
|
||||
cout << setw(5) << right << "CODIGO"
|
||||
<< setw(25) << "DESCRIPCION"
|
||||
<< setw(15) << "PRECIO"
|
||||
<< setw(15) << "OFERTA" << endl;
|
||||
cout << setw(70) << setfill('=') << "\n" << setfill(char(0));
|
||||
for (int i = 0; i < productos.contador; i++){
|
||||
cout << setw(5) << right << productos.producto[i].codigo
|
||||
<< setw(25) << productos.producto[i].descripcion
|
||||
<< setw(15) << productos.producto[i].precio
|
||||
<< setw(15) << tBoolToString(productos, i) << endl;
|
||||
}
|
||||
cout << setw(70) << setfill('=') << "\n" << setfill(char(0));
|
||||
}
|
||||
|
||||
string tBoolToString(tListaProductos& productos, const int& pos) {
|
||||
string oferta;
|
||||
switch (productos.producto[pos].oferta){
|
||||
case false: oferta = "NO"; break;
|
||||
case true: oferta = "SI"; break;
|
||||
}
|
||||
return oferta;
|
||||
}
|
||||
|
||||
void crearCesta(tListaProductos& productos, tPedidos& pedidos) {
|
||||
int i = 0;
|
||||
|
||||
while ((pedidos.contador < NUM_PED) && (pedidos.cesta[pedidos.contador].nombre != "XXX")) {
|
||||
cout << "Introduzca un codigo de producto: ";
|
||||
cin >> pedidos.cesta[pedidos.contador].nombre;
|
||||
while (!buscarProducto(productos, pedidos)) {
|
||||
cout << "Producto no encontrado. Introduzca otro codigo: ";
|
||||
cin >> pedidos.cesta[pedidos.contador].nombre;
|
||||
}
|
||||
if (pedidos.cesta[pedidos.contador].nombre != "XXX") {
|
||||
cout << "Introduzca un cantidad de productos: ";
|
||||
cin >> pedidos.cesta[pedidos.contador].unidades;
|
||||
pedidos.contador++;
|
||||
}
|
||||
}
|
||||
cout << "Cesta llena." << endl;
|
||||
system("PAUSE");
|
||||
}
|
||||
|
||||
bool buscarProducto(const tListaProductos& productos, const tPedidos& pedidos) {
|
||||
bool encontrado = false;
|
||||
int i = 0;
|
||||
|
||||
while ((!encontrado) && (i < productos.contador)) {
|
||||
if ((pedidos.cesta[pedidos.contador].nombre == productos.producto[i].codigo) || (pedidos.cesta[pedidos.contador].nombre == "XXX")) {
|
||||
encontrado = true;
|
||||
}
|
||||
else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
return encontrado;
|
||||
}
|
||||
|
||||
bool procesaCesta(tListaProductos& productos, tPedidos& pedidos) {
|
||||
bool procesado = false;
|
||||
ofstream archivo;
|
||||
float totalPrecio = 0;
|
||||
|
||||
archivo.open("ticket.txt");
|
||||
if (!archivo.is_open()) {
|
||||
cout << "Error al procesar el pedido." << endl;
|
||||
procesado = false;
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < pedidos.contador; i++){
|
||||
archivo << pedidos.cesta[i].nombre << " x "
|
||||
<< pedidos.cesta[i].unidades << " = ";
|
||||
totalPrecio = total(productos, pedidos, i, totalPrecio);
|
||||
archivo << pedidos.cesta[i].precioProducto << endl;
|
||||
}
|
||||
archivo << "Total compra: " << totalPrecio << endl;
|
||||
procesado = true;
|
||||
}
|
||||
archivo.close();
|
||||
|
||||
if(procesado == true){
|
||||
cout << "Precio total: " << totalPrecio << endl;
|
||||
}
|
||||
else{
|
||||
cout << "Intentelo de nuevo." << endl;
|
||||
}
|
||||
|
||||
system("PAUSE");
|
||||
return procesado;
|
||||
}
|
||||
|
||||
float total(tListaProductos& productos, tPedidos& pedidos, const int& pos, float& total) {
|
||||
int j = 0;
|
||||
bool encontrado = false;
|
||||
float descuento = 0;
|
||||
|
||||
while ((!encontrado) && (j < productos.contador)) {
|
||||
if (pedidos.cesta[pos].nombre == productos.producto[j].codigo) {
|
||||
if (productos.producto[j].oferta) {
|
||||
descuento = (productos.producto[j].precio * 0.15);
|
||||
total += (productos.producto[j].precio - descuento);
|
||||
pedidos.cesta[pos].precioProducto = (productos.producto[j].precio - descuento);
|
||||
}
|
||||
else {
|
||||
total += productos.producto[j].precio;
|
||||
pedidos.cesta[pos].precioProducto = productos.producto[j].precio;
|
||||
}
|
||||
encontrado = true;
|
||||
}
|
||||
else {
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
Binary file not shown.
@ -0,0 +1,5 @@
|
||||
L0001 1.25 0 Leche
|
||||
PC010 3.15 0 Pasta de dientes
|
||||
H0025 1.50 0 Huevos
|
||||
Y8912 1.50 1 Pack de 6 yogures
|
||||
XXX
|
Reference in New Issue
Block a user