#include #include #define FILENAME "pelates.dat" /* Όνομα του αρ-χείου */ #define RECORDS 300 /* Μέγιστο πλήθος εγγραφών */ #define EMPTY_RECORD 0 /* Έλεγχος κενού αρχείου */ struct pelatis /* δομή του πελάτη */ { int code ; /* Κωδικός πελάτη */ char name[40] ; /* Ονοματεπώνυμο πελάτη*/ char tel[20] ; /* Τηλέφωνο πελάτη */ float agores ; /* Ποσό αγορών του πελάτη */ } pelatis ; FILE *fp ; void print_menu(void) ; /* εμφάνιση του μενού επιλογών */ void entry(void) ; /* καταχώρηση στοιχείων στο αρ-χείο */ void display(void) ; /* εμφάνιση εγγραφών στην οθόνη */ void correct(void) ; /* διόρθωση και διαγραφή εγγραφών */ void init_file(void) ; /* απόδοση αρχικών τιμών */ char get_choice(void) ; /* εισαγωγή επιλογής */ void file_read(int rec) ; /* ανάγνωση μιας εγγρα-φής */ void file_write(int rec) ; /* καταχώρηση μιας εγγραφής */ void print_record(int rec) ; /* εμφάνιση των πεδίων */ int check_record(int rec) ; /* έλεγχος ύπαρξης εγγραφής */ int main(void) /* κύριο πρόγραμμα */ { char choice[2] ; printf("ΠΡΟΓΡΑΜΜΑ ΕΠΕΞΕΡΓΑΣΙΑΣ ΑΡΧΕΙΟΥ \n") ; do { print_menu() ; fgets(choice,2,stdin) ; switch(choice[0]) { case '0' : printf("\n ΤΕΛΟΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ \n");{ break; } case '1' : { entry(); break; } case '2' : { display(); break; } case '3' : { correct(); break; } case '4' : { init_file(); break; } default : { printf("\n Προσοχή, λανθασμένη επιλογή. Ξαναδοκιμάστε. \n"); break; } } } while(choice[0] != '0') ; } void print_menu(void) /* εμφάνιση του μενού επιλογών */ { printf("\n") ; printf(" 1. Εισαγωγή εγγραφών \n") ; printf(" 2. Εμφάνιση στην οθόνη \n") ; printf(" 3. Διόρθωση στοιχείων \n") ; printf(" 4. Μηδενισμός του αρχείου \n") ; printf(" 0. Έξοδος \n") ; printf("\n Επιλέξτε: ") ; return; } void entry(void) /* καταχώρηση στοιχείων στο αρχείο*/ { int flag ; char data[20] ; /* Aνοιγμα του αρχείου για ανάγνωση και εγγραφή */ fp = fopen(FILENAME, "rb+") ; if(fp == NULL) { printf(" Προσοχή, το αρχείο %s δεν ανοίγει.\n", FILENAME) ; exit(-1) ; } do { do { printf("\n Κωδικός πελάτη: ") ; fgets(data, 20, stdin) ; pelatis.code = atoi(data) ; flag = check_record(pelatis.code) ; if(flag == EOF) { printf("\n ΤΕΛΟΣ ΤΟΥ ΑΡΧΕΙΟΥ.") ; } else { if(flag != EMPTY_RECORD) { printf("\n Υπάρχει πρόβλημα στην εγγραφή:") ; printf(" %d", pelatis.code); } } } while((flag != EMPTY_RECORD) || (flag == EOF)); printf(" Ονοματεπώνυμο πελάτη: ") ; fgets(pelatis.name, 40, stdin) ; printf(" Τηλέφωνο πελάτη : ") ; fgets(pelatis.tel, 20, stdin) ; printf(" Ποσό αγορών πελάτη : ") ; fgets(data, 20, stdin) ; pelatis.agores = atof(data) ; file_write(pelatis.code) ; } while(get_choice() == 'N' ); fclose(fp) ; return ; } void display(void) /* εμφάνιση εγγραφών στην οθόνη */ { int rec_no, flag ; char choice[4] ; fp = fopen(FILENAME, "rb") ; if(fp == NULL) { printf("Προσοχή, το αρχείο %s δεν ανοίγει.\n", FILENAME) ; exit(-1) ; } while(1) { printf("\n Δώστε τον κωδικό του πελάτη \n") ; printf(" ή τιμή μηδέν (0) για Έξοδο \n Επιλέξτε: ") ; fgets(choice, 4, stdin) ; if(choice[0] == '0') break ; rec_no = atoi(choice) ; flag = check_record(rec_no) ; if((flag != EMPTY_RECORD) && (flag != EOF)) { file_read(rec_no) ; print_record(rec_no) ; } else { printf("Συγνώμη, αυτός ο κωδικός δεν υπάρχει. \n") ; } } fclose(fp) ; return ; } void correct(void) /* διόρθωση και διαγραφή εγγραφών */ { int rec_no, flag ; char choice[4], data[20] ; fp = fopen(FILENAME, "rb+") ; if(fp == NULL) { printf("Προσοχή, το αρχείο %s δεν ανοίγει. \n", FILENAME) ; exit(-1) ; } while(1) { printf("\n Δώστε τον κωδικό του πελάτη \n") ; printf(" ή τιμή μηδέν (0) για Έξοδο \n Επιλέξτε: ") ; fgets(choice, 4, stdin) ; if(choice[0] == '0') break ; rec_no = atoi(choice) ; flag = check_record(rec_no) ; if((flag != EMPTY_RECORD) && (flag != EOF)) { file_read(rec_no) ; print_record(rec_no) ; printf("\n Ποιό πεδίο θέλετε να διορθωθεί (2-4)\n") ; printf(" (Δώστε μηδέν(0) για διαγραφή ή πατήστε για έξοδο \n ") ; printf(" Επιλέξτε: ") ; fgets(choice, 2, stdin) ; switch(choice[0]) { case '0' : pelatis.code = 0; file_write(rec_no); break ; case '2' : printf("\n Δώστε το νέο Ονοματεπώνυμο: ") ; fgets(pelatis.name, 40, stdin) ; file_write(rec_no) ; break ; case '3' : printf("\n Δώστε το νέο τηλέφωνο: ") ; fgets(pelatis.tel, 20, stdin) ; file_write(rec_no) ; break ; case '4' : printf("\n Δώστε το νέο Ποσό αγορών: ") ; fgets(data, 20, stdin) ; pelatis.agores = atoi(data); file_write(rec_no) ; break ; default : { printf("\n Προσοχή, λανθασμένη επιλογή. Ξαναδοκιμάστε. \n"); break; } } } else { printf("\n Συγνώμη, αυτός ο κωδικός δεν υπάρχει. \n") ; } } fclose(fp) ; return ; } char get_choice(void) /* εισαγωγή της επιλογής του χρήστη */ { char choice[2] ; printf(" Αν θέλετε να συνεχίσετε, \n", " πατήστε (Ν) διαφορετικά ένα άλλο πλήκτρο: ") ; fgets(choice, 2, stdin) ; if(choice[0] == 'Ν' || choice[0] == 'N' ) choice[0]='N'; if(choice[0] == 'n' || choice[0] == 'ν') choice[0]='N'; else choice[0]='X'; return(choice[0]) ; } void file_read(int n) /* ανάγνωση μιας εγγρα-φής */ { fseek(fp, (n-1) * sizeof(struct pelatis), SEEK_SET) ; fread(&pelatis, sizeof(struct pelatis), 1, fp) ; return ; } void file_write(int n) /* καταχώρηση μιας εγ-γραφής */ { fseek(fp, (n-1) * sizeof(struct pelatis), SEEK_SET) ; fwrite(&pelatis, sizeof(struct pelatis), 1, fp) ; return ; } void print_record(int n) /* εμφάνιση των πεδίων μιας εγγραφής */ { printf("\n") ; printf(" 1. Κωδικός πελάτη:%d \n", pela-tis.code ) ; printf(" 2. Ονοματεπώνυμο :%s", pelatis.name ) ; printf(" 3. Τηλέφωνο :%s", pelatis.tel ) ; printf(" 4. Ποσό αγορών :%f \n", pela-tis.agores ) ; return ; } int check_record(int n) /* έλεγχος ύπαρξης εγγρα-φής */ { struct pelatis temp ; if((n < 1) || (n > RECORDS)) return(EOF) ; fseek(fp, (n-1) * sizeof(struct pelatis), SEEK_SET) ; if(fread(&temp, sizeof(struct pelatis), 1, fp) == 1 ) { return(temp.code) ; } else { return(EOF) ; } } void init_file(void) /* απόδοση αρχικών τιμών */ { char choice[4] ; int gap ; printf("\n Προσοχή, ο μηδενισμός του αρχείου \n", " θα διαγράψει όλες τις υπάρχουσες εγγραφές. \n") ; printf(" Αν θέλετε να προχωρήσετε στο μηδε-νισμό, \n", " πατήστε (Ν) διαφορετικά ένα άλλο πλήκτρο: ") ; fgets(choice, 4, stdin) ; if(choice[0] == 'Ν' || choice[0] == 'N' || choice[0] == 'n' || choice[0] == 'ν') { fp = fopen(FILENAME, "w") ; for(gap = 1; gap <= RECORDS; gap++) file_write(gap) ; fclose(fp) ; } return ; }