1
|
#include <iostream>
|
2
|
#include <ctime>
|
3
|
#include <cstdlib>
|
4
|
#include <vector>
|
5
|
#include <fstream>
|
6
|
#include <string>
|
7
|
#include <iomanip>
|
8
|
#include <sstream>
|
9
|
#include <stdio.h>
|
10
|
#include <stdlib.h>
|
11
|
#include <math.h>
|
12
|
|
13
|
using namespace std;
|
14
|
|
15
|
|
16
|
|
17
|
struct Player_stats
|
18
|
{
|
19
|
int codeplayer;
|
20
|
string nome;
|
21
|
double saldo;
|
22
|
};
|
23
|
|
24
|
|
25
|
|
26
|
bool findCodePlayer(int code_user, Player_stats &jogador, vector<Player_stats> v)
|
27
|
{
|
28
|
unsigned int i = 0;
|
29
|
unsigned int LENGTH = v.size();
|
30
|
bool codeflag = false;
|
31
|
|
32
|
|
33
|
while ( i < LENGTH )
|
34
|
{
|
35
|
|
36
|
if (code_user == v[i].codeplayer)
|
37
|
{
|
38
|
codeflag = true;
|
39
|
jogador.nome = v[i].nome;
|
40
|
jogador.saldo = v[i].saldo;
|
41
|
jogador.codeplayer = v[i].codeplayer;
|
42
|
return codeflag;
|
43
|
break;
|
44
|
}
|
45
|
|
46
|
i++;
|
47
|
}
|
48
|
|
49
|
return codeflag;
|
50
|
}
|
51
|
|
52
|
vector <Player_stats> readPlayers()
|
53
|
{
|
54
|
ifstream players ("players.txt");
|
55
|
string linha;
|
56
|
Player_stats jogador;
|
57
|
vector <Player_stats> v;
|
58
|
getline(players, linha);
|
59
|
|
60
|
while(players.good())
|
61
|
{
|
62
|
getline(players, linha);
|
63
|
jogador.codeplayer = atoi(linha.substr(0,8).c_str());
|
64
|
jogador.nome = linha.substr(8, 21);
|
65
|
jogador.saldo = atof(linha.substr(30, 13).c_str());
|
66
|
v.push_back(jogador);
|
67
|
}
|
68
|
|
69
|
players.close();
|
70
|
return v;
|
71
|
}
|
72
|
|
73
|
bool writePlayers(vector<Player_stats> v)
|
74
|
{
|
75
|
ofstream players ("players.txt");
|
76
|
unsigned int i = 0;
|
77
|
const unsigned int LENGTH = v.size();
|
78
|
const unsigned int LASTPOS = v.size() - 1;
|
79
|
bool playersflag = true;
|
80
|
players.setf(ios::showpoint);
|
81
|
players.precision(2);
|
82
|
players.setf(ios::fixed);
|
83
|
|
84
|
if (players.is_open())
|
85
|
{
|
86
|
players << setfill('0') << setw(7) << v[LASTPOS].codeplayer << ' ' << endl;
|
87
|
|
88
|
while (i < LENGTH)
|
89
|
{
|
90
|
players << setfill('0') << setw(7) << v[i].codeplayer << ' ';
|
91
|
players << setfill(' ') << setw(21) << left << v[i].nome;
|
92
|
players << setw(13)<< right << v[i].saldo << ' ';
|
93
|
|
94
|
if (i != LENGTH - 1)
|
95
|
players << endl;
|
96
|
i++;
|
97
|
}
|
98
|
}
|
99
|
else
|
100
|
{ cout << "File could not be opened!" << endl;
|
101
|
playersflag = false; }
|
102
|
|
103
|
return playersflag;
|
104
|
}
|
105
|
|
106
|
|
107
|
|
108
|
void actualizaSaldo2 (vector<Player_stats> &players, Player_stats jogador, double custoapostas)
|
109
|
{
|
110
|
unsigned int i = 0;
|
111
|
unsigned const int LENGTH = players.size();
|
112
|
double saldo;
|
113
|
saldo = jogador.saldo;
|
114
|
|
115
|
|
116
|
while(i < LENGTH)
|
117
|
{
|
118
|
if (jogador.codeplayer == players[i].codeplayer)
|
119
|
{
|
120
|
players[i].saldo = saldo + custoapostas;
|
121
|
break;
|
122
|
}
|
123
|
else
|
124
|
i++;
|
125
|
}
|
126
|
|
127
|
}
|
128
|
void createNewFile()
|
129
|
{
|
130
|
ofstream players ("Players.txt");
|
131
|
players.close();
|
132
|
}
|
133
|
|
134
|
bool fileExists()
|
135
|
{
|
136
|
bool fileflag = false;
|
137
|
ifstream players ("Players.txt");
|
138
|
if (players.is_open())
|
139
|
fileflag = true;
|
140
|
players.close();
|
141
|
return fileflag;
|
142
|
}
|
143
|
|
144
|
void eliminaJogador (vector<Player_stats> &v, int codeplayer)
|
145
|
{
|
146
|
unsigned int i=0;
|
147
|
while(i < v.size())
|
148
|
{
|
149
|
if (codeplayer == v[i].codeplayer)
|
150
|
{ v.erase(v.begin() + i);
|
151
|
break;
|
152
|
}
|
153
|
|
154
|
i++;
|
155
|
}
|
156
|
}
|
157
|
|
158
|
void registaJogador (vector<Player_stats> &v, string nome, double saldo, int &lastcodeplayer)
|
159
|
{
|
160
|
Player_stats jogador;
|
161
|
jogador.nome = nome;
|
162
|
jogador.saldo = saldo;
|
163
|
lastcodeplayer++;
|
164
|
jogador.codeplayer = lastcodeplayer;
|
165
|
v.push_back(jogador);
|
166
|
}
|
167
|
|
168
|
|
169
|
|
170
|
|
171
|
|
172
|
int main()
|
173
|
{
|
174
|
bool validinput;
|
175
|
bool anotheroperation;
|
176
|
double saldo, montante;
|
177
|
string nome, nome1, nome2;
|
178
|
const string FILE = "Players.txt";
|
179
|
vector<Player_stats> players;
|
180
|
Player_stats jogador, jogador2;
|
181
|
int codeplayer, lastcodeplayer;
|
182
|
char resposta;
|
183
|
cout << "Bem vindo ao programa de gestao de jogadores " << endl << endl;
|
184
|
if (fileExists())
|
185
|
{
|
186
|
cout << "O ficheiro 'players.txt' ja existe " << endl;
|
187
|
cout << "Pretende criar um novo ficheiro de registo de jogadores? (S / N)";
|
188
|
cin >> resposta;
|
189
|
if (toupper(resposta) == 'S')
|
190
|
{
|
191
|
createNewFile();
|
192
|
lastcodeplayer = 0;
|
193
|
}
|
194
|
else
|
195
|
{players = readPlayers();
|
196
|
lastcodeplayer = players[players.size() - 1].codeplayer;}
|
197
|
}
|
198
|
else
|
199
|
{
|
200
|
cout << "O ficheiro 'Players.txt' nao existe, este sera criado automaticamente... " << endl << endl;
|
201
|
lastcodeplayer = 0;
|
202
|
createNewFile();
|
203
|
cout << endl << "Done!";
|
204
|
}
|
205
|
do {
|
206
|
validinput = true;
|
207
|
cout << "Que operacao pretende efectuar? " << endl << endl;
|
208
|
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;
|
209
|
cin >> resposta;
|
210
|
|
211
|
switch(resposta)
|
212
|
{
|
213
|
case '1':
|
214
|
{cout << "Introduza o nome do jogador a registar: ";
|
215
|
cin >> nome1 >> nome2;
|
216
|
nome = nome1 + ' ' + nome2;
|
217
|
cout << endl << "Introduza o saldo do jogador: ";
|
218
|
cin >> saldo;
|
219
|
registaJogador(players, nome, saldo, lastcodeplayer);
|
220
|
break;}
|
221
|
case '2':
|
222
|
{cout << "Introduza o codigo do jogador que pretende consultar: ";
|
223
|
cin >> codeplayer;
|
224
|
cout << endl;
|
225
|
findCodePlayer(codeplayer, jogador2, players);
|
226
|
cout << "Informacoes:" << endl << endl;
|
227
|
cout << "Codigo: " << codeplayer << endl;
|
228
|
cout << "Nome: " << jogador2.nome << endl;
|
229
|
cout << "Saldo: " << jogador2.saldo << endl;
|
230
|
break; }
|
231
|
|
232
|
case '3':
|
233
|
{
|
234
|
cout << "Introduza o codigo do cartao de jogador que pretende carregar: ";
|
235
|
cin >> codeplayer;
|
236
|
cout << endl << "Introduza o montante que deseja adicionar ao cartao: ";
|
237
|
cin >> montante;
|
238
|
findCodePlayer(codeplayer, jogador2, players);
|
239
|
actualizaSaldo2 (players, jogador2, montante);
|
240
|
break;
|
241
|
}
|
242
|
case '4':
|
243
|
{
|
244
|
cout << "Introduza o codigo do jogador que pretende eliminar: ";
|
245
|
cin >> codeplayer;
|
246
|
eliminaJogador(players, codeplayer);
|
247
|
cout << endl << "Done! " << endl;
|
248
|
break;
|
249
|
}
|
250
|
|
251
|
default:
|
252
|
validinput = false;
|
253
|
}
|
254
|
|
255
|
if (validinput)
|
256
|
{
|
257
|
cout << endl << endl << "Deseja efectuar outra operacao? (S / N) ";
|
258
|
cin >> resposta;
|
259
|
if (toupper(resposta) == 'S')
|
260
|
anotheroperation = true;
|
261
|
else
|
262
|
anotheroperation = false;
|
263
|
}
|
264
|
else
|
265
|
cout << endl << endl << "O numero que introduziu nao tem correspondencia, escolha uma opcao valida " << endl << endl;
|
266
|
}
|
267
|
while (!validinput || anotheroperation);
|
268
|
|
269
|
writePlayers(players);
|
270
|
return 0;
|
271
|
}
|
272
|
|
273
|
|
274
|
|