A desktop-based Restaurant Management System built with Python (Tkinter) for the GUI and Oracle Database for data storage. The system supports four user roles — Customer, Admin, Staff, and Supplier — each with a dedicated login and panel, and covers core restaurant operations such as table reservations, ordering, billing, inventory, staff management, and financial reporting.
- Customer Panel — customer registration/login, browsing the menu, placing orders, reserving tables, viewing order history, and submitting feedback.
- Admin Panel — manages staff, inventory, dishes/menu items, billing, tables, reservations, and views financial reports (with data visualizations via
matplotlib/pandas). - Staff Panel — role-based views for Waiter, Kitchen, and Management staff (e.g. table assignments, order preparation status).
- Supplier Panel — supplier login and inventory replenishment workflow.
- Reservations & Billing — table booking, order-to-bill generation, tax handling, and payment tracking.
- Reporting — financial report generation and review for admin/accounting teams.
The diagram below models the core entities of the system — Customers, Orders, Reservations, Billing, Staff (Waiter/Kitchen/Management), Inventory, Suppliers, Feedback, Financial Reports, and the Accounting Team/Sales Tax relationship.
![Restaurant Management System - Enhanced ER Diagram]
| Layer | Technology |
|---|---|
| GUI | Python tkinter, ttk |
| Database | Oracle Database (via oracledb) |
| Data & Reporting | pandas, matplotlib |
| Database Logic | PL/SQL stored procedures, views, and triggers |
Restaurant-Management-System/
├── main.py # Application entry point (role selection: Customer/Admin/Staff/Supplier)
├── AdminAuth.py # Admin authentication
├── Admin.py # Admin dashboard and management panel
├── Customer.py # Customer-side interface and operations
├── Staff.py # Staff panel (Waiter/Kitchen/Management)
├── Supplier.py # Supplier login and inventory replenishment
├── Table Queries.txt # SQL DDL — table creation scripts for all entities
├── Procedure, views and tiggers.txt # PL/SQL stored procedures, views, and triggers
└── docs/
└── EERD.png # Enhanced Entity-Relationship Diagram
- Install Oracle Database (or use an existing instance) along with the
oracledbPython driver:pip install oracledb pandas matplotlib
- Run the DDL statements in
Table Queries.txtto create all tables (Customer, Order, Reservation, Table, Bill, Staff, Inventory, Supplier, Feedback, FinancialReport, etc.). - Run the PL/SQL objects in
Procedure, views and tiggers.txtto create the stored procedures, views, and triggers used by the application (e.g.reserve_table,take_feedback). - Update the database connection parameters (username, password, DSN) in
main.pyto match your Oracle instance.
python main.pyFrom the landing screen, choose a role — Customer, Admin, Staff, or Supplier — to log in and access the corresponding panel.
Developed as part of a Software Engineering coursework project.
This project is available for educational and academic use.