Project

General

Profile

Bets.cpp

Ruben Cordeiro, 10/04/2012 08:53

Download (8.1 KB)

 
1
#include "Bets.h"
2

    
3
#include <iostream> 
4
#include <ctime> 
5
#include <cstdlib>
6
#include <vector>
7
#include <fstream>
8
#include <string>
9
#include <iomanip>
10
#include <sstream>
11
#include <stdio.h>
12
#include <stdlib.h>
13
#include <math.h>
14

    
15
struct Player_stats
16
{
17
        int codeplayer;
18
        string nome;
19
        double saldo;
20
};
21

    
22

    
23

    
24

    
25
int gera_numero() // gera n?meros aleat?rios
26
{ 
27
        return 1 + rand() % (50 - 1 + 1); 
28
}
29

    
30
int gera_estrela () // gera estrelas aleat?rias
31
{ 
32
        return 1 + rand() % (11 - 1 + 1); 
33
}
34

    
35
bool checkAposta (vector<int> v, int numero, unsigned int i)
36
{
37
        bool checkflag = false; 
38
        for(i; i < v.size(); i++)
39
        {
40
                if (v[i] == numero)
41
                {
42
                        checkflag = true; 
43
                        return checkflag; 
44
                        break; 
45
                }
46
                i++;
47
        }
48
        return checkflag; 
49
}
50

    
51
void bubbleSort(vector<int> &vec, unsigned int imin, unsigned int imax){ // programa que ordena os n?meros das apostas
52
        bool sortAccendingOrder = true;
53
        for(unsigned int i = imin; i <= imax;i++)
54
                for(unsigned int j = i+1; j <= imax; j++)
55
                {
56
                        if(sortAccendingOrder)
57
                        {
58
                                if(vec[i] > vec[j])
59
                                        std::swap(vec[i],vec[j]);
60
                        }
61
                        else if(vec[i] < vec[j]) //else decendingOrder
62
                                std::swap(vec[i],vec[j]);
63
                }
64

    
65
}
66

    
67

    
68
vector<int> gera_aposta () // gera um vector de aposta com n?meros aleat?rios
69
{
70
        vector<int> v_bets;
71
        int bet;
72
        unsigned int i = 0; 
73

    
74
        while ( i < 5)
75
        {
76
                bet = gera_numero();
77
                if (!checkAposta(v_bets, bet, 0))
78
                {
79
                        v_bets.push_back(bet);
80
                        i++;
81
                }
82
        }
83
        while ( i < 7)
84
        {
85
                bet = gera_estrela();
86

    
87
                if (!checkAposta(v_bets, bet, 5))
88
                {
89
                        v_bets.push_back(bet);
90
                        i++;
91
                }
92
        }
93

    
94

    
95
        bubbleSort(v_bets, 0, 4);
96
        bubbleSort(v_bets, 5, 6);
97

    
98
        return v_bets;
99
}
100

    
101

    
102

    
103

    
104

    
105

    
106
                        
107

    
108
void mostra_aposta (vector<int> v) // faz display de um vetor na consola, para fins de valida??o pelo utilizador
109
{
110
        for (int i = 0; i < 7; i++)
111
                cout << v[i] << " ";
112
}
113

    
114

    
115

    
116

    
117

    
118

    
119
vector<int> introduzAposta () // cria um vector que cont?m uma aposta com n?meros introduzidos pelo utilizador
120
{
121
        vector<int> vbet;
122
        int n = 1;
123
        int nEstrela = 1; 
124
        int numero;
125
        unsigned int i = 0;
126

    
127

    
128
        while (i < 7)
129
        {
130
                if (i < 5)
131
                {
132
                        cout << "Numero " << n << ":"; 
133
                        cin >> numero;
134
                        cout << endl;
135
                        if (!checkAposta(vbet, numero, 0) && numero >= 1 && numero <= 50)
136
                        {
137
                        vbet.push_back(numero);
138
                        n++;
139
                        i++;
140
                        }
141
                        else
142
                        { cout << "O numero que introduziu esta fora dos limites ou e repetido!" << endl;
143
                        }
144
                }
145
                else
146
                {
147
                        cout << "Estrela " << nEstrela << ":";
148
                        cin >> numero; 
149
                        cout << endl;
150
                        if (!checkAposta(vbet, numero, 5) && numero >=1 && numero <=11)
151
                        {vbet.push_back(numero); 
152
                        nEstrela++;
153
                        i++;}
154
                        else
155
                                cout << "O numero que introduziu esta fora dos limites ou e repetido!" << endl; 
156
                }
157
        }
158

    
159
        bubbleSort(vbet, 0, 4);
160
        bubbleSort(vbet, 5, 6);
161

    
162

    
163
        return vbet;
164
}
165

    
166

    
167
void addBet (vector <vector <int>> &vbets, vector <int> bet)
168
{
169
        vbets.push_back(bet);
170
}
171

    
172

    
173
bool writeBets (vector<vector<int>> v, int codeplayer) // escreve uma determinada aposta no ficheiro 'bets.txt'
174
{
175
        bool validoutput = true; 
176
        ofstream betsfile;
177
        betsfile.open ("bets.txt", ios::out | ios::app);
178
        const unsigned int LENGTH = v.size();
179
        const unsigned int LENGTH2 = v[1].size();
180
        
181

    
182
        if (betsfile.is_open())
183
        {
184
                betsfile << setfill('0') << setw(8) <<  codeplayer << setfill(' ') <<  endl;
185

    
186
                for (unsigned int i = 0; i < LENGTH; i++)
187
                        { 
188
                                for (unsigned int j = 0; j < LENGTH2; j++)
189
                                {
190
                                        if (j == 5)
191
                                        {
192
                                        betsfile << "-" << " " << setw(2) << v[i][j] << " ";
193

    
194
                                        }
195

    
196
                                else 
197

    
198
                                { 
199
                                        betsfile << setw(2) << v[i][j] << " "; 
200
                                }
201
                        }
202
                                betsfile << endl;
203
        
204
                }
205
        betsfile << endl;
206
        }
207
        else 
208
        {
209
                cout << "Error, could not open file" << endl;
210
                validoutput = false; 
211
        }
212

    
213
        return validoutput;
214
        betsfile.close();
215
}
216

    
217
bool findCodePlayer(int code_user, Player_stats &jogador, vector<Player_stats> v)
218
{
219
        unsigned int i = 0;
220
        unsigned int LENGTH = v.size();
221
        bool codeflag = false;
222

    
223
                
224
                while ( i < LENGTH )
225
                {
226

    
227
                        if (code_user == v[i].codeplayer) //se o c?digo fornecido corresponder com o c?digo do jogador 
228
                        {
229
                                codeflag = true; //activa a flag, encontrou-se o jogador no ficheiro
230
                                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
231
                                jogador.saldo = v[i].saldo;
232
                                jogador.codeplayer = v[i].codeplayer;
233
                                return codeflag;
234
                                break;
235
                        }
236

    
237
                        i++;
238
                }
239

    
240
        return codeflag; // a flag ? devolvida no final, tendo o valor de 'true' caso o programa tenha encontrado o jogador com o c?digo fornecido
241
}
242

    
243
vector <Player_stats> readPlayers()
244
{
245
        ifstream players ("players.txt");
246
        string linha;
247
        Player_stats jogador;
248
        vector <Player_stats> v;
249
        getline(players, linha);  //ignora a primeira linha
250

    
251
        while(players.good())
252
        {
253
                getline(players, linha);
254
                jogador.codeplayer = atoi(linha.substr(0,8).c_str());
255
                jogador.nome =  linha.substr(8, 21);
256
                jogador.saldo = atof(linha.substr(30, 13).c_str());
257
                v.push_back(jogador);
258
        }
259

    
260
        players.close();
261
        return v;
262
}
263

    
264
bool writePlayers(vector<Player_stats> v)
265
{
266
        ofstream players ("players.txt");
267
        unsigned int i = 0; 
268
        const unsigned int LENGTH = v.size();
269
        const unsigned int LASTPOS = v.size() - 1;
270
        bool playersflag = true;
271
        players.setf(ios::showpoint);
272
        players.precision(2);
273
        players.setf(ios::fixed);
274

    
275
        if (players.is_open())
276
        {
277
                players << setfill('0') << setw(7) << v[LASTPOS].codeplayer << ' ' << endl;
278
                
279
                while (i < LENGTH)
280
                {
281
                        players << setfill('0') << setw(7)  << v[i].codeplayer << ' ';
282
                        players << setfill(' ') << setw(21) << left << v[i].nome;
283
                        players << setw(13)<< right << v[i].saldo << ' ';
284
        
285
                        if (i != LENGTH - 1)
286
                                players << endl; 
287
                        i++;
288
                }
289
        }
290
        else
291
                { cout << "File could not be opened!" << endl; 
292
                        playersflag = false; }
293

    
294
        return playersflag; 
295
}
296

    
297

    
298

    
299
void actualizaSaldo (vector<Player_stats> &players, Player_stats jogador, double custoapostas)
300
{
301
        unsigned int i = 0;        
302
        unsigned const int LENGTH = players.size();
303
        double saldo;
304
        saldo = jogador.saldo;
305

    
306
        
307
        while(i < LENGTH)
308
        {
309
                if (jogador.codeplayer == players[i].codeplayer)
310
                {
311
                        players[i].saldo = saldo - custoapostas;
312
                        break;
313
                }
314
                else
315
                        i++;
316
        }
317

    
318
}
319

    
320

    
321

    
322
int main()
323
{
324
        vector<Player_stats> players;
325
        vector <int> apostaprov; 
326
        Player_stats jogador;
327
        vector <vector <int>> vbets;
328
        int codeplayer;
329
        int nApostasAuto, nApostasManu;
330
        int naposta = 1;
331
        double custoapostas;
332
        const int BETSCOST = 1;
333
        char resposta; 
334
        cout << "Indique o seu codigo de jogador: ";
335
        cin >> codeplayer;
336
        
337
        players = readPlayers();
338

    
339
        if (findCodePlayer(codeplayer, jogador, players))
340
        {
341
                cout << "Quantas apostas manuais pretende fazer? ";
342
                cin >> nApostasManu;
343
                cout << endl; 
344
                cout << "Quantas apostas automaticas pretende fazer? ";
345
                cin >> nApostasAuto;
346
                custoapostas = (nApostasAuto + nApostasManu)* BETSCOST;
347

    
348
                if (jogador.saldo > custoapostas)
349
                { 
350
                        actualizaSaldo (players, jogador, custoapostas);
351
                        
352
                        while (nApostasAuto > 0)
353
                        {
354
                                apostaprov = gera_aposta();
355
                                cout << "A aposta Automaticamente gerada: ";
356
                                mostra_aposta(apostaprov);
357
                                cout << endl << "Aceita a aposta? (S / N) ";
358
                                cin >> resposta; 
359
                                if (toupper(resposta) == 'S')
360
                                {
361
                                        addBet(vbets,apostaprov);
362
                                        nApostasAuto--;
363
                                }
364
                                else
365
                                        cout << "Aposta descartada!" << endl;
366
                        }
367

    
368
                        while(nApostasManu > 0) 
369
                        {   cout << "Introduza a sua aposta: " <<"(" << naposta << ") " << endl;
370
                                apostaprov = introduzAposta();
371
                        cout << "Aceita a seguinte aposta? (S / N)" << endl;
372
                        mostra_aposta(apostaprov);
373
                        cin >> resposta;
374
                        if (toupper(resposta) == 'S')
375
                        {
376
                                addBet(vbets,apostaprov);
377
                                nApostasManu--;
378
                                naposta++;
379
                        }
380
                        else
381
                                cout << "Aposta descartada!" << endl;
382
                        }
383
                }
384

    
385
                else 
386
                {
387
                        cout << "Saldo de utilizador insuficiente para o numero de apostas em causa" << endl;
388
                        return 2; 
389
                }
390
                        
391
        }
392
        else
393
        {
394
                cout << "O numero de codigo que forneceu nao se encontra registado" << endl;
395
                return 1;
396
        }
397

    
398
        writeBets (vbets, jogador.codeplayer);
399
        writePlayers(players);
400
        cout << endl << "Programa executado com exito" << endl; 
401
        return 0;
402

    
403
}