240 lines
7.0 KiB
C++
240 lines
7.0 KiB
C++
|
//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();
|
|||
|
}
|