mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-06 16:23:18 +02:00
Merge remote-tracking branch 'warehouse/main' into main
This commit is contained in:
commit
43b0f483f5
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 Krzysztof Rudnicki
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
208
employee.cpp
Normal file
208
employee.cpp
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
#ifndef EMPLOYEE_CPP
|
||||||
|
#define EMPLOYEE_CPP
|
||||||
|
|
||||||
|
#ifndef DIMENSION
|
||||||
|
#define DIMENSION 3
|
||||||
|
#endif // DIMENSION
|
||||||
|
|
||||||
|
#ifndef HAZARDS
|
||||||
|
#define HAZARDS 3
|
||||||
|
#endif // HAZARDS
|
||||||
|
|
||||||
|
#ifndef STATE
|
||||||
|
#define STATE 3
|
||||||
|
#endif // STATE
|
||||||
|
|
||||||
|
#ifndef CERTIFICATES
|
||||||
|
#define CERTIFICATES 10
|
||||||
|
#endif // CERTIFICATES
|
||||||
|
|
||||||
|
#include "employee.hpp"
|
||||||
|
#include "equipment.hpp"
|
||||||
|
#include "good.hpp"
|
||||||
|
#include "warehouse.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
Employee::Employee(): equipmentTraining(CERTIFICATES), hazardTraining(HAZARDS),
|
||||||
|
statesTraining(STATE)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < CERTIFICATES; i++)
|
||||||
|
{
|
||||||
|
equipmentTraining[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < HAZARDS; i++)
|
||||||
|
{
|
||||||
|
hazardTraining[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < STATE; i++)
|
||||||
|
{
|
||||||
|
statesTraining[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
canRepair = 0;
|
||||||
|
|
||||||
|
Equipment assignedEquipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <bool> Employee::getEquipmentTraining() const
|
||||||
|
{
|
||||||
|
return equipmentTraining;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <bool> Employee::getHazardTraining() const
|
||||||
|
{
|
||||||
|
return hazardTraining;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <bool> Employee::getStatesTraining() const
|
||||||
|
{
|
||||||
|
return statesTraining;
|
||||||
|
}
|
||||||
|
|
||||||
|
Equipment Employee::getAssignedEquipment() const
|
||||||
|
{
|
||||||
|
return assignedEquipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::getCanRepair() const
|
||||||
|
{
|
||||||
|
return canRepair;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Employee::trainEquipment(int certificateNumber)
|
||||||
|
{
|
||||||
|
if(certificateNumber >= 0 && certificateNumber <= CERTIFICATES - 1)
|
||||||
|
{
|
||||||
|
equipmentTraining[certificateNumber] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Employee::trainHazard(int certificateNumber)
|
||||||
|
{
|
||||||
|
if(certificateNumber >= 0 && certificateNumber <= HAZARDS - 1)
|
||||||
|
{
|
||||||
|
hazardTraining[certificateNumber] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Employee::trainStates(int certificateNumber)
|
||||||
|
{
|
||||||
|
if(certificateNumber >= 0 && certificateNumber <= STATE - 1)
|
||||||
|
{
|
||||||
|
statesTraining[certificateNumber] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Employee::trainRepair()
|
||||||
|
{
|
||||||
|
canRepair = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::canAssignEquipment(Equipment toBeAssigned) const
|
||||||
|
{
|
||||||
|
std::vector <bool> trainingNeeded = toBeAssigned.getTrainingRequired();
|
||||||
|
for(int i = 0; i < CERTIFICATES - 1; i++)
|
||||||
|
{
|
||||||
|
if((equipmentTraining[i] == 0) && (trainingNeeded[i] == 1)) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Employee::assignEquipment(Equipment &newEquipment)
|
||||||
|
{
|
||||||
|
if(canAssignEquipment(newEquipment)) assignedEquipment = newEquipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Employee::removeEquipment()
|
||||||
|
{
|
||||||
|
Equipment emptyEquipment;
|
||||||
|
assignedEquipment = emptyEquipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::canEmployeeMoveGoodState(Good &goodToMove) const
|
||||||
|
{
|
||||||
|
int goodState = goodToMove.getStateOfMatter();
|
||||||
|
return statesTraining[goodState];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::canEmployeeMoveGoodHazard(Good &goodToMove) const
|
||||||
|
{
|
||||||
|
std::vector <bool> goodHazard = goodToMove.getHazard();
|
||||||
|
for(int i = 0; i < HAZARDS; i++)
|
||||||
|
{
|
||||||
|
if(hazardTraining[i] == 0 && goodHazard[i] == 1) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::canEmployeeMoveGood(Good &goodToMove) const
|
||||||
|
{
|
||||||
|
if(!canEmployeeMoveGoodState(goodToMove))
|
||||||
|
{
|
||||||
|
std::cout << "Employee can't move the state of this good" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!canEmployeeMoveGoodHazard(goodToMove))
|
||||||
|
{
|
||||||
|
std::cout << "Employee can't move the hazards of this good" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::canMoveGood(Good &goodToMove, Equipment &toWhichMove, Equipment &fromWhichMove) const
|
||||||
|
{
|
||||||
|
if(!toWhichMove.canMoveGood(goodToMove))
|
||||||
|
{
|
||||||
|
std::cout << "Equipment toWhichWeMove cannot hold this good" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!fromWhichMove.canMoveGood(goodToMove))
|
||||||
|
{
|
||||||
|
std::cout << "Equipment fromWhichMove cannot move this good" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!canEmployeeMoveGood(goodToMove))
|
||||||
|
{
|
||||||
|
std::cout << "Employee cannot move this good" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!canAssignEquipment(fromWhichMove))
|
||||||
|
{
|
||||||
|
std::cout << "Employee cannot be assigned equipment fromWhichMove" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::moveGood(Good &goodToMove, Equipment &toWhichMove, Equipment &fromWhichMove) const
|
||||||
|
{
|
||||||
|
if(canMoveGood(goodToMove, toWhichMove, fromWhichMove))
|
||||||
|
{
|
||||||
|
toWhichMove.setTimesUsed(toWhichMove.getTimesUsed() + 1);
|
||||||
|
fromWhichMove.setTimesUsed(fromWhichMove.getTimesUsed() + 1);
|
||||||
|
toWhichMove.occupySpaceGood(goodToMove);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Employee::moveGoodOverride(Good &goodToMove, Equipment &toWhichMove) const
|
||||||
|
{
|
||||||
|
toWhichMove.setTimesUsed(toWhichMove.getTimesUsed() + 1);
|
||||||
|
toWhichMove.occupySpaceGood(goodToMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Employee::repairEquipment(Equipment &toRepair) const
|
||||||
|
{
|
||||||
|
if(getCanRepair() && toRepair.needsRepair())
|
||||||
|
{
|
||||||
|
toRepair.setTimesUsed(0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // EMPLOYE_CPP
|
||||||
46
employee.hpp
Normal file
46
employee.hpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#ifndef EMPLOYEE_HPP
|
||||||
|
#define EMPLOYEE_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "equipment.hpp"
|
||||||
|
|
||||||
|
class Employee
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::vector <bool> equipmentTraining;
|
||||||
|
std::vector <bool> hazardTraining;
|
||||||
|
std::vector <bool> statesTraining;
|
||||||
|
bool canRepair;
|
||||||
|
Equipment assignedEquipment;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Employee();
|
||||||
|
|
||||||
|
std::vector <bool> getEquipmentTraining() const;
|
||||||
|
std::vector <bool> getHazardTraining() const;
|
||||||
|
std::vector <bool> getStatesTraining() const;
|
||||||
|
Equipment getAssignedEquipment() const;
|
||||||
|
bool getCanRepair() const;
|
||||||
|
|
||||||
|
void trainEquipment(int certificateNumber);
|
||||||
|
void trainHazard(int certificateNumber);
|
||||||
|
void trainStates(int certificateNumber);
|
||||||
|
void trainRepair();
|
||||||
|
void assignEquipment(Equipment &newEquipment);
|
||||||
|
void removeEquipment();
|
||||||
|
|
||||||
|
bool canAssignEquipment(Equipment toBeAssigned) const;
|
||||||
|
bool canEmployeeMoveGoodState(Good &goodToMove) const;
|
||||||
|
bool canEmployeeMoveGoodHazard(Good &goodToMove) const;
|
||||||
|
bool canEmployeeMoveGood(Good &goodToMove) const;
|
||||||
|
bool canMoveGood(Good &goodToMove, Equipment &toWhichMove, Equipment &fromWhichMove) const;
|
||||||
|
bool moveGood(Good &goodToMove, Equipment &toWhichMove, Equipment &fromWhichMove) const;
|
||||||
|
void moveGoodOverride(Good &goodToMove, Equipment &toWhichMove) const;
|
||||||
|
bool repairEquipment(Equipment &toRepair) const;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
263
equipment.cpp
Normal file
263
equipment.cpp
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
#ifndef EQUIPMENT_CPP
|
||||||
|
#define EQUIPMENT_CPP
|
||||||
|
#include "employee.hpp"
|
||||||
|
#include "equipment.hpp"
|
||||||
|
#include "good.hpp"
|
||||||
|
#include "warehouse.hpp"
|
||||||
|
|
||||||
|
#ifndef DIMENSION
|
||||||
|
#define DIMENSION 3
|
||||||
|
#endif // DIMENSION
|
||||||
|
|
||||||
|
#ifndef HAZARDS
|
||||||
|
#define HAZARDS 3
|
||||||
|
#endif // HAZARDS
|
||||||
|
|
||||||
|
#ifndef STATE
|
||||||
|
#define STATE 3
|
||||||
|
#endif // STATE
|
||||||
|
|
||||||
|
#ifndef CERTIFICATES
|
||||||
|
#define CERTIFICATES 10
|
||||||
|
#endif // CERTIFICATES
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
Equipment::Equipment(): canTransportHazard(HAZARDS), canTransportState(STATE), sizeLimit(DIMENSION), sizeLeft(DIMENSION), trainingRequired(CERTIFICATES)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < HAZARDS; i++)
|
||||||
|
{
|
||||||
|
canTransportHazard[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < STATE; i++)
|
||||||
|
{
|
||||||
|
canTransportState[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
sizeLimit[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeLeft = sizeLimit;
|
||||||
|
|
||||||
|
for(int i = 0; i < CERTIFICATES; i++)
|
||||||
|
{
|
||||||
|
trainingRequired[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
timesUsed = 0;
|
||||||
|
timesUsedLimit = 0;
|
||||||
|
weightLimit = 0;
|
||||||
|
weightLeft = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<bool> Equipment::getCanTranportHazard() const
|
||||||
|
{
|
||||||
|
return canTransportHazard;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setCanTransportHazard(std::vector <bool> newHazard)
|
||||||
|
{
|
||||||
|
canTransportHazard = newHazard;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<bool> Equipment::getCanTransportState() const
|
||||||
|
{
|
||||||
|
return canTransportState;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setCanTransportState(std::vector <bool> newState)
|
||||||
|
{
|
||||||
|
canTransportState = newState;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<int> Equipment::getSizeLimit() const
|
||||||
|
{
|
||||||
|
return sizeLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setSizeLimit(std::vector<int> newSize)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
if(newSize[i] >= 0)
|
||||||
|
{
|
||||||
|
int sizeOccupied = sizeLimit[i] - sizeLeft[i];
|
||||||
|
sizeLeft[i] = newSize[i] - sizeOccupied;
|
||||||
|
sizeLimit[i] = newSize[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<int> Equipment::getSizeLeft() const
|
||||||
|
{
|
||||||
|
return sizeLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setSizeLeft(std::vector<int> newSizeLeft)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
if(newSizeLeft[i] >= 0 && newSizeLeft <= sizeLimit) sizeLeft[i] = newSizeLeft[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::occupySpaceGood(Good &someGood)
|
||||||
|
{
|
||||||
|
std::vector<int> goodSize = someGood.getSize_();
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
if(goodSize[i] <= sizeLeft[i]) sizeLeft[i] -= goodSize[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int Equipment::getTimesUsed() const
|
||||||
|
{
|
||||||
|
return timesUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setTimesUsed(int newTimesUsed)
|
||||||
|
{
|
||||||
|
if(newTimesUsed >= 0) timesUsed = newTimesUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Equipment::getTimesUsedLimit() const
|
||||||
|
{
|
||||||
|
return timesUsedLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setTimesUsedLimit(int newTimesUsedLimit)
|
||||||
|
{
|
||||||
|
if(newTimesUsedLimit >= 0) timesUsedLimit = newTimesUsedLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<bool> Equipment::getTrainingRequired() const
|
||||||
|
{
|
||||||
|
return trainingRequired;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setTrainingRequired(int trainingNumber)
|
||||||
|
{
|
||||||
|
if(trainingNumber >= 0 && trainingNumber <= CERTIFICATES - 1) trainingRequired[trainingNumber] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Equipment::getWeightLimit() const
|
||||||
|
{
|
||||||
|
return weightLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setWeightLimit(int newWeightLimit)
|
||||||
|
{
|
||||||
|
if(newWeightLimit >= 0) weightLimit = newWeightLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Equipment::getWeightLeft() const
|
||||||
|
{
|
||||||
|
return weightLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::setWeightLeft(int newWeightLeft)
|
||||||
|
{
|
||||||
|
if(newWeightLeft >= 0) weightLeft = newWeightLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool Equipment::canMoveHazard(Good &someGood)
|
||||||
|
{
|
||||||
|
std::vector <bool> Hazard = someGood.getHazard();
|
||||||
|
for(int i = 0; i < HAZARDS; i++)
|
||||||
|
{
|
||||||
|
if(canTransportHazard[i] == 0 && Hazard[i] == 1) return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Equipment::canMoveState(Good &someGood)
|
||||||
|
{
|
||||||
|
if(canTransportState[someGood.getStateOfMatter()]) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Equipment::canMoveSize(Good &someGood)
|
||||||
|
{
|
||||||
|
std::vector <int> goodSize = someGood.getSize_();
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
if(sizeLimit[i] < goodSize[i]) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Equipment::needsRepair() const
|
||||||
|
{
|
||||||
|
if(timesUsed > timesUsedLimit) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Equipment::canMoveGood(Good &someGood)
|
||||||
|
{
|
||||||
|
if(!canMoveHazard(someGood))
|
||||||
|
{
|
||||||
|
std::cout << "This equipment cannot move good with this hazard" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!canMoveState(someGood))
|
||||||
|
{
|
||||||
|
std::cout << "This equipment cannot move good with this state" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!canMoveSize(someGood))
|
||||||
|
{
|
||||||
|
std::cout << "This equipment cannot move good of this size" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(needsRepair())
|
||||||
|
{
|
||||||
|
std::cout << "This equipment needs repair" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(someGood.getWeight() > getWeightLeft())
|
||||||
|
{
|
||||||
|
std::cout << "This good is too heavy to be moved by this equipment" << std::endl;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Equipment::volumeLimit() const
|
||||||
|
{
|
||||||
|
int volume = 1;
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
volume *= sizeLimit[i];
|
||||||
|
}
|
||||||
|
return volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Equipment::volumeLeft() const
|
||||||
|
{
|
||||||
|
int volume = 1;
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
volume *= sizeLeft[i];
|
||||||
|
}
|
||||||
|
return volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Equipment::operator = (Equipment const &otherEquipment)
|
||||||
|
{
|
||||||
|
this -> canTransportHazard = otherEquipment.getCanTranportHazard();
|
||||||
|
this -> canTransportState = otherEquipment.getCanTransportState();
|
||||||
|
this -> sizeLimit = otherEquipment.getSizeLimit();
|
||||||
|
this -> timesUsed = otherEquipment.getTimesUsed();
|
||||||
|
this -> timesUsedLimit = otherEquipment.getTimesUsedLimit();
|
||||||
|
this -> trainingRequired = otherEquipment.getTrainingRequired();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // EQUIPMENT_CPP
|
||||||
58
equipment.hpp
Normal file
58
equipment.hpp
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#ifndef EQUIPMENT_HPP
|
||||||
|
#define EQUIPMENT_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "good.hpp"
|
||||||
|
|
||||||
|
class Equipment
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::vector <bool> canTransportHazard;
|
||||||
|
std::vector <bool> canTransportState;
|
||||||
|
std::vector <int> sizeLimit;
|
||||||
|
std::vector <int> sizeLeft;
|
||||||
|
std::vector <bool> trainingRequired;
|
||||||
|
int timesUsed;
|
||||||
|
int timesUsedLimit;
|
||||||
|
int weightLimit;
|
||||||
|
int weightLeft;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Equipment();
|
||||||
|
|
||||||
|
|
||||||
|
bool canMoveHazard(Good &someGood);
|
||||||
|
bool canMoveState(Good &someGood);
|
||||||
|
bool canMoveSize(Good &someGood);
|
||||||
|
bool canMoveGood(Good &someGood);
|
||||||
|
void occupySpaceGood(Good &someGood);
|
||||||
|
|
||||||
|
bool needsRepair() const;
|
||||||
|
|
||||||
|
int volumeLimit() const;
|
||||||
|
int volumeLeft() const;
|
||||||
|
|
||||||
|
void setCanTransportState(std::vector<bool> newState);
|
||||||
|
void setCanTransportHazard(std::vector <bool> newHazard);
|
||||||
|
void setSizeLimit(std::vector <int> newSize);
|
||||||
|
void setSizeLeft (std::vector <int> newSizeLeft);
|
||||||
|
void setTimesUsed(int newTimesUsed);
|
||||||
|
void setTimesUsedLimit(int newTimesUsedLimit);
|
||||||
|
void setTrainingRequired(int trainingNumber);
|
||||||
|
void setWeightLimit(int newWeightLimit);
|
||||||
|
void setWeightLeft(int newWeightLeft);
|
||||||
|
|
||||||
|
std::vector <int> getSizeLimit() const;
|
||||||
|
std::vector <int> getSizeLeft() const;
|
||||||
|
std::vector <bool> getCanTransportState() const;
|
||||||
|
std::vector<bool> getCanTranportHazard() const;
|
||||||
|
int getTimesUsed() const;
|
||||||
|
int getTimesUsedLimit() const;
|
||||||
|
int getWeightLimit() const;
|
||||||
|
int getWeightLeft() const;
|
||||||
|
std::vector<bool> getTrainingRequired() const;
|
||||||
|
|
||||||
|
void operator = (Equipment const &otherEquipment);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EQUIPMENT
|
||||||
BIN
firstDescriptionOfProject.pdf
Executable file
BIN
firstDescriptionOfProject.pdf
Executable file
Binary file not shown.
87
good.cpp
Normal file
87
good.cpp
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#ifndef GOOD_CPP
|
||||||
|
#define GOOD_CPP
|
||||||
|
#include "employee.hpp"
|
||||||
|
#include "equipment.hpp"
|
||||||
|
#include "good.hpp"
|
||||||
|
#include "warehouse.hpp"
|
||||||
|
|
||||||
|
#ifndef DIMENSION
|
||||||
|
#define DIMENSION 3
|
||||||
|
#endif // DIMENSION
|
||||||
|
|
||||||
|
#ifndef HAZARDS
|
||||||
|
#define HAZARDS 3
|
||||||
|
#endif // HAZARDS
|
||||||
|
|
||||||
|
#ifndef STATE
|
||||||
|
#define STATE 3
|
||||||
|
#endif // STATE
|
||||||
|
|
||||||
|
#ifndef CERTIFICATES
|
||||||
|
#define CERTIFICATES 10
|
||||||
|
#endif // CERTIFICATES
|
||||||
|
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
Good::Good(): size_(DIMENSION), hazard(HAZARDS)
|
||||||
|
{
|
||||||
|
size_ = {0, 0, 0};
|
||||||
|
hazard = {0, 0, 0, 0};
|
||||||
|
stateOfMatter = 0;
|
||||||
|
weight = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <int> Good::getSize_() const
|
||||||
|
{
|
||||||
|
return size_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <bool> Good::getHazard() const
|
||||||
|
{
|
||||||
|
return hazard;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Good::getStateOfMatter() const
|
||||||
|
{
|
||||||
|
return stateOfMatter;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Good::getWeight() const
|
||||||
|
{
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Good::setHazard(std::vector <bool> newHazard)
|
||||||
|
{
|
||||||
|
hazard = newHazard;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Good::setStateOfMatter(int newState)
|
||||||
|
{
|
||||||
|
if(newState >= 0 && newState <= 2) stateOfMatter = newState;
|
||||||
|
else std::cout << "newState must be a number between 0 and 2!" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Good::setWeight(int newWeight)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(newWeight > 0) weight = newWeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Good::setSize_(std::vector <int> newSize)
|
||||||
|
{
|
||||||
|
if(newSize.size() > DIMENSION) return;
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
if(newSize[i] < 0) return;
|
||||||
|
}
|
||||||
|
size_ = newSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Good::volume()
|
||||||
|
{
|
||||||
|
return size_[0] * size_[1] * size_[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // GOOD_CPP
|
||||||
34
good.hpp
Normal file
34
good.hpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef GOOD_HPP
|
||||||
|
#define GOOD_HPP
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Good
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::vector<int> size_;
|
||||||
|
std::vector<bool> hazard;
|
||||||
|
int stateOfMatter;
|
||||||
|
unsigned int weight;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Good();
|
||||||
|
|
||||||
|
std::vector <int> getSize_() const;
|
||||||
|
std::vector <bool> getHazard() const;
|
||||||
|
int getStateOfMatter() const;
|
||||||
|
int getWeight() const;
|
||||||
|
|
||||||
|
void setSize_(std::vector <int> newSize);
|
||||||
|
void setHazard(std::vector <bool> newHazard);
|
||||||
|
void setStateOfMatter(int newState);
|
||||||
|
void setWeight(int newWeight);
|
||||||
|
|
||||||
|
|
||||||
|
int volume();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GOOD
|
||||||
205
warehouse.cpp
Normal file
205
warehouse.cpp
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
#ifndef WAREHOUSE_CPP
|
||||||
|
#define WAREHOUSE_CPP
|
||||||
|
|
||||||
|
#ifndef DIMENSION
|
||||||
|
#define DIMENSION 3
|
||||||
|
#endif // DIMENSION
|
||||||
|
|
||||||
|
#ifndef HAZARDS
|
||||||
|
#define HAZARDS 3
|
||||||
|
#endif // HAZARDS
|
||||||
|
|
||||||
|
#ifndef STATE
|
||||||
|
#define STATE 3
|
||||||
|
#endif // STATE
|
||||||
|
|
||||||
|
#ifndef CERTIFICATES
|
||||||
|
#define CERTIFICATES 10
|
||||||
|
#endif // CERTIFICATES
|
||||||
|
|
||||||
|
#include "employee.hpp"
|
||||||
|
#include "equipment.hpp"
|
||||||
|
#include "good.hpp"
|
||||||
|
#include "warehouse.hpp"
|
||||||
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
|
Warehouse::Warehouse(): size_(DIMENSION)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
size_[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <Employee> Warehouse::getAllEmployees() const
|
||||||
|
{
|
||||||
|
std::vector<Employee> returnEmployees;
|
||||||
|
int howManyEmployees = allEmployees.size();
|
||||||
|
for(int i = 0; i < howManyEmployees; i++)
|
||||||
|
{
|
||||||
|
returnEmployees.push_back(*allEmployees[i]);
|
||||||
|
}
|
||||||
|
return returnEmployees;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <Equipment> Warehouse::getAllEquipment() const
|
||||||
|
{
|
||||||
|
std::vector<Equipment> returnEquipment;
|
||||||
|
int howMuchEquipment = allEquipment.size();
|
||||||
|
for(int i = 0; i < howMuchEquipment; i++)
|
||||||
|
{
|
||||||
|
returnEquipment.push_back(*allEquipment[i]);
|
||||||
|
}
|
||||||
|
return returnEquipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <Good> Warehouse::getAllGoods() const
|
||||||
|
{
|
||||||
|
std::vector<Good> returnGoods;;
|
||||||
|
int howMuchGoods = allGoods.size();
|
||||||
|
for(int i = 0; i < howMuchGoods; i++)
|
||||||
|
{
|
||||||
|
returnGoods.push_back(*allGoods[i]);
|
||||||
|
}
|
||||||
|
return returnGoods;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <int> Warehouse::findSuitableEmployees(Good &goodToShip)
|
||||||
|
{
|
||||||
|
int howManyEmployees = allEmployees.size();
|
||||||
|
if(howManyEmployees == 0) return {-1};
|
||||||
|
std::vector <int> goodEmployeesID(howManyEmployees);
|
||||||
|
goodEmployeesID[0] = -1;
|
||||||
|
for(int i = 0; i < howManyEmployees; i++)
|
||||||
|
{
|
||||||
|
if(allEmployees[i] -> canEmployeeMoveGood(goodToShip)) goodEmployeesID.push_back(i);
|
||||||
|
}
|
||||||
|
return goodEmployeesID;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <int> Warehouse::findSuitableEquipments(Good &goodToShip)
|
||||||
|
{
|
||||||
|
int howMuchEquipment = allEquipment.size();
|
||||||
|
if(howMuchEquipment == 0) return {-1};
|
||||||
|
std::vector <int> goodEquipmentID(howMuchEquipment);
|
||||||
|
goodEquipmentID[0] = -1;
|
||||||
|
for(int i = 0; i < howMuchEquipment; i++)
|
||||||
|
{
|
||||||
|
if(allEquipment[i] -> canMoveGood(goodToShip)) goodEquipmentID.push_back(i);
|
||||||
|
}
|
||||||
|
return goodEquipmentID;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <int> Warehouse::equipmentAndEmployees(std::vector<int> goodEmployeesID, std::vector<int> goodEquipmentID)
|
||||||
|
{
|
||||||
|
|
||||||
|
std::vector <int> equipmentEmployeeCombo = {-1, -1};
|
||||||
|
int goodEmployeesSize = goodEmployeesID.size();
|
||||||
|
int goodEquipmentSize = goodEquipmentID.size();
|
||||||
|
for(int i = 0; i < goodEmployeesSize; i++)
|
||||||
|
{
|
||||||
|
for(int j = 0; j < goodEquipmentSize; j++)
|
||||||
|
{
|
||||||
|
if(allEmployees[i] -> canAssignEquipment(*allEquipment[j]))
|
||||||
|
{
|
||||||
|
equipmentEmployeeCombo[0] = i;
|
||||||
|
equipmentEmployeeCombo[1] = j;
|
||||||
|
return equipmentEmployeeCombo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return equipmentEmployeeCombo;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<int> Warehouse::canAddGood(Good &goodToAdd)
|
||||||
|
{
|
||||||
|
std::vector <int> goodEmployees = findSuitableEmployees(goodToAdd);
|
||||||
|
if(goodEmployees.size() == 1)
|
||||||
|
{
|
||||||
|
std::cout << "No employee can move this good" << std::endl;
|
||||||
|
return {-1};
|
||||||
|
}
|
||||||
|
std::vector <int> goodEquipment = findSuitableEquipments(goodToAdd);
|
||||||
|
if(goodEquipment.size() == 1)
|
||||||
|
{
|
||||||
|
std::cout << "No equipment can move this good" << std::endl;
|
||||||
|
return {-1};
|
||||||
|
}
|
||||||
|
std::vector <int> employeeAndEquipment = equipmentAndEmployees(goodEmployees, goodEquipment);
|
||||||
|
if(employeeAndEquipment[0] == -1)
|
||||||
|
{
|
||||||
|
std::cout << "Employee and equipment that can move this good are not compatible" << std::endl;
|
||||||
|
return {-1};
|
||||||
|
}
|
||||||
|
return employeeAndEquipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Warehouse::addGood(Good &goodToShip)
|
||||||
|
{
|
||||||
|
std::vector <int> employeeAndEquipment = canAddGood(goodToShip);
|
||||||
|
if(employeeAndEquipment[0] != -1)
|
||||||
|
{
|
||||||
|
allEmployees[employeeAndEquipment[0]] -> moveGoodOverride(goodToShip, *allEquipment[employeeAndEquipment[1]]);
|
||||||
|
allGoods.push_back(&goodToShip);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Warehouse::shipGoods(std::vector <Good> &goodsToShip)
|
||||||
|
{
|
||||||
|
int howMuchGoods = goodsToShip.size();
|
||||||
|
for(int i = 0; i < howMuchGoods; i++)
|
||||||
|
{
|
||||||
|
if(!addGood(goodsToShip[i])) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Warehouse::calculateVolume() const
|
||||||
|
{
|
||||||
|
int volume = 1;
|
||||||
|
for(int i = 0; i < DIMENSION; i++)
|
||||||
|
{
|
||||||
|
volume += size_[i];
|
||||||
|
}
|
||||||
|
return volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <int> Warehouse::capacityLeft() const
|
||||||
|
{
|
||||||
|
int equipmentNumber = allEquipment.size();
|
||||||
|
std::vector <int> capacity(DIMENSION);
|
||||||
|
for(int i = 0; i < equipmentNumber; i++)
|
||||||
|
{
|
||||||
|
capacity[i] += allEquipment[i] -> getSizeLeft()[i];
|
||||||
|
}
|
||||||
|
return capacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector <int> Warehouse::capacityTotal() const
|
||||||
|
{
|
||||||
|
int equipmentNumber = allEquipment.size();
|
||||||
|
std::vector <int> capacity(DIMENSION);
|
||||||
|
for(int i = 0; i < equipmentNumber; i++)
|
||||||
|
{
|
||||||
|
capacity[i] += allEquipment[i] -> getSizeLimit()[i];
|
||||||
|
}
|
||||||
|
return capacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Warehouse::addEmployee(Employee &newEmployee)
|
||||||
|
{
|
||||||
|
allEmployees.push_back(&newEmployee);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Warehouse::addEquipment(Equipment &equipmentToAdd)
|
||||||
|
{
|
||||||
|
allEquipment.push_back(&equipmentToAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // WAREHOUSE_CPP
|
||||||
41
warehouse.hpp
Normal file
41
warehouse.hpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#ifndef WAREHOUSE_HPP
|
||||||
|
#define WAREHOUSE_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "employee.hpp"
|
||||||
|
#include "equipment.hpp"
|
||||||
|
#include "good.hpp"
|
||||||
|
|
||||||
|
class Warehouse
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
std::vector <Employee*> allEmployees;
|
||||||
|
std::vector <Equipment*> allEquipment;
|
||||||
|
std::vector <Good*> allGoods;
|
||||||
|
std::vector <int> size_;
|
||||||
|
public:
|
||||||
|
Warehouse();
|
||||||
|
|
||||||
|
std::vector <Employee> getAllEmployees() const;
|
||||||
|
std::vector<Equipment> getAllEquipment() const;
|
||||||
|
std::vector<Good> getAllGoods() const;
|
||||||
|
|
||||||
|
std::vector <int> findSuitableEmployees(Good &goodToShip);
|
||||||
|
std::vector <int> findSuitableEquipments(Good &goodToShip);
|
||||||
|
std::vector <int> equipmentAndEmployees(std::vector<int> goodEmployeesID, std::vector<int> goodEquipmentID);
|
||||||
|
bool canShipGoods(std::vector <Good> &goodToShip);
|
||||||
|
bool shipGoods(std::vector <Good> &goodsToShip);
|
||||||
|
int calculateVolume() const;
|
||||||
|
std::vector <int> capacityLeft() const;
|
||||||
|
std::vector <int> capacityTotal() const;
|
||||||
|
|
||||||
|
void addEmployee(Employee &newEmployee);
|
||||||
|
void addEquipment(Equipment &equipmentToAdd);
|
||||||
|
std::vector<int> canAddGood(Good &goodToAdd);
|
||||||
|
bool addGood(Good &goodToShip);
|
||||||
|
void addGoodOverride(Good &goodToShip);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WAREHOUSE
|
||||||
Loading…
Reference in New Issue
Block a user