https://github.com/tech-gian/school_simulation_cpp
👨🎓📚🏫 A simple school simulation made with Object-Oriented Programming principles in C++.
https://github.com/tech-gian/school_simulation_cpp
cpp oop oop-cpp oop-principles school school-project simulation
Last synced: 8 months ago
JSON representation
👨🎓📚🏫 A simple school simulation made with Object-Oriented Programming principles in C++.
- Host: GitHub
- URL: https://github.com/tech-gian/school_simulation_cpp
- Owner: tech-gian
- License: mit
- Created: 2020-12-04T23:31:52.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2021-04-13T15:34:48.000Z (over 4 years ago)
- Last Synced: 2025-02-16T18:01:42.671Z (10 months ago)
- Topics: cpp, oop, oop-cpp, oop-principles, school, school-project, simulation
- Language: C++
- Homepage: https://gianniszapantis.azurewebsites.net/
- Size: 66.4 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## 2020 Oop Project 2 - Exercise 3
## ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ - 2020/2021 - Β' Ομάδα Ασκήσεων - Άσκηση 3
Εκφώνηση: http://cgi.di.uoa.gr/~izambo/OOPassgn2_2021.pdf
### Προσωπικά Στοιχεία
__Όνομα__: Ιωάννης Ζαπάντης
__Α.Μ.__: sdi1900059
### Παρακάτω υπάρχει το documentation για την Άσκηση 3
### Documentation
Σκοπός της άσκησης αυτής είναι η μοντελοποίηση της πρωινής άφιξης των μαθητών
σε ένα σχολείο. Αυτό γίνεται από την δημιουργία των αντίστοιχων κλάσεων και την
υλοποίηση κατάλληλων συναρτήσεων για την λειτουργικότητά τους.
Έχω ορίσει μία υπερκλάση, την Person, η οποία αποθηκεύει όλα τα στοιχεία ενός ατόμου
είτε είναι μαθητής είτε είναι καθηγητής (λεπτομέρειες για τα στοιχεία-μέλη της βρίσκοντα
στα σχόλια του κώδικα). Υποκλάση αυτής είναι η Teacher που συμπληρώνει όσες συναρτήσεις
χρειάζονται για την λειτουργικότητα του καθηγητή. Ακόμα, ορίζονται και όλες οι συναρτήσεις
που έχουν ορισθεί ως virtual στην Person, καθώς επίσης η Person είναι Abstract class, αφού
ο χρήστης δεν χρειάζεται να έχει πρόσβαση σε αυτή (αυτό επιτυγχάνεται με τον ορισμό pure
virtual συνάρτησης).
Επίσης, έχει υλοποιηθεί η υποκλάση (της Person) Student, η οποία την συμπληρώνει, ώστε να μπορούν
να είναι λειτουργικοί οι μαθητές. Κι αυτή έχει συναρτήσεις ορισμένες σαν pure virtual, αφού ούτε
σε αυτή χρειάζεται να έχει πρόσβαση ο χρήστης (και για αυτό θεωρείται Abstract class). Για τον
χρήστη ορίζονται οι Junior και Senior που διαχωρίζουν τις 2 κατηγορίες των μαθητών και είναι τα
αντικείμενα που μπορεί να "φτιάξει" ο χρήστης (λεπτομέρειες για την υλοποίηση των συναρτήσεων
της καθεμίας κλάσης, καθώς και των μελών της, υπάρχουν στα σχόλια του κώδικα).
Όσον αφορά το σχολικό κτήριο, ακολουθείται η παράκατω δομή. Αρχικά, δημιουργείται μια Abstract
class Room, η οποία περιέχει μεταβλητές και (pure virtual) συναρτήσεις που θα χρησιμοποιηθούν
στις υποκλάσεις: Yard, Stairs, Corridor οι οποίες έχουν κοινά χαρακτηριστικά. Σε αυτές τις 3
υποκλάσεις ορίζονται τα στοιχεία που χρειάζονται για να ολοκληρωθούν, καθώς επίσης και το σώμα
των συναρτήσεων (των pure virtual).
Ακόμα, υπάρχει μια κλάση School, η οποία περιέχει ένα Stairs, ένα Yard και 3 Floors, όπως επίσης
και άλλες μεταβλητές και συναρτήσεις που προσδιορίζουν την λειτουργεία του κτηρίου (στο οποίο
έχει πρόσβαση ο χρήστης. Λεπτομέρειες σχετικά με την υλοποίηση και τις συναρτήσεις βρίσκονται
στα σχόλια του κώδικα). Η class Floor, αντίστοιχα περιέχει έναν Corridor και 6 class Classroom (αίθουσες).
Επίσης, υπάρχουν μεταβλητές και συναρτήσεις που χρησιμεύουν στην λειτουργία του. Τέλος, υπάρχει
και η κλάση Classroom (αίθουσα), η οποία και αυτή έχει ό,τι χρειάζεται για να είναι λειτουργική
(λεπτομέρειες υπάρχουν εκτενέστερα στα σχόλια του κώδικα).
Η main ακολουθεί τις οδηγίες της εκφώνησης και δημιουργεί ένα σχολικό κτήριο, μαθητές, καθηγητές
και τους βάζει με τυχαία σειρά στο σχολείο. Έπειτα, το σχολείο λειτουργεί για Ν ώρες και ύστερα
εκτυπώνεται (όπως αναφέρεται στην εκφώνηση). Μαζί υπάρχει και ένα Makefile, το οποίο είναι αρκετά
απλό με εντολές make για μεταγλώττιση των αρχείων, run για εκτέλεση του προγράμματος, clean για
διαγραφή των παραγόμενων αρχείων και valgrind για τρέξιμο του valgrind (έλεγχος για memory
leaks).
[Το πρόγραμμα τρέχει σωστά και χωρίς leaks σε linux (εκτός από ένα bug που υπάρχει στην έκδοση του valgrind
και εμφανίζει 72,704 bytes still reachable) της σχολής]
Η πλήρης εντολή μεταγλώττισης είναι: g++ -o main main.cpp School.cpp
Για εκτέλεση του προγράμματος αρκεί να τρέξει: ./main Cclass Lj Ls Lt N
,όπου τα ορίσματα είναι αυτά που περιγράφονται στην εκφώνηση.
Τα ορίσματα διαβάζονται με τον τρόπο που περιγράφεται στην εκφώνηση (δεν γίνεται έλεγχος για
λανθασμένα δεδομένα).