Come da titolo devo organizzare una piccola biblioteca (è un esercizio che mi è stato assegnato dal prof. in università e frequento il primo anno).
La gestione dei PRESTITI della Biblioteca X si basa su una tabella contenente
informazioni sui volumi in dotazione della biblioteca. Per ciascun volume è
registrato: codice, titolo, anno di pubblicazione, cognome e nome del
primo autore, categoria (diritto, informatica, economia, fisica, altro),
presenza (si/no), data del prestito (gg/mm/aaaa), numero telefonico
dell’utente che detiene il libro in prestito.
La durata di un prestito non può superare i sei mesi. Per ipotesi semplificativa,
per ciascun titolo la Biblioteca detiene una sola copia.
Si chiede di realizzare un applicativo che consenta di:
• 1-Stampare la tabella dei volumi
• 2-Ordinare la tabella per anno di pubblicazione
• 3- Elencare i titoli che si trovano in prestito e (opzionale) la quantità dei
giorni che mancano alla restituzione
• 4- Stampare la categoria più rappresentata nella Biblioteca.
questo sarebbe ciò che deve svolgere il programma. e posso usare solo: ARRAY-STRUCT-FILE.
IN SEGUITO TROVATE IL CODICE CHE STAVO INIZIANDO AD ELABORARE SOLO CHE HO UN PROBLEMA CON IL SALVATAGGIO SU FILE E LA SUA LETTURA, IN PRATICA IL FILE MI SALVA I VALORI SOLO TEMPORANEAMENTE, E SALVA I VALORI DI UN SOLO LIBRO. E SE GLI RICHIEDO DI STAMPARMI A VIDEO IL CONTENUTO DEL FILE MI MANDA IL MESSAGGIO DI ERRORE. QUALCUNO SAPREBBE AIUTARMI? grazie anticipatamente
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct data_prst {
int giorno;
int mese;
int anno;
};
typedef struct data_prst data_prst;
struct volume {
int codice[50];
char titolo[200];
int anno_pub;
char nome[50], cognome[50];
char categoria[50];
int presenza;
data_prst data_prst;
int nt_utente;
};
typedef struct volume libro;
int main(void)
{
libro x;
int comando,i;
char riga[20];
FILE *ptf;
strcpy(x.codice);
strcpy(x.titolo);
strcpy(x.anno_pub);
strcpy(x.nome);
strcpy(x.cognome);
strcpy(x.categoria);
strcpy(x.presenza);
strcpy(x.data_prst);
strcpy(x.nt_utente);
ptf=fopen("biblio.txt","w");
if(ptf==NULL)
{
printf("ERRORE: file.\n");
}
else {
do
{
printf("\n\n");
puts("1) stampa tabella volumi");
puts("2) Ordinare la tabella per anno di pubblicazione") ;
puts("3) Elencare i titoli che si trovano in prestito") ;
puts("4) Stampare la categoria più rappresentata nella Biblioteca") ;
puts("5) vuoi inserire un nuovo libro?");
puts("0) Esci dal programma") ;
printf("\n\n");
printf("Inserisci comando: ");
gets (riga);
comando=atoi(riga);
switch(comando)
{
case 1:
printf("----------------------------------\n");
printf(" ||codice || titolo || anno di pubblicazione || cognome autore || nome autore || categoria ||\n");
ptf=fopen ("biblo.txt","r");
if(ptf==NULL)
{ printf("ERRORE: file..\n");
break;}
else
/*
void stampaDaFile(FILE *file, Volume vol)
{
//FUNZIONE CHE LEGGE DATI DA UN FILE
file = fopen ("biblioteca.txt", "r"); //APRO FILE IN LETTURA
if (file == NULL) //CONTROLLO SE IL FILE ESISTE
{
fprintf(stderr, "\nErrore apertura del file\n");
exit (1);
}
printf("------------------------------------------------------Volumi---------------------------------------------------------------------");
// LEGGO IL CONTENUTO DEL FILE
while(fread(&vol, sizeof(struct Volume), 1, file))
printf ("\nCodice=%d | Titolo=%s | Anno di pubblicazione=%d | Cognome=%s | Nome=%s | Categoria=%s | Presenza=%s | DataPrestito=%d/%d/%d | Contatto=%d \n",
vol.Codice, vol.Titolo,vol.AnnodiPubblicazione ,vol.Cognome, vol.Nome, vol.Categoria, vol.Presenza,vol.DataPrestito.giorno, vol.DataPrestito.mese, vol.DataPrestito.anno,vol.Contatto);
printf("---------------------------------------------------------------------------------------------------------------------------------\n");
// CHIUSURA FILE
fclose (file);
}
*/
printf("------------------------------------\n");
break;
case 2:
printf("----------------------------------\n");
printf("----------------------------------\n");
break;
case 3:
printf("----------------------------------\n");
printf("----------------------------------\n");
break;
case 4:
printf("----------------------------------\n");
printf("----------------------------------\n");
break;
case 5:
printf("----------------------------------\n");
ptf=fopen("biblio.txt", "a+");
if(ptf==NULL)
printf("Errore nell'apertura del file");
else
{
printf("Inserire i dati del libro:\n ||codice || titolo || anno di pubblicazione || cognome autore || nome autore || categoria ||\n");
scanf("%d %s %d %s %s %s", &x.codice, &x.titolo, &x.anno_pub, &x.cognome, &x.nome, &x.categoria);
fprintf(ptf, "|%d | %s | %d | %s | %s | %s | \n", x.codice, x.titolo, x.anno_pub, x.cognome, x.nome, x.categoria);
}
printf("----------------------------------\n");
break;
case 0:
printf("----------------------------------\n");
puts ("Arrivederci");
break;
default:
printf("ERRORE NEL PROGRAMMA (comando=%d\n", comando);
}
}
while(comando!=0);
}
fclose(ptf);
system("PAUSE");
return 0;
}