Organizzare una biblioteca

di il
2 risposte

Organizzare una biblioteca

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;
}

2 Risposte

  • Re: Organizzare una biblioteca

    A me non compila. strcpy deve avere 2 argomenti.
    In ogni caso ptf=fopen("biblio.txt","w") ti resetta il file.
  • Re: Organizzare una biblioteca

    Non ti conviene dividere il tutto in più funzioni e risolvere una questione alla volta? Così ti eviti anche di avere un bloccone di codice lunghissimo nel quale poi è complicato raccapezzarsi.
Devi accedere o registrarti per scrivere nel forum
2 risposte