24
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011 ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3 η ΕΡΓΑΙΑ 1 ΣΡΙΣΗ ΓΡΑΠΣΗ ΕΡΓΑΙΑ ΕΝΔΕΙΚΣΙΚΕ ΛΤΕΙ-ΑΠΑΝΣΗΕΙ Υλοποίηςη ςυςτήματοσ διαχείριςησ αποθήκησ εξοπλιςμοφ Σκοπόσ τθσ άςκθςθσ είναι θ ανάπτυξθ ενόσ ςυςτιματοσ μζςω του οποίου κα καταχωρείται ο εξοπλιςμόσ (υπολογιςτζσ, οκόνεσ και εκτυπωτζσ) και το προςωπικό μιασ εταιρείασ, και κα χρεώνει/αποδεςμεφει εξοπλιςμό ςε/από προςωπικό. Άςκηςη 1 Σχεδιαςμόσ ςυςτήματοσ (10 μονάδεσ) Ερώτημα Α Διάγραμμα κλάςεων (10 μονάδεσ) Το ςφςτθμα διαχείριςθσ αποκικθσ εξοπλιςμοφ απαιτεί τθν αποκικευςθ των ακόλουκων πλθροφοριών: 1. Για κάκε είδοσ εξοπλιςμοφ: αναγνωριςτικι ετικζτα εξοπλιςμοφ, ςειριακό αρικμό, μοντζλο και περιγραφι για όλα τα είδθ εξοπλιςμοφ 2. Για τουσ υπολογιςτζσ απαιτείται επιπλζον θ αποκικευςθ των ακόλουκων πλθροφοριών: τφποσ υπολογιςτι (laptop, desktop), ςυχνότθτα CPU, μζγεκοσ μνιμθσ RAM και μζγεκοσ δίςκου. 3. Για τισ οκόνεσ απαιτείται επιπλζον θ αποκικευςθ των ακόλουκων πλθροφοριών: τφποσ οκόνθσ (CRT, LCD) και μζγεκοσ ςε ίντςεσ. 4. Για τουσ εκτυπωτζσ απαιτείται επιπλζον θ αποκικευςθ των ακόλουκων πλθροφοριών: τφποσ εκτυπωτι (inkjet, laser, dot) και ταχφτθτα εκτφπωςθσ (ppm). 5. Για το προςωπικό: όνομα, επώνυμο, τθλζφωνο και email. Τα παραπάνω ςτοιχεία κα αποκθκεφονται ςε βάςθ δεδομζνων (ΒΔ) μζςω κατάλλθλθσ διεπαφισ (κλάςθ DBManager), ενώ θ αλλθλεπίδραςθ του υπευκφνου αποκικθσ με το ςφςτθμα, κα γίνεται μζςω γραφικοφ ενδιάμεςου χριςτθ (GUI). Σχεδιάςτε το αναλυτικό διάγραμμα κλάςεων που αντιςτοιχεί ςτθν πιο πάνω περιγραφι και επεξθγιςτε τισ επιλογζσ ςασ. Σε μορφι πίνακα να ςχολιάςετε τθν κάκε κλάςθ, πεδίο, μζκοδο και ςχζςθ. Παρατήρηση: Στο διάγραμμα να ςυμπεριλάβετε και τθν κλάςθ DBManager αλλά και τθν/τισ κλάςθ/κλάςεισ που αναπαριςτοφν τθ γραφικι διεπαφι και τισ μεταξφ τουσ ςυςχετίςεισ.

PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

  • Upload
    mixdim

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 1

ΣΡΙΣΗ ΓΡΑΠΣΗ ΕΡΓΑΙΑ ΕΝΔΕΙΚΣΙΚΕ ΛΤΕΙ-ΑΠΑΝΣΗΕΙ

Υλοποίηςη ςυςτήματοσ διαχείριςησ αποθήκησ εξοπλιςμοφ Σκοπόσ τθσ άςκθςθσ είναι θ ανάπτυξθ ενόσ ςυςτιματοσ μζςω του οποίου κα καταχωρείται ο εξοπλιςμόσ (υπολογιςτζσ, οκόνεσ και εκτυπωτζσ) και το προςωπικό μιασ εταιρείασ, και κα χρεώνει/αποδεςμεφει εξοπλιςμό ςε/από προςωπικό.

Άςκηςη 1 – Σχεδιαςμόσ ςυςτήματοσ (10 μονάδεσ) Ερώτημα Α – Διάγραμμα κλάςεων (10 μονάδεσ) Το ςφςτθμα διαχείριςθσ αποκικθσ εξοπλιςμοφ απαιτεί τθν αποκικευςθ των ακόλουκων πλθροφοριών:

1. Για κάκε είδοσ εξοπλιςμοφ: αναγνωριςτικι ετικζτα εξοπλιςμοφ, ςειριακό αρικμό, μοντζλο και περιγραφι για όλα τα είδθ εξοπλιςμοφ

2. Για τουσ υπολογιςτζσ απαιτείται επιπλζον θ αποκικευςθ των ακόλουκων πλθροφοριών: τφποσ υπολογιςτι (laptop, desktop), ςυχνότθτα CPU, μζγεκοσ μνιμθσ RAM και μζγεκοσ δίςκου.

3. Για τισ οκόνεσ απαιτείται επιπλζον θ αποκικευςθ των ακόλουκων πλθροφοριών: τφποσ οκόνθσ (CRT, LCD) και μζγεκοσ ςε ίντςεσ.

4. Για τουσ εκτυπωτζσ απαιτείται επιπλζον θ αποκικευςθ των ακόλουκων πλθροφοριών: τφποσ εκτυπωτι (inkjet, laser, dot) και ταχφτθτα εκτφπωςθσ (ppm).

5. Για το προςωπικό: όνομα, επώνυμο, τθλζφωνο και email. Τα παραπάνω ςτοιχεία κα αποκθκεφονται ςε βάςθ δεδομζνων (ΒΔ) μζςω κατάλλθλθσ διεπαφισ (κλάςθ DBManager), ενώ θ αλλθλεπίδραςθ του υπευκφνου αποκικθσ με το ςφςτθμα, κα γίνεται μζςω γραφικοφ ενδιάμεςου χριςτθ (GUI). Σχεδιάςτε το αναλυτικό διάγραμμα κλάςεων που αντιςτοιχεί ςτθν πιο πάνω περιγραφι και επεξθγιςτε τισ επιλογζσ ςασ. Σε μορφι πίνακα να ςχολιάςετε τθν κάκε κλάςθ, πεδίο, μζκοδο και ςχζςθ. Παρατήρηση: Στο διάγραμμα να ςυμπεριλάβετε και τθν κλάςθ DBManager αλλά και τθν/τισ κλάςθ/κλάςεισ που αναπαριςτοφν τθ γραφικι διεπαφι και τισ μεταξφ τουσ ςυςχετίςεισ.

Page 2: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 2

Απάντηςη

Σχολιασμός

Η εθθώλεζε ηεο άζθεζεο δηαζαθελίδεη πιήξσο ηηο θιάζεηο πνπ πξέπεη λα ζπκπεξηιεθζνύλ ζην

δηάγξακκα θιάζεσλ. Έηζη έρνπκε ηηο θιάζεηο Εμνπιηζκόο (Equipment), Υπνινγηζηήο (Computer),

Οζόλε (Monitor), Εθηππσηήο (Printer) θαη ηελ θιάζε Πξνζσπηθό (Person).

Επηπιένλ ε εθθώλεζε πξνζδηνξίδεη ην όλνκα ηεο θιάζεο πνπ ζα ρξεζηκνπνηεζεί γηα ηε δηεπαθή κε ηε

βάζε δεδνκέλσλ, άξα ζην δηάγξακκα ζα έρνπκε θαη ηελ θιάζε DBManager.

Page 3: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 3

Τέινο, από ηελ αξρηθή πεξηγξαθή ηνπ ζπζηήκαηνο δηαρείξηζεο απνζήθεο εμνπιηζκνύ ζύκθσλα κε ηελ

νπνία:

«Σκοπόσ τησ άςκηςησ είναι η ανάπτυξη ενόσ ςυςτήματοσ μζςω του οποίου θα καταχωρείται ο εξοπλιςμόσ (υπολογιςτζσ, οθόνεσ και εκτυπωτζσ) και το προςωπικό μιασ εταιρείασ, και θα χρεώνει/αποδεςμεφει εξοπλιςμό ςε/από προςωπικό.»

κπνξνύκε λα ζπκπεξάλνπκε όηη ζα ρξεηαζηνύλ θιάζεηο γραφικοφ ενδιάμεςου χριςτθ (GUI) για τθ διαχείριςθ του προςωπικοφ τθσ εταιρείασ (ManagePersonsGUI), για τθ διαχείριςθ του εξοπλιςμοφ (ManageEquipmentGUI) και για διαχείριςθ των χρεώςεων (AssignmentsGUI). Η κλάςθ MainGUI αποτελεί το μενοφ τθσ εφαρμογισ μζςω τθσ οποίασ ο υπεφκυνοσ αποκικθσ κα αποκτάει πρόςβαςθ ςτισ επιμζρουσ λειτουργίεσ τθσ εφαρμογισ. Τα πεδία των κλάςεων προςδιορίηονται επίςθσ ξεκάκαρα από τθν εκφώνθςθ, με τθν παρατιρθςθ ότι εφόςον οι υπολογιςτζσ, οι οκόνεσ και οι εκτυπωτζσ είναι όλα εξοπλιςμόσ, τότε τα χαρακτθριςτικά που αναφζρονται ςτθν εκφώνθςθ «για κάκε είδοσ εξοπλιςμοφ», αντί να ειςαχκοφν ωσ πεδία ςε κακεμία από τισ επιμζρουσ κλάςεισ, μποροφν να ςυγκεντρωκοφν ςτθν κλάςθ Equipment και οι άλλεσ κλάςεισ να τα κλθρονομοφν. Τα πεδία τθσ κλάςθσ DBManager αφοροφν κυρίωσ τθ ςφνδεςθ με τθ βάςθ δεδομζνων (π.χ. το όνομα τθσ βάςθσ δεδομζνων, το username και password για τθν πρόςβαςθ, τον driver κτλ.). Οι μζκοδοι τθσ κλάςθσ DBManager εκτόσ από τουσ setters και getters των πεδίων, αφοροφν επίςθσ τθ δθμιουργία ερωτθμάτων προσ τθ βάςθ για τθν επιςτροφι δεδομζνων ι τθν ειςαγωγι/ενθμζρωςθ των πινάκων τθσ βάςθσ. Για παράδειγμα θ μζκοδοσ retrieveAvailableEquipment κα εκτελεί ερώτθμα ςτθ βάςθ και κα επιςτρζφει μια λίςτα με τον εξοπλιςμό που ζχει καταχωρθκεί ςτθ βάςθ, ενώ θ μζκοδοσ storePerson κα ειςάγει ζνα νζο Person ςτθ βάςθ. Στον παρακάτω πίνακα φαίνονται οι ςχζςεισ (ςυςχζτιςθσ, κλθρονομικότθτασ, ςυναρμολόγθςθσ και ςφνκεςθσ) που εντοπίςτθκαν μεταξφ των κλάςεων μαηί με τθν απαιτοφμενθ αιτιολόγθςθ.

Κλάση Α Κλάση Β Είδος

Σχέσης

Αιτιολόγηση

Computer |

Monitor| Printer

Equipment Γελίθεπζε Πξόθεηηαη γηα κία ζρέζε ‘γελίθεπζεο’ πνπ

ρξεζηκνπνηείηαη γηα λα δειώζεη ηελ θιεξνλνκηθόηεηα

ησλ θιάζεσλ Computer, Monitor, Printer από ηελ θιάζε

Equipment. Η Equipment νξίδεη όια ηα θνηλά

ραξαθηεξηζηηθά ηνπο ηα νπνία θιεξνλνκνύληαη ζε θάζε

κηα από ηηο άιιεο θιάζεηο.

Person Equipment Απιή

ζύλδεζε

Πξόθεηηαη γηα κία ζρέζε ‘απιήο ζύλδεζεο’ κεηαμύ ησλ 2

θιάζεσλ, ιόγσ ηεο «αλάγθεο γλώζεο» πνπ ζέινπκε λα

δηαηεξεζεί από ηελ πιεπξά ηνπ πξνζσπηθνύ πξνο ηνλ

εμνπιηζκό πνπ ρξεώλεηαη.

Η πνιιαπιόηεηα κεηαμύ ηνπο είλαη 1:Ν επεηδή έλα άηνκν

κπνξεί λα έρεη ρξεσκέλα πεξηζζόηεξα από έλα θνκκάηηα

εμνπιηζκνύ (π.ρ. έλαλ ππνινγηζηή θαη δύν νζόλεο).

ManageEquipmen

tGUI

Equipment Σπλαξκνι

όγεζε

Πξόθεηηαη γηα κία ζρέζε ‘Όινπ-Μέξνπο’ ‘κε-ηζρπξήο’

ζύλδεζεο κεηαμύ ησλ 2 θιάζεσλ. Η θιάζε Α

αληηπξνζσπεύεη ην Όιν ελώ ε θιάζε Β ηα κέξε πνπ

ζπλαξκνινγνύλ ην Όιν, δειαδή ηνλ εμνπιηζκό. Οη 2

θιάζεηο έρνπλ αλεμάξηεην ρξόλν δσήο, αιιά ε θιάζε Α

δε κπνξεί λα ιεηηνπξγήζεη ρσξίο ηελ θιάζε Β.

Η πνιιαπιόηεηα κεηαμύ ηνπο είλαη 1:Ν, επεηδή έλα

αληηθείκελν GUI κπνξεί λα δηαρεηξίδεηαη πεξηζζόηεξα

από έλα αληηθείκελα εμνπιηζκνύ.

ManagePersonsG

UI

Person Σπλαξκνι

όγεζε

Πξόθεηηαη γηα κία ζρέζε ‘Όινπ-Μέξνπο’ ‘κε-ηζρπξήο’

ζύλδεζεο κεηαμύ ησλ 2 θιάζεσλ. Η θιάζε Α

αληηπξνζσπεύεη ην Όιν ελώ ε θιάζε Β ηα κέξε πνπ

ζπλαξκνινγνύλ ην Όιν, δειαδή ην πξνζσπηθό. Οη 2

Page 4: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 4

Κλάση Α Κλάση Β Είδος

Σχέσης

Αιτιολόγηση

θιάζεηο έρνπλ αλεμάξηεην ρξόλν δσήο, αιιά ε θιάζε Α

δε κπνξεί λα ιεηηνπξγήζεη ρσξίο ηελ θιάζε Β.

Η πνιιαπιόηεηα κεηαμύ ηνπο είλαη 1:Ν, επεηδή έλα

αληηθείκελν GUI κπνξεί λα δηαρεηξίδεηαη πεξηζζόηεξα

από έλα αληηθείκελα πξνζσπηθνύ.

AssignmentsGUI Equipment |

Person

Σπλαξκνι

όγεζε

Πξόθεηηαη γηα δύν ζρέζεηο ‘Όινπ-Μέξνπο’ ‘κε-ηζρπξήο’

ζύλδεζεο κεηαμύ ησλ θιάζεσλ. Η θιάζε Α

αληηπξνζσπεύεη ην Όιν ελώ νη θιάζεηο Β ηα κέξε πνπ

ζπλαξκνινγνύλ ην Όιν, δειαδή ην πξνζσπηθό θαη ηνλ

εμνπιηζκό. Οη 2 θιάζεηο έρνπλ αλεμάξηεην ρξόλν δσήο,

αιιά ε θιάζε Α δε κπνξεί λα ιεηηνπξγήζεη ρσξίο ηηο

θιάζεηο Β. Οπζηαζηηθά ην ελ ιόγσ GUI ρξεηάδεηαη θαη ηηο

δύν θιάζεηο Equipment θαη Person γηα λα κπνξέζεη λα

θάλεη ηηο ρξεώζεηο εμνπιηζκνύ ζε πξνζσπηθό θαη ηηο

απαηηνύκελεο απνδεζκεύζεηο.

Οη πνιιαπιόηεηεο κεηαμύ ηνπο είλαη 1:Ν, επεηδή έλα

αληηθείκελν GUI κπνξεί λα δηαρεηξίδεηαη πεξηζζόηεξα

από έλα αληηθείκελα πξνζσπηθνύ θαη εμνπιηζκνύ

αληίζηνηρα.

MainGUI ManagePersons

GUI |

ManageEquipm

entGUI |

AssignmentsGU

I

Σύλζεζε Εδώ ππάξρεη κία ζρέζε ‘Όινπ-Μέξνπο’, «ηζρπξήο

ζύλδεζεο» κεηαμύ ησλ θιάζεσλ.

Η θιάζε Α αληηπξνζσπεύεη ην Όιν ελώ νη θιάζεηο Β, ηα

κέξε πνπ αλήθνπλ ζην Όιν, δει. ηα ππνκελνύ πνπ

ππάξρνπλ θαη ελεξγνπνηνύληαη κόλν κέζσ ηνπ βαζηθνύ

κελνύ γηα ηε δηαρείξηζε πξνζσπηθνύ θαη εμνπιηζκνύ θαη

ηελ ρξέσζε/απνδέζκεπζε εμνπιηζκνύ.

Τα αληηθείκελα ησλ 2 θιάζεσλ δεκηνπξγνύληαη καδί θαη

επνκέλσο έρνπλ κία εμάξηεζε δσήο.

Οη πνιιαπιόηεηεο κεηαμύ ηνπο είλαη 1:1, επεηδή έλα

αληηθείκελν GUI κπνξεί λα δηαρεηξίδεηαη από έλα GUI

πξνζσπηθνύ, εμνπιηζκνύ θαη ρξεώζεσλ θαη αληίζηνηρα.

MainGUI DBManager Απιή

ζύλδεζε

Πξόθεηηαη γηα κία ζρέζε ‘απιήο ζύλδεζεο’ κεηαμύ ησλ 2

θιάζεσλ, ιόγσ ηεο «αλάγθεο γλώζεο» πνπ ζέινπκε λα

δηαηεξεζεί από ηελ πιεπξά ηνπ GUI πξνο ηελ θιάζε

δηεπαθήο κε ηε βάζε δεδνκέλσλ. Οπζηαζηηθά ε MainGUI

πνπ κπνξεί λα ζεσξεζεί θαη σο ην θεληξηθό ζεκείν

ειέγρνπ ηεο εθαξκνγήο, «θξαηάεη» ηε ζύλδεζε κε ηε

βάζε θαη όηαλ ρξεηάδεηαη ηελ παξέρεη ζηα άιια GUI γηα

λα εθηειέζνπλ δνζνιεςίεο κε ηε βάζε.

Η πνιιαπιόηεηα κεηαμύ ηνπο είλαη 1:1 επεηδή έλα GUI

επηθνηλσλεί κε κηα δηεπαθή DBManager.

Page 5: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 5

Άςκηςη 2 – Δημιουργία Βάςησ Δεδομζνων (10 μονάδεσ) Ερώτημα Α – Δημιουργία Βάςησ Δεδομζνων ςυςτήματοσ (10 μονάδεσ) Με βάςθ τθν υπόκεςθ ότι το μοναδικό είδοσ εξοπλιςμοφ που διαχειρίηεται το ςφςτθμα είναι οι υπολογιςτζσ, να δθμιουργιςετε μια βάςθ δεδομζνων που να περιζχει πίνακεσ οι οποίοι να αναπαριςτοφν το προςωπικό και τουσ υπολογιςτζσ. Ζνασ υπολογιςτισ μπορεί να είναι χρεωμζνοσ ςε ζνα ι κανζνα άτομο. Στθν πρώτθ περίπτωςθ δε μπορεί να χρεωκεί ςε άλλο άτομο παρά μόνο αν αποδεςμευτεί από τθν υπάρχουςα χρζωςθ, ενώ ςτθ δεφτερθ περίπτωςθ είναι διακζςιμοσ για χρζωςθ. Τουσ πίνακεσ τθσ βάςθσ δεδομζνων να τουσ καταςκευάςετε με τθ βοικεια του Netbeans ςτο ΣΔΒΔ Derby που διατίκεται με το Netbeans. Ειςάγετε ςτθ Βάςθ Δεδομζνων και ςτον πίνακα των υπολογιςτών 5 τουλάχιςτον εγγραφζσ χρθςιμοποιώντασ τα κατάλλθλα ερωτιματα SQL.

Απάντηςη Για τθ δθμιουργία μιασ βάςθσ δεδομζνων χρθςιμοποιώντασ το ΣΔΒΔ Derby που διατίκεται με το Netbeans κα πρζπει να γίνει από το μενοφ θ επιλογι “Tools Java DB Database Create Database” και ςτθ ςυνζχεια κα πρζπει να ακολουκθκοφν τα βιματα που αναφζρονται ςτον δικτυακό τόπο http://www.netbeans.org/kb/docs/ide/java-db.html. Επιςθμαίνεται ότι για να “ανοίξει” μια ζτοιμθ βάςθ δεδομζνων κα πρζπει να δοκεί θ πλιρθσ διαδρομι. Σφμφωνα με τθν εκφώνθςθ τθσ άςκθςθσ κα πρζπει να καταςκευαςτοφν δφο (2) πίνακεσ, οι οποίοι να αναπαριςτοφν τουσ υπολογιςτζσ (πίνακασ COMPUTER) και το προςωπικό (πίνακασ PERSON). Επειδι θ εκφώνθςθ αναφζρει ότι κεωροφμε ςαν μοναδικό είδοσ εξοπλιςμοφ τουσ υπολογιςτζσ, κα μποροφςαν να αναφερκοφν δφο επιλογζσ υλοποίθςθσ. Είτε δθμιουργία του πίνακα COMPUTER ςτον οποίο όμωσ κα ςυμπεριλαμβάνονται τα επιπλζον πεδία που αναφζρονται ςτον εξοπλιςμό, είτε δθμιουργία επιπλζον πίνακα EQUIPMENT και ςφνδεςι του με foreign key με τον πίνακα COMPUTER. Το δεφτερο κα ιταν καλι επιλογι αν τελικά αναπαριςτοφςαμε όλα τα είδθ εξοπλιςμοφ (οκόνεσ, εκτυπωτζσ). Εφόςον όμωσ ζχουμε μόνο υπολογιςτζσ κα επιλεχκεί θ πρώτθ λφςθ. Για τθν αναπαράςταςθ τθσ χρζωςθσ υπολογιςτι ςε προςωπικό ζχει δθμιουργθκεί ζνα επιπρόςκετο πεδίο PERS_ID ςτον πίνακα COMPUTER που είναι το id (foreign key) του Person ςτο οποίο είναι χρεωμζνοσ ζνασ υπολογιςτισ. Αν το πεδίο αυτό δεν ζχει τιμι ςθμαίνει ότι ο υπολογιςτισ δεν είναι χρεωμζνοσ. Η δθμιουργία αυτών των πινάκων και των πεδίων που περιλαμβάνουν δεν παρουςιάηει ιδιαίτερθ δυςκολία, αν ακολουκθκοφν τα βιματα που προςδιορίηονται ςτον προαναφερόμενο δικτυακό τόπο και δοκεί προςοχι ςτον τφπο των πεδίων και ςτο μζγεκόσ τουσ. Ζνα ςθμείο που απαιτεί μεγαλφτερθ προςοχι είναι θ δθμιουργία των ξζνων κλειδιών (foreign keys) που χρθςιμοποιοφνται για τθ ςυςχζτιςθ των πινάκων. Αναφορικά με το κζμα αυτό υπάρχει ζνα πολφ καλό και κατανοθτό παράδειγμα ςτον δικτυακό τόπο: http://sageniuz.blogspot.com/2007/11/foreign-keys-in-derby-with-netbeans-6.html. Ραρακάτω φαίνονται τα SQL ερωτιματα που χρθςιμοποιοφνται για τθ δθμιουργία των πινάκων (κα μποροφςε να γίνει και με γραφικό τρόπο όπωσ ςτον παραπάνω δικτυακό τόπο).

Page 6: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 6

Δημιουργία Πινάκων CREATE TABLE PERSON ( PERS_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), NAME VARCHAR(50) NOT NULL, ADDRESS VARCHAR(50), MAIL VARCHAR(30), UNIQUE (PERS_ID)); CREATE TABLE COMPUTER ( COMP_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), PERS_ID INTEGER, LABEL VARCHAR(20) NOT NULL, SN VARCHAR(50) NOT NULL, MODEL VARCHAR(20), CPU VARCHAR(10), RAM VARCHAR(10), COMP_TYPE SMALLINT NOT NULL, DISK VARCHAR(30), UNIQUE (COMP_ID), FOREIGN KEY (PERS_ID) REFERENCES PERSON(PERS_ID));

Μετά τθν ολοκλιρωςθ τθσ δθμιουργίασ τθσ βάςθσ δεδομζνων κα πρζπει να ζχετε το ςχιμα που φαίνεται ςτο αριςτερό μζροσ τθσ πιο κάτω εικόνασ. Στο δεξί μζροσ τθσ εικόνασ φαίνονται οι εντολζσ που χρθςιμοποιικθκαν για τθ δθμιουργία τθσ βάςθσ δεδομζνων.

Ραρακάτω φαίνονται τα SQL ερωτιματα που χρθςιμοποιοφνται για τθν ειςαγωγι ςτθ Βάςθ Δεδομζνων και ςτον πίνακα των υπολογιςτών 5 εγγραφών.

Ειςαγωγή Δεδομζνων Computer INSERT INTO APP.COMPUTER (LABEL, SN, MODEL, CPU, RAM, COMP_TYPE, DISK) VALUES ('LAP_01', '23AS543W21', 'HP 2331', '3,2 GHz', '4 GB', 1, '500 GB'); INSERT INTO APP.COMPUTER (LABEL, SN, MODEL, CPU, RAM, COMP_TYPE, DISK) VALUES ('PC_01', 'AA3235334345421', 'TURBO-X GAMERS', '2,6 GHz', '3 GB', 0, '250 GB'); INSERT INTO APP.COMPUTER (LABEL, SN, MODEL, CPU, RAM, COMP_TYPE, DISK) VALUES ('PC_02', '22RTYWEC33W51', 'ALTEC-PC', '3,5 GHz', '1,5 GB', 0, '150 GB'); INSERT INTO APP.COMPUTER (LABEL, SN, MODEL, CPU, RAM, COMP_TYPE, DISK) VALUES ('LAP_02', '66FDFW345GFD3', 'ACER 112', '4 GHz', '4 GB', 1, '250 GB');

Page 7: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 7

INSERT INTO APP.COMPUTER (LABEL, SN, MODEL, CPU, RAM, COMP_TYPE, DISK) VALUES ('LAP_03', 'GBF67U65HBT45', 'TOSHIBA SATELLITE 2', '4,2 GHz', '5 GB', 1, '800 GB');

Στθν παρακάτω εικόνα φαίνονται οι εντολζσ που χρθςιμοποιικθκαν για τθ δθμιουργία τθσ βάςθσ δεδομζνων ςτο περιβάλλον του Netbeans.

Στθν παρακάτω εικόνα φαίνεται ότι πράγματι ο πίνακασ COMPUTER ζχει γεμίςει με τα δεδομζνα που ειςιχκθςαν προθγουμζνωσ.

Page 8: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 8

Άςκηςη 3 – Αλληλεπίδραςη με τη Βάςη Δεδομζνων (20 μονάδεσ) Ερώτημα Α – Υλοποίηςη κλάςησ DBManager (20 μονάδεσ) Με γνώμονα το ςχιμα τθσ Βάςθσ Δεδομζνων που δθμιουργιςατε ςτθν άςκθςθ 1, να υλοποιιςετε τθν κλάςθ DBManager, θ οποία κα αναλαμβάνει τθν επικοινωνία με τθ βάςθ δεδομζνων που μόλισ δθμιουργιςατε. Εμπλουτίςτε τθν κλάςθ DBManager με μεκόδουσ: Α) για τθν αποκικευςθ, Β) για τθν ανάκτθςθ αντικειμζνων των κλάςεων εξοπλιςμοφ και προςωπικοφ.

Απάντηςη Η κλάςθ DBManager χρθςιμοποιείται για τθν επικοινωνία με τθ βάςθ δεδομζνων που καταςκευάςτθκε ςτθν άςκθςθ 2. Ο καταςκευαςτισ τθσ κλάςθσ αυτισ αναλαμβάνει να υλοποιιςει τθ ςφνδεςθ με τθ βάςθ δεδομζνων και τθ δθμιουργία των ερωτθμάτων που κα χρθςιμοποιθκοφν ςτθ ςυνζχεια για τθν επικοινωνία με τθ βάςθ. Εναλλακτικά, αντί για τθ δθμιουργία προετοιμαςμζνων ερωτθμάτων (prepared statement), είναι δυνατι θ δθμιουργία του κειμζνου των ερωτθμάτων μζςα ςτισ κατάλλθλεσ μεκόδουσ, κάκε φορά που είναι επικυμθτι θ επικοινωνία με τθ βάςθ δεδομζνων. Στο εςωτερικό τθσ κλάςθσ DBManager υπάρχει μια κατάλλθλθ μζκοδοσ για κάκε τφπο αντικειμζνου που είναι επικυμθτό να αποκθκευτεί, να ενθμερωκεί ι να ανακτθκεί από τθ βάςθ δεδομζνων (για παράδειγμα, για τθν αποκικευςθ προςωπικοφ υπάρχει θ μζκοδοσ storePerson, για τθν ανάκτθςθ των μθ-χρεωμζνων υπολογιςτών θ μζκοδοσ retrieveAvailableComputers κτλ.). Ριο αναλυτικά:

θ μζκοδοσ storePerson παίρνει ωσ παράμετρο ζνα αντικείμενο Person, ενθμερώνει το αντίςτοιχο προετοιμαςμζνο ερώτθμα και ςτθ ςυνζχεια το εκτελεί.

Η μζκοδοσ assignComputerToPerson(Computer computer, Person p) παίρνει ςαν παράμετρο ζνα αντικείμενο Computer και ζνα Person ενθμερώνει το αντίςτοιχο προετοιμαςμζνο ερώτθμα και ςτθ ςυνζχεια το εκτελεί χρεώνοντασ ζτςι τον υπολογιςτι ςτο άτομο.

Η μζκοδοσ releaseComputerFromPerson(Computer computer) παίρνει ςαν παράμετρο ζνα αντικείμενο Computer ενθμερώνει το αντίςτοιχο προετοιμαςμζνο ερώτθμα και ςτθ ςυνζχεια το εκτελεί αποδεςμεφοντασ ζτςι τον υπολογιςτι από οποιοδιποτε άτομο ιταν χρεωμζνοσ.

Η μζκοδοσ retrieveAvailableComputers() εκτελεί το προετοιμαςμζνο ερώτθμα για τθν ανάκτθςθ όλων των υπολογιςτών με PERS_ID = NULL και επιςτρζφει μια ArrayList με τα αντικείμενα Computer που είναι διακζςιμα.

Η μζκοδοσ retrieveAssignedComputers(Person selectedPerson) παίρνει ςαν παράμετρο ζνα αντικείμενο Person, ενθμερώνει το αντίςτοιχο προετοιμαςμζνο ερώτθμα και ςτθ ςυνζχεια το εκτελεί για να πάρει όλουσ τουσ υπολογιςτζσ που είναι χρεωμζνοι ςτο selectedPerson. Τζλοσ επιςτρζφει μια ArrayList με τα αντικείμενα Computer που είναι χρεωμζνα ςτο selectedPerson.

Η μζκοδοσ retrievePersons() εκτελεί το προετοιμαςμζνο ερώτθμα για τθν ανάκτθςθ όλου του προςωπικοφ και επιςτρζφει μια ArrayList με τα αντικείμενα Person που είναι καταχωρθμζνα ςτθ βάςθ.

Η μζκοδοσ int storePerson(Person pers) ενθμερώνει το αντίςτοιχο προετοιμαςμζνο ερώτθμα με τα ςτοιχεία του νζου ατόμου προσ καταχώρθςθ, το εκτελεί αποκθκεφοντασ το νζο άτομο ςτθ βάςθ και επιςτρζφει το id τθσ εγγραφισ που δθμιουργικθκε. Το id αυτό χρειάηεται για να ενθμερωκεί κατάλλθλα το αντίςτοιχο GUI (listModel).

Page 9: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 9

Τζλοσ οι μζκοδοι updatePerson(Person pers) και removePerson(Person pers) παίρνουν ςαν παράμετρο ζνα αντικείμενο Person, και θ μεν πρώτθ ενθμερώνει τθν αντίςτοιχθ εγγραφι ςτον πίνακα, θ δεφτερθ διαγράφει το άτομο pers από τθ βάςθ.

Ο κώδικασ Java που χρθςιμοποιείται για τθν υλοποίθςθ τθσ κλάςθσ DBManager είναι ο ακόλουκοσ:

package repomanagement.controller; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; import java.util.ArrayList; import repomanagement.entities.*; /** * * @author Nicolas Drosos * Κλάςθ DBManager για τθν επικοινωνία με τθ βάςθ δεδομζνων */ public class DBManager { private String database = "repositoryDB"; private String user = "app"; private String password = "app"; private String driver = "org.apache.derby.jdbc.ClientDriver"; //private String connString = "jdbc:derby:"; private String connString = "jdbc:derby://localhost:1527/"; private Connection dBconnection; private Statement statement; // Ερωτιματα διαχείριςθσ προςωπικοφ (ειςαγωγι, ενθμζρωςθ, ανάκτθςθ, αφαίρεςθ) private PreparedStatement insertPerson; private PreparedStatement updatePerson; private PreparedStatement selectPersons; private PreparedStatement removePerson; // Ερωτιματα χρζωςθσ ξεχρζωςθσ υπολογιςτι ςε/από προςωπικό private PreparedStatement selectAssignedComputers; private PreparedStatement selectAvailableComputers; private PreparedStatement assignComputerToPerson; private PreparedStatement releaseComputerFromPerson; private PreparedStatement releaseComputerFromDeletedPerson; /** * Δθμιουργόσ τθσ DBManager. Αρχικοποιεί τθν επικοινωνία με τθ βάςθ δεδομζνων και * προετοιμάηει τα απαιτοφμενα ερωτιματα. */ public DBManager(){ try { // Φόρτωςθ τθσ κλάςθσ του οδθγοφ τθσ βάςθσ δεδομζνων Class.forName(driver); // Σφνδεςθ με τθ βάςθ δεδομζνων dBconnection = DriverManager.getConnection(connString + database, user, password); statement = dBconnection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); // Επιλογι όλου του προςωπικοφ από τθ βάςθ selectPersons = dBconnection.prepareStatement("SELECT * FROM APP.PERSON"); // Ενθμζρωςθ ςτοιχείων προςωπικοφ updatePerson = dBconnection.prepareStatement("UPDATE APP.PERSON SET NAME=?, ADDRESS=?, MAIL=? WHERE PERS_ID=?"); // Διαγραφι προςωπικοφ removePerson = dBconnection.prepareStatement("DELETE FROM APP.PERSON WHERE PERS_ID=?");

Page 10: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 10

// Επιλογι υπολογιςτών που ζχουν χρεωκεί ςε ςυγκεκριμζνο άτομο selectAssignedComputers = dBconnection.prepareStatement("SELECT * FROM APP.COMPUTER WHERE PERS_ID=?"); // Επιλογι διακζςιμων υπολογιςτών selectAvailableComputers = dBconnection.prepareStatement("SELECT * FROM APP.COMPUTER WHERE PERS_ID IS NULL"); // Χρζωςθ υπολογιςτι ςε ςυγκεκριμζνο άτομο assignComputerToPerson = dBconnection.prepareStatement("UPDATE APP.COMPUTER SET PERS_ID=? WHERE COMP_ID=?"); // Ξεχρζωςθ υπολογιςτι από άτομο releaseComputerFromPerson = dBconnection.prepareStatement("UPDATE APP.COMPUTER SET PERS_ID=NULL WHERE COMP_ID=?"); // Ξεχρζωςθ υπολογιςτι από διεγραμμζνο προςωπικό releaseComputerFromDeletedPerson = dBconnection.prepareStatement("UPDATE APP.COMPUTER SET PERS_ID=NULL WHERE PERS_ID=?"); } catch (Exception exc) { System.out.println(exc); } } /** * Χρεώνει τον υπολογιςτι c ςτο άτομο p. * @param computer Το αντικείμενο υπολογιςτι που κα ανατεκεί * @param p Το άτομο ςτο οποίο κα γίνει θ χρζωςθ */ public void assignComputerToPerson(Computer computer, Person p){ try { assignComputerToPerson.setInt(1, p.getPersId()); assignComputerToPerson.setInt(2, computer.getCompId()); assignComputerToPerson.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); } } /** * Ξεχρζωςθ του υπολογιςτι computer από τθν τρζχουςα χρζωςι του. * @param computer Ο υπολογιςτισ που κα ξεχρεωκεί */ public void releaseComputerFromPerson(Computer computer){ try { releaseComputerFromPerson.setInt(1, computer.getCompId()); releaseComputerFromPerson.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); } } /** * Ανάκτθςθ των διακζςιμων υπολογιςτών, δθλαδι αυτών που δεν ζχουν ακόμα χρεωκεί * @return Επιςτρζφει μια λίςτα με τουσ διακζςιμουσ υπολογιςτζσ */ public ArrayList retrieveAvailableComputers(){ try { ResultSet rs = selectAvailableComputers.executeQuery(); ArrayList<Computer> availableComputers = new ArrayList<Computer>(); while (rs.next()){ Computer c = new Computer(); c.setCompId(rs.getInt("COMP_ID")); c.setLabel(rs.getString("LABEL")); c.setSn(rs.getString("SN")); c.setModel(rs.getString("MODEL"));

Page 11: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 11

c.setCpu(rs.getString("CPU")); c.setRam(rs.getString("RAM")); c.setDisk(rs.getString("DISK")); c.setType(rs.getInt("COMP_TYPE")); availableComputers.add(c); } return availableComputers; } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); return null; } } /** * Ανάκτθςθ των χρεωμζνων υπολογιςτών για ζνα ςυγκεκριμζνο άτομο * @param selectedPerson Το άτομο του οποίου κζλουμε να λάβουμε τισ χρεώςεισ * @return Λίςτα με τουσ υπολογιςτζσ που είναι χρεωμζνοι ςτο άτομο selectedPerson */ public ArrayList retrieveAssignedComputers(Person selectedPerson){ try { if (selectedPerson == null) return null; selectAssignedComputers.setInt(1, selectedPerson.getPersId()); ResultSet rs = selectAssignedComputers.executeQuery(); ArrayList<Computer> assignedComputers = new ArrayList<Computer>(); while (rs.next()){ Computer c = new Computer(); c.setCompId(rs.getInt("COMP_ID")); c.setLabel(rs.getString("LABEL")); c.setSn(rs.getString("SN")); c.setModel(rs.getString("MODEL")); c.setCpu(rs.getString("CPU")); c.setRam(rs.getString("RAM")); c.setDisk(rs.getString("DISK")); c.setType(rs.getInt("COMP_TYPE")); assignedComputers.add(c); } return assignedComputers; } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); return null; } } /** * Ανάκτθςθ όλου του προςωπικοφ * @return Λίςτα με αντικείμενα Person */ public ArrayList retrievePersons(){ try { ResultSet rs = selectPersons.executeQuery(); ArrayList<Person> availablePersons = new ArrayList<Person>(); while (rs.next()){ Person p = new Person(); p.setPersId(rs.getInt("PERS_ID")); p.setName(rs.getString("NAME")); p.setAddress(rs.getString("ADDRESS")); p.setMail(rs.getString("MAIL")); availablePersons.add(p); } return availablePersons; } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);

Page 12: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 12

return null; } } /** * Αποκικευςθ ςτθ βάςθ ενόσ ατόμου * @param pers Το άτομο που κα αποκθκευτεί * @return Το ID του ατόμου που καταχωρικθκε ι -1 αν θ καταχώρθςθ δεν πραγματοποιικθκε */ public int storePerson(Person pers){ try { int[] autoCol=new int[1]; autoCol[0]=1; insertPerson = dBconnection.prepareStatement("INSERT INTO APP.PERSON (NAME, ADDRESS, MAIL) VALUES (?, ?, ?)", autoCol); insertPerson.setString(1, pers.getName()); insertPerson.setString(2, pers.getAddress()); insertPerson.setString(3, pers.getMail()); insertPerson.executeUpdate(); ResultSet rs = insertPerson.getGeneratedKeys(); if (rs != null) { rs.next(); int storedID = rs.getInt(1); return storedID; } return -1; } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); return -1; } } /** * Ενθμζρωςθ των ςτοιχείων ενόσ ατόμου * @param pers Το αντικείμενο που περιζχει τα νζα ςτοιχεία του ατόμου, το οποίο κα ενθμερώςει * τθν αντίςτοιχθ εγγραφι ςτθ βάςθ με το ίδιο ID. */ public void updatePerson(Person pers){ try { updatePerson.setString(1, pers.getName()); updatePerson.setString(2, pers.getAddress()); updatePerson.setString(3, pers.getMail()); updatePerson.setInt(4, pers.getPersId()); updatePerson.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); } } /** * Διαγραφι προςωπικοφ από τθ βάςθ * @param pers Το άτομο που κα διαγραφεί */ public void removePerson(Person pers){ try { releaseComputerFromDeletedPerson.setInt(1, pers.getPersId()); removePerson.setInt(1, pers.getPersId()); releaseComputerFromDeletedPerson.executeUpdate(); removePerson.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); } } }

Page 13: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 13

Άςκηςη 4 – Δημιουργία γραφικοφ ενδιάμεςου χρήςτη (50 μονάδεσ) Ερώτημα Α – Δημιουργία αρχικήσ φόρμασ (10 μονάδεσ) Για τθν αλλθλεπίδραςθ του υπευκφνου αποκικθσ με το ςφςτθμα, να δθμιουργιςετε γραφικό ενδιάμεςο χριςτθ (GUI) που να περιλαμβάνει τζςςερισ φόρμεσ. Η αρχικι φόρμα κα παρουςιάηει ςτον χριςτθ επιλογζσ για: Α) ειςαγωγι/μεταβολι ςτοιχείων προςωπικοφ, Β) χρζωςθ/αποδζςμευςθ υπολογιςτι, και Γ) ζξοδο από τθν εφαρμογι.

Απάντηςη Για τθ δθμιουργία τθσ εφαρμογισ επιλζχκθκε θ δυνατότθτα του Netbeans για τθ δθμιουργία desktop applications (βλζπε παρακάτω οκόνθ).

Ακολουκώντασ τα βιματα του wizard το Netbeans δθμιουργεί αυτόματα τθν πρώτθ κλάςθ τθσ εφαρμογισ, μια κενι οκόνθ ςτθν οποία είναι εφικτι θ τοποκζτθςθ swing components χρθςιμοποιώντασ τθν παλζτα που βρίςκεται δεξιά ςτο περιβάλλον του Netbeans. Για τθν υλοποίθςθ τθσ φόρμασ που απεικονίηεται ςτθν εκφώνθςθ προςτίκεται αρχικά το αντικείμενο jLabel1 τφπου JLabel για τθ δθμιουργία τθσ επικεφαλίδασ «Σφςτθμα Διαχείριςθσ Αποκικθσ» ενώ χρθςιμοποιώντασ τον πίνακα ελζγχου ιδιοτιτων των components

Page 14: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 14

(κάτω δεξιά ςτο περιβάλλον του Netbeans) είναι εφικτόσ ο προςδιοριςμόσ τθσ γραμματοςειράσ, του χρώματοσ και άλλων ιδιοτιτων για το jLabel1. Με παρόμοιο τρόπο μποροφν να προςτεκοφν τρία αντικείμενα JButton που το κακζνα αναλαμβάνει να ανοίξει μία από τισ υπόλοιπεσ δφο φόρμεσ (Ειςαγωγι/Τροποποίθςθ Ρροςωπικοφ και Χρζωςθ/Αποδζςμευςθ Εξοπλιςμοφ) με εξαίρεςθ το τελευταίο (Ζξοδοσ) που κλείνει τθν εφαρμογι. Με κάκε κουμπί ςυςχετίηουμε ζνα παρακολουκθτι που παρακολουκεί το γεγονόσ ActionEvent και δθμιουργεί ζνα αντικείμενο τθσ αντίςτοιχθσ φόρμασ και το εμφανίηει. Για το κουμπί Ειςαγωγι/Τροποποίθςθ Ρροςωπικοφ ζχουμε τον παρακάτω κώδικα:

jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } });

Ππου θ μζκοδοσ jButton1ActionPerformed δίνεται παρακάτω:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // Δθμιουργία και εμφάνιςθ τθσ φόρμασ ειςαγωγισ προςωπικοφ InsertPersonDialog pD = new InsertPersonDialog(this.getFrame(), true, dbM); pD.setVisible(true); }

Ζτςι για τθ φόρμα ειςαγωγισ/τροποποίθςθσ προςωπικοφ θ αντίςτοιχθ μζκοδοσ που κα κλθκεί από τον παρακολουκθτι είναι θ jButton1ActionPerformed θ οποία με τθ ςειρά τθσ δθμιουργεί ζνα αντικείμενο InsertPersonDialog και το εμφανίηει. Η InsertPersonDialog παίρνει ςαν παράμετρο το frame που τθ δθμιουργεί, τθν τιμι true για να είναι το παράκυρο modal (δθλαδι όςο είναι ανοιχτό να μθ μπορεί ο χριςτθσ να αλλθλεπιδράςει με κάτι άλλο), και μια αναφορά ςτθν κλάςθ DBManager για να μπορεί να καλεί τισ αντίςτοιχεσ μεκόδουσ τθσ για τθν ειςαγωγι και τροποποίθςθ του προςωπικοφ. Η DBManager ζχει δθμιουργθκεί ςτον Constructor τθσ κλάςθσ RepoManagementView με τθν εντολι:

dbM = new DBManager(); Η DBManager δθμιουργείται μόνο μια φορά και δίνεται ωσ παράμετροσ ςε όποια άλλθ φόρμα τθ χρειάηεται (όπωσ π.χ. ςτθν InsertPersonDialog). Ραρόμοια για το κουμπί Ειςαγωγι/Τροποποίθςθ Ρροςωπικοφ ζχουμε τον παρακάτω κώδικα:

jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } });

Ππου θ μζκοδοσ jButton3ActionPerformed δίνεται παρακάτω:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { // Δθμιουργία και εμφάνιςθ τθσ φόρμασ χρζωςθσ/ξεχρζωςθσ AssignComputerToPersonDialog assignD = new AssignComputerToPersonDialog(this.getFrame(), true, dbM); assignD.setVisible(true); }

Ζτςι, για τθ φόρμα χρζωςθ/αποδζςμευςθ υπολογιςτι θ αντίςτοιχθ μζκοδοσ που κα κλθκεί από τον παρακολουκθτι είναι θ jButton3ActionPerformed θ οποία με τθ ςειρά τθσ δθμιουργεί ζνα αντικείμενο AssignComputerToPersonDialog και το εμφανίηει. Η AssignComputerToPersonDialog παίρνει ςαν παράμετρο το frame που τθ δθμιουργεί, τθν τιμι true για να είναι το παράκυρο modal (δθλαδι όςο είναι ανοιχτό να μθ

Page 15: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 15

μπορεί ο χριςτθσ να αλλθλεπιδράςει με κάτι άλλο), και μια αναφορά ςτθν κλάςθ DBManager για να μπορεί να καλεί τισ αντίςτοιχεσ μεκόδουσ τθσ για τθν ειςαγωγι και τροποποίθςθ του προςωπικοφ. Τζλοσ, για τθν ζξοδο από τθν εφαρμογι ζχουμε τον παρακάτω κώδικα:

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { // Ζξοδοσ από τθν εφαρμογι this.getFrame().dispose(); }

Ο πλιρθσ κώδικασ Java που χρθςιμοποιείται για τθν υλοποίθςθ τθσ φόρμασ δίνεται ςτο Netbeans project (κλάςη RepoManagementView).

Page 16: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 16

Ερώτημα Β – Δημιουργία φόρμασ ειςαγωγήσ προςωπικοφ (20 μονάδεσ) Η φόρμα για ειςαγωγι/μεταβολι ςτοιχείων προςωπικοφ κα παρουςιάηει ςε λίςτα το καταχωρθμζνο προςωπικό και κα δίνει τθ δυνατότθτα μζςω κατάλλθλων πεδίων για ειςαγωγι ενόσ νζου ατόμου, και επίςθσ για τροποποίθςθ ι διαγραφι ενόσ ιδθ καταχωρθμζνου. Θα πρζπει να οριςτοφν τουλάχιςτον 3 χαρακτθριςτικά για ζνα άτομο (π.χ. ονοματεπώνυμο, διεφκυνςθ κ.λπ.). Παρατήρηςη: Να γίνεται χειριςμόσ των ςφαλμάτων καταχώρθςθσ με χριςθ Exceptions.

Απάντηςη Για τθν υλοποίθςθ τθσ φόρμασ που απεικονίηεται ςτθν εκφώνθςθ προςτίκεται αρχικά ζνα αντικείμενο τφπου JLabel για τθ δθμιουργία τθσ επικεφαλίδασ «Ειςαγωγι/Μεταβολι Ρροςωπικοφ» ενώ χρθςιμοποιώντασ τον πίνακα ελζγχου ιδιοτιτων των components (κάτω δεξιά ςτο περιβάλλον του Netbeans) είναι εφικτόσ ο προςδιοριςμόσ τθσ γραμματοςειράσ, του χρώματοσ και άλλων ιδιοτιτων για το jLabel. Στθ ςυνζχεια προςτίκενται ζνα αντικείμενο JList που εμφανίηει το καταχωρθμζνο ςτθ βάςθ προςωπικό, τρία ηεφγθ JLabel και JTextField που αντιςτοιχοφν ςτα πεδία του Person που επιλζχκθκαν ότι προςδιορίηουν ζνα άτομο (κα μποροφςαν να ζχουν επιλεχκεί άλλα πεδία ι και περιςςότερα από 3) και τζλοσ τζςςερα JButtons για τθν ειςαγωγι ενόσ νζου ατόμου ςτθ βάςθ, τθν τροποποίθςθ και διαγραφι υπάρχοντοσ ατόμου, και επιςτροφι ςτο βαςικό μενοφ. Η επικυμθτι λειτουργικότθτα είναι θ εξισ: Για τθν ειςαγωγι ενόσ νζου ατόμου απλά ςυμπλθρώνονται τα αντίςτοιχα JTextFields και με το πάτθμα του κουμπιοφ «Ειςαγωγι» δθμιουργείται μια νζα εγγραφι ςτον πίνακα PERSON τθσ βάςθσ. Για τθν τροποποίθςθ υπάρχοντοσ ατόμου κα πρζπει να επιλεχκεί ζνα άτομο από τθ JList οπότε και κα εμφανιςτοφν τα υπάρχοντα ςτοιχεία του ςτα αντίςτοιχα JTextFields. Αλλάηοντασ τισ τιμζσ ςτα JTextFields και πατώντασ το κουμπί «Τροποποίθςθ» ενθμερώνεται θ αντίςτοιχθ εγγραφι του πίνακα PERSON ςτθν βάςθ με τα νζα ςτοιχεία. Τζλοσ για τθ διαγραφι κα πρζπει να επιλεχκεί ζνα άτομο από τθ JList οπότε και κα εμφανιςτοφν τα υπάρχοντα ςτοιχεία του ςτα αντίςτοιχα JTextFields και πατώντασ το κουμπί «Διαγραφι» διαγράφεται θ αντίςτοιχθ εγγραφι του πίνακα PERSON ςτθν βάςθ. Για να μποροφμε να μεταβάλουμε απευκείασ τα ςτοιχεία του προςωπικοφ που είναι καταχωρθμζνα ςτθ βάςθ είναι απαραίτθτο να καταςκευαςτεί ζνα νζο μοντζλο δεδομζνων πάνω ςτθ λογικι Model-View-Controller που ακολουκεί και το JList το οποίο να πραγματοποιεί τισ μεταβολζσ ςτο GUI απευκείασ ςτθ δομι που αποκθκεφονται τα άτομα προςωπικοφ. Αυτό πραγματοποιείται με τθ δθμιουργία εςωτερικισ κλάςθσ μζςα ςτθν κλάςθ τθσ φόρμασ (PersonListModel). Ο κώδικασ τθσ εςωτερικισ κλάςθσ φαίνεται παρακάτω:

Page 17: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 17

class PersonListModel extends javax.swing.AbstractListModel { ArrayList<Person> persons = dbM.retrievePersons(); public int getSize() { return persons.size(); } public Object getElementAt(int i) { return persons.get(i); } public void addPerson(Person x) { persons.add(x); fireContentsChanged(this, persons.size() - 1, persons.size() - 1); } public void removePerson(Person x){ persons.remove(x); fireContentsChanged(this, persons.size() - 1, persons.size() - 1); } public void updateModel() { fireContentsChanged(this, persons.size() - 1, persons.size() - 1); } }

Στθν κλάςθ αυτι ορίηουμε αρχικά μια ArrayList που γεμίηει με τα δεδομζνα τθσ βάςθσ μζςω τθσ μεκόδου retrievePersons τθσ DBManager. Οι υπόλοιπεσ μζκοδοι διαχειρίηονται τθν προςκικθ, διαγραφι και ενθμζρωςθ του μοντζλου τθσ λίςτασ εκτελώντασ ςε κάκε μεταβολι τθ μζκοδο fireContentsChanged που διαδίδει κατάλλθλο Event για να ειδοποιείται θ λίςτα και να προβάλει ςτο γραφικό περιβάλλον το ανανεωμζνο μοντζλο. Ζχοντασ δθμιουργιςει το νζο μοντζλο το κζτουμε ςτθ λίςτα jList1 ςτον Constructor τθσ φόρμασ και προςκζτουμε ζναν παρακολουκθτι ListSelectionListener ο οποίοσ καλείται κάκε φορά που ο χριςτθσ επιλζγει μία από τισ επιλογζσ τθσ λίςτασ. Στθν περίπτωςθ που ςυμβεί κάτι τζτοιο καλείται θ μζκοδοσ jList1ValueChanged θ οποία λαμβάνει από το μοντζλο τθσ λίςτασ το επιλεγμζνο αντικείμενο Person και κζτει τισ τιμζσ του ςτα τρία JTextfields, όπωσ φαίνεται ςτο παρακάτω τμιμα κώδικα.

// Θζτει ωσ μοντζλο τθσ λίςτασ jList1 που εμφανίηει το προςωπικό, το PersonListModel // που ορίηεται ωσ inner κλάςθ jList1.setModel(new PersonListModel()); jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { jList1ValueChanged(evt); } }); } /** * Θζτει ςτα πεδία κειμζνου τισ τιμζσ του επιλεγμζνου προςωπου * @param evt */ private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {

Page 18: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 18

Person p1 = (Person) jList1.getSelectedValue(); if (p1 != null){ jTextField1.setText(p1.getName()); jTextField2.setText(p1.getAddress()); jTextField3.setText(p1.getMail()); } }

Στθ ςυνζχεια με κάκε JButton ςυςχετίηεται ζνασ παρακολουκθτισ για το γεγονόσ ActionEvent και υλοποιείται αντίςτοιχθ μζκοδοσ. Ζτςι για το πλικτρο ειςαγωγισ προςωπικοφ καλείται θ μζκοδοσ jButton1ActionPerformed θ οποία αφοφ ελζγξει για κενι είςοδο ονόματοσ, δθμιουργεί ζνα νζο αντικείμενο Person, κζτει ςε αυτό τισ τιμζσ των πεδίων κειμζνου και καλεί τθ μζκοδο storePerson τθσ DBManager. Τζλοσ ενθμερώνει το μοντζλο τθσ λίςτασ για τθν προςκικθ ώςτε να εμφανιςτεί και ςτο GUI. Για το κουμπί Ειςαγωγι ζχουμε τον παρακάτω κώδικα:

jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } });

Ππου θ μζκοδοσ jButton1ActionPerformed δίνεται παρακάτω:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // Ειςάγει ζνα νζο άτομο με βάςθ τισ τιμζσ των πεδίων κειμζνου ςτθ βάςθ if (jTextField1.getText().equalsIgnoreCase("") || jTextField1.getText().trim().equalsIgnoreCase("")){ JOptionPane.showMessageDialog(this, "ΣΦΑΛΜΑ: Ρρζπει να ειςάγετε το όνομα!"); return; } Person p = new Person(); p.setName(jTextField1.getText()); p.setAddress(jTextField2.getText()); p.setMail(jTextField3.getText()); int storedID = dbM.storePerson(p); p.setPersId(storedID); ((PersonListModel) jList1.getModel()).addPerson(p); }

Για το πλικτρο τροποποίθςθσ προςωπικοφ καλείται θ μζκοδοσ jButton3ActionPerformed αφοφ ελζγξει αν ζχει επιλεχκεί άτομο, ανακτά το επιλεγμζνο αντικείμενο Person από τθ JList, κζτει ςε αυτό τισ νζεσ τιμζσ των πεδίων κειμζνου και καλεί τθ μζκοδο updatePerson τθσ DBManager. Τζλοσ ενθμερώνει το μοντζλο τθσ λίςτασ για να εμφανιςτεί θ αλλαγι ςτο GUI. Για το κουμπί Τροποποίθςθ ζχουμε τον παρακάτω κώδικα:

jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } });

Ππου θ μζκοδοσ jButton3ActionPerformed δίνεται παρακάτω:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { // Ενθμερώνει το επιλεγμζνο άτομο με τισ τιμζσ των πεδίων κειμζνου Person p = (Person) jList1.getSelectedValue();

Page 19: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 19

if (p!= null){ p.setName(jTextField1.getText()); p.setAddress(jTextField2.getText()); p.setMail(jTextField3.getText()); dbM.updatePerson(p); ((PersonListModel) jList1.getModel()).updateModel(); } else JOptionPane.showMessageDialog(this, "ΣΦΑΛΜΑ: Ρρζπει να επιλζξετε ζνα άτομο!"); }

Για το πλικτρο διαγραφισ προςωπικοφ καλείται θ μζκοδοσ jButton4ActionPerformed θ οποία αφοφ ελζγξει αν ζχει επιλεχκεί άτομο, ανακτά το επιλεγμζνο αντικείμενο Person από τθ JList, και καλεί τθ μζκοδο removePerson τθσ DBManager. Τζλοσ ενθμερώνει το μοντζλο τθσ λίςτασ για να εμφανιςτεί θ αλλαγι ςτο GUI. Για το κουμπί Διαγραφι ζχουμε τον παρακάτω κώδικα:

jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } });

Ππου θ μζκοδοσ jButton4ActionPerformed δίνεται παρακάτω:

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { // Διαγράφει το επιλεγμζνο άτομο Person p = (Person) jList1.getSelectedValue(); if (p != null){ dbM.removePerson(p); ((PersonListModel) jList1.getModel()).removePerson(p); jTextField1.setText("");jTextField2.setText("");jTextField3.setText(""); jList1.clearSelection(); } else JOptionPane.showMessageDialog(this, "ΣΦΑΛΜΑ: Ρρζπει να επιλζξετε ζνα άτομο!"); }

Ρικανζσ εξαιρζςεισ ελζγχονται μζςα ςτθ DBManager οι οποίεσ αφενόσ προςτατεφουν τθν εφαρμογι από δυςλειτουργίεσ, αφετζρου καταγράφουν τα μθνφματα λάκουσ με χριςθ τθσ κλάςθσ Logger. Θα μποροφςαν να γίνονται διάφοροι ζλεγχοι ςτο επίπεδο τθσ κλάςθσ InsertPersonDialog, χρθςιμοποιώντασ τα exceptions, όπωσ για παράδειγμα αν πατθκεί το πλικτρο ενθμζρωςθ χωρίσ να ζχει αλλαχκεί κάποιο ςτοιχείο να βγάηει ςχετικό μινυμα, ι να βγάηει μθνφματα επιβεβαίωςθσ για τθ διαγραφι. Τζτοιεσ λειτουργίεσ για χάριν απλότθτασ δεν υλοποιικθκαν ςτθν υποδειγματικι λφςθ. Ο πλιρθσ κώδικασ Java που χρθςιμοποιείται για τθν υλοποίθςθ τθσ φόρμασ δίνεται ςτο Netbeans project (κλάςη InsertPersonDialog).

Page 20: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 20

Ερώτημα Γ – Δημιουργία φόρμασ χρζωςησ/αποδζςμευςησ υπολογιςτών ςε/από προςωπικό

(20 μονάδεσ)

Η φόρμα για χρζωςθ/αποδζςμευςθ υπολογιςτών ςε/από προςωπικό κα παρουςιάηει το καταχωρθμζνο προςωπικό και δφο λίςτεσ, μια με τουσ διακζςιμουσ και μια με τουσ χρεωμζνουσ υπολογιςτζσ. Η πρώτθ κα προβάλλει πάντα τουσ διακζςιμουσ υπολογιςτζσ ενώ θ δεφτερθ κα ενεργοποιείται όταν ο χριςτθσ επιλζξει ζνα άτομο και κα προβάλει τουσ υπολογιςτζσ που ζχουν χρεωκεί ςτο άτομο αυτό. Μζςω κατάλλθλθσ διεπαφισ ο χριςτθσ κα πρζπει να μπορεί να χρεώνει (από τθ λίςτα των διακζςιμων υπολογιςτών προσ αυτι των χρεωμζνων) και να αποδεςμεφει (από τθ λίςτα των χρεωμζνων υπολογιςτών προσ αυτι των διακζςιμων) υπολογιςτζσ. Φροντίςτε οι πίνακεσ ςτθ βάςθ να διακζτουν τα απαραίτθτα δεδομζνα.

Απάντηςη Για τθν υλοποίθςθ τθσ φόρμασ που απεικονίηεται ςτθν εκφώνθςθ προςτίκεται αρχικά ζνα αντικείμενο τφπου JLabel για τθ δθμιουργία τθσ επικεφαλίδασ «Χρζωςθ/Αποδζςμευςθ Υπολογιςτών ςε Ρροςωπικό» ενώ χρθςιμοποιώντασ τον πίνακα ελζγχου ιδιοτιτων των components (κάτω δεξιά ςτο περιβάλλον του Netbeans) είναι εφικτόσ ο προςδιοριςμόσ τθσ γραμματοςειράσ, του χρώματοσ και άλλων ιδιοτιτων για το jLabel. Στθ ςυνζχεια προςτίκενται ζνα αντικείμενο JList που εμφανίηει το καταχωρθμζνο ςτθ βάςθ προςωπικό, ζνα δεφτερο αντικείμενο JList που εμφανίηει τουσ διακζςιμουσ υπολογιςτζσ, ζνα τρίτο αντικείμενο JList που εμφανίηει τουσ υπολογιςτζσ που είναι χρεωμζνοι ςτο άτομο που ζχει επιλεχκεί από τθν πρώτθ JList και τρία JButtons για Χρζωςθ, Αποδζςμευςθ και Επιςτροφι. Η επικυμθτι λειτουργικότθτα είναι θ εξισ: Κάκε φορά που επιλζγεται ζνα άτομο από τθν πρώτθ JList εμφανίηονται οι υπολογιςτζσ που ζχει χρεωκεί το άτομο αυτό ςτθ λίςτα των χρεωμζνων υπολογιςτών. Επιλζγοντασ ζναν υπολογιςτι από τθ λίςτα των διακζςιμων υπολογιςτών και πατώντασ το κουμπί «Χρζωςθ» ο επιλεγμζνοσ υπολογιςτισ αφαιρείται από τθ λίςτα των διακζςιμων και προςτίκεται ςτθ λίςτα των χρεωμζνων υπολογιςτών. Αντίςτροφα, επιλζγοντασ ζναν υπολογιςτι από τθ λίςτα των χρεωμζνων υπολογιςτών, πατώντασ το κουμπί «Αποδζςμευςθ» αφαιρείται από τθ λίςτα των χρεωμζνων ο υπολογιςτισ και προςτίκεται ςτθ λίςτα των διακζςιμων. Τζλοσ το κουμπί «Επιςτροφι» κλείνει τθ φόρμα και επιςτρζφει τον ζλεγχο ςτο βαςικό μενοφ. Ππωσ και ςτο ερώτθμα Β ζχουν δθμιουργθκεί εςωτερικζσ κλάςεισ μζςα ςτθν κλάςθ τθσ φόρμασ (PersonListModel, AssignedComputerListModel, AvailableComputerListModel) για τθ διαχείριςθ των δεδομζνων τθσ κάκε JList. Ο κώδικασ των εςωτερικών κλάςεων φαίνεται παρακάτω:

Page 21: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 21

class PersonListModel extends javax.swing.AbstractListModel { ArrayList<Person> persons = dbM.retrievePersons(); public int getSize() { return persons.size(); } public Object getElementAt(int i) { return persons.get(i); } public void addPerson(Person x) { persons.add(x); fireContentsChanged(this, persons.size() - 1, persons.size() - 1); } } class AssignedComputerListModel extends javax.swing.AbstractListModel { ArrayList<Computer> assignedComputers = new ArrayList<Computer>(); public void setSelectedPerson(Person selectedPerson) { if (selectedPerson == null) return; assignedComputers = dbM.retrieveAssignedComputers(selectedPerson); fireContentsChanged(this, assignedComputers.size() - 1, assignedComputers.size() - 1); } public int getSize() { return assignedComputers.size(); } public Object getElementAt(int i) { return assignedComputers.get(i); } public void addAssignedComputer(Computer x) { assignedComputers.add(x); fireContentsChanged(this, assignedComputers.size() - 1, assignedComputers.size() - 1); } public void removeAssignedComputer(Computer x) { assignedComputers.remove(x); fireContentsChanged(this, assignedComputers.size() - 1, assignedComputers.size() - 1); } } class AvailableComputerListModel extends javax.swing.AbstractListModel { ArrayList<Computer> availableComputers = dbM.retrieveAvailableComputers(); public int getSize() { return availableComputers.size(); } public Object getElementAt(int i) { return availableComputers.get(i); }

Page 22: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 22

public void addAvailableComputer(Computer x) { availableComputers.add(x); fireContentsChanged(this, availableComputers.size() - 1, availableComputers.size() - 1); } public void removeAvailableComputer(Computer x) { availableComputers.remove(x); fireContentsChanged(this, availableComputers.size() - 1, availableComputers.size() - 1); } }

Σε κάκε τζτοια κλάςθ ορίηουμε αρχικά μια ArrayList που γεμίηει με τα αντίςτοιχα δεδομζνα τθσ βάςθσ: θ πρώτθ με το προςωπικό μζςω τθσ μεκόδου retrievePersons τθσ DBManager, θ δεφτερθ με τουσ χρεωμζνουσ υπολογιςτζσ μζςω τθσ assignedComputers τθσ DBManager και θ τρίτθ μζςω τθσ availableComputers τθσ DBManager. Οι υπόλοιπεσ μζκοδοι διαχειρίηονται τθν προςκικθ, διαγραφι και ενθμζρωςθ του μοντζλου τθσ λίςτασ εκτελώντασ ςε κάκε μεταβολι τθ μζκοδο fireContentsChanged που διαδίδει κατάλλθλο Event για να ειδοποιείται θ λίςτα και να προβάλει ςτο γραφικό περιβάλλον το ανανεωμζνο μοντζλο. Ζχοντασ δθμιουργιςει τα νζα μοντζλα τα κζτουμε ςτισ λίςτεσ jList1, jList2, jList3 ςτον Constructor τθσ φόρμασ ενώ ςτθν jList1 προςκζτουμε παρακολουκθτι ListSelectionListener που καλείται κάκε φορά που ο χριςτθσ επιλζγει μία από τισ επιλογζσ τθσ λίςτασ. Οι jList2, jList3 δε χρειάηονται παρακολουκθτι αφοφ δε μασ ενδιαφζρει να γίνει κάποια επιπλζον ενζργεια όταν επιλεχκεί μια από τισ επιλογζσ τθσ. Για τθ jList1 ςτθν περίπτωςθ που επιλεχκεί μια από τισ επιλογζσ τθσ (επιλογι ατόμου) θ μζκοδοσ jList1ValueChanged λαμβάνει από το μοντζλο τθσ λίςτασ το επιλεγμζνο αντικείμενο Person και το καταχωρεί ςτθ μεταβλθτι selectedPerson ώςτε να χρθςιμοποιθκεί για τθ χρζωςθ/αποδζςμευςθ (όταν πατθκεί το αντίςτοιχο κουμπί).

// Θζτει ωσ μοντζλο τθσ λίςτασ jList1 που εμφανίηει το προςωπικό, το PersonListModel // που ορίηεται ωσ inner κλάςθ jList1.setModel(new PersonListModel()); // Επιτρζπει απλι επιλογι αντικειμζνων τθσ λίςτασ jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); // Ακοφει για αλλαγζσ ςτθν επιλογι αντικειμζνων τθσ λίςτασ και κάκε φορά καλεί τθν // jList1ValueChanged(evt) για να ανανεώςει τα περιεχόμενα τθσ λίςτασ με τουσ χρεωμζνουσ // υπολογιςτζσ jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { jList1ValueChanged(evt); } }); // Θζτει ωσ μοντζλο τθσ λίςτασ jList2 που εμφανίηει τουσ χρεωμζνουσ υπολογιςτζσ, // το AssignedComputerListModel που ορίηεται ωσ inner κλάςθ jList2.setModel(new AssignedComputerListModel()); // Επιτρζπει απλι επιλογι αντικειμζνων τθσ λίςτασ jList2.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); // Θζτει ωσ μοντζλο τθσ λίςτασ jList3 που εμφανίηει τουσ διακζςιμουσ υπολογιςτζσ, // το AvailableComputerListModel που ορίηεται ωσ inner κλάςθ jList3.setModel(new AvailableComputerListModel()); // Επιτρζπει απλι επιλογι αντικειμζνων τθσ λίςτασ jList3.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); } private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) { Person p1 = (Person) jList1.getSelectedValue(); selectedPerson = p1; ((AssignedComputerListModel) jList2.getModel()).setSelectedPerson(p1); }

Page 23: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 23

Με κάκε πλικτρο τθσ φόρμασ ςυςχετίηεται ζνασ παρακολουκθτισ για το γεγονόσ ActionEvent και υλοποιείται αντίςτοιχθ μζκοδοσ. Ζτςι για το πλικτρο «Χρζωςθ» (jButton1) καλείται θ μζκοδοσ jButton1ActionPerformed θ οποία ανακτά το επιλεγμζνο αντικείμενο Computer από τθ JList3 των χρεωμζνων υπολογιςτών, ενθμερώνει κατάλλθλα τα αντίςτοιχα μοντζλα των λιςτών διακζςιμων και χρεωμζνων υπολογιςτών και καλεί τθ μζκοδο assignComputerToPerson τθσ DBManager για να πραγματοποιιςει τθ χρζωςθ. Για το κουμπί Χρζωςθ ζχουμε τον παρακάτω κώδικα:

jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } });

Ππου θ μζκοδοσ jButton1ActionPerformed δίνεται παρακάτω:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // Χρεώνει ζναν υπολογιςτι ςτο selectedPerson και καταχωρεί τθν χρζωςθ ςτθ βάςθ if (selectedPerson != null){ Computer c = (Computer) jList3.getSelectedValue(); ((AssignedComputerListModel) jList2.getModel()).addAssignedComputer(c); ((AvailableComputerListModel) jList3.getModel()).removeAvailableComputer(c); dbM.assignComputerToPerson(c, selectedPerson); } }

Για το πλικτρο «Αποδζςμευςθ» (jButton2) καλείται θ μζκοδοσ jButton2ActionPerformed θ οποία ανακτά το επιλεγμζνο αντικείμενο Computer από τθ JList (jList2) των χρεωμζνων υπολογιςτών, ενθμερώνει κατάλλθλα τα αντίςτοιχα μοντζλα των λιςτών διακζςιμων και χρεωμζνων υπολογιςτών και καλεί τθ μζκοδο releaseComputerFromPerson τθσ DBManager για να πραγματοποιιςει τθν αποδζςμευςθ. Για το κουμπί Αποδζςμευςθ ζχουμε τον παρακάτω κώδικα:

jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } });

Ππου θ μζκοδοσ jButton2ActionPerformed δίνεται παρακάτω:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // Ξεχρεώνει ζναν υπολογιςτι και ενθμερώνει τθ βάςθ if (selectedPerson != null){ Computer c = (Computer) jList2.getSelectedValue(); if (c!=null){ ((AvailableComputerListModel) jList3.getModel()).addAvailableComputer(c); ((AssignedComputerListModel) jList2.getModel()).removeAssignedComputer(c); dbM.releaseComputerFromPerson(c); } } }

Ο πλιρθσ κώδικασ Java που χρθςιμοποιείται για τθν υλοποίθςθ τθσ φόρμασ δίνεται ςτο Netbeans project (κλάςη AssignComputerToPersonDialog).

Page 24: PLH24 - 3 ERGASIA 2010-2011 - endeiktikes

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΡΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΡΟΓΑΜΜΑ ΣΡΟΥΔΩΝ «ΡΛΗΟΦΟΙΚΗ» ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΡΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ» ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2010-2011

ΕΝΔΕΙΚΣΙΚΕ ΑΠΑΝΣΗΕΙ ΓΙΑ ΣΗΝ 3η ΕΡΓΑΙΑ 24