Pagina Principale | Lista dei namespace | Strutture dati | Lista dei file | Campi dei dati | Elementi globali

partita.cpp

Vai alla documentazione di questo file.
00001 /* Tennis Tournament Management System 2005 by Silvio Moioli
00002    and Davide Gottini (moio@tiscali.it, davide.gottini@virgilio.it). */
00003 #include "file.h"
00004 #include "partita.h"
00005 
00006 /* Per i commenti sulle funzioni pubbliche e i loro i parametri (che sono 
00007   stati eliminati per  evitare inutili duplicazioni e spreco di spazio)
00008   si rimanda all'header  della libreria. */
00009 
00010 int parTurnoCorrente(const char* nomeFile){
00011     if (fileEsiste(nomeFile)){
00012         //Indice dell'ultimo record nel file
00013         int records = fileContaRecord(nomeFile);
00014         char* turno = fileLeggiCampo(nomeFile, 0, records - 1);
00015                         int risultato = atoi(turno);
00016         delete[] turno;
00017 
00018         if (fileUltimoCarattere(nomeFile) == '*'){
00019             risultato++;
00020         }
00021         return risultato;
00022     }
00023     return 1;
00024 }
00025 
00026 int parContaPartite(const char* nomeFile){
00027     if (fileEsiste(nomeFile)){
00028         //Indice dell'ultimo record nel file
00029         int fine = fileContaRecord(nomeFile);
00030         char* turno = fileLeggiCampo(nomeFile, 0, fine - 1);
00031         /* Usiamo la stringa * per identificare un nuovo turno senza ancora
00032         nessuna partita*/
00033         bool turnoVuoto = (strcmp(turno, "*") == 0);
00034         delete[] turno;
00035         if (turnoVuoto){
00036             /* E' stata giocata una partita in meno dei record nel file, 
00037                 l'ultimo e' un record vuoto per indicare la fine del turno */
00038             return fine -1;
00039         }
00040         return fine;
00041     }
00042     return 0;
00043 }
00044 
00045 int parContaPartiteTurno(const char* nomeFile, int turno){
00046     if (fileEsiste(nomeFile)){
00047         int record = fileContaRecord(nomeFile);
00048         int partiteGiocate = 0;
00049         for (int i = 0;i < record;i++){
00050             char*s = fileLeggiCampo(nomeFile, 0, record - i - 1);
00051             if (strcmp(s, "*") != 0){
00052                 int turnoAttuale = atoi(s);
00053                 delete[] s;
00054 
00055                 if (turnoAttuale == turno){
00056                     partiteGiocate++;
00057                 }
00058                 if (turnoAttuale < turno){
00059                     break;
00060                 }
00061             }
00062         }
00063         return partiteGiocate;
00064     }
00065     return 0;
00066 }
00067 
00068 Partita* parDettagliPartita(const char* nomeFile, int id){
00069     /*TODO: ottimizzare creando una funzione nella file.h che permette
00070     di leggere un intero record alla volta*/
00071     
00072     Partita* letta = new Partita;
00073     char* tmp = fileLeggiCampo(nomeFile, 0, id);
00074     letta->turno = atoi(tmp);
00075     delete [] tmp;
00076     tmp = fileLeggiCampo(nomeFile, 1, id);
00077     letta->idG1 = atoi(tmp);
00078     delete [] tmp;
00079     tmp = fileLeggiCampo(nomeFile, 2, id);
00080     letta->idG2 = atoi(tmp);
00081     delete [] tmp;
00082     tmp = fileLeggiCampo(nomeFile, 3, id);
00083     letta->risG1 = atoi(tmp);
00084     delete [] tmp;
00085     tmp = fileLeggiCampo(nomeFile, 4, id);
00086     letta->risG2 = atoi(tmp);
00087     delete [] tmp;
00088 
00089     return letta;
00090 }
00091 
00092 Lista* parListaPartiteGiocate(const char* nomeFile, int turno){
00093         Lista* risultato = listeCreaLista(NULL);
00094     int record = fileContaRecord(nomeFile);
00095 
00096     for (int i = 0;i < record;i++){
00097         char*s = fileLeggiCampo(nomeFile, 0, record - i - 1);
00098         if (strcmp(s, "*") != 0){
00099             int turnoAttuale = atoi(s);
00100             delete[] s;
00101 
00102             if (turnoAttuale == turno){
00103                 Partita* nuovoElemento = 
00104                     parDettagliPartita(nomeFile, record - i - 1);
00105                  listeAggiungiElemento(risultato, nuovoElemento);
00106             }
00107             if (turnoAttuale < turno){
00108                 break;
00109             }
00110         }
00111     }
00112     return risultato;
00113 }
00114 
00115 void parNuovaPartita(const char* nomeFileGiocatori,
00116                      const char* nomeFilePartite, int idG1, int idG2,
00117                      int risG1, int risG2){
00118     char *temp = new char[16];
00119     snprintf(temp, 16, "%d", parTurnoCorrente(nomeFilePartite));
00120     if (fileEsiste(nomeFilePartite) && 
00121         fileUltimoCarattere(nomeFilePartite) == '*'){
00122         fileAggiungiCampoUltimoChar(nomeFilePartite, temp);
00123     }
00124     else {
00125         fileAggiungiCampo(nomeFilePartite, temp);
00126     }
00127 
00128     snprintf(temp, 16, "%d", idG1);
00129     fileAggiungiCampo(nomeFilePartite, temp);
00130     snprintf(temp, 16, "%d", idG2);
00131     fileAggiungiCampo(nomeFilePartite, temp);
00132     snprintf(temp, 16, "%d", risG1);
00133     fileAggiungiCampo(nomeFilePartite, temp);
00134     snprintf(temp, 16, "%d", risG2);
00135     fileAggiungiCampo(nomeFilePartite, temp);
00136     delete[] temp;
00137     fileNuovoRecord(nomeFilePartite);
00138 }
00139 
00140 void parNuovoTurno(const char *nomeFile){
00141     fileAggiungiCampo(nomeFile, "*");
00142 }

Generato il Fri Jan 28 11:43:15 2005 per TennisTournament da doxygen 1.3.6