mariamx83 Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 Καλημέρα σε όλους, έχω να κάνω την εξής παρακάτω άσκηση για τελική. Θα παραδώσουμε αμέσως μετά το Πάσχα. Αν μπορεί κάποιος να με βοηθήσει γιατί δεν έχουμε κάνει τόσο προχωρημένα... ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ ΑΣΚΗΣΗ ΑΞΙΟΛΟΓΗΣΗΣ Να γραφεί πρόγραμμα σε 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» δεν θα πρέπει να βρίσκεται σε προκαθορισμένη θέση μέσα στο δίσκο αλλά απλά στον ίδιο φάκελο με το εκτελέσιμο αρχείο. Ευχαριστώ πολύ σε όποιον ασχοληθει....
kaliakman Δημοσ. 14 Απριλίου 2021 Δημοσ. 14 Απριλίου 2021 Πες μας τι έχεις κάνει μέχρι στιγμής και που έχεις κολλήσει..
mariamx83 Δημοσ. 15 Απριλίου 2021 Μέλος Δημοσ. 15 Απριλίου 2021 γενικα δεν ξερω απο που να αρχισω γιατι μεχρι τωρα οτι καναμε ηταν με μια εντολη αντε δυο και ενας κωδικας 40-50 γραμμες ..αυτο εδω απο οτι καταλαβαινω ειναι τεραστιο και με πολλες διαφορετικες εντολες
marios28 Δημοσ. 15 Απριλίου 2021 Δημοσ. 15 Απριλίου 2021 (επεξεργασμένο) 30 λεπτά πριν, mariamx83 είπε γενικα δεν ξερω απο που να αρχισω γιατι μεχρι τωρα οτι καναμε ηταν με μια εντολη αντε δυο και ενας κωδικας 40-50 γραμμες ..αυτο εδω απο οτι καταλαβαινω ειναι τεραστιο και με πολλες διαφορετικες εντολες Γράψε άκυρο. Σε άλλον πήγαινε η απάντηση. Μπερδεύτηκα με τις ασκήσεις και τα αυτοκίνητα. Σε άλλον πήγαινε. Επεξ/σία 15 Απριλίου 2021 από marios28
mariamx83 Δημοσ. 15 Απριλίου 2021 Μέλος Δημοσ. 15 Απριλίου 2021 5 λεπτά πριν, marios28 είπε Έριξα μια ματιά χθες σ' αυτά που είχες γράψει. Η scanf (εκεί που διαβάζεις τον αριθμό) φαινόταν σωστή. Δε νομίζω ότι είναι το πρόβλημα η scanf. Αν σου τυπώνει σωστά τον αριθμό, τσέκαρε τη συνάρτηση που τσεκάρει τον αριθμό πινακίδας (δε θυμάμαι πώς την είχες ονομάσει). Αν έχεις χρόνο και και δεν ξέρεις τι είναι ο debugger... Ψάξε: "How to Debug C Program". Αν ο κώδικάς σου είναι άναρχος/μπερδεμένος σημαίνει ότι κάτι δεν κάνεις καλά και χρειάζεται καλύτερη οργάνωση η σκέψη σου. Σιγά σιγά θα τα βάλεις σε μια σειρά. δεν έχω αναρτήσει κάποιο κώδικα ακομή...
marios28 Δημοσ. 15 Απριλίου 2021 Δημοσ. 15 Απριλίου 2021 Μόλις τώρα, mariamx83 είπε δεν έχω αναρτήσει κάποιο κώδικα ακομή... Ναι, το κατάλαβα. Δες παραπάνω.
k33theod Δημοσ. 22 Απριλίου 2021 Δημοσ. 22 Απριλίου 2021 (επεξεργασμένο) Δεν χρειάζεται να τα κάνεις όλα αμέσως ή όλα σε μια μέρα ή όλα τέλεια. Γράψε στην αρχή γενικά τη ροή με συναρτήσεις που θα μπορούσες να υλοποιήσεις και μετά κάνε την υλοποίηση. πχ int main (void) { //Τι θέλω να κάνει πρώτα η main print_main_menu();//μπορώ να το κάνω; ναι με printf ή puts //Τι θέλω να κάνει μετά read_input();//scanf //μετά //συνεχεια ανάλογα με input switch μάλλον ή ifs //Αν επιλέξει ένα τι χρειάζομαι μια συνάρτηση που να ανοίγει το cars.txt να το διαβαζει γραμμή γραμμή και να το τυπώνει //Α δεν ξέρω πως γίνεται Ψάχνω στο βιβλίο ή στο net void read_and_print_cars_file(void) { FILE * cars; char line [100]; cars = fopen ("cars.txt" , "r"); if (cars == NULL) perror ("Error opening file"); else { while ( fgets (car , 100 , cars) != NULL ) puts (car); fclose (cars); } return; } //και συνεχίζεις Η fgets είναι από το παράδειγμα του https://www.cplusplus.com/reference/cstdio/fgets/ Θα μου πεις πως θα ξέρω ότι η fgets είναι η σωστή και όχι κάποια άλλη function. Θα πρέπει να έχεις μια ιδέα και να έχεις διαβάσει κάποια πράγματα. Αν π.χ ξέρεις ότι το τύπωμα στην οθόνη το διάβασμα αρχείου είναι i/o operation βρίσκεις εύκολα την κατάλληλη συνάρτηση αν όχι πρέπει να διαβάσεις ξανά την γλώσσα. Επεξ/σία 22 Απριλίου 2021 από k33theod
mariamx83 Δημοσ. 10 Μαΐου 2021 Μέλος Δημοσ. 10 Μαΐου 2021 Ευχαριστώ πολύ σε όσους απαντήσατε..δυστυχώς δεν μπ'ορεσα να την κάνω...υπήρξαν θέματα υγειας ..οπότε δεν θα την παραδώσω. Ευχαριστώ και πάλι σε όσους απάντησαν.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα