//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 { int dia; int mes; int anio; }tFecha; typedef struct { tFecha fecha; float importe; string concepto; }tApunte; typedef tApunte tApuntes[MAX_APUNTES]; typedef struct { tApuntes apunte; int contador; }tCuenta; //Funciones: void inicializa(tCuenta&); bool cargar(tCuenta&); int menu(); void ejecutarMenu(tCuenta&); float nomina(tCuenta&); float gastoLuz(tCuenta&, const int&); void mostrar(tCuenta&); int main() { tCuenta cuentas; ejecutarMenu(cuentas); return 0; } void inicializa(tCuenta& cuentas) { cuentas.contador = 0; for (int i = 0; i < MAX_APUNTES; i++) { cuentas.apunte[i].fecha.dia = 0; cuentas.apunte[i].fecha.mes = 0; cuentas.apunte[i].fecha.anio = 0; cuentas.apunte[i].importe = 0; cuentas.apunte[i].concepto = ""; } } bool cargar(tCuenta& cuentas) { bool carga = false; string nombreFichero; ifstream archivo; inicializa(cuentas); cout << "Introduzca nombre del archivo: "; cin >> nombreFichero; nombreFichero += ".txt"; archivo.open(nombreFichero); if (!archivo.is_open()) { cout << "Error al cargar el archivo." << endl; carga = false; } else { archivo >> cuentas.apunte[cuentas.contador].fecha.dia; while ((cuentas.apunte[cuentas.contador].fecha.dia != -1) && (cuentas.contador < MAX_APUNTES)) { archivo >> cuentas.apunte[cuentas.contador].fecha.mes; archivo >> cuentas.apunte[cuentas.contador].fecha.anio; archivo >> cuentas.apunte[cuentas.contador].importe; archivo >> cuentas.apunte[cuentas.contador].concepto; cuentas.contador++; archivo >> cuentas.apunte[cuentas.contador].fecha.dia; } carga = true; } archivo.close(); return carga; } int menu() { int opc = 0; cout << setw(35) << setfill('=') << "\n" << setw(0) << setfill(char(0)); cout << "1.-Cargar cuenta de fichero." << endl; cout << "2.-Importe de la primera nomina." << endl; cout << "3.-Gasto medio de la luz en un anio." << endl; cout << "4.-Mostrar por pantalla." << endl; cout << "0.-Salir." << endl; cout << setw(35) << setfill('=') << "\n" << setw(0) << setfill(char(0)); do { cout << "Introduzca una opcion: "; cin >> opc; } while ((opc < 0) || (opc > 4)); return opc; } void ejecutarMenu(tCuenta& cuentas) { int opc = 1; int anio = 0; while (opc != 0) { opc = menu(); switch (opc) { case 1: if (cargar(cuentas)) { cout << "Cargado correctamente." << endl; } else { cout << "Vuelva a intentarlo." << endl; } break; case 2: cout << "Primera nomina: " << nomina(cuentas) << endl; break; case 3: cout << "Introduzca un anio: "; cin >> anio; cout << "Gasto en " << anio << ": " << gastoLuz(cuentas, anio) << endl; break; case 4: mostrar(cuentas); break; case 0: break; } system("PAUSE"); system("cls"); } } float nomina(tCuenta& cuentas) { bool encontrado = false; int i = 0; while ((!encontrado) && (i < cuentas.contador)) { if (cuentas.apunte[i].concepto == "Salario") { encontrado = true; } else { i++; } } return cuentas.apunte[i].importe; } float gastoLuz(tCuenta& cuentas, const int& anio) { int i = 0; float gasto = 0; float importePositivo = 0; while (i < cuentas.contador) { if ((cuentas.apunte[i].concepto == "Luz") && (cuentas.apunte[i].fecha.anio == anio)) { importePositivo = -1 * cuentas.apunte[i].importe; gasto += importePositivo; } i++; } return gasto; } void mostrar(tCuenta& cuentas) { cout << "FECHA" << " " << "IMPORTE" << " " << right << "CONCEPTO" << endl; cout << setw(35) << setfill('-') << "\n" << setw(0) << setfill(char(0)); for (int i = 0; i < cuentas.contador; i++) { cout << cuentas.apunte[i].fecha.dia << "/" << cuentas.apunte[i].fecha.mes << "/" << cuentas.apunte[i].fecha.anio << " " << left << cuentas.apunte[i].importe << " " << right << cuentas.apunte[i].concepto << endl; } cout << setw(35) << setfill('-') << "\n" << setw(0) << setfill(char(0)); }