Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*si realizzi un programma per la gestione dell'albo d'oro del capmpionato
- mondiale dei piloti di F1. Si consideri che tale albo contiene, per ciascun campionato,
- le seguenti informazioni:
- 1. anno di svolgimento (intero);
- 2. cognome del pilota che ha vinto il campionato
- 3. Team di appartenenza di tale piolota;
- 4. numero di gran premi vinti da tale pilota in quel campionato.
- Il programma deve avere le seguenti funzionalità:
- 1. inserimento dati relativi a un nuovo campionato;
- 2. cancellazione di una edizione;
- 3. visualizzazione di tutte le edizioni del campionato;
- 4. ricerca delle informazioni relative al campionato svoltosi in un dato anno;*/
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct albo {
- int anno;
- char cognome[21];
- char team[21];
- int vittorie;
- }albo;
- typedef struct Nodo {
- albo info;
- struct Nodo*next;
- }lista;
- lista*emptyList(){
- return NULL;
- }
- int menu() {
- int comando;
- puts("Premi:");
- puts("1. Inserire dati pilota.");
- puts("2. Cancellazione di una edizione.");
- puts("3. Stampa campionati.");
- puts("4. Ricerca informazioni campionato.");
- puts("0. EXIT.");
- scanf("%d", &comando);
- return comando;
- }
- lista* inserimento(lista *lis,albo val) {
- lista*prec, *curr,* new_node;
- prec = NULL;
- curr = lis;
- while (curr != NULL) {
- prec = curr;
- curr = curr->next;
- }
- new_node = malloc(sizeof(lista));
- if (new_node == NULL)
- {
- printf("Non \212 possibie allocare la memoria.\n");
- exit(10);
- }
- //inserimento in testa
- new_node->info = val;
- if (prec == NULL) {
- new_node->next = lis;
- lis = new_node;
- return lis;
- }
- //inserimento sequenziale
- else
- {
- prec->next = new_node;
- new_node->next = curr;
- return lis;
- }
- }
- lista* canc_elem(lista*lis, albo val) {
- lista*p, *prec;
- p = lis;
- prec = NULL;
- while (p != NULL) {
- if (val.anno == p->info.anno) {
- if (p == lis) {
- lis = lis->next;
- free(p);
- p = lis;
- }
- else {
- prec->next = p->next;
- free(p);
- p = prec->next;
- }
- }
- else {
- prec = p;
- p = p->next;
- }
- }
- return lis;
- }
- void stampa_campionato(lista*lis) {
- while (lis != NULL) {
- printf("-------------------------------\n");
- printf("Campionato Anno:\t%d\n\n", lis->info.anno);
- printf("Pilota:\t%s\n", lis->info.cognome);
- printf("Team:\t%s\n", lis->info.team);
- printf("Vittorie GP:\t%d\n", lis->info.vittorie);
- printf("-------------------------------\n");
- lis = lis->next;
- }
- }
- lista* ricerca(lista*lis,int val) {
- int i = 0;
- while (lis->next != NULL && val>lis->info.anno) {
- lis = lis->next;
- i++;
- }
- if (val == lis->info.anno ) {
- return lis;
- }
- else
- return NULL;
- }
- void stmp_info_pil(lista*lis) {
- printf("-------------------------------\n");
- printf("Campionato Anno:\t%d\n\n", lis->info.anno);
- printf("Pilota:\t%s\n", lis->info.cognome);
- printf("Team:\t%s\n", lis->info.team);
- printf("Vittorie GP:\t%d\n", lis->info.vittorie);
- printf("-------------------------------\n");
- }
- int main(void) {
- lista *lis,*ric;
- albo val;
- int posizione;
- int anno;
- int max;
- lis = emptyList();
- int comando;
- do {
- comando=menu();
- switch (comando)
- {
- case 0:
- printf("Chiusura programma...\n");
- exit(0);
- break;
- case 1: //inserimento pilota
- printf("Mondiale anno:\t");
- scanf("%d", &val.anno);
- printf("Inserisci cognome pilota:\t");
- scanf("%s", &val.cognome);
- printf("Inserisci team di appartenenza:\t");
- scanf("%s", &val.team);
- printf("Inserisci numero di vittorie:\t");
- scanf("%d", &val.vittorie);
- printf("\n");
- lis=inserimento(lis, val);
- break;
- case 2: //eliminazione pilota
- printf("Inserire l'anno del campionato che si vuole eliminare:\n");
- scanf("%d", &val.anno);
- lis=canc_elem(lis, val);
- break;
- case 3: //stampa campionati
- if (lis == NULL)
- printf("Nessun campionato mondiale \212 stato inserito.\n");
- else
- stampa_campionato(lis);
- break;
- case 4: //stampa informazione di un determinato anno
- printf("Inserisci anno per ulteriori informazioni:\n");
- scanf("%d", &anno);
- if (lis != NULL) {
- ric = ricerca(lis, anno);
- if (lis == NULL)
- printf("Non ci sono informazioni relative alll'anno %d.", anno);
- else
- stmp_info_pil(ric);
- }
- else
- printf("Lista vuota.\n");
- break;
- }
- } while (comando != 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement