//Exámen Febrero 2014 - Grupos C, E y F. //Fernando Méndez Torrubinao #include #include #include #include using namespace std; //Constantes: const int NUM_PLAYERS = 10; //Tipos: typedef struct tJugador { string nombre; string equipo; int numPartidos; int minutos; int goles; }; typedef tJugador tJugadores[NUM_PLAYERS]; typedef struct tListaJugadores { tJugadores jugador; int contador; }; //Funciones: void inicializa(tListaJugadores&); bool cargar(tListaJugadores&); void ejecutarMenu(tListaJugadores&); int menu(); void filtrarLista(tListaJugadores&, const string&); bool actualizarJugador(tListaJugadores&, const string&, const int&, const int&, int& pos); void consultarMaxGoleador(tListaJugadores& jugadores); void guardar(tListaJugadores&); int main() { tListaJugadores jugadores; if (cargar(jugadores)) { ejecutarMenu(jugadores); guardar(jugadores); } else { cout << "Fin del programa." << endl; system("PAUSE"); } return 0; } void inicializa(tListaJugadores& jugadores) { jugadores.contador = 0; for (int i = 0; i < NUM_PLAYERS; i++){ jugadores.jugador[i].nombre = ""; jugadores.jugador[i].equipo = ""; jugadores.jugador[i].numPartidos = 0; jugadores.jugador[i].minutos = 0; jugadores.jugador[i].goles = 0; } } bool cargar(tListaJugadores& jugadores) { bool cargado = false; ifstream archivo; inicializa(jugadores); archivo.open("players.txt"); if (!archivo.is_open()) { cout << "Error al cargar el archivo." << endl; cargado = false; } else { archivo >> jugadores.jugador[jugadores.contador].nombre; while ((jugadores.jugador[jugadores.contador].nombre != "XXX") && (jugadores.contador < NUM_PLAYERS)) { archivo >> jugadores.jugador[jugadores.contador].equipo; archivo >> jugadores.jugador[jugadores.contador].numPartidos; archivo >> jugadores.jugador[jugadores.contador].minutos; archivo >> jugadores.jugador[jugadores.contador].goles; jugadores.contador++; archivo >> jugadores.jugador[jugadores.contador].nombre; } cargado = true; } archivo.close(); return cargado; } void ejecutarMenu(tListaJugadores& jugadores) { int opc = 1; string codigo, nombre; int min, goles, pos = 0;; while (opc != 0) { opc = menu(); switch (opc){ case 0: break; case 1: cout << "Introduzca equipo ('TODOS' para ver todos los jugadores): "; cin >> codigo; filtrarLista(jugadores, codigo); break; case 2: cout << "Introduzca nombre del jugador: "; cin >> nombre; cout << "Introduzca minutos jugados: "; cin >> min; cout << "Introduzca goles marcados: "; cin >> goles; if (actualizarJugador(jugadores, nombre, min, goles, pos)) { cout << "Actualizado correctamente:" << endl; cout << setw(25) << setfill('-') << "\n" << setfill(char(0)) << jugadores.jugador[pos].nombre << setw(5) << jugadores.jugador[pos].equipo << setw(5) << jugadores.jugador[pos].numPartidos << setw(5) << jugadores.jugador[pos].minutos << setw(5) << jugadores.jugador[pos].goles << endl << setw(25) << setfill('-') << "\n" << setfill(char(0)); } else { cout << "Error al actualizar" << endl; } break; case 3: consultarMaxGoleador(jugadores); break; default: break; } system("PAUSE"); system("cls"); } } int menu() { int opc = 0; cout << setw(40) << setfill('=') << "\n" << setfill(char(0)); cout << "1.-Filtrar lista." << endl; cout << "2.-Actualizar jugador." << endl; cout << "3.-Consultar maximo goleador" << endl; cout << "0.-SALIR" << endl; cout << setw(40) << setfill('=') << "\n" << setfill(char(0)); do { cout << "Introduzca una opcion: "; cin >> opc; } while (opc < 0 || opc > 3); return opc; } void filtrarLista(tListaJugadores& jugadores, const string& codigo) { cout << setw(70) << setfill('_') << "\n" << setfill(char(0)); cout << endl << setw(15) << right << "JUGADOR" << setw(20) << "PARTIDOS JUGADOS" << setw(20) << "MINUTOS JUGADOS" << setw(10) << "GOLES" << endl; cout << setw(70) << setfill('_') << "\n" << endl; cout << setw(35) << setfill('=') << codigo << setw(35) << "\n" << setfill(char(0)); for (int i = 0; i < jugadores.contador; i++){ if ((jugadores.jugador[i].equipo == codigo) || (codigo == "TODOS") || (codigo == "todos")) { cout << setw(15) << right << jugadores.jugador[i].nombre << setw(15) << jugadores.jugador[i].numPartidos << setw(20) << jugadores.jugador[i].minutos << setw(15) << jugadores.jugador[i].goles << endl; } } cout << setw(70) << setfill('=') << "\n" << setfill(char(0)); } bool actualizarJugador(tListaJugadores& jugadores, const string& nombre, const int& min, const int& goles, int& i) { bool actualizado = false; while ((!actualizado) && (i < jugadores.contador)) { if ((jugadores.jugador[i].nombre == nombre) && (min > 0) && (goles > 0)) { jugadores.jugador[i].minutos += min; jugadores.jugador[i].goles += goles; jugadores.jugador[i].numPartidos++; actualizado = true; } else { i++; } } return actualizado; } void consultarMaxGoleador(tListaJugadores& jugadores) { int maxGoles = 0; tListaJugadores goleadores; for (int i = 0; i < jugadores.contador; i++){ if (jugadores.jugador[i].goles > maxGoles) { maxGoles = jugadores.jugador[i].goles; } } goleadores.contador = 0; cout << setw(20) << setfill('-') << "PICHICHIS" << setw(20) << setfill('-') << "\n" << setfill(char(0)); for (int i = 0; i < jugadores.contador; i++){ if (jugadores.jugador[i].goles == maxGoles) { goleadores.jugador[goleadores.contador].nombre = jugadores.jugador[i].nombre; goleadores.jugador[goleadores.contador].equipo = jugadores.jugador[i].equipo; goleadores.jugador[goleadores.contador].numPartidos = jugadores.jugador[i].numPartidos; goleadores.jugador[goleadores.contador].minutos = jugadores.jugador[i].minutos; goleadores.jugador[goleadores.contador].goles = jugadores.jugador[i].goles; cout << setw(10) << right << goleadores.jugador[goleadores.contador].nombre << setw(5) << goleadores.jugador[goleadores.contador].equipo << setw(5) << goleadores.jugador[goleadores.contador].numPartidos << setw(5) << goleadores.jugador[goleadores.contador].minutos << setw(5) << goleadores.jugador[goleadores.contador].goles << endl; goleadores.contador++; } } cout << setw(40) << setfill('-') << "\n" << setfill(char(0)); } void guardar(tListaJugadores& jugadores) { ofstream archivo; archivo.open("players.txt"); if (!archivo.is_open()) { cout << "Error al guardar." << endl; system("PAUSE"); } else { for (int i = 0; i < jugadores.contador; i++){ archivo << jugadores.jugador[i].nombre << " " << jugadores.jugador[i].equipo << " " << jugadores.jugador[i].numPartidos << " " << jugadores.jugador[i].minutos << " " << jugadores.jugador[i].goles << endl; } archivo << "XXX"; } archivo.close(); }