-
Notifications
You must be signed in to change notification settings - Fork 0
kleriana-kurra/Library
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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 0
No packages published