Cpp/Exámenes Resueltos (Primer .../Febrero 2017 (Grupos A, E, .../ExFeb17AEDGv2_Fernando.cpp

185 lines
4.3 KiB
C++

//Examen Febrero 2017 - Grupos A, E, D y G.
//Fernando Méndez Torrubiano
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
//Constantes:
const int MAX_APUNTES = 500;
//Tipos:
typedef struct tFecha {
int dia, mes, anio;
};
typedef struct tApunte {
tFecha fecha;
float importe;
string concepto;
};
typedef tApunte tApuntes[MAX_APUNTES];
typedef struct tCuenta {
tApuntes apunte;
int contador;
};
//Funciones:
void inicializa(tCuenta&);
bool cargar(tCuenta&);
float nomina(tCuenta&);
float gastoMedio(tCuenta&, const int&);
void mostrar(tCuenta&);
void ejecutarMenu(tCuenta&);
int menu();
int main() {
tCuenta cuenta;
ejecutarMenu(cuenta);
return 0;
}
void inicializa(tCuenta& cuenta) {
cuenta.contador = 0;
for (int i = 0; i < MAX_APUNTES; i++){
cuenta.apunte[i].fecha.dia = 0;
cuenta.apunte[i].fecha.mes = 0;
cuenta.apunte[i].fecha.anio = 0;
cuenta.apunte[i].importe = 0;
cuenta.apunte[i].concepto = "";
}
}
bool cargar(tCuenta& cuenta) {
bool carga = false;
ifstream archivo;
string nomArchivo;
inicializa(cuenta);
cout << "Introduzca nombre del archivo (sin extension): ";
cin >> nomArchivo;
nomArchivo += ".txt";
archivo.open(nomArchivo);
if (!archivo.is_open()){
cout << "Error al cargar el archivo." << endl;
carga = false;
}
else {
archivo >> cuenta.apunte[cuenta.contador].fecha.dia;
while ((cuenta.apunte[cuenta.contador].fecha.dia != -1) && (cuenta.contador < MAX_APUNTES)) {
archivo >> cuenta.apunte[cuenta.contador].fecha.mes;
archivo >> cuenta.apunte[cuenta.contador].fecha.anio;
archivo >> cuenta.apunte[cuenta.contador].importe;
archivo >> cuenta.apunte[cuenta.contador].concepto;
cuenta.contador++;
archivo >> cuenta.apunte[cuenta.contador].fecha.dia;
}
carga = true;
}
archivo.close();
return carga;
}
float nomina(tCuenta& cuenta) {
bool encontrado = false;
int i = 0;
float nomina = 0;
while ((!encontrado) && (i < cuenta.contador)) {
if (cuenta.apunte[i].concepto == "Salario") {
nomina = cuenta.apunte[i].importe;
encontrado = true;
}
else {
i++;
}
}
return nomina;
}
float gastoMedio(tCuenta& cuenta, const int& anio) {
float gasto = 0;
int i = 0;
while ((i < cuenta.contador)) {
if ((cuenta.apunte[i].fecha.anio == anio) && (cuenta.apunte[i].concepto == "Luz")) {
gasto += (-1 * cuenta.apunte[i].importe);
}
i++;
}
return gasto;
}
void mostrar(tCuenta& cuenta) {
cout << setw(2) << right << "DIA"
<< setw(5) << "MES"
<< setw(10) << "ANIO"
<< setw(10) << "IMPORTE"
<< setw(15) << "CONCEPTO" << endl;
cout << setw(50) << setfill('=') << "\n" << setfill(char(0));
for (int i = 0; i < cuenta.contador; i++){
cout << setw(2) << right << cuenta.apunte[i].fecha.dia
<< setw(5) << cuenta.apunte[i].fecha.mes
<< setw(10) << cuenta.apunte[i].fecha.anio
<< setw(10) << cuenta.apunte[i].importe
<< setw(15) << cuenta.apunte[i].concepto << endl;
}
cout << setw(50) << setfill('=') << "\n" << setfill(char(0));
}
void ejecutarMenu(tCuenta& cuenta) {
int opc = 1;
float anio;
while (opc != 0) {
opc = menu();
switch (opc){
case 0: break;
case 1:
if (cargar(cuenta)) {
cout << "Cargado correctamente." << endl;
}
else {
cout << "No se ha podido cargar el archivo." << endl;
}
break;
case 2: cout << "El importe de la primera nomina es: " << nomina(cuenta) << endl; break;
case 3:
cout << "Introduzca un anio: ";
cin >> anio;
cout << "El gasto medio de la luz en el anio " << anio << " fue: " << gastoMedio(cuenta, anio) << endl; break;
case 4: mostrar(cuenta); break;
default:
break;
}
system("PAUSE");
system("cls");
}
}
int menu() {
int opc = 0;
cout << setw(25) << setfill('=') << "MENU" << setw(25) << "\n" << setfill(char(0));
cout << "1.-Cargar cuenta de un fichero." << endl;
cout << "2.-Importe de la ultima nomina." << endl;
cout << "3.-Gasto medio de luz en un anio." << endl;
cout << "4.-Mostrar por pantalla" << endl;
cout << "0.-Salir" << endl;
cout << setw(50) << setfill('=') <<"\n" << setfill(char(0));
do {
cout << "Introduzca una opcion: ";
cin >> opc;
} while (opc < 0 || opc>4);
return opc;
}