-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRoomsInterface.cpp
More file actions
222 lines (171 loc) · 8.44 KB
/
Copy pathRoomsInterface.cpp
File metadata and controls
222 lines (171 loc) · 8.44 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
//
// Created by Seo on 11/24/2025.
//
#include "RoomsInterface.h"
#include "AvailableRooms.h"
#include "RoomSearch.h"
// reference static variable inside the RoomsInterface class
int RoomsInterface::roomIDselected = 0;
void RoomsInterface::promptRoomSearch() {
RoomSearch::SearchQuery query;
//=========================== Guest Count/ Capacity ======================================//
int input;
std::cout << "Lets find you a room! How many guests are with you?\n"
"(Enter -1 if you dont know yet!) :\n";
std::cin >> input;
if (input != -1)
query.capacity = input;
//=========================== Bed ====================================================//
std::cout << "How many bed's would you like? \n"
"(Enter -1 if you dont know yet!) :\n";
std::cin >> input;
if (input != -1)
query.beds = input;
//=========================== Floors ====================================================//
std::string input_s;
std::cout << "We have floors 1-3 offered, are you interested in searching in a specific floor? (Y/N) \n";
std::cin >> input_s;
if (input_s == "Y" || input_s == "y" || input_s == "yes") {
std::cout << "Please enter the floor you'd like to search in! \n";
std::cin >> input;
query.floor = input;
}
//=========================== Room Type ====================================================//
std::cout << "Are you interested in a specific Room-Type? (Y/N)\n";
std::cin >> input_s;
if (input_s == "Y" || input_s == "y" || input_s == "yes") {
std::cout << "We offer the following: \n"
"1) RegularQueen,\n"
"2) RegularKing,\n"
"3) DeluxeQueen.\n"
"Please enter the room type of your choosing. Type (1-3): \n";
std::cin >> input;
switch (input) {
case 1:
query.name = "RegularQueen";
case 2:
query.name = "RegularKing";
case 3:
query.name = "DeluxeQueen";
default:
break;
}
}
//===================================== Time Range ======================================//
std::cout << "When would you like to stay?:\n";
//===================================== Display a Count of the Results ======================================//
printQuery(query);
const auto& results_list_IDs = RoomSearch::search(query);
std::cout << "==================================================" << std::endl;
std::cout << results_list_IDs.size() << " TOTAL ROOMS FOUND!! Here are your options:" << std::endl;
// Collect a count of room-types
int regular_queen_count = 0;
int regular_king_count = 0;
int deluxe_queen_count = 0;
for (const int & ID: results_list_IDs) {
const std::string& roomtype = AvailableRooms::lookup(ID).getRoomType().name;
// increment
if (roomtype == "RegularQueen") ++regular_queen_count;
else if (roomtype == "RegularKing") ++regular_king_count;
else if (roomtype == "DeluxeQueen") ++deluxe_queen_count;
}
if (regular_queen_count) { // if not empty
std::cout << "==================================================" << std::endl;
std::cout << regular_queen_count << " Regular-Queen rooms Available" << std::endl;
std::cout << "==================================================" << std::endl;
}
if (regular_king_count) { // if not empty
std::cout << "==================================================" << std::endl;
std::cout << regular_king_count << " Regular-King rooms Available" << std::endl;
std::cout << "==================================================" << std::endl;
}
if (deluxe_queen_count) { // if not empty
std::cout << "==================================================" << std::endl;
std::cout << deluxe_queen_count << " Deluxe-Queen rooms Available" << std::endl;
std::cout << "==================================================" << std::endl;
}
//================================== Choose Room-Type & Update Query =====================================//
std::cout << "==================================================" << std::endl;
bool roomtype_chosen = false;
while (!roomtype_chosen) {
std::cout << "Please choose which TYPE of room you are interested in booking" << std::endl;
if (regular_queen_count) std::cout << "1) RegularQueen\n" << std::endl;
if (regular_king_count) std::cout << "2) RegularKing\n" << std::endl;
if (deluxe_queen_count) std::cout << "3) DeluxeQueen\n" << std::endl;
std::cin >> input;
// validate input
switch (input) {
case 1:
if (regular_queen_count) {
roomtype_chosen = true;
query.name = "RegularQueen"; // update query
}
case 2:
if (regular_king_count) {
roomtype_chosen = true;
query.name = "RegularKing"; // update query
}
case 3:
if (deluxe_queen_count) {
roomtype_chosen = true;
query.name = "DeluxeQueen"; // update query
}
default:
break;
}
}
//======================= Display rooms & suggested ROOMS ===================================//
// long ahh name... indicates the filters applied lol
// search again-now with room-type filter
std::vector<int> results_list_roomtype_IDs = RoomSearch::search(query);
std::cout << "==================================================" << std::endl;
std::cout << "--These Rooms match your Search results!--" << std::endl;
std::cout << "==================================================" << std::endl;
// Display each room. This is after we filtered for the CORRECT room-type
for (int i = 0; i < results_list_roomtype_IDs.size(); i++) {
std::cout << "( " << i << " ) ";
printRoom(AvailableRooms::lookup(
results_list_roomtype_IDs.at(i)));
}
// Get suggested rooms
std::vector<int> suggested_roomsIDs = RoomSearch::searchSuggestions(query);
std::cout << "==================================================" << std::endl;
std::cout << "--Rooms Suggested for You!--" << std::endl;
std::cout << "==================================================" << std::endl;
// Display each suggested room
for (int i = 0; i < suggested_roomsIDs.size(); i++) {
std::cout << "( " << i + results_list_roomtype_IDs.size() << " ) "; // offset the index i
printRoom(AvailableRooms::lookup(
suggested_roomsIDs.at(i)));
}
//======================= Select a ROOM ===================================//
bool valid_index_selected = false;
while (!valid_index_selected) { // while IN RANGE
std::cout << " ^~~~ Please enter the index you choose: ";
std::cin >> input;
// choose from both vectors "results_list_roomtype_IDs" and "suggested_roomsIDs".
if (input < results_list_roomtype_IDs.size() + suggested_roomsIDs.size() && input >= 0)
valid_index_selected = true;
}
// determine which list? to get the ID from! Assigns the ID to "roomIDselected" variable and voilà!
if (input < results_list_roomtype_IDs.size())
roomIDselected = results_list_roomtype_IDs.at(input);
else
roomIDselected = suggested_roomsIDs.at(
input - results_list_roomtype_IDs.size());
std::cout << "==================================================" << std::endl;
std::cout << "-- You have Selected room: --" << std::endl;
printRoom(AvailableRooms::lookup(roomIDselected));
std::cout << "==================================================" << std::endl;
}
int RoomsInterface::roomSelected() {
return roomIDselected;
}
void RoomsInterface::printRoom(const Room &room) {
std::cout << "Floor:" << room.getRoomFloor() << " ";
std::cout << "RoomNo:" << room.getRoomNo() << " ";
std::cout << "Type: " << room.getRoomType().name << " ";
std::cout << "Beds:" << room.getRoomType().beds << " ";
std::cout << "Capacity:"<< room.getRoomType().capacity << " ";
std::cout << "Current Price:" << room.getRoomType().baseRate << std::endl;
}