You are on page 1of 7

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ

Τµήµα Ψηφιακών Συστηµάτων


Μάθηµα: «Αντικειµενοστρεφής Προγραµµατισµός»
2ο εξάµηνο, Εαρινή περίοδος 2019-2020

ΑΠΑΛΛΑΚΤΙΚΗ ΕΡΓΑΣΙΑ MΑΘΗΜΑΤΟΣ

ΠΡΟΣΟΧΗ: Η εργασία εξαμήνου είναι απαλλακτική και επομένως υποχρεωτική


και θεωρείται πλέον τρόπος εξέτασης του μαθήματος για την εξεταστική
περίοδο του Ιουνίου 2020 για ΟΛΟΥΣ τους φοιτητές που δηλώσανε το
συγκεκριμένο μάθημα κατά την υποβολή δηλώσεων μαθημάτων εαρινού
εξαμήνου ακαδημαϊκού έτους 2019-2020. Αν κάποιος δεν υποβάλει την
απαλλακτική εργασία, δεν μπορεί να αξιολογηθεί στην εξεταστική περίοδο
Ιουνίου.

Η εργασία αυτή θα σας βοηθήσει να εξοικειωθείτε µε τις βασικές έννοιες του


αντικειµενοστρεφούς προγραµµατισµού και µε τον προγραµµατισµό σε γλώσσα Java.

Η εργασία μπορεί να εκπονηθεί από οµάδες µέχρι τριών ατόµων.

Η εργασία σας θα πρέπει να παραδοθεί σε ένα αρχείο .zip με όνομα της μορφής ΑΜ1-ΑΜ2-
ΑΜ3.zip (ΑΜ1, ΑΜ2, ΑΜ3 οι αριθµοί µητρώου των µελών της οµάδας). Το zip αρχείο θα
υποβληθεί µέσω eclass (ανεβάστε το αρχείο στην περιοχή «Εργασίες» στο
https://evdoxos.ds.unipi.gr/) µέχρι τις 25/06/2020, ώρα 23:55. Μετά την παρέλευση της
ημερομηνίας αυτής δεν πρόκειται να γίνουν δεκτές εργασίες.

Βαθμολογία Εργασιών

Οι εργασίες θα βαθμολογηθούν κατόπιν παρουσίασης, η οποία είναι υποχρεωτική για όλα τα


μέλη της ομάδας και θα γίνει σε ημερομηνία που θα ανακοινωθεί μέσω του Ευδόξου (θα βγει
σχετική ανακοίνωση). Η βαθμολογία είναι ατομική και εξαρτάται από το βαθμό συμμετοχής
του κάθε μέλους στην εκπόνηση της εργασίας, γεγονός και το οποίο θα διαπιστωθεί κατά την
παρουσίασή της.
Οδηγίες ανάπτυξης και εξαγωγής πηγαίου κώδικα εργασίας από το Eclipse

Για την ανάπτυξη του πηγαίου κώδικα της εργασίας και την εκτέλεση θα χρησιµοποιήσετε το
ολοκληρωµένο περιβάλλον ανάπτυξης Eclipse. Για την εξαγωγή και αποθήκευση του πηγαίου
κώδικα της εργασίας, πρέπει να ακολουθήσετε τα εξής βήµατα µέσα από το Eclipse:
1. Από το µενού του Eclipse (η µπάρα στο πάνω µέρος) επιλέγετε File ->Export.
2. Στο παράθυρο που σας ανοίγει, επιλέγετε από την κατηγορία “General”, την επιλογή
“Archive File” και πατάτε “Next”.
3. Επιλέγετε το project στο πάνω αριστερά µέρος (τικάρετε το κουτάκι στα αριστερά του
ονόµατος) και πατάτε το κουµπί “Browse...” για να επιλέξετε τη διαδροµή που θα
αποθηκευτεί το αρχείο.
4. Τέλος, πατάτε το κουµπί “Finish” για να αποθηκευτεί ο κώδικάς σας σε συµπιεσµένη
µορφή στο zip αρχείο, το οποίο θα αποστείλετε µέσω του eclass.

Περιγραφή Εργασίας
Στο πλαίσιο αυτής της εργασίας θα πρέπει να αναπτυχθεί ένα μηχανογραφικό σύστημα για μια
εταιρία ενοικιάσεως οχημάτων. Η εταιρία αυτή διαθέτει δίκτυο καταστημάτων σε πόλεις της
Ελλάδας, καθένα από τα οποία διαθέτει προς ενοικίαση δίκυκλα και επιβατικά αυτοκίνητα.

Να αναπτύξετε ένα πρόγραµµα σε γλώσσα προγραµµατισµού Java το οποίο θα περιέχει:

1. Κλάση City (Πόλη), η οποία θα περιλαμβάνει τα ακόλουθα πεδία: μοναδικός κωδικός και
όνομα πόλης.
2. Κλάση Store (Κατάστημα), η οποία θα περιλαμβάνει τα ακόλουθα πεδία: μοναδικός
κωδικός, επωνυμία και πόλη στην οποία βρίσκεται.
3. Κλάση Vehicle (Όχημα), η οποία θα περιλαμβάνει τα ακόλουθα πεδία: αριθμός κυκλοφορίας
του (μοναδικός για κάθε αυτοκίνητο), μοντέλο, αν είναι βενζινοκίνητο ή πετρελαιοκίνητο,
τύπος (π.χ. σκούτερ, μοτοσυκλέτα, μικρό ή μεσαίο ή μεγάλο αυτοκίνητο), κυβισμός και
κόστος ενοικίασης ανά ημέρα.
4. Κλάση TwoWheeled (Δίκυκλο), η οποία κληρονομεί από την κλάση Vehicle και περιλαμβάνει
επιπλέον τα πεδία: ύψος καθίσματος και σύστημα αποσκευών που διαθέτει.
5. Κλάση Car (Επιβατικό Αυτοκίνητο), η οποία κληρονομεί από την κλάση Vehicle και
περιλαμβάνει επιπλέον τα πεδία: αριθμός θέσεων που διαθέτει και αριθμός πορτών.
6. Κλάση Client (Πελάτης), η οποία θα περιλαμβάνει τα ακόλουθα πεδία: αριθμός δελτίου
ταυτότητας πελάτη, αριθμός άδειας οδήγησης πελάτη, όνομα και επώνυμο πελάτη καθώς
και τα στοιχεία επικοινωνίας του, δηλαδή διεύθυνση e-mail, διεύθυνση και τηλέφωνο.
7. Κλάση Rental (Κράτηση), η οποία θα περιλαμβάνει τα ακόλουθα πεδία: μοναδικός κωδικός
κράτησης, όχημα που ενοικιάζεται, πελάτης που το ενοικιάζει, κατάστημα απ’ όπου θα
παραληφθεί το όχημα, ημερομηνία και ώρα παραλαβής, κατάστημα όπου θα επιστραφεί το
όχημα (εάν διαφέρει από το κατάστημα παραλαβής), ημερομηνία και ώρα επιστροφής και
συνολικό κόστος της κράτησης.
8. Την εφαρμογή που χρησιμοποιεί ο υπάλληλος κάθε καταστήματος, η οποία θα είναι
ανεπτυγμένη σε γραφικό περιβάλλον. Μέσω της εφαρμογής αυτής:
• θα δημιουργούνται νέα αντικείμενα των παραπάνω κλάσεων,
• θα εμφανίζονται όλα τα ήδη υπάρχοντα αντικείμενα των κλάσεων,
• θα ενημερώνονται συγκεκριμένα στοιχεία των αντικειμένων των κλάσεων ή
• θα διαγράφονται αντικείμενα των κλάσεων.

Η εφαρμογή θα έχει ένα κεντρικό παράθυρο απ’ όπου ο χρήστης θα μπορεί να έχει
πρόσβαση στα παράθυρα όπου θα γίνεται η διαχείριση των κλάσεων City, Store, Vehicle,
Client και Rental όπως φαίνεται στο παρακάτω σχήμα.

Μια ενδεικτική μορφή της κεντρικής οθόνης φαίνεται στο ακόλουθο σχήμα όπου η
μετάβαση στα διάφορα παράθυρα πραγματοποιείται με τη χρήση κουμπιών.
Α. Διαχείριση Πόλεων
Το παράθυρο μέσω του οποίου θα γίνεται η διαχείριση των πόλεων θα έχει έναν πίνακα
όπου θα φαίνονται όλες οι πόλεις στις οποίες υπάρχουν καταστήματα της εταιρίας. Στο
παράθυρο αυτό θα υποστηρίζονται οι ακόλουθες λειτουργίες:
1. Καταχώρηση νέας πόλης. Θα δημιουργείται ένα νέο αντικείμενο της κλάσης City. Ο
μοναδικός κωδικός του αντικειμένου θα υπολογίζεται αυτόματα και δε θα μπορεί να
αλλάξει.
2. Εμφάνιση λίστας πόλεων. Θα εμφανίζεται σε πίνακα η λίστα με τις καταχωρημένες
πόλεις.
3. Τροποποίηση πόλης. Αφορά την αλλαγή του ονόματος μιας πόλης, αφού ο κωδικός
της πόλης δεν μπορεί να αλλάξει. Ο χρήστης θα επιλέγει από τον πίνακα την πόλη
που θέλει να τροποποιήσει ή θα την αναζητά με βάση το όνομα και μετά θα την
επιλέγει από τα αποτελέσματα της αναζήτησης.
4. Διαγραφή πόλης. Ο χρήστης θα μπορεί να επιλέγει από τον πίνακα μια πόλη και να
τη διαγράφει.

Β. Διαχείριση Καταστημάτων
Το παράθυρο μέσω του οποίου θα γίνεται η διαχείριση των καταστημάτων θα έχει έναν
πίνακα όπου θα φαίνονται όλα τα καταστήματα της εταιρίας. Στο παράθυρο αυτό θα
υποστηρίζονται οι ακόλουθες λειτουργίες:
1. Καταχώρηση νέου καταστήματος. Θα δημιουργείται ένα νέο αντικείμενο της κλάσης
Store. Ο μοναδικός κωδικός του αντικειμένου θα υπολογίζεται αυτόματα και δε θα
μπορεί να αλλάξει. Η πόλη στην οποία θα προστεθεί το κατάστημα θα πρέπει να είναι
ήδη καταχωρημένη στη λίστα με τις πόλεις.
2. Εμφάνιση λίστας καταστημάτων. Θα εμφανίζεται σε πίνακα η λίστα με τα
καταχωρημένα καταστήματα.
3. Αναζήτηση καταστημάτων. Θα παρέχεται η δυνατότητα αναζήτησης των
καταστημάτων με βάση την πόλη στην οποία βρίσκονται. Ο χρήστης θα πληκτρολογεί
το όνομα της πόλης και πατώντας ένα κουμπί θα εμφανίζεται στον πίνακα η λίστα με
τα καταστήματα της πόλης.
4. Τροποποίηση καταστήματος. Αφορά την αλλαγή της επωνυμίας ενός καταστήματος
(ο κωδικός του καταστήματος και η πόλη στην οποία βρίσκεται δε θα μπορούν να
αλλάξουν). Ο χρήστης θα επιλέγει από τον πίνακα το κατάστημα που θέλει να
τροποποιήσει ή θα το αναζητά με βάση την πόλη στην οποία βρίσκεται και μετά θα
το επιλέγει από τα αποτελέσματα της αναζήτησης.
5. Διαγραφή καταστήματος. Ο χρήστης θα μπορεί να επιλέγει από τον πίνακα ένα
κατάστημα και να το διαγράφει.
Γ. Διαχείριση Οχημάτων
Το παράθυρο μέσω του οποίου θα γίνεται η διαχείριση των οχημάτων θα έχει έναν πίνακα
όπου θα φαίνεται όλος ο στόλος της εταιρίας. Στο παράθυρο αυτό θα υποστηρίζονται οι
ακόλουθες λειτουργίες:
1. Καταχώρηση νέου οχήματος. Θα δημιουργείται ένα νέο αντικείμενο της κλάσης
Twowheeled ή της κλάσης Car, ανάλογα με το όχημα που επιθυμεί ο χρήστης να
καταχωρίσει. Το είδος του οχήματος θα επιλέγεται από ένα ComboBox (ή radio
buttons) το οποίο θα έχει 2 στατικές τιμές τις: TwoWheeled (εάν θέλουμε να
δημιουργήσουμε νέο αντικείμενο της κλάσης TwoWheeled) και Car (εάν θέλουμε να
δημιουργήσουμε νέο αντικείμενο της κλάσης Car).
2. Εμφάνιση λίστας οχημάτων. Θα εμφανίζεται σε πίνακα η λίστα με τα καταχωρημένα
οχήματα.
3. Αναζήτηση οχημάτων. Θα παρέχεται η δυνατότητα αναζήτησης των οχημάτων με
βάση το είδος τους (δίκυκλα ή αυτοκίνητα). Το είδος του οχήματος θα επιλέγεται από
ένα ComboBox το οποίο θα έχει 2 στατικές τιμές τις: TwoWheeled και Car.
4. Τροποποίηση οχήματος. Αφορά την αλλαγή σε όλα τα δεδομένα του αντικειμένου
εκτός από τον αριθμό κυκλοφορίας του οχήματος, ο οποίος δεν μπορεί να αλλάξει.
Ο χρήστης θα επιλέγει από τον πίνακα το όχημα που θέλει να τροποποιήσει.
5. Διαγραφή οχήματος. Ο χρήστης θα μπορεί να επιλέγει από τον πίνακα ένα όχημα
και να το διαγράφει.

Δ. Διαχείριση Πελατών
Το παράθυρο μέσω του οποίου θα γίνεται η διαχείριση των πελατών θα έχει έναν πίνακα
όπου θα φαίνονται όλοι οι πελάτες της εταιρίας, οι οποίοι έχουν εξυπηρετηθεί σε
οποιοδήποτε κατάστημα της εταιρίας. Στο παράθυρο αυτό θα υποστηρίζονται οι ακόλουθες
λειτουργίες:
1. Καταχώρηση νέου πελάτη. Θα δημιουργείται ένα νέο αντικείμενο της κλάσης Client,
το οποίο θα χαρακτηρίζεται μοναδικά από τον αριθμό δελτίου ταυτότητας και τον
αριθμό άδειας οδήγησης.
2. Εμφάνιση λίστας πελατών: Θα εμφανίζεται σε πίνακα η λίστα με τους
καταχωρημένους πελάτες.
3. Αναζήτηση πελατών: Θα παρέχεται η δυνατότητα αναζήτησης των πελατών με βάση
τον αριθμό δελτίου ταυτότητάς τους.
4. Τροποποίηση πελάτη. Αφορά την αλλαγή σε όλα τα δεδομένα του αντικειμένου
εκτός από τον αριθμό δελτίου ταυτότητας του πελάτη και τον αριθμό της άδειας
οδήγησής τους. Ο χρήστης θα επιλέγει από τον πίνακα τον πελάτη που θέλει να
τροποποιήσει ή θα τον αναζητά με βάση τον αριθμό ταυτότητας και μετά θα τον
επιλέγει από τα αποτελέσματα της αναζήτησης.
5. Διαγραφή πελάτη. Ο χρήστης θα μπορεί να επιλέγει από τον πίνακα έναν πελάτη
και να τον διαγράφει.

Ε. Διαχείριση Ενοικιάσεων Οχημάτων


Το παράθυρο μέσω του οποίου θα γίνεται η διαχείριση των ενοικιάσεων των οχημάτων θα
έχει έναν πίνακα όπου θα φαίνονται όλες οι ενοικιάσεις οχημάτων. Στο παράθυρο αυτό θα
υποστηρίζονται οι ακόλουθες λειτουργίες:
1. Καταχώρηση νέας ενοικίασης. Θα δημιουργείται ένα νέο αντικείμενο της κλάσης
Rental. Ο μοναδικός κωδικός κράτησης θα υπολογίζεται αυτόματα και δε θα μπορεί
να αλλάξει. Για την κράτηση ενός οχήματος, ο υπάλληλος θα εισάγει τον αριθμό
κυκλοφορίας του οχήματος που θα ενοικιαστεί, το όνομα του πελάτη που θα το
ενοικιάσει, το κατάστημα από το οποίο θα το παραλάβει, την ημερομηνία και ώρα
παραλαβής, το κατάστημα στο οποίο θα το παραδώσει(εάν διαφέρει από τον τόπο
παραλαβής), την ημερομηνία και ώρα επιστροφής και το συνολικό κόστος για τις
ημέρες της ενοικίασης. Εάν τα στοιχεία που έχει δώσει ο υπάλληλος είναι σωστά,
δηλαδή εάν υπάρχουν καταχωρημένα το όχημα, το κατάστημα και ο πελάτης κι εάν
η ημερομηνία παράδοσης είναι μεταγενέστερη από την ημερομηνία παραλαβής, η
κράτηση θα πραγματοποιείται.
2. Εμφάνιση λίστας ενοικιάσεων οχημάτων. Θα εμφανίζεται σε πίνακα η λίστα με τις
ενοικιάσεις των οχημάτων.
3. Ακύρωση ενοικίασης. Ένας πελάτης θα έχει το δικαίωμα να ακυρώσει μία κράτηση
χωρίς κόστος μέχρι 2 μέρες πριν την έναρξή της. Ο χρήστης θα επιλέγει από τον
πίνακα την κράτηση και θα τη διαγράφει.

Σημειώσεις:

1. Σε όλες τις κλάσεις τα πεδία θα οριστούν ως private.


2. Σε όλες τις κλάσεις θα οριστούν μέθοδοι setters και getters για τη θέση και την ανάκτηση
των τιμών των πεδίων της εκάστοτε κλάσης.
3. Σε κάθε κλάση θα οριστεί ένας constructor με παραμέτρους όλα τα πεδία της κλάσης και
όποιος άλλος constructor θεωρηθεί απαραίτητος για τις ανάγκες τις εργασίας.
4. Για την αποθήκευση των αντικειμένων των κλάσεων θα χρησιμοποιηθούν ArrayLists τα
οποία θα δηλωθούν στην κλάση που υλοποιεί το κεντρικό παράθυρο της εφαρμογής. Οι
μεταβλητές των ArrayLists θα είναι στατικές. Τα αντικείμενα των κλάσεων TwoWheeled και
Car θα αποθηκεύονται σε ένα ArrayList<Vehicle>.
5. Σε καθεμιά από τις κλάσεις City, Store και Rental θα πρέπει να δηλωθεί ένα επιπλέον πεδίο,
το MAX_CODE, το οποίο θα είναι στατικό (static) και θα κρατάει τον κωδικό του αντικειμένου
της κλάσης που δημιουργήθηκε τελευταίο. Η αρχική τιμή του MAX_CODE θα είναι το 0. Όταν
ο υπάλληλος θελήσει να δημιουργήσει ένα νέο αντικείμενο της κλάσης, ο κωδικός του
αντικειμένου αυτού θα υπολογίζεται αυτόματα και θα είναι ίσο με MAX_CODE+1. Μετά τη
δημιουργία του νέου αντικειμένου, το πεδίο MAX_CODE θα αυξάνεται κατά 1.
6. Σε όλες τις περιπτώσεις εισαγωγής δεδομένων από το χρήστη θα πρέπει να
πραγματοποιούνται έλεγχοι εγκυρότητας των δεδομένων. Επίσης, θα πρέπει να
διασφαλίζεται ότι ο χρήστης δε θα κάνει κάποιο άλλο σφάλμα, όπως για παράδειγμα να
πατήσει το delete για διαγραφή μιας εγγραφής του πίνακα (δηλ. ενός αντικειμένου μιας
κλάσης) χωρίς να έχει προηγουμένως επιλέξει το αντικείμενο που επιθυμεί να διαγράψει.
7. Ο πηγαίος κώδικας θα πρέπει να περιέχει επαρκή σχολιασμό.
8. Παράδειγμα παραθύρου για τη διαχείριση των καταστημάτων είναι το ακόλουθο:

Καλή Επιτυχία!!!

You might also like