#include #include #include #define EXIT_SUCCESS 0 #define EXIT_WRONGCOMMANDLINE 1 #define EXIT_MEMORY 2 #define EXIT_OPENFILE 3 #define RIGA 80 enum _boolean { FALSE = 0, TRUE = 1}; typedef enum _boolean boolean; typedef struct _elemlibro elemlibro; typedef elemlibro *listalibri; typedef elemlibro *poslibro; struct _elemlibro { char AutoreTitolo[RIGA]; elemlibro *next, *prev; }; #define NO_ELEMENT NULL #define NO_LIST NULL listalibri crealista (); void distruggelista (listalibri *pL); poslibro primolista (listalibri L); poslibro ultimolista (listalibri L); boolean finelista (poslibro p, listalibri L); boolean listavuota (listalibri L); poslibro succlista (poslibro p, listalibri L); poslibro preclista (poslibro p, listalibri L); char *leggilista (poslibro p, listalibri L); void scrivilista (char *AutoreTitolo, poslibro p, listalibri L); void inslista (char *AutoreTitolo, poslibro p, listalibri L); void canclista (poslibro *p, listalibri L); void LeggeLineaComando (int argc, char *argv[], char *BiblioFile, char *RecordFile); listalibri CaricaBiblioteca (char *BiblioFile); void EsegueMovimenti (char *RecordFile, listalibri Scaffale, listalibri Prestati, listalibri Resi); void RiponeLibri (listalibri Scaffale, listalibri Resi); poslibro TrovaLibro (char *AutoreTitolo, listalibri L); void StampaListaLibri (listalibri L); int main(int argc, char *argv[]) { char BiblioFile[RIGA], RecordFile[RIGA]; listalibri Scaffale; listalibri Prestati; listalibri Resi; // 1) Interpretazione della linea di comando LeggeLineaComando(argc,argv,BiblioFile,RecordFile); // 2) Caricamento dei dati Scaffale = CaricaBiblioteca(BiblioFile); // 3) Allocazione delle strutture dati ausiliarie Prestati = crealista(); Resi = crealista(); // 4a) Algoritmo 1 (registrazione di prestiti e rese) EsegueMovimenti(RecordFile,Scaffale,Prestati,Resi); // 6a) Stampa dei libri rimasti StampaListaLibri(Scaffale); // 4b-6b) Algoritmo 2 (riordino della biblioteca) e stampa delle istruzioni RiponeLibri(Scaffale,Resi); // 5) Deallocazione delle strutture dati ausiliarie distruggelista(&Prestati); distruggelista(&Resi); // 6c) Stampa dei libri rimasti StampaListaLibri(Scaffale); // 7) Deallocazione dei dati distruggelista(&Scaffale); return EXIT_SUCCESS; } void LeggeLineaComando (int argc, char *argv[], char *BiblioFile, char *RecordFile) { } listalibri CaricaBiblioteca (char *BiblioFile) { return NO_LIST; } void EsegueMovimenti (char *RecordFile, listalibri Scaffale, listalibri Prestati, listalibri Resi) { } void RiponeLibri (listalibri Scaffale, listalibri Resi) { } poslibro TrovaLibro (char *AutoreTitolo, listalibri L) { return NO_ELEMENT; } void StampaListaLibri (listalibri L) { } listalibri crealista () { } void distruggelista (listalibri *pL) { } poslibro primolista (listalibri L) { return NO_ELEMENT; } poslibro ultimolista (listalibri L) { return NO_ELEMENT; } boolean finelista (poslibro p, listalibri L) { return NO_ELEMENT; } boolean listavuota (listalibri L) { return TRUE; } poslibro succlista (poslibro p, listalibri L) { return NO_ELEMENT; } poslibro preclista (poslibro p, listalibri L) { return NO_ELEMENT; } char *leggilista (poslibro p, listalibri L) { return ""; } void scrivilista (char *AutoreTitolo, poslibro p, listalibri L) { } void inslista (char *AutoreTitolo, poslibro p, listalibri L) { } void canclista (poslibro *pp, listalibri L) { }