Website Summary Files Commits Branches @commit @diff @stats
path: root / Week04 / Exercise01
diff options
context:
space:
mode:
Commite5c06fbc864205a9736f07f9237ace80617ca471 (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-03-16 22:41:31 +0200
Committer
 Syndamia <kamen@syndamia.com>
2026-03-16 22:41:31 +0200
Filesf916efca600b104f3489a8501bffa448f11dfe79 /Week04/Exercise01
oop-2025-solutions-e5c06fbc864205a9736f07f9237ace80617ca471.tar
oop-2025-solutions-e5c06fbc864205a9736f07f9237ace80617ca471.tar.gz
oop-2025-solutions-e5c06fbc864205a9736f07f9237ace80617ca471.zip
Parent5624cd9b63bec13fc464a3d7820d703abd8de113 (diff)
feat(Week04): Add solutions
2 files changed, 131 insertions, 0 deletions
-rw-r--r--Week04/Exercise01/Train.cpp24
-rw-r--r--Week04/Exercise01/Train.h107
diff --git a/Week04/Exercise01/Train.cpp b/Week04/Exercise01/Train.cpp
new file mode 100644
index 0000000..5ff2db1
--- /dev/null
+++ b/Week04/Exercise01/Train.cpp
@@ -0,0 +1,24 @@
+#include "Train.h"
+#include <iostream>
+
+void Train::ArriveAtStation(unsigned passengersGettingOff, unsigned passengersGettingOn) {
+ if (passengersGettingOff > passengersOnBoard)
+ passengersOnBoard = 0;
+ else
+ passengersOnBoard -= passengersGettingOff;
+
+ passengersOnBoard += passengersGettingOn;
+ earnings += passengersGettingOn * ticketPrice;
+
+ passedStops++;
+ upcomingStops--;
+}
+
+void Train::Print() {
+ std::cout << "Carriages: " << carriages << ' '
+ << "Seats: " << passengersOnBoard << '/' << seatsAvailable << ' '
+ << "Stops: " << passedStops << " < " << upcomingStops << ' '
+ << "Ticket: " << ticketPrice << ' '
+ << "Earnings: " << earnings
+ << std::endl;
+}
diff --git a/Week04/Exercise01/Train.h b/Week04/Exercise01/Train.h
new file mode 100644
index 0000000..88322a2
--- /dev/null
+++ b/Week04/Exercise01/Train.h
@@ -0,0 +1,107 @@
+#ifndef _TRAIN
+#define _TRAIN
+
+class Train {
+ unsigned carriages;
+ unsigned seatsAvailable;
+ unsigned passengersOnBoard;
+ unsigned passedStops;
+ unsigned upcomingStops;
+ double ticketPrice;
+ double earnings;
+
+ // Излишно, но е добре да следваме "шаблона"
+ void free() {}
+ void copyFrom(const Train& other) {
+ carriages = other.carriages;
+ seatsAvailable = other.seatsAvailable;
+ passengersOnBoard = other.passengersOnBoard;
+ passedStops = other.passedStops;
+ upcomingStops = other.upcomingStops;
+ ticketPrice = other.ticketPrice;
+ earnings = other.earnings;
+ }
+
+public:
+ // "Шаблон" за голямата четворка
+ Train() {
+ carriages = seatsAvailable = passengersOnBoard = passedStops = upcomingStops = ticketPrice = earnings = 0;
+ }
+ ~Train() {
+ free();
+ }
+ Train(const Train& other) {
+ copyFrom(other);
+ }
+ Train& operator=(const Train& other) {
+ if (this != &other) {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+ }
+
+ Train(unsigned carriages, unsigned seatsAvailable, unsigned upcomingStops, double ticketPrice) {
+ this->carriages = carriages;
+ this->seatsAvailable = seatsAvailable;
+ this->passengersOnBoard = 0;
+ this->passedStops = 0.0;
+ this->upcomingStops = upcomingStops;
+ this->ticketPrice = ticketPrice;
+ this->earnings = 0.0;
+ }
+
+ void ArriveAtStation(unsigned passengersGettingOff, unsigned passengersGettingOn);
+ void Print();
+
+ unsigned GetCarriages() {
+ return carriages;
+ }
+ void SetCarriages(unsigned carriages) {
+ this->carriages = carriages;
+ }
+
+ unsigned GetSeatsAvailable() {
+ return seatsAvailable;
+ }
+ void SetSeatsAvailable(unsigned seatsAvailable) {
+ this->seatsAvailable = seatsAvailable;
+ }
+
+ unsigned GetPassengersOnBoard() {
+ return passengersOnBoard;
+ }
+ void SetPassengersOnBoard(unsigned passengersOnBoard) {
+ this->passengersOnBoard = passengersOnBoard;
+ }
+
+ unsigned GetPassedStops() {
+ return passedStops;
+ }
+ void SetPassedStops(unsigned passedStops) {
+ this->passedStops = passedStops;
+ }
+
+ unsigned GetUpcomingStops() {
+ return upcomingStops;
+ }
+ void SetUpcomingStops(unsigned upcomingStops) {
+ this->upcomingStops = upcomingStops;
+ }
+
+ double GetTicketPrice() {
+ return ticketPrice;
+ }
+ void SetTicketPrice(double ticketPrice) {
+ this->ticketPrice = ticketPrice;
+ }
+
+ double GetEarnings() {
+ return earnings;
+ }
+ void SetEarnings(double earnings) {
+ this->earnings = earnings;
+ }
+};
+
+#endif /* _TRAIN */