//Examen Febreo 2018 //Fernando Méndez Torrubiano #include #include #include #include using namespace std; //Constantes: const int MAX_NAV = 24; //Tipos: typedef string tNombres[MAX_NAV]; typedef float tMedidas[MAX_NAV]; typedef struct tNavios { tNombres nombre; tNombres empresa; tMedidas eslora; tMedidas toneladas; tNombres peaje; int contador; }; //Funciones: void inicializa(tNavios&, tNavios&); bool cargar(tNavios&); void ejecutarMenu(tNavios&, tNavios&); int menu(); void muestraNavios(tNavios&); void crearNavio(tNavios&); bool insertarNavio(tNavios&, tNavios&); bool cobrarNavio(tNavios&); float peajeNavio(tNavios&, const int pos); float peajePagado(tNavios&); void guardar(tNavios&); int main() { tNavios nave; tNavios nuevo; bool carga = false; inicializa(nave, nuevo); carga = cargar(nave); if (carga) { ejecutarMenu(nave, nuevo); } else { system("PAUSE"); } guardar(nave); return 0; } void inicializa(tNavios& nave, tNavios& nuevo) { for (int i = 0; i < MAX_NAV; i++) { nave.nombre[i] = ""; nave.empresa[i] = ""; nave.eslora[i] = 0; nave.toneladas [i]= 0; nave.peaje[i] = ""; } nave.contador = 0; nuevo.contador = 0; } bool cargar(tNavios& nave) { ifstream archivo; bool carga = false; archivo.open("navios.txt"); if (!archivo.is_open()) { cout << "Error al cargar el archivo." << endl; carga = false; } else { archivo >> nave.nombre[nave.contador]; while ((nave.nombre[nave.contador] != "XXX") && (nave.contador < MAX_NAV)) { archivo >> nave.empresa[nave.contador]; archivo >> nave.eslora[nave.contador]; archivo >> nave.toneladas[nave.contador]; archivo >> nave.peaje[nave.contador]; nave.contador++; archivo >> nave.nombre[nave.contador]; } carga = true; } archivo.close(); return carga; } void ejecutarMenu(tNavios& nave, tNavios& nuevo) { int opc = 1; bool insertado = false; while (opc != 0) { system("cls"); opc = menu(); switch (opc){ case 1: muestraNavios(nave); break; case 2: crearNavio(nuevo); insertado = insertarNavio(nave, nuevo); if (!insertado) { cout << "No se ha podido añadir un nuevo navio." << endl; system("PAUSE"); } else{ cout << "Navio insertado correctamente." << endl; system("PAUSE"); } break; case 3: cobrarNavio(nave); break; case 0: break; default: break; } } } int menu() { int opc = 0; //cout << setfill('-') << setw(25) << "\n"; cout << "1.-VER LISTA DE NAVIOS." << "\n"; cout << "2.-AGREGAR NAVIO." << "\n"; cout << "3.-COBRAR PEAJE." << "\n"; cout << "0.-SALIR." << "\n"; //cout << setfill('-') << setw(25) << "\n"; do{ cout << "\n Intruduzca una opcion: "; cin >> opc; } while ((opc < 0) || (opc > 3)); return opc; } void muestraNavios(tNavios& nave) { cout << setfill(char(0)) << setw(15) << left << "NOMBRE" << setw(15) << left << "EMPRESA" << setw(15) << left << "ESLORA" << setw(20) << left << "DESPLAZAMIENTO" << setw(20) << left << "PEAJE"; cout << setw(85) << setfill('=') << "\n" << setfill(char(0)) << endl; for (int i = 0; i < nave.contador; i++) { cout << setw(15) << left << nave.nombre[i] << setw(15) << left << nave.empresa[i] << setw(15) << left << fixed << setprecision(2) << nave.eslora[i] << setw(20) << left << nave.toneladas[i] << setw(10); if (nave.peaje[i] == "true") { cout << peajeNavio(nave, i) << "PAGADO\n"; } else { cout << peajeNavio(nave, i) << "NO PAGADO\n"; } } cout << setw(85) << setfill('=') << "\n"; cout << setw(0) << setfill(char(0)) << "\n"; system("PAUSE"); } void crearNavio(tNavios& nuevo) { string nombre; nuevo.contador++; cout << "Introduzca NOMBRE del navio: "; cin >> nuevo.nombre[nuevo.contador]; cout << "Introduzca EMPRESA fabricante: "; cin >> nuevo.empresa[nuevo.contador]; cout << "Introduzca ESLORA del navio: "; cin >> nuevo.eslora[nuevo.contador]; cout << "Introduzca TONELADAS del navio: "; cin >> nuevo.toneladas[nuevo.contador]; cout << "Introduzca PEAJE (true/false): "; cin >> nuevo.peaje[nuevo.contador]; } bool insertarNavio(tNavios& nave, tNavios& nuevo) { bool insertado = false; if (nave.contador < MAX_NAV) { nave.nombre[nave.contador] = nuevo.nombre[nuevo.contador]; nave.empresa[nave.contador] = nuevo.empresa[nuevo.contador]; nave.eslora[nave.contador] = nuevo.eslora[nuevo.contador]; nave.toneladas[nave.contador] = nuevo.toneladas[nuevo.contador]; nave.peaje[nave.contador] = nuevo.peaje[nuevo.contador]; nave.contador++; insertado = true; } else { insertado = false; } return insertado; } bool cobrarNavio(tNavios& nave) { bool encontrado = false; string nom; int i = 0; cout << "Introduzca el nombre del navio que quiere pagar: "; cin >> nom; while ((i < nave.contador) && (!encontrado)) { if (nave.nombre[i] == nom) { nave.peaje[i] = "true"; encontrado = true; } i++; } return encontrado; } float peajeNavio(tNavios& nave, const int pos) { float precio = 0; if (nave.eslora[pos] <= 100) { precio = nave.toneladas[pos] * 2; } else { precio = nave.toneladas[pos] * 3; } return precio; } float peajePagado(tNavios& nave) { float pagos = 0; for (int i = 0; i < nave.contador; i++) { if (nave.peaje[i] == "true") { pagos += peajeNavio(nave, i); } } return pagos; } void guardar(tNavios& nave) { ofstream archivo; archivo.open("navios.txt"); if(archivo.is_open()){ for (int i = 0; i < nave.contador; i++) { archivo << nave.nombre[i] << " "; archivo << nave.empresa[i] << " "; archivo << nave.eslora[i] << " "; archivo << nave.toneladas[i] << " "; archivo << nave.peaje[i] << " " << endl; } archivo << "XXX"; } archivo.close(); }