Untitled
unknown
plain_text
4 years ago
5.9 kB
15
Indexable
Program:
#include <bits/stdc++.h>
#include <stdlib.h>
#include <ctime>
using namespace std;
// display the contents of the queues
void displayQueue(queue<string> que, queue<int> r) {
int i = 0;
while(!que.empty() && !r.empty()) {
cout << "(" << i << ") " << que.front() << " " << r.front() << endl;
que.pop();
r.pop();
i++;
}
cout << endl;
}
/** function to search the name in queue
* returns records associated with the name
*/
int searchName(queue<string> line, string name)
{
int count = 0;
while(!line.empty())
{
count++;
if(line.front() == name)
{
return count;
}
line.pop();
}
return 0;
}
/**
* function to search and return the name of person having raffle number as num
*/
string searchRaffle(queue<int>raffle, int num, queue<string> line) {
while(!raffle.empty()) {
if(raffle.front() == num) {
return line.front();
}
raffle.pop();
line.pop();
}
// ***in case raffle number != num for any person, return empty string ***
return "";
}
int main() {
int choice;
// queue to store the names
queue<string> line;
// queue to store the raffle number
queue<int>raffle;
int last_raffle;
srand(time(0));
while(true) {
cout << "Snow's BBQ Menu" << endl << endl;
cout << "1. Add a Name" << endl;
cout << "2. Make an Order" << endl;
cout << "3. Count Names" << endl;
cout << "4. Draw Raffle Winner" << endl;
cout << "5. Display Line" << endl;
cout << "6. Help your BFF" << endl;
cout << "7. Exit Menu" << endl << endl;
cout << "Choose your Option: ";
cin >> choice;
switch(choice) {
case 1: {
string name;
cout << "Enter your name: ";
cin >> name;
line.push(name);
last_raffle = 1 +(rand() % 500);
raffle.push(last_raffle);
cout << "Welcome! Your raffle number is " << last_raffle << endl;
break;
}
case 2: {
cout << line.front() << ", you can order now!" << endl;
//as the order of first person in line processed remove that person from line
line.pop();
raffle.pop();
break;
}
case 3: {
cout << "Number of people in the line: " << line.size() << endl;
break;
}
case 4: {
int num =((rand() % line.size()) + 1) * 10;
cout << "The winning raffle number is " << num << "." << endl;
string winner = searchRaffle(raffle, num, line);
cout << endl << winner << ", please choose what do you want:" << endl;
cout << "> 1. To move to the front of the line, or" << endl;
cout << "> 2. A free t-shirt" << endl << endl;
cout << " Choose your option: ";
int option;
cin >> option;
// if selected to move to first in line
if(option == 1) {
// find the persons in front of the winner
int count = searchName(line, winner);
if(count != 0) {
// create two new temporary queues
queue<string> names;
queue<int>id;
string friendName;
int friendId;
int size = line.size();
// move the data from one queue to another
for(int j = 0; j < size; j++) {
if(j == count - 1) {
friendName = line.front();
friendId = raffle.front();
} else {
names.push(line.front());
id.push(raffle.front());
}
line.pop();
raffle.pop();
}
// add the winner as the first in old queues
line.push(friendName);
raffle.push(friendId);
//add remaining persons in the both old queues
for(int j = 0; j < size - 1; j++) {
line.push(names.front());
raffle.push(id.front());
names.pop();
id.pop();
}
cout << endl << winner << ", you are being moved to the front of line!" << endl << endl;
}
} else { // else give free t-shirt
cout << "You have won a free t-shirt" << endl << endl;
}
break;
}
case 5: {
displayQueue(line, raffle);
break;
}
case 6: {
string bffName;
cout << "Please input the name of your BFF: ";
cin >> bffName;
// the number of persons ahead of the bff including bff
int count = searchName(line, bffName);
if(count != 0) {
queue<string> names;
queue<int>id;
string friendName;
int friendId;
int size = line.size();
// move the data from old queues to new queues
for(int j = 0; j < size; j++) {
if(j == count - 1) {
friendName = line.front();
friendId = raffle.front();
} else {
names.push(line.front());
id.push(raffle.front());
}
line.pop();
raffle.pop();
}
// add the friend as first person in old queue
line.push(friendName);
raffle.push(friendId);
//transfering the data from new queues to old queues
for(int j = 0; j < size - 1; j++) {
line.push(names.front());
raffle.push(id.front());
names.pop();
id.pop();
}
cout << endl << bffName << ", you are being moved to the front of line!" << endl << endl;
} else {
cout << endl << "The person with name '" << bffName << "' is not in the line at this time." << endl << endl;
}
break;
}
case 7: {
cout << "Bye!!" << endl;
break;
}
}
}
return 0;
}
Editor is loading...