224 lines
5.8 KiB
C++
224 lines
5.8 KiB
C++
|
//Ex<45>men Febrero 2016 - Grupos A, B, C e I
|
|||
|
//Fernando M<>ndez Torrubiano
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
#include <string>
|
|||
|
#include <fstream>
|
|||
|
#include <iomanip>
|
|||
|
using namespace std;
|
|||
|
|
|||
|
//Constantes:
|
|||
|
const int N = 50;
|
|||
|
|
|||
|
//Tipos:
|
|||
|
typedef enum { embarcando, operado, retrasado, suspendido }tEstado;
|
|||
|
typedef struct {
|
|||
|
string numVuelo;
|
|||
|
char terminal;
|
|||
|
int puertaEmb;
|
|||
|
tEstado estVuelo;
|
|||
|
string destino;
|
|||
|
}tVuelo;
|
|||
|
typedef tVuelo tVuelos[N];
|
|||
|
typedef struct {
|
|||
|
tVuelos vuelo;
|
|||
|
int contador;
|
|||
|
}tListaVuelos;
|
|||
|
|
|||
|
//Funciones:
|
|||
|
void inizializa(tListaVuelos&);
|
|||
|
bool cargar(tListaVuelos&);
|
|||
|
void tIntToEstado(tListaVuelos&, const int);
|
|||
|
int menu();
|
|||
|
void ejecutarMenu(tListaVuelos&);
|
|||
|
void guardar(tListaVuelos&);
|
|||
|
void obtenerInfoVuelo(tListaVuelos&);
|
|||
|
void actualizaEstVuelo(tListaVuelos&);
|
|||
|
int buscarVuelo(tListaVuelos&, const string&);
|
|||
|
void mostrarVuelo(tListaVuelos&, const string&);
|
|||
|
void actualizarVuelo(tListaVuelos&, const int&, const int&);
|
|||
|
|
|||
|
|
|||
|
int main() {
|
|||
|
tListaVuelos vuelos;
|
|||
|
|
|||
|
if (cargar(vuelos)) {
|
|||
|
ejecutarMenu(vuelos);
|
|||
|
}
|
|||
|
else {
|
|||
|
cout << "Fin del programa." << endl;
|
|||
|
system("PAUSE");
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
void inicializa(tListaVuelos& vuelos) {
|
|||
|
vuelos.contador = 0;
|
|||
|
for (int i = 0; i < N; i++) {
|
|||
|
vuelos.vuelo[i].numVuelo = "";
|
|||
|
vuelos.vuelo[i].terminal = char(0);
|
|||
|
vuelos.vuelo[i].puertaEmb = 0;
|
|||
|
vuelos.vuelo[i].estVuelo = suspendido;
|
|||
|
vuelos.vuelo[i].destino = "";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
bool cargar(tListaVuelos& vuelos) {
|
|||
|
bool carga = false;
|
|||
|
int AUX;
|
|||
|
ifstream archivo;
|
|||
|
|
|||
|
inicializa(vuelos);
|
|||
|
archivo.open("salidas.txt");
|
|||
|
if (!archivo.is_open()) {
|
|||
|
cout << "Error al cargar el archivo." << endl;
|
|||
|
carga = false;
|
|||
|
}
|
|||
|
else {
|
|||
|
archivo >> vuelos.vuelo[vuelos.contador].numVuelo;
|
|||
|
while ((vuelos.vuelo[vuelos.contador].numVuelo != "XXX") && (vuelos.contador < N)) {
|
|||
|
archivo >> vuelos.vuelo[vuelos.contador].terminal;
|
|||
|
archivo >> vuelos.vuelo[vuelos.contador].puertaEmb;
|
|||
|
archivo >> AUX;
|
|||
|
tIntToEstado(vuelos, AUX);
|
|||
|
getline(archivo, vuelos.vuelo[vuelos.contador].destino);
|
|||
|
vuelos.contador++;
|
|||
|
archivo >> vuelos.vuelo[vuelos.contador].numVuelo;
|
|||
|
}
|
|||
|
carga = true;
|
|||
|
}
|
|||
|
archivo.close();
|
|||
|
|
|||
|
return carga;
|
|||
|
}
|
|||
|
|
|||
|
void tIntToEstado(tListaVuelos& vuelos, const int AUX) {
|
|||
|
switch (AUX) {
|
|||
|
case 0: vuelos.vuelo[vuelos.contador].estVuelo = embarcando; break;
|
|||
|
case 1: vuelos.vuelo[vuelos.contador].estVuelo = operado; break;
|
|||
|
case 2: vuelos.vuelo[vuelos.contador].estVuelo = retrasado; break;
|
|||
|
case 3: vuelos.vuelo[vuelos.contador].estVuelo = suspendido; break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int menu() {
|
|||
|
int opc = 0;
|
|||
|
|
|||
|
cout << setw(40) << setfill('=') << "\n";
|
|||
|
cout << "1.-Obtener informacion de un vuelo." << endl;
|
|||
|
cout << "2.-Actualizar estado del un vuelo." << endl;
|
|||
|
cout << "0.-Salir." << endl;
|
|||
|
cout << setw(40) << setfill('=') << "\n" << setw(0) << setfill(char(0));
|
|||
|
|
|||
|
do {
|
|||
|
cout << "Introduzca una opcion: ";
|
|||
|
cin >> opc;
|
|||
|
} while (opc < 0 || opc > 2);
|
|||
|
|
|||
|
return opc;
|
|||
|
}
|
|||
|
|
|||
|
void ejecutarMenu(tListaVuelos& vuelos) {
|
|||
|
int opc = 1;
|
|||
|
while (opc != 0) {
|
|||
|
opc = menu();
|
|||
|
switch (opc) {
|
|||
|
case 1: obtenerInfoVuelo(vuelos); break;
|
|||
|
case 2: actualizaEstVuelo(vuelos); break;
|
|||
|
case 0: guardar(vuelos); break;
|
|||
|
}
|
|||
|
system("cls");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void guardar(tListaVuelos& vuelos) {
|
|||
|
ofstream archivo;
|
|||
|
|
|||
|
archivo.open("pendientes.txt");
|
|||
|
if (!archivo.is_open()) {
|
|||
|
cout << "Error al guardar." << endl;
|
|||
|
}
|
|||
|
else {
|
|||
|
for (int i = 0; i < vuelos.contador; i++){
|
|||
|
if ((vuelos.vuelo[i].estVuelo == retrasado) || (vuelos.vuelo[i].estVuelo == suspendido)) {
|
|||
|
archivo << vuelos.vuelo[i].numVuelo << " ";
|
|||
|
archivo << vuelos.vuelo[i].terminal << " ";
|
|||
|
archivo << vuelos.vuelo[i].puertaEmb << " ";
|
|||
|
archivo << vuelos.vuelo[i].estVuelo << "";
|
|||
|
archivo << vuelos.vuelo[i].destino << endl;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
archivo.close();
|
|||
|
}
|
|||
|
|
|||
|
void obtenerInfoVuelo(tListaVuelos& vuelos) {
|
|||
|
string numVuelo;
|
|||
|
int encontrado;
|
|||
|
|
|||
|
cout << "Introduzca numero de vuelo: ";
|
|||
|
cin >> numVuelo;
|
|||
|
|
|||
|
encontrado = buscarVuelo(vuelos, numVuelo);
|
|||
|
if (encontrado != -1) {
|
|||
|
mostrarVuelo(vuelos, numVuelo);
|
|||
|
}
|
|||
|
else {
|
|||
|
cout << "Vuelo no encontrado." << endl;
|
|||
|
}
|
|||
|
system("PAUSE");
|
|||
|
}
|
|||
|
|
|||
|
void actualizaEstVuelo(tListaVuelos& vuelos) {
|
|||
|
string numVuelo;
|
|||
|
int encontrado;
|
|||
|
int nuevoEst;
|
|||
|
|
|||
|
do {
|
|||
|
cout << "Introduzca un numero de vuelo: ";
|
|||
|
cin >> numVuelo;
|
|||
|
encontrado = buscarVuelo(vuelos, numVuelo);
|
|||
|
} while (encontrado == -1);
|
|||
|
|
|||
|
cout << endl << "ESTADOS: (0)embarcando, (1)operado, (2)retrasado, (3)suspendido." << endl;
|
|||
|
cout << "Introduzca un nuevo estado: ";
|
|||
|
cin >> nuevoEst;
|
|||
|
actualizarVuelo(vuelos, encontrado, nuevoEst);
|
|||
|
cout << "Actualizado correctamente." << endl;
|
|||
|
system("PAUSE");
|
|||
|
}
|
|||
|
|
|||
|
int buscarVuelo(tListaVuelos& vuelos, const string& numVuelo) {
|
|||
|
int pos = 0;
|
|||
|
|
|||
|
while ((vuelos.vuelo[pos].numVuelo != numVuelo) && (pos < vuelos.contador)) {
|
|||
|
pos++;
|
|||
|
}
|
|||
|
if (pos == vuelos.contador) {
|
|||
|
pos = -1;
|
|||
|
}
|
|||
|
|
|||
|
return pos;
|
|||
|
}
|
|||
|
|
|||
|
void mostrarVuelo(tListaVuelos& vuelos, const string& numVuelo) {
|
|||
|
int pos = buscarVuelo(vuelos, numVuelo);
|
|||
|
|
|||
|
cout << setw(50) << setfill('=') << "\n" << setfill(char(0));
|
|||
|
cout << "Numero de vuelo: " << setw(15) << vuelos.vuelo[pos].numVuelo << endl
|
|||
|
<< "Terminal: " << setw(15) << vuelos.vuelo[pos].terminal << endl
|
|||
|
<< "Puerta de Embarque: " << setw(15) << vuelos.vuelo[pos].puertaEmb << endl
|
|||
|
<< "Estado: " << setw(15) << vuelos.vuelo[pos].estVuelo << endl
|
|||
|
<< "Destino: " << setw(15) << vuelos.vuelo[pos].numVuelo << endl;
|
|||
|
cout << setw(50) << setfill('=') << "\n" << setfill(char(0));
|
|||
|
}
|
|||
|
|
|||
|
void actualizarVuelo(tListaVuelos& vuelos, const int& pos, const int& estadVuelo) {
|
|||
|
switch (estadVuelo) {
|
|||
|
case 0: vuelos.vuelo[pos].estVuelo = embarcando; break;
|
|||
|
case 1: vuelos.vuelo[pos].estVuelo = operado; break;
|
|||
|
case 2: vuelos.vuelo[pos].estVuelo = retrasado; break;
|
|||
|
case 3: vuelos.vuelo[pos].estVuelo = suspendido; break;
|
|||
|
}
|
|||
|
}
|