Ultima modifica:
salve..devo fare un progetto con liste che permetti di stampare, richiedere e restituire un libro pero ho a-priori 15 libri(ho utilizzato un file)vi posto il mio codice la stampa funziona mentre la richiesta e la restituzione no potete aiutarmi vi prego....
Codice:
#include <stdio.h>
#include <stdlib.h>
#define len 35
typedef struct {
char nome[20];
char cognome[20];
char matricola[20]
struct Studente *next;
}Studente;
typedef struct {
Studente element[len];
int num_studente;
}List;
struct lista
{
char titolo[10];
char autore[10]
int cod_id;
struct lista *next;
};
typedef struct {
struct lista elementi[len];
int num_libri;
}Libro;
int Cerca_Titolo(Libro list ,char titolo[10]){
int j;
int presenza=-1;
for(j=0; j<list.num_libri; j++) {
if(strcmp(list.elementi[j].titolo, titolo)==0){
presenza=1;
}
}
return presenza;
}
struct lista *creaNodo(FILE *fp)
{
struct lista *temp=(struct lista *)malloc(sizeof(struct lista ));
fscanf(fp, "%s %s %d", temp->titolo[20], temp->autore[10],&temp->cod_id);
temp->next=NULL;
return (temp);
}
void stampaLista(struct lista *top)
{
if (top==NULL)
{
printf("\n--------------\n\n");
}
else
if (top!=NULL && top->titolo!=0)
{
printf("%s %s %d", top->titolo[10], top->autore[20], &top->cod_id);
stampaLista(top->next);
}
}
FILE *apriFile(FILE *fp)
{
fp=fopen("Libri.txt", "r");
if (fp==NULL)
{
perror("");
exit(1);
}
return (fp);
}
struct lista *CREA(struct lista *TOP){
struct lista *tmp=(struct lista*)malloc(sizeof(struct lista));
tmp->next=TOP;
strcpy(tmp->titolo,TOP->titolo[10]);
strcpy(tmp->autore,TOP->autore[10]);
tmp->cod_id = TOP->cod_id;
return tmp;
}
int menu(){
int scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/
//char nome;//utilizzata per inserire il nome dell'utente
//char matricola;//utilizzata per inserire la matricola dello studente
printf("\n* * * * * * * * * * * * * * * * * * * * * * *\nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * * * * * *\n");
//printf("Inserisci il nome:");
//scanf("%s", &nome);
// printf("Inserisci il matricola:");
//scanf("%s", &matricola);
printf(" 1. Mostra archivio\n");
printf(" 2. Richiedi libro\n");
printf(" 3. Restituire libro\n");
printf(" 4. Esegui richiesta\n");
printf(" 5. Uscire\n");
printf("Inserisci scelta:");
scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
while(scelta<0 || scelta>5) {
printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
printf("Scelta: ");
scanf("%d", &scelta);
return scelta;
}
return scelta;
}
List Inserimento_Studente(){
List lista;
int i;
printf("\nQuanti libri vuoi restituire?:");
scanf("%d",&lista.num_studente);
fflush(stdin);
for(i=0; i <lista.num_studente; i++) {
printf("\nInserisci nome: ");
gets(&lista.element[i].nome[20]);
printf("\nInserisci cognome[20]: ");
gets(&lista.element[i].cognome[20]);
printf("\nInserisci matricola: ");
scanf("%s", &lista.element[i].matricola);
fflush(stdin);
}
return lista;
}
int main() {
char buf[200];
char *res;
FILE *fp=NULL;
int scelta;
struct lista *top=NULL;
char titolo[len];
int presenza;
Libro L;
List l;
while((scelta = menu())){
switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
case 1: /*stampa lista*/
/* apre il file */
fp=apriFile(fp);
while (!feof(fp))
{
res=fgets(buf, 200, fp);
if( res==NULL )
break;
printf("%s", buf);
}
fclose(fp); /* chiudo il puntatore a file gestito in READ */
stampaLista(top);
break;
case 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/
printf("\nInserisci titolo libro da richiedere:");
fflush(stdin);
gets(titolo);
fp=apriFile(fp);
while(!feof(fp)) {
presenza = Cerca_Titolo(L,titolo);
if(titolo != -1) {
printf("Il libro cercato non e' presente nell'archivio ed il libro non e' disponibile\n");
l = Inserimento_Studente();
} else {
printf("Il libro cercato non e' presente nell'archivio ed il libro non e' disponibile\n");
}
}
fclose(fp);
break;
case 3: /* Case costruito per restituire un libro tramite codice*/
break;
case 4: /*esegui richiesta*/
break ;
case 5: /*Se l'utente vuole uscire dalla biblioteca*/
printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");
break;
default: /*Se l'utente sbaglia ad inserire il numero*/
printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
break;
} /*Fine switch*/
} /*Fine do*/
return scelta;
} /*Fine main*/