Cpp/Exámenes Resueltos (Primer Semestre)/Febrero 2014 (Grupos C, E y F)/ExFeb14CEF_Fernando.cpp

240 lines
7.0 KiB
C++
Raw Permalink Normal View History

//Ex<45>men Febrero 2014 - Grupos C, E y F.
//Fernando M<>ndez Torrubinao
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
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();
}