Restaurant Management
Restaurant Management
import csv
import os
import datetime
from typing import List, Dict
import uuid
class MenuItem:
def __init__(self, item_id: str, name: str, category: str, price: float, available: bool = True):
self.item_id = item_id
self.name = name
self.category = category
self.price = price
self.available = available
class Order:
def __init__(self, order_id: str, customer_name: str, items: List[Dict], status: str =
'Pending'):
self.order_id = order_id
self.customer_name = customer_name
self.items = items
self.status = status
self.order_date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
class RestaurantManagement:
def __init__(self):
self.menu_file = 'menu.csv'
self.orders_file = 'orders.csv'
self.customers_file = 'customers.csv'
self.menu = self.load_menu()
self.orders = self.load_orders()
self.customers = self.load_customers()
def save_menu(self):
with open(self.menu_file, 'w', newline='') as file:
fieldnames = ['item_id', 'name', 'category', 'price', 'available']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in self.menu:
writer.writerow(item.to_dict())
def save_orders(self):
with open(self.orders_file, 'w', newline='') as file:
fieldnames = ['order_id', 'customer_name', 'items', 'status', 'order_date', 'total']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for order in self.orders:
writer.writerow(order.to_dict())
def save_customers(self):
with open(self.customers_file, 'w', newline='') as file:
fieldnames = ['customer_name', 'phone', 'email', 'orders']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for name, info in self.customers.items():
writer.writerow({
'customer_name': name,
'phone': info['phone'],
'email': info['email'],
'orders': info['orders']
})
def update_menu_item(self, item_id: str, name: str = None, category: str = None,
price: float = None, available: bool = None):
for item in self.menu:
if item.item_id == item_id:
if name:
item.name = name
if category:
item.category = category
if price is not None:
item.price = price
if available is not None:
item.available = available
self.save_menu()
print(f"Updated menu item {item.name}")
return
print("Item not found.")
def display_orders(self):
print("\n=== Orders ===")
for order in self.orders:
print(f"Order ID: {order.order_id}")
print(f"Customer: {order.customer_name}")
print(f"Date: {order.order_date}")
print(f"Status: {order.status}")
print("Items:")
for item in order.items:
print(f" - {item['name']} x{item['quantity']} @ ${item['price']:.2f}")
print(f"Total: ${order.calculate_total():.2f}\n")
def display_customers(self):
print("\n=== Customers ===")
for name, info in self.customers.items():
print(f"Name: {name}")
print(f"Phone: {info['phone']}")
print(f"Email: {info['email']}")
print(f"Total Orders: {info['orders']}\n")
def main():
rm = RestaurantManagement()
while True:
print("\n=== Restaurant Management System ===")
print("1. View Menu")
print("2. Add Menu Item")
print("3. Update Menu Item")
print("4. Remove Menu Item")
print("5. Place Order")
print("6. Update Order Status")
print("7. Add/Update Customer Info")
print("8. View Orders")
print("9. View Customers")
print("10. Exit")
if choice == '1':
rm.display_menu()
elif choice == '2':
name = input("Enter item name: ")
category = input("Enter category (Appetizer/Main/Dessert/Beverage): ")
price = float(input("Enter price: "))
rm.add_menu_item(name, category, price)
else:
print("Invalid choice. Please try again.")
if __name__ == "__main__":
main()