07651a8047
Para uso exclusivo con fines de estudio. Se prohíbe su uso para entregas calificables y/o uso comercial.
238 lines
5.9 KiB
C++
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;
|
|
} |