diff --git a/Src/Food_Delivery_System/Makefile b/Src/Food_Delivery_System/Makefile new file mode 100644 index 0000000..d5eeb90 --- /dev/null +++ b/Src/Food_Delivery_System/Makefile @@ -0,0 +1,31 @@ +# Makefile for Lecture 11 C++ Tomato App + +CXX = g++ +CXXFLAGS = -std=c++11 -Wall -Wextra +TARGET = tomato_app +SOURCE = main.cpp + +# Default target +all: $(TARGET) + +# Build the executable +$(TARGET): $(SOURCE) + $(CXX) $(CXXFLAGS) -I. -o $(TARGET) $(SOURCE) + +# Run the application +run: $(TARGET) + ./$(TARGET) + +# Clean up compiled files +clean: + rm -f $(TARGET) $(TARGET).exe + +# Help target +help: + @echo "Available targets:" + @echo " all - Build the application (default)" + @echo " run - Build and run the application" + @echo " clean - Remove compiled files" + @echo " help - Show this help message" + +.PHONY: all run clean help diff --git a/Src/Food_Delivery_System/TomatoApp.h b/Src/Food_Delivery_System/TomatoApp.h new file mode 100644 index 0000000..e044e2a --- /dev/null +++ b/Src/Food_Delivery_System/TomatoApp.h @@ -0,0 +1,116 @@ +#ifndef TOMATO_APP_H +#define TOMATO_APP_H + +#include +#include +#include "models/User.h" +#include "models/Restaurant.h" +#include "models/Cart.h" +#include "managers/RestaurantManager.h" +#include "managers/OrderManager.h" +#include "strategies/PaymentStrategy.h" +#include "strategies/UpiPaymentStrategy.h" +#include "factories/NowOrderFactory.h" +#include "factories/ScheduledOrderFactory.h" +#include "services/NotificationService.h" +#include "utils/TimeUtils.h" +using namespace std; + +class TomatoApp { +public: + TomatoApp() { + initializeRestaurants(); + } + + void initializeRestaurants() { + Restaurant* restaurant1 = new Restaurant("Bikaner", "Delhi"); + restaurant1->addMenuItem(MenuItem("P1", "Chole Bhature", 120)); + restaurant1->addMenuItem(MenuItem("P2", "Samosa", 15)); + + Restaurant* restaurant2 = new Restaurant("Haldiram", "Kolkata"); + restaurant2->addMenuItem(MenuItem("P1", "Raj Kachori", 80)); + restaurant2->addMenuItem(MenuItem("P2", "Pav Bhaji", 100)); + restaurant2->addMenuItem(MenuItem("P3", "Dhokla", 50)); + + Restaurant* restaurant3 = new Restaurant("Saravana Bhavan", "Chennai"); + restaurant3->addMenuItem(MenuItem("P1", "Masala Dosa", 90)); + restaurant3->addMenuItem(MenuItem("P2", "Idli Vada", 60)); + restaurant3->addMenuItem(MenuItem("P3", "Filter Coffee", 30)); + + RestaurantManager* restaurantManager = RestaurantManager::getInstance(); + restaurantManager->addRestaurant(restaurant1); + restaurantManager->addRestaurant(restaurant2); + restaurantManager->addRestaurant(restaurant3); + + // Add other sample restaurants... + } + + vector searchRestaurants(const string& location) { + return RestaurantManager::getInstance()->searchByLocation(location); + } + + void selectRestaurant(User* user, Restaurant* restaurant) { + Cart* cart = user->getCart(); + cart->setRestaurant(restaurant); + } + + void addToCart(User* user, const string& itemCode) { + Restaurant* restaurant = user->getCart()->getRestaurant(); + if (!restaurant) { + cout << "Please select a restaurant first." << endl; + return; + } + for (const auto& item : restaurant->getMenu()) { + if (item.getCode() == itemCode) { + user->getCart()->addItem(item); + break; + } + } + } + + Order* checkoutNow(User* user, const string& orderType, PaymentStrategy* paymentStrategy) { + return checkout(user, orderType, paymentStrategy, new NowOrderFactory()); + } + + Order* checkoutScheduled(User* user, const string& orderType, PaymentStrategy* paymentStrategy, const string& scheduleTime) { + return checkout(user, orderType, paymentStrategy, new ScheduledOrderFactory(scheduleTime)); + } + + Order* checkout(User* user, const string& orderType, + PaymentStrategy* paymentStrategy, OrderFactory* orderFactory) { + if (user->getCart()->isEmpty()) + return nullptr; + + Cart* userCart = user->getCart(); + Restaurant* orderedRestaurant = userCart->getRestaurant(); + vector itemsOrdered = userCart->getItems(); + double totalCost = userCart->getTotalCost(); + + Order* order = orderFactory->createOrder(user, userCart, orderedRestaurant, itemsOrdered, paymentStrategy, totalCost, orderType); + OrderManager::getInstance()->addOrder(order); + return order; + } + + void payForOrder(User* user, Order* order) { + bool isPaymentSuccess = order->processPayment(); + + // clear user cart if payment is successful. + if(isPaymentSuccess) { + NotificationService* notification = new NotificationService(); + notification->notify(order); + user->getCart()->clear(); + } + } + + void printUserCart(User* user) { + cout << "Items in cart:" << endl; + cout << "------------------------------------" << endl; + for (const auto& item : user->getCart()->getItems()) { + cout << item.getCode() << " : " << item.getName() << " : ₹" << item.getPrice() << endl; + } + cout << "------------------------------------" << endl; + cout << "Grand total : ₹" << user->getCart()->getTotalCost() << endl; + } +}; + +#endif // TOMATO_APP_H diff --git a/Src/Food_Delivery_System/compile.bat b/Src/Food_Delivery_System/compile.bat new file mode 100644 index 0000000..4b41223 --- /dev/null +++ b/Src/Food_Delivery_System/compile.bat @@ -0,0 +1,17 @@ +@echo off +echo Compiling C++ Food Delivery App... + +REM Compile the main program +g++ -std=c++11 -I. -o tomato_app main.cpp + +if %errorlevel% equ 0 ( + echo Compilation successful! + echo Running the application... + echo. + tomato_app.exe +) else ( + echo Compilation failed! + echo Please check for any syntax errors. +) + +pause diff --git a/Src/Food_Delivery_System/compile.sh b/Src/Food_Delivery_System/compile.sh new file mode 100644 index 0000000..de66ab0 --- /dev/null +++ b/Src/Food_Delivery_System/compile.sh @@ -0,0 +1,15 @@ +#!/bin/bash +echo "Compiling Lecture 11 C++ Tomato App..." + +# Compile the main program +g++ -std=c++11 -I. -o tomato_app main.cpp + +if [ $? -eq 0 ]; then + echo "Compilation successful!" + echo "Running the application..." + echo + ./tomato_app +else + echo "Compilation failed!" + echo "Please check for any syntax errors." +fi diff --git a/Src/Food_Delivery_System/factories/NowOrderFactory.h b/Src/Food_Delivery_System/factories/NowOrderFactory.h new file mode 100644 index 0000000..9453734 --- /dev/null +++ b/Src/Food_Delivery_System/factories/NowOrderFactory.h @@ -0,0 +1,35 @@ +#ifndef NOW_ORDER_FACTORY_H +#define NOW_ORDER_FACTORY_H + +#include "OrderFactory.h" +#include "../models/DeliveryOrder.h" +#include "../models/PickupOrder.h" +#include "../utils/TimeUtils.h" +using namespace std; + +class NowOrderFactory : public OrderFactory { +public: + Order* createOrder(User* user, Cart* cart, Restaurant* restaurant, const vector& menuItems, + PaymentStrategy* paymentStrategy, double totalCost, const string& orderType) override { + Order* order = nullptr; + if (orderType == "Delivery") { + auto deliveryOrder = new DeliveryOrder(); + deliveryOrder->setUserAddress(user->getAddress()); + order = deliveryOrder; + } + else { + auto pickupOrder = new PickupOrder(); + pickupOrder->setRestaurantAddress(restaurant->getLocation()); + order = pickupOrder; + } + order->setUser(user); + order->setRestaurant(restaurant); + order->setItems(menuItems); + order->setPaymentStrategy(paymentStrategy); + order->setScheduled(TimeUtils::getCurrentTime()); + order->setTotal(totalCost); + return order; + } +}; + +#endif // NOW_ORDER_FACTORY_H diff --git a/Src/Food_Delivery_System/factories/OrderFactory.h b/Src/Food_Delivery_System/factories/OrderFactory.h new file mode 100644 index 0000000..6a6130e --- /dev/null +++ b/Src/Food_Delivery_System/factories/OrderFactory.h @@ -0,0 +1,19 @@ +#ifndef ORDER_FACTORY_H +#define ORDER_FACTORY_H + +#include "../models/Order.h" +#include "../models/Cart.h" +#include "../models/Restaurant.h" +#include "../strategies/PaymentStrategy.h" +#include +#include +using namespace std; + +class OrderFactory { +public: + virtual Order* createOrder(User* user, Cart* cart, Restaurant* restaurant, const vector& menuItems, + PaymentStrategy* paymentStrategy, double totalCost, const string& orderType) = 0; + virtual ~OrderFactory() {} +}; + +#endif // ORDER_FACTORY_H diff --git a/Src/Food_Delivery_System/factories/ScheduledOrderFactory.h b/Src/Food_Delivery_System/factories/ScheduledOrderFactory.h new file mode 100644 index 0000000..e44f38f --- /dev/null +++ b/Src/Food_Delivery_System/factories/ScheduledOrderFactory.h @@ -0,0 +1,41 @@ +#ifndef SCHEDULED_ORDER_FACTORY_H +#define SCHEDULED_ORDER_FACTORY_H + +#include "OrderFactory.h" +#include "../models/DeliveryOrder.h" +#include "../models/PickupOrder.h" +#include "../utils/TimeUtils.h" +using namespace std; + +class ScheduledOrderFactory : public OrderFactory { +private: + string scheduleTime; +public: + ScheduledOrderFactory(string scheduleTime) { + this->scheduleTime = scheduleTime; + } + + Order* createOrder(User* user, Cart* cart, Restaurant* restaurant, const vector& menuItems, + PaymentStrategy* paymentStrategy, double totalCost, const string& orderType) override { + Order* order = nullptr; + + if(orderType == "Delivery") { + auto deliveryOrder = new DeliveryOrder(); + deliveryOrder->setUserAddress(user->getAddress()); + order = deliveryOrder; + } + else { + auto pickupOrder = new PickupOrder(); + pickupOrder->setRestaurantAddress(restaurant->getLocation()); + } + order->setUser(user); + order->setRestaurant(restaurant); + order->setItems(menuItems); + order->setPaymentStrategy(paymentStrategy); + order->setScheduled(scheduleTime); + order->setTotal(totalCost); + return order; + } +}; + +#endif // SCHEDULED_ORDER_FACTORY_H diff --git a/Src/Food_Delivery_System/folderStructure.txt b/Src/Food_Delivery_System/folderStructure.txt new file mode 100644 index 0000000..0f02559 --- /dev/null +++ b/Src/Food_Delivery_System/folderStructure.txt @@ -0,0 +1,33 @@ +OnlineFoodOrderingSystem/ +│ +├── main.cpp # Composition root and entry point +├── TomatoApp.h # Facade class (main orchestrator) +│ +├── models/ +│ ├── MenuItem.h +│ ├── Restaurant.h +│ ├── User.h +│ ├── Cart.h +│ ├── Order.h # Abstract Order +│ ├── DeliveryOrder.h +│ ├── PickupOrder.h +│ +├── managers/ +│ ├── RestaurantManager.h +│ ├── OrderManager.h +│ +├── strategies/ +│ ├── PaymentStrategy.h # Base class +│ ├── CreditCardPaymentStrategy.h +│ ├── UpiPaymentStrategy.h +│ +├── factories/ +│ ├── OrderFactory.h # Abstract factory +│ ├── NowOrderFactory.h +│ ├── ScheduledOrderFactory.h +│ +├── services/ +│ └── NotificationService.h +│ +├── utils/ +│ └── TimeUtils.h diff --git a/Src/Food_Delivery_System/main.cpp b/Src/Food_Delivery_System/main.cpp new file mode 100644 index 0000000..0ad6626 --- /dev/null +++ b/Src/Food_Delivery_System/main.cpp @@ -0,0 +1,47 @@ +#include +#include "TomatoApp.h" +using namespace std; + +int main() { + // Create TomatoApp Object + TomatoApp* tomato = new TomatoApp(); + + // Simulate a user coming in (Happy Flow) + User* user = new User(101, "Aditya", "Delhi"); + cout << "User: " << user->getName() << " is active." << endl; + + // User searches for restaurants by location + vector restaurantList = tomato->searchRestaurants("Delhi"); + + if (restaurantList.empty()) { + cout << "No restaurants found!" << endl; + return 0; + } + cout << "Found Restaurants:" << endl; + for (auto restaurant : restaurantList) { + cout << " - " << restaurant->getName() << endl; + } + + // User selects a restaurant + tomato->selectRestaurant(user, restaurantList[0]); + + cout << "Selected restaurant: " << restaurantList[0]->getName() << endl; + + // User adds items to the cart + tomato->addToCart(user, "P1"); + tomato->addToCart(user, "P2"); + + tomato->printUserCart(user); + + // User checkout the cart + Order* order = tomato->checkoutNow(user, "Delivery", new UpiPaymentStrategy("1234567890")); + + // User pay for the cart. If payment is success, notification is sent. + tomato->payForOrder(user, order); + + // Cleanup Code. + delete tomato; + delete user; + + return 0; +} diff --git a/Src/Food_Delivery_System/managers/OrderManager.h b/Src/Food_Delivery_System/managers/OrderManager.h new file mode 100644 index 0000000..6872c4d --- /dev/null +++ b/Src/Food_Delivery_System/managers/OrderManager.h @@ -0,0 +1,42 @@ +#ifndef ORDER_MANAGER_H +#define ORDER_MANAGER_H + +#include +#include +#include "../models/Order.h" +using namespace std; + +class OrderManager { +private: + vector orders; + static OrderManager* instance; + + OrderManager() { + // Private Constructor + } + +public: + static OrderManager* getInstance() { + if (!instance) { + instance = new OrderManager(); + } + return instance; + } + + void addOrder(Order* order) { + orders.push_back(order); + } + + void listOrders() { + cout << "\n--- All Orders ---" << endl; + for (auto order : orders) { + cout << order->getType() << " order for " << order->getUser()->getName() + << " | Total: ₹" << order->getTotal() + << " | At: " << order->getScheduled() << endl; + } + } +}; + +OrderManager* OrderManager::instance = nullptr; + +#endif // ORDER_MANAGER_H diff --git a/Src/Food_Delivery_System/managers/RestaurantManager.h b/Src/Food_Delivery_System/managers/RestaurantManager.h new file mode 100644 index 0000000..31a6888 --- /dev/null +++ b/Src/Food_Delivery_System/managers/RestaurantManager.h @@ -0,0 +1,47 @@ +#ifndef RESTAURANT_MANAGER_H +#define RESTAURANT_MANAGER_H + +#include +#include +#include +#include "../models/Restaurant.h" +using namespace std; + +class RestaurantManager { +private: + vector restaurants; + static RestaurantManager* instance; + + RestaurantManager() { + // private constructor + } + +public: + static RestaurantManager* getInstance() { + if (!instance) { + instance = new RestaurantManager(); + } + return instance; + } + + void addRestaurant(Restaurant* r) { + restaurants.push_back(r); + } + + vector searchByLocation(string loc) { + vector result; + transform(loc.begin(), loc.end(), loc.begin(), ::tolower); + for (auto r : restaurants) { + string rl = r->getLocation(); + transform(rl.begin(), rl.end(), rl.begin(), ::tolower); + if (rl == loc) { + result.push_back(r); + } + } + return result; + } +}; + +RestaurantManager* RestaurantManager::instance = nullptr; + +#endif // RESTAURANT_MANAGER_H diff --git a/Src/Food_Delivery_System/models/Cart.h b/Src/Food_Delivery_System/models/Cart.h new file mode 100644 index 0000000..b1df7cf --- /dev/null +++ b/Src/Food_Delivery_System/models/Cart.h @@ -0,0 +1,61 @@ +#ifndef CART_H +#define CART_H + +#include +#include +#include +#include "../models/MenuItem.h" +#include "../models/Restaurant.h" + +using namespace std; + +class Cart { +private: + Restaurant* restaurant; + vector items; + +public: + Cart() { + restaurant = nullptr; + } + + void addItem(const MenuItem& item) { + if (!restaurant) { + cerr << "Cart: Set a restaurant before adding items." << endl; + return; + } + items.push_back(item); + } + + double getTotalCost() const { + double sum = 0; + for (const auto& it : items) { + sum += it.getPrice(); + } + return sum; + } + + bool isEmpty() { + return (!restaurant || items.empty()); + } + + void clear() { + items.clear(); + restaurant = nullptr; + } + + // Getters and Setters + void setRestaurant(Restaurant* r) { + restaurant = r; + } + + Restaurant* getRestaurant() const { + return restaurant; + } + + const vector& getItems() const { + return items; + } +}; + +#endif // CART_H diff --git a/Src/Food_Delivery_System/models/DeliveryOrder.h b/Src/Food_Delivery_System/models/DeliveryOrder.h new file mode 100644 index 0000000..ecbc1a7 --- /dev/null +++ b/Src/Food_Delivery_System/models/DeliveryOrder.h @@ -0,0 +1,30 @@ +#ifndef DELIVERY_ORDER_H +#define DELIVERY_ORDER_H + +#include "Order.h" +using namespace std; + +class DeliveryOrder : public Order { +private: + string userAddress; + +public: + DeliveryOrder() { + userAddress = ""; + } + + string getType() const override { + return "Delivery"; + } + + //Getter and Setters + void setUserAddress(const string& addr) { + userAddress = addr; + } + + string getUserAddress() const { + return userAddress; + } +}; + +#endif // DELIVERY_ORDER_H diff --git a/Src/Food_Delivery_System/models/MenuItem.h b/Src/Food_Delivery_System/models/MenuItem.h new file mode 100644 index 0000000..5e173b8 --- /dev/null +++ b/Src/Food_Delivery_System/models/MenuItem.h @@ -0,0 +1,46 @@ +#ifndef MENUITEM_H +#define MENUITEM_H + +#include +using namespace std; + +class MenuItem { +private: + string code; + string name; + int price; + +public: + MenuItem(const string& code, const string& name, int price) { + this->code = code; + this->name = name; + this->price = price; + } + + //Getters and setters + string getCode() const { + return code; + } + + void setCode(const string &c) { + code = c; + } + + string getName() const { + return name; + } + + void setName(const string &n) { + name = n; + } + + int getPrice() const { + return price; + } + + void setPrice(int p) { + price = p; + } +}; + +#endif // MENUITEM_H diff --git a/Src/Food_Delivery_System/models/Order.h b/Src/Food_Delivery_System/models/Order.h new file mode 100644 index 0000000..2a99a9c --- /dev/null +++ b/Src/Food_Delivery_System/models/Order.h @@ -0,0 +1,107 @@ +#ifndef ORDER_H +#define ORDER_H + +#include +#include +#include +#include "User.h" +#include "Restaurant.h" +#include "MenuItem.h" +#include "../strategies/PaymentStrategy.h" +#include "../utils/TimeUtils.h" +using namespace std; + +class Order { +protected: + static int nextOrderId; + int orderId; + User* user; + Restaurant* restaurant; + vector items; + PaymentStrategy* paymentStrategy; + double total; + string scheduled; + +public: + Order() { + user = nullptr; + restaurant = nullptr; + paymentStrategy = nullptr; + total = 0.0; + scheduled = ""; + orderId = ++nextOrderId; + } + + virtual ~Order() { + delete paymentStrategy; + } + + bool processPayment() { + if (paymentStrategy) { + paymentStrategy->pay(total); + return true; + } else { + cout << "Please choose a payment mode first" << endl; + return false; + } + } + + virtual string getType() const = 0; + + //Getter and Setters + int getOrderId() const { + return orderId; + } + + void setUser(User* u) { + user = u; + } + + User* getUser() const { + return user; + } + + void setRestaurant(Restaurant* r) { + restaurant = r; + } + + Restaurant* getRestaurant() const { + return restaurant; + } + + void setItems(const vector& its) { + items = its; + total = 0; + for (auto &i : items) { + total += i.getPrice(); + } + } + + const vector& getItems() const { + return items; + } + + void setPaymentStrategy(PaymentStrategy* p) { + paymentStrategy = p; + } + + void setScheduled(const string& s) { + scheduled = s; + } + + string getScheduled() const { + return scheduled; + } + + double getTotal() const { + return total; + } + + void setTotal(int total) { + this->total = total; + } +}; + +int Order::nextOrderId = 0; + +#endif // ORDER_H diff --git a/Src/Food_Delivery_System/models/PickupOrder.h b/Src/Food_Delivery_System/models/PickupOrder.h new file mode 100644 index 0000000..b02a018 --- /dev/null +++ b/Src/Food_Delivery_System/models/PickupOrder.h @@ -0,0 +1,30 @@ +#ifndef PICKUP_ORDER_H +#define PICKUP_ORDER_H + +#include "Order.h" +using namespace std; + +class PickupOrder : public Order { +private: + string restaurantAddress; + +public: + PickupOrder() { + restaurantAddress = ""; + } + + string getType() const override { + return "Pickup"; + } + + //Getter and Setters + void setRestaurantAddress(const string& addr) { + restaurantAddress = addr; + } + + string getRestaurantAddress() const { + return restaurantAddress; + } +}; + +#endif // PICKUP_ORDER_H diff --git a/Src/Food_Delivery_System/models/Restaurant.h b/Src/Food_Delivery_System/models/Restaurant.h new file mode 100644 index 0000000..eb53cba --- /dev/null +++ b/Src/Food_Delivery_System/models/Restaurant.h @@ -0,0 +1,59 @@ +#ifndef RESTAURANT_H +#define RESTAURANT_H + +#include +#include +#include +#include "MenuItem.h" +using namespace std; + +class Restaurant { +private: + static int nextRestaurantId; + int restaurantId; + string name; + string location; + vector menu; + +public: + Restaurant(const string& name, const string& location) { + this->name = name; + this->location = location; + this->restaurantId = ++nextRestaurantId; + } + + ~Restaurant() { + // Optional: just for clarity or debug + cout << "Destroying Restaurant: " << name << ", and clearing its menu." << endl; + menu.clear(); + } + + //Getters and setters + string getName() const { + return name; + } + + void setName(const string &n) { + name = n; + } + + string getLocation() const { + return location; + } + + void setLocation(const string &loc) { + location = loc; + } + + void addMenuItem(const MenuItem &item) { + menu.push_back(item); + } + + const vector& getMenu() const { + return menu; + } +}; + +int Restaurant::nextRestaurantId = 0; + +#endif // RESTAURANT_H diff --git a/Src/Food_Delivery_System/models/User.h b/Src/Food_Delivery_System/models/User.h new file mode 100644 index 0000000..1d57d5d --- /dev/null +++ b/Src/Food_Delivery_System/models/User.h @@ -0,0 +1,49 @@ +#ifndef USER_H +#define USER_H + +#include +#include "Cart.h" +using namespace std; + +class User { +private: + int userId; + string name; + string address; + Cart* cart; + +public: + User(int userId, const string& name, const string& address) { + this->userId = userId; + this->name = name; + this->address = address; + cart = new Cart(); + } + + ~User() { + delete cart; + } + + // Getters and Setters + string getName() const { + return name; + } + + void setName(const string &n) { + name = n; + } + + string getAddress() const { + return address; + } + + void setAddress(const string &a) { + address = a; + } + + Cart* getCart() const { + return cart; + } +}; + +#endif // USER_H diff --git a/Src/Food_Delivery_System/music_player.exe b/Src/Food_Delivery_System/music_player.exe new file mode 100644 index 0000000..d57c592 Binary files /dev/null and b/Src/Food_Delivery_System/music_player.exe differ diff --git a/Src/Food_Delivery_System/services/NotificationService.h b/Src/Food_Delivery_System/services/NotificationService.h new file mode 100644 index 0000000..4313b60 --- /dev/null +++ b/Src/Food_Delivery_System/services/NotificationService.h @@ -0,0 +1,30 @@ +#ifndef NOTIFICATION_SERVICE_H +#define NOTIFICATION_SERVICE_H + +#include +#include "../models/Order.h" +using namespace std; + +class NotificationService { +public: + static void notify(Order* order) { + cout << "\nNotification: New " << order->getType() << " order placed!" << endl; + cout << "---------------------------------------------" << endl; + cout << "Order ID: " << order->getOrderId() << endl; + cout << "Customer: " << order->getUser()->getName() << endl; + cout << "Restaurant: " << order->getRestaurant()->getName() << endl; + cout << "Items Ordered:\n"; + + const vector& items = order->getItems(); + for (const auto& item : items) { + cout << " - " << item.getName() << " (₹" << item.getPrice() << ")\n"; + } + + cout << "Total: ₹" << order->getTotal() << endl; + cout << "Scheduled For: " << order->getScheduled() << endl; + cout << "Payment: Done" << endl; + cout << "---------------------------------------------" << endl; + } +}; + +#endif // NOTIFICATION_SERVICE_H diff --git a/Src/Food_Delivery_System/strategies/CreditCartPaymentStrategy.h b/Src/Food_Delivery_System/strategies/CreditCartPaymentStrategy.h new file mode 100644 index 0000000..bbddad5 --- /dev/null +++ b/Src/Food_Delivery_System/strategies/CreditCartPaymentStrategy.h @@ -0,0 +1,23 @@ +#ifndef CREDIT_CARD_PAYMENT_STRATEGY_H +#define CREDIT_CARD_PAYMENT_STRATEGY_H + +#include "PaymentStrategy.h" +#include +#include +#include +using namespace std; + +class CreditCardPaymentStrategy : public PaymentStrategy { +private: + string cardNumber; +public: + CreditCardPaymentStrategy(const string& card) { + cardNumber = card; + } + + void pay(double amount) override { + cout << "Paid ₹" << amount << " using Credit Card (" << cardNumber << ")" << endl; + } +}; + +#endif // CREDIT_CARD_PAYMENT_STRATEGY_H diff --git a/Src/Food_Delivery_System/strategies/PaymentStrategy.h b/Src/Food_Delivery_System/strategies/PaymentStrategy.h new file mode 100644 index 0000000..16e38a8 --- /dev/null +++ b/Src/Food_Delivery_System/strategies/PaymentStrategy.h @@ -0,0 +1,14 @@ +#ifndef PAYMENT_STRATEGY_H +#define PAYMENT_STRATEGY_H + +#include +#include +using namespace std; + +class PaymentStrategy { +public: + virtual void pay(double amount) = 0; + virtual ~PaymentStrategy() {} +}; + +#endif // PAYMENT_STRATEGY_H diff --git a/Src/Food_Delivery_System/strategies/UpiPaymentStrategy.h b/Src/Food_Delivery_System/strategies/UpiPaymentStrategy.h new file mode 100644 index 0000000..2dfc3f6 --- /dev/null +++ b/Src/Food_Delivery_System/strategies/UpiPaymentStrategy.h @@ -0,0 +1,23 @@ +#ifndef UPI_PAYMENT_STRATEGY_H +#define UPI_PAYMENT_STRATEGY_H + +#include "PaymentStrategy.h" +#include +#include +#include +using namespace std; + +class UpiPaymentStrategy : public PaymentStrategy { +private: + string mobile; +public: + UpiPaymentStrategy(const string& mob) { + mobile = mob; + } + + void pay(double amount) override { + cout << "Paid ₹" << amount << " using UPI (" << mobile << ")" << endl; + } +}; + +#endif // UPI_PAYMENT_STRATEGY_H diff --git a/Src/Food_Delivery_System/tomato_app.exe b/Src/Food_Delivery_System/tomato_app.exe new file mode 100644 index 0000000..a81cb3a Binary files /dev/null and b/Src/Food_Delivery_System/tomato_app.exe differ diff --git a/Src/Food_Delivery_System/utils/TimeUtils.h b/Src/Food_Delivery_System/utils/TimeUtils.h new file mode 100644 index 0000000..ca651dd --- /dev/null +++ b/Src/Food_Delivery_System/utils/TimeUtils.h @@ -0,0 +1,20 @@ +#ifndef TIME_UTILS_H +#define TIME_UTILS_H + +#include +#include +using namespace std; + +class TimeUtils { +public: + static string getCurrentTime() { + time_t now = time(0); + char* dt = ctime(&now); + string s(dt); + if (!s.empty() && s.back() == '\n') + s.pop_back(); + return s; + } +}; + +#endif // TIME_UTILS_H