Προς το περιεχόμενο
  • 0

Βοηθεια σε τελικη ασκηση C


mariamx83

Ερώτηση

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

ΑΣΚΗΣΗ ΑΞΙΟΛΟΓΗΣΗΣ

 

Να γραφεί πρόγραμμα σε 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» δεν θα πρέπει να βρίσκεται σε προκαθορισμένη θέση μέσα στο δίσκο αλλά απλά στον ίδιο φάκελο με το εκτελέσιμο αρχείο.

 

Ευχαριστώ πολύ σε όποιον ασχοληθει....

 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

6 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

  • 0

γενικα δεν ξερω απο που να αρχισω γιατι μεχρι τωρα οτι καναμε ηταν με μια εντολη αντε δυο και ενας κωδικας 40-50 γραμμες ..αυτο εδω απο οτι καταλαβαινω ειναι τεραστιο και με πολλες διαφορετικες εντολες

 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Δημοσ. (επεξεργασμένο)
30 λεπτά πριν, mariamx83 είπε

γενικα δεν ξερω απο που να αρχισω γιατι μεχρι τωρα οτι καναμε ηταν με μια εντολη αντε δυο και ενας κωδικας 40-50 γραμμες ..αυτο εδω απο οτι καταλαβαινω ειναι τεραστιο και με πολλες διαφορετικες εντολες

Γράψε άκυρο. Σε άλλον πήγαινε η απάντηση. Μπερδεύτηκα με τις ασκήσεις και τα αυτοκίνητα. Σε άλλον πήγαινε. 

Επεξ/σία από marios28
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
5 λεπτά πριν, marios28 είπε

Έριξα μια ματιά χθες σ' αυτά που είχες γράψει. Η scanf (εκεί που διαβάζεις τον αριθμό) φαινόταν σωστή. Δε νομίζω ότι είναι το πρόβλημα η scanf. Αν σου τυπώνει σωστά τον αριθμό, τσέκαρε τη συνάρτηση που τσεκάρει τον αριθμό πινακίδας (δε θυμάμαι πώς την είχες ονομάσει). 

Αν έχεις χρόνο και και δεν ξέρεις τι είναι ο debugger... Ψάξε: "How to Debug C Program".  

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

δεν έχω αναρτήσει κάποιο κώδικα ακομή...

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Δημοσ. (επεξεργασμένο)

Δεν χρειάζεται να τα κάνεις όλα αμέσως ή όλα σε μια μέρα ή όλα τέλεια.

Γράψε στην αρχή γενικά τη ροή με συναρτήσεις που θα μπορούσες να υλοποιήσεις και μετά κάνε την υλοποίηση.

πχ

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 βρίσκεις εύκολα την κατάλληλη συνάρτηση αν όχι πρέπει να διαβάσεις ξανά την γλώσσα.

Επεξ/σία από k33theod
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.