-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNormalTruck.cpp
91 lines (78 loc) · 1.76 KB
/
NormalTruck.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
88
89
90
91
#include "Truck.h"
#include "NormalTruck.h"
#include "Queue.h"
int NormalTruck::TruckCapacity = 0;
int NormalTruck::Speed = 0;
int NormalTruck::CheckUpDuration = 0;
NormalTruck::NormalTruck()
{
}
NormalTruck::NormalTruck(int DI) //uidch
{
DeliveryInterval = DI;
}
void NormalTruck::SetStaticMembers(int TC, int S, int CUD)
{
TruckCapacity = TC;
Speed = S;
CheckUpDuration = CUD;
}
void NormalTruck::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 NormalTruck::GetTruckCapacity()
{
return TruckCapacity;
}
int NormalTruck::GetSpeed()
{
return Speed;
}
int NormalTruck::GetCheckUpDuration()
{
return CheckUpDuration;
}
void NormalTruck::SetEndOfCheckUp(Time EOCU)
{
EndOfCheckUp = EOCU.hour + EOCU.day * 24 + CheckUpDuration;
}
bool NormalTruck::IsFull()
{
return (CargosQueue.GetCount() == TruckCapacity);
}
void NormalTruck::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());
}
}