Bookstore Management - Project Report 2024-25
Bookstore Management - Project Report 2024-25
Name: Adithyan MP
Class: 12 D
C
ERTIFICATE
Exam roll no:
Date:
Principal Sign
ACKNOWLEDGEMENTS
TABLE OF CONTENTS
2 PROJECT SELECTION 5
3 WORKING ENVIRONMENT 6
9 BIBLIOGRAPHY 67
INTRODUCTION
This project focuses on the development of an eBook store that
allows users to browse and purchase digital books. Our platform
offers a convenient shopping experience where users can
explore a diverse selection of ebooks, select their favorites, and
easily add them to their shopping cart for purchase.
Key features of the project include a user-friendly interface that
enables users to view detailed information about each book,
author details, and customer ratings. Users can create personal
accounts with secure password protection, facilitating easy
management of their purchases. The shopping cart functionality
allows users to review their selected books before proceeding to
checkout, ensuring a smooth and efficient buying process.
Administrative controls are in place for managing the book
catalog, updating, and removal of titles to maintain an up-to-date
inventory.
Inspired by successful online marketplaces, our goal is to create
a comprehensive ebookstore that meets the needs of readers
looking to purchase digital literature quickly and easily.
PROJECT SELECTION
We adopted this idea to provide an interactive interface
between users and books. The application program
provides a quality experience to the user using data files.
Concepts in Python and MySQL were used to develop the
application.
WORKING ENVIRONMENT
OPTIMUM REQUIREMENTS
RAM – 4 GB or more.
Hard Disk – 1 TB
MySQL
DATA DICTIONARY
7|P a g e BGS National Public School
Computer Science Investigatory Project 2024-25
Functions PURPOSE
Welcome.py
admin(self) function to open admin login page
Registration.py
register(self) Import customer registration page
submit() This code handles a registration form
submission, validating user input and
storing it in a MySQL database upon
successful validation.
Login.py
login(self) Imports login window with details to login
into your account
toggle_password() Toggles password visibility in a GUI,
switching between showing asterisks (*)
and plain text
forgot_password() Imports forgot password window, used to
reset password
Store.py
back_window() Imports the previous window (either main
window or admin hub)
search_books(self) function for searching books
Admin.py
8|P a g e BGS National Public School
Computer Science Investigatory Project 2024-25
Feedback.py
save_feedback() Function to save customer feedback to a
text file
Main.py
booksdata(self) function to go to books data window
SOURCE CODE
welcome.py
9|P a g e BGS National Public School
Computer Science Investigatory Project 2024-25
#welcome window
import csv
import tkinter as tk
from tkinter import filedialog as fd
from PIL import Image, ImageTk
class MainWindow:
global master
def __init__(self, master):
self.master = master # Store the master window
# Initialize instance variables to store book titles and images
master.title("welcome page")
master.geometry("800x600")
master.configure(bg='#690924')
#admin button
self.admin_button = tk.Button(button_frame, text="Admin",
command=self.admin, font=("Book Antiqua", 18),fg='#690924',bg="#debcb2")
self.admin_button.pack(side=tk.LEFT, padx=10)
#customer button
self.customer_button = tk.Button(button_frame, text="Customer",
command=self.customer, font=("Book Antiqua",
18),fg='#690924',bg="#debcb2")
self.customer_button.pack(side=tk.LEFT, padx=10)
root = tk.Tk()
my_gui = MainWindow(root) #create main window
root.mainloop()
store.py
#store window
import json
import csv
class MainWindow:
def __init__(self, master):
self.master = master
master.title("store")
master.geometry("1100x700")
master.configure(bg='#690924')
#back button
self.back_button = tk.Button(search_frame, text="Back",
command=self.back_window, fg='#65041d',font=("Book Antiqua",
18),bg="#debcb2")
self.back_button.pack(side=LEFT, padx=10)
#cart button
self.cart_button = tk.Button(search_frame, text="Cart",
command=self.cart_window, fg='#65041d',font=("Book Antiqua",
18),bg="#debcb2")
self.cart_button.pack(side=LEFT, padx=10)
self.book_list_box.bind("<<ListboxSelect>>",
self.open_book_window)
self.master.destroy()
import cart
root = tk.Tk()
my_gui = MainWindow(root)
root.mainloop()
registration.py
windows = Tk()
windows.geometry('500x500+200+10')
windows.resizable(False,False)
windows.title('CUSTOMER REGISTRATION')
# Field Validations
def submit():
if nameEntry.get()=='' or phone_noEntry.get()=='' or
emailentry.get()=='' \
or usernameEntry.get()=='' or passwordEntry.get()=='' or
renterpasswordEntry.get()=='': #if any field is empty it'll show an error
box
messagebox.showerror('Alert!', 'All Fields must be entered')
else:
#successfully registered
db=mysql.connector.connect(host='localhost', user='root',
password='password',charset='utf8') #connecting to customer database
cur=db.cursor()
cur.execute('CREATE DATABASE IF NOT EXISTS p_registration')
cur.execute('USE p_registration')
windows.destroy()
import loginpg
# frame=Frame(windows)
frame=Frame(windows, width=610, height=640, bg='#65041d', bd=8)
frame.place(x=0,y=0)
#labels on window
heading =Label(frame, text='~SIGN UP PAGE~', fg='#debcb2',bg='#65041d',
font=('Garamond', 20, 'bold'))
heading.place(x=120, y=3)
#name label
nameLabel= Label(frame, text="Name:", fg='#debcb2', bg='#65041d',
font=('Book Antiqua', 15, 'bold'))
nameLabel.place(x=10, y=70)
nameEntry=Entry(frame, width=30, borderwidth=2)
nameEntry.place(x=240, y=70)
#phone number label
phone_noLabel= Label(frame, text="Phone number:",
fg='#debcb2',bg='#65041d', font=('Book Antiqua', 15, 'bold'))
phone_noLabel.place(x=10, y=110)
phone_noEntry=Entry(frame, width=30, borderwidth=2)
phone_noEntry.place(x=240, y=110)
#email label
idlabelEmail=Label(frame, text='Email:', fg='#debcb2', bg='#65041d',
font=('Book Antiqua', 15, 'bold'))
idlabelEmail.place(x=10, y=150)
emailentry=Entry(frame, width=30, borderwidth=2)
emailentry.place(x=240, y=150)
#username label
usernamelbl = Label(frame, text='Username:', fg='#debcb2', bg='#65041d',
font=('Book Antiqua', 15, 'bold'))
usernamelbl.place(x=10, y=190)
usernameEntry=Entry(frame, width=30, borderwidth=2)
usernameEntry.place(x=240, y=190)
#password label
passwordlbl = Label(frame, text='Password:', fg='#debcb2', bg='#65041d',
font=('Book Antiqua', 15, 'bold'))
passwordlbl.place(x=10, y=230)
passwordEntry=Entry(frame, width=30, borderwidth=2)
passwordEntry.place(x=240, y=230)
#confirm password label
renterpasswordlbl = Label(frame, text='Confirm Password:', fg='#debcb2',
bg='#65041d', font=('Book Antiqua', 15, 'bold'))
renterpasswordlbl.place(x=10, y=270)
renterpasswordEntry=Entry(frame, width=30, borderwidth=2)
renterpasswordEntry.place(x=240, y=270)
#back button
windows.mainloop()
main.py
#main window
import csv
import tkinter as tk
from tkinter import filedialog as fd
from PIL import Image, ImageTk
import os
class BookstoreData:
def __init__(self, csv_file):
self.book_titles = [] #stores book titles
with open(csv_file, 'r') as f:
reader = csv.reader(f)
for row in reader:
self.book_titles.append(row[0])
class MainWindow:
global master
def __init__(self, master, data):
self.master = master
self.data = data
master.title("Main Window")
master.geometry("800x600")
master.configure(bg='#690924') # Change background color to
light gray
root = tk.Tk()
data = BookstoreData('Book.csv')
my_gui = MainWindow(root, data)
root.mainloop()
loginpg.py
# Configure fonts and colors for consistency with the original file
HEADER_FONT = ("Garamond", 24, "bold")
LABEL_FONT = ("Book Antiqua", 14)
BUTTON_FONT = ("Book Antiqua", 10, "bold")
TEXT_COLOR = '#debcb2'
BACKGROUND_COLOR = '#65041d'
BUTTON_COLOR = '#debcb2'
BUTTON_TEXT_COLOR = '#65041d'
# Forgot Password
def forgot_password():
window.destroy()
import forgotpassword
# Create Account
def create_one():
window.destroy()
import registration
# Login Function
def login():
if idEntry.get() == "" or passwdEntry.get() == "":
messagebox.showerror("Alert", "Please enter all fields!")
else:
# Database connection
db = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="p_registration",
charset="utf8"
)
cur = db.cursor()
query = "SELECT * FROM personaldata WHERE passwrd=%s"
cur.execute(query, (passwdEntry.get(),))
roles = cur.fetchone()
if roles is None:
messagebox.showerror("Alert", "Incorrect email or password")
else:
messagebox.showinfo("Success", "Login successful!")
idEntry.delete(0, END)
passwdEntry.delete(0, END)
window.destroy()
import main
# Show/hide password
def toggle_password():
if passwdEntry.cget("show") == "":
passwdEntry.config(show="*")
toggle_button.config(text="Show")
else:
passwdEntry.config(show="")
toggle_button.config(text="Hide")
# Header
heading = Label(window, text="~ SIGN IN PAGE ~", font=HEADER_FONT,
fg=TEXT_COLOR, bg=BACKGROUND_COLOR)
heading.pack(pady=20)
# Email
id_label = Label(frame, text="Email:", font=LABEL_FONT, fg=TEXT_COLOR,
bg=BACKGROUND_COLOR)
id_label.grid(row=0, column=0, sticky=W, pady=10)
idEntry = Entry(frame, font=LABEL_FONT, width=30)
idEntry.grid(row=0, column=1, padx=10)
# Password
passwd_label = Label(frame, text="Password:", font=LABEL_FONT,
fg=TEXT_COLOR, bg=BACKGROUND_COLOR)
passwd_label.grid(row=1, column=0, sticky=W, pady=10)
passwdEntry = Entry(frame, font=LABEL_FONT, show="*", width=30)
passwdEntry.grid(row=1, column=1, padx=10)
# Login Button
login_button = Button(window, text="LOGIN", font=BUTTON_FONT, width=20,
bg=BUTTON_COLOR, fg=BUTTON_TEXT_COLOR, command=login)
login_button.pack(pady=20)
window.mainloop()
forgotpassword.py
windows = Tk()
windows.geometry('500x460+200+10')
windows.attributes('-transparentcolor', 'red')
windows.title('forgot password')
def submit():
#submit the form to update the password.
username = usernameEntry.get()
email = emailEntry.get()
new_password = NewpasswordEntry.get()
confirm_password = confirmpasswordEntry.get()
db = mysql.connector.connect(host='localhost', user='root',
password='password', database='p_registration', charset='utf8')
cursor = db.cursor()
query = 'SELECT * FROM personaldata WHERE email = %s'
cursor.execute(query, (email,))
if cursor.fetchone() is None:
messagebox.showerror('Error', 'Incorrect email or password.')
else:
query = 'UPDATE personaldata SET passwrd = %s WHERE email = %s'
cursor.execute(query, (new_password, email))
db.commit()
db.close()
messagebox.showinfo('Success', 'Successful changes. Please login
with new password.')
windows.destroy()
import loginpg
#labels on window
heading =Label(frame, text='FORGOT PASSWORD', fg='#debcb2', bg='#690924',
font=('Garamond', 20, 'bold'))
heading.place(x=110, y=30)
#username
usernamelbl = Label(frame, text='Username:', fg='#debcb2', bg='#690924',
font=('Book Antiqua', 15, 'bold'))
usernamelbl.place(x=10, y=100)
usernameEntry=Entry(frame, width=30, borderwidth=2)
usernameEntry.place(x=250, y=100)
#email
emaillbl = Label(frame, text='Email:', fg='#debcb2', bg='#690924',
font=('Book Antiqua', 15, 'bold'))
emaillbl.place(x=10, y=150)
emailEntry=Entry(frame, width=30, borderwidth=2)
emailEntry.place(x=250, y=150)
#new password
Newpasswordlbl = Label(frame, text='New Password:', fg='#debcb2',
bg='#690924', font=('Book Antiqua', 15, 'bold'))
Newpasswordlbl.place(x=10, y=200)
NewpasswordEntry=Entry(frame, width=30, borderwidth=2)
NewpasswordEntry.place(x=250, y=200)
#confirm password
confirmPasswordlbl = Label(frame, text='Confirm New Password:',
fg='#debcb2', bg='#690924', font=('Book Antiqua', 15, 'bold'))
confirmPasswordlbl.place(x=10, y=250)
confirmpasswordEntry=Entry(frame, width=30, borderwidth=2)
confirmpasswordEntry.place(x=250, y=250)
#back button
bckbtn = Button(frame, text='<<', width=7, borderwidth=5, height=2,
bg='#debcb2', fg='#690924', cursor='hand2', border=2,command=back)
bckbtn.place(x=10, y=310)
#submit button
submit1btn = Button(frame, text='Submit', width=15, height=2,
bg='#debcb2',fg='#690924', cursor='hand2', border=2, borderwidth=5,
font=('Book Antiqua', 16, 'bold'), command=submit)
submit1btn.place(x=130, y=330)
windows.mainloop()
feedback.py
customer.py
#customer terminal
import csv
import tkinter as tk
from tkinter import filedialog as fd
from PIL import Image, ImageTk
class MainWindow:
global master
def __init__(self, master, data):
self.master = master
self.data = data
master.title("Customer window")
master.geometry("800x600")
master.configure(bg='#690924')
#login button
self.login_button = tk.Button(button_frame, text="Login",
command=self.login, font=("Book Antiqua", 18),fg='#690924',bg="#debcb2")
self.login_button.pack(side=tk.LEFT, padx=10)
#register button
self.register_button = tk.Button(button_frame, text="Register",
command=self.register, font=("Book Antiqua",
18),fg='#690924',bg="#debcb2")
self.register_button.pack(side=tk.LEFT, padx=10)
root = tk.Tk()
data = BookstoreData('Book.csv')
my_gui = MainWindow(root, data)
root.mainloop()
cdata.py
# Create connection
db = mysql.connector.connect(host="localhost", user="root",
password="password", database="p_registration", charset='utf8')
cursor = db.cursor()
cursor.execute("SELECT * FROM personaldata")
result = cursor.fetchall()
root.mainloop()
cursor.close()
db.close()
cart.py
self.checkout_button = tk.Button(self.button_frame,
text="Checkout", command=self.checkout, bg='#dbbcb2', fg='#65041d')
self.checkout_button.pack(side="left", padx=10, pady=10)
def back_window(root):
root.destroy()
import main
def load_data(self):
self.data = [] # Store the book data
total_price = 0.0 # Initialize total price
try:
with open('books.bin', 'rb') as f:
while True:
try:
item = pickle.load(f)
self.data.append(item)
total_price += item[3] #item[3] is the price
except EOFError:
break
def checkout(self):
messagebox.showinfo("Checkout", "Checkout successful!")
self.root.destroy()
import feedback
def delete_book(self ):
# Get the book ID to delete
book_id = self.delete_entry.get()
text_box.config(state=tk.NORMAL) # Temporarily
enable editing to clear text
text_box.delete(1.0, tk.END)
text_box.config(state=tk.DISABLED) # Disable editing
again
root = tk.Tk()
cart_window = CartWindow(root)
root.mainloop()
booksdata.py
selected_book_info = book_listbox.get(selected_book_index)
book_name = selected_book_info.split(" - ")[0] # Extract book name
# Get the new rating from the user
new_rating = simpledialog.askfloat("Update Rating", f"Enter new
rating for '{book_name}':", minvalue=0.0, maxvalue=5.0)
AWalktoRemember.py
import pickle
import mysql.connector
def back_to_main():
root.destroy()
import store
root = tk.Tk()
root.title("A Walk to Remember")
root.geometry("400x600") # Set the window size to 400x600 pixels
root.configure(bg='#65041d')
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
ATaleofTwoCities.py
def back_to_main():
root.destroy()
import store
root = tk.Tk()
root.title("A Tale of 2 cities")
root.geometry("400x600") # Set the window size to 400x600 pixels
root.configure(bg='#65041d')
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
back_button.pack(side=tk.TOP, padx=10)
add_to_cart_button = tk.Button(root, text="Add to Cart",
command=add_to_cart, bg='#debcb2', fg='#65041d')
add_to_cart_button.pack(side=tk.TOP, padx=50, pady=10)
root.mainloop()
AStrangerintheMirror.py
def back_to_main():
root.destroy()
import store
cursor = db.cursor()
result = cursor.fetchone()
root = tk.Tk()
root.title("A Stranger in the Mirror")
root.geometry("400x600") # Set the window size to 400x600 pixels
root.configure(bg='#65041d')
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
AnAbundanceofKatherines.py
def back_to_main():
root.destroy()
import store
# Extract the book details from the result ( gui- to display in window)
book_id = result[0]
book_name = result[1]
author = result[2]
price = result[3]
rating = result [4]
root = tk.Tk()
root.title("An abundance of katherines")
root.geometry("400x600")
root.configure(bg='#65041d') # Set the window size to 400x600 pixels
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
AllYourPerfects.py
import tkinter as tk
from tkinter import messagebox, simpledialog
import mysql.connector
selected_book_info = book_listbox.get(selected_book_index)
book_name = selected_book_info.split(" - ")[0] # Extract book name
# Get the new rating from the user
new_rating = simpledialog.askfloat("Update Rating", f"Enter new
rating for '{book_name}':", minvalue=0.0, maxvalue=5.0)
print(f"Error: {err}")
messagebox.showerror("Error", f"Failed to update rating:
{err}")
AFlightofPigeons.py
def back_to_main():
root.destroy()
import store
root = tk.Tk()
root.title("A FLIGHT OF PIGEONS BY RUSKIN BOND")
root.geometry("400x600") # Set the window size to 400x600 pixels
root.configure(bg='#65041d')
photo = ImageTk.PhotoImage(image)
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
adminlogin.py
from tkinter import *
from tkinter import messagebox
from PIL import Image, ImageTk
import mysql.connector
# Configure fonts and colors for consistency with the original design
HEADER_FONT = ("Garamond", 24, "bold")
# Login Function
def login():
if idEntry.get() == "" or passwdEntry.get() == "":
messagebox.showerror("Alert", "Please enter all fields!")
else:
# Database connection
db = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="p_registration",
charset="utf8"
)
cur = db.cursor()
query = "SELECT * FROM adminpage WHERE A_PASSWORD=%s"
cur.execute(query, (passwdEntry.get(),))
roles = cur.fetchone()
if roles is None:
messagebox.showerror("Alert", "Incorrect name or password")
else:
messagebox.showinfo("Success", "Login successful!")
idEntry.delete(0, END)
passwdEntry.delete(0, END)
window.destroy()
import adminhub
# Header
heading = Label(window, text="~ Admin Sign In ~", font=HEADER_FONT,
fg=TEXT_COLOR, bg=BACKGROUND_COLOR)
heading.pack(pady=20)
# Name
id_label = Label(frame, text="Name:", font=LABEL_FONT, fg=TEXT_COLOR,
bg=BACKGROUND_COLOR)
id_label.grid(row=0, column=0, sticky=W, pady=10)
idEntry = Entry(frame, font=LABEL_FONT, width=30)
idEntry.grid(row=0, column=1, padx=10)
# Password
passwd_label = Label(frame, text="Password:", font=LABEL_FONT,
fg=TEXT_COLOR, bg=BACKGROUND_COLOR)
passwd_label.grid(row=1, column=0, sticky=W, pady=10)
passwdEntry = Entry(frame, font=LABEL_FONT, show="*", width=30)
passwdEntry.grid(row=1, column=1, padx=10)
# Login Button
login_button = Button(window, text="LOGIN", font=BUTTON_FONT, width=20,
bg=BUTTON_COLOR, fg=BUTTON_TEXT_COLOR, command=login)
login_button.pack(pady=20)
window.mainloop()
adminhub.py
#admin terminal
import csv
import tkinter as tk
from tkinter import filedialog as fd
from PIL import Image, ImageTk
from tkinter import messagebox, scrolledtext
class BookstoreData:
def __init__(self, csv_file):
self.book_titles = []
class MainWindow:
def __init__(self, master, data):
self.master = master
self.data = data
master.title("Admin Hub")
master.geometry("800x600")
master.configure(bg='#690924')
root = tk.Tk()
data = BookstoreData('Book.csv')
my_gui = MainWindow(root, data)
root.mainloop()
ABookofSimpleLiving.py
def back_to_main():
root.destroy()
import store
root = tk.Tk()
root.title("A BOOK OF SIMPLE LIVING BY RUSKIN BOND")
root.geometry("400x600") # Set the window size to 400x600 pixels
root.configure(bg='#65041d')
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
ABendintheRoad.py
def back_to_main():
root.destroy()
import store
root = tk.Tk()
root.title("A BEND IN THE ROAD")
root.geometry("400x600") # Set the window size to 400x500 pixels
root.configure(bg='#65041d')
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
112263.py
import pickle
import mysql.connector
def back_to_main():
root.destroy()
import store
root = tk.Tk()
root.title("11/22/63 BY STEPHEN KING")
root.geometry("400x600") # Set the window size to 400x500 pixels
root.configure(bg='#65041d')
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
2States.py
def back_to_main():
root.destroy()
import store
cursor.execute(query)
result = cursor.fetchone()
root = tk.Tk()
root.title("11/22/63 BY STEPHEN KING")
root.geometry("400x600") # Set the window size to 400x500 pixels
root.configure(bg='#65041d')
def add_to_cart():
f=open('books.bin','ab')
l=[book_id,book_name,author,price,rating]
pickle.dump(l,f)
print("Book added to cart")
root.mainloop()
LOG OF PROJECT
LOG-1: 12/6/2024
Ideation
Discussion of topic - Book Store Management System
Initial planning of features and functionalities required for the system.
LOG-2: 18/6/2024
Searched for Database Structure
Explored various database designs for the system.
Decided to create three main tables: personal_data, books_details, and adminpage.
LOG-3: 22/6/2024
Learning Tkinter
Learned the basics of Tkinter for GUI design.
Tested creating basic windows and widgets.
LOG-4: 29/6/2024
Created SQL Table personal_data
LOG-5: 2/7/2024
Created SQL Table books_details
Created SQL table to store book details (book_id, title, author, price, rating).
Inserted initial data for testing.
LOG-6: 10/7/2024
Designed Admin Login Interface
Worked on the Admin login screen using Tkinter.
Integrated Admin login with adminpage table in SQL for authentication.
LOG-7: 14/7/2024
Designed User Registration and Login Interface
Worked on User registration form (storing details in personal_data table).
Implemented User login functionality using Tkinter and SQL.
LOG-8: 20/7/2024
Worked on Book Catalog Display
Created a window to display a list of books using Tkinter.
Integrated book details from books_details SQL table into the UI.
LOG-9: 25/7/2024
Search Feature Implementation
Worked on a search feature that allows users to search books by title or author.
Integrated search functionality with books_details table.
LOG-10: 30/7/2024
Worked on Admin Dashboard
LOG-11: 5/8/2024
Added Book Purchase Feature
Developed functionality for users to purchase books and add book to cart
LOG-12: 10/8/2024
Worked on Admin Book Management
Developed functionality for the Admin to update book ratings and view customer details
Implemented SQL queries for managing book data in books_details table.
LOG-13: 12/8/2024
Implemented User Profile Page
Worked on User profile page that displays personal details from personal_data table.
Added functionality for users to change their password.
LOG-14: 20/8/2024
Worked on Shopping Cart Function
Developed a shopping cart feature for users to add books and proceed to checkout.
Linked shopping cart with book data from books_details.
LOG-15: 5/9/2024
Bug Fixes and UI Refinement
Fixed issues with the checkout process.
Improved user interface for smoother navigation between features.
LOG-16: 10/9/2024
Worked on Admin User Management
Added functionality for Admin to view user accounts as well as update book ratings.
Worked with personaldata table for user management.
LOG-17: 12/9/2024
LOG-18: 18/9/2024
Improvements in UI/UX
Refined the layout and design of the user interface using Tkinter.
Enhanced color schemes and added consistent navigation between windows.
LOG-19: 20/9/2024
Bug Fixes and Optimization
Fixed minor bugs related to database connectivity.
Optimized SQL queries for faster performance and smoother user experience.
LOG-20: 25/9/2024
Completion of Project
Final testing and debugging.
Polished UI design and ensured smooth integration of all components.
LOG-21: 28/9/2024
Submission of Project
Completed documentation and final report for submission.
SAMPLE OUTPUT
Bibliography
https://www.geeksforgeeks.org
http://stackoverflow.com/
https://www.javatpoint.com
https://www.google.co.in/
https://pythonexamples.org