About Restaurant Management System Project in Python
In the Restaurant management system project in Python, we will be having a GUI using which we will be able to do complete billing for any customer. Like we will be able to add items and their price to the bill and also calculate their total price using the total button. Also, the data can be stored in our inbuilt SQLite database.
We will be having many buttons like the Exit button to exit the GUI, the Add button to store the data in the database, the Delete record button to delete the selected data from the SQLite database, and the Feedback button to take the feedback from the customer, the Menu button to show all the items available in the restaurant, the Reset button to reset the data, etc
In this article, we going to learn to develop the Restaurant management system project in Python using the Tkinter library step by step.
If you don’t like reading the articles, you can scroll down and copy and paste the code using the copy button in the PyCharm IDE and run it, you will see that the program runs very smoothly without any errors.
Project Overview: Restaurant management system project in Python
Project Name: | Restaurant management system project in Python |
Abstract: | This is a straightforward GUI-based program that is simple to grasp and utilize. The GUI is created with the Tkinter package. |
Language/Technologies Used: | Python, Tkinter, SQLite |
IDE | Pycharm(Recommended) |
Python version (Recommended): | 3.8 or 3.9 |
Type/Category: | Final Year Project using Python |
Developer: | Pranjal |
Updates: | 0 |
Features and Benefits:
- Fill in the order the customer wants
- Complete bill management
- Add tax and services
- Calculate the total in 1 click
- Reset the data
- Feedback form
- Orders and the total is stored in the inbuilt database of Pycharm IDE i.e DB SQLite.
Use of Pycharm IDE for Project creation of Restaurant Billing System Project in python
- First Install Pycharm Community Edition 2021.3.1 (community edition is to be installed)
- Create New Project and enter “Create”.
- Right-click on the project name you have created and Create a New Python File as “restaurantmanage.py
Once you create the python file, write the entire code which includes all the modules for restaurant management.
- Execute the Python Program
Code flow:
Import the modules required for the project
from tkinter import *
import random
import time
from tkinter import ttk
from tkinter import messagebox
import sqlite3
These are the main modules required for the project including Tkinter, random, time, and SQLite.
Defining the database connectivity for restaurant management system project in python with source code
def Database():
global connectn, cursor
connectn = sqlite3.connect("Restaurant.db")
cursor = connectn.cursor()
We are using the inbuilt database present in Pycharm IDE i.e SQLite and created the database “restaurant.db”. Connection with the database is done with the connect() function.
Defining the total function
def tottal():
# fetching the values from entry box
order = (orderno.get())
pi = float(pizza.get())
bu = float(burger.get())
ice = float(icecream.get())
dr = float(drinks.get())
# computing the cost of items
costpi = pi * 240
costbu = bu * 125
costice = ice * 80
costdr = dr * 60
# computing the charges
costofmeal = (costpi + costbu + costice + costdr)
ptax = ((costpi + costbu + costice + costdr) * 0.18)
sub = (costpi + costbu + costice + costdr)
ser = ((costpi + costbu + costice + costdr) / 99)
paidtax = str(ptax)
Service = str(ser)
overall = str(ptax + ser + sub)
The function fetches the values from the entry box and stores them in the variable, computes the cost of the item, charges, and displays the total.
Output
Defining the Add function and the display function
def add():
Database()
ord1 = orderno.get()
french1 = french.get()
def DisplayData():
Database()
my_tree.delete(*my_tree.get_children())
cursor = conn.execute("SELECT * FROM RECORD")
fetch = cursor.fetchall()
The def add gets the data from the fields and fill it into the records database and displays the data making use of for loop function
Output
Defining Deleting the record from the database
def Delete():
# open database
Database()
if not my_tree.selection():
messagebox.showwarning("Warning", "Select data to delete")
else:
result = messagebox.askquestion('Confirm', 'Are you sure you want to delete this record?',
icon="warning")
if result == 'yes':
curItem = my_tree.focus()
contents = (my_tree.item(curItem))
selecteditem = contents['values']
my_tree.delete(curItem)
cursor = connectn.execute("DELETE FROM Restaurantrecords WHERE ordno= %d" % selecteditem[0])
connectn.commit()
cursor.close()
connectn.close()
This function deletes the record from the database record in the Restaurant management system project in Python.
Output
Complete Source code of Restaurant management system project in Python
### Importing required libraries ### from tkinter import * import random import time from tkinter import ttk from tkinter import messagebox import sqlite3 from tkinter import * #It is definition of System def system(): root = Tk() root.geometry("1700x800") root.title("Restaurant Management System") def Database(): global connectn, cursor connectn = sqlite3.connect("Restaurant.db") cursor = connectn.cursor() # creating bill table cursor.execute( "CREATE TABLE IF NOT EXISTS Restaurantrecords(ordno text,piz text,bur text,ice text, dr text, ct text,sb text,tax text,sr text,tot text)") # variable datatype assignment orderno = StringVar() pizza = StringVar() burger = StringVar() icecream = StringVar() drinks = StringVar() cost = StringVar() subtotal = StringVar() tax = StringVar() service = StringVar() total = StringVar() # defining total function def tottal(): # fetching the values from entry box order = (orderno.get()) pi = float(pizza.get()) bu = float(burger.get()) ice = float(icecream.get()) dr = float(drinks.get()) # computing the cost of items costpi = pi * 240 costbu = bu * 125 costice = ice * 80 costdr = dr * 60 # computing the charges costofmeal = (costpi + costbu + costice + costdr) ptax = ((costpi + costbu + costice + costdr) * 0.18) sub = (costpi + costbu + costice + costdr) ser = ((costpi + costbu + costice + costdr) / 99) paidtax = str(ptax) Service = str(ser) overall = str(ptax + ser + sub) # Displaying the values cost.set(costofmeal) tax.set(ptax) subtotal.set(sub) service.set(ser) total.set(overall) # defining reset function def reset(): orderno.set("") pizza.set("") burger.set("") icecream.set("") drinks.set("") cost.set("") subtotal.set("") tax.set("") service.set("") total.set("") # defining exit function def exit(): root.destroy() # Topframe topframe = Frame(root, bg="white", width=1600, height=50) topframe.pack(side=TOP) # Leftframe leftframe = Frame(root, width=900, height=700) leftframe.pack(side=LEFT) # rightframe rightframe = Frame(root, width=400, height=700) rightframe.pack(side=RIGHT) ################## display data #################### def DisplayData(): Database() my_tree.delete(*my_tree.get_children()) cursor = connectn.execute("SELECT * FROM Restaurantrecords") fetch = cursor.fetchall() for data in fetch: my_tree.insert('', 'end', values=(data)) cursor.close() connectn.close() style = ttk.Style() style.configure("Treeview", foreground="black", rowheight=40, fieldbackground="white" ) style.map('Treeview', background=[('selected', 'lightblue')]) ########### Creating table ############# my_tree = ttk.Treeview(rightframe) my_tree['columns'] = ("ordno", "piz", "bur", "ice", "dr", "ct", "sb", "tax", "sr", "tot") ############ creating for table ################ horizontal_bar = ttk.Scrollbar(rightframe, orient="horizontal") horizontal_bar.configure(command=my_tree.xview) my_tree.configure(xscrollcommand=horizontal_bar.set) horizontal_bar.pack(fill=X, side=BOTTOM) vertical_bar = ttk.Scrollbar(rightframe, orient="vertical") vertical_bar.configure(command=my_tree.yview) my_tree.configure(yscrollcommand=vertical_bar.set) vertical_bar.pack(fill=Y, side=RIGHT) # defining column for table my_tree.column("#0", width=0, minwidth=0) my_tree.column("ordno", anchor=CENTER, width=80, minwidth=25) my_tree.column("piz", anchor=CENTER, width=60, minwidth=25) my_tree.column("bur", anchor=CENTER, width=50, minwidth=25) my_tree.column("ice", anchor=CENTER, width=80, minwidth=25) my_tree.column("dr", anchor=CENTER, width=50, minwidth=25) my_tree.column("ct", anchor=CENTER, width=50, minwidth=25) my_tree.column("sb", anchor=CENTER, width=100, minwidth=25) my_tree.column("tax", anchor=CENTER, width=50, minwidth=25) my_tree.column("sr", anchor=CENTER, width=100, minwidth=25) my_tree.column("tot", anchor=CENTER, width=50, minwidth=25) # defining headings for table my_tree.heading("ordno", text="Order No", anchor=CENTER) my_tree.heading("piz", text="Pizza", anchor=CENTER) my_tree.heading("bur", text="Burger", anchor=CENTER) my_tree.heading("ice", text="Ice cream", anchor=CENTER) my_tree.heading("dr", text="Drinks", anchor=CENTER) my_tree.heading("ct", text="Cost", anchor=CENTER) my_tree.heading("sb", text="Subtotal", anchor=CENTER) my_tree.heading("tax", text="Tax", anchor=CENTER) my_tree.heading("sr", text="Service", anchor=CENTER) my_tree.heading("tot", text="Total", anchor=CENTER) my_tree.pack() DisplayData() # defining add function to add record def add(): Database() # getting data orders = orderno.get() pizzas = pizza.get() burgers = burger.get() ices = icecream.get() drinkss = drinks.get() costs = cost.get() subtotals = subtotal.get() taxs = tax.get() services = service.get() totals = total.get() if orders == "" or pizzas == "" or burgers == "" or ices == "" or drinkss == "" or costs == "" or subtotals == "" or taxs == "" or services == "" or totals == "": messagebox.showinfo("Warning", "Please fill the empty field!!!") else: connectn.execute( 'INSERT INTO Restaurantrecords (ordno, piz, bur , ice ,dr ,ct ,sb ,tax, sr, tot) VALUES (?,?,?,?,?,?,?,?,?,?)', (orders, pizzas, burgers, ices, drinkss, costs, subtotals, taxs, services, totals)); connectn.commit() messagebox.showinfo("Message", "Stored successfully") # refresh table data DisplayData() connectn.close() # defining function to access data from sqlite datrabase def DisplayData(): Database() my_tree.delete(*my_tree.get_children()) cursor = connectn.execute("SELECT * FROM Restaurantrecords") fetch = cursor.fetchall() for data in fetch: my_tree.insert('', 'end', values=(data)) cursor.close() connectn.close() # defining function to delete record def Delete(): # open database Database() if not my_tree.selection(): messagebox.showwarning("Warning", "Select data to delete") else: result = messagebox.askquestion('Confirm', 'Are you sure you want to delete this record?', icon="warning") if result == 'yes': curItem = my_tree.focus() contents = (my_tree.item(curItem)) selecteditem = contents['values'] my_tree.delete(curItem) cursor = connectn.execute("DELETE FROM Restaurantrecords WHERE ordno= %d" % selecteditem[0]) connectn.commit() cursor.close() connectn.close() # Time localtime = time.asctime(time.localtime(time.time())) # Top part main_lbl = Label(topframe, font=('Calibri', 25, 'bold'), text="Restaurant Management System", fg="Blue", anchor=W) main_lbl.grid(row=0, column=0) main_lbl = Label(topframe, font=('Calibri', 15,), text=localtime, fg="lightgreen", anchor=W) main_lbl.grid(row=1, column=0) ### Labels # items ordlbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Order No.", fg="black", bd=5, anchor=W).grid(row=1, column=0) ordtxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=orderno).grid(row=1, column=1) # Pizza pizlbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Pizza", fg="black", bd=5, anchor=W).grid(row=2, column=0) piztxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=pizza).grid(row=2, column=1) # burger burlbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Burger", fg="black", bd=5, anchor=W).grid(row=3, column=0) burtxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=burger).grid(row=3, column=1) # icecream icelbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Ice Cream", fg="black", bd=5, anchor=W).grid(row=4, column=0) icetxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=icecream).grid(row=4, column=1) # drinks drinklbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Drinks", fg="black", bd=5, anchor=W).grid(row=5, column=0) drinktxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=drinks).grid(row=5, column=1) # cost costlbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Cost", bd=5, anchor=W).grid(row=6, column=0) costtxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=cost).grid(row=6, column=1) # subtotal sublbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Subtotal", bd=5, anchor=W).grid(row=7, column=0) subtxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=subtotal).grid(row=7, column=1) # tax taxlbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Tax", bd=5, anchor=W).grid(row=8, column=0) taxtxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=tax).grid(row=8, column=1) # service servicelbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Service", bd=5, anchor=W).grid(row=9, column=0) servicetxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=service).grid(row=9, column=1) # total totallbl = Label(leftframe, font=('Calibri', 16, 'bold'), text="Total", bd=5, anchor=W).grid(row=10, column=0) totaltxt = Entry(leftframe, font=('Calibri', 16, 'bold'), bd=6, insertwidth=4, justify='right', textvariable=total).grid(row=10, column=1) # ---button-- totbtn = Button(leftframe, font=('Calibri', 16, 'bold'), text="Total", bg="Lightgrey", fg="black", bd=3, padx=5, pady=5, width=6, command=tottal).grid(row=6, column=3) resetbtn = Button(leftframe, font=('Calibri', 16, 'bold'), text="Reset", bg="lightgrey", fg="black", bd=3, padx=5, pady=5, width=6, command=reset).grid(row=4, column=3) exitbtn = Button(leftframe, font=('Calibri', 16, 'bold'), text="Exit The System", bg="lightgrey", fg="black", bd=3, padx=5, pady=5, width=12, command=exit).grid(row=6, column=2) addbtn = Button(leftframe, font=('Calibri', 16, 'bold'), text="Add", bg="lightgrey", fg="black", bd=3, padx=5, pady=5, width=6, command=add).grid(row=2, column=3) deletebtn = Button(leftframe, font=('Calibri', 16, 'bold'), text="Delete Record", bg="lightgrey", fg="black", bd=3, padx=5, pady=5, width=12, command=Delete).grid(row=4, column=2) ########################### feedback form ################################ def feedbackk(): feed = Tk() feed.geometry("600x500") feed.title("Submit Feedback form") # database # connectn = sqlite3.connect("Restaurant.db") cursor = connectn.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS FEEDBACK(n text,eid text,feedback5 text,com text)") # variable datatype asssignment # name = StringVar() email = StringVar() comments = StringVar() # defiing submit function def submit(): n = name.get() eid = email.get() com = txt.get('1.0', END) feedback1 = "" feedback2 = "" feedback3 = "" feedback4 = "" if (checkvar1.get() == "1"): feedback1 = "Excellent" if (checkvar2.get() == "1"): feedback2 = "Good" if (checkvar3.get() == "1"): feedback2 = "Average" if (checkvar4.get() == "1"): feedback2 = "Poor" feedback5 = feedback1 + " " + feedback2 + " " + feedback3 + " " + feedback4 conn = sqlite3.connect("Restaurant.db") cursor = conn.cursor() cursor.execute("INSERT INTO FEEDBACK VALUES ('" + n + "','" + eid + "','" + com + "','" + feedback5 + "')") messagebox.showinfo("message", "data inserted !") feed.destroy() # defining cancel button def cancel(): feed.destroy() # label# lb1 = Label(feed, font=("Calisto MT", 15, "bold"), text="Thanks for Visiting!", fg="black").pack(side=TOP) lbl2 = Label(feed, font=("calisto MT", 15), text="We're glad you chose us ! Please tell us how it was!", fg="black").pack(side=TOP) # name namelbl = Label(feed, font=('vardana', 15), text="Name:-", fg="black", bd=10, anchor=W).place(x=10, y=150) nametxt = Entry(feed, font=('vardana', 15), bd=6, insertwidth=2, bg="white", justify='right', textvariable=name).place(x=15, y=185) # email emaillbl = Label(feed, font=('vardana', 15), text="Email:-", fg="black", bd=10, anchor=W).place(x=280, y=150) emailtxt = Entry(feed, font=('vardana', 15), bd=6, insertwidth=2, bg="white", justify='right', textvariable=email).place(x=285, y=185) ###checkbutton ratelbl = Label(feed, font=('vardana', 15), text="How would you rate us?", fg="black", bd=10, anchor=W).place( x=10, y=215) checkvar1 = StringVar() checkvar2 = StringVar() checkvar3 = StringVar() checkvar4 = StringVar() c1 = Checkbutton(feed, font=('Calibri', 10, "bold"), text="Excellent", bg="white", variable=checkvar1) c1.deselect() c1.place(x=15, y=265) c2 = Checkbutton(feed, font=('Calibri', 10, "bold"), text="Good", bg="white", variable=checkvar2, ) c2.deselect() c2.place(x=120, y=265) c3 = Checkbutton(feed, font=('Calibri', 10, "bold"), text=" Average", bg="white", variable=checkvar3, ) c3.deselect() c3.place(x=220, y=265) c4 = Checkbutton(feed, font=('Calibri', 10, "bold"), text=" Poor ", bg="white", variable=checkvar4, ) c4.deselect() c4.place(x=320, y=265) # comments" commentslbl = Label(feed, font=('Calibri', 15), text="Comments", fg="black", bd=10, anchor=W).place(x=10, y=300) txt = Text(feed, width=50, height=5) txt.place(x=15, y=335) # button submit = Button(feed, font=("Calibri", 15), text="Submit", fg="black", bg="green", bd=2, command=submit).place( x=145, y=430) cancel = Button(feed, font=("Calibri", 15), text="Cancel", fg="black", bg="red", bd=2, command=cancel).place( x=245, y=430) feed.mainloop() # Feedbackbutton feedbtn = Button(leftframe, font=('Calibri', 16, 'bold'), text="Feedback Form", fg="black", bg="lightgrey", bd=3, padx=10, pady=10, width=10, command=feedbackk).grid(row=8, column=2, columnspan=1) ##################### Menu card ################################ def menu(): roott = Tk() roott.title("Price Menu") roott.geometry("300x300") lblinfo = Label(roott, font=("Calibri", 20, "bold"), text="ITEM LIST", fg="black", bd=10) lblinfo.grid(row=0, column=0) lblprice = Label(roott, font=("Calibri", 20, "bold"), text="Prices", fg="black", bd=10) lblprice.grid(row=0, column=3) lblpizza = Label(roott, font=("Calibri", 20, "bold"), text="Pizza", fg="Blue", bd=10) lblpizza.grid(row=1, column=0) lblpricep = Label(roott, font=("Calibri", 20, "bold"), text="240/-", fg="blue", bd=10) lblpricep.grid(row=1, column=3) lblburger = Label(roott, font=("Calibri", 20, "bold"), text="Burger", fg="Blue", bd=10) lblburger.grid(row=3, column=0) lblpriceb = Label(roott, font=("Calibri", 20, "bold"), text="125/-", fg="blue", bd=10) lblpriceb.grid(row=3, column=3) lblicecream = Label(roott, font=("Calibri", 20, "bold"), text="Ice-Cream", fg="Blue", bd=10) lblicecream.grid(row=4, column=0) lblpricei = Label(roott, font=("Calibri", 20, "bold"), text="80/-", fg="blue", bd=10) lblpricei.grid(row=4, column=3) lbldrinks = Label(roott, font=("Calibri", 20, "bold"), text="Drinks", fg="Blue", bd=10) lbldrinks.grid(row=5, column=0) lblpriced = Label(roott, font=("Calibri", 20, "bold"), text="60/-", fg="blue", bd=10) lblpriced.grid(row=5, column=3) roott.mainloop() # menubutton menubtn = Button(leftframe, font=('Calibri', 16, 'bold'), text="Menu Card", bg="lightgrey", fg="black", bd=3, padx=6, pady=6, width=12, command=menu).grid(row=2, column=2) root.mainloop() system()
Outputs
Listing of the menu card prices
Conclusion
In this article, we have successfully completed our python project on the Restaurant management system with the database connectivity of DB SQLite where we performed all the operations of billing, adding, deleting, resetting, feedback, exiting the program, displaying records, etc
You can make this project more interesting by adding more functionalities to it.
Thank you for reading the article.
Visit our website for similar projects.
Also Read:
- Download 1000+ Projects, All B.Tech & Programming Notes, Job, Resume & Interview Guide, and More – Get Your Ultimate Programming Bundle!
- Music Recommendation System in Machine Learning
- Create your own ChatGPT with Python
- Bakery Management System in Python | Class 12 Project
- SQLite | CRUD Operations in Python
- Event Management System Project in Python
- Ticket Booking and Management in Python
- Hostel Management System Project in Python
- Sales Management System Project in Python
- Bank Management System Project in C++
- Python Download File from URL | 4 Methods
- Python Programming Examples | Fundamental Programs in Python
- Spell Checker in Python
- Portfolio Management System in Python
- Stickman Game in Python
- Contact Book project in Python
- Loan Management System Project in Python
- Cab Booking System in Python
- Brick Breaker Game in Python
- 100+ Java Projects for Beginners 2023
- Tank game in Python
- GUI Piano in Python
- Ludo Game in Python
- Rock Paper Scissors Game in Python
- Snake and Ladder Game in Python
- Puzzle Game in Python
- Medical Store Management System Project in Python
- Creating Dino Game in Python
- Tic Tac Toe Game in Python
- Courier Tracking System in HTML CSS and JS