Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //STRUTTURE
- /*
- Rivista:
- 1. Titolo (titolo) implementato con una stringa, senza caratteri bianchi, che può contenere al più 63 caratteri utili;
- 2. Codice ISBN (codice) implementato con una stringa, senza caratteri bianchi, che può contenere al più 15 caratteri utili;
- 3. Codice Scaffale (scaffale) implementato con una stringa, senza caratteri bianchi, che può contenere al più 15 caratteri utili;
- 4. Numero di pagine, implementato come intero
- */
- typedef struct s_rivista {
- char titolo_rivista[64];
- char codice_ISBN[16];
- char codice_scaffale[16];
- int numero_pagine;
- }t_rivista;
- typedef struct s_nodo_rivista{
- t_rivista info;
- struct s_nodo_rivista *next;
- }t_nodo_rivista;
- typedef struct s_nodo_rivista *Lista;
- /*
- Scaffale:
- 1. Codice Scaffale (scaffale) implementato con una stringa, senza caratteri bianchi, che può contenere al più 15 caratteri utili;
- 2. Numero di riviste presenti;
- 3. Elenco delle riviste, implementato mediante una lista ordinata.
- */
- typedef struct s_scaffale{
- char codice_scaffale[16];
- int numero_riviste;
- Lista l;
- }t_scaffale;
- typedef struct s_nodo_scaffale{
- t_scaffale info;
- struct s_nodo_scaffale *next;
- }t_nodo_scaffale;
- typedef struct s_nodo_scaffale *Lista2;
- //PROTOTIPI DELLE FUNZIONI
- Lista inserimento_rivista(Lista * lis,t_rivista riv);
- int salva_rivista(FILE *fp,Lista lis);
- int ricercaCodice(Lista lis,char *codice_ISBN);
- int cancellazione_rivista(Lista *lis,char* codice_ISBN);
- void copiaDati(Lista lis1, Lista2 * lis2);
- int ricercaScaffale(Lista lis, char codice_scaffale[]);
- //FUNZIONI DI STAMPA
- void stampaLista(Lista lis);
- void stampaLista2(Lista2 lis2);
- int main(void){
- //DICHIARAZIONI DELLE VARIABILI
- int opzione;
- t_rivista riv;
- Lista lis = NULL;
- Lista2 scaffali = NULL;
- FILE * fp;
- int res;
- //Menù
- do{
- printf("1.Inserisci i dati relativi alla rivista\n");
- printf("2.Per salvare i dati relativi alla riviste i un file di testo\n");
- printf("3.Per cancellare una rivista\n");
- printf("7.Per stampare l'intero contenuto dell'intera struttura dati\n");
- printf("0.Esci dal programma.\n");
- scanf("%d",&opzione);
- switch(opzione){
- case 1:
- printf("Inserisci il titolo della rivista:\n");
- scanf("%s",riv.titolo_rivista);
- printf("Inserisci il codice ISBN della rivista:\n");
- scanf("%s",riv.codice_ISBN);
- printf("Inserisci il codice dello scaffale della rivista:\n");
- scanf("%s",riv.codice_scaffale);
- printf("Inserisci il numero di pagine della rivista:\n");
- scanf("%d",&riv.numero_pagine);
- inserimento_rivista(&lis,riv);
- break;
- case 2:
- fp = fopen("output.txt", "w");
- salva_rivista(fp,lis);
- printf("Salvataggio avvenuto con successo.\n");
- break;
- case 3:
- printf("Inserisci il codice ISBN:\n");
- scanf("%s",riv.codice_ISBN);
- res = cancellazione_rivista(&lis,riv.codice_ISBN);
- if(res){
- printf("Cancellazione effettuata con successo.\n");
- } else {
- puts("Codice non trovato! :C");
- }
- break;
- case 4:
- copiaDati(lis, &scaffali);
- break;
- case 5:
- break;
- case 6:
- break;
- case 7:
- stampaLista(lis);
- printf("Stampa avvenuta con successo\n");
- break;
- case 0:
- printf("Arrivederci.\n");
- return 0;
- default:
- printf("Inserire una delle opzioni presenti.\n");
- }
- }
- while(opzione!=0);
- }
- Lista inserimento_rivista(Lista * lis,t_rivista riv){
- Lista aux;
- aux=(Lista)malloc(sizeof(t_nodo_rivista));
- if(aux==NULL)
- exit(0);
- aux->info=riv;
- aux->next=*lis;
- *lis=aux;
- return aux;
- }
- int salva_rivista(FILE *fp,Lista lis){
- int i=0;
- if(fp == NULL){
- return -1;
- }
- while(lis!=NULL){
- fprintf(fp, "%s %s %s %d\n" ,lis->info.titolo_rivista,lis->info.codice_ISBN,lis->info.codice_scaffale, lis->info.numero_pagine);
- lis=lis->next;
- i++;
- }
- return i;
- }
- int ricercaCodice(Lista lis, char codice_ISBN[]){
- int i = 1, trovato = 0;
- while(lis!=NULL){
- if(strcmp(codice_ISBN,lis->info.codice_ISBN) == 0){
- trovato = 1;
- break;
- }
- lis=lis->next;
- i++;
- }
- if(trovato){
- return i;
- } else
- return 0;
- }
- int cancellazione_rivista(Lista *lis,char codice_ISBN[]){
- Lista attuale = *lis;
- Lista precedente = *lis;
- int n = ricercaCodice(*lis,codice_ISBN);
- int k = 0;
- if(n==0)
- return 0;
- while(k < n) {
- precedente = attuale;
- attuale = attuale->next;
- k++;
- }
- precedente->next = attuale->next;
- free(attuale);
- return 1;
- }
- int ricercaScaffale(Lista lis, char codice_scaffale[]){
- int i = 1, trovato = 0;
- while(lis!=NULL){
- if(strcmp(codice_scaffale,lis->info.codice_scaffale) == 0){
- trovato = 1;
- break;
- }
- lis=lis->next;
- i++;
- }
- if(trovato){
- return i;
- } else
- return 0;
- }
- void stampaLista(Lista lis){
- while(lis!=NULL){
- printf("%s %s %s %d\n",lis->info.titolo_rivista,lis->info.codice_ISBN,lis->info.codice_scaffale,lis->info.numero_pagine);
- lis=lis->next;
- }
- }
- void stampaLista2(Lista2 lis2){
- while(lis2!=NULL){
- printf("%s %d",lis2->info2.codice_scaffale,lis2->info2.numero_riviste);
- stampaLista(lis2->info2.l);
- lis2=lis2->prossimo;
- }
- }
- void copiaDati(Lista lis1, Lista2 * lis2){
- lis2 = NULL;
- Lista2 aux = NULL;
- int numero = 0;
- while(ricercaScaffale(lis1->info.codice_scaffale)){
- numero++;
- lis1 = lis1->next;
- }
- aux = (Lista2)malloc(sizeof(t_nodo_scaffale));
- //controllo malloc
- aux->next = *lis2;
- aux->info.l = NULL;
- /*
- * char codice_scaffale[16];
- int numero_riviste;
- Lista l;
- * /
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement