Skip to content

Commit 14cce31

Browse files
committed
LMS refactoring
2 parents 52a810a + 2412c92 commit 14cce31

13 files changed

+662
-1
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
__pycache__/

.vscode/settings.json

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"python.formatting.provider": "black"
3+
}

Home.py

+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
from tkinter import *
2+
from add_book import add_books
3+
from update_book import update_books
4+
from delete_book import delete_books
5+
from issue_book import issue_books
6+
from return_book import return_books
7+
from search_book import search_book
8+
9+
10+
def home():
11+
main = Tk()
12+
main.title("Library")
13+
main.geometry("600x500")
14+
main.configure(background="black")
15+
head = Label(
16+
main,
17+
text="Library Management System",
18+
bg="black",
19+
fg="white",
20+
font=("Courier", 25),
21+
)
22+
23+
def goback():
24+
for widget in search_books.winfo_children():
25+
widget.destroy()
26+
for widget in add_book.winfo_children():
27+
widget.destroy()
28+
for widget in update_book.winfo_children():
29+
widget.destroy()
30+
for widget in delete_book.winfo_children():
31+
widget.destroy()
32+
for widget in issue_book.winfo_children():
33+
widget.destroy()
34+
for widget in return_book.winfo_children():
35+
widget.destroy()
36+
home.pack(expand=1, fill=X)
37+
add_book.pack_forget()
38+
update_book.pack_forget()
39+
delete_book.pack_forget()
40+
issue_book.pack_forget()
41+
return_book.pack_forget()
42+
search_books.pack_forget()
43+
44+
Button(
45+
main, text="back", bg="black", fg="white", font=("Courier", 25), command=goback
46+
).pack(pady=12, side=TOP, anchor=NW)
47+
head.pack(pady=20)
48+
home = Frame(main)
49+
search_books = Frame(main)
50+
add_book = Frame(main)
51+
update_book = Frame(main)
52+
delete_book = Frame(main)
53+
issue_book = Frame(main)
54+
return_book = Frame(main)
55+
56+
def landing():
57+
home.configure(background="black")
58+
Button(
59+
home,
60+
text="search",
61+
command=lambda: search_book(home, search_books),
62+
bg="black",
63+
fg="white",
64+
font=("Courier", 25),
65+
).pack(pady=18)
66+
Button(
67+
home,
68+
text="add book",
69+
command=lambda: add_books(home, add_book),
70+
bg="black",
71+
fg="white",
72+
font=("Courier", 25),
73+
).pack(pady=18)
74+
Button(
75+
home,
76+
text="update book",
77+
command=lambda: update_books(home, update_book),
78+
bg="black",
79+
fg="white",
80+
font=("Courier", 25),
81+
).pack(pady=18)
82+
Button(
83+
home,
84+
text="delete book",
85+
command=lambda: delete_books(home, delete_book),
86+
bg="black",
87+
fg="white",
88+
font=("Courier", 25),
89+
).pack(pady=18)
90+
Button(
91+
home,
92+
text="issue book",
93+
command=lambda: issue_books(home, issue_book),
94+
bg="black",
95+
fg="white",
96+
font=("Courier", 25),
97+
).pack(pady=18)
98+
Button(
99+
home,
100+
text="return book",
101+
command=lambda: return_books(home, return_book),
102+
bg="black",
103+
fg="white",
104+
font=("Courier", 25),
105+
).pack(pady=18)
106+
home.pack(expand=1, fill=X)
107+
108+
landing()
109+
main.mainloop()
110+
111+
112+
home()

README.md

+28-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,28 @@
1-
# Library-Management-System
1+
# Library-Management-System
2+
3+
A Mini Library Management Web App built entirely using Python. We developed it using Tkinter for UI and pymysql for Database query management.
4+
## Features
5+
- Manage Borrower's Log
6+
- Add Book
7+
- Search Book
8+
- Update Book
9+
- Delete Book
10+
- Issue Book
11+
- Return Book
12+
13+
## Installation
14+
```bash
15+
pip3 install -r requirement.txt
16+
```
17+
After installing dependencies, execute:
18+
```bash
19+
python3 Home.py
20+
```
21+
22+
## Additional Features Suggestion
23+
- Login System
24+
- Add new category
25+
- Add book by selecting category from dropdown
26+
- Show students who haven't returned book
27+
- Show Book availability by book_id
28+

add_book.py

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from tkinter import *
2+
import pymysql
3+
from tkinter import messagebox
4+
from connect_db import connect
5+
6+
7+
def add_books(home, add_book):
8+
add_book.configure(background="black")
9+
Label(add_book, text="Add Book", bg="black", fg="white", font=("Courier", 35)).pack(
10+
pady=15
11+
)
12+
Label(add_book, text="Book Id", bg="black", fg="white", font=("Courier", 25)).pack(
13+
pady=5
14+
)
15+
id = Text(add_book, height=1, width=30, font=("Courier", 25))
16+
id.pack(pady=5)
17+
Label(add_book, text="Name", bg="black", fg="white", font=("Courier", 25)).pack(
18+
pady=5
19+
)
20+
name = Text(add_book, height=1, width=30, font=("Courier", 25))
21+
name.pack(pady=5)
22+
Label(add_book, text="Author", bg="black", fg="white", font=("Courier", 25)).pack(
23+
pady=5
24+
)
25+
author = Text(add_book, height=1, width=30, font=("Courier", 25))
26+
author.pack(pady=5)
27+
Label(add_book, text="Category", bg="black", fg="white", font=("Courier", 25)).pack(
28+
pady=5
29+
)
30+
category = Text(add_book, height=1, width=30, font=("Courier", 25))
31+
category.pack(pady=5)
32+
Label(add_book, text="Count", bg="black", fg="white", font=("Courier", 25)).pack(
33+
pady=5
34+
)
35+
count = Text(add_book, height=1, width=30, font=("Courier", 25))
36+
count.pack()
37+
Button(
38+
add_book,
39+
text="Submit",
40+
command=lambda: add_book_query(id, name, category, author, count),
41+
bg="black",
42+
fg="white",
43+
font=("Courier", 25),
44+
).pack(pady=12)
45+
add_book.pack(expand=1, fill=X)
46+
home.pack_forget()
47+
48+
49+
def add_book_query(id, name, category, author, count):
50+
book_id = id.get(1.0, "end-1c")
51+
name = name.get(1.0, "end-1c")
52+
category = category.get(1.0, "end-1c")
53+
author = author.get(1.0, "end-1c")
54+
count = count.get(1.0, "end-1c")
55+
print(book_id, name, category, author, count)
56+
insert = (
57+
"insert into Books values("
58+
+ book_id
59+
+ ",'"
60+
+ name
61+
+ "','"
62+
+ author
63+
+ "', '"
64+
+ category
65+
+ "',"
66+
+ count
67+
+ ","
68+
+ count
69+
+ ");"
70+
)
71+
72+
try:
73+
connect(insert)
74+
messagebox.showinfo("Success", "Book added successfully")
75+
except (pymysql.Error, pymysql.Warning) as e:
76+
err = str(e)
77+
messagebox.showinfo("Error", "Can't add data into Database " + err)

connect_db.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import pymysql
2+
3+
4+
def connect(query):
5+
con = pymysql.connect(host="localhost", user="root", database="LMS")
6+
cur = con.cursor()
7+
cur.execute(query)
8+
result = cur.fetchall()
9+
con.commit()
10+
return result

delete_book.py

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from tkinter import *
2+
from connect_db import connect
3+
import pymysql
4+
from tkinter import messagebox
5+
6+
7+
def delete_books(home, delete_book):
8+
delete_book.configure(background="black")
9+
Label(
10+
delete_book, text="Delete Book", bg="black", fg="white", font=("Courier", 35)
11+
).pack(pady=15)
12+
Label(
13+
delete_book, text="Enter Book Id", bg="black", fg="white", font=("Courier", 25)
14+
).pack(pady=5)
15+
id = Text(delete_book, height=1, width=30, font=("Courier", 25))
16+
id.pack(pady=5)
17+
delete_book.pack(expand=1, fill=X)
18+
Button(
19+
delete_book,
20+
text="Submit",
21+
command=lambda: delete(id),
22+
bg="black",
23+
fg="white",
24+
font=("Courier", 25),
25+
).pack(pady=12)
26+
home.pack_forget()
27+
28+
29+
def delete(id):
30+
Book_id = id.get(1.0, "end-1c")
31+
delete = f"delete from Books where book_id={Book_id}"
32+
try:
33+
connect(delete)
34+
messagebox.showinfo("Success", "Book Deleted Successfully")
35+
except (pymysql.Error, pymysql.Warning) as e:
36+
err = str(e)
37+
messagebox.showinfo("Error", "Can't delete book from Database " + err)
38+
39+
return None

issue_book.py

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
from tkinter import *
2+
3+
from tkinter import messagebox
4+
import datetime
5+
from connect_db import connect
6+
import pymysql
7+
8+
9+
def issue_books(home, issue_book):
10+
issue_book.configure(background="black")
11+
Label(
12+
issue_book, text="Issue Book", bg="black", fg="white", font=("Courier", 35)
13+
).pack(pady=15)
14+
Label(
15+
issue_book, text="Book Id", bg="black", fg="white", font=("Courier", 25)
16+
).pack(pady=5)
17+
book_id = Text(issue_book, height=1, width=30, font=("Courier", 25))
18+
book_id.pack(pady=5)
19+
Label(
20+
issue_book, text="Student Id", bg="black", fg="white", font=("Courier", 25)
21+
).pack(pady=5)
22+
Student_id = Text(issue_book, height=1, width=30, font=("Courier", 25))
23+
Student_id.pack(pady=5)
24+
issue_book.pack(expand=1, fill=X)
25+
Button(
26+
issue_book,
27+
text="Submit",
28+
command=lambda: issue(book_id, Student_id),
29+
bg="black",
30+
fg="white",
31+
font=("Courier", 25),
32+
).pack(pady=12)
33+
home.pack_forget()
34+
35+
36+
def issue(book_id, Student_id):
37+
book_id = book_id.get(1.0, "end-1c")
38+
Student_id = Student_id.get(1.0, "end-1c")
39+
try:
40+
query_avail = "select avail_count from Books where Book_id=" + book_id
41+
availability = connect(query_avail)
42+
if len(availability) == 0:
43+
messagebox.showinfo("Error", "Invalid Book ID")
44+
return None
45+
elif availability[0][0] == 0:
46+
messagebox.showinfo("Sorry", "Book is not available")
47+
return None
48+
except (pymysql.Error, pymysql.Warning) as e:
49+
print(e)
50+
today = datetime.date.today()
51+
52+
issue_date = str(today)
53+
r_d = today + datetime.timedelta(days=30)
54+
return_date = str(r_d)
55+
56+
try:
57+
query_max = "select max(issue_id) from Issue"
58+
max_issue_id = connect(query_max)
59+
60+
if max_issue_id[0][0] == None:
61+
issue_id = 1
62+
else:
63+
issue_id = max_issue_id[0][0] + 1
64+
query_issue = (
65+
"insert into Issue values("
66+
+ str(issue_id)
67+
+ ","
68+
+ Student_id
69+
+ ","
70+
+ book_id
71+
+ ",'"
72+
+ issue_date
73+
+ "','"
74+
+ return_date
75+
+ "',NULL)"
76+
)
77+
connect(query_issue)
78+
messagebox.showinfo("Success", "Issue ID = " + str(issue_id))
79+
except (pymysql.Error, pymysql.Warning) as e:
80+
messagebox.showinfo("Error", "Invalid Student_id")
81+
finally:
82+
return None

newFeatures.txt

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
add new category
2+
add book by selecting category from dropdown
3+
show students who haven't returned book
4+
show Book availability by book_id

requirement.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
tkinter==8.6
2+
pymysql==1.0.2

0 commit comments

Comments
 (0)