Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Implementare una applicazione console in linguaggio ANSI C per la gestione di un campo di bowling. Ciascun giocatore è
- identificato da un codice tesserino costituito da una stringa di 6 caratteri (identifica il giocatore in modo univoco) e il suo nome.
- Per ciascun giocatore vengono memorizzati i punti ottenuti e la squadra di appartenenza. Un giocatore può partecipare alla gara anche se
- non è associato ad una squadra in questo caso il campo squadra è uguale alla stringa “$$$”.
- Ogni squadra sarà costituita dal nome della squadra e dalla lista dei giocatori della squadra.
- Specifica della struttura dati:
- Giocatore:
- 1. Codice (stringa di 6 caratteri)
- 2. Cognome (stringa di 15 caratteri)
- 3. Nome (stringa di 15 caratteri)
- 4. Squadra (stringa di 15 caratteri)
- 5. Punteggio (un intero positivo)
- Squadra:
- 1. Nome squadra (stringa di 15 caratteri)
- 2. Elenco giocatori (lista di Giocatore)
- 3. PunteggioSquadra (un intero)
- Elenco delle operazioni/funzioni che devono essere implementate:
- 1. Funzione di caricamento da file di testo dei prenotati nella lista degli studenti. La funzione da implementare deve avere
- la seguente struttura:
- nome della funzione: CaricaGIOCATORI;
- valore restituito: numero di giocatori caricati;
- parametri: nome del file, lista dei giocatori.
- Lo studente scelga sia il tipo dei dati che i meccanismi di passaggio dei parametri più opportuni per rispettare la specifica.
- 2. Funzione Vincitore. Questa funzione trova e restituisci il giocatore singolo con il punteggio più alto, in caso di parità
- restituisce il primo trovato.
- nome della funzione: Vincitore;
- valore restituito: codice, nome e cognome del vincitore
- parametri: lista dei giocatori.
- Lo studente scelga sia il tipo dei dati che i meccanismi di passaggio dei parametri più opportuni per rispettare la specifica.
- 3. Funzione di modifica di un Punteggio. La funzione da implementare deve avere la seguente struttura:
- nome della funzione: ModificaPunteggio;
- valore restituito: esito operazione (0: operazione fallita, 1: modifica effettuata con successo);
- parametri: lista dei giocatori, codice, nuovo_punteggio.
- Lo studente scelga sia il tipo dei dati che i meccanismi di passaggio dei parametri più opportuni per rispettare la specifica.
- 4. CreazioneLISTASquadre: Crea la lista delle squadre a partire dalla lista dei GIOCATORI. Ogni elemento della lista delle
- squadre contiene l’identificativo della squadra, la lista dei giocatori afferenti a quella squadra e il punteggio della squadra. Se
- il giocatore non appartiene a nessuna squadra (valore campo $$$) non deve essere preso in considerazione. Il punteggio è
- pari alla somma dei primi migliori tre elementi della squadra (la squadra può contenere meno di tre elementi in questo caso
- verranno considerati tutti gli elementi per calcolare il punteggio della squadra).
- 5. RicercaDelleSquadreNumerose: Funzione che, operando sulla lista delle squadre stampa i nomi delle squadre che hanno
- presentato più di tre elementi.
- 6. StampaClassificaASquadre: Funzione che, operando sulla lista delle squadre stampa la classifica
- 7. Funzione che visualizza il contenuto dell’intera lista delle squadre
- 8. Programma principale dotato di un menù testuale che permetta all’utente di usare tutte le funzioni implementate ed
- eventualmente di inserire i parametri necessari ad eseguire le operazioni richieste.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //TIPI
- typedef struct s1 {
- char codice[7], cognome[16], nome[16], squadra[16];
- int punteggio;
- } InfoGiocatore;
- typedef struct s2 {
- InfoGiocatore info;
- struct s2 * next;
- } NodoGiocatore, * ListaGiocatore;
- typedef struct s3 {
- char nome[16];
- int punteggio;
- ListaGiocatore giocatori;
- } InfoSquadra;
- typedef struct s4 {
- InfoSquadra info;
- struct s4 * next;
- } NodoSquadra, * ListaSquadra;
- //PROTOTIPI
- int caricaGIOCATORI(char nomefile[30], ListaGiocatore * lista);
- InfoGiocatore Vincitore(ListaGiocatore lista);
- int ModificaPunteggio(ListaGiocatore * lista, char ncodice[7], int nuovo_punteggio);
- int stampaListaGiocatori(ListaGiocatore lista);
- int CreazioneLISTASquadre(ListaGiocatore listaG, ListaSquadra * listaS);
- int stampaListaSquadre(ListaSquadra listaS);
- //MAIN
- int main(void){
- //Inizializzazione Variabili
- int check;
- int npunteggio;
- char ncodice[7];
- InfoGiocatore temp;
- ListaGiocatore lista = NULL;
- ListaSquadra listaS = NULL;
- 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
- //Inizio Menu
- int scelta;
- do {
- puts("1. Carica lista dei giocatori da file");
- puts("2. Stabilisci il vincitore");
- puts("3. Modifica un punteggio");
- puts("4. Genera la lista delle squadre");
- puts("5. Ricerca le squadre numerose");
- puts("6. Stampa la classifica delle squadre");
- puts("7. Stampa l'intero contenuto della lista delle squadre");
- puts("8. Stampa la lista dei giocatori"); //DA RIMUOVERE ALLA FINE
- puts("0. Esci dal programma");
- printf("Cosa vorresti fare, senpai~? ");
- scanf("%d", &scelta);
- puts("\n\n\n");
- switch(scelta){
- case 1:
- //Carica la lista dei giocatori da file
- /* printf("Per favore inserisci il nome del file: ");
- scanf("%s", nomefile); */
- check = caricaGIOCATORI(nomefile, &lista);
- printf("Ho inserito %d giocatori in lista.", check);
- break;
- case 2:
- //Stabilisci il vincitore
- Vincitore(lista);
- break;
- case 3:
- //Modifica un punteggio
- printf("Inserisci il codice del giocatore di cui si vuole modificare il punteggio: ");
- scanf("%s", ncodice);
- printf("Inserisci ora il nuovo punteggio da assegnare: ");
- scanf("%d", &npunteggio);
- puts("\n\n");
- check = ModificaPunteggio(&lista, ncodice, npunteggio);
- if(check)
- puts("Operazione effettuata con successo!");
- else
- puts("Operazione fallita! :c Forse hai sbagliato a scrivere il codice?");
- break;
- case 4:
- //CreazioneLISTASquadre
- check = CreazioneLISTASquadre(lista, &listaS);
- if(check)
- puts("Operazione effettuata con successo!");
- else
- puts("Operazione fallita! :c");
- break;
- break;
- case 5:
- //RicercaDelleSquadreNumerose
- puts("Non ancora implementato :c");
- break;
- case 6:
- //StampaClassificaASquadre
- puts("Non ancora implementato :c");
- break;
- case 7:
- //Stampa l'intero contenuto della lista delle squadre
- stampaListaSquadre(listaS);
- break;
- case 8:
- //Stampa la lista dei giocatori
- stampaListaGiocatori(lista);
- break;
- case 0:
- puts("Konnichiwa~!");
- break;
- default:
- puts("Senpai, inserisci uno dei numeri del menu per favore~ >w<");
- }
- puts("\n\n");
- } while(scelta != 0);
- return 0;
- }
- //FUNZIONI
- int caricaGIOCATORI(char nomefile[30], ListaGiocatore * lista){
- ListaGiocatore aux = NULL;
- int i = 0;
- FILE *fp;
- fp = fopen(nomefile, "r");
- InfoGiocatore temp;
- if(fp!=NULL){
- while(fscanf(fp, "%s %s %s %s %d\n", temp.codice, temp.cognome, temp.nome, temp.squadra, &temp.punteggio) == 5){
- aux=(ListaGiocatore)malloc(sizeof(NodoGiocatore));
- aux->info = temp;
- aux->next = *lista;
- *lista = aux;
- i++;
- }
- }
- fclose(fp);
- return i;
- }
- int stampaListaGiocatori(ListaGiocatore lista){
- while(lista != NULL){
- printf("%s %s %s %s %d\n", lista->info.codice, lista->info.cognome, lista->info.nome, lista->info.squadra, lista->info.punteggio);
- lista = lista->next;
- }
- }
- InfoGiocatore Vincitore(ListaGiocatore lista){
- if(lista==NULL)
- printf("La lista e' vuota!!");
- //cerco il punteggio massimo
- ListaGiocatore aux = lista;
- int max = lista->info.punteggio;
- while (aux != NULL){
- if(aux->info.punteggio > max)
- max = aux->info.punteggio;
- aux = aux->next;
- }
- printf("Il punteggio massimo e' %d", max);
- //cerco il primo giocatore con quel punteggio
- aux = lista;
- char vnome[16], vcognome[16];
- while (aux != NULL){
- if(aux->info.punteggio == max) {
- strcpy(vnome, aux->info.nome);
- strcpy(vcognome, aux->info.cognome);
- }
- aux = aux->next;
- }
- printf(" ed e' stato fatto da %s %s!", vnome, vcognome);
- }
- int ModificaPunteggio(ListaGiocatore * lista, char ncodice[7], int nuovo_punteggio){
- //confronto il codice con quello di ciascun giocatore
- ListaGiocatore aux = *lista;
- int trovato = 0;
- while(aux != NULL){
- if(!strcmp(aux->info.codice, ncodice)) {
- trovato = 1;
- break;
- }
- aux = aux->next;
- }
- if(trovato == 1){
- aux->info.punteggio = nuovo_punteggio;
- //cambio il punteggio del giocatore trovato
- return 1;
- } else
- return 0;
- }
- int CreazioneLISTASquadre(ListaGiocatore listaG, ListaSquadra * listaS){
- //controllo che esista la lista dei giocatori
- if(listaG == NULL){
- puts("Devi prima creare una lista dei giocatori caricandola da file di testo!");
- return 0;
- }
- *listaS = NULL;
- ListaGiocatore auxG = NULL, cursoreG = listaG;
- ListaSquadra auxS = NULL, cursoreS = *listaS;
- int trovato = 0;
- int nulla = 0;
- //ciclo tre volte
- //prima ciclo la lista giocatori e creo una lista di squadre
- while(cursoreG != NULL) {
- if (strcmp(cursoreG->info.squadra, "$$$")) {
- while (cursoreS != NULL) {
- if (strcmp(cursoreG->info.squadra, cursoreS->info.nome)){
- trovato = 1;
- break;
- }
- cursoreS = cursoreS->next;
- puts("1");
- }
- if(trovato == 0){
- auxS = (ListaSquadra)malloc(sizeof(NodoSquadra));
- strcpy(auxS->info.nome, cursoreG->info.squadra);
- auxS->info.punteggio = 0;
- auxS->info.giocatori = NULL;
- auxS->next = *listaS;
- *listaS = auxS;
- }
- cursoreS = *listaS;
- trovato = 0;
- }
- nulla = 0;
- cursoreG = cursoreG->next;
- }
- puts("2");
- //poi ciclo la lista giocatori di nuovo e ordino i giocatori nelle rispettive squadre
- cursoreG = listaG;
- cursoreS = *listaS;
- InfoGiocatore temp;
- while(cursoreG != NULL){
- while(cursoreS != NULL){
- if(!strcmp(cursoreG->info.squadra, cursoreS->info.nome)){
- puts("3");
- auxG = (ListaGiocatore)malloc(sizeof(NodoGiocatore));
- puts("4");
- auxG->info = cursoreS->info.giocatori->info;
- puts("5");
- auxG->next = cursoreS->info.giocatori;
- puts("6");
- cursoreS->info.giocatori = auxG;
- puts("7");
- break;
- }
- cursoreS = cursoreS->next;
- }
- cursoreG = cursoreG->next;
- }
- //poi ciclo la lista squadre e calcolo il punteggio per ogni squadra
- return 1;
- }
- int stampaListaSquadre(ListaSquadra listaS){
- ListaGiocatore listaG;
- while(listaS != NULL){
- printf("\n\n%s\nPunteggio:%d\n\nGiocatori:\n", listaS->info.nome, listaS->info.punteggio);
- listaG = listaS->info.giocatori;
- while(listaG != NULL){
- printf("%s %s %s %d\n", listaG->info.codice, listaG->info.cognome, listaG->info.nome, listaG->info.punteggio);
- }
- }
- }
- /*///// input.txt /////
- c123 Rossi Giuseppe Squadra1 200
- c124 Bianchi Luigi Squadra2 187
- c125 Russo Giovanna $$$ 234
- c002 Verdi Giuseppe Squadra2 201
- c112 Sterchi Ubaldo Squadra2 143
- c124 Smusi Pietro Squadra2 246
- c126 Sgozzinu Dimitru Squadra1 270
- c127 Cristo Gesu $$$ 269
- c128 Onnipotente Dio Squadra1 268
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement