#include #include #include #include #include #include #include #include #include #include #include using namespace std; struct Player_stats { int codeplayer; string nome; double saldo; }; bool findCodePlayer(int code_user, Player_stats &jogador, vector v) { unsigned int i = 0; unsigned int LENGTH = v.size(); bool codeflag = false; while ( i < LENGTH ) { if (code_user == v[i].codeplayer) //se o código fornecido corresponder com o código do jogador { codeflag = true; //activa a flag, encontrou-se o jogador no ficheiro jogador.nome = v[i].nome; // extrai-se a informação do jogador para uma struct, onde se contempla o saldo, nome e código do jogador jogador.saldo = v[i].saldo; jogador.codeplayer = v[i].codeplayer; return codeflag; break; } i++; } return codeflag; // a flag é devolvida no final, tendo o valor de 'true' caso o programa tenha encontrado o jogador com o código fornecido } vector readPlayers() { ifstream players ("players.txt"); string linha; Player_stats jogador; vector v; getline(players, linha); //ignora a primeira linha while(players.good()) { getline(players, linha); jogador.codeplayer = atoi(linha.substr(0,8).c_str()); jogador.nome = linha.substr(8, 21); jogador.saldo = atof(linha.substr(30, 13).c_str()); v.push_back(jogador); } players.close(); return v; } bool writePlayers(vector v) { ofstream players ("players.txt"); unsigned int i = 0; const unsigned int LENGTH = v.size(); const unsigned int LASTPOS = v.size() - 1; bool playersflag = true; players.setf(ios::showpoint); players.precision(2); players.setf(ios::fixed); if (players.is_open()) { players << setfill('0') << setw(7) << v[LASTPOS].codeplayer << ' ' << endl; while (i < LENGTH) { players << setfill('0') << setw(7) << v[i].codeplayer << ' '; players << setfill(' ') << setw(21) << left << v[i].nome; players << setw(13)<< right << v[i].saldo << ' '; if (i != LENGTH - 1) players << endl; i++; } } else { cout << "File could not be opened!" << endl; playersflag = false; } return playersflag; } void actualizaSaldo2 (vector &players, Player_stats jogador, double custoapostas) { unsigned int i = 0; unsigned const int LENGTH = players.size(); double saldo; saldo = jogador.saldo; while(i < LENGTH) { if (jogador.codeplayer == players[i].codeplayer) { players[i].saldo = saldo + custoapostas; break; } else i++; } } void createNewFile() { ofstream players ("Players.txt"); players.close(); } bool fileExists() { bool fileflag = false; ifstream players ("Players.txt"); if (players.is_open()) fileflag = true; players.close(); return fileflag; } void eliminaJogador (vector &v, int codeplayer) { unsigned int i=0; while(i < v.size()) { if (codeplayer == v[i].codeplayer) { v.erase(v.begin() + i); break; } i++; } } void registaJogador (vector &v, string nome, double saldo, int &lastcodeplayer) { Player_stats jogador; jogador.nome = nome; jogador.saldo = saldo; lastcodeplayer++; jogador.codeplayer = lastcodeplayer; v.push_back(jogador); } int main() { bool validinput; bool anotheroperation; double saldo, montante; string nome, nome1, nome2; const string FILE = "Players.txt"; vector players; Player_stats jogador, jogador2; int codeplayer, lastcodeplayer; char resposta; cout << "Bem vindo ao programa de gestao de jogadores " << endl << endl; if (fileExists()) { cout << "O ficheiro 'players.txt' ja existe " << endl; cout << "Pretende criar um novo ficheiro de registo de jogadores? (S / N)"; cin >> resposta; if (toupper(resposta) == 'S') { createNewFile(); lastcodeplayer = 0; } else {players = readPlayers(); lastcodeplayer = players[players.size() - 1].codeplayer;} } else { cout << "O ficheiro 'Players.txt' nao existe, este sera criado automaticamente... " << endl << endl; lastcodeplayer = 0; createNewFile(); cout << endl << "Done!"; } do { validinput = true; cout << "Que operacao pretende efectuar? " << endl << endl; cout << "Registar um jogador (Pressione 1) " << endl << endl << "Consultar saldo de jogador (Pressione 2) " << endl << endl << "Carregar cartao de jogador (Pressione 3) " << endl << endl << "Eliminar um jogador (Pressione 4) " << endl; cin >> resposta; switch(resposta) { case '1': {cout << "Introduza o nome do jogador a registar: "; cin >> nome1 >> nome2; nome = nome1 + ' ' + nome2; cout << endl << "Introduza o saldo do jogador: "; cin >> saldo; registaJogador(players, nome, saldo, lastcodeplayer); break;} case '2': {cout << "Introduza o codigo do jogador que pretende consultar: "; cin >> codeplayer; cout << endl; findCodePlayer(codeplayer, jogador2, players); cout << "Informacoes:" << endl << endl; cout << "Codigo: " << codeplayer << endl; cout << "Nome: " << jogador2.nome << endl; cout << "Saldo: " << jogador2.saldo << endl; break; } case '3': { cout << "Introduza o codigo do cartao de jogador que pretende carregar: "; cin >> codeplayer; cout << endl << "Introduza o montante que deseja adicionar ao cartao: "; cin >> montante; findCodePlayer(codeplayer, jogador2, players); actualizaSaldo2 (players, jogador2, montante); break; } case '4': { cout << "Introduza o codigo do jogador que pretende eliminar: "; cin >> codeplayer; eliminaJogador(players, codeplayer); cout << endl << "Done! " << endl; break; } default: validinput = false; } if (validinput) { cout << endl << endl << "Deseja efectuar outra operacao? (S / N) "; cin >> resposta; if (toupper(resposta) == 'S') anotheroperation = true; else anotheroperation = false; } else cout << endl << endl << "O numero que introduziu nao tem correspondencia, escolha uma opcao valida " << endl << endl; } while (!validinput || anotheroperation); writePlayers(players); return 0; }