├── Hotel.db ├── README.md ├── main.py ├── customer_info.py ├── check_out.py ├── get_info.py └── check_in_ui.py /Hotel.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hindhuja-V/hotel-management-system/HEAD/Hotel.db -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HOTEL-MANAGEMENT-SYSTEM 2 | HOTEL MANAGEMENT SYSTEM USING TKINTER AND SQLITE3 3 | ## General info 4 | * In i have used tkinter libary from python to build the GUI. 5 | * To store the details of customer i have used sqlite3 database. 6 | * You can Check In, Check Out, see customer details, room wise customer details in this project 7 | 8 | ## HOW TO RUN? 9 | Run main.py file 10 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | import check_in_ui 3 | import check_out 4 | import get_info 5 | import customer_info 6 | import os 7 | 8 | 9 | class Hotel: 10 | def __init__(self, root): 11 | self.root = root 12 | pad = 3 13 | self.root.title("HOTEL MANAGEMENT SYSTEM") 14 | self.root.geometry( 15 | "{0}x{1}+0+0".format(self.root.winfo_screenwidth() - pad, self.root.winfo_screenheight() - pad)) 16 | 17 | # create mainframe to add message 18 | top = Frame(self.root) 19 | top.pack(side="top") 20 | 21 | # create frame to add buttons 22 | bottom = Frame(self.root) 23 | bottom.pack(side="top") 24 | 25 | # display message 26 | self.label = Label(top, font=('arial', 50, 'bold'), text="WELCOME", fg="#15d3ba", anchor="center") 27 | self.label.grid(row=0, column=3) 28 | 29 | # create check in button 30 | self.check_in_button = Button(bottom, text="CHECK IN", font=('', 20), bg="#15d3ba", relief=RIDGE, height=2, 31 | width=50, 32 | fg="black", anchor="center", 33 | command=check_in_ui.check_in_ui_fun) # call check_in_ui_fun from check_in_ui.py file 34 | self.check_in_button.grid(row=0, column=2, padx=10, pady=10) 35 | 36 | # create check out button 37 | self.check_out_button = Button(bottom, text="CHECK OUT", font=('', 20), bg="#15d3ba", relief=RIDGE, height=2, 38 | width=50, fg="black", anchor="center", 39 | command=check_out.check_out_ui) # call check_out_ui function from check_out.py file 40 | self.check_out_button.grid(row=1, column=2, padx=10, pady=10) 41 | 42 | # create show list button 43 | self.room_info_button = Button(bottom, text="INFORMATION OF ROOMS", font=('', 20), bg="#15d3ba", relief=RIDGE, 44 | height=2, 45 | width=50, fg="black", anchor="center", 46 | command=get_info.get_info_ui) # call get_info_ui function from get_info.py file 47 | self.room_info_button.grid(row=2, column=2, padx=10, pady=10) 48 | 49 | # create get information of all the guest 50 | self.get_info_button = Button(bottom, text="INFORMATION OF ALL GUEST", font=('', 20), bg="#15d3ba", 51 | relief=RIDGE, 52 | height=2, width=50, fg="black", anchor="center", 53 | command=customer_info.customer_info_ui) 54 | # call customer_info_ui function from customer_info.py file 55 | self.get_info_button.grid(row=3, column=2, padx=10, pady=10) 56 | 57 | # button to exit the program 58 | self.exit_button = Button(bottom, text="EXIT", font=('', 20), bg="#15d3ba", relief=RIDGE, height=2, width=50, 59 | fg="black", 60 | anchor="center", command=quit) 61 | self.exit_button.grid(row=4, column=2, padx=10, pady=10) 62 | 63 | 64 | def home_ui(): 65 | root = Tk() 66 | application = Hotel(root) 67 | root.mainloop() 68 | 69 | 70 | if __name__ == '__main__': 71 | home_ui() 72 | -------------------------------------------------------------------------------- /customer_info.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | from tkinter import * 3 | import main 4 | 5 | 6 | class CustomerInfo: 7 | def __init__(self, root): 8 | self.root = root 9 | pad = 3 10 | self.root.title("CUSTOMER INFO") 11 | self.root.geometry( 12 | "{0}x{1}+0+0".format(self.root.winfo_screenwidth() - pad, self.root.winfo_screenheight() - pad)) 13 | 14 | # create mainframe to add message 15 | top = Frame(self.root) 16 | top.pack(side="top") 17 | 18 | bottom = Frame(self.root) 19 | bottom.pack(side="top") 20 | 21 | left = Frame(self.root, relief="solid") 22 | left.pack(side="left") 23 | 24 | right = Frame(self.root, relief="solid") 25 | right.pack(side="left") 26 | 27 | # display message 28 | self.label = Label(top, font=('arial', 50, 'bold'), text="LIST OF CUSTOMER", fg="#15d3ba", anchor="center") 29 | self.label.grid(row=0, column=3, padx=10, pady=10) 30 | 31 | # display message 32 | self.name_label = Label(left, font=('arial', 20, 'bold'), text="NAME", fg="#15d3ba", anchor="center") 33 | self.name_label.grid(row=0, column=1, padx=10, pady=10) 34 | 35 | # text enter field 36 | self.name_customer_entry = Text(left, height=30, width=70) 37 | self.name_customer_entry.grid(row=1, column=1, padx=10, pady=10) 38 | 39 | # display message 40 | self.room_no_label = Label(right, font=('arial', 20, 'bold'), text="ROOM NO", fg="#15d3ba", anchor="center") 41 | self.room_no_label.grid(row=0, column=1, padx=10, pady=10) 42 | 43 | # text enter field 44 | self.room_no_customer_entry = Text(right, height=30, width=70) 45 | self.room_no_customer_entry.grid(row=1, column=1, padx=10, pady=10) 46 | 47 | # create home button 48 | self.home_button = Button(top, text="HOME", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, width=15, 49 | fg="black", anchor="center", command=main.home_ui) 50 | self.home_button.grid(row=8, column=3, padx=10, pady=10) 51 | 52 | def display_info(): 53 | 54 | conn = sqlite3.connect('Hotel.db') 55 | with conn: 56 | cursor = conn.cursor() 57 | cursor.execute( 58 | 'CREATE TABLE IF NOT EXISTS Hotel (Fullname TEXT,Address TEXT,mobile_number TEXT,number_days TEXT,' 59 | 'room_number NUMBER)') 60 | conn.commit() 61 | with conn: 62 | cursor.execute("SELECT Fullname FROM Hotel") 63 | ans = cursor.fetchall() 64 | for i in ans: 65 | self.name_customer_entry.insert(INSERT, i[0] + '\n') 66 | 67 | with conn: 68 | cursor.execute("SELECT room_number FROM Hotel") 69 | ans = cursor.fetchall() 70 | for i in ans: 71 | self.room_no_customer_entry.insert(INSERT, str(i[0]) + '\n') 72 | # create display button 73 | self.display_button = Button(top, text="DISPLAY", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, width=15, 74 | fg="black", anchor="center", command=display_info) 75 | self.display_button.grid(row=8, column=4, padx=10, pady=10) 76 | 77 | 78 | def customer_info_ui(): 79 | root = Tk() 80 | application = CustomerInfo(root) 81 | root.mainloop() 82 | -------------------------------------------------------------------------------- /check_out.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | from tkinter import * 3 | import main 4 | 5 | 6 | class CheckOut: 7 | def __init__(self, root): 8 | self.root = root 9 | pad = 3 10 | self.root.title("CHECK OUT") 11 | self.root.geometry( 12 | "{0}x{1}+0+0".format(self.root.winfo_screenwidth() - pad, self.root.winfo_screenheight() - pad)) 13 | 14 | # create mainframe to add message 15 | top = Frame(self.root) 16 | top.pack(side="top") 17 | 18 | bottom = Frame(self.root) 19 | bottom.pack(side="top") 20 | 21 | info_frame = Frame(self.root) 22 | info_frame.pack(side="top") 23 | 24 | # display message 25 | self.label = Label(top, font=('arial', 50, 'bold'), text="CHECK OUT", fg="#15d3ba", anchor="center") 26 | self.label.grid(row=0, column=3, padx=10, pady=10) 27 | 28 | # room no label 29 | self.room_no_label = Label(bottom, font=('arial', 20, 'bold'), text="ENTER THE ROOM NUMBER :", fg="#15d3ba", 30 | anchor="center") 31 | self.room_no_label.grid(row=2, column=2, padx=10, pady=10) 32 | 33 | # text enter field 34 | self.room_var = IntVar() 35 | self.room_no_entry = Entry(bottom, width=5, text=self.room_var) 36 | self.room_no_entry.grid(row=2, column=3, padx=10, pady=10) 37 | 38 | # text enter field 39 | self.get_info_entry = Text(info_frame, height=15, width=90) 40 | self.get_info_entry.grid(row=1, column=1, padx=10, pady=10) 41 | 42 | def check_out(): 43 | room_number1 = int(self.room_no_entry.get()) 44 | conn = sqlite3.connect('Hotel.db') 45 | with conn: 46 | cursor = conn.cursor() 47 | cursor.execute( 48 | 'CREATE TABLE IF NOT EXISTS Hotel (Fullname TEXT,Address TEXT,mobile_number TEXT,number_days TEXT,' 49 | 'room_number NUMBER)') 50 | conn.commit() 51 | with conn: 52 | cursor.execute("SELECT room_number FROM Hotel") 53 | ans = cursor.fetchall() 54 | room = [] 55 | for i in ans: 56 | room.append(i[0]) 57 | if room_number1 in room: 58 | with conn: 59 | cursor.execute("SELECT Fullname,room_number FROM Hotel") 60 | ans = cursor.fetchall() 61 | for i in ans: 62 | if room_number1 == int(i[1]): 63 | self.get_info_entry.insert(INSERT, 64 | '\n' + str(i[0]) + ' have check out from ' + str(i[1]) + '\n') 65 | with conn: 66 | cursor.execute("""DELETE FROM Hotel where room_number = ?""", [room_number1]) 67 | 68 | else: 69 | self.get_info_entry.insert(INSERT, "PLEASE ENTER VALID ROOM NUMBER") 70 | 71 | # create submit button 72 | self.check_out_button = Button(bottom, text="CHECK OUT", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, 73 | width=15, 74 | fg="black", anchor="center", command=check_out) 75 | self.check_out_button.grid(row=3, column=2, padx=10, pady=10) 76 | 77 | # create submit button 78 | self.home_button = Button(bottom, text="HOME", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, width=15, 79 | fg="black", anchor="center", command=main.home_ui) 80 | self.home_button.grid(row=3, column=3, padx=10, pady=10) 81 | 82 | 83 | def check_out_ui(): 84 | root = Tk() 85 | application = CheckOut(root) 86 | root.mainloop() 87 | -------------------------------------------------------------------------------- /get_info.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | from tkinter import * 3 | import main 4 | 5 | 6 | class GetInfo: 7 | def __init__(self, root): 8 | self.root = root 9 | pad = 3 10 | self.root.title("GET INFO") 11 | self.root.geometry( 12 | "{0}x{1}+0+0".format(self.root.winfo_screenwidth() - pad, self.root.winfo_screenheight() - pad)) 13 | 14 | # create mainframe to add message 15 | top = Frame(self.root) 16 | top.pack(side="top") 17 | 18 | bottom = Frame(self.root) 19 | bottom.pack(side="top") 20 | 21 | info_frame = Frame(self.root, width=454, height=20) 22 | info_frame.pack(side="top") 23 | 24 | button_frame = Frame(self.root) 25 | button_frame.pack(side="top") 26 | 27 | # display message 28 | self.label = Label(top, font=('arial', 50, 'bold'), text="INFORMATION OF CUSTOMER", fg="#15d3ba", 29 | anchor="center") 30 | self.label.grid(row=0, column=3, padx=10, pady=10) 31 | 32 | # room no label 33 | self.room_no_label = Label(bottom, font=('arial', 20, 'bold'), text="ENTER THE ROOM NUMBER :", fg="#15d3ba", 34 | anchor="center") 35 | self.room_no_label.grid(row=2, column=2, padx=10, pady=10) 36 | 37 | # text enter field 38 | self.room_number = IntVar() 39 | self.room_no_entry = Entry(bottom, width=5, text=self.room_number) 40 | self.room_no_entry.grid(row=2, column=3, padx=10, pady=10) 41 | 42 | # text enter field 43 | self.get_info_entry = Text(info_frame, height=15, width=90) 44 | self.get_info_entry.grid(row=1, column=1, padx=10, pady=10) 45 | 46 | def get_info(): 47 | room_number1 = int(self.room_no_entry.get()) 48 | conn = sqlite3.connect('Hotel.db') 49 | with conn: 50 | cursor = conn.cursor() 51 | cursor.execute( 52 | 'CREATE TABLE IF NOT EXISTS Hotel (Fullname TEXT,Address TEXT,mobile_number TEXT,number_days TEXT,' 53 | 'room_number NUMBER)') 54 | conn.commit() 55 | with conn: 56 | cursor.execute("SELECT room_number FROM Hotel") 57 | ans = cursor.fetchall() 58 | room = [] 59 | for i in ans: 60 | room.append(i[0]) 61 | if room_number1 in room: 62 | with conn: 63 | cursor.execute("SELECT * FROM Hotel") 64 | ans = cursor.fetchall() 65 | for i in ans: 66 | if room_number1 == int(i[4]): 67 | self.get_info_entry.insert(INSERT, 68 | 'NAME: ' + str(i[0]) + '\nADDRESS: ' + str(i[1]) + '\nMOBILE NUMBER: ' + str(i[2]) + '\nNUMBER OF DAYS: ' + str(i[3]) + '\nROOM NUMBER: ' + str(i[4]) + '\n') 69 | else: 70 | self.get_info_entry.insert(INSERT, "\nPLEASE ENTER VALID ROOM NUMBER") 71 | 72 | # create submit button 73 | self.submit_button = Button(button_frame, text="SUBMIT", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, 74 | width=15, fg="black", anchor="center", command=get_info) 75 | self.submit_button.grid(row=8, column=2, padx=10, pady=10) 76 | 77 | # create home button 78 | self.home_button = Button(button_frame, text="HOME", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, 79 | width=15, fg="black", anchor="center", command=main.home_ui) 80 | self.home_button.grid(row=8, column=3, padx=10, pady=10) 81 | 82 | 83 | def get_info_ui(): 84 | root = Tk() 85 | application = GetInfo(root) 86 | root.mainloop() 87 | -------------------------------------------------------------------------------- /check_in_ui.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | from tkinter import * 3 | from tkinter import messagebox 4 | import random 5 | 6 | import main 7 | 8 | room_number_taken = [] 9 | 10 | 11 | class CheckIN: 12 | 13 | def __init__(self, root): 14 | self.root = root 15 | pad = 3 16 | self.root.title("CHECK IN") 17 | self.root.geometry( 18 | "{0}x{1}+0+0".format(self.root.winfo_screenwidth() - pad, self.root.winfo_screenheight() - pad)) 19 | 20 | self.top = LabelFrame(self.root) 21 | self.top.pack(side="top") 22 | 23 | self.bottom = Frame(self.root) 24 | self.bottom.pack(side="top") 25 | 26 | self.checkbox = Frame(self.root) 27 | self.checkbox.pack(side="top") 28 | 29 | # display message 30 | self.label = Label(self.top, font=('arial', 50, 'bold'), text="CHECK IN", fg="#15d3ba", anchor="center") 31 | self.label.grid(row=0, column=3, padx=10, pady=10) 32 | 33 | # name label 34 | self.name_label = Label(self.bottom, font=('arial', 20, 'bold'), text="ENTER YOUR NAME :", fg="#15d3ba", 35 | anchor="w") 36 | self.name_label.grid(row=0, column=2, padx=10, pady=10) 37 | 38 | self.name_var = StringVar() 39 | # text enter field 40 | self.name_entry = Entry(self.bottom, width=50, textvar=self.name_var) 41 | self.name_entry.grid(row=0, column=3, padx=10, pady=10) 42 | 43 | # address label 44 | self.address_label = Label(self.bottom, font=('arial', 20, 'bold'), text="ENTER YOUR ADDRESS :", fg="#15d3ba", 45 | anchor="w") 46 | self.address_label.grid(row=1, column=2, padx=10, pady=10) 47 | 48 | # text enter field 49 | self.address_var = StringVar() 50 | self.address_entry = Entry(self.bottom, width=50, textvar=self.address_var) 51 | self.address_entry.grid(row=1, column=3, padx=10, pady=10) 52 | 53 | # mobile label 54 | 55 | self.mobile_label = Label(self.bottom, font=('arial', 20, 'bold'), text="ENTER YOUR MOBILE NUMBER :", 56 | fg="#15d3ba", 57 | anchor="w") 58 | self.mobile_label.grid(row=2, column=2, padx=10, pady=10) 59 | 60 | # text enter field 61 | self.mobile_var = IntVar() 62 | self.mobile_entry = Entry(self.bottom, width=50, text=self.mobile_var) 63 | self.mobile_entry.grid(row=2, column=3, padx=10, pady=10) 64 | 65 | # number of days label 66 | self.days_label = Label(self.bottom, font=('arial', 20, 'bold'), text="ENTER NUMBER OF DAYS TO STAY :", 67 | fg="#15d3ba", 68 | anchor="w") 69 | self.days_label.grid(row=3, column=2, padx=10, pady=10) 70 | 71 | # text enter field 72 | self.days_var = IntVar() 73 | self.days_entry = Entry(self.bottom, width=50, text=self.days_var) 74 | self.days_entry.grid(row=3, column=3, padx=10, pady=10) 75 | 76 | # room number label 77 | self.room_number_label = Label(self.bottom, font=('arial', 20, 'bold'), text="ROOM NUMBER: ", 78 | fg="#15d3ba", 79 | anchor="w") 80 | self.room_number_label.grid(row=4, column=2, padx=10, pady=10) 81 | 82 | roomnumber = [101, 102, 103, 104, 105, 106, 107, 108, 109, 110] 83 | self.room_number_var = random.choice(roomnumber) 84 | 85 | self.room_entry = Entry(self.bottom, width=50) 86 | self.room_entry.insert(INSERT, self.room_number_var) 87 | self.room_entry.grid(row=4, column=3, padx=10, pady=10) 88 | 89 | def submit_info(): 90 | global ans 91 | name = self.name_entry.get() 92 | address = self.address_entry.get() 93 | room = self.room_number_var 94 | 95 | while True: 96 | self.h = str(self.mobile_entry.get()) 97 | if self.h.isdigit() == True and len(self.h) != 0 and len(self.h) == 10: 98 | mobile = self.h 99 | ans = TRUE 100 | break 101 | else: 102 | ans = False 103 | messagebox.showerror("ERROR", "PLEASE ENTER 10 DIGIT MOBILE NUMBER") 104 | break 105 | 106 | while True: 107 | self.h = str(self.days_entry.get()) 108 | if self.h.isdigit(): 109 | days = self.h 110 | ans1 = True 111 | break 112 | else: 113 | ans1 = False 114 | messagebox.showerror("ERROR", "NUMBER OF DAYS CANNOT BE VARIABLE") 115 | break 116 | 117 | if ans == TRUE and ans1 == True: 118 | conn = sqlite3.connect('Hotel.db') 119 | with conn: 120 | cursor = conn.cursor() 121 | cursor.execute( 122 | 'CREATE TABLE IF NOT EXISTS Hotel (Fullname TEXT,Address TEXT,mobile_number NUMBER,number_days ' 123 | 'NUMBER,room_number NUMBER)') 124 | cursor.execute('INSERT INTO Hotel (FullName,Address,mobile_number,number_days,room_number) ' 125 | 'VALUES(?,?,?,?,?)', (name, address, mobile, days, room)) 126 | conn.commit() 127 | with conn: 128 | cursor.execute("SELECT * FROM Hotel") 129 | print(cursor.fetchall()) 130 | room_number() 131 | self.name_var.set('') 132 | self.address_var.set('') 133 | self.days_var.set('') 134 | self.mobile_var.set('') 135 | 136 | def room_number(): 137 | room_number_taken.append(self.room_number_var) 138 | print(room_number_taken) 139 | 140 | def reset(): 141 | self.room_number_var = random.choice(roomnumber) 142 | self.room_entry.delete(0, END) 143 | self.room_entry.insert(0, self.room_number_var) 144 | 145 | self.name_entry.delete(0, END) 146 | self.name_entry.insert(0, "") 147 | 148 | self.mobile_entry.delete(0, END) 149 | self.mobile_entry.insert(0, "") 150 | 151 | self.address_entry.delete(0, END) 152 | self.address_entry.insert(0, "") 153 | 154 | self.days_entry.delete(0, END) 155 | self.days_entry.insert(0, "") 156 | 157 | # create submit button 158 | self.submit_button = Button(self.checkbox, text="SUBMIT", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, 159 | width=15, 160 | fg="black", anchor="center", command=submit_info) 161 | self.submit_button.grid(row=5, column=1, padx=10, pady=10) 162 | 163 | # back to home page 164 | self.back_home_button = Button(self.checkbox, text="HOME", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, 165 | width=15, 166 | fg="black", anchor="center", command=main.home_ui) 167 | self.back_home_button.grid(row=5, column=2, padx=10, pady=10) 168 | 169 | Button(self.checkbox, text="reset", font=('', 15), bg="#15d3ba", relief=RIDGE, height=2, width=15, fg="black", 170 | anchor="center", command=reset).grid(row=5, column=3) 171 | 172 | 173 | def check_in_ui_fun(): 174 | root = Tk() 175 | application = CheckIN(root) 176 | root.mainloop() 177 | --------------------------------------------------------------------------------