forked from FaresAtef1/Shipping-Company
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVIPTruck.cpp
87 lines (76 loc) · 1.66 KB
/
VIPTruck.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "VIPTruck.h"
#include "Queue.h"
int VIPTruck::TruckCapacity = 0;
int VIPTruck::Speed = 0;
int VIPTruck::CheckUpDuration = 0;
VIPTruck::VIPTruck()
{
}
VIPTruck::VIPTruck(int DI) :Truck(DI)
{
}
void VIPTruck::SetStaticMembers(int TC, int S, int CUD)
{
TruckCapacity = TC;
Speed = S;
CheckUpDuration = CUD;
}
void VIPTruck::SetDeliveryInterval()
{
int LoadHours = 0;
int FurthestDis;
Queue<Cargo*> CargosTemp;
Cargo* CTemp;
while (CargosQueue.Dequeue(CTemp))
{
LoadHours += CTemp->GetLoadUnloadTime();
CargosTemp.Enqueue(CTemp);
}
if (CTemp)
FurthestDis = CTemp->GetDeliveryDistance();
while (CargosTemp.Dequeue(CTemp))
{
CargosQueue.enqueue(CTemp, CTemp->CalcPrio());
}
DeliveryInterval = 2.0 * FurthestDis / Speed + LoadHours;
TruckActiveTime += FurthestDis / Speed + 2 * LoadHours;
ReturningHours = FurthestDis / Speed;
}
int VIPTruck::GetTruckCapacity()
{
return TruckCapacity;
}
int VIPTruck::GetSpeed()
{
return Speed;
}
int VIPTruck::GetCheckUpDuration()
{
return CheckUpDuration;
}
void VIPTruck::SetEndOfCheckUp(Time EOCU)
{
EndOfCheckUp = EOCU.hour + EOCU.day * 24 + CheckUpDuration;
}
bool VIPTruck::IsFull()
{
return (CargosQueue.GetCount() == TruckCapacity);
}
void VIPTruck::SetCargosCDT()
{
Queue<Cargo*> TempQueue;
Cargo* Temp;
int SumOfUnloadTimes = 0;
int CDTHrs = 0;
while (CargosQueue.Dequeue(Temp))
{
TempQueue.Enqueue(Temp);
SumOfUnloadTimes += Temp->GetLoadUnloadTime();
CDTHrs = MovingTime.day * 24 + MovingTime.hour + Temp->GetDeliveryDistance() / Speed + SumOfUnloadTimes;
Temp->SetCDT(Time(CDTHrs % 24, CDTHrs / 24));
}
while (TempQueue.Dequeue(Temp))
{
CargosQueue.enqueue(Temp, Temp->CalcPrio());
}
}