Skip to content

kleriana-kurra/Library

Repository files navigation

A.M. : 1115201800230  |  Όνομα/Επώνυμο : Kleriana Kurra

- Η εντολή για τη μεταγλώττιση : make
- Η εντολή εκτέλεσης με τιμές (5 10 11 5): make run
- Εάν θέλετε να το εκτελέσετε με άλλες τιμές, αλλάξτε τις τιμές αυτές στο Makefile η μπορείτε να
το εκτελέσετε με την εντολή ./exe NMAX L K1 K2.

- Έχω υλοποιήσει τις τρεις βασικές κλάσεις οι οποίες
είναι :

α) η boocase.h : αναπαριστά την οντότητα μιας
βιβλιοθήκης.
β) η cabinet.h : αναπαριστά την οντότητα ενός
ντουλαπιού.
γ) η shelf.h : αναπαριστά την οντότητα του ραφιού.
δ) και η book.h : αναπαριστά την οντότητα του βιβλίου.

- Άλλες κλάσεις είναι οι εξής :

- bookcaseBase.h : χρησιμοποιείται για την δόμηση της
βιβλιοθήκης, συμμετέχει στην διαδικασία αρχικοποίησεις
και καταστροφής της βιβλιοθήκης εκτυπώνοντας μήνυμα από
τον Constructor και τον Destructor.

α) Bookcase : Η κλάση αυτή έχει τέσσερα attributs :

- bookcasBase αντικείμενο της κλάσης BookcaseBase.
- cabinet αντικείμενο της κλάσης Cabinet του οποίου ο
Constructor καλείται μέσω της initialization list στον
Constructor της βιβλιοθήκης περνώντας του τον ακέραιο
NMAX που παίρνουμε από τον χρήστη για την χωρητικότητα
των ραφιών.
- shelf πίνακας δεικτών σε αντικείμενα κλάσης Shelf με
μέγεθος BOOKCASESHELVESNUMBER (το BOOKCASESHELVESNUMBER
το έχω κάνει define με την τιμή 3, έτσι ώστε αν στο
μέλλον θέλω να αλλάξω το πόσα ράφια έχει η βιβλιοθήκη
να αλλάξω μόνο την τιμή του BOOKCASESHELVESNUMBER).
Στον Constructor της Bookcase δημιουργώ δυναμικά τα
ράφια περνώντας στο Constructor της Shelf το NMAX και
βάζω τους δείκτες του πίνακα να δείχνουν σε αυτά
Δημιουργώ δυναμικά τα ράφια γιατί ο Constructor της
Shelf παίρνει όρισμα(NMAX) οπότε δεν μπορώ να τα φτιάξω
στατικά δημιουργώντας έναν πίνακα από αντικείμενα τύπου
Shelf.
- numberOfBooks μια ακέρια μεταβλητή την οποία την
χρησιμοποιώ για να αποθηκεύσω των αριθμό των βιβλίων
που υπάρχουν στην βιβλιοθήκη μια συγκεκριμένη χρονική
στιγμή.

β) Cabinet : Η κλάση αυτή έχει ένα attribut :

shelf πίνακας δεικτών σε αντικείμενα κλάσης Shelf με
μέγεθος CABINETSHELVESNUMBER (το CABINETSHELVESNUMBER
το έχω κάνει define με την τιμή 2, έτσι ώστε αν στο
μέλλον θέλω να αλλάξω το πόσα ράφια έχει το cabinet
να αλλάξω μόνο την τιμή του CABINETSHELVESNUMBER).
Στον Constructor της Cabinet δημιουργώ δυναμικά τα
ράφια περνώντας στο Constructor της Shelf το NMAX και
βάζω τους δείκτες του πίνακα να δείχνουν σε αυτά
Δημιουργώ δυναμικά τα ράφια γιατί ο Constructor της
Shelf παίρνει όρισμα(NMAX) οπότε δεν μπορώ να τα φτιάξω
στατικά δημιουργώντας έναν πίνακα από αντικείμενα τύπου
Shelf.

Έχω φτιάξει δύο μεθόδους print, μια που δεν παίρνει
ορίσματα και μια που παίρνει έναν ακέραιο ο οποίος
αντιστοιχεί στο ράφι του cabinet το οποίο θέλουμε να
εκτυπώσουμε. Η print χωρίς όρισμα καλείτε από την print της
Bookcase. Η print που δέχεται τον ακέραιο υπάρχει διότι οι
κλάσεις έχουν φτιαχτεί με το σκεπτικό ότι μπορούν να
χρησιμοποιηθούν και ξεχωριστά, οπότε θεώρησα καλό να
υπάρχει δυνατότητα για κάποιον που θέλει να χρησιμοποιήσει
την κλάση Cabinet να μπορεί να εκτύπωση όποιο ράφι θέλει.

γ) Shelf : Η κλάση αυτή έχει τρία attribut :

τον ακέραιο NMAX για την χωρητικότητα που θα έχει το ράφι ο οποίος παίρνει τιμή
από τον Constructor του Shelf μέσω του initialization list.
Για να αποθηκεύω τα βιβλία θα φτιάξω έναν πίνακα από δείκτες σε βιβλία τους οποίους
θα βάλω να δείχνουν σε NULL έτσι ώστε να ξέρω στην συνέχεια ποιες θέσεις έχουν βιβλία
και ποιες όχι. Τον πίνακα τον δημιουργώ δυναμικά επειδή δεν ξέρω το μέγεθος που θέλω να
έχει από πριν αλλά θα το μάθω κατά την κλήση του Constructor.

- place_book -> θα τοποθετεί το βιβλίο που της δίνετε στην πρώτη θέση
κενή θέση του ραφιού δηλαδή στον πρώτο δείκτη που είναι NULL.

- take_book -> θα βγάλει το πρώτο βιβλίο που θα βρει στον πίνακα δηλαδή
το βιβλίο που δείχνει ο πρώτος δείκτης που δεν είναι NULL.

- Main :

Για την δημιουργία των βιβλίων φτιάχνω έναν πίνακα μεγέθους L με δείκτες σε βιβλία και βάζω 
κάθε δείκτη να δείχνει στην μνήμη που δεσμεύω δυναμηκά για το αντίστοιχο βιβλίο που δημιουργώ. 
Για την δημιουργία κάθε βιβλίου για τίτλο δίνω title με έναν αριθμό για όνομα nameSurenameOfAuthor
με τον αριθμό και για ISBN τον αριθμό. 
Για την τοποθέτηση K1 τυχαίων βιβλίων χρησιμοποιώ την συνάρτηση rand για να παίρνω κάθε φορά έναν 
τυχαίο αριθμό από το 1 έως και το 5 ο οποίος θα προσδιορίζει το μέρος που θα μπει το βιβλίο στην βιβλιοθήκη.
Αντίστοιχα κάνω και την αφαίρεση K2 τυχαίων βιβλίων.

- Γενικά

Έχω χωρίσει τις κλάσεις μου σε αρχεία έτσι ώστε να είναι ποιο ευανάγνωστος ο κώδικας μου και
να μπορούν να χρησιμοποιηθούν οι κλάσεις μου και αργότερα σε άλλα project.

Οι μεταβλητές κάθε κλάσης είναι private ενώ οι μέθοδοι public έτσι ώστε ο χρήστης να έχει
περιορισμένη δύναμη πάνω στις μεταβλητές της κλάσης, αφού θα μπορεί να τις επεξεργαστεί
μόνο μέσω των μεθόδων που έχω ορίσει ως public.

Για την αρχικοποίηση των attributes των κλάσεων χρησιμοποιώ initialization list.

Οι περισσότερες παράμετροι στις μεθόδους μου είναι
referances για εξοικονόμηση μνήμης και const γιατί δεν
θέλω να μπορεί να αλλάξει η τιμή τους.

Όσες μέθοδοι ήταν μικρές τις όρισα μέσα στην αντίστοιχη
κλάση για να είναι inline έτσι δεν έχουν όλες οι
κλάσεις .cpp αλλά μόνο .h.

Όσες μέθοδοι δεν αλλάζουν τις τιμές των δεδομένων της
κλάσης, της έχω προσδιορίσει με const.

About

UoA projects

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages