//Examen Febrero 2017 - Grupos A, E, D y G. //Fernando Méndez Torrubiano #include #include #include #include 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; }