07651a8047
Para uso exclusivo con fines de estudio. Se prohíbe su uso para entregas calificables y/o uso comercial.
258 lines
6.6 KiB
C++
258 lines
6.6 KiB
C++
//Examen Febrero 2017 - Grupos B, C y D
|
|
//Fernando Méndez Torrubiano
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <fstream>
|
|
#include <iomanip>
|
|
using namespace std;
|
|
|
|
//Constantes:
|
|
const int N = 10;
|
|
|
|
//Tipos:
|
|
typedef struct tEquipo {
|
|
string nombre;
|
|
int puntos;
|
|
};
|
|
typedef struct tJornada {
|
|
string local, visitante;
|
|
int golesLocal, golesVisitante;
|
|
};
|
|
typedef tEquipo tEquipos[N];
|
|
typedef tJornada tPartidos[N / 2];
|
|
typedef struct tListaEquipos {
|
|
tEquipos equipo;
|
|
tPartidos partido;
|
|
//En este examen no se necesita un contador.
|
|
};
|
|
|
|
//Funciones:
|
|
void inicia(tListaEquipos&);
|
|
bool cargarLiga(tListaEquipos&);
|
|
bool cargarJornada(tListaEquipos&);
|
|
void mostrarLiga(tListaEquipos&);
|
|
void mostrarJornada(tListaEquipos&);
|
|
int menu();
|
|
void ejecutarMenu(tListaEquipos&);
|
|
bool actualizarLiga(tListaEquipos&);
|
|
void mostrarPrimero(tListaEquipos&);
|
|
void guardarLiga(tListaEquipos&);
|
|
void ordenar(tListaEquipos&);
|
|
|
|
int main() {
|
|
tListaEquipos equipos;
|
|
|
|
inicia(equipos);
|
|
if ((cargarLiga(equipos)) && (cargarJornada(equipos))) {
|
|
ejecutarMenu(equipos);
|
|
guardarLiga(equipos);
|
|
}
|
|
else {
|
|
cout << "FIN DEL PROGRAMA." << endl;
|
|
system("PAUSE");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void inicia(tListaEquipos& equipos) {
|
|
for (int i = 0; i < N; i++){
|
|
equipos.equipo[i].nombre = "";
|
|
equipos.equipo[i].puntos = 0;
|
|
if (i < N / 2) {
|
|
equipos.partido[i].local = "";
|
|
equipos.partido[i].visitante = "";
|
|
equipos.partido[i].golesLocal = 0;
|
|
equipos.partido[i].golesVisitante = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool cargarLiga(tListaEquipos& equipos) {
|
|
bool carga = false;
|
|
ifstream archivo;
|
|
|
|
archivo.open("liga.txt");
|
|
if (!archivo.is_open()) {
|
|
cout << "Error al cargar la liga." << endl;
|
|
carga = false;
|
|
}
|
|
else {
|
|
for (int i = 0; i < N; i++) {
|
|
archivo >> equipos.equipo[i].nombre;
|
|
archivo >> equipos.equipo[i].puntos;
|
|
}
|
|
ordenar(equipos);
|
|
carga = true;
|
|
}
|
|
archivo.close();
|
|
|
|
return carga;
|
|
}
|
|
|
|
void ordenar(tListaEquipos& equipos) {
|
|
string auxiliar;
|
|
int aux, pos;
|
|
|
|
for (int i = 0; i < N; i++) {
|
|
pos = i;
|
|
while ((equipos.equipo[pos].puntos > equipos.equipo[pos - 1].puntos) && (pos > 0)) {
|
|
auxiliar = equipos.equipo[pos].nombre;
|
|
equipos.equipo[pos].nombre = equipos.equipo[pos - 1].nombre;
|
|
equipos.equipo[pos - 1].nombre = auxiliar;
|
|
|
|
aux = equipos.equipo[pos].puntos;
|
|
equipos.equipo[pos].puntos = equipos.equipo[pos - 1].puntos;
|
|
equipos.equipo[pos - 1].puntos = aux;
|
|
|
|
pos--;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool cargarJornada(tListaEquipos& equipos) {
|
|
bool carga = false;
|
|
ifstream archivo;
|
|
|
|
archivo.open("jornada.txt");
|
|
if (!archivo.is_open()) {
|
|
cout << "Error al cargar la jornada." << endl;
|
|
carga = false;
|
|
}
|
|
else {
|
|
for (int i = 0; i < N / 2; i++) {
|
|
archivo >> equipos.partido[i].local;
|
|
archivo >> equipos.partido[i].golesLocal;
|
|
archivo >> equipos.partido[i].visitante;
|
|
archivo >> equipos.partido[i].golesVisitante;
|
|
}
|
|
carga = true;
|
|
}
|
|
archivo.close();
|
|
|
|
return carga;
|
|
}
|
|
|
|
void mostrarLiga(tListaEquipos& equipos) {
|
|
cout << setw(7) << right << "EQUIPO" << setw(15) << right << "PUNTOS" << endl;
|
|
cout << setfill('=') << setw(25) << "\n" << setfill(char(0)) << setw(0);
|
|
for (int i = 0; i < N; i++){
|
|
cout << setw(7) << right << equipos.equipo[i].nombre
|
|
<< setw(15) << right << equipos.equipo[i].puntos << endl;
|
|
}
|
|
cout << setfill('=') << setw(25) << "\n" << setfill(char(0)) << setw(0);
|
|
}
|
|
|
|
void mostrarJornada(tListaEquipos& equipos) {
|
|
cout << setw(5) << right << "LOCAL" << setw(10) << "GOLES" << setw(20) << "VISITANTE" << setw(10) << "GOLES" << endl;
|
|
cout << setfill('=') << setw(50) << "\n" << setfill(char(0)) << setw(0);
|
|
for (int i = 0; i < N/2; i++) {
|
|
cout << setw(4) << right << equipos.partido[i].local << left
|
|
<< setw(2) << right << setw(10) << equipos.partido[i].golesLocal << left
|
|
<< setw(4) << right <<setw(20) << equipos.partido[i].visitante << left
|
|
<< setw(2) << right <<setw(10) << equipos.partido[i].golesVisitante << endl;
|
|
}
|
|
cout << setfill('=') << setw(50) << "\n" << setfill(char(0)) << setw(0);
|
|
}
|
|
|
|
int menu() {
|
|
int opc = 0;
|
|
|
|
cout << setw(35) << setfill('=') << "\n" << setfill(char(0)) << setw(0);
|
|
cout << "1.-MOSTRAR CLASIFICACION DE LA LIGA." << endl;
|
|
cout << "2.-MOSTRAR ULTIMA JORNADA." << endl;
|
|
cout << "3.-ACTUALIZAR LIGA." << endl;
|
|
cout << "4.-MOSTRAR PRIMER CLASIFICADO." << endl;
|
|
cout << "0.-SALIR." << endl;
|
|
cout << setw(35) << setfill('=') << "\n" << setfill(char(0)) << setw(0);
|
|
|
|
do {
|
|
cout << "Introduzca una opcion: ";
|
|
cin >> opc;
|
|
} while (opc < 0 || opc > 4);
|
|
|
|
return opc;
|
|
}
|
|
|
|
void ejecutarMenu(tListaEquipos& equipos) {
|
|
int opc = 1;
|
|
|
|
while (opc != 0) {
|
|
opc = menu();
|
|
switch (opc) {
|
|
case 1: mostrarLiga(equipos); break;
|
|
case 2: mostrarJornada(equipos); break;
|
|
case 3: if (actualizarLiga(equipos)) { cout << "ACTUALIZADA CORRECTAMENTE." << endl; }
|
|
else { cout << "ERROR AL ACTUALIZAR." << endl; } break;
|
|
case 4: mostrarPrimero(equipos); break;
|
|
case 0: break;
|
|
}
|
|
system("Pause");
|
|
system("cls");
|
|
}
|
|
}
|
|
|
|
bool actualizarLiga(tListaEquipos& equipos) {
|
|
bool encontrado = false;
|
|
int j = 0;
|
|
|
|
for (int i = 0; i < N/2; i++){
|
|
if (equipos.partido[i].golesLocal > equipos.partido[i].golesVisitante) {
|
|
j = 0;
|
|
while (!encontrado && j < N) {
|
|
if (equipos.equipo[j].nombre == equipos.partido[i].local) {
|
|
equipos.equipo[j].puntos += 3;
|
|
encontrado = true;
|
|
}
|
|
j++;
|
|
}
|
|
}
|
|
if (equipos.partido[i].golesLocal < equipos.partido[i].golesVisitante) {
|
|
j = 0;
|
|
while (!encontrado && j < N) {
|
|
if (equipos.equipo[j].nombre == equipos.partido[i].visitante) {
|
|
equipos.equipo[j].puntos += 3;
|
|
}
|
|
j++;
|
|
}
|
|
}
|
|
if (equipos.partido[i].golesLocal == equipos.partido[i].golesVisitante) {
|
|
j = 0;
|
|
while (j < N) {
|
|
if (equipos.equipo[j].nombre == equipos.partido[i].local) {
|
|
equipos.equipo[j].puntos += 1;
|
|
}
|
|
if (equipos.equipo[j].nombre == equipos.partido[i].visitante) {
|
|
equipos.equipo[j].puntos += 1;
|
|
}
|
|
j++;
|
|
}
|
|
encontrado = true;
|
|
}
|
|
}
|
|
ordenar(equipos);
|
|
|
|
return encontrado;
|
|
}
|
|
|
|
void mostrarPrimero(tListaEquipos& equipos) {
|
|
ordenar(equipos);
|
|
cout << "Primer equipo en la liga: " << equipos.equipo[0].nombre << " con " << equipos.equipo[0].puntos << " puntos." << endl;
|
|
}
|
|
|
|
void guardarLiga(tListaEquipos& equipos) {
|
|
ofstream archivo;
|
|
|
|
archivo.open("liga.txt");
|
|
if (!archivo.is_open()) {
|
|
cout << "Error al guardar los datos." << endl;
|
|
}
|
|
else {
|
|
for (int i = 0; i < N; i++) {
|
|
archivo << equipos.equipo[i].nombre << " ";
|
|
archivo << equipos.equipo[i].puntos << endl;
|
|
}
|
|
}
|
|
archivo.close();
|
|
} |