Cpp/Exámenes Resueltos (Primer Semestre)/FrEnero 2019 (Grupos A, B, D y G)/ExEne19ABDG_Fernando.cpp
Fernando Méndez 07651a8047
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.
2019-06-20 12:26:55 +02:00

238 lines
5.9 KiB
C++

//Examen Enero 2019 - Grupos A, B, D y G.
//Fernando Méndez Torrubiano
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
//Constantes:
const int MAX_PEDIDOS = 50;
//Tipos:
typedef struct tPedido {
string numPedido, nombreCliente, direccion, codRepartidor;
bool estado;
};
typedef tPedido tPedidos[MAX_PEDIDOS];
typedef struct tListaPedidos {
tPedidos pedido;
int contador;
};
//Funciones:
void inicializa(tListaPedidos&);
bool cargar(tListaPedidos&);
bool actualizarPedido(tListaPedidos&, const string&);
void mostrarPedidos(tListaPedidos&);
int posicionRepartidor(tListaPedidos&, const string&);
void mostrarPedidosRepartidor(tListaPedidos&, const string&);
bool guardarPedidos(tListaPedidos&);
void ejecutarMenu(tListaPedidos&);
int menu();
int main() {
tListaPedidos pedidos;
if (cargar(pedidos)) {
ejecutarMenu(pedidos);
if (guardarPedidos(pedidos)) {
cout << "Guardado correctamente." << endl;
}
else {
cout << "Error al guardar." << endl;
}
}
else {
cout << "Fin del programa." << endl;
}
system("PAUSE");
return 0;
}
void inicializa(tListaPedidos& pedidos) {
pedidos.contador = 0;
for (int i = 0; i < MAX_PEDIDOS; i++){
pedidos.pedido[i].numPedido = "";
pedidos.pedido[i].nombreCliente = "";
pedidos.pedido[i].direccion = "";
pedidos.pedido[i].codRepartidor = "";
pedidos.pedido[i].estado = false;
}
}
bool cargar(tListaPedidos& pedidos) {
bool carga = false;
ifstream archivo;
inicializa(pedidos);
archivo.open("pedidos.txt");
if (!archivo.is_open()) {
cout << "No se ha podido cargar el archivo." << endl;
carga = false;
}
else {
while ((!archivo.eof()) && (pedidos.contador < MAX_PEDIDOS)) {
getline(archivo, pedidos.pedido[pedidos.contador].numPedido);
getline(archivo, pedidos.pedido[pedidos.contador].nombreCliente);
getline(archivo, pedidos.pedido[pedidos.contador].direccion);
getline(archivo, pedidos.pedido[pedidos.contador].codRepartidor);
pedidos.contador++;
}
carga = true;
}
archivo.close();
return carga;
}
bool actualizarPedido(tListaPedidos& pedidos, const string& numPedido) {
bool encontrado = false;
int i = 0;
while ((!encontrado) && (i < pedidos.contador)) {
if (pedidos.pedido[i].numPedido == numPedido) {
pedidos.pedido[i].estado = true;
encontrado = true;
}
else {
i++;
}
}
return encontrado;
}
void mostrarPedidos(tListaPedidos& pedidos) {
cout << setw(15) << right << "NUMERO PEDIDO"
<< setw(25) << "CLIENTE"
<< setw(40) << "DIRECCION"
<< setw(15) << "REPARTIDOR"
<< setw(15) << "ESTADO" << endl;
cout << setw(115) << setfill('=') << "\n" << setfill(char(0));
for (int i = 0; i < pedidos.contador-1; i++) {
cout << setw(15) << right << pedidos.pedido[i].numPedido
<< setw(25) << pedidos.pedido[i].nombreCliente
<< setw(40) << pedidos.pedido[i].direccion
<< setw(15) << pedidos.pedido[i].codRepartidor;
if (pedidos.pedido[i].estado == true) {
cout << setw(15) << "ENTREGADO" << endl;
}
else {
cout << setw(15) << "PENDIENTE" << endl;
}
}
cout << setw(115) << setfill('=') << "\n" << setfill(char(0));
}
int posicionRepartidor(tListaPedidos& pedidos, const string& codRepartidor) {
int pos = 0;
bool encontrado = false;
while ((!encontrado) && (pos <= pedidos.contador)) {
if (pedidos.pedido[pos].codRepartidor == codRepartidor) {
encontrado = true;
}
else {
pos++;
}
}
return pos;
}
void mostrarPedidosRepartidor(tListaPedidos& pedidos, const string& codRepartidor) {
int pos = posicionRepartidor(pedidos, codRepartidor);
if (pos < pedidos.contador) {
cout << endl << "Pedidos pendientes del repartidor: " << codRepartidor << endl;
cout << setw(70) << setfill('=') << "\n" << setfill(char(0));
cout << "Numero de pedido: " << pedidos.pedido[pos].numPedido << endl;
cout << "Cliente: " << pedidos.pedido[pos].nombreCliente << endl;
cout << "Direccion de entrega: " << pedidos.pedido[pos].direccion << endl;
cout << setw(70) << setfill('=') << "\n" << setfill(char(0));
}
else {
cout << "Repartidor no encontrado." << endl;
}
}
bool guardarPedidos(tListaPedidos& pedidos) {
bool save = false;
ofstream archivo;
archivo.open("pendientes.txt");
if (!archivo.is_open()) {
save = false;
}
else {
for (int i = 0; i < pedidos.contador; i++){
if (pedidos.pedido[i].estado == false) {
archivo << pedidos.pedido[i].numPedido << endl
<< pedidos.pedido[i].nombreCliente << endl
<< pedidos.pedido[i].direccion << endl
<< pedidos.pedido[i].codRepartidor << endl;
}
}
save = true;
}
archivo.close();
return save;
}
void ejecutarMenu(tListaPedidos& pedidos) {
int opc = 1;
string codRepartidor, numPedido;
while (opc != 0) {
opc = menu();
switch (opc) {
case 0: break;
case 1:
cout << "Codigo de repartidor: ";
cin >> codRepartidor;
mostrarPedidosRepartidor(pedidos, codRepartidor);
system("PAUSE");
break;
case 2: mostrarPedidos(pedidos); system("PAUSE"); break;
case 3:
cout << "Introduzca numero de pedido: ";
cin >> numPedido;
if (actualizarPedido(pedidos, numPedido)) {
cout << "Pedido " << numPedido << " actualizado correctamente." << endl;
}
else {
cout << "Pedido no encontrado." << endl;
}
system("PAUSE");
break;
default:
break;
}
system("cls");
}
}
int menu() {
int opc = 0;
cout << setw(20) << setfill('=') << "MENU" << setw(20) << "\n" << setfill(char(0));
cout << "1.-Mostrar todos los pedidos pendientes de un repartidor." << endl;
cout << "2.-Mostrar todos los pedidos." << endl;
cout << "3.-Registro pedido entregado." << endl;
cout << "0.-Salir." << endl;
cout << setw(40) << setfill('=') << "\n" << setfill(char(0));
do {
cout << "Introduzca una opcion: ";
cin >> opc;
} while (opc < 0 || opc > 3);
return opc;
}