Δομές Δεδομένων και Αρχεία Ενότητα 2: Αρχεία Δομών I (Binary Files) Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Πανεπιστήμιο Δυτικής Μακεδονίας Πανεπιστήμιο Δυτικής Μακεδονίας Παιδαγωγικό Τμήμα Νηπιαγωγών Τίτλος Μαθήματος Ενότητα # (bold): Τίτλος Ενότητας (normal)
Advertisements

ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
Ποιότητα Λογισμικού Ενότητα 4: Παράδειγμα Ελέγχου. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 12: Παραγωγή Ενδιάμεσου Κώδικα (Σημασιολογικές ρουτίνες μετάφρασης-Μέρος Β) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 8: Πίνακας Συμβόλων Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 11: Βελτιστοποίηση Ενδιάμεσου Κώδικα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 4: Συμβολοσειρές και Δομές Ελέγχου. Διδάσκων: Νικόλαος Θ Λιόλιος,
Δομές Δεδομένων και Αρχεία Ενότητα 7: Η δομή Στοίβα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 10: Κυκλικά και Διπλά Συνδεδεμένη Λίστα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I.
Δομές Δεδομένων και Αρχεία
Διδακτική Πληροφορικής Ενότητα 2: Η εξέλιξη των εργαλείων της Εκπαίδευσης. Διδάσκων: Γεώργιος Σούλτης, Επίκουρος Καθηγητής. Τμήμα Μηχανικών Πληροφορικής,
Δομές Δεδομένων και Αρχεία Ενότητα 1: Διαχείριση Αρχείων κειμένου. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 4: Ευρετηριασμένα Αρχεία Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 6: Πίνακες και Παράμετροι στην main. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 2: Μεταβλητές και Τύποι Δεδομένων. Διδάσκων: Νικόλαος Θ Λιόλιος,
Προγραμματισμός ΗΥ Ενότητα 6: Δισδιάστατοι πίνακες.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
Δομές Δεδομένων και Αρχεία
Δομές Δεδομένων και Αρχεία Ενότητα 8: Η δομή Ουρά Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 3: Αρχεία Δομών ΙΙ Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 10: Αφηρημένες τάξεις. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής.
Ανθρωπολογία του Θεάτρου Ενότητα 4 η : Βασικές αρχές της Τέχνης του Ηθοποιού Γιώργος Σαμπατακάκης, M.Phil. (Καίμπρητζ) – Ph.D. (Λονδίνο) Τμήμα Θεατρικών.
Τεχνολογία Ξύλου 1 Ενότητα 13: Ποιότητα και Πιστοποίηση Ξυλείας Διδάσκων: Δρ. Μιχάλης Σκαρβέλης, Αναπληρωτής Καθηγητής. Τμήμα Σχεδιασμού και Τεχνολογίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 4: Επαναληπτικές δομές. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής. Τμήμα Μηχανικών.
Στοιχεία Μηχανών ΙΙ Ενότητα 3: Μετωπικοί τροχοί με κεκλιμένη οδόντωση – Κωνικοί οδοντωτοί τροχοί Δρ Α. Δ. Τσολάκης Τμήμα Μηχανολόγων Μηχανικών Τ.Ε. ΕΛΛΗΝΙΚΗ.
ΗΛΕΚΤΡΟΝΙΚΟ ΕΜΠΟΡΙΟ Ενότητα 12 : Η χρήση της MySQL στο Ηλεκτρονικό εμπόριο (ΙΙI) Ιωάννης Τσούλος Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου.
Ενότητα 7 : Χρήση Πινάκων στο Ηλεκτρονικό εμπόριο (I) Ιωάννης Τσούλος
Τεχνολογία και Προγραμματισμός Υπολογιστών
Αντικειμενοστραφής Προγραμματισμός Ι
Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι
Ενότητα # 1: ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΕΝΕΡΓΟΠΟΙΗΣΗ ΚΩΔΙΚΟΥ
Πληροφορική Ενότητα 1 (Μέρος Β): Δυαδικό Σύστημα Αρίθμησης.
Προγραμματισμός ΗΥ Ενότητα 11: Header Files. Διδάσκων: Ηλίας Κ Σάββας,
Ανάπτυξη Εκπαιδευτικού Λογισμικού
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΕνΟτητα # 6: Ms Word IΙΙ CLAUDIA BOETTCHER ΤμΗμα ΙστορΙαΣ
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(9)
Αρχές Πληροφορικής Ενότητα # 11: Επεξεργασία κειμένου - LibreOffice
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
ΦΡΟΝΤΙΣΤΗΡΙΟ: ΘΕΡΜΙΚΕΣ ΤΑΣΕΙΣ
ΕνΟτητα # 9: Ms Word VI CLAUDIA BOETTCHER ΤμΗμα ΙστορΙαΣ
Διαχείριση Κινδύνου Ενότητα 7: Παρακολούθηση Κινδύνων.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Συστήματα Αυτομάτου Ελέγχου II
Αρχές Πληροφορικής Ενότητα # 10: Ιστολόγια. Η υπηρεσία Blogger
Ενότητα 2 : Το σύστημα βάσεων δεδομένων MySQL (II) Ιωάννης Τσούλος
Προγραμματισμός κινητών συσκευών
Προγραμματισμός κινητών συσκευών
Αρχές Πληροφορικής Ενότητα # 3: Το εσωτερικό του υπολογιστή
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Επιχειρησιακές Επικοινωνίες
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(7)
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(4)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΕνΟτητα # 8: Ms Word V CLAUDIA BOETTCHER ΤμΗμα ΙστορΙαΣ
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(5)
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(10)
ΑΝΑΓΝΩΡΙΣΗ ΠΡΟΤΥΠΩΝ ΝΕΥΡΩΝΙΚΑ ΔΙΚΤΥΑ
Προγραμματισμός κινητών συσκευών
Ανάπτυξη Εκπαιδευτικού Λογισμικού
Προγραμματισμός κινητών συσκευών
Προγραμματισμός ΗΥ Ενότητα 12: Αρχεία Δομών. Διδάσκων: Ηλίας Κ Σάββας,
Ανάπτυξη Εκπαιδευτικού Λογισμικού
Ανάπτυξη Εκπαιδευτικού Λογισμικού
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΑΣΚΗΣΕΙΣ C.
Μεταγράφημα παρουσίασης:

Δομές Δεδομένων και Αρχεία Ενότητα 2: Αρχεία Δομών I (Binary Files) Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Σκοποί ενότητας Ο Αναγνώστης να μπορεί να:  Διαχειρίζεται αρχεία δομών και ειδικότερα να τα δημιουργεί, επεκτείνει, εμφανίζει και αναζητά εγγραφές. Αρχεία Δομών I (Binary Files) 4

Περιεχόμενα ενότητας  Αρχεία Δομών (εγγραφών) – Binary Files, Αρχεία Δομών (εγγραφών) – Binary Files,  Εντολές Διαχείρισης Αρχείων Δομών, Εντολές Διαχείρισης Αρχείων Δομών,  Διαχείριση Αρχείων Δομών: Διαχείριση Αρχείων Δομών: Δημιουργία / Επέκταση, Προβολή, Αναζήτηση. Αρχεία Δομών I (Binary Files) 5

Αρχεία Δομών - Binary Files  Binary files: Αποθηκεύουν τους αριθμητικούς τύπους δεδομένων σε δυαδική μορφή,  Text files: Αποθηκεύουν τους αριθμητικούς τύπους δεδομένων σε ASCII μορφή.  Παράδειγμα: char name[20]=“Γιώργος”; int v=123; Binary File: Γιώργος Text File: Γιώργος Binary Files: Χρήσιμα για δομημένη πληροφορία, ταχύτατα, δύσκολα στην διαχείριση. Text files: Χρήσιμα για αδόμητη πληροφορία, εύκολη διαχείριση. Αρχεία Δομών I (Binary Files) 6

Δήλωση Μεταβλητής Αρχείου  Μία μεταβλητή αρχείου είναι ένας δείκτης σε ένα αρχείο:FILE *f; /* f  μεταβλητή αρχείου /* δείκτης */  Όταν ανοίγουμε ένα αρχείο, ο δείκτη αρχείου δείχνει την αρχή των πληροφοριών που υπάρχουν σε αυτό το αρχείο.  Όπως διαβάζουμε ή γράφουμε πληροφορίες στο αρχείο, ο δείκτης αρχείου αυτόματα δείχνει το επόμενο byte του αρχείου.  ΠΡΟΣΟΧΗ: FILE με κεφαλαία γράμματα (ορίζεται στο stdio.h). Αρχεία Δομών I (Binary Files) 7

Άνοιγμα / Κλείσιμο Αρχείων  Πριν χρησιμοποιήσουμε (προσπελάσουμε) ένα αρχείο πρέπει πρώτα να το ανοίξουμε ( open ) :  Δείκτης Αρχείου = fopen(“φυσικό όνομα αρχείου”, “ενέργεια”)  f = fopen(“Pelates.dat”, “rb”);  Ενέργεια:  “rb”: ανοίγει ένα αρχείο μόνο για διάβασμα. Το αρχείο πρέπει να υπάρχει.  “wb”: ανοίγει ένα αρχείο μόνο για γράψιμο. Το αρχείο δημιουργείται αν δεν υπάρχει. Ένα υπάρχον αρχείο θα αντικατασταθεί!  “ab”: ανοίγει ένα αρχείο μόνο για γράψιμο, οι πληροφορίες θα τοποθετηθούν στο τέλος του αρχείου,  “rb+”: ανοίγει ένα αρχείο διάβασμα και γράψιμο. Το αρχείο πρέπει να υπάρχει ήδη.  Κλείνοντας το αρχείο: fclose(δείκτης αρχείου);  fclose(f); Αρχεία Δομών I (Binary Files) 8

Παράδειγμα struct Pelatis { int kodikos; char epi[20]; char ono[15]; float xreosi; }; struct Pelatis r; FILE *P; /*Αρχείο πελατών */ Αρχεία Δομών I (Binary Files) 9

Δομή Αρχείου Ν Εγγραφών Αρχεία Δομών I (Binary Files) 10

Διάβασμα/Γράψιμο από/προς Αρχείο  Διάβασμα: fread(διεύθυνση μεταβλητής, block σε bytes που θα διαβασθεί, ποσότητα blocks που θα διαβαστούν, μεταβλητή αρχείου);  fread(&r, sizeof(struct Pelatis), 1, P);  Γράψιμο: fwrite(διεύθυνση μεταβλητής, block σε bytes που θα γραφεί, ποσότητα blocks που θα γραφούν, μεταβλητή αρχείου);  fwrite(&r, sizeof(struct Pelatis), 1, P); Αρχεία Δομών I (Binary Files) 11

Τέλος Αρχείου  Η συνάρτηση feof(δείκτης αρχείου) μας επιτρέπει να ελέγχουμε εάν έχουμε φτάσει στο τέλος του αρχείου,  Σύνταξη: feof(δείκτης αρχείου)  Αληθής/Ψευδής :  if ( ! feof(f) ) Ενέργειες για  else Ενέργειες για  while ( ! feof(f)) διάβασε από το αρχείο. Αρχεία Δομών I (Binary Files) 12

Παράδειγμα 1: Διαβάζοντας από ένα Αρχείο P = fopen("C:\\data\\pelates.dat","rb"); if ( P == NULL) { printf("\n\nΠρόβλημα με το αρχείο!\n\n"); return -1; } while (! feof(P)) { fread(&r, sizeof(struct Pelatis), 1, P); printf(“\n %5d %20s %15s %10.2f", r.kodikos, r.epi, r.ono, r.xreosi); } fclose(P); return 0; } Αρχεία Δομών I (Binary Files) 13

Παράδειγμα 2: Γράφοντας σε ένα Αρχείο P = fopen("C:\\data\\pelates.dat",“wb"); do { printf(“\nΕισαγωγή Κωδικού, επίθετου, ονόματος και χρέωσης πελάτη:”); scanf(“%d%s%s%f”, &r.kodikos, &r.epi, &r.ono, &r.xreosi); fwrite(&r, sizeof(struct Pelatis), 1, P); } while ( κάποια συνθήκη τερματισμού); Αρχεία Δομών I (Binary Files) 14

Άμεση Προσπέλαση  Τα binary files ονομάζονται και αρχεία άμεσης ή τυχαίας προσπέλασης (random/direct access files) γιατί μπορούμε να μεταβούμε σε όποια εγγραφή του αρχείου θέλουμε χωρίς απαραίτητα να προσπελάσουμε σειριακά όλες τις προηγούμενες.  Αυτό οφείλεται και στο ότι η κάθε εγγραφή έχει σταθερό μέγεθος. Αρχεία Δομών I (Binary Files) 15

Άμεση Μετάβαση  Εάν είναι γνωστός ο αριθμός της εγγραφής που θέλουμε να διαχειριστούμε (διαβάσουμε, γράψουμε, διορθώσουμε, κλπ) τότε:  fseek(δεικτης αρχείου, μήκος σε bytes, αφετηρία);  Αφετηρία:  SEEK_SET : Αρχή του αρχείου,  SEEK_END : Τέλος του αρχείου,  SEEK_CUR : Τρέχουσα θέση. Αρχεία Δομών I (Binary Files) 16

Παράδειγμα  Άμεση μετάβαση στη 21 η εγγραφή:  fseek(P, 20*sizeof(struct Pelatis), SEEK_SET);  Και όχι (σειριακή προσπέλαση):  for (i=0; i<=20; i++) fread(&r, sizeof(struct Pelatis), 1, P) Αρχεία Δομών I (Binary Files) 17

Πλήθος Εγγραφών fseek(P, 0, SEEK_END); /* μετάβαση στο τέλος του αρχείου */ m = ftell(P); /* αριθμός σε bytes που δείχνει ο δείκτης αρχείου */ N = m / sizeof(struct Pelatis); /* Πλήθος εγγραφών */ Αρχεία Δομών I (Binary Files) 18

Επέκταση Αρχείου P = fopen(“Pelates.dat”, “rb+”); /* άνοιγμα αρχείου για διάβασμα αλλά και γράψιμο σε αυτό */ fseek(P, 0, SEEK_END); /* μετάβαση στο τέλος του αρχείου */ εισαγωγή εγγραφής r fwrite(&r, sizeof(struct Pelatis), 1 P); /* η εγγραφή r θα γραφεί στο τέλος του αρχείου */ Αρχεία Δομών I (Binary Files) 19

Δημιουργία ή Επέκταση Εάν το αρχείο δεν υπάρχει τότε ΔΗΜΙΟΥΡΓΙΑ αλλιώς ΕΠΕΚΤΑΣΗ P = fopen(“Pelates.dat”, “rb+”); /* Άνοιγμα για επέκταση */ if ( ! P) P = fopen(“Pelates.dat”, “wb”); /* Το αρχείο δεν υπάρχει επομένως άνοιγμα για δημιουργία */ else /* το αρχείο υπάρχει, επομένως προετοιμασία για επέκταση */ fseek(P, 0, SEEK_END); Αρχεία Δομών I (Binary Files) 20

Αναζήτηση Εγγραφής (σειριακά) Έστω epitheto είναι το επίθετο του πελάτη που αναζητούμε: flag = 0; while ( ! feof(P) && flag==0) { fread(&r, sizeof(struct Pelatis), 1, P); if ( strcmp(epitheto, r.epi) == 0) { ΒΡΕΘΗΚΕ!!!!! flag = 1; } if (flag == 0) { ΔΕΝ ΒΡΕΘΗΚΕ!!! } Αρχεία Δομών I (Binary Files) 21

Διόρθωση Εγγραφής Έστω ότι η εγγραφή βρέθηκε (με την προηγούμενη διαδικασία της αναζήτησης) και έχει εισαχθεί η διορθωμένη εγγραφή από τον χρήστη. fseek(P, -sizeof(struct Pelatis), SEEK_CUR); /* Μεταφορά του δείκτη αρχείου στην προς διόρθωση εγγραφή γιατί με την τελευταία fread έχει προωθηθεί στην επόμενη */ fwrite(&r, sizeof(struct Pelatis, 1, P); /* γράψιμο της διορθωμένης εγγραφής στην σωστή θέση */ Αρχεία Δομών I (Binary Files) 22

Συνήθεις Διαδικασίες Αρχείου 1.Δημιουργία / Επέκταση, 2.Προβολή, 3.Αναζητήσεις, 4.Διόρθωση, 5.Διαγραφή, 6.Ταξινόμηση. Αρχεία Δομών I (Binary Files) 23

Άσκηση  Δημιουργία ενός πλήρους προγράμματος διαχείρισης πελατολογίου. struct Pelatis { char Kod[10]; char Epi[20]; char Ono[10]; float Ypo; }; FILE *pel; /* Δείκτης Αρχείου */ struct Pelatis P; /* Καθολική Μεταβλητή */ char Pelates[] = "Pelatologio.dat"; /* Φυσικό όνομα αρχείου */ Αρχεία Δομών I (Binary Files) 24

Πελατολόγιο #include #include "dialeksi_2_3.h« int menu(void); void dim_epekt(void); void provoli(void); void anazitisi(void); void anazitisi_xreoston(void); Αρχεία Δομών I (Binary Files) 25

Main() (1 από 2) int main() { int epilogi, counter; do { epilogi = menu(); switch (epilogi) { case 1: dim_epekt(); break; case 2: provoli(); break; case 3: anazitisi(); break; case 4: anazitisi_xreoston(); break; } Αρχεία Δομών I (Binary Files) 26

Main() (2 από 2) } while ( epilogi>=1 && epilogi<=4); printf("\n\n\t\t ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ! \n\n"); return 0; } Αρχεία Δομών I (Binary Files) 27

int menu(void) { int e; printf("\n\n\n\n\n\n"); printf("\n\t\t ΠΙΝΑΚΑΣ ΕΠΙΛΟΓΩΝ "); printf("\n\t\t==================="); printf("\n\t1. Δημιουργία / Επέκταση Πελατολογίου"); printf("\n\t2. Προβολή Πελατών "); printf("\n\t3. Αναζήτηση Πελάτη "); printf("\n\t4. Προβολή Χρεωστικών Πελατών "); printf("\n\t0. Τέλος Προγράμματος "); do { printf("\n\n\tΕισαγωγή Επιλογής (0-4): "); scanf("&d", &e); } while (e 4); return e; } Αρχεία Δομών I (Binary Files) 28

Δημιουργία / Επέκταση (1 από 2) void dim_epekt(void) { int synexeia; pel = fopen(Pelates, "rb+"); if (pel == NULL) pel = fopen(Pelates, "wb"); /* Δημιουργία */ else fseek(pel, 0, SEEK_END); /* Επέκταση */ do { printf("\n\n Κωδικός πελάτη : "); scanf("%s", &P.Kod); Αρχεία Δομών I (Binary Files) 29

Δημιουργία / Επέκταση (2 από 2) printf("\n\n Επίθετο: "); scanf("%s", &P.Epi); printf("\n\n Όνομα: "); scanf("%s", &P.Ono); printf("\n\n Υπόλοιπο: "); scanf("%f", &P.Ypo); fwrite(&P, sizeof(struct Pelatis), 1, pel); printf("\n\n Θέλετα νέα καταχώρηση (0=Όχι, 1=ΝΑΙ) : "); scanf("&d", &synexeia); } while (synexeia == 1); fclose(pel); } Αρχεία Δομών I (Binary Files) 30

Προβολή Αρχείου (1 από 2) void provoli(void) { int aa=0; /*Μετρητής */ float synolo = 0.0; /* Σύνολο οφειλών */ pel = fopen(Pelates, "rb"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } Αρχεία Δομών I (Binary Files) 31

Προβολή Αρχείου (2 από 2) while (! feof(pel) ) { fread(&P, sizeof(struct Pelatis), 1, pel); if ( ! feof(pel) ) { aa++; synolo += P.Ypo; printf("\n%5d %10s %20s %10s %10.2f", aa, P.Kod, P.Epi, P.Ono, P.Ypo); } printf("\n\nΣύνολοο Ωφειλών = %10.2f\n\n", synolo); fclose(pel); } Αρχεία Δομών I (Binary Files) 32

Αναζήτηση (1 από 2) void anazitisi(void) { char kodikos[5]; int vrethike = 0; pel = fopen(Pelates, "rb"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("\n\nΕισαγωγή του κωδικού πελάτη : "); scanf("%s", kodikos); Αρχεία Δομών I (Binary Files) 33

Αναζήτηση (2 από 2) while (! feof(pel) && (vrethike == 0)) { fread(&P, sizeof(struct Pelatis), 1, pel); if ( strcmp(kodikos, P.Kod) == 0 ) { vrethike = 1; printf("\n%10s %20s %10s %10.2f", P.Kod, P.Epi, P.Ono, P.Ypo); } if (vrethike == 0) printf("\n\nΔεν βρέθηκε πελάτης με τον κωδικό που δώσατε. \n"); fclose(pel); } Αρχεία Δομών I (Binary Files) 34

Αναζήτηση Χρεωστών (1 από 2) void anazitisi_xreoston(void) { int aa=0; /*Μετρητής */ float synolo = 0.0; /* Σύνολο ωφειλών */ pel = fopen(Pelates, "rb"); if (pel == NULL) { printf("\n\nΤο Πελατολόγιο Δεν έχει δημιουργηθεί ακόμη! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } Αρχεία Δομών I (Binary Files) 35

Αναζήτηση Χρεωστών (2 από 2) while (! feof(pel) ) { fread(&P, sizeof(struct Pelatis), 1, pel); if ( ! feof(pel) && P.Ypo >= 0.01 ) { aa++; synolo += P.Ypo; printf("\n%5d %10s %20s %10s %10.2f", aa, P.Kod, P.Epi, P.Ono, P.Ypo); } printf("\n\nΣύνολο Ωφειλών = %10.2f\n\n", synolo); fclose(pel); } Αρχεία Δομών I (Binary Files) 36

Τέλος Ενότητας