Project

General

Profile

players.cpp

Ruben Cordeiro, 10/04/2012 08:54

Download (6.34 KB)

 
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) //se o c?digo fornecido corresponder com o c?digo do jogador 
37
                        {
38
                                codeflag = true; //activa a flag, encontrou-se o jogador no ficheiro
39
                                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
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; // a flag ? devolvida no final, tendo o valor de 'true' caso o programa tenha encontrado o jogador com o c?digo fornecido
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);  //ignora a primeira 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