Compare commits
10 Commits
7d51eeccdf
...
88f2bbce11
| Author | SHA1 | Date | |
|---|---|---|---|
| 88f2bbce11 | |||
| cdaadb06af | |||
| 1ac91090f2 | |||
| 4f977faf8b | |||
| 766737dbcc | |||
| b616c6490e | |||
| 1263e0ebe1 | |||
| 81deba222d | |||
| 914924a3a4 | |||
| d6a22948b6 |
@@ -1,5 +1,7 @@
|
|||||||
#include "Customer.h"
|
#include "Customer.h"
|
||||||
|
|
||||||
|
const std::string Customer::TYPE = "Customer";
|
||||||
|
|
||||||
void Customer::addOrder(std::shared_ptr<Order> orderPointer)
|
void Customer::addOrder(std::shared_ptr<Order> orderPointer)
|
||||||
{
|
{
|
||||||
m_orders[orderPointer->getId()] = orderPointer;
|
m_orders[orderPointer->getId()] = orderPointer;
|
||||||
@@ -12,5 +14,5 @@ orders& Customer::getOrders()
|
|||||||
|
|
||||||
std::string Customer::getType() const
|
std::string Customer::getType() const
|
||||||
{
|
{
|
||||||
return "Customer";
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class Customer : public User
|
|||||||
private:
|
private:
|
||||||
orders m_orders;
|
orders m_orders;
|
||||||
public:
|
public:
|
||||||
|
static const std::string TYPE;
|
||||||
Customer(const std::string& username,
|
Customer(const std::string& username,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
const std::string& phone,
|
const std::string& phone,
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ Date: 18-02-2026
|
|||||||
|
|
||||||
#include "DeliveryPartner.h"
|
#include "DeliveryPartner.h"
|
||||||
|
|
||||||
|
const std::string DeliveryPartner::TYPE = "DeliveryPartner";
|
||||||
|
|
||||||
void DeliveryPartner::acceptDeliveryAssignment(std::shared_ptr<DeliveryAssignment> deliveryAssignmentPointer)
|
void DeliveryPartner::acceptDeliveryAssignment(std::shared_ptr<DeliveryAssignment> deliveryAssignmentPointer)
|
||||||
{
|
{
|
||||||
m_deliveryAssignments[deliveryAssignmentPointer->getId()] = deliveryAssignmentPointer;
|
m_deliveryAssignments[deliveryAssignmentPointer->getId()] = deliveryAssignmentPointer;
|
||||||
@@ -17,5 +19,5 @@ deliveryAssignments& DeliveryPartner::getAssignedDeliveries()
|
|||||||
|
|
||||||
std::string DeliveryPartner::getType() const
|
std::string DeliveryPartner::getType() const
|
||||||
{
|
{
|
||||||
return "DeliveryPartner";
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class DeliveryPartner : public User
|
|||||||
private:
|
private:
|
||||||
deliveryAssignments m_deliveryAssignments;
|
deliveryAssignments m_deliveryAssignments;
|
||||||
public:
|
public:
|
||||||
|
static const std::string TYPE;
|
||||||
DeliveryPartner(const std::string& username,
|
DeliveryPartner(const std::string& username,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
const std::string& phone,
|
const std::string& phone,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ Date: 22-12-2026
|
|||||||
#include<fstream>
|
#include<fstream>
|
||||||
#include<string>
|
#include<string>
|
||||||
#include<stdexcept>
|
#include<stdexcept>
|
||||||
|
|
||||||
template <typename T> using objects = std::map<int, std::shared_ptr<T>>;
|
template <typename T> using objects = std::map<int, std::shared_ptr<T>>;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@@ -18,10 +18,18 @@ Date: 19-02-2026
|
|||||||
#include "MenuItem.h"
|
#include "MenuItem.h"
|
||||||
#include "Order.h"
|
#include "Order.h"
|
||||||
#include "DeliveryAssignment.h"
|
#include "DeliveryAssignment.h"
|
||||||
#include "inputHelper.h"
|
#include "InputHelper.h"
|
||||||
#include "outputHelper.h"
|
#include "OutputHelper.h"
|
||||||
|
#include "Validator.h"
|
||||||
#include "FileDatabase.h"
|
#include "FileDatabase.h"
|
||||||
|
|
||||||
|
const std::string USERS_FILE = "User.txt";
|
||||||
|
const std::string RESTAURANTS_FILE = "Restaurant.txt";
|
||||||
|
const std::string MENU_ITEMS_FILE = "MenuItem.txt";
|
||||||
|
const std::string ORDERS_FILE = "Order.txt";
|
||||||
|
const std::string ITEMS_FILE = "Item.txt";
|
||||||
|
const std::string DELIVERY_ASSIGNMENTS_FILE = "DeliveryAssignment.txt";
|
||||||
|
|
||||||
static bool checkAccess(std::shared_ptr<User> user, const std::string& userWithAccess)
|
static bool checkAccess(std::shared_ptr<User> user, const std::string& userWithAccess)
|
||||||
{
|
{
|
||||||
if (!user || user->getType() != userWithAccess)
|
if (!user || user->getType() != userWithAccess)
|
||||||
@@ -32,7 +40,7 @@ static bool checkAccess(std::shared_ptr<User> user, const std::string& userWithA
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static restaurants::iterator pickRestaurantFromRestaurants(restaurants& ownerRestaurants)
|
static restaurants::iterator selectRestaurantFromList(restaurants& ownerRestaurants)
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
int restaurantIndex = 1, restaurantChoiceIndex;
|
int restaurantIndex = 1, restaurantChoiceIndex;
|
||||||
@@ -69,7 +77,7 @@ static restaurants::iterator pickRestaurantFromRestaurants(restaurants& ownerRes
|
|||||||
return restaurantIterator;
|
return restaurantIterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
static menuItems::iterator pickItemFromMenu(menuItems& restaurantMenuItems)
|
static menuItems::iterator selectMenuItemFromList(menuItems& restaurantMenuItems)
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
int menuItemIndex = 1, menuItemChoiceIndex;
|
int menuItemIndex = 1, menuItemChoiceIndex;
|
||||||
@@ -85,27 +93,30 @@ static menuItems::iterator pickItemFromMenu(menuItems& restaurantMenuItems)
|
|||||||
<< std::left << std::setw(50) << "Description"
|
<< std::left << std::setw(50) << "Description"
|
||||||
<< std::left << std::setw(5) << "Price"
|
<< std::left << std::setw(5) << "Price"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
for (menuItems::iterator menuItemIterator = restaurantMenuItems.begin(); menuItemIterator != restaurantMenuItems.end(); menuItemIterator++, menuItemIndex++)
|
std::map<int, menuItems::iterator> availableItems;
|
||||||
|
for (menuItems::iterator menuItemIterator = restaurantMenuItems.begin(); menuItemIterator != restaurantMenuItems.end(); menuItemIterator++)
|
||||||
{
|
{
|
||||||
auto& menuItem = *(menuItemIterator->second);
|
auto& menuItem = *(menuItemIterator->second);
|
||||||
std::cout
|
if (menuItem.isAvailable())
|
||||||
<< std::left << std::setw(8) << menuItemIndex
|
{
|
||||||
<< std::left << std::setw(5) << menuItem.getId()
|
availableItems[menuItemIndex] = menuItemIterator;
|
||||||
<< std::left << std::setw(25) << menuItem.getName()
|
std::cout
|
||||||
<< std::left << std::setw(50) << menuItem.getDescription()
|
<< std::left << std::setw(8) << menuItemIndex
|
||||||
<< std::left << std::setw(5) << menuItem.getPrice()
|
<< std::left << std::setw(5) << menuItem.getId()
|
||||||
<< "\n";
|
<< std::left << std::setw(25) << menuItem.getName()
|
||||||
|
<< std::left << std::setw(50) << menuItem.getDescription()
|
||||||
|
<< std::left << std::setw(5) << menuItem.getPrice()
|
||||||
|
<< "\n";
|
||||||
|
menuItemIndex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
std::cout << "\nSelect Index: ";
|
std::cout << "\nSelect Index: ";
|
||||||
util::readValue<int>(menuItemChoiceIndex);
|
util::readValue<int>(menuItemChoiceIndex);
|
||||||
menuItemChoiceIndex--;
|
if (menuItemChoiceIndex < 1 || menuItemChoiceIndex > availableItems.size())
|
||||||
if (menuItemChoiceIndex < 0 || menuItemChoiceIndex >= restaurantMenuItems.size())
|
|
||||||
{
|
{
|
||||||
return restaurantMenuItems.end();
|
return restaurantMenuItems.end();
|
||||||
}
|
}
|
||||||
menuItems::iterator menuItemIterator = restaurantMenuItems.begin();
|
return availableItems[menuItemChoiceIndex];
|
||||||
std::advance(menuItemIterator, menuItemChoiceIndex);
|
|
||||||
return menuItemIterator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string getOrderStatusString(const OrderStatus& orderStatus)
|
static std::string getOrderStatusString(const OrderStatus& orderStatus)
|
||||||
@@ -127,7 +138,7 @@ static std::string getOrderStatusString(const OrderStatus& orderStatus)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static orders::iterator pickOrderFromOrders(orders& userOrders)
|
static orders::iterator selectOrderFromList(orders& userOrders)
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
std::cout << "Pick an Order\n";
|
std::cout << "Pick an Order\n";
|
||||||
@@ -180,7 +191,7 @@ static std::string getDeliveryStatusString(const DeliveryStatus& deliveryStatus)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static deliveryAssignments::iterator pickAssignmentFromDeliveryAssignments(deliveryAssignments& assignments, const users& allUsers)
|
static deliveryAssignments::iterator selectDeliveryAssignmentFromList(deliveryAssignments& assignments, const users& allUsers)
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
std::cout << "Pick a Delivery Assignment\n";
|
std::cout << "Pick a Delivery Assignment\n";
|
||||||
@@ -224,17 +235,16 @@ static deliveryAssignments::iterator pickAssignmentFromDeliveryAssignments(deliv
|
|||||||
return assignmentIterator;
|
return assignmentIterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FoodDeliveryController::loadStates()
|
void FoodDeliveryController::loadUsers()
|
||||||
{
|
{
|
||||||
FileDatabase<User> userDatabase("users.txt");
|
FileDatabase<User> userDatabase(USERS_FILE);
|
||||||
FileDatabase<Restaurant> restaurantDatabase("restaurants.txt");
|
|
||||||
FileDatabase<MenuItem> menuItemDatabase("menuItems.txt");
|
|
||||||
FileDatabase<Order> orderDatabase("orders.txt");
|
|
||||||
FileDatabase<Item> itemDatabase("items.txt");
|
|
||||||
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase("assignments.txt");
|
|
||||||
objects<MenuItem> menuItems;
|
|
||||||
objects<Item> items;
|
|
||||||
m_users = userDatabase.load();
|
m_users = userDatabase.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::loadRestaurants(objects<MenuItem>& menuItems)
|
||||||
|
{
|
||||||
|
FileDatabase<Restaurant> restaurantDatabase(RESTAURANTS_FILE);
|
||||||
|
FileDatabase<MenuItem> menuItemDatabase(MENU_ITEMS_FILE);
|
||||||
m_restaurants = restaurantDatabase.load();
|
m_restaurants = restaurantDatabase.load();
|
||||||
for (const auto& restaurantPair : m_restaurants)
|
for (const auto& restaurantPair : m_restaurants)
|
||||||
{
|
{
|
||||||
@@ -263,6 +273,13 @@ void FoodDeliveryController::loadStates()
|
|||||||
throw std::runtime_error("MenuItem has invalid Restaurant ID");
|
throw std::runtime_error("MenuItem has invalid Restaurant ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::loadOrders(objects<MenuItem>& menuItems)
|
||||||
|
{
|
||||||
|
FileDatabase<Order> orderDatabase(ORDERS_FILE);
|
||||||
|
FileDatabase<Item> itemDatabase(ITEMS_FILE);
|
||||||
|
objects<Item> items = itemDatabase.load();
|
||||||
m_orders = orderDatabase.load();
|
m_orders = orderDatabase.load();
|
||||||
for (auto& orderPair : m_orders)
|
for (auto& orderPair : m_orders)
|
||||||
{
|
{
|
||||||
@@ -286,7 +303,6 @@ void FoodDeliveryController::loadStates()
|
|||||||
}
|
}
|
||||||
restaurantIterator->second->addOrder(orderPair.second);
|
restaurantIterator->second->addOrder(orderPair.second);
|
||||||
}
|
}
|
||||||
items = itemDatabase.load();
|
|
||||||
for (auto& itemPair : items)
|
for (auto& itemPair : items)
|
||||||
{
|
{
|
||||||
int itemId = itemPair.second->getMenuItemId();
|
int itemId = itemPair.second->getMenuItemId();
|
||||||
@@ -310,6 +326,11 @@ void FoodDeliveryController::loadStates()
|
|||||||
throw std::runtime_error("Item has invalid Order ID");
|
throw std::runtime_error("Item has invalid Order ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::loadDeliveryAssignments()
|
||||||
|
{
|
||||||
|
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE);
|
||||||
m_assignments = deliveryAssignmentsDatabase.load();
|
m_assignments = deliveryAssignmentsDatabase.load();
|
||||||
for (auto& assignmentPair : m_assignments)
|
for (auto& assignmentPair : m_assignments)
|
||||||
{
|
{
|
||||||
@@ -341,18 +362,27 @@ void FoodDeliveryController::loadStates()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FoodDeliveryController::persistStates()
|
void FoodDeliveryController::loadStates()
|
||||||
{
|
{
|
||||||
FileDatabase<User> userDatabase("users.txt");
|
loadUsers();
|
||||||
FileDatabase<Restaurant> restaurantDatabase("restaurants.txt");
|
objects<MenuItem> menuItems;
|
||||||
FileDatabase<MenuItem> menuItemDatabase("menuItems.txt");
|
loadRestaurants(menuItems);
|
||||||
FileDatabase<Order> orderDatabase("orders.txt");
|
loadOrders(menuItems);
|
||||||
FileDatabase<Item> itemDatabase("items.txt");
|
loadDeliveryAssignments();
|
||||||
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase("assignments.txt");
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistUsers() const
|
||||||
|
{
|
||||||
|
FileDatabase<User> userDatabase(USERS_FILE);
|
||||||
userDatabase.save(m_users);
|
userDatabase.save(m_users);
|
||||||
restaurantDatabase.save(m_restaurants);
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistRestaurants() const
|
||||||
|
{
|
||||||
|
FileDatabase<Restaurant> restaurantDatabase(RESTAURANTS_FILE);
|
||||||
|
FileDatabase<MenuItem> menuItemDatabase(MENU_ITEMS_FILE);
|
||||||
objects<MenuItem> allMenuItems;
|
objects<MenuItem> allMenuItems;
|
||||||
objects<Item> allItems;
|
restaurantDatabase.save(m_restaurants);
|
||||||
for (const auto& restaurantPair : m_restaurants)
|
for (const auto& restaurantPair : m_restaurants)
|
||||||
{
|
{
|
||||||
for (const auto& menuItemPair : restaurantPair.second->getMenuItems())
|
for (const auto& menuItemPair : restaurantPair.second->getMenuItems())
|
||||||
@@ -361,6 +391,13 @@ void FoodDeliveryController::persistStates()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
menuItemDatabase.save(allMenuItems);
|
menuItemDatabase.save(allMenuItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistOrders() const
|
||||||
|
{
|
||||||
|
FileDatabase<Order> orderDatabase(ORDERS_FILE);
|
||||||
|
FileDatabase<Item> itemDatabase(ITEMS_FILE);
|
||||||
|
objects<Item> allItems;
|
||||||
orderDatabase.save(m_orders);
|
orderDatabase.save(m_orders);
|
||||||
for (const auto& orderPair : m_orders)
|
for (const auto& orderPair : m_orders)
|
||||||
{
|
{
|
||||||
@@ -370,9 +407,22 @@ void FoodDeliveryController::persistStates()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
itemDatabase.save(allItems);
|
itemDatabase.save(allItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistDeliveryAssignments() const
|
||||||
|
{
|
||||||
|
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE);
|
||||||
deliveryAssignmentsDatabase.save(m_assignments);
|
deliveryAssignmentsDatabase.save(m_assignments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistStates() const
|
||||||
|
{
|
||||||
|
persistUsers();
|
||||||
|
persistRestaurants();
|
||||||
|
persistOrders();
|
||||||
|
persistDeliveryAssignments();
|
||||||
|
}
|
||||||
|
|
||||||
void FoodDeliveryController::run()
|
void FoodDeliveryController::run()
|
||||||
{
|
{
|
||||||
bool isMenuActive = true;
|
bool isMenuActive = true;
|
||||||
@@ -438,15 +488,15 @@ void FoodDeliveryController::login()
|
|||||||
std::unique_ptr<Menu> menu;
|
std::unique_ptr<Menu> menu;
|
||||||
if (user.login(password))
|
if (user.login(password))
|
||||||
{
|
{
|
||||||
if (user.getType() == "RestaurantOwner")
|
if (user.getType() == RestaurantOwner::TYPE)
|
||||||
{
|
{
|
||||||
menu = std::make_unique<RestaurantOwnerMenu>(*this, user.getName());
|
menu = std::make_unique<RestaurantOwnerMenu>(*this, user.getName());
|
||||||
}
|
}
|
||||||
else if (user.getType() == "Customer")
|
else if (user.getType() == Customer::TYPE)
|
||||||
{
|
{
|
||||||
menu = std::make_unique<CustomerMenu>(*this, user.getName());
|
menu = std::make_unique<CustomerMenu>(*this, user.getName());
|
||||||
}
|
}
|
||||||
else if (user.getType() == "DeliveryPartner")
|
else if (user.getType() == DeliveryPartner::TYPE)
|
||||||
{
|
{
|
||||||
menu = std::make_unique<DeliveryPartnerMenu>(*this, user.getName());
|
menu = std::make_unique<DeliveryPartnerMenu>(*this, user.getName());
|
||||||
}
|
}
|
||||||
@@ -496,8 +546,18 @@ void FoodDeliveryController::registerUser()
|
|||||||
util::readString(name);
|
util::readString(name);
|
||||||
std::cout << "Enter Phone: ";
|
std::cout << "Enter Phone: ";
|
||||||
util::readString(phone);
|
util::readString(phone);
|
||||||
|
if (!util::isPhoneNumberValid(phone))
|
||||||
|
{
|
||||||
|
std::cout << "Phone Number is Invalid. Cannot Register User!\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
std::cout << "Enter Email: ";
|
std::cout << "Enter Email: ";
|
||||||
util::readString(email);
|
util::readString(email);
|
||||||
|
if (!util::isEmailValid(email))
|
||||||
|
{
|
||||||
|
std::cout << "Email ID is Invalid. Cannot Register User!\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
std::cout << "Enter Address: ";
|
std::cout << "Enter Address: ";
|
||||||
util::readString(address);
|
util::readString(address);
|
||||||
while (true)
|
while (true)
|
||||||
@@ -547,7 +607,7 @@ void FoodDeliveryController::registerUser()
|
|||||||
void FoodDeliveryController::listRestaurants() const
|
void FoodDeliveryController::listRestaurants() const
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -577,7 +637,7 @@ void FoodDeliveryController::addNewRestaurant()
|
|||||||
{
|
{
|
||||||
std::string name;
|
std::string name;
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -595,12 +655,12 @@ void FoodDeliveryController::updateRestaurantStatus() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
||||||
restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(restaurantOwner.getRestaurants());
|
restaurants::iterator restaurantIterator = selectRestaurantFromList(restaurantOwner.getRestaurants());
|
||||||
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
||||||
{
|
{
|
||||||
if (restaurantIterator->second->getStatus() == true)
|
if (restaurantIterator->second->getStatus() == true)
|
||||||
@@ -631,12 +691,12 @@ void FoodDeliveryController::listRestaurantOrders() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
||||||
restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(restaurantOwner.getRestaurants());
|
restaurants::iterator restaurantIterator = selectRestaurantFromList(restaurantOwner.getRestaurants());
|
||||||
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
||||||
{
|
{
|
||||||
orders& restaurantOrders = restaurantIterator->second->getOrders();
|
orders& restaurantOrders = restaurantIterator->second->getOrders();
|
||||||
@@ -645,7 +705,7 @@ void FoodDeliveryController::listRestaurantOrders() const
|
|||||||
std::cout << "Restaurant " << restaurantIterator->second->getName() << " has no orders!\n";
|
std::cout << "Restaurant " << restaurantIterator->second->getName() << " has no orders!\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
orders::iterator orderIterator = pickOrderFromOrders(restaurantOrders);
|
orders::iterator orderIterator = selectOrderFromList(restaurantOrders);
|
||||||
if (orderIterator != restaurantOrders.end())
|
if (orderIterator != restaurantOrders.end())
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
@@ -689,17 +749,17 @@ void FoodDeliveryController::listRestaurantOrders() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FoodDeliveryController::markOrderReady()
|
void FoodDeliveryController::setOrderReady()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
||||||
restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(restaurantOwner.getRestaurants());
|
restaurants::iterator restaurantIterator = selectRestaurantFromList(restaurantOwner.getRestaurants());
|
||||||
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
||||||
{
|
{
|
||||||
orders& restaurantOrders = restaurantIterator->second->getOrders();
|
orders& restaurantOrders = restaurantIterator->second->getOrders();
|
||||||
@@ -708,7 +768,7 @@ void FoodDeliveryController::markOrderReady()
|
|||||||
std::cout << "Restaurant " << restaurantIterator->second->getName() << " has no orders!\n";
|
std::cout << "Restaurant " << restaurantIterator->second->getName() << " has no orders!\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
orders::iterator orderIterator = pickOrderFromOrders(restaurantOrders);
|
orders::iterator orderIterator = selectOrderFromList(restaurantOrders);
|
||||||
if (orderIterator != restaurantOrders.end())
|
if (orderIterator != restaurantOrders.end())
|
||||||
{
|
{
|
||||||
OrderStatus orderStatus = orderIterator->second->getStatus();
|
OrderStatus orderStatus = orderIterator->second->getStatus();
|
||||||
@@ -747,12 +807,12 @@ void FoodDeliveryController::listMenuItems() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
||||||
restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(restaurantOwner.getRestaurants());
|
restaurants::iterator restaurantIterator = selectRestaurantFromList(restaurantOwner.getRestaurants());
|
||||||
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
@@ -766,14 +826,16 @@ void FoodDeliveryController::listMenuItems() const
|
|||||||
std::cout << std::left << std::setw(5) << "ID"
|
std::cout << std::left << std::setw(5) << "ID"
|
||||||
<< std::left << std::setw(25) << "Name"
|
<< std::left << std::setw(25) << "Name"
|
||||||
<< std::left << std::setw(50) << "Description"
|
<< std::left << std::setw(50) << "Description"
|
||||||
<< std::left << std::setw(5) << "Price"
|
<< std::left << std::setw(10) << "Price"
|
||||||
|
<< std::left << std::setw(20) << "Status"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
for (auto& menuItemPointer : restaurantMenuItems)
|
for (auto& menuItemPointer : restaurantMenuItems)
|
||||||
{
|
{
|
||||||
std::cout << std::left << std::setw(5) << menuItemPointer.second->getId()
|
std::cout << std::left << std::setw(5) << menuItemPointer.second->getId()
|
||||||
<< std::left << std::setw(25) << menuItemPointer.second->getName()
|
<< std::left << std::setw(25) << menuItemPointer.second->getName()
|
||||||
<< std::left << std::setw(50) << menuItemPointer.second->getDescription()
|
<< std::left << std::setw(50) << menuItemPointer.second->getDescription()
|
||||||
<< std::left << std::setw(5) << menuItemPointer.second->getPrice()
|
<< std::left << std::setw(10) << menuItemPointer.second->getPrice()
|
||||||
|
<< std::left << std::setw(10) << (menuItemPointer.second->isAvailable() ? "Available" : "Not Available")
|
||||||
<< "\n";
|
<< "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -794,12 +856,12 @@ void FoodDeliveryController::addMenuItem() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
||||||
restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(restaurantOwner.getRestaurants());
|
restaurants::iterator restaurantIterator = selectRestaurantFromList(restaurantOwner.getRestaurants());
|
||||||
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
@@ -832,19 +894,19 @@ void FoodDeliveryController::removeMenuItem() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "RestaurantOwner"))
|
if (!checkAccess(m_authenticatedUser, RestaurantOwner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast<RestaurantOwner>(m_authenticatedUser));
|
||||||
restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(restaurantOwner.getRestaurants());
|
restaurants::iterator restaurantIterator = selectRestaurantFromList(restaurantOwner.getRestaurants());
|
||||||
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
if (restaurantIterator != restaurantOwner.getRestaurants().end())
|
||||||
{
|
{
|
||||||
menuItems& restaurantMenuItems = restaurantIterator->second->getMenuItems();
|
menuItems& restaurantMenuItems = restaurantIterator->second->getMenuItems();
|
||||||
menuItems::iterator menuItemIterator = pickItemFromMenu(restaurantMenuItems);
|
menuItems::iterator menuItemIterator = selectMenuItemFromList(restaurantMenuItems);
|
||||||
if (menuItemIterator != restaurantMenuItems.end())
|
if (menuItemIterator != restaurantMenuItems.end())
|
||||||
{
|
{
|
||||||
restaurantMenuItems.erase(menuItemIterator);
|
menuItemIterator->second->makeUnavailable();
|
||||||
std::cout << "Removed Menu Item successfully\n";
|
std::cout << "Removed Menu Item successfully\n";
|
||||||
}
|
}
|
||||||
else if (!restaurantMenuItems.empty())
|
else if (!restaurantMenuItems.empty())
|
||||||
@@ -869,7 +931,7 @@ void FoodDeliveryController::listCustomerOrders() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "Customer"))
|
if (!checkAccess(m_authenticatedUser, Customer::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -884,7 +946,7 @@ void FoodDeliveryController::listCustomerOrders() const
|
|||||||
std::cout << "You have not placed any orders!\n";
|
std::cout << "You have not placed any orders!\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
orders::iterator orderIterator = pickOrderFromOrders(customerOrders);
|
orders::iterator orderIterator = selectOrderFromList(customerOrders);
|
||||||
if (orderIterator != customerOrders.end())
|
if (orderIterator != customerOrders.end())
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
@@ -928,7 +990,7 @@ void FoodDeliveryController::placeOrder()
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "Customer"))
|
if (!checkAccess(m_authenticatedUser, Customer::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -937,7 +999,7 @@ void FoodDeliveryController::placeOrder()
|
|||||||
{
|
{
|
||||||
throw std::runtime_error("Cannot place order. Failed to verify access!");
|
throw std::runtime_error("Cannot place order. Failed to verify access!");
|
||||||
}
|
}
|
||||||
restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(m_restaurants);
|
restaurants::iterator restaurantIterator = selectRestaurantFromList(m_restaurants);
|
||||||
if (restaurantIterator != m_restaurants.end())
|
if (restaurantIterator != m_restaurants.end())
|
||||||
{
|
{
|
||||||
bool isMenuActive = true;
|
bool isMenuActive = true;
|
||||||
@@ -956,7 +1018,7 @@ void FoodDeliveryController::placeOrder()
|
|||||||
std::shared_ptr<Order> order;
|
std::shared_ptr<Order> order;
|
||||||
while (isMenuActive)
|
while (isMenuActive)
|
||||||
{
|
{
|
||||||
menuItems::iterator menuItemIterator = pickItemFromMenu(restaurantMenuItems);
|
menuItems::iterator menuItemIterator = selectMenuItemFromList(restaurantMenuItems);
|
||||||
if (menuItemIterator != restaurantMenuItems.end())
|
if (menuItemIterator != restaurantMenuItems.end())
|
||||||
{
|
{
|
||||||
int quantity;
|
int quantity;
|
||||||
@@ -1018,7 +1080,7 @@ void FoodDeliveryController::cancelOrder() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "Customer"))
|
if (!checkAccess(m_authenticatedUser, Customer::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1033,7 +1095,7 @@ void FoodDeliveryController::cancelOrder() const
|
|||||||
std::cout << "You have not placed any orders!\n";
|
std::cout << "You have not placed any orders!\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
orders::iterator orderIterator = pickOrderFromOrders(customerOrders);
|
orders::iterator orderIterator = selectOrderFromList(customerOrders);
|
||||||
if (orderIterator != customerOrders.end())
|
if (orderIterator != customerOrders.end())
|
||||||
{
|
{
|
||||||
OrderStatus orderStatus = orderIterator->second->getStatus();
|
OrderStatus orderStatus = orderIterator->second->getStatus();
|
||||||
@@ -1064,7 +1126,7 @@ void FoodDeliveryController::listDeliveryAssignments()
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "DeliveryPartner"))
|
if (!checkAccess(m_authenticatedUser, DeliveryPartner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1110,7 +1172,7 @@ void FoodDeliveryController::acceptDeliveryAssignment()
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "DeliveryPartner"))
|
if (!checkAccess(m_authenticatedUser, DeliveryPartner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1124,7 +1186,7 @@ void FoodDeliveryController::acceptDeliveryAssignment()
|
|||||||
std::cout << "No Delivery Assignments available at the moment!\n";
|
std::cout << "No Delivery Assignments available at the moment!\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
deliveryAssignments::iterator assignmentIterator = pickAssignmentFromDeliveryAssignments(m_assignments, m_users);
|
deliveryAssignments::iterator assignmentIterator = selectDeliveryAssignmentFromList(m_assignments, m_users);
|
||||||
if (assignmentIterator != m_assignments.end())
|
if (assignmentIterator != m_assignments.end())
|
||||||
{
|
{
|
||||||
DeliveryStatus deliveryStatus = assignmentIterator->second->getStatus();
|
DeliveryStatus deliveryStatus = assignmentIterator->second->getStatus();
|
||||||
@@ -1157,7 +1219,7 @@ void FoodDeliveryController::confirmDeliveryAssignment() const
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
if (!checkAccess(m_authenticatedUser, "DeliveryPartner"))
|
if (!checkAccess(m_authenticatedUser, DeliveryPartner::TYPE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1172,7 +1234,7 @@ void FoodDeliveryController::confirmDeliveryAssignment() const
|
|||||||
std::cout << "You haven't accepted any Delivery Assignments!\n";
|
std::cout << "You haven't accepted any Delivery Assignments!\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
deliveryAssignments::iterator assignmentIterator = pickAssignmentFromDeliveryAssignments(assignments, m_users);
|
deliveryAssignments::iterator assignmentIterator = selectDeliveryAssignmentFromList(assignments, m_users);
|
||||||
if (assignmentIterator != assignments.end())
|
if (assignmentIterator != assignments.end())
|
||||||
{
|
{
|
||||||
DeliveryStatus deliveryStatus = assignmentIterator->second->getStatus();
|
DeliveryStatus deliveryStatus = assignmentIterator->second->getStatus();
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ using menuItems = std::map<int, std::shared_ptr<MenuItem>>;
|
|||||||
using items = std::vector<std::shared_ptr<Item>>;
|
using items = std::vector<std::shared_ptr<Item>>;
|
||||||
using orders = std::map<int, std::shared_ptr<Order>>;
|
using orders = std::map<int, std::shared_ptr<Order>>;
|
||||||
using deliveryAssignments = std::map<int, std::shared_ptr<DeliveryAssignment>>;
|
using deliveryAssignments = std::map<int, std::shared_ptr<DeliveryAssignment>>;
|
||||||
|
template <typename T> using objects = std::map<int, std::shared_ptr<T>>;
|
||||||
|
|
||||||
class FoodDeliveryController
|
class FoodDeliveryController
|
||||||
{
|
{
|
||||||
@@ -31,8 +32,16 @@ private:
|
|||||||
orders m_orders;
|
orders m_orders;
|
||||||
deliveryAssignments m_assignments;
|
deliveryAssignments m_assignments;
|
||||||
std::shared_ptr<User> m_authenticatedUser;
|
std::shared_ptr<User> m_authenticatedUser;
|
||||||
|
void loadUsers();
|
||||||
|
void loadRestaurants(objects<MenuItem>&);
|
||||||
|
void loadOrders(objects<MenuItem>&);
|
||||||
|
void loadDeliveryAssignments();
|
||||||
|
void persistUsers() const;
|
||||||
|
void persistRestaurants() const;
|
||||||
|
void persistOrders() const;
|
||||||
|
void persistDeliveryAssignments() const;
|
||||||
void loadStates();
|
void loadStates();
|
||||||
void persistStates();
|
void persistStates() const;
|
||||||
public:
|
public:
|
||||||
void run();
|
void run();
|
||||||
void login();
|
void login();
|
||||||
@@ -41,7 +50,7 @@ public:
|
|||||||
void addNewRestaurant();
|
void addNewRestaurant();
|
||||||
void updateRestaurantStatus() const;
|
void updateRestaurantStatus() const;
|
||||||
void listRestaurantOrders() const;
|
void listRestaurantOrders() const;
|
||||||
void markOrderReady();
|
void setOrderReady();
|
||||||
void listMenuItems() const;
|
void listMenuItems() const;
|
||||||
void addMenuItem() const;
|
void addMenuItem() const;
|
||||||
void removeMenuItem() const;
|
void removeMenuItem() const;
|
||||||
|
|||||||
@@ -10,11 +10,12 @@ Date: 18-02-2026
|
|||||||
int MenuItem::m_uid = 0;
|
int MenuItem::m_uid = 0;
|
||||||
|
|
||||||
|
|
||||||
MenuItem::MenuItem(int id, const std::string& name, const std::string& description, double price, int restaurantId):
|
MenuItem::MenuItem(int id, const std::string& name, const std::string& description, double price, bool isAvailable, int restaurantId):
|
||||||
m_id(id),
|
m_id(id),
|
||||||
m_name(name),
|
m_name(name),
|
||||||
m_description(description),
|
m_description(description),
|
||||||
m_price(price),
|
m_price(price),
|
||||||
|
m_isAvailable(isAvailable),
|
||||||
m_restaurantId(restaurantId)
|
m_restaurantId(restaurantId)
|
||||||
{
|
{
|
||||||
if (id > m_uid)
|
if (id > m_uid)
|
||||||
@@ -58,6 +59,16 @@ int MenuItem::getRestaurantId() const
|
|||||||
return m_restaurantId;
|
return m_restaurantId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MenuItem::isAvailable() const
|
||||||
|
{
|
||||||
|
return m_isAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuItem::makeUnavailable()
|
||||||
|
{
|
||||||
|
m_isAvailable = false;
|
||||||
|
}
|
||||||
|
|
||||||
std::string MenuItem::serialize() const
|
std::string MenuItem::serialize() const
|
||||||
{
|
{
|
||||||
std::ostringstream serializedMenuItem;
|
std::ostringstream serializedMenuItem;
|
||||||
@@ -65,6 +76,7 @@ std::string MenuItem::serialize() const
|
|||||||
<< m_name << '|'
|
<< m_name << '|'
|
||||||
<< m_description << '|'
|
<< m_description << '|'
|
||||||
<< m_price << '|'
|
<< m_price << '|'
|
||||||
|
<< (m_isAvailable ? '1' : '0') << '|'
|
||||||
<< m_restaurantId;
|
<< m_restaurantId;
|
||||||
return serializedMenuItem.str();
|
return serializedMenuItem.str();
|
||||||
}
|
}
|
||||||
@@ -73,6 +85,7 @@ std::shared_ptr<MenuItem> MenuItem::deserialize(const std::string& record)
|
|||||||
{
|
{
|
||||||
int id, restaurantId;
|
int id, restaurantId;
|
||||||
double price;
|
double price;
|
||||||
|
bool isAvailable;
|
||||||
std::string name, description, token;
|
std::string name, description, token;
|
||||||
std::istringstream serializedMenuItem(record);
|
std::istringstream serializedMenuItem(record);
|
||||||
getline(serializedMenuItem, token, '|');
|
getline(serializedMenuItem, token, '|');
|
||||||
@@ -92,11 +105,13 @@ std::shared_ptr<MenuItem> MenuItem::deserialize(const std::string& record)
|
|||||||
throw std::runtime_error("Invalid Price for MenuItem in snapshot");
|
throw std::runtime_error("Invalid Price for MenuItem in snapshot");
|
||||||
}
|
}
|
||||||
getline(serializedMenuItem, token, '|');
|
getline(serializedMenuItem, token, '|');
|
||||||
|
isAvailable = ((token == "1") ? true : false);
|
||||||
|
getline(serializedMenuItem, token, '|');
|
||||||
try {
|
try {
|
||||||
restaurantId = std::stoi(token);
|
restaurantId = std::stoi(token);
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
throw std::runtime_error("Invalid Restaurant ID for MenuItem in snapshot");
|
throw std::runtime_error("Invalid Restaurant ID for MenuItem in snapshot");
|
||||||
}
|
}
|
||||||
return std::make_shared<MenuItem>(id, name, description, price, restaurantId);
|
return std::make_shared<MenuItem>(id, name, description, price, isAvailable, restaurantId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ private:
|
|||||||
std::string m_name;
|
std::string m_name;
|
||||||
std::string m_description;
|
std::string m_description;
|
||||||
double m_price;
|
double m_price;
|
||||||
|
bool m_isAvailable;
|
||||||
int m_restaurantId;
|
int m_restaurantId;
|
||||||
public:
|
public:
|
||||||
MenuItem():
|
MenuItem():
|
||||||
@@ -22,6 +23,7 @@ public:
|
|||||||
m_name(""),
|
m_name(""),
|
||||||
m_description(""),
|
m_description(""),
|
||||||
m_price(0),
|
m_price(0),
|
||||||
|
m_isAvailable(true),
|
||||||
m_restaurantId(0)
|
m_restaurantId(0)
|
||||||
{}
|
{}
|
||||||
MenuItem(const std::string& name, const std::string& description, double price, int restaurantId):
|
MenuItem(const std::string& name, const std::string& description, double price, int restaurantId):
|
||||||
@@ -29,15 +31,18 @@ public:
|
|||||||
m_name(name),
|
m_name(name),
|
||||||
m_description(description),
|
m_description(description),
|
||||||
m_price(price),
|
m_price(price),
|
||||||
|
m_isAvailable(true),
|
||||||
m_restaurantId(restaurantId)
|
m_restaurantId(restaurantId)
|
||||||
{}
|
{}
|
||||||
MenuItem(int, const std::string&, const std::string&, double, int);
|
MenuItem(int, const std::string&, const std::string&, double, bool, int);
|
||||||
int getId() const;
|
int getId() const;
|
||||||
std::string getName() const;
|
std::string getName() const;
|
||||||
std::string getDescription() const;
|
std::string getDescription() const;
|
||||||
double getPrice() const;
|
double getPrice() const;
|
||||||
void setPrice(double);
|
void setPrice(double);
|
||||||
int getRestaurantId() const;
|
int getRestaurantId() const;
|
||||||
|
bool isAvailable() const;
|
||||||
|
void makeUnavailable();
|
||||||
std::string serialize() const;
|
std::string serialize() const;
|
||||||
static std::shared_ptr<MenuItem> deserialize(const std::string&);
|
static std::shared_ptr<MenuItem> deserialize(const std::string&);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,150 @@
|
|||||||
|
1|Grilled Chicken|Classic grilled chicken|12.5|0|1
|
||||||
|
2|Veg Burger|Vegetable patty burger|8|1|1
|
||||||
|
3|Cheese Burger|Beef burger with cheese|10|1|1
|
||||||
|
4|French Fries|Crispy fries|4.5|1|1
|
||||||
|
5|Grilled Sandwich|Toasted sandwich|6|1|1
|
||||||
|
6|Chicken Wrap|Grilled chicken wrap|9|1|1
|
||||||
|
7|Veg Wrap|Vegetable wrap|7.5|1|1
|
||||||
|
8|Cola|Chilled soft drink|2|1|1
|
||||||
|
9|Iced Tea|Cold brewed tea|2.5|1|1
|
||||||
|
10|Brownie|Chocolate brownie|5|1|1
|
||||||
|
11|Pasta Alfredo|Creamy pasta|11|1|2
|
||||||
|
12|Pasta Marinara|Tomato pasta|10|1|2
|
||||||
|
13|Garlic Bread|Toasted garlic bread|4|1|2
|
||||||
|
14|Caesar Salad|Fresh salad|7.5|1|2
|
||||||
|
15|Grilled Veggies|Seasonal vegetables|6.5|1|2
|
||||||
|
16|Chicken Pasta|Pasta with chicken|12.5|1|2
|
||||||
|
17|Soup of the Day|Daily soup|5|1|2
|
||||||
|
18|Coffee|Hot brewed coffee|3|1|2
|
||||||
|
19|Tea|Hot tea|2.5|1|2
|
||||||
|
20|Cheesecake|Classic cheesecake|6|1|2
|
||||||
|
21|Veg Bowl|Healthy veg bowl|9|1|3
|
||||||
|
22|Chicken Bowl|Protein chicken bowl|11.5|1|3
|
||||||
|
23|Quinoa Salad|Quinoa mixed salad|10|1|3
|
||||||
|
24|Fruit Salad|Fresh fruit mix|6|1|3
|
||||||
|
25|Avocado Toast|Toasted avocado bread|7.5|1|3
|
||||||
|
26|Smoothie|Fruit smoothie|5.5|1|3
|
||||||
|
27|Grilled Tofu|Tofu with herbs|9.5|1|3
|
||||||
|
28|Veg Soup|Warm vegetable soup|5|1|3
|
||||||
|
29|Green Juice|Fresh juice|4.5|1|3
|
||||||
|
30|Yogurt Cup|Chilled yogurt|3.5|1|3
|
||||||
|
31|Chicken Wings|Spicy wings|10.5|1|4
|
||||||
|
32|Veg Nuggets|Crispy nuggets|7|1|4
|
||||||
|
33|Loaded Fries|Fries with toppings|8.5|1|4
|
||||||
|
34|Chicken Burger|Burger with chicken|9.5|1|4
|
||||||
|
35|Veg Burger|Classic veg burger|8|1|4
|
||||||
|
36|Onion Rings|Crispy onion rings|5|1|4
|
||||||
|
37|Hot Dog|Grilled hot dog|6.5|1|4
|
||||||
|
38|Milkshake|Vanilla milkshake|4.5|1|4
|
||||||
|
39|Soda|Carbonated drink|2|1|4
|
||||||
|
40|Ice Cream|Vanilla scoop|3.5|1|4
|
||||||
|
41|Breakfast Combo|Eggs and toast|8|1|5
|
||||||
|
42|Pancakes|Fluffy pancakes|6.5|1|5
|
||||||
|
43|Omelette|Cheese omelette|5.5|1|5
|
||||||
|
44|Toast Butter|Buttered toast|3|1|5
|
||||||
|
45|Fruit Plate|Seasonal fruits|4.5|1|5
|
||||||
|
46|Lunch Plate|Daily lunch meal|10|1|5
|
||||||
|
47|Veg Curry|Mixed veg curry|8.5|1|5
|
||||||
|
48|Rice Bowl|Steamed rice|4|1|5
|
||||||
|
49|Tea|Hot tea|2|1|5
|
||||||
|
50|Coffee|Fresh coffee|3|1|5
|
||||||
|
51|Chicken Rice|Rice with chicken|11|1|6
|
||||||
|
52|Veg Rice|Rice with vegetables|9|1|6
|
||||||
|
53|Noodles|Stir fried noodles|8.5|1|6
|
||||||
|
54|Veg Manchurian|Veg balls in sauce|9.5|1|6
|
||||||
|
55|Chicken Manchurian|Chicken in sauce|11.5|1|6
|
||||||
|
56|Spring Rolls|Crispy rolls|6|1|6
|
||||||
|
57|Fried Rice|Classic fried rice|8|1|6
|
||||||
|
58|Hot Soup|Soup bowl|4.5|1|6
|
||||||
|
59|Cold Drink|Chilled beverage|2.5|1|6
|
||||||
|
60|Ice Cream|Chocolate scoop|3.5|1|6
|
||||||
|
61|Chicken Sandwich|Grilled sandwich|8.5|1|7
|
||||||
|
62|Veg Sandwich|Vegetable sandwich|7|1|7
|
||||||
|
63|Club Sandwich|Triple layer sandwich|9.5|1|7
|
||||||
|
64|French Fries|Crispy fries|4|1|7
|
||||||
|
65|Cheese Toast|Toasted cheese|5|1|7
|
||||||
|
66|Soup|Daily soup|4.5|1|7
|
||||||
|
67|Salad|Fresh salad|6|1|7
|
||||||
|
68|Cold Coffee|Iced coffee|3.5|1|7
|
||||||
|
69|Tea|Hot tea|2|1|7
|
||||||
|
70|Brownie|Chocolate brownie|5.5|1|7
|
||||||
|
71|Steak|Grilled steak|15|1|8
|
||||||
|
72|Chicken Steak|Chicken fillet|13|1|8
|
||||||
|
73|Veg Steak|Grilled veg steak|11|1|8
|
||||||
|
74|Mashed Potato|Creamy potato|5.5|1|8
|
||||||
|
75|Grilled Veggies|Mixed vegetables|6.5|1|8
|
||||||
|
76|Soup|Chef special soup|5|1|8
|
||||||
|
77|Garlic Bread|Toasted bread|4.5|1|8
|
||||||
|
78|Soft Drink|Cold beverage|2.5|1|8
|
||||||
|
79|Dessert|Daily dessert|6|1|8
|
||||||
|
80|Ice Cream|Vanilla ice cream|3.5|1|8
|
||||||
|
81|Chicken Pizza|Thin crust pizza|12|1|9
|
||||||
|
82|Veg Pizza|Vegetable pizza|10|1|9
|
||||||
|
83|Cheese Pizza|Cheesy pizza|11|1|9
|
||||||
|
84|Garlic Bread|Garlic breadsticks|4.5|1|9
|
||||||
|
85|Pasta|Italian pasta|9.5|1|9
|
||||||
|
86|Salad|Side salad|5|1|9
|
||||||
|
87|Chicken Wings|Spicy wings|8.5|1|9
|
||||||
|
88|Cola|Cold cola|2|1|9
|
||||||
|
89|Brownie|Chocolate brownie|5.5|1|9
|
||||||
|
90|Ice Cream|Vanilla scoop|3.5|1|9
|
||||||
|
91|Soup Bowl|Warm soup|5|1|10
|
||||||
|
92|Veg Curry|Vegetable curry|8.5|1|10
|
||||||
|
93|Chicken Curry|Spicy chicken curry|10.5|1|10
|
||||||
|
94|Rice|Steamed rice|4|1|10
|
||||||
|
95|Flatbread|Soft flatbread|3|1|10
|
||||||
|
96|Salad|Fresh salad|6|1|10
|
||||||
|
97|Dessert|Sweet dessert|5.5|1|10
|
||||||
|
98|Tea|Hot tea|2|1|10
|
||||||
|
99|Coffee|Fresh coffee|3|1|10
|
||||||
|
100|Ice Cream|Chocolate scoop|3.5|1|10
|
||||||
|
101|Veg Bowl|Healthy veg bowl|9|1|11
|
||||||
|
102|Tofu Stir Fry|Tofu with veggies|10.5|1|11
|
||||||
|
103|Green Salad|Fresh greens|7|1|11
|
||||||
|
104|Veg Soup|Warm soup|5|1|11
|
||||||
|
105|Smoothie|Fruit smoothie|5.5|1|11
|
||||||
|
106|Grilled Veg|Grilled vegetables|8.5|1|11
|
||||||
|
107|Rice Bowl|Steamed rice|4|1|11
|
||||||
|
108|Juice|Fresh juice|4.5|1|11
|
||||||
|
109|Tea|Herbal tea|2.5|1|11
|
||||||
|
110|Fruit Cup|Mixed fruits|3.5|1|11
|
||||||
|
111|BBQ Chicken|Grilled BBQ chicken|13|1|12
|
||||||
|
112|BBQ Veg|Grilled veg platter|11|1|12
|
||||||
|
113|Roasted Potatoes|Herb potatoes|6|1|12
|
||||||
|
114|Grilled Corn|Butter corn|5.5|1|12
|
||||||
|
115|Chicken Skewers|Skewered chicken|12|1|12
|
||||||
|
116|Veg Skewers|Vegetable skewers|9.5|1|12
|
||||||
|
117|Soup|Hot soup|4.5|1|12
|
||||||
|
118|Soft Drink|Cold drink|2.5|1|12
|
||||||
|
119|Dessert|Sweet dish|5.5|1|12
|
||||||
|
120|Ice Cream|Vanilla ice cream|3.5|1|12
|
||||||
|
121|Chicken Burger|Fast chicken burger|9.5|1|13
|
||||||
|
122|Veg Burger|Quick veg burger|8|1|13
|
||||||
|
123|French Fries|Golden fries|4|1|13
|
||||||
|
124|Chicken Nuggets|Crispy nuggets|7|1|13
|
||||||
|
125|Veg Nuggets|Veg nuggets|6.5|1|13
|
||||||
|
126|Wrap|Quick wrap|7.5|1|13
|
||||||
|
127|Soft Drink|Cold beverage|2.5|1|13
|
||||||
|
128|Milkshake|Chocolate shake|4.5|1|13
|
||||||
|
129|Ice Cream|Vanilla scoop|3.5|1|13
|
||||||
|
130|Cookie|Choco cookie|2.5|1|13
|
||||||
|
131|Veg Platter|Mixed veg platter|10|1|14
|
||||||
|
132|Chicken Platter|Chicken platter|12.5|1|14
|
||||||
|
133|Soup|Warm soup|5|1|14
|
||||||
|
134|Salad|Fresh salad|6|1|14
|
||||||
|
135|Rice Bowl|Rice bowl|4.5|1|14
|
||||||
|
136|Flatbread|Soft bread|3|1|14
|
||||||
|
137|Dessert|Sweet dessert|5.5|1|14
|
||||||
|
138|Tea|Hot tea|2|1|14
|
||||||
|
139|Coffee|Fresh coffee|3|1|14
|
||||||
|
140|Ice Cream|Vanilla ice cream|3.5|1|14
|
||||||
|
141|Chicken Wrap|Spicy chicken wrap|9.5|1|15
|
||||||
|
142|Veg Wrap|Veggie wrap|8|1|15
|
||||||
|
143|Rice Bowl|Rice bowl|4.5|1|15
|
||||||
|
144|Noodles|Stir noodles|8.5|1|15
|
||||||
|
145|Soup|Hot soup|5|1|15
|
||||||
|
146|Grilled Chicken|Herb grilled chicken|12|1|15
|
||||||
|
147|Salad|Fresh salad|6|1|15
|
||||||
|
148|Soft Drink|Cold drink|2.5|1|15
|
||||||
|
149|Dessert|Sweet dessert|5.5|1|15
|
||||||
|
150|Ice Cream|Chocolate ice cream|3.5|1|15
|
||||||
@@ -5,6 +5,8 @@ Date: 18-02-2026
|
|||||||
|
|
||||||
#include "RestaurantOwner.h"
|
#include "RestaurantOwner.h"
|
||||||
|
|
||||||
|
const std::string RestaurantOwner::TYPE = "RestaurantOwner";
|
||||||
|
|
||||||
void RestaurantOwner::addRestaurant(std::shared_ptr<Restaurant> restaurantPointer)
|
void RestaurantOwner::addRestaurant(std::shared_ptr<Restaurant> restaurantPointer)
|
||||||
{
|
{
|
||||||
m_restaurants[restaurantPointer->getId()] = restaurantPointer;
|
m_restaurants[restaurantPointer->getId()] = restaurantPointer;
|
||||||
@@ -17,5 +19,5 @@ restaurants& RestaurantOwner::getRestaurants()
|
|||||||
|
|
||||||
std::string RestaurantOwner::getType() const
|
std::string RestaurantOwner::getType() const
|
||||||
{
|
{
|
||||||
return "RestaurantOwner";
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ using restaurants = std::map<int, std::shared_ptr<Restaurant>>;
|
|||||||
class RestaurantOwner : public User
|
class RestaurantOwner : public User
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
restaurants m_restaurants;
|
restaurants m_restaurants;
|
||||||
public:
|
public:
|
||||||
|
static const std::string TYPE;
|
||||||
RestaurantOwner(const std::string& username,
|
RestaurantOwner(const std::string& username,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
const std::string& phone,
|
const std::string& phone,
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ bool RestaurantOwnerMenu::handleOperation(int choice)
|
|||||||
m_foodDeliveryController.listRestaurantOrders();
|
m_foodDeliveryController.listRestaurantOrders();
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
m_foodDeliveryController.markOrderReady();
|
m_foodDeliveryController.setOrderReady();
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
m_foodDeliveryController.listMenuItems();
|
m_foodDeliveryController.listMenuItems();
|
||||||
|
|||||||
@@ -130,17 +130,18 @@
|
|||||||
<ClCompile Include="DeliveryPartnerMenu.cpp" />
|
<ClCompile Include="DeliveryPartnerMenu.cpp" />
|
||||||
<ClCompile Include="FileDatabase.cpp" />
|
<ClCompile Include="FileDatabase.cpp" />
|
||||||
<ClCompile Include="FoodDeliveryController.cpp" />
|
<ClCompile Include="FoodDeliveryController.cpp" />
|
||||||
<ClCompile Include="inputHelper.cpp" />
|
<ClCompile Include="InputHelper.cpp" />
|
||||||
<ClCompile Include="Item.cpp" />
|
<ClCompile Include="Item.cpp" />
|
||||||
<ClCompile Include="Menu.cpp" />
|
<ClCompile Include="Menu.cpp" />
|
||||||
<ClCompile Include="MenuItem.cpp" />
|
<ClCompile Include="MenuItem.cpp" />
|
||||||
<ClCompile Include="Order.cpp" />
|
<ClCompile Include="Order.cpp" />
|
||||||
<ClCompile Include="outputHelper.cpp" />
|
<ClCompile Include="OutputHelper.cpp" />
|
||||||
<ClCompile Include="Restaurant.cpp" />
|
<ClCompile Include="Restaurant.cpp" />
|
||||||
<ClCompile Include="RestaurantOwner.cpp" />
|
<ClCompile Include="RestaurantOwner.cpp" />
|
||||||
<ClCompile Include="RestaurantOwnerMenu.cpp" />
|
<ClCompile Include="RestaurantOwnerMenu.cpp" />
|
||||||
<ClCompile Include="Trenser.FoodDeliveryApp.cpp" />
|
<ClCompile Include="Trenser.FoodDeliveryApp.cpp" />
|
||||||
<ClCompile Include="User.cpp" />
|
<ClCompile Include="User.cpp" />
|
||||||
|
<ClCompile Include="Validator.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Customer.h" />
|
<ClInclude Include="Customer.h" />
|
||||||
@@ -150,24 +151,25 @@
|
|||||||
<ClInclude Include="DeliveryPartnerMenu.h" />
|
<ClInclude Include="DeliveryPartnerMenu.h" />
|
||||||
<ClInclude Include="FileDatabase.h" />
|
<ClInclude Include="FileDatabase.h" />
|
||||||
<ClInclude Include="FoodDeliveryController.h" />
|
<ClInclude Include="FoodDeliveryController.h" />
|
||||||
<ClInclude Include="inputHelper.h" />
|
<ClInclude Include="InputHelper.h" />
|
||||||
<ClInclude Include="Item.h" />
|
<ClInclude Include="Item.h" />
|
||||||
<ClInclude Include="Menu.h" />
|
<ClInclude Include="Menu.h" />
|
||||||
<ClInclude Include="MenuItem.h" />
|
<ClInclude Include="MenuItem.h" />
|
||||||
<ClInclude Include="Order.h" />
|
<ClInclude Include="Order.h" />
|
||||||
<ClInclude Include="outputHelper.h" />
|
<ClInclude Include="OutputHelper.h" />
|
||||||
<ClInclude Include="Restaurant.h" />
|
<ClInclude Include="Restaurant.h" />
|
||||||
<ClInclude Include="RestaurantOwner.h" />
|
<ClInclude Include="RestaurantOwner.h" />
|
||||||
<ClInclude Include="RestaurantOwnerMenu.h" />
|
<ClInclude Include="RestaurantOwnerMenu.h" />
|
||||||
<ClInclude Include="User.h" />
|
<ClInclude Include="User.h" />
|
||||||
|
<ClInclude Include="Validator.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Text Include="assignments.txt" />
|
<Text Include="DeliveryAssignment.txt" />
|
||||||
<Text Include="items.txt" />
|
<Text Include="Item.txt" />
|
||||||
<Text Include="menuItems.txt" />
|
<Text Include="MenuItem.txt" />
|
||||||
<Text Include="orders.txt" />
|
<Text Include="Order.txt" />
|
||||||
<Text Include="restaurants.txt" />
|
<Text Include="Restaurant.txt" />
|
||||||
<Text Include="users.txt" />
|
<Text Include="User.txt" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
|||||||
+18
-10
@@ -75,10 +75,13 @@
|
|||||||
<ClCompile Include="CustomerMenu.cpp">
|
<ClCompile Include="CustomerMenu.cpp">
|
||||||
<Filter>Controller</Filter>
|
<Filter>Controller</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="inputHelper.cpp">
|
<ClCompile Include="InputHelper.cpp">
|
||||||
<Filter>Utility</Filter>
|
<Filter>Utility</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="outputHelper.cpp">
|
<ClCompile Include="OutputHelper.cpp">
|
||||||
|
<Filter>Utility</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Validator.cpp">
|
||||||
<Filter>Utility</Filter>
|
<Filter>Utility</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -128,29 +131,34 @@
|
|||||||
<ClInclude Include="CustomerMenu.h">
|
<ClInclude Include="CustomerMenu.h">
|
||||||
<Filter>Controller</Filter>
|
<Filter>Controller</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="inputHelper.h">
|
<ClInclude Include="InputHelper.h">
|
||||||
<Filter>Utility</Filter>
|
<Filter>Utility</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="outputHelper.h">
|
<ClInclude Include="OutputHelper.h">
|
||||||
|
<Filter>Utility</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Validator.h">
|
||||||
<Filter>Utility</Filter>
|
<Filter>Utility</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Text Include="users.txt">
|
<Text Include="DeliveryAssignment.txt">
|
||||||
<Filter>Files</Filter>
|
<Filter>Files</Filter>
|
||||||
</Text>
|
</Text>
|
||||||
<Text Include="restaurants.txt">
|
<Text Include="Item.txt">
|
||||||
<Filter>Files</Filter>
|
<Filter>Files</Filter>
|
||||||
</Text>
|
</Text>
|
||||||
<Text Include="menuItems.txt">
|
<Text Include="MenuItem.txt">
|
||||||
<Filter>Files</Filter>
|
<Filter>Files</Filter>
|
||||||
</Text>
|
</Text>
|
||||||
<Text Include="orders.txt">
|
<Text Include="Order.txt">
|
||||||
<Filter>Files</Filter>
|
<Filter>Files</Filter>
|
||||||
</Text>
|
</Text>
|
||||||
<Text Include="items.txt">
|
<Text Include="Restaurant.txt">
|
||||||
|
<Filter>Files</Filter>
|
||||||
|
</Text>
|
||||||
|
<Text Include="User.txt">
|
||||||
<Filter>Files</Filter>
|
<Filter>Files</Filter>
|
||||||
</Text>
|
</Text>
|
||||||
<Text Include="assignments.txt" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
1|alex|Alex Miller|1000000010|alex|alex@mail.com|CityOne|RestaurantOwner
|
||||||
|
2|jordan|Jordan Smith|1000000020|jordan|jordan@mail.com|CityTwo|RestaurantOwner
|
||||||
|
3|taylor|Taylor Brown|1000000030|taylor|taylor@mail.com|CityThree|RestaurantOwner
|
||||||
|
4|emma|Emma Wilson|1000000040|emma|emma@mail.com|CityOne|Customer
|
||||||
|
5|liam|Liam Johnson|1000000050|liam|liam@mail.com|CityTwo|Customer
|
||||||
|
6|olivia|Olivia Davis|1000000060|olivia|olivia@mail.com|CityThree|Customer
|
||||||
|
7|noah|Noah Anderson|1000000070|noah|noah@mail.com|CityOne|DeliveryPartner
|
||||||
|
8|ava|Ava Martinez|1000000080|ava|ava@mail.com|CityTwo|DeliveryPartner
|
||||||
|
9|ethan|Ethan Thomas|1000000090|ethan|ethan@mail.com|CityThree|DeliveryPartner
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
Author: Joel Mathew Thomas
|
||||||
|
Date: 25-02-2026
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Validator.h"
|
||||||
|
|
||||||
|
bool util::isPhoneNumberValid(const std::string& phoneNumber) {
|
||||||
|
if (phoneNumber.size() != 10)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return std::all_of(phoneNumber.begin(), phoneNumber.end(),
|
||||||
|
[](char character)
|
||||||
|
{
|
||||||
|
return std::isdigit(character);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool util::isEmailValid(const std::string& email) {
|
||||||
|
size_t index = email.find('@');
|
||||||
|
if (index == std::string::npos) return false;
|
||||||
|
if (email.find('@', index + 1) != std::string::npos)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (index == 0 || index == email.size() - 1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
Author: Joel Mathew Thomas
|
||||||
|
Date: 25-02-2026
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include<string>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<cctype>
|
||||||
|
|
||||||
|
namespace util
|
||||||
|
{
|
||||||
|
bool isPhoneNumberValid(const std::string&);
|
||||||
|
bool isEmailValid(const std::string&);
|
||||||
|
}
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
1|Grilled Chicken|Classic grilled chicken|12.5|1
|
|
||||||
2|Veg Burger|Vegetable patty burger|8|1
|
|
||||||
3|Cheese Burger|Beef burger with cheese|10|1
|
|
||||||
4|French Fries|Crispy fries|4.5|1
|
|
||||||
5|Grilled Sandwich|Toasted sandwich|6|1
|
|
||||||
6|Chicken Wrap|Grilled chicken wrap|9|1
|
|
||||||
7|Veg Wrap|Vegetable wrap|7.5|1
|
|
||||||
8|Cola|Chilled soft drink|2|1
|
|
||||||
9|Iced Tea|Cold brewed tea|2.5|1
|
|
||||||
10|Brownie|Chocolate brownie|5|1
|
|
||||||
11|Pasta Alfredo|Creamy pasta|11|2
|
|
||||||
12|Pasta Marinara|Tomato pasta|10|2
|
|
||||||
13|Garlic Bread|Toasted garlic bread|4|2
|
|
||||||
14|Caesar Salad|Fresh salad|7.5|2
|
|
||||||
15|Grilled Veggies|Seasonal vegetables|6.5|2
|
|
||||||
16|Chicken Pasta|Pasta with chicken|12.5|2
|
|
||||||
17|Soup of the Day|Daily soup|5|2
|
|
||||||
18|Coffee|Hot brewed coffee|3|2
|
|
||||||
19|Tea|Hot tea|2.5|2
|
|
||||||
20|Cheesecake|Classic cheesecake|6|2
|
|
||||||
21|Veg Bowl|Healthy veg bowl|9|3
|
|
||||||
22|Chicken Bowl|Protein chicken bowl|11.5|3
|
|
||||||
23|Quinoa Salad|Quinoa mixed salad|10|3
|
|
||||||
24|Fruit Salad|Fresh fruit mix|6|3
|
|
||||||
25|Avocado Toast|Toasted avocado bread|7.5|3
|
|
||||||
26|Smoothie|Fruit smoothie|5.5|3
|
|
||||||
27|Grilled Tofu|Tofu with herbs|9.5|3
|
|
||||||
28|Veg Soup|Warm vegetable soup|5|3
|
|
||||||
29|Green Juice|Fresh juice|4.5|3
|
|
||||||
30|Yogurt Cup|Chilled yogurt|3.5|3
|
|
||||||
31|Chicken Wings|Spicy wings|10.5|4
|
|
||||||
32|Veg Nuggets|Crispy nuggets|7|4
|
|
||||||
33|Loaded Fries|Fries with toppings|8.5|4
|
|
||||||
34|Chicken Burger|Burger with chicken|9.5|4
|
|
||||||
35|Veg Burger|Classic veg burger|8|4
|
|
||||||
36|Onion Rings|Crispy onion rings|5|4
|
|
||||||
37|Hot Dog|Grilled hot dog|6.5|4
|
|
||||||
38|Milkshake|Vanilla milkshake|4.5|4
|
|
||||||
39|Soda|Carbonated drink|2|4
|
|
||||||
40|Ice Cream|Vanilla scoop|3.5|4
|
|
||||||
41|Breakfast Combo|Eggs and toast|8|5
|
|
||||||
42|Pancakes|Fluffy pancakes|6.5|5
|
|
||||||
43|Omelette|Cheese omelette|5.5|5
|
|
||||||
44|Toast Butter|Buttered toast|3|5
|
|
||||||
45|Fruit Plate|Seasonal fruits|4.5|5
|
|
||||||
46|Lunch Plate|Daily lunch meal|10|5
|
|
||||||
47|Veg Curry|Mixed veg curry|8.5|5
|
|
||||||
48|Rice Bowl|Steamed rice|4|5
|
|
||||||
49|Tea|Hot tea|2|5
|
|
||||||
50|Coffee|Fresh coffee|3|5
|
|
||||||
51|Chicken Rice|Rice with chicken|11|6
|
|
||||||
52|Veg Rice|Rice with vegetables|9|6
|
|
||||||
53|Noodles|Stir fried noodles|8.5|6
|
|
||||||
54|Veg Manchurian|Veg balls in sauce|9.5|6
|
|
||||||
55|Chicken Manchurian|Chicken in sauce|11.5|6
|
|
||||||
56|Spring Rolls|Crispy rolls|6|6
|
|
||||||
57|Fried Rice|Classic fried rice|8|6
|
|
||||||
58|Hot Soup|Soup bowl|4.5|6
|
|
||||||
59|Cold Drink|Chilled beverage|2.5|6
|
|
||||||
60|Ice Cream|Chocolate scoop|3.5|6
|
|
||||||
61|Chicken Sandwich|Grilled sandwich|8.5|7
|
|
||||||
62|Veg Sandwich|Vegetable sandwich|7|7
|
|
||||||
63|Club Sandwich|Triple layer sandwich|9.5|7
|
|
||||||
64|French Fries|Crispy fries|4|7
|
|
||||||
65|Cheese Toast|Toasted cheese|5|7
|
|
||||||
66|Soup|Daily soup|4.5|7
|
|
||||||
67|Salad|Fresh salad|6|7
|
|
||||||
68|Cold Coffee|Iced coffee|3.5|7
|
|
||||||
69|Tea|Hot tea|2|7
|
|
||||||
70|Brownie|Chocolate brownie|5.5|7
|
|
||||||
71|Steak|Grilled steak|15|8
|
|
||||||
72|Chicken Steak|Chicken fillet|13|8
|
|
||||||
73|Veg Steak|Grilled veg steak|11|8
|
|
||||||
74|Mashed Potato|Creamy potato|5.5|8
|
|
||||||
75|Grilled Veggies|Mixed vegetables|6.5|8
|
|
||||||
76|Soup|Chef special soup|5|8
|
|
||||||
77|Garlic Bread|Toasted bread|4.5|8
|
|
||||||
78|Soft Drink|Cold beverage|2.5|8
|
|
||||||
79|Dessert|Daily dessert|6|8
|
|
||||||
80|Ice Cream|Vanilla ice cream|3.5|8
|
|
||||||
81|Chicken Pizza|Thin crust pizza|12|9
|
|
||||||
82|Veg Pizza|Vegetable pizza|10|9
|
|
||||||
83|Cheese Pizza|Cheesy pizza|11|9
|
|
||||||
84|Garlic Bread|Garlic breadsticks|4.5|9
|
|
||||||
85|Pasta|Italian pasta|9.5|9
|
|
||||||
86|Salad|Side salad|5|9
|
|
||||||
87|Chicken Wings|Spicy wings|8.5|9
|
|
||||||
88|Cola|Cold cola|2|9
|
|
||||||
89|Brownie|Chocolate brownie|5.5|9
|
|
||||||
90|Ice Cream|Vanilla scoop|3.5|9
|
|
||||||
91|Soup Bowl|Warm soup|5|10
|
|
||||||
92|Veg Curry|Vegetable curry|8.5|10
|
|
||||||
93|Chicken Curry|Spicy chicken curry|10.5|10
|
|
||||||
94|Rice|Steamed rice|4|10
|
|
||||||
95|Flatbread|Soft flatbread|3|10
|
|
||||||
96|Salad|Fresh salad|6|10
|
|
||||||
97|Dessert|Sweet dessert|5.5|10
|
|
||||||
98|Tea|Hot tea|2|10
|
|
||||||
99|Coffee|Fresh coffee|3|10
|
|
||||||
100|Ice Cream|Chocolate scoop|3.5|10
|
|
||||||
101|Veg Bowl|Healthy veg bowl|9|11
|
|
||||||
102|Tofu Stir Fry|Tofu with veggies|10.5|11
|
|
||||||
103|Green Salad|Fresh greens|7|11
|
|
||||||
104|Veg Soup|Warm soup|5|11
|
|
||||||
105|Smoothie|Fruit smoothie|5.5|11
|
|
||||||
106|Grilled Veg|Grilled vegetables|8.5|11
|
|
||||||
107|Rice Bowl|Steamed rice|4|11
|
|
||||||
108|Juice|Fresh juice|4.5|11
|
|
||||||
109|Tea|Herbal tea|2.5|11
|
|
||||||
110|Fruit Cup|Mixed fruits|3.5|11
|
|
||||||
111|BBQ Chicken|Grilled BBQ chicken|13|12
|
|
||||||
112|BBQ Veg|Grilled veg platter|11|12
|
|
||||||
113|Roasted Potatoes|Herb potatoes|6|12
|
|
||||||
114|Grilled Corn|Butter corn|5.5|12
|
|
||||||
115|Chicken Skewers|Skewered chicken|12|12
|
|
||||||
116|Veg Skewers|Vegetable skewers|9.5|12
|
|
||||||
117|Soup|Hot soup|4.5|12
|
|
||||||
118|Soft Drink|Cold drink|2.5|12
|
|
||||||
119|Dessert|Sweet dish|5.5|12
|
|
||||||
120|Ice Cream|Vanilla ice cream|3.5|12
|
|
||||||
121|Chicken Burger|Fast chicken burger|9.5|13
|
|
||||||
122|Veg Burger|Quick veg burger|8|13
|
|
||||||
123|French Fries|Golden fries|4|13
|
|
||||||
124|Chicken Nuggets|Crispy nuggets|7|13
|
|
||||||
125|Veg Nuggets|Veg nuggets|6.5|13
|
|
||||||
126|Wrap|Quick wrap|7.5|13
|
|
||||||
127|Soft Drink|Cold beverage|2.5|13
|
|
||||||
128|Milkshake|Chocolate shake|4.5|13
|
|
||||||
129|Ice Cream|Vanilla scoop|3.5|13
|
|
||||||
130|Cookie|Choco cookie|2.5|13
|
|
||||||
131|Veg Platter|Mixed veg platter|10|14
|
|
||||||
132|Chicken Platter|Chicken platter|12.5|14
|
|
||||||
133|Soup|Warm soup|5|14
|
|
||||||
134|Salad|Fresh salad|6|14
|
|
||||||
135|Rice Bowl|Rice bowl|4.5|14
|
|
||||||
136|Flatbread|Soft bread|3|14
|
|
||||||
137|Dessert|Sweet dessert|5.5|14
|
|
||||||
138|Tea|Hot tea|2|14
|
|
||||||
139|Coffee|Fresh coffee|3|14
|
|
||||||
140|Ice Cream|Vanilla ice cream|3.5|14
|
|
||||||
141|Chicken Wrap|Spicy chicken wrap|9.5|15
|
|
||||||
142|Veg Wrap|Veggie wrap|8|15
|
|
||||||
143|Rice Bowl|Rice bowl|4.5|15
|
|
||||||
144|Noodles|Stir noodles|8.5|15
|
|
||||||
145|Soup|Hot soup|5|15
|
|
||||||
146|Grilled Chicken|Herb grilled chicken|12|15
|
|
||||||
147|Salad|Fresh salad|6|15
|
|
||||||
148|Soft Drink|Cold drink|2.5|15
|
|
||||||
149|Dessert|Sweet dessert|5.5|15
|
|
||||||
150|Ice Cream|Chocolate ice cream|3.5|15
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
1|alex|Alex Miller|100000001|alex|alex@mail.com|CityOne|RestaurantOwner
|
|
||||||
2|jordan|Jordan Smith|100000002|jordan|jordan@mail.com|CityTwo|RestaurantOwner
|
|
||||||
3|taylor|Taylor Brown|100000003|taylor|taylor@mail.com|CityThree|RestaurantOwner
|
|
||||||
4|emma|Emma Wilson|100000004|emma|emma@mail.com|CityOne|Customer
|
|
||||||
5|liam|Liam Johnson|100000005|liam|liam@mail.com|CityTwo|Customer
|
|
||||||
6|olivia|Olivia Davis|100000006|olivia|olivia@mail.com|CityThree|Customer
|
|
||||||
7|noah|Noah Anderson|100000007|noah|noah@mail.com|CityOne|DeliveryPartner
|
|
||||||
8|ava|Ava Martinez|100000008|ava|ava@mail.com|CityTwo|DeliveryPartner
|
|
||||||
9|ethan|Ethan Thomas|100000009|ethan|ethan@mail.com|CityThree|DeliveryPartner
|
|
||||||
Reference in New Issue
Block a user