• Nenhum resultado encontrado

Ανάπτυξη βάσης για καταχώρηση κλήσεων

N/A
N/A
Protected

Academic year: 2023

Share "Ανάπτυξη βάσης για καταχώρηση κλήσεων"

Copied!
88
0
0

Texto

(1)

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΤΕΙ ΚΑΒΑΛΑΣ

Πτυχιακή Εργασία

ΑΝΑΠΤΥΞΗ ΒΑΣΗΣ ΓΙΑ Κ Α Τ Α Χ Ω ΡΗ Σ Ε ΚΛΗΣΕΩΝ

Σχεδίαση-Τλοποίηση: ΜΑΤΙΔΗΣ ΧΡΙΣΤΟΔΟΥΛΟΣ

Εττιβλέπων καθηγητής: ΑΛεβίζος Θεόδωρος

Καβάλα 2006

(2)

Ευρετήριο

1 Εισαγωγή

1.1 Βασικές έννοιες της κΛήσης 1.2 Εφαρμογές και σκοπός των κΛήσεατν 1.3 Βασικά μέρη μίας κλήσης

σελ. 5 σελ. 5 σελ. 6 1.4 Υπολογισμός μίας κλήσης μέσω του προγράμματος σελ. 8

2 Ανάλυση προγράμματος

2.1 Εισαγωγή σελ. 10

2.2 Απαιτήσεις προγράμματος σελ. 10

2.3 Απατήσεις προγράμματος σελ. 14

2.4 Διάγραμμα ροής δεδομένων προγράμματος σελ. 18

3 Υλοποίηση προγράμματος

3.1 Γραφική υλοποίηση προγράμματος 3.2 Υλοποίηση κώδικα προγράμματος

σελ. 26 σελ. 36

4 Εγχειρίδιο 4.1 Εισαγωγή 4.2 Βασικό μενού 4.3 Μενού «Στοιχεία»

4.3.1 Μενού «Εταιρίες»

σελ. 65 σελ. 67 σελ. 69 σελ. 69

(3)

4.3.2 Μενού «Φορείς» σελ. 71

4.3.3 Μενού «Προσωπικό» σελ. 73

4.4 Μενού «Κλήσεις» σελ. 75

4.4.1 Μενού «Εισαγωγή νέας Κλήσης» σελ. 75

4.4.2 Μενού «Ενημέρωση Κλήσης» σελ. 78

4.5 Μενού «Εκτυπώσεις» σελ. 84

4.5.1 Φόρμα εκτύπωσης «ανά Εταιρία» σελ. 84 4.5.2 Φόρμα εκτύπωσης «ανά Υπάλληλο» σελ. 86 4.5.3 Φόρμα εκτύπωσης «ανά Μήνα» σελ. 87

5 Βιβλιογραφία σελ. 88

(4)

1. Εισαγωγή

(5)

1.1 Βασικές έννοιες της κλήσης

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

1.2 Εφαρμογές και σκοπός των κλήσεων

Υπάρχουν διάφορες εταιρίες οι οποίες αναλαμβάνουν την εκτέλεση κάποιας εργασίας για λογαριασμό κάποιας άλλης εταιρίας. Αυτό γίνεται για διάφορους λόγους όπως η απόσταση από τον πελάτη της.

Αν υποθέσουμε ότι δουλεύουμε για μία εταιρία η οποία αναλαμβάνει να διεκπεραιώσει την εργασία μιας άλλης θα πρέπει να έχουμε ένα καλό σύστημα μηχανογράφησης για να είμαστε σωστά οργανωμένοι με τις δουλειές μας. Μία καλή λύση για να μη χάνουμε τα δεδομένα μας και για να λειτουργεί η εταιρία μας πιο γρήγορα είναι να έχουμε ένα πρόγραμμα στο οποίο θα καταχωρούνται οι εργασίες που μας αναθέτουν και οι οποίες ονομάζονται κλήσεις.

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

(6)

στοιχεία της εταιρίας, δηλαδή όνομα, διεύθυνση, ΑΦΜ, μέχρι τα στοιχεία της εταιρίας ττου θα πάμε να πραγματοποιήσουμε την κλήση και οι οποίες ονομιάζονται φορείς. Το πρόγραμμα θα κάνει όποιους υπολογισμούς χρειάζεται και θα αποθηκεύονται στη βάση δεδομένων του προγράμματος. Από εκεί θα μπορούμε να επεξεργαστούμε τα στοιχεία της κλήσης καθώς επίσης και να κρατάμε ένα αρχείο με τα έσοδα - έξοδα της εταιρίας μας. Με αυτόν τον τρόπο θα παρατηρούμε από ποιες εταιρίες έχουμε ουσιαστικά κέρδη και από ποιες δεν έχουμε ώστε δεν αξίζει να συνεργαζόμαστε.

1.3 Βασικά μέρη μίας κλήσης

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

Τα στοιχεία της εταιρίας είναι:

• Το όνομα της

• Η διεύθυνση της

• Το ΑΦΜ της

• Το τηλέφωνό της

(7)

Την αξία εργασίας ανά ώρα

Τα στοιχεία των φορέων είναι;

• Το όνομα του

• Η διεύθυνσή του

• Το τηλέφωνό του

• Την χιλιομετρική απόσταση από την εταιρία μας μέχρι αυτόν

Τα στοιχεία των υπαλλήλων μας είναυ

• Το όνομα του

• Η διεύθυνσή του

• Το τηλέφωνό του

Σε μία κλήση δίνουμε διάφορα δεδομένα τα οποία τα επεξεργάζεται το πρόγραμμα και μας δίνει τα διάφορα αποτελέσματα όπως το συνολικό κέρδος που επωφεληθήκαμε από αυτήν. Το συνολικό κέρδος της κλήσης μας δίνεται από το πρόγραμμα σύμφωνα με διάφορα στοιχεία που του δίνουμε.

Κάποια από αυτά τα στοιχεία φαίνονται παρακάτω.

Η τιμή της βενζίνης που ξοδεύουμε ανά χιλιόμετρο Πόση ώρα διήρκεσε η κλήση

(8)

• Τι άΛΛα έξοδα είχαμε κατά την διεκπεραίακτη της κλήσης

Όλα αυτά τα στοιχεία λαμβάνονται αηό το πρόγραμμα και αυτό μας παρέχει τα ακριβή αποτελέσματα.

1.4 Υπολογισμός μίας κλήσης μέσω του προγράμματος

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

• Ταχύτερη εύρεση μίας κλήσης

• Φλικό περιβάλλον στο χρήστη

• Αποθήκευση των δεδομένων και των αποτελεσμάτων σε μια βάση δεδομένων

• Δυνατότητα επεξεργασίας και τροποποίησης των αποτελεσμάτων από τον ίδιο το χρήστη

• Ελαχιστοποίηση του κόστους της εταιρίας

(9)

2. Ανάλυση προγράμματος

(10)

2.1 Εισαγωγή

Σκοπός του προγράμματος είναι να καταχιυρεί τα στοιχεία μιας κλήσης από κάποια εταιρία σε μια βάση δεδομένατν.

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

2.2 Απαιτήσεις προγράμματος

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

1. Εισαγωγή στοιχείων κλήσης

Ο κωδικός της κλήσης

Η διάρκεια της κλήσης ( κάθε 30 λεπτά )

Τα χιλιόμετρα που θα διανυθούν ως τον τόπο της κλήσης Η ημερομηνία λήφης της κλήσης

(11)

Η ημερομηνία εκτέλεσης της κλήσης Αλλα έξοδα ( εισιτήρux πλοίων κλπ)

Περιγραφή των εξόδων που πραγματοποιήθηκαν Αριθμός κλήσης

Περιγραφή εργασίας

2. Εισαγωγή στοιχείων προσωπικού

Ο χρήστης θα εισάγει τον υπάλληλο που θα πραγματοποιεί την κλήση. Για τον καθένα υπάλληλο θα γνωρίζουμε το τηλέφωνό και την διεύθυνσή του. Οι υπάλληλοι θα παραμένουν στην μνήμη για να μην χρειάζεται να τους καταχωρούμε ξανά. Επίσης θα έχουμε την δυνατότητα να διαγράφουμε κάποιον υπάλληλο.

3. Εισαγωγή του φορέα της κλήσης

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

(12)

4. Επιλογή εταιρείας

Ο χρήστης θα μπορεί να επιΛέξει για ποια εταιρία θα πραγματοποιήσει την κλήση. Για κάθε εταιρία θα γνωρίζουμε το τηλέφωνό, τη διεύθυνσή του, το ΑΦΜ του καθώς και την αζία σε ευρώ που κοστίζει η κάθε ώρα εργασίας. Οι εταιρίες που θα καταχωρεί θα παραμένουν στην μνήμη του προγράμματος ώστε να μην χρειάζεται να την καταχωρήσει ξανά. Επίσης θα έχουμε την δυνατότητα να διαγράψουμε κάποια εταιρία.

5. Εμφάνιση των αποτελεσμάτων στην οθόνη και αποθήκευσή τους.

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

(13)

Το πρόγραμμα θα εμφανίζει κατ'επιΛογη του χρήστη διάφορα στατιστικά όπως :

• Τι έχει κάνει κάθε εργαζόμενος για μια χρονική περίοδο.

• Τι έχουμε κάνει για μια εταιρεία για μια χρονική περίοδο.

• Τι έχουμε κάνει για κάθε πελάτη για μια χρονική περίοδο.

• Τι χρήματα έχουμε λάβειγια μια χρονική περίοδο.

6. Στατιστικά προγράμμιατος

7. Απαίτηση υλοποίησης

Το πρόγραμμα θα υλοποιηθεί με το πρόγραμμα C++ Builder 6.0 της Borland , θα είναι φιλικό προς το χρήστη και ευέλικτο.

Θα λειτουργεί σε όλες τις εκδόσεις των Windows και χωρίς ιδιαίτερες απαιτήσεις για κάθε υπολογιστικό σύστημα που το χρησιμοποιεί.

(14)

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

Οι προδιαγραφές του προγράμματος είναυ

> Ο κωδικός της κλήσης θα είναι εξαψήφιος και θα αποτελείται από μια μεταβλητή τύπου integer.

> Η διάρκεια της κλήσης χρεώνεται κάθε 30 λεπτά, δηλαδή αν διαρκέσει 40 λεπτά χρεώνεται 1 ώρα. Είναι τύπου double θα μετρείται σε ώρες.

> Αν εισαχθούν τιμές εκτός ορίων το σύστημα θα πρέπει να προειδοποιεί το χρήστη με κάποιο μήνυμα λάθους.

2.3 Προδιαγραφές προγράμματος

> Στην περίπτωση που ο χρήστης εισάγει στο σύστημα κάποιο χαρακτήρα που δεν είναι αριθμός ( π.χ. Α , ] , Ε , λ , Ε , η , & , ~ κ.α.), το σύστημα θα πρέπει να τον προειδοποιεί με μήνυμα λάθους.

(15)

Τα χιΛιόμετρα θα είναι μια μεταβλητή τύπου integer και παίρνει τιμές από 0 έως 999.

Η αξία των χιλιομέτρων είναι μια μεταβλητή τύπου double και παίρνει τιμές από 0 έως 10000 euro.

Η ημερομηνία λήψης της κλήσης χωρίζεται σε 3 ενότητες , μέρες, μήνες και χρόνια. Είναι μεταβλητές τύπου integer και παίρνουν τιμές από 0 έως 31 για τις μέρες, 12 για τους μήνες και 99 για τα χρόνια .

Η ημερομηνία εκτέλεσης της κλήσης χωρίζεται σε 3 ενότητες , μέρες , μήνες και χρόνια. Είναι μεταβλητές τύπου integer και παίρνουν τιμές από 0 έως 31 για τις μέρες , 12 για τους μήνες και 99 για τα χρόνια .

Ο αριθμός της κλήσης είναι μια μεταβλητή τύπου integer 10 ψηφίων.

> Το βασικό μενού θα περιέχει τα εξής μενού:

• Αρχείο

• Στοιχεία

• Κλήσεις

• Εκτυπώσεις

(16)

> Στο μενού «Αρχείο» θα μπορούμε να εισάγουμε την τιμή της βενζίνης που υπάρχει στην αγορά την τρέχουσα χρονική στιγμή. Η τιμή της βενζίνης είναι τύπου double. Επίσης στο μενού «Αρχείο» θα υπάρχει και η δυνατότητα της εξόδου από το πρόγραμμα.

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

> Στο μενού «Κλήσεις» ο χρήστης θα έχει τη δυνατότητα να εισάγει μία νέα κλήση καθώς και να την ενημερώνεε

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

Μόνο με τον σωστό αριθμό κλήσης θα μπορεί να επεξεργαστεί και να ενημερώσει την κλήση ειδάλλως θα εμφανίζει ένα μήνυμα λάθους.

(17)

Στο μενού «Εκτυπώσεις» ο χρήστης θα έχει τη διτνατότητα να εκτυπώσει όλα τα στατιστικά για μια χρονική περίοδο.

Θα μπορεί να επιΛέξει να δει τα στατιστικά για κάθε υπάλληλο και για κάθε εταιρία ανά μήνα καθώς επίσης και μια γενική κατάσταση των κλήσεων ανά μήνα.

(18)

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

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

Ο πίνακας για τις κλήσεις είναι;

2.4 Διάγραμμα ροής δεδομένων προγράμματος

kliseis Code etairia_code prosopiko_code

foreis_code Arithm_klisis

Hmer_lipsi Hmer_ektelesi

Aksia_xlm Ora Aksia AUa_eksoda Perigrafi_ergasias Perigrafi_eksodon

(19)

ο πίνακας για τις εταιρίες είναι:

Ο πίνακας για τους φορείς είναι:

Forets Code name tel Dieythinsi

xlm

O πίνακας για το προσωπικό είναι:

Prosopiko Code name tel Dieythinsi

(20)

To διάγραμμα λοιπόν θα είναι:

(21)

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

«σπάμε» τον πίνακα "klisis" σε δύο επιμέρους πίνακες. Έτσι λοιπόν κρατάμε στον πρώτο πίνακα τα βασικά στοιχεία της κλήσης και στον δεύτερο πίνακα κρατάμε τα στοιχεία που μεταβάλλοντας όπως φαίνεται και από τους καινούργιους πίνακες.

Ο πίνακας για τις κλήσεις είναυ

kliseis Code etairia_code foreis_code Arithm_klisis

Hmer_lipsi

O πίνακας για την εκτέλεση της κλήσης είναι:

E ktelesijd isis klisis_code prosopiko_code

Hmer_ektelesi

(22)

Aksia_xlm Ora Aksia Alla_eksoda Perigrafi_ergasias Perigrafi_eksodon

O πίνακας για τις εταιρίες είναι:

Code name tel afm Dieythinsi aksia_ergasias

O πίνακας για τους φορείς είναι:

Forets Code name tel

(23)

Dieythinsi xlm

O πίνακας για το προσωπικό ειναυ

Prosopiko Code name tel Dieythinsi

(24)

Έτσι λοιπόν το καινούργιο διάγραμμα θα είναυ

(25)

3. Υλοποίηση προγράμματος

(26)

3.1. Γραφική υλοποίηση προγράμματος

Για την δημιουργία του γραφικού περφάΛΛοντος του προγράμματος χρησιμοποιήθηκαν κάποιες φόρμες και στοιχεία τα οποία εμπεριέχονται ως έτοιμες επιΛογές στο πρόγραμμα Borland C++ 6.0.

Για παράδειγμα η δημιουργία του βασικού μενού απαιτούσε απλώς τη δημιουργία μιας φόρμας, η οποία ονομάστηκε

«Καταχώριση κλήσεων». Στη συνέχεια, τοποθετήσαμε ένα Bevel και μέσα σε αυτό εισάγαμε τρία Button τα οποία ανάλογα με το όνομά τους οδηγούν στις αντίστοιχες επιλογές. Για παράδειγμα το Button «Εταιρίες» οδηγεί στη φόρμα που δημιουργούμε τις εταιρίες ( EtairiaForm ), το Button «Φορείς» οδηγεί στη φόρμα που δημιουργούμε τους φορείς (ForeisForm) και τέλος το Button

«Προσωπικό» οδηγεί στη φόρμα που δημιουργούμε το προσωπικό της εταιρίας (ProsopikoForm).

Με τον ίδιο τρόπο τοποθετήσαμε και ένα δεύτερο Bevel που και μέσα σε αυτό εισάγαμε τρία Button τα οποία ανάλογα με το όνομά τους οδηγούν στις αντίστοιχες επιλογές. Το Button «Εισαγιυγή νέας Κλήσης» οδηγεί στη φόρμα της εισαγωγής της νέας κλήσης ( EisagogiKlisisForm ) , το Button «Ενημέρωση Κλήσης» οδηγεί στη φόρμα της ενημέρωσης της νέας κλήσης (SelectKlisiForm ) και τέλος το Button «Εκτυπώσεις ανά μήνα» οδηγεί στη φόρμα όπου εκτυπώνουμε όλα τα στοιχεία που θέλουμε ανά μήνα (EktuposeisMinaForm).

Έτσι λοιπόν με την βοήθεια της C++ Builder δημιουργοιτνται

(27)

εύκολα οι απαραίτητες φόρμες για την εμφάνιση του γραφικού περιβάλλοντος του προγράμματος. Με τον ίδιο τρόπο δημιουργούνται και οι υπόλοιπες φόρμες του προγράμματος. Ο κώδικας που δημιουργείται από την δημιουργία του γραφικού περιβάλλοντος ακολουθεί παρακάτω.

> Για τη φόρμα «SetupUnit» όπου εισάγουμε την τιμή της βενζίνης

TSetupForm *SetupForm;

//---

_fastcall TSetupForm::TSetupForin(TComponent* Chvner) : TForm(Owner)

//---

void_fastcall TSetupForm:;BitBtnlClick(TObject ^Sender)

//patwntas to button OK mas bgazei apo to parathiro //kai epistrefei mrOK gia na apithekeusei sto ini arxeio tin nea timi // tis venzinis

MainForm->TimiVenzinis = StrToFloat(Editl->Text);

(28)

ModalResult = mrOk;

If.

---

void_fastcall TSetupForm::BitBtn2Click(TObject ^Sender) I

//patwntas to button Cancel mas bgazei apo to parathiro //kai epistrefei mrCancel gia na mhn kanei tipota h mainform ModalResult = mrCancel;

//---

void_fastcall TSetupForm::FormShow(TObject ^Sender) {

//pliktrologw thn timh ths benzinis sto textEdit Editl->Text = FloatToStr(MainForm->TimiVenzinis);

} //-

void__fastcall TSetupForm::FormCreate(TObject ^Sender)

(29)

> Για να βγούμε από το πρόγραμμα από το μενού «Αρχείο» /

«Έξοδος» γράφουμε:

void__fastcall TMainForm::N3Click(TObject ’^Sender) {

Application->Terminate();

> Για το Button «Εταιρίες»

void__fastcall TMainForm::ButtonlClick(TObject ^Sender) (

EtairiaForm->ShowModal();

> Για το Button «Φορείς»

void_fastcall TMainForm::Button2Click(TObject ^Sender) I

ForeisForm->ShowModal();

(30)

> Για το Button «Προσωπικό»

void__fastcall TMainForm::Button3Click(TObject ^Sender) {

ProsopikoForm->ShowModal();

}

> Για TO Button «Εισαγωγή νέας Κλήσης»

void_fastcall TMainForm::Button4Click(TObject ^Sender) I

EisagogiKlisisForm->ShowModal();

}

> Για TO Button «Ενημέρωση Κλήσης»

void_fastcall TMainForm::Button5Click(TObject ^Sender) {

SelectKlisiForm->ShowModal();

(31)

> Για το Button «Εκτυπώσεις ανά μήνα»

void_fastcall TMainForm::Button7Click(TObject ^Sender) I

EktuposeisMinaForm->ShowModal();

1

> Για τη φόρμα «Εταιρίες»

Στη φόρμα εταιρίες δεν χρησιμοποιήσαμε πολύ κώδικα γιατί η λειτουργία της φόρμας είναι μια απλή ενημέρωση του πίνακα Forms.

Για να δούμε και να επεξεργαστούμε τα στοιχεία κάποιου πίνακα πρέπει να βάλουμε ένα component τύπου TTable στη φόρμα μας. Στο πεδίο TableName εμφανίζονται όλοι οι πίνακες που υπάρχουν στον υποφάκελο του προγράμματος μας, επιλέγουμε έναν και θέτουμε το πεδίο Active σε true. Ο πίνακας τώρα είναι έτοιμος για χρήση.

Για να μοιράσουμε τα δεδομένα σε άλλα components πρέπει να χρησιμοποιήσουμε ένα TDataSource, κατάλληλα συνδεδεμένο με τον πίνακα μέσο του πεδίου DataSet.

Για την εμφάνιση - τροποποίηση των πεδίων από τον πίνακα πρέπει να προσθέσουμε διάφορα TDBEdit όσα και με τον αριθμό των πεδίων. Για διάφορους τύπους πεδίων υπάρχουν και διαφόρων τύπου TDB components (π.χ. για bool πεδίο υπάρχει το

(32)

TDBCheckBox). Για να συνδέσουμε ένα TDB component με την βάση πρέπει τροποποιήσουμε δύο πεδία, το DataSource και το DataField οπού ονομάζει το πεδίο.

Γ ια την EtairiaForm:

DB TableName Datasource DBEdits

Etairia.db etairiaTable EtairiaDatasource Editl -> (Name) Edit2->(Tel) Edit3->(Afm) Edit4->( Dieuthinsi) Edit5->(Aksia_ergasias)

Για να μετακινούμαστε μέσα στην βάση, και να την τροποποιούμε, χρειαζόμαστε ένα TDBNavigator οπού απλώς θέτουμε το TDataSource.

TEtairiaForm *EtairiaForm;

//---

__fastcall TEtairiaForm::TEtairiaForm(TComponent* Owner) : TForm(Owner)

(33)

> Για τη φόρμα «Φορείς»

Στη φόρμα φορείς εργαστήκαμε με τον ίδιο τρόπο όπως και με τη φόρμα εταιρία. Όπως και προηγουμένως χρειαστήκαμε ένα component τύπου TTable στη φόρμα μας και ένα TDataSource, κατάΑΑηΛα συνδεδεμένο με τον πίνακα. Στη φόρμα φορείς όμιυς έχουμε τέσσερα πεδία που θα χρειαστεί να εμφανίσουμε - τροποποιήσουμε. Επίσης για να μετακινούμαστε μέσα στην βάση, και να την τροποποιούμε, χρειαζόμαστε ένα TDBNavigator οπού απλώς θέτουμε το TDataSource.

Έτσι όπως και προηγουμένως έχουμε:

Για την ForeisForm:

DB TableName Datasource DBEdits

Foreis.db foreisTable ForeisDatasource Editl -> (Name) Edit2->(Tel) Edit3->( Dieuthinsi) Edit5->(Xlm)

TForeisForm *ForeisForm;

//.--- _fastcall TForeisForm::TForeisForm(TComponent* Owner)

(34)

: TForm(Owner)

> Για τη φόρμα «Προσωπικό»

Στη φόρμα προσωπικό εργαστήκαμε με τον ίδιο τρόπο όπως και με τις δύο προηγούμενες φόρμες. Όπως και προηγουμένως χρειαστήκαμε ένα component τύπου TTable στη φόρμα μας και ένα TDataSource κατάΛΛηλα συνδεδεμένο με τον πίνακα. Στη φόρμα προσωπικό όμως έχουμε τρία πεδία που θα χρειαστεί να εμφανίσουμε - τροποποιήσουμε. Για να μετακινούμαστε μέσα στην βάση, και να την τροποποιούμε, χρειαζόμαστε ένα TDBNavigator οπού ατιλώς θέτουμε το TDataSource.

Έτσι όπως και προηγουμένως έχουμε:

Για το ProsopikoForm έχουμε:

DB TableName Datasource DBEdits

Prosopiko.db prosopikoTable ProsopikoDatasource Editl -> (Name) Edit2->(Tel) Edit3->(Dieuthinsi)

(35)

TProsopikoForm TrosopikoForm;

//---

__fastcall TProsopikoForm::TProsopikoForm{TComponent* Owner) : TForm(Owner)

(36)

3.2 Τλοττοίηση κώδικα προγράμματος

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

> Εισαγωγή καινούργιας κλήσης.

Η εισαγωγή μία κλήσης δεν είναι τόσο εύκολη επειδή χρησιμοποιεί ξένα κλειδιά τα etairia_code και foreis_code.

Για τους πίνακες Foreis και Etairia πρέπει να εμφανίζουμε όλες τις εγγραφές τους με βάση το πεδίο name και να αφήνουμε τον χρήστη να επιλέξει. Από την επιλογή του ονόματος πρέπει να μπορούμε να ανακτήσουμε τον κωδικό που το αντιπροσωπεύεε

Για να εμφανίζουμε τα στοιχεία του πίνακα etairies.db χρησιμοποιούμε ένα comboBox.

Κατά την εμφάνιση της φόρμας γεμίζουμε το comboBox με το πεδίο Name του πίνακα etairies.

EtairiaQuery->Close();

EtairiaQuery->Open();

(37)

ComboBoxl->Items->Clear();

while (!EtairiaQuery->Eof) {

ComboBoxl->Items->Add(EtairiaQuery->FieldByName("Name")

>AsString);

EtairiaQuery->Next();

Χρησιμοποιούμε ένα query για την ανάκτηση δεδομένατν από τον πίνακα και δεν χρησιμοποιούμε τον πίνακα απευθείας

EtairiaQuery ->SQL = select code, name from Etairia

όταν o χρήστης επιλέγει μία εταιρία σε κάποια φόρμα, τότε αυτή η εταιρία πρέπει να γίνεται η προεπιλεγμένη σε οποιαδήποτε φόρμα χρησιμοποιεί το παραπάνω ComboBox. Αφού δημιουργήσουμε και γεμίσουμε το παραπάνω component με στοιχεία τότε θέτουμε και την ενεργή εταιρία μέσω του MainForm->iTrexonEtairia.

ComboBoxl->ItemIndex = MainForm->iTrexonEtairia;

κάθε φορά που αλλάζει περιεχόμενο το παραπάνω component πρέπει να ενημερώσουμε την μεταβλητή MainForm->iTrexonEtairia

(38)

void _fastcall TEisagogiKlisisForm::ComboBoxlCharige(TObject

^Sender) {

MainForm->iTrexonEtairia = ComboBoxl->ItemIndex;

Αντίστοιχα εμφανίζουμε και τα περιεχόμενα του Foreis.db στο listbox.

ForeisQuery->SQL = select code, name from foreis

F oreisQuery->Close();

ForeisQuery->Open();

ListBoxl->Items->Clear();

while (!ForeisQuery*>Eof)

ListBoxl->ltems->Add(ForeisQuery->FieldByName("Name")-

>AsString);

ForeisQuery->Next();

ListBoxl->ltemlndex = 0;

(39)

Για να καθαρίσουμε το πεδίο εισαγωγής του Arithm_klisis και να ενημερώσουμε το hmerjipsi με την τρέχον ημερομηνία :

Editl->Text="";

DateTimePickerl->Date = Date();

Editl->SetFocus();

Για να εισάγουμε μία κλήση manual πρέπει να φτιάξουμε ένα insert ερώτημα και να το τροφοδοτήσουμε με τα κατάλληλα πεδία.

insertKliseisQuery->SQL =

insert into kliseis (etairia_code, foreis_code, Arithm_klisis, Hmerjipsi)

VALUES (:etairia_code, :foreis_code, :Arithm_klisis, ;Hmer_lipsi) όπως παρατηρούμε χρησιμοποιεί παραμέτρους για την εισαγωγή των τιμών.

Για να βρούμε τα σωστά στοιχεία : int ECode, FCode;

EtairiaQuery->First();

for (int i=0; i<ComboBoxl->ItemIndex; i+-t-) EtairiaQuery->Next();

l.ECode = EtairiaQuery->FieldByName("Code")->AsInteger;

ForeisQuery->First();

for (int i=0; i<ListBoxl->ItemIndex; i++)

(40)

ForeisQuery->Next();

2.FCode = ForeisQuery->FieldByName("Code")->AsInteger;

3.StrToInt(Editl->Text);

4.DateTimePickerl->Date;

Για να ελέγξουμε εάν υπάρχει ίδια εγγεγραμμένη κλήση :

//prepei na elegksoume ean uparxi allh klisi me idio //arithmo klisis stin idia etairia.

//Ekteloume ena query me ta stoixeia tis klisis pou prokitai //na eisagoume kai ean epistrepsei egrafi tote uparxei idi kataxorimenh ayti i //klisi.

CheckVaIidArithmKLisisQuery->Close();

CheckValidArithmKlisisQuery->ParamByName("etairia_code")-

>AsInteger = ECode;

CheckValidArithmKlisisQuery->ParamByName("Arithm_klisis")-

>AsInteger = StrToInt(Editl->Text);

CheckValidArithmKlisisQuery->Open();

Εάν υπάρχει ίδια κλίση τότε μήνυμα, if (!CheckValidArithmKlisisQuery->IsEmptyO)

{

MessageDlgC'H κλήση με κωδικό " + Editl->Text + " στην εταιρία

(41)

" + ComboBoxl->Items->operator [](ComboBoxl->ItemIndex)+" ήδη unaQxeu",

mtError, TMsgDlgButtons() « mbOK, 0);

return;

)

CheckValidArithmKlisisQuery->SQL = select

from kliseis

where etairia_code=:etairia_code and Arithm_kIisis=:Arithm_klisis

> Επιλογή κλήσης

Για τον πίνακα Etairia πρέπει να εμφανίζουμε όλες τις εγγραφές του με βάση το πεδίο name και να αφήνουμε τον χρήστη να επιλέζει. Από την επιλογή του ονόματος πρέπει να μπορούμε να ανακτήσουμε τον κωδικό που το αντιπροσώπευεl

Για να εμφανίζουμε τα στοιχεία του πίνακα etairies.db χρησιμοποιούμε ένα comboBox.

Κατά την εμφάνιση της φόρμας γεμίζουμε το comboBox με το πεδίο Name του πίνακα etairies.

//gia na valoume tis etairies sto combobox.

(42)

EtairiaQuery->aose();

EtairiaQuery->Open();

ComboBoxl ->Items->Clear();

while (!EtairiaQuery->Eof) {

ComboBoxl->Items->Add(EtairiaQuery->FieldByName("Name")-

>AsString);

EtairiaQuery->Next();

I

ComboBoxl->ItemIndex = MainForm->iTrexonEtairia;

Editl->Text="";

Editl->SetFocus();

Χρησιμοποιούμε ένα query για την ανάκτηση δεδομένων από τον πίνακα και δεν χρησιμοποιούμε τον πίνακα απευθείας

EtairiaQuery ->SQL = select code,name from Etairia

όταν o χρήστης επιΛέγει μία εταιρία σε κάποια φόρμα, τότε αυτή η εταιρία πρέπει να γίνεται η προεπιΛεγμένη σε οποιαδήποτε φόρμα χρησιμοποιεί το παραπάνιο ComboBox. Αφού δημιουργήσουμε και γεμίσουμε το παραπάνω component με στοιχεία τότε θέτουμε και

(43)

την ενεργή εταιρία μέσω του MainForm->iTrexonEtairia.

ComboBoxl->ItemIndex = MamForm->iTrexonEtairia;

κάθε φορά που οΛΛάζει περιεχόμενο το παραπάνω component πρέπει να ενημερώσουμε την μεταβλητή MainForm->iTrexonEtairia

void _fastcall TEisagogiKlisisForm::ComboBoxlChange(TObject

^Sender) {

MainForm->iTrexonEtairia = ComboBoxl->ItemIndex;

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

int ECode;

EtairiaQuery->First();

for (int i=0; i<ComboBoxl->ItemIndex; i++) EtairiaQuery->Next();

ECode = EtairiaQuery->FieldByName("Code")->AsInteger;

SelectKlisiQuery->Close();

(44)

SelectKlisiQuery->ParamByName("etairia_code")->AsInteger ECode;

SelectKlisiQuery->ParamByName("Arithin_klisis")->AsInteger StrToInt(Editl

->Text);

SeIectKlisiQuery->Open();

αυτό ελέγχει και αν δεν ισχύει αυτό τότε πετάει μήνυμα λάθους

if (SelectKIisiQuery->IsEmptyO)

MessageDlgC'H κλήση με κωδικό" + Editl->Text +" στην εταιρία

+ ComboBoxl->Items->operator [](ComboBoxl->ItemIndex) + " δεν ύπαρχε l", mtError, TMsgDlgButtons()« mbOK, 0);

αν δεν κάναμε λάθος και πληκτρολογήσαμε σωστά τον αριθμό κλήσης με την εταιρία τότε

EnimerosiKlisiFonn->SelectKlisiQuery->Close();

EnimerosiKlisiForm->SelectKlisiQuery

->ParamByName("etairia_code")->AsInteger = ECode;

EnimerosiKlisiForm->SelectKlisiQuery

->ParamByName("Arithm_klisis")->AsInteger

= StrToInt(Editl->Text);

(45)

EnimerosiKlisiForm->SelectKlisiQuery->Open();

EnimerosiKlisiForm->ShowModal();

SelectKlisiQuery ->SQL = select *

from kliseis

where etairia_code=:etairia_code and Arithm_klisis=:Arithm_klisis

> Ενημέρωση κλήσης

Fi ενημέρωση μιας κλήσης έχεισνηκεκριμένη διαδικασία. Θα πρέπει να λαμβάνει κλειδιά από τους υπόλοιπους πίνακες.

Για να εμφανίσουμε τα στοιχεία της κλήσης μέσα στη φόρμα της ενημέριοσης της κλήσης θα πρέπει να πάρω τα στοιχεία από την SelectKlisiQuery

//gia tin emfanisi ton stoixeion tis klisis

EtairiaLabel->Caption = SelectKlisiQuery->FieldByName("Etairia") ->AsString;

ForeasLabel->Caption = SelectKlisiQuery->FieldByName("Foreis")

(46)

->AsString;

Arithm_klisisLabel->Caption = SelectKlisiQuery ->FieldByName("Arithm_Klisis")->AsString;

Hmer_lipsiLabel->Caption = SelectKlisiQuery ->FieldByName("Hmer_lipsi")->AsString;

για την εμφάνιση των εκτελεσμένων ενεργειών της κΛήσης //gia tin emfanisi ton ektelesmenon energion tis klisis

EktelesmenesQuery->Close();

EktelesmenesQuery->ParamByName("Kliseis_code")->AsInteger = SelectKlisiQuery->FieldByName("code")->AsInteger;

EktelesmenesQuery->Open();

Εδώ θα χρησιμοποιήσουμε μια query η οποία χρησιμοποιεί και ξένα κΛειδιά

EktelesmenesQuery->SQL =

select Ektelesi_klisis.code,prosopiko.name as prosopiko, Fimer_ektelesi, ektelesi_klisis.code, aksia_xlm, ora, aksia, alla_eksoda from Ektelesi_klisis, prosopiko

where Kliseis_code = :Kliseis_code and prosopiko_code = prosopiko.code

Για να μοιράσουμε τα δεδομένα σε άΛΛα components πρέπει να χρησιμοποιήσουμε ένα TDataSource, καταΛΛηλα συνδεδεμένο

(47)

Tux τον πίνακα Prosopiko πρέπει να εμφανίζουμε όλες τις εγγραφές του με βάση το πεδίο name και να αφήνουμε τον χρήστη να επιΛέζει. Από την επιλογή του ονόματος πρέπει να μπορούμε να ανακτήσουμε τον κωδικό που το αντιπροσώπευεu

Για να εμφανίζουμε τα στοιχεία του πίνακα prosopiko.db χρησιμοποιούμε ένα comboBox.

Κατά την εμφάνιση της φόρμας γεμίζουμε το comboBox με το πεδίο Name του πίνακα prosopiko.

//gia tin emfanisi ton upalilon sto combo box.

ProsopikoQuery->Close();

ProsopikoQuery->Open();

ComboBoxl->Items->Clear();

while (!ProsopikoQuery->Eof) {

ComboBoxl->Items->Add(ProsopikoQuery-

>FieldByName("Name") ->AsString);

ProsopikoQuery->Next();

μέσο του πεδίου DataSet.

ComboBoxl->ItemIndex = 0;

(48)

Χρησιμοποιούμε ένα query (ProsopikoQuery ) για την ανάκτηση δεδομένων από τον πίνακα και δεν χρησιμοποιούμε τον πίνακα απευθείας

ProsopikoQuery->SQL = select code,name from prosopiko

ακόμα χρησιμοποιούμε ένα DateTimePicker έτοιμο από τη Builder έτσι ώστε να έχουμε ένα ημερολόγιο για να επιλέγουμε ποια μέρα έχει εκτελεστεί η κλήση μας

DateTimePickerl->Date = Date();

επίσης τα δύο κείμενα πλαισίου, τα οποία είναι για σχόλωι, θα είναι κενά καθώς επίσης και τα δύο edit επίσης κενά

Edit2->Text = "0";

Editl->Text = "0";

Memol ->Clear();

Memo2->Clear();

αλλά στο edit όπου εισάγουμε την ώρα θα πρέπει να εισάγουμε μόνο αριθμό πολλαπλάσιο του 0,5 αλλιώς θα μας εμφανίζει ένα μήνυμα λάθους

(49)

void _fastcall TEnimerosiK]isiFonn::Edit2Exit(TObject ^Sender) {

float ora;

try {

ora = StrToFloat(Edit2->Text);

// Για να στρογγυλοποιήσουμε τον αριθμό 0,5 ora *=2;

ora +=0.9;

ora = (int)(ora);

ora 1=2;

Edit2->Text = FloatToStr(ora);

}catc±i(...) I

MessageDlg("A£v είναι αριθμός. Εισάγετε αριθμό πολΛαττΛάσιο του θ,5.",

mtError, TMsgDlgButtons()« mbOK, 0);

Edit2->Text = "0";

Έπειτα θα πρέπει να εισάγουμε τα στοιχεία μας στη βάση

(50)

int PCode;

ProsopikoQuery->First();

for (int i=0; i<ComboBoxl->ItemIndex; i++) ProsopikoQuery->Next();

PCode = ProsopikoQuery->FieldByName("Code")->AsInteger;

InsertEktelesiQuery->Close();

InsertEktelesiQuery->ParamByName("kliseis_code")->AsInteger = SelectKlisiQuery->FieldByName("code")->AsInteger;

InsertEktelesiQuery->ParamByName("prosopiko_code")->AsInteger

= PCode;

InsertEktelesiQuery->ParamByName("Fimer_ektelesi")->AsDate = DateTimePickerl->Date;

InsertEktelesiQuery->PaΓamByName("Aksia_xl·m")->AsFloat = MainForm

->TimiVenzinis*SelectKlisiQuery->FieldByName("xlm") ->AsInteger;

InsertEktelesiQuery->ParamByName("ora")->AsFloat = StrToFloat(Edit2->Text);

InsertEktelesiQuery->ParamByName("aksia")->AsFloat=

StrToFloat(Edit2

->Text)*SelectKlisiQuery->FieldByName("aksia_ergasias") ->AsInteger;

InsertEktelesiQuery->ParamByName("Perigrafi_ergasias")-

(51)

>AsMemo

= Memol->Lines->GetText();

InsertEktelesiQuery->ParamByName{”Alla_eksoda")->AsFloat

=StrToFloat(Editl->Text);

InsertEktelesiQuery->ParamByName("Perigrafi_eksodon")-

>AsMemo

= Memo2->Lines->GetText();

InsertEktelesiQuery->ExecSQL();

InsertEktelesiQuery->SQL =

insert into Ektelesi_klisis (Kliseis_code, Prosopiko_code, Hmer_ektelesi, Aksia_xlm, Ora, Aksia, Perigrafi_ergasias, alla_eksoda, Perigrafi_eksodon)

values (:Kliseis_code, :Prosopiko_code, :Hmer_ektelesi, :Aksia_xlm, :Ora, :Aksia, ;Perigrafi_ergasias, :alla_eksoda, :Perigrafi_eksodon)

και έπειτα να τα εμφανίσουμε στο DBGrid όπου φαίνονται οΛοκΛηρωμένα όλα τα στοιχεία

//gia tin emfanisi ton ektelesmenon energion tis klisis EktelesmenesQuery->Close();

EktelesmenesQuery->ParamByName("Kliseis_code")->AsInteger = SelectKlisiQuery->FieldByName("code")->AsInteger;

EktelesmenesQuery->Open();

(52)

EktelesmenesQuery->SQL =

select Ektelesi_klisis.code, prosopiko.name as prosopiko, Hmer_ektelesi, ektelesi_klisis.code, aksia_xlm, ora, aksia, alla_eksoda from Ektelesi_klisis, prosopiko

where Kliseis_code=:Kliseis_code and prosopiko_code=prosopiko.code

Τέλος θα πρέπει να έχουμε την δυνατότητα να διαγράφουμε κλήσεις από το DBGrid. Αυτό γίνεται πολύ εύκολα με μία query η οποία θα διαγράφει τα δεδομένα που θα της ζητάμε από τη βάση μας.

DelEktelesmenesQuery->SQL = delete from Ektelesi_klisis where code =:code

> Για τη φόρμα «QRKlisiForm»

Εδώ τα πράγματα είναι εύκολα. Η Builder μας δίνει έτοιμες QuickReport. Εμείς προσθέτουμε μερικά Label και μερικά Text σε αυτή, τα οποία θα εμφανίζονται στη φόρμα εκτύπωσης της κλήσης μας. Κάθε Text συνδέεται με το πεδίο όπου ανήκες π.χ το text etairia_name συνδέεται στο πεδίο etairia_name .

Εμείς τη διαμορφώνουμε όπως θέλουμε και τη συνδέουμε με τη

(53)

βάση μας μέσω της KlisiQuery .

KlisiQuery->SQL =

Select Etairia.name as etairia_name, Etairia.tel as Etairia_tel, Etairia.afm as Etairia.afm, Etairia.Dieuthinsi as Etairia_dieuthnisi, prosopiko.name as prosopiko_name, foreis.name as foreis_name,foreis.tel as foreis_tel, foreis.dieuthinsi as foreis_dieuthinsi, Arithm_klisis, Hmer_lipsi, Hmer_ektelesi, Aksia_xlm, Foreis.xlm, ora, aksia, perigrafi_ergasias, alla_eksoda, Perigrafi_eksodon

from Etairia,prosopiko,Ektelesi_klisis,Kliseis,Foreis where Kliseis.foreis_code=foreis.code and kliseis.etairia_code=etairia.code and kliseis.code=Ektelesi_klisis.kliseis_code and ektelesi_klisis.prosopiko_code=Prosopiko.Code and kIiseis.code=:code

> H φόρμα εκτύπωσης

Η φόρμα EktuposeisMinaForm αποτεΛείται από τρία RadioButton και από τρία ComboBox. Κάθε ComboBox ενεργοποιείται μόνο όταν είναι τσεκαρισμένο το αντίστοιχο RadioButton του.

Πρώτο μας μέλημα είναι να εισάγουμε τις εταιρίες και τους υποΛΛήλους μας στα ComboBox .

(54)

Για να βάΛουμε τις εταιρίες στο combobox.

EtairiaQuery->Close();

EtairiaQuery->Open();

ComboBox 1 ->Items->Clear();

while (!EtairiaQuery->Eof) {

ComboBoxl->Items->Add(EtairiaQuery->FieldByName("Name") ->AsString);

EtairiaQuery->Next();

1

ComboBoxl->ItemIndex = MainForm->iTrexonEtairia;

EtairiaQuery->SQL = select code, name from Etairia

Για να βάλουμε το προσωπικό στο combobox.

ProsopikoQuery->Close();

ProsopikoQuery->Open{);

ComboBox3->ltems->Clear();

while (!ProsopikoQuery->Eof)

(55)

ComboBox3->Items->Add(ProsopikoQuery-

>FieIdByName("Name") ->AsString);

ProsopikoQuery->Next();

}

ComboBox3->ItemIndex = 0;

EtairiaQuery->SQL = select code,name from prosopiko

επίσης για να εμφανίσουμε την τρέχον ημερομηνία στο τελευταίο ComboBox

//Gia na emfanisoume tin trexon hmerominia.

hmerominia = Date();

hmerominia.DecodeDate(&nYear,&nMonth,&nDay);

ComboBox2->ItemIndex = nMonth -1;

Editl->Text = IntToStr(nYear);

Για να βρούμε τα σωστά στοιχεία των εταιριών και των υπαλλήλων:

(56)

int ECode,PCode;

EtairiaQuery->First();

for (int i=0; i<ComboBoxl->ItemIndex; i++) EtairiaQuery->Next();

ECode = EtairiaQuery->FieldByName("Code")->AsInteger;

ProsopikoQuery->First();

for (int i=0; i<ComboBox3->ItemIndex; i++) ProsopikoQuery->Next();

PCode = ProsopikoQuery->FieldByName("Code")->AsInteger;

για την ημερομηνία:

TDate from, to;

switch (ComboBox2->ItemIndex) I

case 0 : from = StrToDate("l/l/" + Editl->Text);

to = StrToDate("l/2/" + Editl->Text)-l;

break;

case 1 : from = StrToDate("l/2/" + Editl->Text);

to = StrToDate("l/3/" + Editl->Text)-l;

break;

case 2: from = StrToDate("l/3/" + Editl->Text);

(57)

to = StrToDate("l/4/" + Editl->Text)-l;

break;

case 3 : from = StrToDate("l/4/" + Editl->Text);

to = StrToDate("l/5/" + Editl->Text)-l;

break;

case 4 : from = StrToDate("l/5/" + Editl->Text);

to = StrToDate("l/6/" + Editl->Text)-l;

break;

case 5 : from = StrToDate("l/6/" + Editl->Text);

to = StrToDate("l/7/" + Editl->Text)-l;

break;

case 6 : from = StrToDate("l/7/" + Editl->Text);

to = StrToDate(”l/8/" + Editl->Text)-l;

break;

case 7 : from = StrToDate("l/8/" + Editl->Text);

to = StrToDate("l/9/" + Editl->Text)-l;

break;

case 8 : from = StrToDate("l/9/" + Editl->Text);

to = StrToDate("l/10/" + Editl->Text)-l;

break;

case 9 : from = StrToDate("l/10/" + Editl->Text);

to = StrToDate("l/ll/" + Editl->Text)-l;

break;

case 10 : from = StrToDate("l/ll/" + Editl->Text);

to = StrToDate("l/12/" + Editl->Text)-l;

break;

(58)

case 11: from = StrToDate("l/12/" + Editl->Text);

to = StrToDate("l/l/" + IntToStr(StrToInt(Editl->Text)+l))-l;

break;

Τα RadioButton δεν μπορούν να λειτουργούν όλα μαζί, έτσι όταν το καθένα θα είναι τσεκαρισμένο πατώντας το button εκτύπωσε θα πρέπει να μας δίνει το αντίστοιχο report:

if (RadioButtonl->Checked)

QREktuposeisMinaForm->MinasLabel->Caption = ComboBox2 ->Items ->operator [](ComboBox2->ItemIndex)+ " "+Editl ->Text;

QREktuposeisMinaFoim->EktuposeisMinaQuery->Close{);

QREktuposeisMinaForm->EktuposeisMinaQuery ->ParamByName("Etairia_code")->AsInteger=ECode;

QREktuposeisMinaForm->EktuposeisMinaQuery ->ParamByName("from")->AsDate=from;

QREktuposeisMinaForm->EktuposeisMinaQuery ->ParamByName("to")->AsDate=to;

QREktuposeisMinaForm->EktuposeisMinaQuery->Open();

QREktuposeisMinaForm->QuickRepl->Preview();

(59)

}

else if (RadioButton2->Checked) {

QREktuposeisMinaProsForm->MinasLabel->Caption = ComboBox2

->Items->operator [](ComboBox2->ItemIndex)+" "+Editl ->Text;

QREktuposeisMinaProsForm->EktuposeisMinaProsQuery ->Close();

QREktuposeisMinaProsForm->EktuposeisMinaProsQuery ->ParamByName("Prosopiko_code")->AsInteger=PCode;

QREktuposeisMinaProsForm->EktuposeisMinaProsQuery ->ParamByName{"from")->AsDate=from;

QREktuposeisMinaProsForm->EktuposeisMinaProsQuery ->ParamByName("to")->AsDate=to;

QREktuposeisMinaProsForm->EktuposeisMinaProsQuery ->Open();

QREktuposeisMinaProsForm->QuickRepl->Preview();

else if (RadioButton3->Checked) I

QREktuposeisMinaAllForm->MinasLabel->Caption = ComboBox2 ->Items->operator [](ComboBox2->ItemIndex)+ " "+Editl ->Text;

QREktuposeisMinaAllForm->EktuposeisMmaAllQuery->Close();

QREktuposeisMinaAllForm->EktuposeisMinaAllQuery

(60)

->ParamByName("from")->AsDate=from;

QREktuposeisMinaAlIForm->EktuposeisMinaAllQuery ->ParamByName("to")->AsDate=to;

QREktuposeisMinaAllForm->EktuposeisMinaAllQuery->Open();

QREktuposeisMinaAllForm->QuickRepl->Preview();

Τα RadioButton δεν μπορούν να λειτουργούν όλα μαζί Θα πρέπει να λειτουργεί το καθένα ξεχωριστά, δηλαδή όποιο είναι επιλεγμένο κάθε φορά

if (RadioButtonl->Checked) {

ComboBoxl->Enabled = true;

Labell->Enabled = true;

ComboBox3->Enabled = false;

Label4->Enabled = false;

}

else if (RadioButton2->Checked) {

ComboBox3->Enabled = true;

Label4*>Enabled = true;

ComboBoxl->Enabled = false;

(61)

Labell->Enabled = false;

}

else if (RadioButton3->Checked) I

ComboBox3->Enabled = false;

Label4->EnabIed = false;

ComboBoxl->Enabled = false;

Labell->Enabled = false;

τέλος για να εμφανίζεται η τρέχουσα ημερομηνία

void __fastcall TEktuposeisMinaForm::ComboBoxlChange(TObject

^Sender) {

MainForm->iTrexonEtairia = ComboBoxl->ltemlndex;

> Oi φόρμες εκτυπώσεατν ανά μήνα

Οι φόρμες εκτυπώσεων ανά μήνα λειτουργούν όπως και η φόρμα εκτύπωσης για κάθε κλήση. Δηλαδή έχουμε τρεις report οι οποίες συνδέονται με την EktuposeisMinaForm .

Την QREktuposeisMinaForm όπου εμφανίζονται όλες οι κλήσεις για κάθε εταιρία ξεχωριστά, τη διαμορφώνουμε με όσα Label και

(62)

Text XQEuiCovTaL Κάθε text το συνδέουμε με το αντίστοιχο πεδίο της, έτσι για παράδειγμα το QRDBText «εταιρία» είναι συνδεμένο με το πεδίο Etairia.

Η QREktuposeisMinaForm έχει μία EktuposeisMinaQuery η οποία τη συνδέει με τη βάση μας.

EktuposeisMinaQuery->SQL =

select Etairia.name as Etairia,Hmer_lipsi,Hmer_ektelesi,Foreis.name as Foreis, Arithm_klisis,ora,aksia,xlm,aksia_xlm,alla_eksoda from Foreis,Etairia,Ektelesi_klisis,Kliseis

where Kliseis.Etairia_code = :Etairia_code and Kliseis.code = Ektelesi_klisis.Kliseis_Code and Etairia.code = Kliseis.etairia_code and Foreis.code = kliseis.Foreis_code and Hmer_ektelesi >= :from and Hmer_ektelesi <= :to

Αντίστοιχα και για τα report QREktuposeisMinaProsForm και QREktuposeisMinaForm δουλεύουμε με τον ίδιο τρόπο. Οι αντίστοιχες query είναι:

EktuposeisMinaProsQuery->SQL =

select Prosopiko.name as prosopiko,Etairia.name as Etairia,Hmer_Iipsi,Hmer_ektelesi,Foreis.name as Foreis, Arithm_klisis,ora,aksia,xIm,aksia_xlm,alla_eksoda

J

(63)

from Foreis,Etairia,Ektelesi_klisis,Kliseis,prosopiko where Ektelesi_klisis.prosopiko.code = :Prosopiko_code and Kliseis.code = Ektelesi_klisis.Kliseis_Code and Etairia.code = Kliseis.etairia_code and Foreis.code = kliseis.Foreis_code

and Prosopiko.code = Ektelesi_klisis.prosopiko_code and Hmer_ektelesi >= :from

and Hmer ektelesi <= :to

EktuposeisMinaAllQuery->SQL =

select Etairia.name as Etairia,Hmer_lipsi,Hmer_ektelesi,Foreis.name as Foreis, Arithm_klisis,ora,aksia,xlm,aksia_xlm,alla_eksoda from Foreis,Etairia,Ektelesi_kIisis,Kliseis

where Kliseis.code = Ektelesi_klisis.Kliseis_Code and Etairia.code = Kliseis.etairia_code and Foreis.code = kliseis.Foreis_code and Hmer_ektelesi >= :from and Hmer_ektelesi <= :to

(64)
(65)

4.1 Εισαγωγή

Η καταχώριση κΛήσεατν είναι ένα πρόγραμμα για αρχειοθέτηση των εργασιών μιας εταιρίας. Με αυτόν τον τρόπο θα είναι οργανωμένη η εταιρία και θα υπάρχει εύκολη πρόσβαση ανά πάσα στιγμή στη βάση δεδομένων της.

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

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

Έτσι λοιπόν για τις εταιρίες θα έχουμε το όνομα, το τηλέφωνο, το ΑΦΜ, τη διεύθυνση και την αξία της εργασίας μας ανά ώρα. Για τους φορείς θα έχουμε το όνομα, το τηλέφωνο, τη διεύθυνση και την χιλιομετρική απόσταση που βρίσκονται από την δική μας εταιρία ώστε να υπολογιστούν τα έξοδα που πραγματοποιήθηκαν μέχρι εκεί. Τέλος για το προσωπικό της

(66)

εταιρίας μας θα έχουμε το όνομα, το τηλέφατνο και τη διεύθυνση του.

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

Επίσης θα μπορείτε να το εκτυπώσετε ή και να το αποθηκεύσετε στον υπολογιστή σας.

Το πρόγραμμα είναι αποδοτικό και φιλικό για οποιοδήποτε χρήστη.

(67)

Τα πρόγραμμα σας υποδέχεται με το βασικό μενού.

4.2 Βασικό μενού

Καταχώριση Κλήσεων Αρχείο Στοιχεία Κλήοεκ Εκτυπώοεκ;

|: Εταιρίες :| [ Εισαγωγή νέας ΚίΙήσης

1 Φορείς 1 1 Ενημέρωση ΚΛήσης

; · I Προσωπικό | Εκτυπώσεις ανά μήνα

Στο βασικό μενού εμφανίζονται όλα τα μενού για τα στοιχεία της κλήσης, δηλαδή τα μενού «Αρχείο», «Στοιχεία»,

«Κλήσεις» και «Εκτυπώσεις». Ακόμα υπάρχουν και κάποια πλήκτρα όπου βρίσκονται στην εργαλειοθήκη πάνω στο βασικό μενού. Αυτά είναι τα εξής: «Εταιρίες», «Φορείς», «Προσωπικό»,

«Εισαγωγή νέας Κλήσης», «Ενημέρωση Κλήσης» και «Εκτυπώσεις ανά μήνα».

Στο μενού αρχείο μπορείτε να πληκτρολογήσετε την τιμή της βενζίνης που κυμαίνετε στην αγορά την τρέχουσα χρονική στιγμή.

(68)

Για παράδειγμα, αν επιλέξετε «Αρχείο» και επιλέξετε «Τιμή Βενζίνης» θα εμφανιστεί ένα παράθυρο όπου θα μπορέσετε να πΛηκτρολογήσετε την τιμή της βενζίνης όπως φαίνετε και παρακάται.

k|a87|

1 yoK 1 1 ΧΆκυρο 1

Επίσης αν επιΛέξετε «Αρχείο» και μετά «Έξοδος» θα βγείτε από το πρόγραμμα.

Τέλος να αναφέρουμε ότι στην τιμή της βενζίνης δεν μπορείτε να πληκτρολογήσετε κάποιο χαρακτήρα γράμμα. Για παράδειγμα αν πληκτρολογήσετε το γράμμα "w" τότε θα εμφανιστεί ένα μήνυμα λάθους όπως βλέπετε και παρακάτω.

Referências

Documentos relacionados

Μείωση των απορριμμάτων Κάνοντας μια ανασκόπηση στα προηγούμενα, μπορούμε να δούμε πως μπορεί να γίνει η διαχείριση των απορριμμάτων μιας περιοχής, αυτό που δεν μπορούμε ίσως να