Καλημέρα σε όλους, έχω να κάνω την εξής παρακάτω άσκηση για τελική. Θα παραδώσουμε αμέσως μετά το Πάσχα. Αν μπορεί κάποιος να με βοηθήσει γιατί δεν έχουμε κάνει τόσο προχωρημένα...
ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ
ΑΣΚΗΣΗ ΑΞΙΟΛΟΓΗΣΗΣ
Να γραφεί πρόγραμμα σε C για τη διαχείριση των στοιχείων ενός συνόλου αυτοκινήτων που θα επιτρέπουν στο χρήστη να βλέπει τα στοιχεία για τα ήδη καταχωρημένα αυτοκίνητα, να εισάγει νέα αυτοκίνητα και να αναζητά αυτοκίνητα που ικανοποιούν ορισμένες προδιαγραφές. Πιο συγκεκριμένα, για το κάθε αυτοκίνητο
υπάρχουν τα εξής στοιχεία:
ΑΡΙΘΜΟΣ (μόνο το αριθμητικό μέρος): π.χ. 4352
ΧΡΩΜΑ: π.χ. RED
ΚΑΤΑΣΚΕΥΑΣΤΗΣ: π.χ. ALFA-ROMEO
ΗΜΕΡΟΜΗΝΙΑ ΚΑΤΑΣΚΕΥΗΣ: π.χ. 2005
Θεωρούμε ότι τα στοιχεία των αυτοκινήτων αποθηκεύονται στο αρχείο «Cars.txt». Επίσης θεωρούμε ότι όλα τα χρώματα βρίσκονται στο αρχείο «BasicColors.txt». Τέλος, θεωρούμε ότι όλες οι μάρκες αυτοκινήτων βρίσκονται στο «Companies.txt» (δίνονται και τα 3 αρχικά αρχεία).
Σε κάθε γραμμή του αρχείου «Cars.txt» υπάρχει μία εγγραφή με τα στοιχεία ενός αυτοκινήτου ως εξής:
ΑΡΙΘΜΟΣ ΧΡΩΜΑ ΚΑΤΑΣΚΕΥΑΣΤΗΣ ΗΜΕΡΟΜΗΝΙΑ
Θα πρέπει να εμφανίζεται στον χρήστη ένα μενού επιλογών όπως το ακόλουθο:
ΒΑΣΙΚΟ ΜΕΝΟΥ
1. ΕΜΦΑΝΙΣΗ ΟΛΩΝ
2. ΕΙΣΑΓΩΓΗ ΝΕΑΣ ΕΓΓΡΑΦΗΣ
3. ΔΙΑΓΡΑΦΗ ΕΓΓΡΑΦΗΣ
4. ΑΝΑΝΕΩΣΗ ΕΓΓΡΑΦΗΣ
5. ΑΝΑΖΗΤΗΣΗ
6. ΕΝΗΜΕΡΩΣΗ ΒΑΣΗΣ
0. ΕΞΟΔΟΣ
Ανάλογα με τον αριθμό που θα επιλέξει ο χρήστης (1, 2, 3, 4, 5, 6, ή 0) θα εκτελείται
η αντίστοιχη ενέργεια σύμφωνα με τις παρακάτω προδιαγραφές:
1. Θα εμφανίζονται τα στοιχεία όλων των αυτοκινήτων που είναι καταχωρημένα στο
αρχείο CARS.TXT.
2. Ο χρήστης θα καλείται να εισάγει τα στοιχεία ενός νέου αυτοκινήτου. Το νέο αυτοκίνητο θα προστίθεται στα ήδη υπάρχοντα. Προφανώς, θα πρέπει να ελέγχεται αν τα στοιχεία που εισάγει ο χρήστης είναι επιτρεπτά για το κάθε πεδίο. Δεν επιτρέπεται δύο αυτοκίνητα να έχουν τον ίδιο αριθμό. Παράδειγμα (ΠΡΟΣΟΧΗ: Με υπογράμμιση φαίνεται ό,τι πληκτρολογεί ο χρήστης):
ΝΕΑ ΕΓΓΡΑΦΗ
ΑΡΙΘΜΟΣ: 4432
ΧΡΩΜΑ: BLUE
ΚΑΤΑΣΚΕΥΑΣΤΗΣ: FIAT
ΗΜΕΡΟΜΗΝΙΑ ΚΑΤΑΣΚΕΥΗΣ: 1999
ΕΠΙΤΥΧΗΣ ΝΕΑ ΕΓΓΡΑΦΗ
3. Ο χρήστης καλείται να επιλέξει μία υπάρχουσα καταχώρηση αυτοκινήτου την
οποία επιθυμεί να διαγράψει. Για το σκοπό αυτό πρέπει να παρουσιάζονται οι υπάρχοντες αριθμοί αυτοκινήτων με αύξουσα σειρά και ο χρήστης θα πρέπει να πληκτρολογήσει τον αριθμό που αντιστοιχεί στο αυτοκίνητο που επιθυμεί να διαγράψει. Αν ο χρήστης πληκτρολογήσει αριθμό που δεν υπάρχει πρέπει να εμφανίζεται μήνυμα λάθους.
Παράδειγμα:
ΔΙΑΓΡΑΦΗ ΕΓΓΡΑΦΗΣ
ΥΠΑΡΧΟΝΤΕΣ ΑΡΙΘΜΟΙ: 3188, 3204, 5250, 7350, 8444
ΕΠΙΛΟΓΗ: 3188
ΕΠΙΤΥΧΗΣ ΔΙΑΓΡΑΦΗ ΕΓΓΡΑΦΗΣ
4. Ο χρήστης καλείται να επιλέξει μία υπάρχουσα εγγραφή αυτοκινήτου την οποία επιθυμεί να τροποποιήσει. Για το σκοπό αυτό πρέπει να παρουσιάζονται οι υπάρχοντες αριθμοί με αύξουσα σειρά και ο χρήστης θα πρέπει να πληκτρολογήσει τον αριθμό που αντιστοιχεί στο αυτοκίνητο του οποίου τα στοιχεία επιθυμεί να τροποποιήσει. Αν ο χρήστης πληκτρολογήσει αριθμό που δεν υπάρχει πρέπει να εμφανίζεται μήνυμα λάθους. Στη συνέχεια, εμφανίζονται ένα-ένα τα στοιχεία του αυτοκινήτου και καλείται ο χρήστης να πληκτρολογήσει τα νέα στοιχεία.
Παράδειγμα:
ΑΝΑΝΕΩΣΗ ΕΓΓΡΑΦΗΣ
ΥΠΑΡΧΟΝΤΕΣ ΑΡΙΘΜΟΙ: 3188, 3204, 5250, 7350, 8444
ΕΠΙΛΟΓΗ: 3188
ΑΡΙΘΜΟΣ (3188): 3188
ΧΡΩΜΑ: (BLUE): RED
ΚΑΤΑΣΚΕΥΑΣΤΗΣ (FIAT): FIAT
ΚΥΒΙΚΑ (1600): 1800
ΗΜΕΡΟΝΗΝΙΑ ΚΑΤΑΣΚΕΥΗΣ (1999): 1999
ΕΠΙΤΥΧΗΣ ΑΝΑΝΕΩΣΗ ΕΓΓΡΑΦΗΣ
5. Ο χρήστης θέλει να βρει ποια αυτοκίνητα ταιριάζουν με κάποια κριτήρια που θα θέσει. Όταν επιλέξει την αναζήτηση εμφανίζεται ένα άλλο μενού με τις εξής επιλογές:
ΜΕΝΟΥ ΑΝΑΖΗΤΗΣΗΣ
1. ΜΕ ΒΑΣΗ ΤΟΝ ΑΡΙΘΜΟ
2. ΜΕ ΒΑΣΗ ΤΟ ΧΡΩΜΑ
3. ΜΕ ΒΑΣΗ ΤΟΝ ΚΑΤΑΣΚΕΥΑΣΤΗ
4. ΜΕ ΒΑΣΗ ΤΗΝ ΗΜΕΡΟΜΗΝΙΑ ΚΑΤΑΣΚΕΥΗΣ
0. ΕΠΙΣΤΡΟΦΗ ΣΤΟ ΒΑΣΙΚΟ ΜΕΝΟΥ
5.1 Αν ο χρήστης επιλέξει αναζήτηση με βάση τον αριθμό μπορεί να ψάξει για αυτοκίνητα με αριθμό μεγαλύτερο ή μικρότερο από ένα αριθμό που θα καθορίσει αυτός. Για το σκοπό αυτό καλείται να εισάγει ένα σύμβολο σύγκρισης (‘<’ ή ‘>’) και ένα αριθμό της αρεσκείας του και εμφανίζονται όλα τα αυτοκίνητα που ικανοποιούν αυτό τον περιορισμό.
Παράδειγμα:
ΑΝΑΖΗΤΗΣΗ ΜΕ ΒΑΣΗ ΤΟΝ ΑΡΙΘΜΟ
ΚΡΙΤΗΡΙΑ ΑΝΑΖΗΤΗΣΗΣ: > 7000
ΕΓΓΡΑΦΕΣ ΠΟΥ ΒΡΕΘΗΚΑΝ
ΑΡΙΘΜΟΣ: 7230
ΧΡΩΜΑ: WHITE
ΚΑΤΑΣΚΕΥΑΣΤΗΣ: NISSAN
ΗΜΕΡΟΜΗΝΙΑ ΚΑΤΑΣΚΕΥΗΣ: 2003
5.2 Αν ο χρήστης επιλέξει αναζήτηση με βάση το χρώμα, πρέπει να εμφανιστούν αρχικά όλα τα διαφορετικά χρώματα που αντιστοιχούν στις ήδη υπάρχουσες εγγραφές (κάθε χρώμα να εμφανίζεται μία φορά) και να επιλέξει κάποιο από αυτά πληκτρολογώντας το ξανά (ΠΡΟΣΟΧΗ: όχι απαραίτητα ολόκληρο).
Παράδειγμα:
ΑΝΑΖΗΤΗΣΗ ΜΕ ΒΑΣΗ ΤΟ ΧΡΩΜΑ
ΔΙΑΘΕΣΙΜΑ ΧΡΩΜΑΤΑ: RED, BLUE, YELLOW, WHITE
ΧΡΩΜΑ ΑΝΑΖΗΤΗΣΗΣ: WH
ΕΓΓΡΑΦΕΣ ΠΟΥ ΒΡΕΘΗΚΑΝ
ΑΡΙΘΜΟΣ: 7230
ΧΡΩΜΑ: WHITE
ΚΑΤΑΣΚΕΥΑΣΤΗΣ: NISSAN
ΗΜΕΡΟΜΗΝΙΑ ΚΑΤΑΣΚΕΥΗΣ: 2003
5.3 Για αναζήτηση με βάση τον κατασκευαστή ακολουθείται διαδικασία παρόμοια με αυτή του χρώματος. Αρχικά εμφανίζονται όλοι οι διαφορετικοί κατασκευαστές και ο χρήστης επιλέγει αυτόν που επιθυμεί και εμφανίζονται όλα τα αυτοκίνητα που αντιστοιχούν σε αυτόν.
5.4 Για αναζήτηση με βάση την ημερομηνία κατασκευής, ακολουθείται διαδικασία παρόμοια με αυτή του αριθμού. Ο χρήστης καλείται να εισάγει ένα ειδικό σύμβολο (‘<’ ή ‘>’) και ένα έτος και εμφανίζονται όλα τα αυτοκίνητα που ικανοποιούν αυτόν τον περιορισμό.
5.0 Με την επιλογή 0 επιστρέφουμε στο βασικό μενού.
6. Με την επιλογή αυτή πρέπει να ενημερώνεται το αρχείο CARS.TXT με τις
τρέχουσες πληροφορίες για τα αυτοκίνητα.
0. Τερματισμός του προγράμματος.
Για λόγους ευκολίας, θεωρείστε ότι υπάρχει η δυνατότητα επεξεργασίας μέχρι 100 Αυτοκινήτων. Ο αριθμός αυτός θα πρέπει να μπορεί να αλλάζει εύκολα με ελάχιστες
τροποποιήσεις στον κώδικα.
Μετά την επιλογή μιας ενέργειας από το χρήστη και την εμφάνιση των αντίστοιχων αποτελεσμάτων το βασικό μενού επιλογών πρέπει να επανεμφανίζεται. Ο χρήστης δηλαδή θα μπορεί να επιλέξει μία σειρά από ενέργειες κατά τη χρήση του προγράμματος.
Προδιαγραφές κώδικα:
• Ο κώδικας που θα γραφεί πρέπει να είναι όσο το δυνατόν πιο γενικός, να μπορεί δηλαδή να μετατραπεί εύκολα ώστε να μπορεί να χειριστεί πιο περίπλοκες καταστάσεις (μεγαλύτερο αριθμό αυτοκινήτων, περισσότερα στοιχεία ανά αυτοκίνητο κτλ).
• Η χρήση σχολίων που διευκολύνουν την κατανόηση του κώδικα είναι υποχρεωτική.
• Το πρόγραμμα θα βασίζεται στις αρχές του αμυντικού προγραμματισμού. Δηλαδή, θα πρέπει να γίνει μία σειρά από ελέγχους για να διαπιστώνεται αν τα δεδομένα που εισάγει ο χρήστης είναι επιτρεπτά. Πιο συγκεκριμένα, θα πρέπει να διενεργούνται οι ακόλουθοι έλεγχοι:
o Έλεγχος για την περίπτωση που ο χρήστης εισάγει μη-επιτρεπτό αριθμό αυτοκινήτου (επιτρεπτοί αριθμοί: 1001-9999).o Δύο αυτοκίνητα δεν μπορούν να έχουν τον ίδιο αριθμό.
o Η ημερομηνία κατασκευής πρέπει να είναι μεταξύ 1960 μέχρι και την παρούσα χρονιά.
o Έλεγχος για την περίπτωση που ο χρήστης δεν επιλέξει κάποια από τις επιτρεπτές επιλογές αλλά πληκτρολογήσει κάτι άλλο.
• Η χρήση συναρτήσεων που διεκπεραιώνουν συγκεκριμένες διαδικασίες του προγράμματος διευκολύνει την αναγνωσιμότητα και την επαναχρησιμοποίηση του κώδικα, και ως εκ τούτου μετράει θετικά.
• Να χρησιμοποιηθεί η μέθοδος ταξινόμησης φυσαλίδας (bubble sort) για την ταξινόμηση των αριθμών των αυτοκινήτων (κατά την ενέργεια Νο. 3 και 4).
• Το πρόγραμμα μπορεί να υλοποιηθεί τόσο με χρήση απλών πινάκων όσο και με χρήση δομών (structures) χωρίς διαφορά στη βαθμολογία.
• Το αρχείο «Cars.txt» δεν θα πρέπει να βρίσκεται σε προκαθορισμένη θέση μέσα στο δίσκο αλλά απλά στον ίδιο φάκελο με το εκτελέσιμο αρχείο.
Ευχαριστώ πολύ σε όποιον ασχοληθει....