Advertisement
BiRabittoh

Bowling [INCOMPLETO]

Apr 23rd, 2018
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.10 KB | None | 0 0
  1. /*
  2. Implementare una applicazione console in linguaggio ANSI C per la gestione di un campo di bowling. Ciascun giocatore è
  3. identificato da un codice tesserino costituito da una stringa di 6 caratteri (identifica il giocatore in modo univoco) e il suo nome.
  4. Per ciascun giocatore vengono memorizzati i punti ottenuti e la squadra di appartenenza. Un giocatore può partecipare alla gara anche se
  5. non è associato ad una squadra in questo caso il campo squadra è uguale alla stringa “$$$”.
  6. Ogni squadra sarà costituita dal nome della squadra e dalla lista dei giocatori della squadra.
  7.  
  8. Specifica della struttura dati:
  9. Giocatore:
  10. 1. Codice (stringa di 6 caratteri)
  11. 2. Cognome (stringa di 15 caratteri)
  12. 3. Nome (stringa di 15 caratteri)
  13. 4. Squadra (stringa di 15 caratteri)
  14. 5. Punteggio (un intero positivo)
  15.  
  16. Squadra:
  17. 1. Nome squadra (stringa di 15 caratteri)
  18. 2. Elenco giocatori (lista di Giocatore)
  19. 3. PunteggioSquadra (un intero)
  20.  
  21. Elenco delle operazioni/funzioni che devono essere implementate:
  22. 1.  Funzione di caricamento da file di testo dei prenotati nella lista degli studenti. La funzione da implementare deve avere
  23.     la seguente struttura:
  24.     nome della funzione: CaricaGIOCATORI;
  25.     valore restituito: numero di giocatori caricati;
  26.     parametri: nome del file, lista dei giocatori.
  27.     Lo studente scelga sia il tipo dei dati che i meccanismi di passaggio dei parametri più opportuni per rispettare la specifica.
  28. 2.  Funzione Vincitore. Questa funzione trova e restituisci il giocatore singolo con il punteggio più alto, in caso di parità
  29.     restituisce il primo trovato.
  30.     nome della funzione: Vincitore;
  31.     valore restituito: codice, nome e cognome del vincitore
  32.     parametri: lista dei giocatori.
  33.     Lo studente scelga sia il tipo dei dati che i meccanismi di passaggio dei parametri più opportuni per rispettare la specifica.
  34. 3.  Funzione di modifica di un Punteggio. La funzione da implementare deve avere la seguente struttura:
  35.     nome della funzione: ModificaPunteggio;
  36.     valore restituito: esito operazione (0: operazione fallita, 1: modifica effettuata con successo);
  37.     parametri: lista dei giocatori, codice, nuovo_punteggio.
  38.     Lo studente scelga sia il tipo dei dati che i meccanismi di passaggio dei parametri più opportuni per rispettare la specifica.
  39. 4.  CreazioneLISTASquadre: Crea la lista delle squadre a partire dalla lista dei GIOCATORI. Ogni elemento della lista delle
  40.     squadre contiene l’identificativo della squadra, la lista dei giocatori afferenti a quella squadra e il punteggio della squadra. Se
  41.     il giocatore non appartiene a nessuna squadra (valore campo $$$) non deve essere preso in considerazione. Il punteggio è
  42.     pari alla somma dei primi migliori tre elementi della squadra (la squadra può contenere meno di tre elementi in questo caso
  43.     verranno considerati tutti gli elementi per calcolare il punteggio della squadra).
  44. 5.  RicercaDelleSquadreNumerose: Funzione che, operando sulla lista delle squadre stampa i nomi delle squadre che hanno
  45.     presentato più di tre elementi.
  46. 6.  StampaClassificaASquadre: Funzione che, operando sulla lista delle squadre stampa la classifica
  47. 7.  Funzione che visualizza il contenuto dell’intera lista delle squadre
  48. 8.  Programma principale dotato di un menù testuale che permetta all’utente di usare tutte le funzioni implementate ed
  49.     eventualmente di inserire i parametri necessari ad eseguire le operazioni richieste.
  50. */
  51.  
  52. #include <stdio.h>
  53. #include <stdlib.h>
  54. #include <string.h>
  55.  
  56. //TIPI
  57. typedef struct s1 {
  58.     char codice[7], cognome[16], nome[16], squadra[16];
  59.     int punteggio; 
  60. } InfoGiocatore;
  61.  
  62. typedef struct s2 {
  63.     InfoGiocatore info;
  64.     struct s2 * next;
  65. } NodoGiocatore, * ListaGiocatore;
  66.  
  67. typedef struct s3 {
  68.     char nome[16];
  69.     int punteggio;
  70.     ListaGiocatore giocatori;
  71. } InfoSquadra;
  72.  
  73. typedef struct s4 {
  74.     InfoSquadra info;
  75.     struct s4 * next;
  76. } NodoSquadra, * ListaSquadra;
  77.  
  78. //PROTOTIPI
  79. int caricaGIOCATORI(char nomefile[30], ListaGiocatore * lista);
  80. InfoGiocatore Vincitore(ListaGiocatore lista);
  81. int ModificaPunteggio(ListaGiocatore * lista, char ncodice[7], int nuovo_punteggio);
  82. int stampaListaGiocatori(ListaGiocatore lista);
  83. int CreazioneLISTASquadre(ListaGiocatore listaG, ListaSquadra * listaS);
  84.  
  85.  
  86. int stampaListaSquadre(ListaSquadra listaS);
  87.  
  88. //MAIN
  89. int main(void){
  90.     //Inizializzazione Variabili
  91.     int check;
  92.     int npunteggio;
  93.     char ncodice[7];
  94.     InfoGiocatore temp;
  95.     ListaGiocatore lista = NULL;
  96.     ListaSquadra listaS = NULL;
  97.     char nomefile[30] = "input.txt"; //di default chiamo il file input.txt, in questo modo posso commentare la richiesta di input del nome del file per velocizzare il debug
  98.    
  99.    
  100.     //Inizio Menu
  101.     int scelta;
  102.     do {
  103.         puts("1. Carica lista dei giocatori da file");
  104.         puts("2. Stabilisci il vincitore");
  105.         puts("3. Modifica un punteggio");
  106.         puts("4. Genera la lista delle squadre");
  107.         puts("5. Ricerca le squadre numerose");
  108.         puts("6. Stampa la classifica delle squadre");
  109.         puts("7. Stampa l'intero contenuto della lista delle squadre");
  110.         puts("8. Stampa la lista dei giocatori"); //DA RIMUOVERE ALLA FINE
  111.         puts("0. Esci dal programma");
  112.         printf("Cosa vorresti fare, senpai~? ");
  113.         scanf("%d", &scelta);
  114.         puts("\n\n\n");
  115.         switch(scelta){
  116.             case 1:
  117.                 //Carica la lista dei giocatori da file
  118.             /*  printf("Per favore inserisci il nome del file: ");
  119.                 scanf("%s", nomefile); */
  120.                 check = caricaGIOCATORI(nomefile, &lista);
  121.                 printf("Ho inserito %d giocatori in lista.", check);
  122.                 break;
  123.             case 2:
  124.                 //Stabilisci il vincitore
  125.                 Vincitore(lista);
  126.                 break;
  127.             case 3:
  128.                 //Modifica un punteggio
  129.                 printf("Inserisci il codice del giocatore di cui si vuole modificare il punteggio: ");
  130.                 scanf("%s", ncodice);
  131.                 printf("Inserisci ora il nuovo punteggio da assegnare: ");
  132.                 scanf("%d", &npunteggio);
  133.                 puts("\n\n");
  134.                 check = ModificaPunteggio(&lista, ncodice, npunteggio);
  135.                 if(check)
  136.                     puts("Operazione effettuata con successo!");
  137.                 else
  138.                     puts("Operazione fallita! :c Forse hai sbagliato a scrivere il codice?");
  139.                 break;
  140.             case 4:
  141.                 //CreazioneLISTASquadre
  142.                 check = CreazioneLISTASquadre(lista, &listaS);
  143.                 if(check)
  144.                     puts("Operazione effettuata con successo!");
  145.                 else
  146.                     puts("Operazione fallita! :c");
  147.                 break;
  148.                 break;
  149.             case 5:
  150.                 //RicercaDelleSquadreNumerose
  151.                 puts("Non ancora implementato :c");
  152.                 break;
  153.             case 6:
  154.                 //StampaClassificaASquadre
  155.                 puts("Non ancora implementato :c");
  156.                 break; 
  157.             case 7:
  158.                 //Stampa l'intero contenuto della lista delle squadre
  159.                 stampaListaSquadre(listaS);
  160.                 break;
  161.             case 8:
  162.                 //Stampa la lista dei giocatori
  163.                 stampaListaGiocatori(lista);
  164.                 break;
  165.             case 0:
  166.                 puts("Konnichiwa~!");
  167.                 break;
  168.             default:
  169.                 puts("Senpai, inserisci uno dei numeri del menu per favore~ >w<");
  170.         }
  171.         puts("\n\n");
  172.     } while(scelta != 0);
  173.     return 0;
  174. }
  175.  
  176.  
  177.  
  178. //FUNZIONI
  179. int caricaGIOCATORI(char nomefile[30], ListaGiocatore * lista){
  180.     ListaGiocatore aux = NULL;
  181.     int i = 0;
  182.     FILE *fp;
  183.     fp = fopen(nomefile, "r");
  184.     InfoGiocatore temp;
  185.     if(fp!=NULL){
  186.         while(fscanf(fp, "%s %s %s %s %d\n", temp.codice, temp.cognome, temp.nome, temp.squadra, &temp.punteggio) == 5){
  187.             aux=(ListaGiocatore)malloc(sizeof(NodoGiocatore));
  188.             aux->info = temp;
  189.             aux->next = *lista;
  190.             *lista = aux;
  191.             i++;
  192.         }
  193.    
  194.     }
  195.    
  196.     fclose(fp);
  197.     return i;
  198. }
  199.  
  200. int stampaListaGiocatori(ListaGiocatore lista){
  201.     while(lista != NULL){
  202.         printf("%s %s %s %s %d\n", lista->info.codice, lista->info.cognome, lista->info.nome, lista->info.squadra, lista->info.punteggio);
  203.         lista = lista->next;
  204.     }
  205. }
  206.  
  207. InfoGiocatore Vincitore(ListaGiocatore lista){
  208.     if(lista==NULL)
  209.         printf("La lista e' vuota!!");
  210.     //cerco il punteggio massimo
  211.     ListaGiocatore aux = lista;
  212.     int max = lista->info.punteggio;
  213.    
  214.     while (aux != NULL){
  215.         if(aux->info.punteggio > max)
  216.             max = aux->info.punteggio;
  217.         aux = aux->next;
  218.     }
  219.     printf("Il punteggio massimo e' %d", max);
  220.     //cerco il primo giocatore con quel punteggio
  221.     aux = lista;
  222.     char vnome[16], vcognome[16];
  223.     while (aux != NULL){
  224.             if(aux->info.punteggio == max) {
  225.                 strcpy(vnome, aux->info.nome);
  226.                 strcpy(vcognome, aux->info.cognome);
  227.             }
  228.         aux = aux->next;
  229.     }
  230.     printf(" ed e' stato fatto da %s %s!", vnome, vcognome);
  231. }
  232.  
  233. int ModificaPunteggio(ListaGiocatore * lista, char ncodice[7], int nuovo_punteggio){
  234.     //confronto il codice con quello di ciascun giocatore
  235.     ListaGiocatore aux = *lista;
  236.     int trovato = 0;
  237.     while(aux != NULL){
  238.        
  239.         if(!strcmp(aux->info.codice, ncodice)) {
  240.             trovato = 1;
  241.             break;
  242.         }
  243.         aux = aux->next;
  244.     }
  245.     if(trovato == 1){
  246.         aux->info.punteggio = nuovo_punteggio;
  247.         //cambio il punteggio del giocatore trovato
  248.         return 1;
  249.     } else
  250.         return 0;
  251.    
  252. }
  253.  
  254. int CreazioneLISTASquadre(ListaGiocatore listaG, ListaSquadra * listaS){
  255.     //controllo che esista la lista dei giocatori
  256.     if(listaG ==  NULL){
  257.         puts("Devi prima creare una lista dei giocatori caricandola da file di testo!");
  258.         return 0;
  259.     }
  260.     *listaS = NULL;
  261.     ListaGiocatore auxG = NULL, cursoreG = listaG;
  262.     ListaSquadra auxS = NULL, cursoreS = *listaS;
  263.     int trovato = 0;
  264.     int nulla = 0;
  265.     //ciclo tre volte
  266.     //prima ciclo la lista giocatori e creo una lista di squadre
  267.     while(cursoreG != NULL) {
  268.         if (strcmp(cursoreG->info.squadra, "$$$")) {
  269.             while (cursoreS != NULL) {
  270.            
  271.                 if (strcmp(cursoreG->info.squadra, cursoreS->info.nome)){
  272.                     trovato = 1;
  273.                     break;
  274.                 }
  275.                 cursoreS = cursoreS->next;
  276.                 puts("1");
  277.             }
  278.             if(trovato == 0){
  279.                 auxS = (ListaSquadra)malloc(sizeof(NodoSquadra));
  280.                 strcpy(auxS->info.nome, cursoreG->info.squadra);
  281.                 auxS->info.punteggio = 0;
  282.                 auxS->info.giocatori = NULL;
  283.                 auxS->next = *listaS;
  284.                 *listaS = auxS;
  285.             }
  286.             cursoreS = *listaS;
  287.             trovato = 0;
  288.         }
  289.         nulla = 0;
  290.         cursoreG = cursoreG->next;
  291.     }
  292.     puts("2");
  293.     //poi ciclo la lista giocatori di nuovo e ordino i giocatori nelle rispettive squadre
  294.     cursoreG = listaG;
  295.     cursoreS = *listaS;
  296.     InfoGiocatore temp;
  297.     while(cursoreG != NULL){
  298.         while(cursoreS != NULL){
  299.             if(!strcmp(cursoreG->info.squadra, cursoreS->info.nome)){
  300.                 puts("3");
  301.                 auxG = (ListaGiocatore)malloc(sizeof(NodoGiocatore));
  302.                 puts("4");
  303.                 auxG->info = cursoreS->info.giocatori->info;
  304.                 puts("5");
  305.                 auxG->next = cursoreS->info.giocatori;
  306.                 puts("6");
  307.                
  308.                 cursoreS->info.giocatori = auxG;
  309.                 puts("7");
  310.                 break;
  311.             }
  312.             cursoreS = cursoreS->next;
  313.         }
  314.         cursoreG = cursoreG->next;
  315.     }
  316.    
  317.     //poi ciclo la lista squadre e calcolo il punteggio per ogni squadra
  318.    
  319.     return 1;
  320. }
  321.  
  322. int stampaListaSquadre(ListaSquadra listaS){
  323.     ListaGiocatore listaG;
  324.     while(listaS != NULL){
  325.         printf("\n\n%s\nPunteggio:%d\n\nGiocatori:\n", listaS->info.nome, listaS->info.punteggio);
  326.         listaG = listaS->info.giocatori;
  327.         while(listaG != NULL){
  328.             printf("%s %s %s %d\n", listaG->info.codice, listaG->info.cognome, listaG->info.nome, listaG->info.punteggio);
  329.         }
  330.     }
  331. }
  332.  
  333.  
  334.  
  335.  
  336. /*///// input.txt /////
  337. c123 Rossi Giuseppe Squadra1 200
  338. c124 Bianchi Luigi Squadra2 187
  339. c125 Russo Giovanna $$$ 234
  340. c002 Verdi Giuseppe Squadra2 201
  341. c112 Sterchi Ubaldo Squadra2 143
  342. c124 Smusi Pietro Squadra2 246
  343. c126 Sgozzinu Dimitru Squadra1 270
  344. c127 Cristo Gesu $$$ 269
  345. c128 Onnipotente Dio Squadra1 268
  346. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement