07651a8047
Para uso exclusivo con fines de estudio. Se prohíbe su uso para entregas calificables y/o uso comercial.
262 lines
5.9 KiB
C++
262 lines
5.9 KiB
C++
//Examen Febreo 2018
|
|
//Fernando Méndez Torrubiano
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <fstream>
|
|
#include <iomanip>
|
|
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();
|
|
} |