Project 1 - English Dictionary App & Library Book Management System
1a) English Dictionary app
import pickle
import os
def saveDictionary(tmp_dict):
try:
with open('words.txt', 'wb') as dictionary:
pickle.dump(tmp_dict, dictionary)
print("SUCCESS: writing to dictionary words.txt")
except Exception as e:
print(f"ERROR: {e}")
def getDictionary():
try:
with open('words.txt', 'rb') as dictionary:
tmp_dict = pickle.load(dictionary)
print("SUCCESS: reading from dictionary words.txt")
return tmp_dict
except Exception as e:
print(f"ERROR: {e}")
def addNewWord():
print("__________")
print("NEW WORD ADDER:")
print("__________")
print("Enter a Word to add")
word = input(">>")
print(f"Enter a meaning of {word} to add")
meaning = input(">>")
dictionary = getDictionary()
dictionary[word] = meaning
saveDictionary(dictionary)
def findMeaning():
print("__________")
print("WORD FINDER:")
print("__________")
print("Enter a Word to find")
word = input(">>")
dictionary = getDictionary()
if word in dictionary:
print(f"Found Entry: [{word} : {dictionary[word]}]")
else:
print("ERROR: The word doesn't exist!")
findMeaning()
def updateWord():
print("__________")
print("WORD UPDATER:")
print("__________")
print("Enter an old Word to edit")
word = input(">>")
dictionary = getDictionary()
if word in dictionary:
print(f"Enter a New Meaning to edit [{word} : {dictionary[word]}] to:")
new_meaning = input(">>")
dictionary[word] = new_meaning
saveDictionary(dictionary)
print(f"SUCCESS: Updated to [{word} : {dictionary[word]}]")
else:
print("ERROR: The word doesn't exist! impossible to update!")
updateWord()
def main_menu():
if not os.path.exists(os.path.join("words.txt")):
try:
with open('words.txt', 'wb') as dictionary:
pickle.dump({}, dictionary)
print("SUCCESS: writing to dictionary words.txt")
except Exception as e:
print(f"ERROR: {e}")
print("__________")
print("ENGLISH DICTIONARY APP")
print("__________")
print("1. Add a new word")
print("2. Find the meaning")
print("3. Update a word")
print("4. Exit")
print("__________")
n = int(input(">>"))
if n==1:
addNewWord()
elif n==2:
findMeaning()
elif n==3:
updateWord()
elif n==4:
exit()
else:
print("ERROR: Please Enter a digit according to Menu.")
main_menu()
__________
ENGLISH DICTIONARY APP
__________
1. Add a new word
2. Find the meaning
3. Update a word
4. Exit
__________
>>1
__________
NEW WORD ADDER:
__________
Enter a Word to add
>>flower
Enter a meaning of flower to add
>>beautiful thing on earth
SUCCESS: reading from dictionary words.txt
SUCCESS: writing to dictionary words.txt
1b) Library book management system
import sqlite3
def init_db():
connection = sqlite3.connect("LIBRABRY MANAGEMENT.db")
cursor = connection.cursor()
print("Database connection established successfully")
create_table(cursor)
return(connection, cursor)
def term_db(connection):
connection.close()
print("connection ended successfully")
def create_table(cursor):
l = """CREATE TABLE if not exists books (
title varchar(60) not null,
author varchar(30) not null,
year INTEGER not null,
ISBN INTEGER,
unique (title, author, year, ISBN)
);"""
cursor.execute(l)
def read_table(cursor):
l = "SELECT * FROM books"
cursor.execute(l)
data = cursor.fetchall()
return(data)
def add_to_table(cursor, title, author, year, isbn):
l = f"INSERT INTO books VALUES ('{title}', '{author}', {year}, {isbn});"
try:
cursor.execute(l)
return(0, "success")
except sqlite3.IntegrityError as e:
return(111, e)
except sqlite3.OperationalError as e:
return(112, e)
def remove_from_table(cursor, title, author, year, isbn):
try:
l = f'''DELETE FROM books WHERE title="{title}";'''
cursor.execute(l)
l = f'''DELETE FROM books WHERE author="{author}";'''
cursor.execute(l)
l = f'''DELETE FROM books WHERE year="{year}";'''
cursor.execute(l)
l = f'''DELETE FROM books WHERE isbn="{isbn}";'''
cursor.execute(l)
except:
return(-1)
def search_from_table(cursor, title, author, year, isbn):
try:
cursor.execute("SELECT * FROM books WHERE title=?", (title,))
searched_titles = cursor.fetchall()
cursor.execute("SELECT * FROM books WHERE author=?", (author,))
searched_authors = cursor.fetchall()
cursor.execute("SELECT * FROM books WHERE year=?", (year,))
searched_years = cursor.fetchall()
cursor.execute("SELECT * FROM books WHERE ISBN=?", (isbn,))
searched_isbns = cursor.fetchall()
return(searched_titles + searched_authors + searched_years + searched_isbns)
except:
return(-1)
def save_changes(connection):
connection.commit()
def list_all_books(listArea):
connection, cursor = init_db()
print("listing books")
books = read_table(cursor)
listArea.delete('0','end')
for i in range(len(books)):
listArea.insert(i,f"{books[i][0]}, {books[i][1]}, {books[i][2]}, {books[i][3]}")
term_db(connection)
def search_book(listArea, title, author, year, isbn):
connection, cursor = init_db()
print("search book")
title = title.get()
author = author.get()
year = year.get()
isbn = isbn.get()
res = search_from_table(cursor, title, author, year, isbn)
if res==-1:
messagebox.showerror("Error!", "something went wrong!")
if res!=-1:
listArea.delete('0','end')
for i in range(len(res)):
listArea.insert(i,res[i])
term_db(connection)
def add_book(title, author, year, isbn):
connection, cursor = init_db()
print("adding book")
title = title.get()
author = author.get()
year = year.get()
isbn = isbn.get()
code, error = add_to_table(cursor, title, author, year, isbn)
if code==111:
messagebox.showerror("Error!", f"Book Already Exists!\n\nerror code: {code}\nerror:{error}")
if code==112:
messagebox.showerror("Error!", f"Please, fill in the input fields appropriately.\n\ntitle: string, author: string, year: integer, year: integer.\n\nerror code: {code}\nerror:{error}")
save_changes(connection)
term_db(connection)
def issue_book(title, author, year, isbn):
connection, cursor = init_db()
print("issue book")
messagebox.showwarning("Undefined", "this function is not yet defined!")
term_db(connection)
def delete_book(title, author, year, isbn):
connection, cursor = init_db()
print("delte book")
title = title.get()
author = author.get()
year = year.get()
isbn = isbn.get()
code = remove_from_table(cursor, title, author, year, isbn)
if code==-1:
messagebox.showerror("Error!", "something went wrong!")
messagebox.showinfo("Deleted!", f"Deleted the book: {title}, {author}, {year}, {isbn}")
save_changes(connection)
term_db(connection)
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
def gui():
root = Tk()
root.title("LIBRARY MANAGEMENT SYSTEM")
title = StringVar()
author = StringVar()
year = StringVar()
isbn = StringVar()
title_label = Label(root, bg='orange', text="TITLE:", padx=10)
author_label = Label(root, bg='orange', text="AUTHOR:", padx=10)
year_label = Label(root, bg='orange', text="YEAR:", padx=10)
isbn_label = Label(root, bg='orange', text="ISBN:", padx=10)
title_entry = Entry(root, textvariable=title)
author_entry = Entry(root, textvariable=author)
year_entry = Entry(root, textvariable=year)
isbn_entry = Entry(root, textvariable=isbn)
scrollbar = Scrollbar(root, orient="vertical")
listArea = Listbox(root, bg='white', width=100, yscrollcommand=scrollbar.set)
list_all_btn = Button(root, bg='yellow', text="LIST ALL", command=lambda:list_all_books(listArea))
search_btn = Button(root, bg='green',text="SEARCH", command=lambda:search_book(listArea, title, author, year, isbn))
add_btn = Button(root, bg='grey', text="ADD", command=lambda:add_book(title, author, year, isbn))
issue_btn = Button(root, bg='blue', text="ISSUE", command=lambda:issue_book(title, author, year, isbn))
del_btn = Button(root, bg='red', text="DELETE", command=lambda:delete_book(title, author, year, isbn))
exit_btn = Button(root, bg='red', text="EXIT", command=root.destroy)
scrollbar.config(command=listArea.yview)
title_label.grid(row=0, column=0)
author_label.grid(row=0, column=2)
year_label.grid(row=0, column=4)
isbn_label.grid(row=0, column=6)
title_entry.grid(row=0, column=1)
author_entry.grid(row=0, column=3)
year_entry.grid(row=0, column=5)
isbn_entry.grid(row=0, column=7)
listArea.grid(row=1, column=0, columnspan=8, sticky="nsew")
scrollbar.grid(row=1, column=9, sticky="ns")
list_all_btn.grid(row=2, column=0)
search_btn.grid(row=2, column=1)
add_btn.grid(row=2, column=2)
issue_btn.grid(row=2, column=3)
del_btn.grid(row=2, column=4)
exit_btn.grid(row=2, column=7)
print("GUI loop INITIATING")
root.mainloop()
print("GUI loop TERMINATED")
gui()
GUI loop INITIATING
Database connection established successfully
adding book
connection ended successfully
Database connection established successfully
listing books
connection ended successfully
Database connection established successfully
adding book
connection ended successfully
Database connection established successfully
listing books
connection ended successfully
Database connection established successfully
adding book
connection ended successfully
Database connection established successfully
listing books
connection ended successfully
Database connection established successfully
adding book
connection ended successfully
Database connection established successfully
listing books
connection ended successfully
Database connection established successfully
search book
connection ended successfully
GUI loop TERMINATED