// Eva Verdú Rodríguez 51220965B // LAB: 10 // PTO: 12 #include #include #include #include using namespace std; const int MAX_APUNTES = 500; typedef struct tFecha { int dia; int mes; int año; }; typedef struct tApunte { tFecha fecha; float impor; string concep; }; typedef struct tCuenta { tApunte apunte [MAX_APUNTES]; int cont; }; int menu(); void cargar(tCuenta & cuenta, string fichero); void Nomina(const tCuenta cuenta); void GastoLuzAño(const tCuenta cuenta, int año); void mostrar(const tCuenta cuenta); int main() { int opc, año; tCuenta cuenta; cuenta.cont = 0; string fichero = "apuntes.txt"; opc = menu(); do{ switch (opc) { case 1: cargar(cuenta, fichero); break; case 2: Nomina(cuenta); break; case 3: cout << "Introduzca año para calcular el gasto medio: "; cin >> año; GastoLuzAño(cuenta, año); break; case 4: mostrar(cuenta); break; } opc = menu(); } while (opc != 0); system("pause"); return 0; } int menu() { int opc; do { cout << "Elige una opción: " << endl; cout << "1 Cargar cuenta de fichero" << endl; cout << "2 Importe de la primera nómina" << endl; cout << "3 Gasto medio de luz en un año" << endl; cout << "4 Mostrar por pantalla" << endl; cout << "0 Salir" << endl; cin >> opc; } while (opc < 0 || opc > 4); return opc; } void cargar(tCuenta & cuenta, string fichero){ ifstream archivo; archivo.open(fichero); int aux; if (archivo.is_open()) { archivo >> aux; while (aux != -1 && cuenta.cont != MAX_APUNTES) { cuenta.apunte[cuenta.cont].fecha.dia = aux; archivo >> cuenta.apunte[cuenta.cont].fecha.mes; archivo >> cuenta.apunte[cuenta.cont].fecha.año; archivo >> cuenta.apunte[cuenta.cont].impor; archivo >> cuenta.apunte[cuenta.cont].concep; archivo >> aux; cuenta.cont++; } archivo.close(); } else { cout << "Archivo no encontrado" << endl; } } void Nomina(const tCuenta cuenta) { float nomina = 0; bool found = false; int i = 0; while (i < cuenta.cont && !found) { if (cuenta.apunte[i].concep == "Salario") { nomina = cuenta.apunte[i].impor; found = true; } else { i++; } } if (nomina != 0) { cout << "El importe de la primera nomina es: " << fixed << setprecision(2) << nomina << " euros." << endl; } else { cout << "No hay salarios" << endl; } } void GastoLuzAño(const tCuenta cuenta, int año) { float numLuz = 0; float sum = 0; float media = 0; for (int i = 0; i < cuenta.cont; i++) { if (cuenta.apunte[i].fecha.año == año && cuenta.apunte[i].concep == "Luz") { sum += cuenta.apunte[i].impor; numLuz++; } } media = sum / numLuz; media = media * -1; cout << " Gasto medio del año " << año << " es: " << media << endl; } void mostrar(const tCuenta cuenta) { for (int i = 0; i < cuenta.cont; i++){ cout << setfill('0') << setw(2) << internal << cuenta.apunte[i].fecha.dia <<" " << setw(2) << cuenta.apunte[i].fecha.mes << " " << setfill(' ') << setw(5) << cuenta.apunte[i].fecha.año << right << fixed << setprecision(2) << setw(10) << cuenta.apunte[i].impor << " " << setw(10) << left << cuenta.apunte[i].concep << " " << endl; } }