-
-
Save anonymous/5d8cdb4a30b4bd936440 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include "string" | |
#include <vector> | |
#include <iomanip> | |
#include <fstream> | |
#include <array> | |
using namespace std; | |
struct dadosEquipas { | |
char nomeEquipa[30]; | |
int lugarCampeonato; | |
int numPontos; | |
int numJogos; | |
int numVitorias; | |
int numEmpates; | |
int numDerrotas; | |
int golosMarcados; | |
int golosSofridos; | |
int diferencaGolos; | |
} infequipas[18]; | |
struct myclass { | |
bool operator() (dadosEquipas const &abc, dadosEquipas const &ABC) { return (abc.numPontos>ABC.numPontos); } | |
} myobject; | |
struct myclass2 { | |
bool operator() (dadosEquipas const &abc, dadosEquipas const &ABC) { return (abc.diferencaGolos>ABC.diferencaGolos); } | |
} myobject2; | |
char auxiliar1[30], auxiliar2[30]; | |
char escolha; | |
bool jogoAnulado = false; | |
bool jogo1 = false; | |
bool campeonatoVazio = true; | |
bool comparaCasa = false; | |
bool comparaFora = false; | |
bool pontosIguais; | |
const int numEquipas = 18; | |
const int numJornadas = 34; | |
string equipas[numEquipas]; | |
string equipaCasa, equipaFora; | |
string equipa1, equipa2; | |
int auxFora = 0; | |
int auxCasa = 0; | |
int golosCasa, golosFora; | |
void menuPrincipal(); | |
int main() { | |
menuPrincipal(); | |
system("PAUSE"); | |
return 0; | |
}; | |
void menuPrincipal() { | |
system("cls"); | |
int opcao; | |
cout << "\n\t\t\t\t Menu Inicial" << endl; | |
cout << setfill('=') << setw(80) << "\n" << setfill(' ') << endl; | |
cout << "\t\t\t 1. Introduzir resultado do jogo\n" << endl; | |
cout << "\t\t\t 2. Anular o ultimo jogo\n" << endl; | |
cout << "\t\t\t 3. Ver tabela de pontuacoes\n" << endl; | |
cout << "\t\t\t 4. (Re)Iniciar campeonato\n" << endl; | |
cout << "\t\t\t 5. Guardar alteracoes\n" << endl; | |
cout << "\t\t\t 6. Eliminar dados\n" << endl; | |
cout << "\t\t\t 0. Sair\n" << endl; | |
cin >> opcao; | |
while (cin.fail() || opcao > 6 || opcao < 0) | |
{ | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
cout << "Introduza uma opcao valida \n"; | |
cin >> opcao; | |
} | |
cin.sync(); | |
switch (opcao) { | |
case 1: | |
if (campeonatoVazio) { | |
cout << "Erro! O campeonato nao foi iniciado! Pressione enter para continuar!" << endl; | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
menuPrincipal(); | |
} | |
system("cls"); | |
comparaCasa = false; | |
cout << "\n\t\t\t Resultado da partida!" << endl << endl; | |
cout << setfill('=') << setw(80) << "\n" << setfill(' ') << endl; | |
cout << "Qual foi a equipa que jogou em casa?" << endl; | |
getline(cin, equipaCasa); | |
cout << '\n'; | |
while (true) { | |
for (int i = 0; i < numEquipas; i++) { | |
if (equipaCasa == infequipas[i].nomeEquipa) { | |
auxCasa = i; | |
comparaCasa = true; | |
break; | |
} | |
} | |
if (comparaCasa) break; | |
cin.clear(); | |
cout << "A equipa nao participa neste campeonato!\n"; | |
getline(cin, equipaCasa); | |
cout << "\n"; | |
} | |
cin.sync(); | |
cout << "Quantos golos marcou?" << endl; | |
cin >> golosCasa; | |
cout << '\n'; | |
while (cin.fail() || golosCasa < 0) | |
{ | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
cout << "Introduza um numero valido \n"; | |
cin >> golosCasa; | |
} | |
cin.sync(); | |
cout << "Qual foi a equipa que jogou fora?" << endl; | |
comparaFora = false; | |
getline(cin, equipaFora); | |
cout << '\n'; | |
while (true) { | |
for (int i = 0; i < numEquipas; i++) { | |
if (equipaFora == infequipas[i].nomeEquipa) { | |
auxFora = i; | |
comparaFora = true; | |
break; | |
} | |
} | |
if (comparaFora) break; | |
cin.clear(); | |
cout << "A equipa nao participa neste campeonato!\n"; | |
getline(cin, equipaFora); | |
cout << "\n"; | |
} | |
cin.sync(); | |
cout << "Quantos golos marcou?" << endl; | |
cin >> golosFora; | |
cout << '\n'; | |
while (cin.fail() || golosFora < 0) | |
{ | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
cout << "Introduza um numero valido \n"; | |
cin >> golosFora; | |
cout << "\n"; | |
} | |
cin.sync(); | |
if (golosCasa > golosFora) { | |
infequipas[auxCasa].numPontos += 3; | |
infequipas[auxCasa].numJogos++; | |
infequipas[auxCasa].numVitorias++; | |
infequipas[auxCasa].golosMarcados += golosCasa; | |
infequipas[auxCasa].golosSofridos += golosFora; | |
infequipas[auxCasa].diferencaGolos = infequipas[auxCasa].golosMarcados - infequipas[auxCasa].golosSofridos; | |
infequipas[auxFora].numJogos++; | |
infequipas[auxFora].numDerrotas++; | |
infequipas[auxFora].golosMarcados += golosFora; | |
infequipas[auxFora].golosSofridos += golosCasa; | |
infequipas[auxFora].diferencaGolos = infequipas[auxFora].golosMarcados - infequipas[auxFora].golosSofridos; | |
} | |
else if (golosFora>golosCasa) { | |
infequipas[auxCasa].numJogos++; | |
infequipas[auxCasa].numDerrotas++; | |
infequipas[auxCasa].golosMarcados += golosCasa; | |
infequipas[auxCasa].golosSofridos += golosFora; | |
infequipas[auxCasa].diferencaGolos = infequipas[auxCasa].golosMarcados - infequipas[auxCasa].golosSofridos; | |
infequipas[auxFora].numPontos += 3; | |
infequipas[auxFora].numJogos++; | |
infequipas[auxFora].numVitorias++; | |
infequipas[auxFora].golosMarcados += golosFora; | |
infequipas[auxFora].golosSofridos += golosCasa; | |
infequipas[auxFora].diferencaGolos = infequipas[auxFora].golosMarcados - infequipas[auxFora].golosSofridos; | |
} | |
else if (golosFora == golosCasa) { | |
infequipas[auxCasa].numPontos++; | |
infequipas[auxCasa].numJogos++; | |
infequipas[auxCasa].numEmpates++; | |
infequipas[auxCasa].golosMarcados += golosCasa; | |
infequipas[auxCasa].golosSofridos += golosFora; | |
infequipas[auxCasa].diferencaGolos = infequipas[auxCasa].golosMarcados - infequipas[auxCasa].golosSofridos; | |
infequipas[auxFora].numPontos++; | |
infequipas[auxFora].numJogos++; | |
infequipas[auxFora].numEmpates++; | |
infequipas[auxFora].golosMarcados += golosFora; | |
infequipas[auxFora].golosSofridos += golosCasa; | |
infequipas[auxFora].diferencaGolos = infequipas[auxFora].golosMarcados - infequipas[auxFora].golosSofridos; | |
}; | |
jogoAnulado = false; | |
jogo1 = true; | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
} | |
case 2: | |
if (campeonatoVazio) { | |
cout << "Erro! O campeonato nao foi iniciado! Pressione enter para continuar!" << endl; | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
menuPrincipal(); | |
} | |
if (jogoAnulado) { | |
cout << "Erro! Ja anulou o ultimo jogo! Pressione enter para continuar!" << endl; | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
menuPrincipal(); | |
} | |
if (jogo1 == false) { | |
cout << "Erro! Ainda nao introduziu os dados do 1o jogo! Pressione enter para continuar!" << endl; | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
menuPrincipal(); | |
} | |
system("cls"); | |
cout << "Tem mesmo a certeza que prentende anular o ultimo jogo? (s ou n)\n"; | |
cin >> escolha; | |
while (cin.fail() && escolha != 's' && escolha != 'n') { | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
cout << "Introduziu uma opcao desconhecida! \n"; | |
cin >> escolha; | |
} | |
if (escolha == 's') { | |
for (int a = 0; a < numEquipas; a++) { | |
if (equipaCasa == infequipas[a].nomeEquipa) { | |
if (golosCasa > golosFora) { | |
infequipas[a].numPontos -= 3; | |
infequipas[a].numJogos--; | |
infequipas[a].numVitorias--; | |
infequipas[a].golosMarcados -= golosCasa; | |
infequipas[a].golosSofridos -= golosFora; | |
infequipas[a].diferencaGolos = infequipas[a].golosMarcados - infequipas[a].golosSofridos; | |
} | |
else if (golosFora > golosCasa) { | |
infequipas[a].numJogos--; | |
infequipas[a].numDerrotas--; | |
infequipas[a].golosMarcados -= golosCasa; | |
infequipas[a].golosSofridos -= golosFora; | |
infequipas[a].diferencaGolos = infequipas[a].golosMarcados - infequipas[a].golosSofridos; | |
} | |
else if (golosFora == golosCasa) { | |
infequipas[a].numPontos--; | |
infequipas[a].numJogos--; | |
infequipas[a].numEmpates--; | |
infequipas[a].golosMarcados -= golosCasa; | |
infequipas[a].golosSofridos -= golosFora; | |
infequipas[a].diferencaGolos = infequipas[a].golosMarcados - infequipas[a].golosSofridos; | |
}; | |
} | |
if (equipaFora == infequipas[a].nomeEquipa) { | |
if (golosCasa > golosFora) { | |
infequipas[a].numJogos--; | |
infequipas[a].numDerrotas--; | |
infequipas[a].golosMarcados -= golosFora; | |
infequipas[a].golosSofridos -= golosCasa; | |
infequipas[a].diferencaGolos = infequipas[a].golosMarcados - infequipas[a].golosSofridos; | |
} | |
else if (golosFora > golosCasa) { | |
infequipas[a].numPontos -= 3; | |
infequipas[a].numJogos--; | |
infequipas[a].numVitorias--; | |
infequipas[a].golosMarcados -= golosFora; | |
infequipas[a].golosSofridos -= golosCasa; | |
infequipas[a].diferencaGolos = infequipas[a].golosMarcados - infequipas[a].golosSofridos; | |
} | |
else if (golosFora == golosCasa) { | |
infequipas[a].numPontos--; | |
infequipas[a].numJogos--; | |
infequipas[a].numEmpates--; | |
infequipas[a].golosMarcados -= golosFora; | |
infequipas[a].golosSofridos -= golosCasa; | |
infequipas[a].diferencaGolos = infequipas[a].golosMarcados - infequipas[a].golosSofridos; | |
}; | |
} | |
} | |
jogoAnulado = true; | |
cin.sync(); | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
} | |
else if (escolha == 'n') | |
{ | |
cin.sync(); | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
} | |
case 3: | |
if (campeonatoVazio) { | |
cout << "Erro! O campeonato nao foi iniciado! Pressione enter para continuar!" << endl; | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
menuPrincipal(); | |
} | |
else { | |
system("cls"); | |
sort(infequipas, infequipas + numEquipas, myobject); | |
int i; | |
int j = 0; | |
while (j < numEquipas) { | |
i = j; | |
while (i < numEquipas && infequipas[i].numPontos == infequipas[i + 1].numPontos) { | |
i++; | |
} | |
sort(infequipas + j, infequipas + i, myobject2); | |
j = i + 1; | |
} | |
for (int l = 0; l < numEquipas; l++) { | |
infequipas[l].lugarCampeonato = l + 1; | |
} | |
cout << setfill('=') << setw(80) << "=" << setfill(' ') << endl; | |
cout << setw(5) << "Pos." << setw(20) << "Equipa" << setw(8) << "Jorn." << setw(6) << "Pont." << setw(6) << "Vit." << setw(6) << "Emp." << setw(6) << "Der." << setw(6) << "GM." << setw(6) << "GS." << setw(6) << "DG. " << endl; | |
cout << setfill('=') << setw(80) << "=" << setfill(' ') << endl << endl; | |
for (int i = 0; i < numEquipas; i++) { | |
cout << setw(5) << infequipas[i].lugarCampeonato << setw(20) << infequipas[i].nomeEquipa << setw(8) << infequipas[i].numJogos << setw(6) << infequipas[i].numPontos << setw(6) << infequipas[i].numVitorias << setw(6) << infequipas[i].numEmpates << setw(6) << infequipas[i].numDerrotas << setw(6) << infequipas[i].golosMarcados << setw(6) << infequipas[i].golosSofridos << setw(6) << infequipas[i].diferencaGolos << endl << endl; | |
cout << setfill('=') << setw(80) << "=" << setfill(' ') << endl << endl; | |
} | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
} | |
}; | |
case 4: | |
system("cls"); | |
if (campeonatoVazio) { | |
cout << "\n\t\t\t Atencao! O campeonato nao foi iniciado!" << endl << endl; | |
cout << setfill('*') << setw(80) << "\n" << setfill(' ') << endl; | |
cout << "Introduza os dados iniciais!" << endl << endl; | |
for (int i = 0; i < numEquipas; i++) { | |
cout << "Introduza o nome da " << i + 1 << "a equipa:\n"; | |
getline(cin, equipas[i]); | |
strcpy_s(infequipas[i].nomeEquipa, equipas[i].c_str()); | |
cout << '\n'; | |
} | |
campeonatoVazio = false; | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
}; | |
if (campeonatoVazio == false) { | |
cout << "Qual e a 1a equipa que sobe de divisao?" << endl; | |
getline(cin, equipa1); | |
cout << '\n'; | |
cout << "Qual e a 2a equipa que sobe de divisao?" << endl; | |
getline(cin, equipa2); | |
cout << '\n'; | |
for (int b = 0; b < numEquipas; b++) { | |
if (infequipas[b].lugarCampeonato == 17) strcpy_s(infequipas[b].nomeEquipa, equipa1.c_str()); | |
if (infequipas[b].lugarCampeonato == 18) strcpy_s(infequipas[b].nomeEquipa, equipa2.c_str()); | |
} | |
for (int b = 0; b < numEquipas; b++) { | |
infequipas[b].numPontos = 0; | |
infequipas[b].numJogos = 0; | |
infequipas[b].numVitorias = 0; | |
infequipas[b].numEmpates = 0; | |
infequipas[b].numDerrotas = 0; | |
infequipas[b].golosMarcados = 0; | |
infequipas[b].golosSofridos = 0; | |
infequipas[b].diferencaGolos = 0; | |
} | |
jogo1 = false; | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
}; | |
case 5: | |
if (campeonatoVazio) { | |
cout << "Erro! O campeonato nao foi iniciado! Pressione enter para continuar!" << endl; | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
menuPrincipal(); | |
} | |
system("cls"); | |
cout << "Deseja guardar as alteracoes efetuadas? (s ou n)\n"; | |
cin >> escolha; | |
while (cin.fail() && escolha != 's' && escolha != 'n') { | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
cout << "Introduziu uma opcao desconhecida! \n"; | |
cin >> escolha; | |
} | |
if (escolha == 'n') { | |
cin.sync(); | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
} | |
else if (escolha == 's') { | |
cin.sync(); | |
ofstream myfile("informacoesEquipas.txt"); | |
if (myfile.is_open()) { | |
for (int u = 0; u < numEquipas; u++) { | |
myfile << "\n *** Lugar no Campeonato: *** \n"; | |
myfile << infequipas[u].lugarCampeonato << "\n"; | |
myfile << "Nome da Equipa:\n"; | |
myfile << infequipas[u].nomeEquipa << "\n"; | |
myfile << "Numero de Jogos:\n"; | |
myfile << infequipas[u].numJogos << "\n"; | |
myfile << "Numero de Pontos:\n"; | |
myfile << infequipas[u].numPontos << "\n"; | |
myfile << "Numero de Vitorias:\n"; | |
myfile << infequipas[u].numVitorias << "\n"; | |
myfile << "Numero de Empates:\n"; | |
myfile << infequipas[u].numEmpates << "\n"; | |
myfile << "Numero de Derrotas:\n"; | |
myfile << infequipas[u].numDerrotas << "\n"; | |
myfile << "Golos Marcados:\n"; | |
myfile << infequipas[u].golosMarcados << "\n"; | |
myfile << "Golos Sofridos:\n"; | |
myfile << infequipas[u].golosSofridos << "\n"; | |
myfile << "Diferença de Golos:\n"; | |
myfile << infequipas[u].diferencaGolos << "\n"; | |
}; | |
myfile.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile2("jogoAnulado.txt"); | |
if (myfile2.is_open()) { | |
/*if (jogoAnulado) {*/ | |
myfile2 << jogoAnulado; | |
/*} | |
else myfile2 << 0;*/ | |
myfile2.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile3("jogo1.txt"); | |
if (myfile3.is_open()) { | |
if (jogo1) myfile3 << 1; | |
else myfile3 << 0; | |
myfile.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile4("campeonatoVazio.txt"); | |
if (myfile4.is_open()) { | |
if (campeonatoVazio) myfile4 << 1; | |
else myfile4 << 0; | |
myfile4.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile5("equipaCasa.txt"); | |
if (myfile5.is_open()) { | |
myfile5 << equipaCasa; | |
myfile5.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile6("equipaFora.txt"); | |
if (myfile6.is_open()) { | |
myfile6 << equipaFora; | |
myfile6.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile7("auxCasa.txt"); | |
if (myfile7.is_open()) { | |
myfile7 << auxCasa; | |
myfile7.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile8("auxFora.txt"); | |
if (myfile8.is_open()) { | |
myfile8 << auxFora; | |
myfile8.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile9("golosCasa.txt"); | |
if (myfile9.is_open()) { | |
myfile9 << golosCasa; | |
myfile9.close(); | |
} | |
else cout << "Unable to open file"; | |
ofstream myfile10("golosFora.txt"); | |
if (myfile10.is_open()) { | |
myfile10 << golosFora; | |
myfile10.close(); | |
} | |
else cout << "Unable to open file"; | |
} | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
case 6: | |
if (campeonatoVazio) { | |
cout << "Erro! O campeonato nao foi iniciado! Pressione enter para continuar!" << endl; | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
menuPrincipal(); | |
} | |
system("cls"); | |
cout << "Tem mesmo a certeza que prentende eliminar os dados? (s ou n)\n"; | |
cin >> escolha; | |
while (cin.fail() && escolha != 's' && escolha != 'n') { | |
cin.clear(); | |
cin.ignore(400, '\n'); | |
cout << "Introduziu uma opcao desconhecida! \n"; | |
cin >> escolha; | |
} | |
if (escolha == 's') { | |
campeonatoVazio = true; | |
cin.sync(); | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
} | |
else if (escolha == 'n') | |
{ | |
campeonatoVazio = false; | |
cin.sync(); | |
cout << "Pressione enter para voltar ao menu inicial" << endl; | |
if (cin.get() == '\n') { | |
menuPrincipal(); | |
}; | |
} | |
case 0: | |
cout << "Enter para sair..." << endl; | |
if (cin.get() == '\n') { | |
exit(EXIT_FAILURE); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment