DSA C++ Project – Restaurant Order Processing System

Program 1

// Project: Restaurant Order Processing System(Based on Doubly linked list and DQUEUE)
/*   
 Features:
1. Add order at the end of the queue (new order)
2. Serve the first order (remove from front)
3. Cancel the last order (remove from end)
4. View all pending orders (from first to last)
5. Search order according to order ID
6. Total Count of pending orders
*/


#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

struct Order    // Node 
{
    Order* prev;
    int orderId;
    string customerName;
    string foodItem;
    Order* next;
    
};

Order* head = nullptr;
Order* tail = nullptr;
int nextOrderId = 1;

// Create new order node
Order* createOrder(const string& customerName, const string& foodItem) 
{
    Order* newOrder = new Order{nullptr,nextOrderId++, customerName, foodItem,  nullptr };
    return newOrder;
}

// Add order at the end
void addOrder(const string& customerName, const string& foodItem) 
{
    Order* newOrder = createOrder(customerName, foodItem);
    if (head==nullptr) 
    {
        head = tail = newOrder;
    } else {
        tail->next = newOrder;
        newOrder->prev = tail;
        tail = newOrder;
    }
    cout << "Order #" << newOrder->orderId << " added for " << customerName << ": " << foodItem << endl;
}

// Serve the first order
void serveOrder() 
{
    if (head==nullptr) 
    {
        cout << "No orders to serve.\n";
        return;
    }
    Order* temp = head;
    cout << "Serving Order #" << temp->orderId << ": " << temp->customerName << " - " << temp->foodItem << endl;
    head = head->next;
    if (head) 
    head->prev = nullptr;
    else 
    tail = nullptr;
    delete temp;
}

// Cancel the last order
void cancelLastOrder() 
{
    if (tail==nullptr) 
    {
        cout << " No orders to cancel.\n";
        return;
    }
    Order* temp = tail;
    cout << "Cancelling Order #" << temp->orderId << ": " << temp->customerName << " - " << temp->foodItem << endl;
    tail = tail->prev;
    if (tail) 
    tail->next = nullptr;
    else
     head = nullptr;
    delete temp;
}

// View all pending orders
void viewOrders() 
{
    if (head==nullptr) 
    {
        cout << "No pending orders.\n";
        return;
    }
    cout << "\n--- Pending Orders ---\n";
    Order* temp = head;
    while (temp!=nullptr)
     {
        cout << "Order #" << setw(3) << temp->orderId
             << " | Customer: " << setw(15) << temp->customerName
             << " | Item: " << temp->foodItem << endl;
        temp = temp->next;
    }
}

// Search by Order ID
void searchById(int id) 
{
    Order* temp = head;
    while (temp!=nullptr) 
    {
        if (temp->orderId == id) 
        {
            cout << " Found Order #" << temp->orderId << ": " << temp->customerName << " - " << temp->foodItem << endl;
            return;
        }
        temp = temp->next;
    }
    cout << "Order ID not found.\n";
}

// Search by Customer Name
void searchByName(const string& name)
 {
    Order* temp = head;
    bool found = false;
    while (temp)
     {
        if (temp->customerName == name) 
        {
            cout << "Order #" << temp->orderId << ": " << temp->foodItem << endl;
            found = true;
        }
        temp = temp->next;
    }
    if (!found)
        cout << " No orders found for " << name << endl;
}

// Count total pending orders
void countOrders() 
{
    Order* temp = head;
    int count = 0;
    while (temp!=nullptr) 
    {
        count++;
        temp = temp->next;
    }
    cout << "Total pending orders: " << count << endl;
}

// Menu
void menu() 
{
    int choice;
    string name, item;
    int id;

    while (true) {
        cout << "\n========== Restaurant Order System ==========\n";
        cout << "1. Add New Order\n";
        cout << "2. Serve First Order\n";
        cout << "3. Cancel Last Order\n";
        cout << "4. View All Orders\n";
        cout << "5. Search Order by ID\n";
        cout << "6. Search Order by Customer Name\n";
        cout << "7. Count Pending Orders\n";
        cout << "8. Exit\n";
        cout<<"\n========================================\n";
        cout << "Choose an option: ";
        cin >> choice;
        cin.ignore(); // Clear newline

        switch (choice) {
            case 1:
                cout << "Enter customer name: ";
                getline(cin, name);
                cout << "Enter food item: ";
                getline(cin, item);
                addOrder(name, item);
                break;

            case 2:
                serveOrder();
                break;

            case 3:
                cancelLastOrder();
                break;

            case 4:
                viewOrders();
                break;

            case 5:
                cout << "Enter Order ID: ";
                cin >> id;
                cin.ignore();
                searchById(id);
                break;

            case 6:
                cout << "Enter customer name: ";
                getline(cin, name);
                searchByName(name);
                break;

            case 7:
                countOrders();
                break;

            case 8:
                cout << " Exiting system. Goodbye!\n";
                return;

            default:
                cout << "Invalid option. Try again.\n";
        }
    }
}

int main() {
    menu();
    return 0;
}

 

 

courses

DataFlair Team

DataFlair Team provides high-impact content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. We make complex concepts easy to grasp, helping learners of all levels succeed in their tech careers.

Leave a Reply

Your email address will not be published. Required fields are marked *