from tkinter import *
from tkinter import ttk
import mysql.connector
import datetime
#from tkinter import messegebox
 
class LibraryManagementSystem:
    def __init__(self, root):
        self.root = root
        self.root.title("Library Management System")
        self.root.geometry("1400x700+0+0")
        self.member_var=StringVar()
        self.prn_var=StringVar()
        self.id_var=StringVar()
        self.firstname_var=StringVar()
        self.lastname_var=StringVar()
        self.address1_var=StringVar()
        self.address2_var=StringVar()
        self.postcode_var=StringVar()
        self.mobile_var=StringVar()
        self.bookid_var=StringVar()
        self.booktitle_var=StringVar()
        self.auther_var=StringVar()
        self.dateborrowed_var=StringVar()
        self.datedue_var=StringVar()
        self.daysonbook=StringVar()
        self.lateratefine_var=StringVar()
        self.dateoverdue=StringVar()
        self.finallprice=StringVar()
        
        lbltitle=Label(self.root,text="LIBRARY MANGEMENT SYSTEM",bg="powder blue",fg="green",bd=20,relief="ridge",font=("Times New Roman",50,"bold"),padx=2,pady=6)
        lbltitle.pack(side=TOP,fill=X)
        frame=Frame(self.root,bd=12,relief="ridge",padx=20,bg="powder blue")
        frame.place(x=0,y=130,width=1365,height=370)
        #DATA FRAME LEFT
        DataFrameLeft=LabelFrame(frame,text="LIBRARY MEMBERSHIP INFORMATION",bg="powder blue",fg="green",bd=12,relief="ridge",font=("Times New Roman",12,"bold"))
        DataFrameLeft.place(x=0,y=5,width=720,height=330)
        
        lblmember=Label(DataFrameLeft,bg="powder blue",text="MEMBER TYPE",font=("Times New Roman",15,"bold"),padx=2,pady=6)
        lblmember.grid(row=0,column=0,sticky=W)
        comMember=ttk.Combobox(DataFrameLeft,font=("Times New Roman",15,"bold"),width=19,textvariable=self.member_var,state="readonly")
        comMember["value"]=("ADMIN STAFF","STUDENT","LECTURER")
        comMember.current(0)
        comMember.grid(row=0,column=1)
        
        lblPRN_no=Label(DataFrameLeft,font=("arial",12,"bold"),text="PRN NO.",padx=2,pady=2,bg="powder blue")
        lblPRN_no.grid(row=1,column=0,sticky=W)
        textPRN_no=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.prn_var,width=23)
        textPRN_no.grid(row=1,column=1)

        lblTitle=Label(DataFrameLeft,font=("arial",12,"bold"),text="ID NO.",padx=2,pady=2,bg="powder blue")
        lblTitle.grid(row=2,column=0,sticky=W)
        textTitle=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.id_var,width=23)
        textTitle.grid(row=2,column=1)

        lblFirstName=Label(DataFrameLeft,font=("arial",12,"bold"),text="First Name",padx=2,pady=2,bg="powder blue")
        lblFirstName.grid(row=3,column=0,sticky=W)
        textFirstName=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.firstname_var,width=23)
        textFirstName.grid(row=3,column=1)

        lblLastName=Label(DataFrameLeft,font=("arial",12,"bold"),text="Last Name",padx=2,pady=2,bg="powder blue")
        lblLastName.grid(row=4,column=0,sticky=W)
        textLastName=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.lastname_var,width=23)
        textLastName.grid(row=4,column=1)

        lblAddress1=Label(DataFrameLeft,font=("arial",12,"bold"),text="Address 1",padx=2,pady=2,bg="powder blue")
        lblAddress1.grid(row=5,column=0,sticky=W)
        textAddress1=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.address1_var,width=23)
        textAddress1.grid(row=5,column=1)

        lblAddress2=Label(DataFrameLeft,font=("arial",12,"bold"),text="Address 2",padx=2,pady=2,bg="powder blue")
        lblAddress2.grid(row=6,column=0,sticky=W)
        textAddress2=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.address2_var,width=23)
        textAddress2.grid(row=6,column=1)

        lblPostcode=Label(DataFrameLeft,font=("arial",12,"bold"),text=" Post Code",padx=2,pady=2,bg="powder blue")
        lblPostcode.grid(row=7,column=0,sticky=W)
        textPostcode=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.postcode_var,width=23)
        textPostcode.grid(row=7,column=1)

        lblMobile=Label(DataFrameLeft,font=("arial",12,"bold"),text=" Mobile No.",padx=2,pady=2,bg="powder blue")
        lblMobile.grid(row=8,column=0,sticky=W)
        textMobile=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.mobile_var,width=23)
        textMobile.grid(row=8,column=1)


        lblBookid=Label(DataFrameLeft,font=("arial",12,"bold"),text="Book Id.",padx=2,pady=2,bg="powder blue")
        lblBookid.grid(row=0,column=2,sticky=W)
        textBookid=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.bookid_var,width=20)
        textBookid.grid(row=0,column=3)

        lblBooktitle=Label(DataFrameLeft,font=("arial",12,"bold"),text="Book Title",padx=2,pady=2,bg="powder blue")
        lblBooktitle.grid(row=1,column=2,sticky=W)
        textBooktitle=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.booktitle_var,width=20)
        textBooktitle.grid(row=1,column=3)
        
        lblAuther=Label(DataFrameLeft,font=("arial",12,"bold"),text="Auther Name",padx=2,pady=2,bg="powder blue")
        lblAuther.grid(row=2,column=2,sticky=W)
        textAuther=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.auther_var,width=20)
        textAuther.grid(row=2,column=3)

        lblDateBorrowed=Label(DataFrameLeft,font=("arial",12,"bold"),text="Date Borrowed ",padx=2,pady=2,bg="powder blue")
        lblDateBorrowed.grid(row=3,column=2,sticky=W)
        textDateBorrowed=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.dateborrowed_var,width=20)
        textDateBorrowed.grid(row=3,column=3)

        lblDateDue=Label(DataFrameLeft,font=("arial",12,"bold"),text="Date Due: ",padx=2,pady=2,bg="powder blue")
        lblDateDue.grid(row=4,column=2,sticky=W)
        textDateDue=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.datedue_var,width=20)
        textDateDue.grid(row=4,column=3)

        lblDaysonBook=Label(DataFrameLeft,font=("arial",12,"bold"),text="Days on Book",padx=2,pady=2,bg="powder blue")
        lblDaysonBook.grid(row=5,column=2,sticky=W)
        textDaysonBook=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.daysonbook,width=20)
        textDaysonBook.grid(row=5,column=3)

        lbllateretuenfine=Label(DataFrameLeft,font=("arial",12,"bold"),text="Late Return Fine",padx=2,pady=2,bg="powder blue")
        lbllateretuenfine.grid(row=6,column=2,sticky=W)
        textlateretuenfine=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.lateratefine_var,width=20)
        textlateretuenfine.grid(row=6,column=3)

        lblDateoverDate=Label(DataFrameLeft,font=("arial",12,"bold"),text="Date over Date",padx=2,pady=2,bg="powder blue")
        lblDateoverDate.grid(row=7,column=2,sticky=W)
        textDateoverDate=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.dateoverdue,width=20)
        textDateoverDate.grid(row=7,column=3)

        lblActualPrice=Label(DataFrameLeft,font=("arial",12,"bold"),text="Actual Price",padx=2,pady=2,bg="powder blue")
        lblActualPrice.grid(row=8,column=2,sticky=W)
        textActualPrice=Entry(DataFrameLeft,font=("arial",13,"bold"),textvariable=self.finallprice,width=20)
        textActualPrice.grid(row=8,column=3)

        



        



        
        #DATA FRAME RIGHT
        DataFrameRight=LabelFrame(frame,text="BOOK DETAILS",bg="powder blue",fg="green",bd=12,relief="ridge",font=("Times New Roman",12,"bold"))
        DataFrameRight.place(x=800,y=4,width=500,height=330)
        self.txtBox=Text(DataFrameRight,font=("arial",12,"bold"),width=27,height=14,padx=6)
        self.txtBox.grid(row=0,column=2)
        listScrollBar=Scrollbar(DataFrameRight)
        listScrollBar.grid(row=0,column=1,sticky="ns")
        listBooks=["PYTHON BASICS","PYTHON IN DEEP","MODULES IN PYTHON","MACHINE PYTHON","FLUENT PYTHON","ELITE JUNGLE PYTHON"]
        def SelectBook(event=""):
            value=str(listBox.get(listBox.curselection))
            x=value
            if (x=="PYTHON BASICS"):
                self.bookid_var.set("PB12")
                self.booktitle_var.set("Python Manual")
                self.auther_var.set("Paul verry")
                d1=datetime.datetime.today()
                d2=datetime.timedelta(days=15)
                d3=d1+d2
                self.dateborrowed_var.set()
                self.datedue_var.set(d3)
                self.daysonbook.set(15)
                self.lateratefine_var.set("Rs 50")
                self.dateoverdue.set("NO")
                self.finalprice.set("Rs 100")
            elif(x=="ELITE JUNGLE PYTHON"):
                self.bookid_var.set("ELP012")
                self.booktitle_var.set("Python JUNGLE")
                self.auther_var.set("Paul Junior")
                d1=datetime.datetime.today()
                d2=datetime.timedelta(days=15)
                d3=d1+d2
                self.dateborrowed_var.set()
                self.datedue_var.set(d3)
                self.daysonbook.set(15)
                self.lateratefine_var.set("Rs 50")
                self.dateoverdue.set("NO")
                self.finalprice.set("Rs 180")                


                
        listBox=Listbox(DataFrameRight,font=("arial",11,"bold"),width=20,height=14)
        listBox.bind("<<ListboxSelect>>",SelectBook)
        listBox.grid(row=0,column=0,padx=4)
        listScrollBar.config(command=listBox.yview)
        for item in listBooks:
            listBox.insert(END,item)



        
        #BUTTONS
        Framebutton=Frame(self.root,bd=12,relief="ridge",padx=20,bg="powder blue")
        Framebutton.place(x=0,y=500,width=1365,height=60)
        btnAddData=Button (Framebutton, command=self.adda_data,text="Add Data", font=("arial", 12, "bold"), width=70, bg="blue", fg="white")
        btnAddData.grid(row=0,column=0)
        
        btnAddData=Button (Framebutton, text="Exit", font=("arial", 12, "bold"), width=50,bg="blue", fg="white")
        btnAddData.grid(row=0,column=1)
        #INFORMATION FRAME
        FrameDetails=Frame(self.root,bd=12,relief="ridge",padx=20,bg="powder blue")
        FrameDetails.place(x=0,y=560,width=1365,height=130)
        Table_frame=Frame(FrameDetails,bd=6,relief="ridge",bg="powder blue")
        Table_frame.place(x=0,y=2,width=1310,height=100)
        xscroll=ttk.Scrollbar(Table_frame,orient=HORIZONTAL)
        yscroll=ttk.Scrollbar(Table_frame,orient=VERTICAL)




        self.library_table=ttk.Treeview(Table_frame, column=("memebertype","prnno", "title","firtname", "lastname", "adress1", "adress2","postid","mobile", "bookid", "booktitle","auther","dateborrowed", "datedue", "days","latereturnfine", "dateoverdue", "finalprice"),xscrollcommand=xscroll.set, yscrollcommand=yscroll.set)
        xscroll.pack(side=BOTTOM, fill=X)
        yscroll.pack(side=RIGHT, fill=Y)
        xscroll.config(command=self.library_table.xview)
        yscroll.config(command=self.library_table.yview)
        self.library_table.heading("memebertype", text="Member Type")
        self.library_table.heading("prnno", text="PRN No." )
        self.library_table.heading("title", text="Title")
        self.library_table.heading("firtname", text="First Name")
        self.library_table.heading("lastname", text="Last Name")
        self.library_table.heading("adress1", text="Address1")
        self.library_table.heading("adress2", text="Address2")
        self.library_table.heading("postid", text="Post ID")
        self.library_table.heading("mobile", text="Mobile Number")
        self.library_table.heading("bookid", text="Book ID")
        self.library_table.heading("booktitle", text="Book Title")
        self.library_table.heading("auther", text="Auther")
        self.library_table.heading("dateborrowed", text="Date Of Borrowed")
        self.library_table.heading("datedue", text="Date Due")
        self.library_table.heading("days", text="DaysOnBook")
        self.library_table.heading("latereturnfine", text="LateReturnFine")
        self.library_table.heading("dateoverdue", text="DateOverDue")
        self.library_table.heading("finalprice", text="Final Price")
        self.library_table["show"]="headings"
        self.library_table.pack(fill=BOTH, expand=1)
        self.library_table.column("memebertype", width=10)
        self.library_table.column("prnno", width=10)
        self.library_table.column("title", width=10)
        self.library_table.column("firtname", width=10)
        self.library_table.column("lastname", width=10)
        self.library_table.column("adress1", width=10)
        self.library_table.column("adress2", width=10)
        self.library_table.column("postid", width=10)
        self.library_table.column("mobile", width=10)
        self.library_table.column("bookid", width=10)
        self.library_table.column("booktitle", width=10)
        self.library_table.column("auther", width=10)
        self.library_table.column("dateborrowed", width=10)
        self.library_table.column("datedue", width=10)
        self.library_table.column("days", width=10)
        self.library_table.column("latereturnfine", width=10)
        self.library_table.column("dateoverdue", width=10)
        self.library_table.column("finalprice", width=10)
        self.member_var=StringVar()
        self.library_table.bind("<<>ButtonRelease-1>",self.get_cursor)
    def adda_data(self):
        conn=mysql.connector.connect(host="localhost", username="root", password="LFCOMP@105", database="librarymanagementsystem")
        my_cursor=conn.cursor()
        my_cursor.execute("insert into library values(%s, %s, %s, %s, %s, %s %s, %s, %s, %s, %s,%s,, %s, %s %s, %s, %s, %s,)",(self.member_var.get(),self.prn_var.get(),self.id_var.get(),self.firstname_var.get(),self.lastname_var.get(),self.address1_var.get(),self.address2_var.get(),self.postcode_var.get(),self.mobile_var.get(),self.bookid_var.get(),self.booktitle_var.get(),self.auther_var.get(),self.dateborrowed_var.get(),self.datedue_var.get(),self.daysonbook.get(),self.lateratefine_var.get(),self.dateoverdue.get(),self.finallprice.get()))
        conn.commit()
        conn.close()
        self.fatch_data()
        messegebox.showinfo("SUCCESS","MEMBER HAS BEEN INSETED SUCCESFULLY")
    def fatch_data(self):
        conn=mysql.connector.connect(host="localhost",username="root",password="LFCOMP@105",database="librarymanagementsystem")
        my_cursor=conn.cursor()
        my_cursor.execute("select * from library")
        rows=my_cursor.fetchall()
        if len(rows)!=0:
            self.library_table.delete(*self.library_table.get_children)
            for i in rows:
                self.library_table.insert("",END,values=i)
            conn.commit()
        conn.close()
    def get_cursor(self,event=""):
        cursor_row=self.library_table.focus()
        content=self.library_table_itrm(cursor_row)
        row=content["values"]
        self.member_var.set(row[0]),self.prn_var.set(row[1]),self.id_var.set(row[2]),self.firstname_var.set(row[3]),self.lastname_var.set(row[4]),self.address1_var.set(row[5]),self.address2_var.set(row[6]),self.postcode_var.set(row[7]),self.mobile_var.set(row[8]),self.bookid_var.set(row[9]),self.booktitle_var.set(row[10]),self.auther_var.set(row[11]),self.dateborrowed_var.set(row[12]),self.datedue_var.set(row[13]),self.daysonbook.set(row[14]),self.lateratefine_var.set(row[15]),self.dateoverdue.set(row[16]),self.finallprice.set(row[17])
        
        
 
if __name__ == "__main__":
    root = Tk()
    obj = LibraryManagementSystem(root)
    root.mainloop()

Leave a comment