class DeleteBook: def __init__(self, book_table, issue_table): self.book_table = book_table self.issue_table = issue_table def create_gui(self): self.GUI = GUI(page_title="Library", page_width=1000, page_height=500) self.GUI.create_canvas(img=None, bg="#006B38") head_frame = self.GUI.create_frame(location=(0.25, 0.1, 0.5, 0.13)) head_label = self.GUI.create_label(frame=head_frame, text="Delete Book", bg="black", fg="white", font_size=15, location=(0, 0, 1, 1)) delete_frame = self.GUI.create_frame(location=(0.25, 0.3, 0.5, 0.5), bg="black") delete_body = self.GUI.create_label(delete_frame, text="Book ID", bg="black", fg="white", font_size=11, location=(0.05, 0.5, 0.3, 0.1)) self.delete_entry = self.GUI.create_entry(delete_frame, location=(0.4, 0.5, 0.3, 0.13)) self.GUI.create_button(text="SUBMIT", command=self.delete_book, location=(0.28, 0.9, 0.18, 0.08)) self.GUI.create_button(text="Quit", command=self.GUI.root.destroy, location=(0.53, 0.9, 0.18, 0.08)) def delete_book(self): bid = self.delete_entry.get() deleteSql = "delete from " + self.book_table + " where bid = '" + bid + "'" deleteIssue = "delete from " + self.issue_table + " where bid = '" + bid + "'" con, cur = connectServer() try: cur.execute(deleteSql) con.commit() cur.execute(deleteIssue) con.commit() messagebox.showinfo('Success', "Book Record Deleted Successfully") except: messagebox.showinfo("Please check Book ID") self.delete_entry.delete(0, END) def delete(self): self.create_gui() self.GUI.root.mainloop()
class ViewBook: def __init__(self, book_table, issue_table): self.book_table = book_table self.issue_table = issue_table self.GUI = None def create_gui(self): self.GUI = GUI(page_title="Library", page_width=1000, page_height=500) self.GUI.create_canvas(img=None, bg="#12a4d9") head_frame = self.GUI.create_frame(location=(0.25, 0.1, 0.5, 0.13), bg="#FFBB00") self.GUI.create_label(head_frame, "Books", "black", "white", (0, 0, 1, 1), 15) details_frame = self.GUI.create_frame(location=(0.1, 0.3, 0.8, 0.6), bg="black") columns = "BID\t\tTitle\t\tAuthor\t\t\tStatus" self.GUI.create_label(details_frame, text=columns, location=(0.07, 0.1), bg="black", fg="white", font_size=11) columns = "-----------------------------------------------------------------------------" self.GUI.create_label(details_frame, text=columns, location=(0.05, 0.2), bg="black", fg="white", font_size=11) y = 0.25 con, cur = connectServer() query = "SELECT * FROM " + self.book_table print(query) try: cur.execute(query) con.commit() for i in cur: text = self.format_string(i) self.GUI.create_label(details_frame, text, location=(0.07, y), bg="black", fg="white", font_size=11) y += 0.05 except: messagebox.showinfo("Failed to fetch data from database") self.GUI.create_button(text="Quit", command=self.GUI.root.destroy, location=(0.1, 0.9, 0.18, 0.08)) self.GUI.create_button(text="Refresh", command=self.refresh, location=(0.4, 0.9, 0.18, 0.08)) def refresh(self): if self.GUI: self.GUI.root.destroy() self.view() def format_string(self, i): text = f"{i[0]} {' ' * (12 - len(i[0]))}" text += f"{i[1]} {' ' * (17 - len(i[1]))}" text += f"{i[2]} {' ' * (25 - len(i[2]))}" text += f"{i[3]} {' ' * (17 - len(i[1]))}" return text def view(self): self.create_gui() self.GUI.root.mainloop()
class ReturnBook: """ issue book""" def __init__(self, book_table_name, book_issued_table_name, image_path=None): self.book_table_name = book_table_name self.book_issued_table_name = book_issued_table_name self.image_path = image_path def create_gui(self): self.GUI = GUI(page_title="Library", page_width=800, page_height=400) self.GUI.create_canvas(img=None, bg="#FFBB00") head_frame = self.GUI.create_frame(location=(0.25, 0.1, 0.5, 0.13), bg="#FFBB00") self.GUI.create_label(head_frame, text="Return Book", bg="black", fg="white", font_size=15, location=(0, 0, 1, 1)) # details frame details_frame = self.GUI.create_frame(location=(0.1, 0.3, 0.8, 0.5), bg="black") label_bid = self.GUI.create_label(details_frame, "Book ID: ", "black", "white", (0.05, 0.02), 11) self.entry_bid = self.GUI.create_entry(details_frame, (0.3, 0.02, 0.5, 0.1)) self.GUI.create_button(text="Return", command=self.return_, location=(0.28, 0.9, 0.18, 0.08)) self.GUI.create_button(text="Quit", command=self.GUI.root.destroy, location=(0.53, 0.9, 0.18, 0.08)) def return_(self): bid = self.entry_bid.get() bid_query = "select bid from " + self.book_issued_table_name status_query = "select status from " + self.book_table_name + " where bid = '" + bid + "'" update_sql = f"update {self.book_table_name} set status = 'available' where bid = {bid}" delete_sql = "delete from " + self.book_issued_table_name + " where bid = '" + bid + "'" # print(status_query) try: con, cur = connectServer() cur.execute(bid_query) con.commit() all_bids = [x[0] for x in cur] if bid in all_bids: cur.execute(status_query) con.commit() all_status = [x[0] for x in cur] index = all_bids.index(bid) if all_status[index] == 'issued': cur.execute(delete_sql) con.commit() cur.execute(update_sql) con.commit() messagebox.showinfo('Success', "Book returned Successfully") else: messagebox.showinfo('Message', "Book Already returned.") else: messagebox.showinfo("Error", "Book ID not present") except: messagebox.showinfo("Error", "Can't fetch Book IDs") self.entry_bid.delete(0, END) def return_book(self): self.create_gui() self.GUI.root.mainloop()
class AddBook: """ a class that handles book adding""" def __init__(self, bookTableName, bookIssuedTableName): self.bookTableName = bookTableName self.bookIssuedTableName = bookIssuedTableName def book_register(self, ): bid = self.entry_bid.get() title = self.entry_title.get() author = self.entry_author.get() status = self.entry_status.get() status = status.lower() con, cur = connectServer() insert_books = "insert into " + self.bookTableName + " values('" + bid + "','" + title + "','" + author + "','" + status + "')" try: cur.execute(insert_books) con.commit() messagebox.showinfo('Success', "Book added successfully") except: messagebox.showinfo("Error", "Can't add data into Database") self.entry_bid.delete(0, END) self.entry_title.delete(0, END) self.entry_author.delete(0, END) def create_gui(self): self.GUI = GUI(page_title="Library", page_width=1500, page_height=750) # canvas self.GUI.create_canvas(img=None, bg="#ff6e40") # head_frame # location at (x,y) = (0.2,0.1) and (width, height)=(0.6,0.16) head_frame = self.GUI.create_frame(location=(0.2, 0.1, 0.6, 0.16)) label = self.GUI.create_label(head_frame, text="Add Books", bg=self.GUI.button_background, fg=self.GUI.button_foreground, location=(0, 0, 1, 1), font_size=15) # books details frame # location at (x,y) = (0.1,0.4), (width, height) = (0.8,0.4) books_frame = self.GUI.create_frame(location=(0.1, 0.4, 0.8, 0.4), bg="black") # take input from user # bid, title, author, status label_bid = self.GUI.create_label(frame=books_frame, text="Book ID : ", bg="black", fg="white", location=(0.05, 0.2, 0.08, 0.08), font_size=11) self.entry_bid = self.GUI.create_entry(frame=books_frame, location=(0.3, 0.2, 0.62, 0.08)) label_title = self.GUI.create_label(frame=books_frame, text="Title: ", bg="black", fg="white", location=(0.05, 0.35, 0.08, 0.08), font_size=11) self.entry_title = self.GUI.create_entry(frame=books_frame, location=(0.3, 0.35, 0.62, 0.08)) label_author = self.GUI.create_label(frame=books_frame, text="Author: ", bg="black", fg="white", location=(0.05, 0.50, 0.08, 0.08), font_size=11) self.entry_author = self.GUI.create_entry(frame=books_frame, location=(0.3, 0.5, 0.62, 0.08)) label_status = self.GUI.create_label(frame=books_frame, text="Status(Avail/issued): ", bg="black", fg="white", location=(0.05, 0.65, 0.08, 0.08), font_size=11) self.entry_status = self.GUI.create_entry(frame=books_frame, location=(0.3, 0.65, 0.62, 0.08)) self.entry_status.insert(0, "Available") def add_book(self): self.create_gui() # Submit Button self.GUI.create_button(text="SUBMIT", command=self.book_register, location=(0.28, 0.9, 0.18, 0.08)) self.GUI.create_button(text="Quit", command=self.GUI.root.destroy, location=(0.53, 0.9, 0.18, 0.08)) self.GUI.root.mainloop()
class Library: """ IIT Jammu library """ def __init__(self, image_path, min_width=400, min_height=400): self.con, self.cur = connectServer() self.image_path = image_path self.title = "Library" # database table names database_name = "Library2" self.books_table_name = "books" self.issued_books_table_name = "books_issued" create_new_db(name=database_name, books_table_name=self.books_table_name, books_issued_table_name=self.issued_books_table_name) # initialise the root frame of tkinter self.main_page = GUI(page_title=self.title) self.add_book_page = AddBook( bookTableName=self.books_table_name, bookIssuedTableName=self.issued_books_table_name) self.delete_page = DeleteBook(book_table=self.books_table_name, issue_table=self.issued_books_table_name) self.view_page = ViewBook(self.books_table_name, self.issued_books_table_name) self.issue_page = IssueBook(self.books_table_name, self.issued_books_table_name) self.return_page = ReturnBook(self.books_table_name, self.issued_books_table_name) self.issued_page = ViewIssued(self.books_table_name, self.issued_books_table_name) def main(self): # get background image img = get_background_image(self.image_path) # create a basic canvas canvas1 = self.main_page.create_canvas(img) self.main_page.create_head_frame(text="Welcome to IIT Jammu Library") # add buttons to it self.main_page.create_button(text="Add book details", command=self.add_book_page.add_book, location=(0.28, 0.3, 0.45, 0.1)) self.main_page.create_button(text="Delete Book", command=self.delete_page.delete, location=(0.28, 0.4, 0.45, 0.1)) self.main_page.create_button(text="View Book List", command=self.view_page.view, location=(0.28, 0.5, 0.45, 0.1)) self.main_page.create_button(text="View Issued List", command=self.issued_page.view, location=(0.28, 0.6, 0.45, 0.1)) self.main_page.create_button(text="Issue Book to Student", command=self.issue_page.issue_book, location=(0.28, 0.7, 0.45, 0.1)) self.main_page.create_button(text="Return Book", command=self.return_page.return_book, location=(0.28, 0.8, 0.45, 0.1)) self.main_page.create_button(text="Quit", command=self.main_page.root.destroy, location=(0.28, 0.9, 0.45, 0.1)) # loop it over self.main_page.root.mainloop()