Skip to content

A school simulation project in basic C++. Students (seniors , juniors) have to enter their respective classes while finding their way through the school. The school has a yard , staircases , floors , corridors and the classes , each with their respective max capacities.

Notifications You must be signed in to change notification settings

Svegiary/Class-Simulation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

ΑΣΚΗΣΗ 3
1)Οργάνωση σε κλάσεις : 
•Κλάσεις τύπου PEOPLE:
Περιέχει κοινά στοιχεία των μαθητών (STUDENT) και καθηγητών (TEACHER) . Οι παρακάτω μεταβλητές είναι PROTECTED. Η ftg είναι ο καταμετρητής κόπωσης , η μεταβλητή τύπου name , nam , είναι το όνομα του ανθρώπου , η classroom id τύπου classroom id είναι η ταυτότητα της τάξης και η μεταβλητή inside είναι ένδειξη αν βρίσκεται μέσα στην αίθουσα που του αντιστοιχεί.
  Ο teacher έχει μια private μεταβλητή points που αντιστοιχεί στον ρυθμό αύξησης των πόντων κόπωσης του καθηγητή κάθε ώρα διδασκαλίας . Κάθε φορά που καλείται η συνάρτηση teach , έχει διδάξει για 1 ώρα.  
Οι students έχουν μια private μεταβλητή loc που είναι ένδειξη για το που βρίσκονται . Οι μαθητές χωρίζονται σε seniors και juniors. Οι 2 αυτές κλάσεις έχουν μια ιδιωτική μεταβλητή points που έχει ίδια λειτουργία με εκείνη στην κλάση των καθηγητών. Η συνάρτηση attend έχει επίσης ίδια λειτουργία. 
•Κλάσεις τύπου  LOCATION:
Περιέχει τα κοινά στοιχεία των χώρων του σχολείου όπου είναι η  μεταβλητή τύπου location loc (ένδειξη χώρου) και το current number όπου είναι ο αριθμός των μαθητών τον χώρο εκείνο. 
Οι κλάσεις yard , stairs και corridor , έχουν private μέλη τον κωδικό χώρου τους ,τύπου location και ένα δείκτη σε δείκτη τύπου student . Καθώς μεγάλο κομμάτι του κώδικα είναι από την πρώτη άσκηση , Πολλές συναρτήσεις είναι φτιαγμένες να κάνουν traverse πίνακα δεικτών , όμως στην προκειμένη περίπτωση που οι μαθητές μπαίνουν και μετακινούνται ένας ένας , δεν χρειάζεται. Δεν δημιουργείται πρόβλημα οπότε δεν βρήκα λόγο να το αλλάξω. 
Η κλάση classroom έχει protected δεδομένα τα ίδια με τα παραπάνω, καθώς και έναν pointer σε καθηγητή , την χωρητικότητα της τάξης και έχουμε πίνακα δεικτών σε student . Επίσης , έχουν την ταυτότητα της τάξης . Οι παράγωγες κλάσεις SENIOR_CLASS και JUNIOR_CLASS έχουν ως private μέλος το points που όπως είπαμε είναι ο ρυθμός αύξησης .
Η συνάρτηση enter , δέχεται ως όρισμα δείκτη σε student , τον οποίο student βάζει στον χώρο αυτό . Στην περίπτωση της CLASSROOM βάζει τον μαθητή στον πίνακα δεικτών.
Η κλάση floor έχει δείκτη σε κλάση corridor , πίνακα δεικτών σε classroom και δείκτη σε δείκτη τύπου student . Στον constructor δημιουργούμε τις τάξεις και ,συγκεκριμένα , οι 3 πρώτες είναι senior class (new SENIOR_CLASS) και οι άλλες τρεις είναι τύπου junior (new JUNIOR_CLASS)
•Η κλάση randomGen:
Η κλάση randomGen δημιουργήθηκε έτσι ώστε να παράγονται τυχαίοι αριθμοί από το min μέχρι το min+span-1 , χωρίς όμως να παράγεται αριθμός πάνω από μια φορά , κάτι βοηθάει στην απόδοση. 
Πχ. Αν min = 0 και span = 10 , τοτε μέσω της rand()  επιλέγεται ένας τυχαίος αριθμός από το 0 μέχρι το 9, ας πούμε το 6 και θα το βάλει σε έναν πίνακα. Τότε, η randomGen θα καλέσει ξανά αναδρομικά τον εαυτό της απο το 0 μέχρι το 5 και από το 7 μέχρι το 9 . Έτσι εν τέλη θα έχουμε έναν πίνακα με αριθμούς με τυχαία σειρά , μια φορά ο καθένας , που θα χρησιμοποιήσουμε αργότερα για να διασχίσουμε τον πίνακα των μαθητών.
2) Γενική δημιουργία αντικειμένων και η κλάση school
	Η κλάση school δημιουργεί τα υπόλοιπα αντικείμενα και σε αυτή βρίσκεται ο βασικός πίνακας pointer των μαθητών , δηλαδή σε αυτόν τον πίνακα δείχνουν οι pointers των υπολοίπων κλάσεων. Όμως δεν δημιουργείται ο κάθε μαθητής στην school. Στον constructor της SCHOOL κάνουμε allocate μνημη μόνο για τους pointers , αλλά δεν δημιουργούμε αντικείμενο στον κάθε pointer . Μετά καλώ τον constructor της floor με όρισμα τον πίνακα pointer των μαθητών . Με τη σειρά του καλέι για κάθε όροφο τον constructor των τάξεων. Έχουμε αποφασίσει να δημιουργεί 3 SENIOR_CLASS και 3 JUNIOR_CLASS. Οι constructor των JUNIOR_CLASS και SENIOR_CLASS δέχονται ως όρισμα πίνακα δεικτών σε STUDENT . Εκεί δημιουργείται για κάθε pointer του πίνακα της SCHOOL ενας SENIOR ή JUNIOR μαθητής , ανάλογα. Αυτο γίνεται μέσω του static μέλους j της CLASSROOM , όπου κάνει traverse τον πίνακα. Το delete το χειρίζεται η SCHOOL. 
3)Μοντελοποίηση :
Αρχικά, οι μαθητές δημιουργούνται με την συνάρτηση createStudents . Για την ευκολότερη ανάγνωση του προβλήματος , το πρώτο τους όνομα θα είναι το Student και το επιθετό τους είναι τύπου string αλλά αντί να είναι όνομα , είναι ένας αριθμός (που μετατρέπεται σε string μέσω sprintf). Επίσης μέσω της assignStudent αναθέτω τάξη σε κάθε μαθητή . Για τις τρεις πρώτες αίθουσες κάθε ορόφου δημιουργούνται JUNIORS και για τις υπόλοιπες SENIORS. 
Με αντίστοιχο τρόπο δημιουργούνται και οι καθηγητές. 
Οι μαθητές μετακινούνται ένας ένας και μέχρι το τέλος ,δηλαδή εκείνος που θα μπει πρώτος στην αυλή , θα φτάσει στην αίθουσά του πριν μπει κάποιος άλλος στην αυλή.
Οι μαθητές μπαίνουν τυχαία στην αυλή , χρησιμοποιώντας τον πίνακα τυχαίων αριθμών που έχουμε επιλέξει να παράγει τυχαίους αριθμούς από το 0 μέχρι τον αριθμό των μαθητών -1.
Με την συνάρτηση της school , καλείται η operate για κάθε τάξη του σχολείου και αφού είναι virtual συνάρτηση , καλείται ξεχωριστά για senior και juinor class. Η κάθε συνάρτηση καλεί τη συνάρτηση attend για όλους τους μαθητές της και την teach για τον καθηγητή της. 
Οι συναρτήσεις attend και teach προσθέτουν στην μεταβλητή ftg , την μεταβλητή points του κάθε μαθητή/καθηγητή.
4)Μεταγλώττιση  :
g++ -o askisi3 askisi3.cpp
Και εκτελείται ./askisi3 (αριθμός μαθητών ανά τάξη) (κόπωση junior) (κόπωση senior) (κόπωση καθηγητή)







 

	
















About

A school simulation project in basic C++. Students (seniors , juniors) have to enter their respective classes while finding their way through the school. The school has a yard , staircases , floors , corridors and the classes , each with their respective max capacities.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages