-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCustomerOrder.cpp
More file actions
119 lines (114 loc) · 3.87 KB
/
Copy pathCustomerOrder.cpp
File metadata and controls
119 lines (114 loc) · 3.87 KB
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iomanip>
#include <string>
#include <algorithm>
#include "CustomerOrder.h"
#include"Utilities.h"
namespace sdds
{
size_t CustomerOrder::m_widthField = 0;
CustomerOrder::CustomerOrder() {}
CustomerOrder::CustomerOrder(const std::string& str)
{
Utilities ut;
size_t p = 0;
bool more = false;
std::string temp;
m_name = ut.extractToken(str, p, more);
m_product = ut.extractToken(str, p, more);
temp = str.substr(p, str.length() - p);
m_cntItem = (std::count(temp.begin(), temp.end(), ut.getDelimiter())) + 1;
m_lstItem = new Item * [m_cntItem];
for (size_t i = 0; i < m_cntItem; i++)
{
m_lstItem[i] = new Item(ut.extractToken(str, p, more));
}
m_widthField = (m_widthField < ut.getFieldWidth()) ? ut.getFieldWidth() : m_widthField;
}
CustomerOrder::CustomerOrder(const CustomerOrder& src)
{
throw std::string("Cannot make copy!");
}
CustomerOrder::CustomerOrder(CustomerOrder&& src) noexcept
{
*this = std::move(src);
}
CustomerOrder& CustomerOrder::operator=(CustomerOrder&& src) noexcept
{
if (this != &src)
{
if (m_lstItem) {
for (size_t i = 0; i < m_cntItem; i++) {
delete m_lstItem[i];
}
delete[] m_lstItem;
}
m_name = src.m_name;
m_product = src.m_product;
m_cntItem = src.m_cntItem;
m_lstItem = src.m_lstItem;
src.m_name = "";
src.m_product = "";
src.m_cntItem = 0;
src.m_lstItem = nullptr;
}
return *this;
}
CustomerOrder::~CustomerOrder()
{
for (size_t i = 0; i < m_cntItem; i++) {
delete m_lstItem[i];
}
delete[] m_lstItem;
}
bool CustomerOrder::isOrderFilled() const
{
bool isOrderFilled = true;
for (size_t i = 0; i < m_cntItem && isOrderFilled; i++) {
isOrderFilled = m_lstItem[i]->m_isFilled;
}
return isOrderFilled;
}
bool CustomerOrder::isItemFilled(const std::string& itemName) const
{
bool isItemFilled = true;
for (size_t i = 0; i < m_cntItem && isItemFilled; i++) {
if (m_lstItem[i]->m_itemName == itemName)
isItemFilled = m_lstItem[i]->m_isFilled;
}
return isItemFilled;
}
void CustomerOrder::fillItem(Station& station, std::ostream& os)
{
bool flag = true;
for (size_t i = 0; i < m_cntItem && flag; i++)
{
if (station.getItemName() == m_lstItem[i]->m_itemName && !m_lstItem[i]->m_isFilled)
{
flag = false;
if (station.getQuantity() > 0)
{
m_lstItem[i]->m_serialNumber = station.getNextSerialNumber();
m_lstItem[i]->m_isFilled = true;
station.updateQuantity();
os << " Filled " << m_name << ", ";
os << m_product << " [" << m_lstItem[i]->m_itemName << "]" << std::endl;
}
else
{
os << "Unable to fill " << m_name << ", ";
os << m_product << " [" << m_lstItem[i]->m_itemName << "]" << std::endl;
}
}
}
}
void CustomerOrder::display(std::ostream& os) const
{
os << m_name << " - " << m_product << std::endl;
for (size_t i = 0; i < m_cntItem; i++)
{
os << "[" << std::right << std::setw(6) << std::setfill('0') << m_lstItem[i]->m_serialNumber << "] ";
os << std::left << std::setw(m_widthField + 2) << std::setfill(' ') << m_lstItem[i]->m_itemName;
os << " - " << (m_lstItem[i]->m_isFilled ? "FILLED" : "TO BE FILLED") << std::endl;
}
}
}