Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  programma virtus
Language: C/C++
Code:
#include<iostream>
#include<iomanip> 
#include<fstream>
#include<string>
#include<stdlib.h>
using namespace std;


string trash;
string categories ="   101- EC M\t201- EC F\n   102- EB M\t202- EB F\n   103- EA M\t203- EA F\n   104- RM  \t204- RF  \n   105- CM  \t205- CF  \n   106- AM  \t206- AF  \n   107- JM  \t207- JF  \n   108- PM  \t208- PF  \n   109- SM  \t209- SF  \n\n   110- M35M\t210- M35F\n   111- M40M\t211- M40F\n   112- M45M\t212- M45F\n   113- M50M\t213- M50F\n   114- M55M\t214- M55F\n   115- M60M\t215- M60F\n   116- M65M\t216- M65F\n   117- M70M\t217- M70F\n   118- M75M\t218- M75F\n   129- M80M\t229- M80F\n   120- M85M\t220- MM5F\n   121- M90M\t221- M90F\n   122- M95M\t222- M95F\n";

string categorie[44] = {"101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222"};
/*


"  
   101- EC M\t201- EC F\n
   102- EB M\t202- EB F\n
   103- EA M\t203- EA F\n
   104- RM  \t204- RF  \n
   105- CM  \t205- CF  \n
   106- AM  \t206- AF  \n
   107- JM  \t207- JF  \n
   108- PM  \t208- PF  \n
   109- SM  \t209- SF  \n\n
   110- M35M\t210- M35F\n
   111- M40M\t211- M40F\n
   112- M45M\t212- M45F\n
   113- M50M\t213- M50F\n
   114- M55M\t214- M55F\n
   115- M60M\t215- M60F\n
   116- M65M\t216- M65F\n
   117- M70M\t217- M70F\n
   118- M75M\t218- M75F\n
   129- M80M\t229- M80F\n
   120- M85M\t220- MM5F\n
   121- M90M\t221- M90F\n
   122- M95M\t222- M95F\n




"

*/





string menu =  "*******************************\n*  1  ISCRIZIONI              *\n*  2  VISUALIZZA ISCRITTI     *\n*  3  REGISTRAZIONE ARRIVI    *\n*  4  CLASSIFICHE             *\n*******************************\n   0  ESCI                     \n\n";

/*
\n
*******************************\n
*  1  ISCRIZIONI              *\n
*  2  VISUALIZZA ISCRITTI     *\n
*  3  REGISTRAZIONE ARRIVI    *\n
*  4  CLASSIFICHE             *\n
*******************************\n
   0  ESCI                     \n
\n
*/




struct atleta {
     string nome;
     string societa;
     string anno;
     string categoria;
     string pettorale;
     string tessera;
     atleta *next;
};

struct numeri {
     string numero;
     numeri *next;
};


string cat(string numero){
     if  (numero == "101")
          return "EC M";
     else if  (numero == "102")
          return "EB M";
     else if  (numero == "103")
          return "EA M";
     else if  (numero == "104")
          return "RM  ";
     else if  (numero == "105")
          return "CM  ";
     else if  (numero == "106")
          return "AM  ";
     else if  (numero == "107")
          return "JM  ";
     else if  (numero == "108")
          return "PM  ";
     else if  (numero == "109")
          return "SM  ";
     else if  (numero == "110")
          return "M35M";
     else if  (numero == "111")
          return "M40M";
     else if  (numero == "112")
          return "M45M";
     else if  (numero == "113")
          return "M50M";
     else if  (numero == "114")
          return "M55M";
     else if  (numero == "115")
          return "M60M";
     else if  (numero == "116")
          return "M65M";
     else if  (numero == "117")
          return "M70M";
     else if  (numero == "118")
          return "M75M";
     else if  (numero == "119")
          return "M80M";
     else if  (numero == "120")
          return "M85M";
     else if  (numero == "121")
          return "M90M";
     else if  (numero == "122")
          return "M95M";
     else if  (numero == "201")
          return "EC F";
     else if  (numero == "202")
          return "EB F";
     else if  (numero == "203")
          return "EA F";
     else if  (numero == "204")
          return "RF  ";
     else if  (numero == "205")
          return "CF  ";
     else if  (numero == "206")
          return "AF  ";
     else if  (numero == "207")
          return "JF  ";
     else if  (numero == "208")
          return "PF  ";
     else if  (numero == "209")
          return "SF  ";
     else if  (numero == "210")
          return "M35F";
     else if  (numero == "211")
          return "M40F";
     else if  (numero == "212")
          return "M45F";
     else if  (numero == "213")
          return "M50F";
     else if  (numero == "214")
          return "M55F";
     else if  (numero == "215")
          return "M60F";
     else if  (numero == "216")
          return "M65F";
     else if  (numero == "217")
          return "M70F";
     else if  (numero == "218")
          return "M75F";
     else if  (numero == "219")
          return "M80F";
     else if  (numero == "220")
          return "M85F";
     else if  (numero == "221")
          return "M90F";
     else if  (numero == "222")
          return "M95F";
     else
          return "ERR#";
}

int interrompi(){
     return 0;
}

void pulisci(){
     system ("clear");
}

void aspetta(){
     cout << "\n\npremere 0 e INVIO\n";
     cin >> trash;
}

void stampa_lista_atleti(atleta *p){
     cout << setw(35) << left << "NOME E COGNOME" << setw(25) << left << "SOCIETA'" << setw(5) << left << "CAT" << setw(5) << left << "PETT" << endl;
     while (p != NULL){
          cout << setw(35) << left << p->nome << setw(25) << left << p->societa << setw(5) << left << cat(p->categoria) << setw(5) << left << p->pettorale << endl;
          p = p->next;
     }
     //cout << "###\n\n";
}

void stampa_numeri(numeri *p){
     while (p != NULL){
          cout << p->numero << endl;
          p = p->next;
     }
     //cout << "###\n\n";
}

numeri* ordine(){
     numeri *last;
     numeri *head = new numeri;
     numeri *q;
     
     fstream in;
     in.open("arrivi.dat",ios::in);
     if (!in.good()) return NULL;

     getline(in, head->numero);
     
     head->next = NULL;
     
     last = head;
     while (! in.eof()){

          last->next = new numeri;
          last = last->next;

          getline(in, last->numero);
          last->next = NULL;
     }

     q = head;

     while (q->next != last){
          q = q->next;
     }
     
     q->next = NULL;


     
     in.close();

     return head;
}


atleta* appello(){
     atleta *last;
     atleta *head = NULL;
     atleta *q;

     fstream in;
     in.open("iscritti.dat",ios::in);
     if (!in.good()) return NULL;

     head = new atleta;

     getline(in, head->nome);
     getline(in, head->societa);
     getline(in, head->anno);
     getline(in, head->categoria);
     getline(in, head->pettorale);
     getline(in, head->tessera);

     head->next = NULL;
     
     last = head;

     while (! in.eof()){

          last->next = new atleta;
          last = last->next;

          getline(in, last->nome);          
          getline(in, last->societa);
          getline(in, last->anno);
          getline(in, last->categoria);
          getline(in, last->pettorale);
          getline(in, last->tessera);
          
          last->next = NULL;
          
     }
     
     q = head;

     while (q->next != last){
          q = q->next;
     }
     
     q->next = NULL;

     in.close();

     return head;
}



int iscrizioni(){
     
     int scelta;
     string nome, pettorale;

     atleta *iscrivente = new atleta;
     pulisci();
     cout << " *** ISCRIZIONI ***\n\n";
     cout << "Per iscrivere un nuovo partecipante digitare 1\n\n\n";

     cin >> scelta;

     if (scelta != 1){
          return 0;          
     }     
     
     pulisci();
     cout << " *** ISCRIZIONE NUOVO PARTECIPANTE ***\n\n";     

     /*iscrivente->nome = "\n";
     iscrivente->societa = "\n";
     iscrivente->anno = "\n";
     iscrivente->categoria = "\n";
     iscrivente->pettorale = "\n";
     iscrivente->tessera = "\n";
     */
     

     cout << " - INSERISCI NOME E COGNOME\n\t";
     getline (cin, trash);
     getline (cin, iscrivente->nome);

     cout << " - INSERISCI SOCIETA'\n\t";
     getline (cin, iscrivente->societa);     

     cout << " - INSERISCI ANNO DI NASCITA\n\t";
     cin >> iscrivente->anno;     

     cout << " - SELEZIONA CATEGORIA\n" << categories;
     getline (cin, trash);     
     getline (cin, iscrivente->categoria);     

     atleta *head = appello();
     atleta *p;

     pett:
     
     cout << " - INSERISCI NUMERO PETTORALE\n\t";
     cin >> iscrivente->pettorale;
     
     p = head;
     
     while (p != NULL){
          if(iscrivente->pettorale == p->pettorale){
               cout << "\nERRORE, PETTORALE GIA' UTILIZZATO DA " << p->nome << "\n\n";               
               goto pett;
          }
          p = p->next;
     }

     cout << " - INSERISCI NUMERO DI TESSERA\n\t";
     cin >>iscrivente->tessera;     




     fstream out;
     out.open("iscritti.dat",ios::app);
     out << iscrivente->nome << "\n" << iscrivente->societa << "\n" << iscrivente->anno << "\n" << iscrivente->categoria << "\n" << iscrivente->pettorale <<"\n" << iscrivente->tessera << endl;
     out.close();
     return 0;
}




int visualizza_iscritti(){
     
     pulisci();
     cout << " *** VISUALIZZAZIONE ISCRITTI ***\n\n";
     atleta *head = appello();

     stampa_lista_atleti(head);


     cout << "\nPRESS 0 TO RETURN\n";
     cin >> trash;
     return 0;
}
int registrazione_arrivi(){
     int pettorale;
     pulisci();
     cout << " *** REGISTRAZIONE ORDINE ARRIVO ***\n\n";
     cout << "Per registrare gli arrivi premere 1.\nAttenzione: così facendo si eliminano tutti i salvataggi precedenti.\n";

     int scelta;
     cin >> scelta;
     pulisci();
     
     if (scelta != 1){
          return 0;          
     }     
     
     
     cout << " *** REGISTRAZIONE ORDINE ARRIVO ***\n\n";
     
     fstream out;
     out.open("arrivi.dat",ios::out);

     cout << "inserire i numeri dei pettorali in ordine di arrivo.\nper terminare inserire come numero di pettorale 0.\n\n1° arrivato: ";
     cin >> pettorale;
     
     int n = 1;

     while (pettorale != 0){
          out << pettorale << endl;
          n++;          
          cout << n << "° arrivato: ";
          cin >> pettorale;
     }

     out.close();
     


     return 0;
}
int crea_classifiche(){
     pulisci();
     cout << " *** CREA CLASSIFICHE ***\n\n";

     atleta *head_appello = appello();
     atleta *p = head_appello;

     atleta *head_arrivi;
     atleta *q;

     numeri *head_numeri = ordine();
     numeri *n = head_numeri;

     //stampa_numeri(head_numeri);

     int primo = 1;
     

     while (n != NULL){
          p = head_appello;
          //cout <<"A ";
          if (p->pettorale == n->numero){
               if (primo == 1){
                    //cout <<"B ";
                    q = p;
                    head_appello = q->next;
                    q->next = NULL;
                    head_arrivi = q;     
                    primo = 0;
                    //cout << "1.1\t" << n->numero << "  →   " << q->pettorale << endl;                    
               }
               else{     
                    //cout <<"C ";
                    q->next = p;
                    q = q->next;                    
                    head_appello = q->next;
                    q->next = NULL;
                    //cout << "1.2\t" << n->numero << "  →   " << q->pettorale << endl;
               }

               
          }
          else{
               while ((p->next != NULL)&&(p->next->pettorale != n->numero)){
                    p = p->next;
                    //cout <<"D ";          
               }
               
               if(p->next == NULL){
                    cout << "\n\nERRORE: NESSUN ATLETA REGISTRATO CON IL PETTORALE NUMERO " << n->numero << "\n\n";
                    aspetta();
               }
               else{
                    
                    if (primo == 1){
                         //cout <<"E ";
                         head_arrivi = p->next;
                         q = p->next;
                         p->next = q->next;
                         q->next = NULL;
                         primo = 0;
                         //cout << "2.1\t" << n->numero << "  →   " << q->pettorale << endl;
                    }
                    else{
                         //cout <<"F ";
                         q->next = p->next;
                         q = q->next;
                         p->next = q->next;
                         q->next = NULL;
                         //cout << "2.2\t" << n->numero << "  →   " << q->pettorale << endl;
                    }
               }
          }
          //cout << "stop\n";
          n = n->next;
     }

     // finito
     //cout << "finito\n";

     if (head_appello != NULL){          
          cout << "\n\nATTENZIONE NON SONO STATI REGISTRATI GLI ARRIVI DEI SEGUENTI ATLETI:\n";
          stampa_lista_atleti(head_appello);
          aspetta();
     }

     
     cout << "\n\n\n\nCLASSIFICA GENERALE\n\n";
     stampa_lista_atleti(head_arrivi);
     aspetta();

     fstream out;
     out.open("classifiche.dat",ios::app);

     cout << "\n\n\nCLASSIFICA PER CATEGORIE\n\n";
     
     for (int i = 0; i<44 ; i++){
          p = head_arrivi;
          primo = 1;
          while(p!=NULL){
               if (p->categoria == categorie[i]){
                    if (primo == 1){
                         cout << "\n\n";
                         out << "\n\n";
                         cout << " CATEGORIA " << cat(categorie[i]) << endl;
                         
                         out << " CATEGORIA " << cat(categorie[i]) << endl;
                         out << setw(35) << left << "NOME E COGNOME";
                         out << setw(25) << left << "SOCIETA'";
                         out << setw(7) << left << "ANNO";
                         out << setw(5) << left << "CAT";
                         out << setw(10) << left << "TESSERA";
                         out << setw(5) << left << "PETTORALE" << endl;

                         primo = 0;
                    }
                    cout << setw(35) << left << p->nome;
                    cout << setw(25) << left << p->societa;
                    cout << setw(5) << left << cat(p->categoria);
                    cout << setw(5) << left << p->pettorale << endl;

                    out << setw(35) << left << p->nome;
                    out << setw(25) << left << p->societa;
                    out << setw(7) << left << p->anno;
                    out << setw(5) << left << cat(p->categoria);
                    out << setw(10) << left << p->tessera;
                    out << setw(5) << left << p->pettorale << endl;
               }
               p = p->next;
          }
     }

     out.close();

     aspetta();



     




     return 0;
}

int funzione(int scelta){
     switch (scelta){
          case 1:
               iscrizioni();
          break;
          case 2:
               visualizza_iscritti();
          break;
          case 3:
               registrazione_arrivi();
          break;
          case 4:
               crea_classifiche();
          break;
     }
     //cin >> trash;
     return 0;
}

int main(){
     
     int scelta = -1;

     while (scelta != 0){
          pulisci();
          cout << menu;
          cin >> scelta;
          funzione(scelta);
          if (scelta == 0)
               return 0;
          scelta = -1;
     }


     return 0;
}
Comments: