ΑΣΕΙ ΘΕΑΛΙΑ ΧΟΛΗ ΣΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ Σμήμα Μηχανικών Πληροφορικής ΣΕ ΤΛΟΠΟΙΗΗ STANDALONE ΕΦΑΡΜΟΓΗ ΚΡΑΣΗΕΩΝ ΔΩΜΑΣΙΩΝ ΞΕΝΟΔΟΧΕΙΟΤ ΜΕ C-SHARP ΚΑΙ SQL-SERVER ΠΣΤΧΙΑΚΗ ΕΡΓΑΙΑ Μήτςη Αθηνά (ΑΜ: 1532) Επιβλζπων: Δρ Κόκκινοσ Κωνςταντίνοσ ΛΑΡΙΑ 2015
«Εγώ ε Μήηζε Αζελά, δειώλω ππεύζπλα όηη ε παξνύζα Πηπρηαθή Εξγαζία κε ηίηιν Υινπνίεζε Standalone Εθαξκνγήο Κξαηήζεωλ Δωκαηίωλ Ξελνδνρείνπ κε C_sharp θαη SQL_server είλαη δηθή κνπ θαη βεβαηώλω όηη: Σε όζεο πεξηπηώζεηο έρω ζπκβνπιεπηεί δεκνζηεπκέλε εξγαζία ηξίηωλ, απηό επηζεκαίλεηαη κε ζρεηηθή αλαθνξά ζηα επίκαρα ζεκεία. Σε όζεο πεξηπηώζεηο κεηαθέξω ιόγηα ηξίηωλ, απηό επηζεκαίλεηαη κε ζρεηηθή αλαθνξά ζηα επίκαρα ζεκεία. Με εμαίξεζε ηέηνηεο πεξηπηώζεηο, ην ππόινηπν θείκελν ηεο πηπρηαθήο απνηειεί δηθή κνπ δνπιεηά. Αλαθέξω ξεηά όιεο ηηο πεγέο βνήζεηαο πνπ ρξεζηκνπνίεζα. Σε πεξηπηώζεηο πνπ ηκήκαηα ηεο παξνύζαο πηπρηαθήο έγηλαλ από θνηλνύ κε ηξίηνπο, αλαθέξω ξεηά πνηα είλαη ε δηθή κνπ ζπλεηζθνξά θαη πνηα ηωλ ηξίηωλ. Γλωξίδω πωο ε ινγνθινπή απνηειεί ζνβαξόηαην παξάπηωκα θαη είκαη ελήκεξνο(-ε) γηα ηελ επέιεπζε ηωλ λνκίκωλ ζπλεπεηώλ» ΜΗΤΣΗ ΑΘΗΝΑ
Δγθξίζεθε από ηελ ηξηκειή εμεηαζηηθή επηηξνπή Σόπος: Ημερομηνία: ΕΠΙΣΡΟΠΗ ΑΞΙΟΛΟΓΗΗ 1. 2. 3.
Πεπίλητη Η αλάπηπμε ηεο πιεξνθνξηθήο ηα ηειεπηαία ρξόληα παξέρεη ηελ δπλαηόηεηα αθόκε θαη ζε κηθξέο μελνδνρεηαθέο κνλάδεο λα εθαξκόζνπλ έλα νινθιεξσκέλν ζύζηεκα δηαρείξηζεο. Η παξνύζα πηπρηαθή εξγαζία αθνξά ζηελ πινπνίεζε ελόο νινθιεξσκέλνπ ζπζηήκαηνο δηαρείξηζεο δσκαηίσλ κηθξώλ μελνδνρεηαθώλ κνλάδσλ ζαλ κηα stand-alone εθαξκνγή κε ηε ρξήζε ηεο πξνγξακκαηηζηηθήο γιώζζαο C-Sharp θαη ηελ πινπνίεζε ελόο κηθξνύ ζρήκαηνο βάζεο δεδνκέλσλ κε ηε βνήζεηα ηνπ SQL- Server. Καζώο ηα ζπζηήκαηα γίλνληαη νινέλα θαη πην πνιύπινθα ε νπηηθή αλαπαξάζηαζε θαη ε κνληεινπνίεζε ηνπ ζπζηήκαηνο γίλνληαη απαξαίηεηα. Η uml είλαη κία γιώζζα γηα νπηηθή κνληεινπνίεζε, θαζνξηζκό, δόκεζε θαη ηεθκεξίσζε ησλ ζηνηρείσλ ελόο ζπζηήκαηνο ινγηζκηθνύ. Με ηελ ρξήζε ινηπόλ ηεο uml αξρηθά αλαπηύζζνπκε όιεο ηηο πεξηπηώζεηο ρξήζεο θαη ζηελ ζπλέρεηα παξαζέηνπκε όια ηα δηαγξάκκαηα αθνινπζίαο γηα απηέο ηηο πεξηπηώζεηο. Σηελ ζπλέρεηα αθνινπζεί κία ζύληνκε πεξηγξαθή ηνπ.νδτ Framework θαη ηεο c#. Μεηά ηελ αλάιπζε θαη ηνλ θαζνξηζκό απαηηήζεσλ ηνπ πξνβιήκαηνο, ηελ κειέηε ησλ πεξηπηώζεσλ ρξήζεσλ θαη ησλ δηαγξακκάησλ αθνινπζίαο κε ηελ ρξήζε UML, επόκελν βήκα ήηαλ ε πινπνίεζε ηεο εθαξκνγήο καο. Γηα ηελ αλάπηπμε ηεο εθαξκνγήο ρξεζηκνπνηήζεθαλ: Visual Studio Ultimate 2010 SQL express 2008R2 Γιώζζα πξνγξακκαηηζκνύ C# Η εθαξκνγή αθνξά ηελ δηαρείξηζε κίαο μελνδνρεηαθήο κνλάδαο δίλνληαο ηελ δπλαηόηεηα ζηνπο πειάηεο ηεο κπαίλνληαο ζην ζύζηεκα λα κπνξνύλ λα επηιέμνπλ θάπνην από ηα δηαζέζηκα δσκάηηα ηεο επηρείξεζεο θάλνληαο θξάηεζε ηνπ δσκαηίνπ, κπνξνύλ λα επηβεβαηώζνπλ ηελ θξάηεζε θαζώο επίζεο κπνξνύλ λα πξνβνύλ θαη ζηελ αθύξσζή ηεο ρσξίο λα επηβαξπλζνύλ κε ηα έμνδα ηεο δηακνλήο. Από ηελ άιιε πιεπξά ην μελνδνρείν κέζσ ηνπ ζπζηήκαηνο κπνξεί λα δηαρεηξηζηεί κε ηνλ θαιύηεξν δπλαηό ηξόπν ηνπο πειάηεο πνπ είλαη θαηαρσξεκέλνη ζην ζύζηεκα. Μπνξεί επίζεο λα δηαρεηξηζηεί κε ηνλ κέγηζην δπλαηό ηξόπν ηελ απνηειεζκαηηθή
δηάζεζε ησλ ππεξεζηώλ ηνπ ζηνπο πειάηεο κε δπλαηόηεηα επηβεβαίσζεο άθημεο θαη επηβεβαίσζε αλαρώξεζεο ησλ πειαηώλ από ην μελνδνρείν.
Εςσαπιζηίερ Θα ήζεια λα εθθξάζσ ηηο πην ζεξκέο επραξηζηίεο κνπ θαη ηελ επγλσκνζύλε κνπ ζηνλ Γξ. Κόθθηλν Κσλζηαληίλν ν νπνίνο θαζ όιε ηελ δηάξθεηα ησλ ζπνπδώλ κνπ απνηέιεζε πξόηππν επηζηήκνλα, εθπαηδεπηηθνύ θαη αλζξώπνπ. Τνλ επραξηζηώ ηδηαηηέξσο ζεξκά γηα ηελ ππνκνλή ηνπ, ηελ ζπκπαξάζηαζή ηνπ θαη ηελ πνιύηηκε βνήζεηά ηνπ γηα ηελ πινπνίεζε απηήο ηεο πηπρηαθήο. Μήηζε Αζελά 1
Περιεχόμενα Πεπίλητη... iv Εςσαπιζηίερ... 1 1.Ανάπηςξη Και Σσεδίαζη ηος Σςζηήμαηορ Με Χπήζη Τηρ Τεσνολογίαρ UML... 3 1.1 Διζαγωγικά ζηοισεία... 3 1.2 Μονηελοποίηζη ηος ζςζηήμαηορ με Γιαγπάμμαηα Χπήζηρ... 4 1.3 Μονηελοποίηζη Τος Σςζηήμαηορ Με Γιαγπάμμαηα Ακολοςθίαρ... 6 2.Ειζαγυγή ζηο πεπιβάλλον ηος.net και ζηην C#... 9 2.1 Απσιηεκηονική ηος.net Framework... 9 2.2 Common Language Runtime... 10 2.3 Η γλώζζα ππογπαμμαηιζμού C#... 10 2.4 Microsoft Visual Studio... 11 2.5 Ανάπηςξη Δθαπμογήρ με Windows Forms... 11 3.Ανάπηςξη Εθαπμογήρ διασείπιζηρ ξενοδοσειακήρ μονάδαρ... 15 3.1 Διζαγωγικό ζημείωμα... 15 3.2 Η Βάζη Γεδομένων Τος Σςζηήμαηορ... 15 3.3 Λεπηομεπή Ανάπηςξη Και Παποςζίαζη Τηρ Εθαπμογήρ Και Τυν Λειηοςπγιών Τηρ.... 17 3.3.4 Δπικύπωζη Κπαηήζεων... 34 3.3.5 Έλεγσορ και επιβεβαίωζη δέζμεςζηρ δωμαηίων... 35 3.3.6 Γιαγπαθή... 42 3.3.7 Δπιβεβαίωζη Ανασωπήζεων... 51 3.3.8 Ιζηοπικό κπαηήζεων... 53 Σςμπεπάζμαηα... 61 Βιβλιογπαθία... 63 2
1.Ανάπηςξη Και Σσεδίαζη ηος Σςζηήμαηορ Με Χπήζη Τηρ Τεσνολογίαρ UML 1.1 Διζαγωγικά ζηοισεία Η ελνπνηεκέλε γιώζζα ζρεδηαζκνύ UML (unified modeling language) είλαη κηα γξαθηθή γιώζζα γηα ηελ νπηηθή παξάζηαζε, ηε δηακόξθσζε πξνδηαγξαθώλ θαη ηελ ηεθκεξίσζε ζπζηεκάησλ πνπ βαζίδνληαη ζε ινγηζκηθό. Η UML απνζθνπεί ζηελ δεκηνπξγία αληηθεηκελνζηξαθώλ ζπζηεκάησλ. Τν ζηάδην ηεο ζρεδίαζεο ηνπ ζπζηήκαηνο είλαη πνιύ θξίζηκν θαη πνιύ ζεκαληηθό γηα ηελ πνξεία αλάπηπμεο ηνπ ινγηζκηθνύ πνπ ζέινπκε λα αλαπηύμνπκε. Με ηελ ζρεδίαζε ηνπ ζπζηήκαηνο παξηζηάλνπκε νπηηθά ην ζύζηεκα, πξνζδηνξίδνπκε ηηο βαζηθέο ιεηηνπξγίεο ηνπ, ηηο αιιειεπηδξάζεηο ηνπ κε ηα ππόινηπα κέξε ηνπ ζπζηήκαηνο θαζώο θαη ηηο αιιειεπηδξάζεηο ηνπ ζπζηήκαηνο κε άιια ζπζηήκαηα. Η UML ορίζει ηα παρακάηω διαγράμμαηα: Διάγραμμα περιπηώζεων τρήζης (use case diagram) Διαγράμμαηα δομής: o Γηάγξακκα θιάζεσλ (class diagram) o Γηάγξακκα αληηθεηκέλσλ (object diagram) Διαγράμμαηα ζσμπεριθοράς: o Γηάγξακκα θαηαζηάζεσλ (statechart diagram) o Γηάγξακκα δξαζηεξηνηήησλ (activity diagram) o Γηαγξάκκαηα αιιειεπίδξαζεο: Γηάγξακκα αθνινπζίαο (sequence diagram) Γηάγξακκα ζπλεξγαζίαο (collaboration diagram) Διαγράμμαηα δομής σλοποίηζης: o Γηάγξακκα εμαξηεκάησλ (component diagram) o Γηάγξακκα αλάπηπμεο (deployment diagram) Γηα ηνλ πξνζδηνξηζκό απαηηήζεσλ ινηπόλ ηνπ ζπζηήκαηόο καο ζα αλαπηύμνπκε αξρηθά ηα δηαγξάκκαηα πεξηπηώζεσλ ρξήζεο θαη ελ ζπλερεία ηα δηαγξάκκαηα αθνινπζίαο πνπ αθνξνύλ ηηο πεξηπηώζεηο ρξήζεσλ. 3
1.2 Μονηελοποίηζη ηος ζςζηήμαηορ με Γιαγπάμμαηα Χπήζηρ Τν δηάγξακκα πεξηπηώζεσλ ρξήζεο (Σρήκα 2) πεξηιακβάλεη πέληε δηαθνξεηηθέο πεξηπηώζεηο ρξήζεο κεηαμύ πειάηε θαη μελνδνρεηαθήο κνλάδαο. χήμα 1. Διάγραμμα Περίπτωςησ χρήςεων του υςτήματοσ Οη πεξηπηώζεηο είλαη νη εμήο: 4
1. Μία από ηηο ιεηηνπξγίεο ηνπ ζπζηήκαηνο είλαη όηη ν πειάηεο κπαίλνληαο ζην ζύζηεκα λα κπνξεί λα επηιέμεη κεηαμύ ησλ δηαζέζηκσλ θαηαιπκάησλ ηνπ μελνδνρείνπ θαη λα ηνπ δίλεηαη ε δπλαηόηεηα δέζκεπζεο θάπνηνπ δσκαηίνπ. Η εγθπξόηεηα απηήο ηεο ελέξγεηαο γηα ηελ μελνδνρεηαθή κνλάδα εμαζθαιίδεηαη από ηελ εγθπξόηεηα ηεο πηζησηηθήο θάξηαο ηνπ πειάηε. Γη απηό θαη ε δέζκεπζε δσκαηίνπ επεθηείλεηαη από ηνλ έιεγρν ηεο πηζησηηθήο θάξηαο ηνπ πειάηε. Σε πεξίπησζε πνπ γηα νπνηνδήπνηε ιόγσ ε πηζησηηθή θάξηα δελ είλαη έγθπξε ηόηε ε ιεηηνπξγία ηεο δέζκεπζεο επεθηείλεηαη ζηελ πεξίπησζε ηεο άξλεζεο θξάηεζεο. 2. Μηα άιιε ιεηηνπξγία πνπ παξέρεη ην ζύζηεκα ζηνλ ππνςήθην πειάηε είλαη ε πεξίπησζε ρξήζεο επηβεβαίσζε θξαηήζεσλ. Απηή ε ιεηηνπξγία εμαζθαιίδεη ηελ εγθπξόηεηα δέζκεπζεο ηνπ δσκαηίνπ θαη είλαη ην ίδην ζεκαληηθή θαη γηα ηνλ πειάηε αιιά θαη γηα ην μελνδνρείν. 3. Μία άιιε ιεηηνπξγία ηνπ ζπζηήκαηνο είλαη ε αθύξσζε θξαηήζεσλ. Ο πειάηεο έρεη ηελ δπλαηόηεηα λα αθπξώζεη ηελ θξάηεζε δσκαηίνπ ρσξίο λα επηβαξπλζεί κε ηα έμνδα δηακνλήο παξέρνληαο ζην μελνδνρείν ηελ δπλαηόηεηα λα δηαζέζεη ην δσκάηην ζε λέν πειάηε. 4. Μία άιιε πνιύ βαζηθή θαη απαξαίηεηε ιεηηνπξγία πνπ παξέρεη ην ζύζηεκα είλαη ν έιεγρνο άθημεο ησλ πειαηώλ. Σε απηή ηελ πεξίπησζε κε ηελ άθημε ηνπ πειάηε ζην μελνδνρείν εηζάγνληαη ζην ζύζηεκα όιεο νη απαξαίηεηεο πιεξνθνξίεο πνπ ζρεηίδνληαη κε ηνλ πειάηε αιιά θαη κε ηελ δηακνλή ηνπ ζην μελνδνρείν. Πξνζσπηθά ζηνηρεία ηνπ πειάηε, νλνκαηεπώλπκν, ηειέθσλν, Αξηζκόο Ταπηόηεηαο αιιά θαη νη εκεξνκελίεο δηακνλήο ηνπ πειάηε θαηαγξάθνληαη θαη απνζεθεύνληαη ζηελ Βάζε Γεδνκέλσλ ηνπ ζπζηήκαηνο γεγνλόο ην νπνίν εμαζθαιίδεη ηελ απαξαίηεηα αζθάιεηα πνπ απαηηείηαη γηα ηελ επηρείξεζε θαη από ηελ άιιε επηηξέπεη ζην μελνδνρείν ηελ κέγηζηε δπλαηή δηαρείξηζε ησλ δσκαηίσλ πνπ δηαζέηεη. 5. Τν ίδην ζεκαληηθή θαη αλαγθαία γηα ηελ επηρείξεζε είλαη θαη ε πεξίπησζε ρξήζεο πνπ αθνξά ηελ αλαρώξεζε ησλ πειαηώλ από ην μελνδνρείν. Με απηή ηελ ιεηηνπξγία απνδεζκεύνληαη ηα δσκάηηα θαη δηαηίζεληαη ζε λένπο πειάηεο. Σε απηήλ ηελ πεξίπησζε εθδίδνληαη απνδείμεηο θαη ηηκνιόγηα πνπ αθνξνύλ ην θόζηνο δηακνλήο ηνπ πειάηε. 5
1.3 Μονηελοποίηζη Τος Σςζηήμαηορ Με Γιαγπάμμαηα Ακολοςθίαρ Τα δηαγξάκκαηα αθνινπζίαο δείρλνπλ πώο αιιειεπηδξνύλ ηα αληηθείκελα κέζσ ηεο αληαιιαγήο κελπκάησλ δίλνληαο έκθαζε ζηελ ρξνληθή αιιεινπρία ησλ κελπκάησλ. Τα δηαγξάκκαηα απηά ρξεζηκνπνηνύληαη γηα λα πεξηγξάςνπλ ηνλ θύθιν δσήο ησλ αληηθεηκέλσλ. Δπίζεο είλαη έλαο απνηειεζκαηηθόο ηξόπνο λα βξνύκε ηα αληηθείκελα πνπ εκπιέθνληαη ζην ζύζηεκά καο. Τα νπζηαζηηθά πνπ ρξεζηκνπνηήζακε παξαπάλσ ζηηο πεξηπηώζεηο ρξήζεσλ ηα κεηαηξέπνπκε ζε αληηθείκελα ελώ ηα ξήκαηα πνπ ρξεζηκνπνηήζακε ζα κπνξνύζαλ λα απνηειέζνπλ ηηο κεζόδνπο θιάζεσλ ησλ αληηθεηκέλσλ. χήμα 2. Διάγραμμα Ακολουθίασ Περίπτωςησ Κράτηςησ Δωματίου Σην παξαπάλσ δηάγξακκα αλαπαξηζηάλεηαη ε ιεηηνπξγία ηεο επηβεβαίσζεο θξάηεζεο δσκαηίνπ πνπ γίλεηαη από ηνλ πειάηε. Σε απηήλ ηελ ιεηηνπξγία εκπιέθνληαη ηα αληηθείκελα πειάηεο, μελνδνρείν θαη βάζε δεδνκέλσλ. Τν αληηθείκελν ηεο βάζεο δηαρεηξίδεηαη όιε ηελ βάζε θαη ειέγρεη αλ ππάξρεη δηαζέζηκν δσκάηην όηαλ ν πειάηεο θάλεη αίηεζε επηβεβαίσζεο. Σην ακέζσο επόκελν δηάγξακκα θαίλεηαη ε δηαδηθαζία άθημεο ελόο πειάηε ζην μελνδνρείν. Με ηελ άθημε ηνπ πειάηε ζην μελνδνρείν γίλεηαη θαηαρώξεζε ησλ πξνζσπηθώλ δεδνκέλσλ 6
ηνπ πειάηε ζην ζύζηεκα θαη ζηε ζπλέρεηα γίλεηαη έιεγρνο εάλ ν πειάηεο έρεη θάλεη θξάηεζε θάπνηνπ δσκαηίνπ ή αλ ππάξρεη θάπνην δηαζέζηκν δσκάηην γηα λα απνδνζεί ζηνλ λέν πειάηε. Απηό πξνϋπνζέηεη ηνλ έιεγρν ηνπ πίλαθα θξαηήζεσλ ζηελ Βάζε Γεδνκέλσλ. Τν ζύζηεκα ζηελ ζπλέρεηα ελεκεξώλεη κε θαηάιιειν κήλπκα. χήμα 3. Διάγραμμα Ακολουθίασ Περίπτωςησ Άφιξησ Πελάτη. Σην παξαθάησ δηάγξακκα πεξηγξάθεηαη ε δηαδηθαζία αλαρώξεζεο ηνπ πειάηε από ην μελνδνρείν. Μόιηο ν πειάηεο αηηεζεί αίηεκα αλαρώξεζεο ηόηε γίλεηαη ν απαξαίηεηνο έιεγρνο δσκαηίνπ. Αλ ην δσκάηην είλαη ζε απνδεθηή θαηάζηαζε ηόηε ζπγθεληξώλνληαη νη απαξαίηεηεο πιεξνθνξίεο από ηελ βάζε ζρεηηθά κε ηνλ πειάηε. Γηα παξάδεηγκα ν ηύπνο ηνπ δσκαηίνπ αλ είλαη κνλόθιηλν, δίθιηλν, νη εκέξεο δηακνλήο ηνπ θαζώο θαη ην ζπλνιηθό θόζηνο. Καη ζηελ ζπλέρεηα γίλεηαη ε έθδνζε απνδείμεσλ ή ηηκνινγίσλ από ην ζύζηεκα. 7
χήμα 4. Διάγραμμα Ακολουθίασ Περίπτωςησ Αναχϊρηςησ Πελάτη Σην παξαθάησ δηάγξακκα πεξηγξάθεηαη ε δηαδηθαζία αθύξσζεο θξάηεζεο. Ο πειάηεο αηηείηαη αίηεζε αθύξσζεο θξάηεζεο θαη ην ζύζηεκα ειέγρεη ζηελ βάζε ζηνλ πίλαθα θξαηήζεσλ αλ πξάγκαηη έρεη γίλεη θάπνηα θξάηεζε. Αλ όλησο έρεη πξαγκαηνπνηεζεί θξάηεζε ηόηε αθπξώλεηαη από ην ζύζηεκα θαη ε βάζε ελεκεξώλεη κε θαηάιιειν κήλπκα γηα ηελ αθύξσζε θξάηεζεο. χήμα 5. Διάγραμμα Ακολουθίασ Περίπτωςησ Ακφρωςησ Κράτηςησ Δδώ απιά ν πειάηεο αηηείηαη ηελ αθύξσζε θξάηεζεο γηα θάπνηεο εκεξνκελίεο αξρηθά. Τόηε ν δηαρεηξηζηήο, πξώηα ειέγρεη ηε βάζε δεδνκέλσλ γηα ηελ νξζόηεηα ησλ δεδνκέλσλ θξάηεζεο. Καηόπηλ, ην δσκάηην απνδεζκεύεηαη κε θαηάιιειν query ζηε βάζε δεδνκέλσλ. Σην ηέινο ην ζύζηεκα ζηέιλεη ζην δηαρεηξηζηή ηελ θαηάιιειε επηβεβαίσζε. 8
2.Ειζαγυγή ζηο πεπιβάλλον ηος.net και ζηην C# 2.1 Απσιηεκηονική ηος.net Framework To.NET Framework δηαζέηεη έλα ζύλνιν εξγαιείσλ γηα ηελ αλάπηπμε ινγηζκηθνύ ζε απηό. Τν Visual Studio είλαη έλα από ηα θαιύηεξα IDEs. Φξεζηκνπνηείηαη γηα console εθαξκνγέο θαη εθαξκνγέο κε γξαθηθέο δηεπαθέο, γηα web εθαξκνγέο θαη web services ζε managed. Έλαο πξνγξακκαηηζηήο ζηελ πιαηθόξκα ησλ Windows κπνξεί λα αλαπηύμεη εθαξκνγή κε δηαρεηξηζκέλνπ θώδηθα ην νπνίν αθνξά ηνλ πξνγξακκαηηζκό απεπζείαο ζην ιεηηνπξγηθό ζύζηεκα ρξεζηκνπνηώληαο Windows API. Σηόρνο ηνπ Api είλαη νη πξνγξακκαηηζηέο λα αλαπηύμνπλ πξνγξάκκαηα κε ην ιεηηνπξγηθό ζύζηεκα απνθεύγνληαο δεκηνπξγία θώδηθα γηα components ησλ windows. O πξνγξακκαηηζηήο θαιεί ηηο ζπλαξηήζεηο θαη ην ιεηηνπξγηθό δεκηνπξγεί απηά ηα components. Λόγσ όκσο πςειήο πνιππινθόηεηαο δεκηνπξγήζεθε ε αλάγθε αλάπηπμεο εθαξκνγώλ δηαρεηξηζκέλνπ θώδηθα. Γηαρεηξηζκέλνο θώδηθαο είλαη θώδηθαο πνπ ηξέρεη ζηελ πιαηθόξκα.net. To.ΝΔΤ Framework απνηειείηαη από έλα πεξηβάιινλ εθηέιεζεο ην νπνίν δηαρεηξίδεηαη ηελ εθηέιεζε θώδηθα κέζσ θαλόλσλ αζθαιείαο, απηόκαηεο δηαρείξηζεο ηεο κλήκεο κεηώλνληαο κε απηό ηνλ ηξόπν ηελ πηζαλόηεηα πξόθιεζεο ιαζώλ από απηνύο ηνπο παξάγνληεο. Η πιαηθόξκα απνηειείηαη από δηάθνξα κέξε. Απηά κπνξεί λα είλαη απηόλνκα πξνγξάκκαηα, βηβιηνζήθεο ή βνεζεηηθά αξρεία. Σην παξαθάησ ζρήκα παξνπζηάδνληαη ηα θπξηόηεξα κέξε ηνπ.net 9
χήμα 6. Σα Κυριότερα Μζρη Σου.NET 2.2 Common Language Runtime To Common Language Runtime (CLR) πξνζδηνξίδεη ηελ ππνδνκή εθηέιεζεο πνπ απαηηείηαη γηα ηελ ρξήζε managed θώδηθα έηζη ώζηε δηαθνξεηηθέο βηβιηνζήθεο θαη γιώζζεο λα κπνξνύλ λα ζπλεξγάδνληαη. Ο θώδηθαο πνπ ζηνρεύεη ζην.νδτ όρη κόλν επηηξέπεη ηελ δηαιεηηνπξγηθόηεηα κεηαμύ δηαθνξεηηθώλ γισζζώλ πξνγξακκαηηζκνύ αιιά θαη ηελ εθηέιεζε ζε δηαθνξεηηθέο πιαηθόξκεο. 2.3 Η γλώζζα ππογπαμμαηιζμού C# H C# είλαη κία γιώζζα πνπ ζρεδηάζηεθε από ηελ Microsoft γηα αλάπηπμε θώδηθα γηα ην.νδτ Framework. Δπίζεο ε C# ρξεζηκνπνηεί ηηο βηβιηνζήθεο ηνπ.net. Απηό ζεκαίλεη πσο απηά ηα δύν ζρεηίδνληαη πνιύ ζηελά κεηαμύ ηνπο. Η C# είλαη κία γιώζζα πνπ ζρεηίδεηαη άκεζα κε ηηο C,C++, θαη ηελ Java. Η ζπζρέηηζε απηή θπζηθά δελ είλαη θαζόινπ ηπραία. Απηέο νη γιώζζεο είλαη από ηηο επξύηεξα ρξεζηκνπνηνύκελεο γιώζζεο παγθνζκίσο. Κηίδνληαο ηελ C# πάλσ ζε έλα ζηαζεξό ππόβαζξν ε C# κπνξεί λα πξνζθέξεη έλα κνλνπάηη 10
κεηαλάζηεπζεο από απηέο ηηο γιώζζεο. Γεγνλόο πνιύ ρξήζηκν γηα ηνπο επαγγεικαηίεο πξνγξακκαηηζηέο. Με ηε C# κπνξνύκε λα δεκηνπξγήζνπκε έλα κεγάιν πιήζνο από εθαξκνγέο, όπσο Δθαξκνγέο γηα Tablet (Windows Store), Δθαξκνγέο γηα θηλεηά(windows Phone), Δθαξκνγέο γηα Desktop(WPF), Δθαξκνγέο γηα ην δηαδίθηπν(asp.net),wpf Browser Application, Web Services. 2.4 Microsoft Visual Studio To Visual Studio είλαη ην IDE ηεο Microsoft γηα ηελ αλάπηπμε εθαξκνγώλ ζην πιαίζην ηνπ.net Framework. Τν Visual Studio πεξηιακβάλεη πιήζνο εξγαιείσλ γηα ηελ αλάπηπμε εθαξκνγώλ. Πεξηιακβάλεη έλαλ επεμεξγαζηή θώδηθα κε απηόκαηε ζπκπιήξσζε επηηαρύλνληαο ην γξάςηκν θαη ελζσκαηώλεη έλαλ debugger γηα ηνλ άκεζν εληνπηζκό ζθαικάησλ. Πεξηιακβάλεη ζρεδίαζε παξαζπξηθώλ εθαξκνγώλ θαη ηελ ζρεδίαζε θιάζεσλ θαη Βάζεσλ Γεδνκέλσλ. 2.5 Ανάπηςξη Δθαπμογήρ με Windows Forms Οη εθαξκνγέο κε ρξήζε Windows Forms δεκηνπξγνύληαη κε ηελ πξνζζήθε ειέγρνπ ζε θόξκεο θαη ηελ αλάπηπμε απαληήζεσλ - απνηειεζκάησλ ζηηο ελέξγεηεο ηνπ ρξήζηε. 11
χήμα 7. Windows Form Τα Windows Forms controls παξέρνπλ δηάθνξνπο ειέγρνπο πνπ κπνξνύκε λα πξνζζέζνπκε ζε δηάθνξεο κνξθέο, όπσο: ηα πιαίζηα θεηκέλνπ, θνπκπηά, drop-down boxes, θνπκπηά επηινγήο, πίλαθεο, αθόκε θαη Web ζειίδεο. Με ην Visual Studio Designer drag-and-drop Windows Forms, κπνξνύκε λα δεκηνπξγήζνπκε εύθνια εθαξκνγέο ησλ Windows Forms. Απιά επηιέγνπκε ηα ζηνηρεία ειέγρνπ θαη ηα πξνζζέηνπκε ζην ζεκείν πνπ ζέινπκε ζηε θόξκα καο. Πνιιέο θνξέο δεκηνπξγείηαη ε αλάγθε νη εθαξκνγέο πνπ αλαπηύζζνπκε λα πξέπεη λα εκθαλίδνπλ δεδνκέλα από κία βαζε δεδνκέλσλ ή από έλα XML αξρείν. Τα Windows Forms παξέρνπλ ην DataGridView, γηα ηελ εκθάληζε ηέηνησλ δεδνκέλσλ πίλαθα ζε κηα κνξθή γξακκώλ θαη ζηειώλ. Όηαλ κία εθαξκνγή Window Forms ζπλδέεηαη κε κία βάζε δεδνκέλσλ ηύπνπ Access ή SQL Server ρξεζηκνπνηώληαο BindingSource, ηόηε κπνξνύκε λα ζπλδέζνπκε έλα DataGridView κε ην BindingSource κε ηε ρξήζε ηνπ Data Sources (Σρήκα 9). Τν παξάζπξν εκθαλίδεη ηηο δηαζέζηκεο πεγέο δεδνκέλσλ, όπσο βάζεηο δεδνκέλσλ, ππεξεζίεο Web, θαη άιια αληηθείκελα ζην έξγν καο. Δπηιέγνληαο ηελ επηζπκεηή πεγή γηα ηα δεδνκέλα καο ην Visual Studio δεκηνπξγεί απ επζείαο ηηο ζπλδέζεηο connection strings (Σρήκαηα 10 θαη 11) αλάκεζα ζην DataGridView control θαη ζην BindingSource. Τν BindingSource ζπλδέεηαη κε ηελ βάζε δεδνκέλσλ καο θαη κεηαθέξεη δεδνκέλα ζην DataSet κέζσ ηνπ TableAdapter. 12
χήμα 8. Επιλογή τησ πηγήσ των δεδομζνων 13
χήμα 9. Δημιουργία ςφνδεςησ χήμα 10. Επιλογή αντικειμζνων για την Βάςη 14
3.Ανάπηςξη Εθαπμογήρ διασείπιζηρ ξενοδοσειακήρ μονάδαρ 3.1 Διζαγωγικό ζημείωμα Αθνύ νξίζακε ην πξόβιεκα, θαζνξίζακε ηηο απαηηήζεηο ηνπ ζπζηήκαηνο πνπ ζέινπκε λα αλαπηύμνπκε κε ηελ ρξήζε ησλ Γηαγξακκάησλ Πεξηπηώζεσλ Φξήζεο θαη ησλ Γηαγξακκάησλ Αθνινπζίαο ην επόκελν βήκα είλαη ε αλάπηπμε ηεο εθαξκνγήο. Η πινπνίεζε ηεο εθαξκνγήο έγηλε ζην πεξηβάιινλ ηνπ Visual Studio Ultimate 2010 ζε γιώζζα πξνγξακκαηηζκνύ C#. Η εθαξκνγή είλαη Windows Form Application θαη ζπλδέεηαη κε κία ΒΓ,θάλνληαο ρξήζε ην SQL express 2008R2, από ηελ νπνία είηε αληιεί δεδνκέλα είηε απνζηέιιεη δεδνκέλα γηα απνζήθεπζε ή αλαλέσζε. Αλ αλνίμνπκε ην αξρείν κε επέθηαζε.sln πνπ βξίζθεηαη ζην θάθειν ηεο εθαξκνγήο καο κε ην visual studio θαη παηήζνπκε Debug ε εθαξκνγή αξρίδεη λα εθηειείηαη. 3.2 Η Βάζη Γεδομένων Τος Σςζηήμαηορ Έρνπκε ζπλδέζεη ηελ εθαξκνγή καο κε κία Βάζε Γεδνκέλσλ, ηελ νπνία πξνεγνπκέλσο έρνπκε δεκηνπξγήζεη. Σηελ Βάζε Γεδνκέλσλ ζα απνζεθεύνληαη ηα δεδνκέλα πνπ ζα εηζάγεη ν ρξήζηεο ζηελ εθαξκνγή. Δπίζεο κε θαηάιιεια Sql Δξσηήκαηα ζηελ βάζε κπνξνύκε λα ελεξγήζνπκε πάλσ ζηα δεδνκέλα ηεο βάζεο, κπνξνύκε λα εηζάγνπκε λέα δεδνκέλα, λα επεμεξγαζηνύκε δεδνκέλα πνπ είλαη ήδε απνζεθεπκέλα είηε λα δηαγξάςνπκε δεδνκέλα από ηελ ΒΓ. 15
χήμα 11. Η δομή τησ ΒΔ Γεκηνπξγήζακε 3 πίλαθεο (Πειάηεο, Κξαηήζεηο θαη Γσκάηηα) όπσο θαίλεηαη θαη ζην Σρήκα 20.. Ο πίλαθαο Πειάηεο πεξηέρεη πεδία κε ηηο απαξαίηεηεο πιεξνθνξίεο πνπ αθνξνύλ ηνπο πειάηεο. Δλδεηθηηθά κπνξνύκε λα αλαθέξνπκε ην νλνκαηεπώλπκν, θύιν, θαηαγσγή, δηεύζπλζε, ηειέθσλν θηι. Βαζηθό πεδίν ηνπ πίλαθα είλαη ην πεδίν ID ην νπνίν πξνζδηνξίδεη κνλνζήκαληα θάζε εγγξαθή ηνπ πίλαθα. Ο πίλαθαο Γσκάηηα πεξηέρεη ην πεδίν ID γηα ηνλ κνλνζήκαλην πξνζδηνξηζκό ηεο εγγξαθήο ζηνλ πίλαθα, ην όλνκα ηνπ δσκαηίνπ, ηνλ ηύπν ηνπ δσκαηίνπ (κνλόθιηλν, δίθιηλν, ηξίθιηλν, νηθνγελεηαθό), έλα πεδίν info πνπ δίλεη ηελ δπλαηόηεηα ζην ρξήζηε ηεο εθαξκνγήο λα εηζάγεη επηπιένλ ραξαθηεξηζηηθά πνπ ζέιεη λα έρεη ην δσκάηην, όπσο A/C θαη έλα πεδίν πνπ αθνξά ηελ ηηκή ηνπ δσκαηίνπ. Ο πίλαθαο Κξαηήζεηο έρεη έλα κνλαδηθό πεδίν ID θαη πεξηιακβάλεη δηάθνξεο πιεξνθνξίεο πνπ αθνξνύλ ηελ θξάηεζε δσκαηίσλ όπσο ηελ εκεξνκελία πνπ έγηλε ε θξάηεζε, ηελ εκεξνκελία άθημεο θαη αλαρώξεζεο, ηηο ζπλνιηθέο κέξεο θξάηεζεο, ην ζπλνιηθό θόζηνο θηι. Αμίδεη λα εηπσζεί ζε απηό ην ζεκείν πσο γηα ηελ εμαζθάιηζε ηεο εύξπζκεο ιεηηνπξγίαο ηεο βάζεο, άξα ησλ δεδνκέλσλ καο, είλαη απαξαίηεηε ε ζπζρέηηζε ηνπ πίλαθα Κξαηήζεηο κε ηνλ πίλαθα Πειάηεο θαη ηνλ πίλαθα Γσκάηηα. Ο ρξήζηεο ρξεζηκνπνηώληαο Windows Based Forms κέζσ graphical user interface επηθνηλσλεί κε ηελ Βάζε Γεδνκέλσλ. 16
3.3 Λεπηομεπή Ανάπηςξη Και Παποςζίαζη Τηρ Εθαπμογήρ Και Τυν Λειηοςπγιών Τηρ. 3.3.1 Βαζικό Μενού Τηρ Δθαπμογήρ Όηαλ αλνίγνπκε ηελ Δθαξκνγή καο αλνίγεη ην βαζηθό παξάζπξν ηεο εθαξκνγήο ζην νπνίν παξνπζηάδνληαη κε κνξθή θνπκπηώλ ειέγρνπ (buttons) νη ιεηηνπξγίεο πνπ κπνξεί λα θάλεη ν ρξήζηεο. χήμα 12. Βαςικό μενοφ τησ εφαρμογήσ Με ηελ αξρηθνπνίεζε ηεο ε εθαξκνγή καο θαιεί ηελ θπξίσο θόξκα (Form1) κέζσ ηνπ παξαθάησ θώδηθα: [STAThread] static void Main() 17
Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); Έπεηηα γηα ηελ πινπνίεζε ηεο πινήγεζεο αλάκεζα ζηα δηαθνξεηηθά παξάζπξα, θαη ζηηο κεζόδνπο θαη ππεξεζίεο πνπ παξέρνπλ ζηνλ ρξήζηε ρξεζηκνπνηήζακε ζε θάζε θνπκπί (button control) ηα αληίζηνηρα γεγνλόηα events. Όπσο θαίλεηαη θαη παξαθάησ, όηαλ ρξήζηεο παηάεη ην θνπκπί γηα ηελ δηαρείξηζε ησλ δσκαηίσλ εθηειείηαη ν εμήο θώδηθαο: //diaxeirisi domation private void button1_click(object sender, EventArgs e) RoomsMain rm = new RoomsMain(); rm.showdialog(); 3.3.2 Γιασείπιζη Γωμαηίων Μία πνιύ ζεκαληηθή ιεηηνπξγία πνπ κπνξεί λα παξέρεη ζηνπο ρξήζηεο έλα πξόγξακκα δηαρείξηζεο κίαο μελνδνρεηαθήο κνλάδαο είλαη ε δπλαηόηεηα δηάζεζεο δσκαηίσλ. Η δπλαηόηεηα ηνπ πειάηε λα επηιέμεη ηνλ αξηζκό ησλ δσκαηίσλ από ηα δηαζέζηκα δσκάηηα ηνπ μελνδνρείνπ θαζώο επίζεο θαη ηνλ ηύπν ηνπ δσκαηίνπ (κνλόθιηλν, δίθιηλν θ.ν.θ). 18
χήμα 13. Διαχείριςη δωματίων 3.3.2.1 Πποζθήκη δωμαηίος Όηαλ ν ρξήζηεο επηιέμεη από ην βαζηθό κελνύ ηεο εθαξκνγήο ηελ ιεηηνπξγία Πξνζζήθε Γσκαηίνπ ηόηε αλνίγεη κία θόξκα πνπ θαιείηαη λα ζπκπιεξώζεη. Κάπνηα πεδία είλαη πξνζεκεησκέλα κε έλαλ αζηεξίζθν * πνπ ππνδεηθλύνπλ όηη είλαη απαξαίηεηε ε ζπκπιήξσζή ηνπο από ην ρξήζηε. Ο ρξήζηεο πξέπεη λα ζπκπιεξώζεη ηελ θόξκα κε ην λνύκεξν ηνπ δσκαηίνπ πνπ επηζπκεί λα θάλεη θξάηεζε, ηνλ ηύπν ηνπ δσκαηίνπ όπνπ εθεί αλνίγεη κία πηπζζόκελε ιίζηα κε θάπνηεο επηινγέο (κνλόθιηλν, δίθιηλν, ηξίθιηλν, νηθνγελεηαθό), θάπνηεο επηπιένλ πξναηξεηηθέο πιεξνθνξίεο _ππεξεζίεο πνπ ζα επηζπκνύζε ν πειάηεο λα παξέρεη ην δσκάηην όπσο ΤV, A/C, ςπγείν, θνπδηλάθη θ.ν.θ. Τν ζύζηεκα ειέγρεη κέζσ θώδηθα C# γηα ηελ εγθπξόηεηα ησλ πεδίσλ θαη εκθαλίδεη αλάινγν κήλπκα ζην ρξήζηε. //prosthiki domatiou ston pinaka rooms tis vasis mas private void button1_click(object sender, EventArgs e) //elegxos an ola ta pedia einai sosta if (textbox1.text.trim()!= "" && textbox3.text.trim()!= "") 19
Double v; if (Double.TryParse(textBox3.Text.Trim(), out v)) try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeCommand cmd = new SqlCeCommand("INSERT INTO Rooms (Name,Type,Info,Price) VALUES ('" + textbox1.text + "','" + combobox1.selecteditem.tostring() + "','" + textbox2.text + "','" + textbox3.text + "')", conn); cmd.executenonquery(); conn.close(); m.showdialog(); Message m = new Message("Το δωμάτιο προςτέθηκε επιτυχώσ!"); this.close(); //ean yparxei provlima deikse to antistoixo minuma m.showdialog(); catch (Exception e1) Message m = new Message(e1.Message); else Message m = new Message("Η τιμή δωματίου δεν είναι ςτην ςωςτή μορφή!"); m.showdialog(); else m.showdialog(); Message m = new Message("Συμπληρώςτε τα απαραίτητα πεδία!"); 20
χήμα 14. Προςθήκη Δωματίου 3.3.2.2 Δπεξεπγαζία Έρνληαο επηιέμεη θάπνην δσκάηην από ην κελνύ Γηάζεζεο Γσκαηίσλ ν πειάηεο έρεη ηελ δπλαηόηεηα λα αιιάμεη θάπνηεο πιεξνθνξίεο ζρεηηθά κε ην δσκάηην όπσο είλαη ν ηύπνο θαη ε ηηκή δηαλπθηέξεπζεο ηνπ δσκαηίνπ. Αθνύ πξώηα γίλεη έιεγρνο εγθπξόηεηαο δεδνκέλσλ ησλ πεδίσλ κεηά ε βάζε ελεκεξώλεηαη κε ηα λέα δεδνκέλα κε θαηάιιεια Update SQL Queries θαη ν ρξήζηεο ελεκεξώλεηαη κε θαηάιιειν κήλπκα. 21
χήμα 15. Επεξεργαςία δωματίου //ananeosi ton pliroforion tou domatiou stin vasi private void button1_click(object sender, EventArgs e) if (textbox1.text.trim()!= "" && textbox3.text.trim()!= "") Double v; if (Double.TryParse(textBox3.Text.Trim(), out v)) try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeCommand cmd = new SqlCeCommand("UPDATE Rooms SET Name='"+textBox1.Text+"',Type='"+comboBox1.SelectedItem.ToString()+"',Info='"+textBox2.Text+"',Price='" + textbox3.text + "' WHERE Id='"+k1.ToString()+"'", conn); cmd.executenonquery(); 22
conn.close(); m.showdialog(); Message m = new Message("Το δωμάτιο ανανεώθηκε επιτυχώσ!"); this.close(); m.showdialog(); catch (Exception e1) Message m = new Message(e1.Message); else Message m = new Message("Η τιμή δωματίου δεν είναι ςτην ςωςτή μορφή!"); m.showdialog(); else m.showdialog(); Message m = new Message("Συμπληρώςτε τα απαραίτητα πεδία!"); Η εθαξκνγή ειέγρεη γηα ηελ εγθπξόηεηα ησλ δεδνκέλσλ πνπ εηζάγνληαη κέζσ ησλ πεδίσλ ηεο θόξκαο.σηελ ζπλέρεηα αξρηθνπνηείηαη κία ζύλδεζε κε ηνλ SQL Server θαη ζηελ εληνιή εθηέιεζεο εηζάγνπκε ηηο κεηαβιεηέο ηνπ ρξήζηε ζηνλ αληίζηνηρν πίλαθα. Ο ρξήζηεο ελεκεξώλεηαη γηα ην απνηέιεζκα κέζσ ηεο κεζόδνπ Message.ShowDialog(); 23
3.3.2.3 Γιαγπαθή Με ηελ πξνϋπόζεζε όηη ν πειάηεο έρεη επηιέμεη θάπνην δσκάηην κπνξεί λα πξνρσξήζεη κε ηελ δπλαηόηεηα δηαγξαθήο πνπ ηνπ δίλεη ην πξόγξακκα ζηελ αθύξσζε ηεο επηινγήο δσκαηίνπ. Σε απηήλ ηελ πεξίπησζε εκθαλίδεηαη κήλπκα ζηνλ πειάηε πσο κε ηελ νινθιήξσζε ηεο δηαγξαθήο δηαγξάθεηαη απηόκαηα θαη ε αληίζηνηρε εγγξαθή από ηνλ πίλαθα Κξαηήζεηο, ιόγσ ζπζρεηίζεσλ κε ηνλ πίλαθα, κε θαηάιιεια SQL Queries. Παηώληαο ην θνπκπί ηεο δηαγξαθήο εθηειείηαη ν παξαθάησ θώδηθαο: //diagrafh private void button3_click(object sender, EventArgs e) if (selectedrow!= null) RoomsDelete rd = new RoomsDelete(int.Parse(selectedRow.Cells[0].Value.ToString())); rd.showdialog(); selectedrow = null; this.roomstableadapter.fill(this.database1dataset1.rooms); datagridview1.datasource = roomsbindingsource; datagridview1.clearselection(); else Message m = new Message("Επιλέξτε Δωμάτιο"); m.showdialog(); Πξώηα ειέγρνπκε αλ ν ρξήζηεο έρεη επηιέμεη θάπνην δσκάηην. Έπεηηα πεξλάκε σο κεηαβιεηή εηζόδνπ ην ID ηνπ επηιεγκέλνπ δσκαηίνπ έηζη ώζηε λα κπνξέζνπκε λα βξνύκε θαη λα δηαγξάςνπκε ησ δσκάηην ζηελ θαηλνύξηα θόξκα πξνεηδνπνίεζεο (RoomsDelete) πνπ ζα εκθαληζηεί ζηνλ ρξήζηε. Έπεηηα θαινύκε μαλά ην TableAdapter Object έηζη ώζηε λα αλαλεσζεί ν πίλαθαο ηεο Βάζεο Γεδνκέλσλ καο, κεηά ηελ δηαγξαθή ηνπ δσκαηίνπ. Γηα ηελ δηαγξαθή ηνπ δσκαηίνπ από ην πξνεηδνπνηεηηθό παξάζπξν εθηειείηαη ν εμήο θώδηθαο: //diagrafi domatiou 24
private void button1_click(object sender, EventArgs e) try //diagrafi domatiou SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); Id='"+k1.ToString()+"'", conn); SqlCeCommand cmd = new SqlCeCommand("DELETE FROM Rooms Where cmd.executenonquery(); conn.close(); //diagrafi kratiseon SqlCeConnection conn2 = new SqlCeConnection(); conn2.connectionstring = "Data Source = Database1.sdf"; conn2.open(); SqlCeCommand cmd2 = new SqlCeCommand("DELETE FROM Bookings Where RoomId='" + k1.tostring() + "'", conn2); cmd2.executenonquery(); conn2.close(); m.showdialog(); Message m = new Message("Το δωμάτιο διαγράφηκε επιτυχώσ!"); this.close(); m.showdialog(); catch (Exception e1) Message m = new Message(e1.Message); 25
Γηα ηνλ έιεγρν ηεο εθηέιεζεο ηνπ θώδηθα θαη απνηξνπήο ιαζώλ θαηά ηελ εθηέιεζε θάλνπκε ρξήζε ησλ ζηνηρείσλ try-catch. Αξρηθά δηαγξάθεηαη ε εγγξαθή από ηνλ πίλαθα Πειαηώλ θαη ελ ζπλερεία δηαγξάθνληαη όιεο νη αληίζηνηρεο θξαηήζεηο από ηνλ πίλαθα Κξαηήζεσλ. Γηα θάζε δηαγξαθή αξρηθνπνηείηαη κηα μερσξηζηή ζύλδεζε ζηνλ SQL server. χήμα 16. Διαγραφή δωματίου 3.3.3 Γιασείπιζη Πελαηών Μηα άιιε δπλαηόηεηα ηνπ πξνγξάκκαηνο είλαη ε δπλαηόηεηα δηαρείξηζεο όισλ ησλ πειαηώλ πνπ είλαη θαηαρσξεκέλνη ζην ζύζηεκα. Δπηιέγνληαο από ην βαζηθό κελνύ ηεο εθαξκνγήο ηελ Δπηινγή Πειαηώλ εκθαλίδεηαη έλα παξάζπξν όπνπ ζην πάλσ κέξνο ηνπ ππάξρνπλ επηινγέο αλαδήηεζεο κε βάζε θάπνην ζηνηρείν ηνπ πειάηε. Πρ ην όλνκα. Κάζε κηα από ηηο επηινγέο αλαδήηεζεο δεκηνπξγεί ην αληίζηνηρν SQL query αλαδήηεζεο ζηνλ πίλαθα Πειάηεο Σηελ ζπλέρεηα εκθαλίδεηαη έλα DataGridView κε ηηο αληίζηνηρεο εγγξαθέο ησλ πειαηώλ όπνπ κπνξνύκε είηε λα εηζάγνπκε λένπο πειάηεο, είηε λα επεμεξγαζηνύκε ηα ήδε θαηαρσξεκέλα ζηνηρεία είηε λα δηαγξάςνπκε θάπνηα εγγξαθή. 26
Π.ρ. γηα ηελ εύξεζε Πειαηώλ κε βάζε ην όλνκα, παηώληαο ην αληίζηνηρν θνπκπί αλαδήηεζεο εθηειείηαη ν παξαθάησ θώδηθαο: //euresh me vasi stoixeia //onoma private void button7_click(object sender, EventArgs e) selectedrow = null; try // 1 // Open connection using (SqlCeConnection c = new SqlCeConnection("Data Source = Database1.sdf")) c.open(); // 2 // Create new DataAdapter using (SqlCeDataAdapter a = new SqlCeDataAdapter( + "%'", c)) "SELECT * FROM Customers WHERE First LIKE '%" + textbox1.text // 3 // Use DataAdapter to fill DataTable DataTable t = new DataTable(); a.fill(t); // 4 // Render data onto the screen datagridview1.datasource = t; datagridview1.clearselection(); catch (Exception e1) Message m = new Message(e1.Message); m.showdialog(); 27
χήμα 17. Διαχείριςη Πελατϊν 3.3.3.1 Πποζθήκη Με απηή ηελ ιεηηνπξγία κπνξνύκε λα εηζάγνπκε λέν πειάηε ζην ζύζηεκα. Αθνύ ζπκπιεξώζνπκε ηα πεδία ηεο θόξκαο πνπ αθνξνύλ ζε πιεξνθνξίεο πνπ ζρεηίδνληαη κε ηνλ πειάηε όπσο νλνκαηεπώλπκν, εκεξνκελία γέλλεζεο, ηειέθσλν θ.ν.θ ηα πεδία ππόθεηληαη έιεγρν εγθπξόηεηαο από ηελ εθαξκνγή πξηλ θαηαρσξεζνύλ ζηελ βάζε. //dimiourgia pelati private void button1_click(object sender, EventArgs e) 28
if (textbox1.text.trim()!= "" && textbox2.text.trim()!= "" && textbox3.text.trim()!= "" && textbox4.text.trim()!= "" && textbox5.text.trim()!= "" && textbox7.text.trim()!= "") try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeCommand cmd = new SqlCeCommand("INSERT INTO Customers (First,Last,Dob,Gender,Address,Country,Phone,Email,Card,Info) VALUES ('" + textbox1.text + "','"+ textbox2.text.trim()+"','"+ datetimepicker1.text+"','"+ combobox1.selecteditem.tostring() + "','" + textbox3.text + "','" +textbox4.text.trim()+"','"+ textbox5.text.trim()+"','"+ textbox6.text.trim()+"','"+textbox7.text.trim()+"','"+ textbox8.text.trim() + "')", conn); cmd.executenonquery(); conn.close(); m.showdialog(); Message m = new Message("Ο πελάτησ προςτέθηκε επιτυχώσ!"); this.close(); m.showdialog(); catch (Exception e1) Message m = new Message(e1.Message); else Message m = new Message("Συμπληρώςτε τα απαραίτητα πεδία!"); m.showdialog(); 29
χήμα 18. Προςθήκη πελάτη χήμα 19. Μήνυμα αποτελζςματοσ 30
3.3.3.2 Δπεξεπγαζία Με ηελ πξνϋπόζεζε πσο ν ρξήζηεο ηεο εθαξκνγήο έρεη επηιέμεη κία εγγξαθή κπνξεί λα επεμεξγαζηεί ηα ζηνηρεία ηνπ πειάηε ηεο αληίζηνηρεο εγγξαθήο. Απηό πξαγκαηνπνηείηαη κε ηελ ρξήζε ελόο Event ην νπνίν εθηειείηαη θάζε θνξά πνπ ν ρξήζηεο επηιέγεη θάπνην Κειί από ηνλ πίλαθα Πειαηώλ. Αλνίγεη ινηπόλ ε θόξκα ηνπ πειάηε πνπ έρεη επηιεγεί δίλνληαο ηελ δπλαηόηεηα ζηνλ ρξήζηε ηνπ ζπζηήκαηνο λα ηξνπνπνηήζεη ηα ζηνηρεία ηνπ ζπγθεθξηκέλνπ πειάηε πνπ είλαη θαηαρσξεκέλα ζηνλ πίλαθα. χήμα 20. Επεξεργαςία ςτοιχείων πελάτη //epilogh eggrafhs e) private void datagridview1_cellclick(object sender, DataGridViewCellEventArgs if (e.rowindex!= -1) selectedrow = datagridview1.rows[e.rowindex]; 31
Έπεηηα επηιέγνληαο ην θνπκπί «Δπεμεξγαζία» πεξλάκε ηηο θαηάιιειεο κεηαβιεηέο ζηελ εθαξκνγή καο (ζπγθεθξηκέλα ην Unique Identifier ηνπ Πειάηε) θαη ζηελ ζπλέρεηα δεκηνπξγνύκε ηελ θόξκα παξάζπξν επεμεξγαζίαο ηνπ πειάηε. //epeksergasia stoixeion pelati private void button2_click(object sender, EventArgs e) if (selectedrow!= null) CustomersEdit ce = new CustomersEdit(int.Parse(selectedRow.Cells[0].Value.ToString())); ce.showdialog(); selectedrow = null; this.customerstableadapter.fill(this.database1dataset2.customers); datagridview1.datasource = customersbindingsource; datagridview1.clearselection(); else Message m = new Message("Επιλέξτε Πελάτη"); m.showdialog(); 3.3.3.3 Γιαγπαθή Γηαγξαθή επηιεγκέλνπ πειάηε από ην ζύζηεκα. Γηαγξάθνληαο θάπνηνλ πειάηε ην ζύζηεκα απηόκαηα δηαγξάθεη θαη ηηο αληίζηνηρεο εγγξαθέο από ηνλ πίλαθα Κξαηήζεηο. Ο ρξήζηεο ελεκεξώλεηαη κε θαηάιιειν κήλπκα. //diagrafh private void button1_click(object sender, EventArgs e) try //diagrafh pelath SqlCeConnection conn = new SqlCeConnection(); 32
conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); + k1.tostring() + "'", conn); SqlCeCommand cmd = new SqlCeCommand("DELETE FROM Customers Where Id='" cmd.executenonquery(); conn.close(); //diagrafh krathseon SqlCeConnection conn2 = new SqlCeConnection(); conn2.connectionstring = "Data Source = Database1.sdf"; conn2.open(); SqlCeCommand cmd2 = new SqlCeCommand("DELETE FROM Bookings Where CustomerId='" + k1.tostring() + "'", conn2); cmd2.executenonquery(); conn2.close(); m.showdialog(); Message m = new Message("Ο Πελάτησ διαγράφηκε επιτυχώσ!"); this.close(); m.showdialog(); catch (Exception e1) Message m = new Message(e1.Message); 33
χήμα 21. Διαγραφή πελάτη 3.3.4 Δπικύπωζη Κπαηήζεων Όηαλ επηιέγνπκε απηήλ ηελ ιεηηνπξγία ηόηε εκθαλίδεηαη έλα DataGridView ην νπνίν ζπλδέεηαη κε έλα DataTableAdapter όπνπ εκθαλίδνληαη όιεο νη θξαηήζεηο ζηηο νπνίεο δελ έρεη γίλεη αθόκε έιεγρνο άθημεο ή έιεγρνο αλαρώξεζεο. χήμα 22. Επικφρωςη Κρατήςεων 34
Όηαλ εκθαλίδεηαη ην παξάζπξν ν πίλαθαο ησλ θξαηήζεσλ αξρηθνπνηείηαη κε βάζε ηνλ παξαθάησ θώδηθα: private void BookingsMain_Load(object sender, EventArgs e) this.bookingstableadapter.fill(this.database1dataset3.bookings); datagridview1.clearselection(); Ο SQL query θώδηθαο πνπ αξρηθνπνηεί ηνλ πίλαθα ησλ Κξαηήζεσλ είλαη : SELECT Id, CustomerId, RoomId, Type, DateMade, StartDate, EndDate, TotalDays, TotalAmount, CheckIn, CheckOut FROM WHERE Bookings (CheckIn = 'No') OR (CheckOut = 'No' 3.3.5 Έλεγσορ και επιβεβαίωζη δέζμεςζηρ δωμαηίων Δπηιέγνληαο απηήλ ηελ ιεηηνπξγία εκθαλίδεηαη κία θόξκα ζηελ νπνία επηιέγνληαο ηνλ ηύπν ηνπ δσκαηίνπ θαη ηηο εκεξνκελίεο άθημεο θαη αλαρώξεζεο ην ζύζηεκα ειέγρεη αλ ππάξρνπλ δηαζέζηκα δσκάηηα ζην μελνδνρείν γη απηέο ηηο εκεξνκελίεο. Τν ζύζηεκα καο (κέζσ C# θώδηθα θαη SQL Queries) πξώηα βξίζθεη όια ηα δσκάηηα πνπ αλήθνπλ ζηνλ επηιεγκέλν ηύπν δσκαηίνπ (πρ κνλόθιηλν, δίθιηλν θιπ). Έπεηηα από ηνλ πίλαθα ησλ Κξαηήζεσλ εληνπίδεη όιεο ηηο εγγξαθέο πνπ αληηζηνηρνύλ ζηνλ ηύπν δσκαηίνπ πνπ έρνπκε επηιέμεη. Έπεηηα ειέγρνληαο ηηο εκεξνκελίεο (check In θαη check out) θαη ζπγθξίλνληαο ηεο κε ηηο αληίζηνηρεο εκεξνκελίεο ηνπ πειάηε βξίζθνπκε αλ ηα δσκάηηα είλαη ειεύζεξα γηα ηηο ζπγθεθξηκέλεο εκεξνκελίεο. //elegxos diathesimothtas gia sigkekrimenes imerominies... //***************************************************************** 35
private void button1_click(object sender, EventArgs e) DateTime d1 = Convert.ToDateTime( datetimepicker1.value.tostring()); DateTime d2 = Convert.ToDateTime(dateTimePicker2.Value.ToString()); int days = (d2 - d1).days; textbox7.text = days.tostring();//meres diamonis // try // //euresi olon ton domation-ids,sumfona me ton epilegmeno typo kratisis kai prosthiki se lista List<string> rooms=new List<string>(); SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeDataReader rdr = null; SqlCeCommand cmd = new SqlCeCommand("SELECT Id FROM Rooms WHERE Type='"+comboBox1.SelectedItem.ToString()+"'", conn); rdr = cmd.executereader(); while (rdr.read()) rooms.add(rdr[0].tostring()); conn.close(); //---------------euresi olon ton krathseon, kai elegxos gia tis parapano imerominies----------- SqlCeConnection conn2 = new SqlCeConnection(); conn2.connectionstring = "Data Source = Database1.sdf"; conn2.open(); SqlCeDataReader rdr2 = null; SqlCeCommand cmd2 = new SqlCeCommand("SELECT RoomId,StartDate,EndDate FROM Bookings WHERE CheckOut='No'", conn2); rdr2 = cmd2.executereader(); //epilegmenees imerominies gia kratisi 36
DateTime starts = Convert.ToDateTime(dateTimePicker1.Value.ToString()); DateTime ends = Convert.ToDateTime(dateTimePicker2.Value.ToString()); while (rdr2.read()) String roomid = rdr2[0].tostring(); of booking-chekcin booking-checkout DateTime start = Convert.ToDateTime(rdr2[1].ToString()); //start DateTime end = Convert.ToDateTime(rdr2[2].ToString()); //end of //domatio mi diathesimo if ((starts.compareto(start)<0 && ends.compareto(start)>0) (starts.compareto(start) > 0 && starts.compareto(end) < 0) (ends.compareto(start) > 0 && ends.compareto(end) < 0)) diathesimon domation rooms.remove(roomid);//afairese to domatio apo tin lista ton conn2.close(); //kanena diatheismo domatio gia tin sigkekrimeni imerominia if (rooms.count == 0) panel1.visible = false; lbl_results.text = "Δεν υπάρχουν διαθέςιμα δωμάτια για τισ παραπάνω ημερομηνίεσ!"; else panel1.visible = true; combobox2.datasource = rooms; combobox2.selectedindex = 0; lbl_results.text = "Βρέθηκαν διαθέςιμα δωμάτια!"; 37
// m.showdialog(); // catch (Exception e2) Message m = new Message(e2.Message); Δάλ ππάξρνπλ δηαζέζηκα δσκάηηα εκθαλίδεηαη θαηάιιειν κήλπκα θαζώο θαη όιεο νη δηαζέζηκεο επηινγέο αιιά θαη ε δπλαηόηεηα επηθύξσζεο ηεο θξάηεζεο. Δάλ όκσο δελ ππάξρνπλ ειεύζεξα δσκάηηα ηόηε ν ρξήζηεο ελεκεξώλεηαη κε ζρεηηθό κήλπκα. χήμα 23. Ζλεγχοσ διαθεςιμότητασ δωματίων 38
χήμα 24. Ζλλειψη διαθεςιμότητασ δωματίων χήμα 25. Επικφρωςη κράτηςησ Αλ ηα ζηνηρεία ηνπ πειάηε ππάξρνπλ από παιαηόηεξε θξάηεζε πνπ είρε θάλεη ηόηε επηιέγνληαο ν ρξήζηεο ηνπ ζπζηήκαηνο ηελ θαξηέια εγγεγξακκέλνο αλνίγεη έλα παξάζπξν ζην νπνίν είλαη θαηαρσξεκέλνη όινη νη πειάηεο θαη από εθεί κπνξεί λα επηιέμεη ηελ θαηάιιειε εγγξαθή. 39
Αλ πξόθεηηαη γηα λέν πειάηε ηόηε ν ρξήζηεο επηιέγνληαο ηελ επηινγή θαηλνύξηνο πξέπεη λα ζπκπιεξώζεη ηα πεδία ηεο θόξκαο κε ην νλνκαηεπώλπκό ηνπ θαη ην ηειέθσλό ηνπ. (Με ηνλ έιεγρν άθημεο ην ζύζηεκα απηόκαηα ζα δεηήζεη λα ζπκπιεξώζνπκε όια ηα απαξαίηεηα ζηνηρεία ηνπ πειάηε έηζη ώζηε λα γίλεη ε αληίζηνηρε ελεκέξσζε ζηνλ πίλαθα ηεο Βάζεο Γεδνκέλσλ) Σην ηέινο ηεο θόξκαο ππνινγίδνληαη απηόκαηα από ην ζύζηεκα νη κέξεο δηακνλήο θαζώο θαη ην ζπλνιηθό θόζηνο δηακνλήο. //palios pelaths private void radiobutton2_checkedchanged(object sender, EventArgs e) if (radiobutton2.checked == true) radiobutton1.checked = false; textbox4.enabled = false; textbox5.enabled = false; textbox6.enabled = false; textbox4.text = ""; textbox5.text = ""; textbox6.text = ""; SelectCustomer sc = new SelectCustomer(); sc.showdialog(); textbox4.text = SelectCustomer.CustFirst; textbox5.text = SelectCustomer.CustLast; textbox6.text = SelectCustomer.CustPhone; Όηαλ ην ζηνηρείν radiobutton αιιάδεη θαηάζηαζε θαη είλαη επηιεγκέλν ηόηε αξρηθνπνηνύκε ηα πεξηερόκελα ησλ ζηνηρείσλ TextBox θαη εκθαλίδνπκε ηελ θόξκα ηεο επηινγήο πειάηε κέζσ ελόο παξάζπξνπ δηαιόγνπ. 40
Η θξάηεζε απνζεθεύεηαη ζηελ βάζε θαη ν ρξήζηεο ελεκεξώλεηαη κε θαηάιιειν κήλπκα. χήμα 26. Επιλογή εγγεγραμμζνου πελάτη για ολοκλήρωςη κράτηςησ δωματίου 41
χήμα 27. Επιβεβαίωςη Επικφρωςησ Κράτηςησ 3.3.6 Γιαγπαθή Γηαγξαθή θάπνηαο θξάηεζεο από ηνλ αληίζηνηρν πίλαθα ηεο βάζεο δεδνκέλσλ καο κέζσ ηνπ παξαθάησ θώδηθα: try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); + k1.tostring() + "'", conn); SqlCeCommand cmd = new SqlCeCommand("DELETE FROM Bookings Where Id='" cmd.executenonquery(); conn.close(); m.showdialog(); Message m = new Message("H κράτηςη διαγράφηκε επιτυχώσ!"); this.close(); 42
m.showdialog(); catch (Exception e1) Message m = new Message(e1.Message); Αθνύ πξώηα αξρηθνπνηήζνπκε ηελ ζύλδεζε ζηνλ SQL server θαη ζπλδεζνύκε κε ηελ Βάζε Γεδνκέλσλ καο έπεηηα κπνξνύκε λα εθηειέζνπκε ηελ SQL εληνιέο. Δηζάγνπκε σο κεηαβιεηή ζηελ εληνιή ην ID ηεο θξάηεζεο θαη έπεηηα ζηέιλνπκε ζην SQL commnand object ηελ εληνιή εθηέιεζεο. Η αληίδξαζε ηνπ ζπζηήκαηνο καο απεηθνλίδεηαη ζην ζρήκα 37. 3.3.6 Δπιβεβαίωζη Αθίξεων χήμα 28. Διαγραφή κράτηςησ Δπηιέγνληαο απηήλ ηελ επηινγή ν ρξήζηεο ηνπ ζπζηήκαηνο κπνξεί λα θάλεη Δπηβεβαίσζε Άθημεο ηνπ Πειάηε ζηελ μελνδνρεηαθή κνλάδα. Δπηιέγνληαο Δπηβεβαίσζε Άθημεο εκθαλίδεηαη έλαο πίλαθαο κε όινπο ηνπο πειάηεο πνπ είλαη θαηαρσξεκέλνη ζην ζύζηεκα. Απηό πινπνηείηαη κε ην παξαθάησ SQL εξώηεκα: 43
SELECT [Id], [First], [Last], [Dob], [Gender], [Address], [Country], [Phone], [Email], [Card], [Info] FROM [Customers] Ο ρξήζηεο όηαλ επηιέμεη θάπνηνλ Πειάηε απηόκαηα εκθαλίδνληαη όιεο νη θξαηήζεηο ηνπ Πειάηε ζηηο νπνίεο δελ έρεη γίλεη αθόκε Δπηβεβαίσζε Άθημεο. Με ηελ κέζνδν FillData(),ε νπνία θαιείηαη θάζε θνξά πνπ ν ρξήζηεο επηιέγεη θάπνηνλ πειάηε, εκθαλίδνληαη όιεο νη θξαηήζεηο ηνπ πειάηε. //methodos gia na emfanisoume dedomena void FillData() // 1 // Open connection using (SqlCeConnection c = new SqlCeConnection("Data Source = Database1.sdf")) c.open(); // 2 // Create new DataAdapter using (SqlCeDataAdapter a = new SqlCeDataAdapter( "SELECT * FROM Bookings WHERE CustomerId='" + selectedrow.cells[0].value.tostring() + "' AND CheckIn='No'", c)) // 3 // Use DataAdapter to fill DataTable DataTable t = new DataTable(); a.fill(t); // 4 // Render data onto the screen datagridview2.datasource = t; datagridview2.clearselection(); false; if (datagridview2.rows.count == 0) datagridview2.visible = else datagridview2.visible = true; 44
χήμα 29. Check In 45
χήμα 30. Check in επιλεγμζνου πελάτη Αλ ν ρξήζηεο επηιέμεη ηελ θξάηεζε ελόο πειάηε ηόηε αλνίγεη έλα λέν παξάζπξν ην νπνίν πεξηέρεη ζηνηρεία ζρεηηθά κε ηνλ πειάηε θαη πιεξνθνξίεο πνπ αθνξνύλ ηελ θξάηεζε. //arxikopoiisi ton pedion me vasi ta stoixeia tis basis dedomenon private void initvaluescustomer(string l) try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeDataReader rdr = null; Id='" + l + "'", conn); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Customers WHERE 46
rdr = cmd.executereader(); while (rdr.read()) String[] s = new String[11]; s[0] = rdr[0].tostring(); s[1] = rdr[1].tostring(); s[2] = rdr[2].tostring(); s[3] = rdr[3].tostring(); s[4] = rdr[4].tostring(); s[5] = rdr[5].tostring(); s[6] = rdr[6].tostring(); s[7] = rdr[7].tostring(); s[8] = rdr[8].tostring(); s[9] = rdr[9].tostring(); s[10] = rdr[10].tostring(); textbox1.text = s[1]; textbox2.text = s[2]; datetimepicker1.text = s[3]; combobox1.selecteditem = s[4]; if (s[4] == "") combobox1.selectedindex = 0; textbox3.text = s[5]; textbox4.text = s[6]; textbox5.text = s[7]; textbox6.text = s[8]; textbox7.text = s[9]; textbox8.text = s[10]; conn.close(); 47
m.showdialog(); catch (Exception e2) Message m = new Message(e2.Message); //arxikopoiisi ton pedion me vasi ta stoixeia tis basis dedomenon private void initvaluesroom(string l) try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeDataReader rdr = null; l + "'", conn); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Rooms WHERE Id='" + rdr = cmd.executereader(); while (rdr.read()) String[] s = new String[5]; s[0] = rdr[0].tostring(); s[1] = rdr[1].tostring(); s[2] = rdr[2].tostring(); s[3] = rdr[3].tostring(); s[4] = rdr[4].tostring(); textbox11.text = s[1]; //domatio textbox10.text = s[3]; //plirofories combobox2.selecteditem = s[2]; textbox9.text = s[4]; //timh 48
conn.close(); catch (Exception e2) Message m = new Message(e2.Message); m.showdialog(); //arxikopoiisi ton pedion me vasi ta stoixeia tis basis dedomenon private void initvaluesbook(string l) try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeDataReader rdr = null; Id='" + l + "'", conn); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Bookings WHERE rdr = cmd.executereader(); while (rdr.read()) String[] s = new String[10]; s[0] = rdr[0].tostring(); s[1] = rdr[1].tostring(); s[2] = rdr[2].tostring(); s[3] = rdr[3].tostring(); s[4] = rdr[4].tostring(); s[5] = rdr[5].tostring(); s[6] = rdr[6].tostring(); 49
s[7] = rdr[7].tostring(); s[8] = rdr[8].tostring(); s[9] = rdr[9].tostring(); textbox12.text = s[5]; //from textbox13.text = s[6]; //to textbox14.text = s[7]; //days textbox15.text = s[8]; //payout conn.close(); catch (Exception e2) Message m = new Message(e2.Message); m.showdialog(); Αλ πξόθεηηαη γηα λέν πειάηε ηόηε είλαη απαξαίηεηε ε ζπκπιήξσζε όισλ ησλ πεδίσλ κε (*). Κάλνληαο Έιεγρν Άθημεο ε αληίζηνηρε θξάηεζε θαη ηα πεδία ηεο ελεκεξώλνληαη αλάινγα (πρ πεδίν CheckIn=Yes). Η παξαπάλσ ιεηηνπξγίεο πινπνηνύληαη κε SQL queries: "UPDATE Customers SET First='" + textbox1.text + "',Last='" + textbox2.text + "',Dob='" + datetimepicker1.text + "',Gender='" +combobox1.selecteditem.tostring() + "',Address='" + textbox3.text + "',Country='" + textbox4.text + "',Phone='" + textbox5.text + "',Email='" + textbox6.text + "',Card='" + textbox7.text + "',Info='" + textbox8.text + "' WHERE Id='" +cid + "'" UPDATE Bookings SET CheckIn='Yes' WHERE Id='" + bid + "'" 50
χήμα 31. Επιβεβαίωςη Check in Πελάτη 3.3.7 Δπιβεβαίωζη Ανασωπήζεων Δπηιέγνληαο απηήλ ηελ επηινγή ν ρξήζηεο ηνπ ζπζηήκαηνο κπνξεί λα θάλεη Δπηβεβαίσζε Αλαρώξεζεο ηνπ Πειάηε από ην μελνδνρείν. Δπηιέγνληαο απηή ηελ ιεηηνπξγία εκθαλίδεηαη έλαο πίλαθαο κε όινπο ηνπο πειάηεο πνπ έρνπλ θάλεη θξαηήζεηο κε Δπηβεβαίσζε Άθημεο αιιά δελ έρνπλ θάλεη αθόκα Δπηβεβαίσζε Αλαρώξεζεο. Δπηιέγνληαο ηελ επηζπκεηή θξάηεζε ελεξγνπνηείηε ε ιεηηνπξγία ηεο επηβεβαίσζεο αλαρώξεζεο ηνπ πειάηε. //make check out private void button1_click(object sender, EventArgs e) if (datagridview2.visible == false selectedrow2==null) Message m = new Message("Επιλέξτε κράτηςη!"); else 51
try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeCommand cmd = new SqlCeCommand("UPDATE Bookings SET CheckOut='Yes' WHERE Id='" + selectedrow2.cells[0].value.tostring() + "'", conn); cmd.executenonquery(); conn.close(); Message m = new Message("CheckOut επιτυχέσ!"); m.showdialog(); this.close(); catch (Exception e1) Message m = new Message(e1.Message); m.showdialog(); 52
χήμα 32. Check Out Πελατϊν 3.3.8 Ιζηοπικό κπαηήζεων Μέζσ απηήο ηεο ιεηηνπξγίαο ηεο εθαξκνγήο παξέρεηαη ε δπλαηόηεηα ζηνλ ρξήζηε λα κπνξεί λα δεη όιεο ηηο θξαηήζεηο πνπ έρνπλ πξαγκαηνπνηεζεί θαη ζε πνηεο από απηέο έρεη γίλεη επηβεβαίσζε άθημεο θαη ζε πνηεο έρεη γίλεη επηβεβαίσζε αλαρώξεζεο. Η εκθάληζε ηνπ ηζηνξηθνύ ησλ θξαηήζεσλ ζηνλ πίλαθα γίλεηαη κε ηελ κέζνδν FillData() ε νπνία θαιείηαη κε ηελ αξρηθνπνίεζε ηεο θόξκαο. //methodos gia na emfanisoume dedomena void FillData() // 1 // Open connection 53
using (SqlCeConnection c = new SqlCeConnection("Data Source = Database1.sdf")) c.open(); // 2 // Create new DataAdapter using (SqlCeDataAdapter a = new SqlCeDataAdapter( c)) "SELECT * FROM Bookings WHERE CheckIn='Yes' OR CheckOut='Yes'", // 3 // Use DataAdapter to fill DataTable DataTable t = new DataTable(); a.fill(t); // 4 // Render data onto the screen datagridview1.datasource = t; datagridview1.clearselection(); 54
χήμα 33. Ιςτορικό κρατήςεων public HistoryView(String cid,string bid, String rid) InitializeComponent(); initvaluescustomer(cid); initvaluesroom(rid); initvaluesbook(bid); private void button4_click(object sender, EventArgs e) this.close(); //arxikopoiisi ton pedion me vasi ta stoixeia tis basis dedomenon private void initvaluescustomer(string l) try 55
SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeDataReader rdr = null; Id='" + l + "'", conn); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Customers WHERE rdr = cmd.executereader(); while (rdr.read()) String[] s = new String[11]; s[0] = rdr[0].tostring(); s[1] = rdr[1].tostring(); s[2] = rdr[2].tostring(); s[3] = rdr[3].tostring(); s[4] = rdr[4].tostring(); s[5] = rdr[5].tostring(); s[6] = rdr[6].tostring(); s[7] = rdr[7].tostring(); s[8] = rdr[8].tostring(); s[9] = rdr[9].tostring(); s[10] = rdr[10].tostring(); textbox1.text = s[1]; textbox2.text = s[2]; datetimepicker1.text = s[3]; combobox1.selecteditem = s[4]; textbox3.text = s[5]; textbox4.text = s[6]; textbox5.text = s[7]; 56
textbox6.text = s[8]; textbox7.text = s[9]; textbox8.text = s[10]; conn.close(); catch (Exception e2) Message m = new Message(e2.Message); m.showdialog(); //arxikopoiisi ton pedion me vasi ta stoixeia tis basis dedomenon private void initvaluesroom(string l) try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeDataReader rdr = null; l + "'", conn); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Rooms WHERE Id='" + rdr = cmd.executereader(); while (rdr.read()) String[] s = new String[5]; s[0] = rdr[0].tostring(); s[1] = rdr[1].tostring(); s[2] = rdr[2].tostring(); 57
s[3] = rdr[3].tostring(); s[4] = rdr[4].tostring(); textbox11.text = s[1]; //domatio textbox10.text = s[3]; //plirofories combobox2.selecteditem = s[2]; textbox9.text = s[4]; //timh conn.close(); catch (Exception e2) Message m = new Message(e2.Message); m.showdialog(); //arxikopoiisi ton pedion me vasi ta stoixeia tis basis dedomenon private void initvaluesbook(string l) try SqlCeConnection conn = new SqlCeConnection(); conn.connectionstring = "Data Source = Database1.sdf"; conn.open(); SqlCeDataReader rdr = null; Id='" + l + "'", conn); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Bookings WHERE rdr = cmd.executereader(); while (rdr.read()) 58
String[] s = new String[10]; s[0] = rdr[0].tostring(); s[1] = rdr[1].tostring(); s[2] = rdr[2].tostring(); s[3] = rdr[3].tostring(); s[4] = rdr[4].tostring(); s[5] = rdr[5].tostring(); s[6] = rdr[6].tostring(); s[7] = rdr[7].tostring(); s[8] = rdr[8].tostring(); s[9] = rdr[9].tostring(); textbox12.text = s[5]; //from textbox13.text = s[6]; //to textbox14.text = s[7]; //days textbox15.text = s[8]; //payout conn.close(); catch (Exception e2) Message m = new Message(e2.Message); m.showdialog(); 59
χήμα 34. Πληροφορίεσ Ιςτορικοφ κράτηςησ 60
Σςμπεπάζμαηα Σηελ επνρή ηεο ξαγδαίαο αλάπηπμεο Η/Υ ζε ζπλδπαζκό κε ηελ ηαρύηαηε κεηάδνζε πιεξνθνξηώλ, πνηθίισλ κνξθώλ, ην.net Framework έρεη πιένλ θαηαζηεί ην πεξηβάιινλ εθείλν γηα ην νπνίν αλαπηύζζεηαη θώδηθαο. Τν.NET Framework είλαη έλα πεξηβάιινλ ην νπνίν ππνζηεξίδεη αλάπηπμε θαη εθηέιεζε θαηαλεκεκέλσλ εθαξκνγώλ πνπ βαζίδνληαη ζε ζπζηαηηθά. Μεγάιν πιενλέθηεκα απηήο ηεο πιαηθόξκαο είλαη όηη επηηξέπεη ζε δηαθνξεηηθέο γιώζζεο πξνγξακκαηηζκνύ λα ζπλεξγάδνληαη παξέρνληαο ραξαθηεξηζηηθά αζθαιείαο θαη κεηαθεξηόηεηαο. Τν πιαίζην ηνπ.net καο επηηξέπεη λα αλαπηύμνπκε γξήγνξα εθαξκνγέο ησλ windows γηα ρξήζε ζε επηηξαπέδηνπο Η/Υ. Μία από ηηο γξαθηθέο δηεπαθέο ρξήζηε πνπ κπνξνύλ λα ρξεζηκνπνηεζνύλ κε ηα Windows Forms είλαη ην DataGridView όπνπ εκθαλίδεη αληηθείκελν δεδνκέλσλ ρξεζηκνπνηώληαο έλα πίλαθα πνπ απνηειείηαη από γξακκέο θαη ζηήιεο. Με ηελ ρξήζε Windows Forms κπνξνύκε λα αλαπηύμνπκε έμππλεο εθαξκνγέο γηα πειάηεο νη νπνίεο είλαη πινύζηεο ζε γξαθηθά, είλαη εύθνιεο ζηελ εγθαηάζηαζε θαη ελεκέξσζε, κπνξνύλ λα ιεηηνπξγήζνπλ όηαλ ζπλδεζεί ή λα απνζπλδεζεί ην Internet, θαη κπνξνύλ λα έρνπλ πξόζβαζε ζηνλ ηνπηθό ππνινγηζηή κε έλα πην αζθαιή ηξόπν από ηηο παξαδνζηαθέο Windows-based εθαξκνγέο. Σπλήζσο νη εθαξκνγέο κε ρξήζε Windows Forms ρηίδνληαη κε ηελ πξνζζήθε ειέγρνπ ζε θόξκεο θαη ηελ αλάπηπμε απαληήζεσλ - απνηειεζκάησλ ζηηο ελέξγεηεο ηνπ ρξήζηε, όπσο ην θιηθ ηνπ πνληηθηνύ ή ησλ πιήθηξσλ. Όηαλ έλαο ρξήζηεο θάλεη θάηη ζηε θόξκα καο ή ζε κία από ηνπο ειέγρνπο ηεο, ε δξάζε δεκηνπξγεί έλα γεγνλόο. Η αίηεζή καο αληηδξά ζε απηά ηα γεγνλόηα, ρξεζηκνπνηώληαο θώδηθα (ζηελ πεξίπησζε καο C#), θαη επεμεξγάδεηαη ηα γεγνλόηα όηαλ απηά ζπκβαίλνπλ. Με ην Visual Studio Designer drag-and-drop Windows Forms, κπνξνύκε λα δεκηνπξγήζνπκε εύθνια εθαξκνγέο ησλ Windows Forms. Απιά επηιέγνπκε ηα ζηνηρεία ειέγρνπ θαη ηα πξνζζέηνπκε ζην ζεκείν πνπ ζέινπκε ζηε θόξκα καο. Πνιιέο από ηηο εθαξκνγέο πνπ πινπνηνύκε πξέπεη λα εκθαλίδνπλ δεδνκέλα από κηα βάζε δεδνκέλσλ, έλα αξρείν XML, XML Web ππεξεζία, ή άιιε πεγή δεδνκέλσλ. Τα Windows Forms κέζσ ηνπ DataGridView, εκθαλίδνπλ ηέηνηα δεδνκέλα ππν κνξθή πίλαθα. 61