Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 589e359

Browse files
author
jiangyang
committed
TheStrayLibrary 是【类-图书馆系统】的升级版练习,分模块、结合了数据库、可视化、很适合用来理解类、实操数据库
1 parent d12a8af commit 589e359

File tree

9 files changed

+220
-0
lines changed

9 files changed

+220
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# StrayLibrary
2+
```
3+
Use python to create StrayLibrary.
4+
```
5+
6+
# Mybog
7+
https://www.jiangmiemie.com
8+
9+
# Usage
10+
```
11+
Configure the operating environment, and the run "StrayLibrary.py".
12+
```
13+
14+
# Game Display
15+
![img](StrayLibrary/01.png)
16+
![img](StrayLibrary/02.png)
17+
![img](StrayLibrary/03.png)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
if __name__ == '__main__':
2+
from utils import *
3+
else:
4+
from .utils import *
5+
6+
database.bulildmysql() #创建数据库
7+
gui_start() #启动程序
15.5 KB
Loading[フレーム]
57.5 KB
Loading[フレーム]
56.3 KB
Loading[フレーム]
8 KB
Binary file not shown.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from .database import database
2+
from .userthinker import gui_start
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from tkinter import *
2+
import sqlite3
3+
import os
4+
5+
class database():
6+
def addmysql(name, author, comment, state):#添加数据
7+
Desktoppath = './StrayLibrary/book.db'
8+
db = sqlite3.connect(Desktoppath)# 使用cursor()方法获取操作游标
9+
cursor = db.cursor()# SQL 插入语句
10+
sql = "INSERT INTO EMPLOYEE(name,author,comment,state)VALUES ('{}','{}','{}','{}')".format(name, author, comment, state)
11+
try:# 执行sql语句
12+
cursor.execute(sql)# 提交到数据库执行
13+
db.commit()
14+
except:# Rollback in case there is any error
15+
db.rollback()
16+
db.close()# 关闭数据库连接
17+
18+
def changemysql(state,name):#更改数据状态
19+
Desktoppath = './StrayLibrary/book.db'
20+
db = sqlite3.connect(Desktoppath)
21+
cursor = db.cursor()# 使用cursor()方法获取操作游标
22+
sql = "UPDATE EMPLOYEE SET state = '%s' where name = '%s' "%(state,name)
23+
try:
24+
cursor.execute(sql)
25+
db.commit()
26+
except:
27+
pass
28+
db.close()
29+
30+
def checkmysql():#检索数据库
31+
Desktoppath = './StrayLibrary/book.db'
32+
db = sqlite3.connect(Desktoppath)
33+
cursor = db.cursor()# 使用cursor()方法获取操作游标
34+
sql = "SELECT * FROM EMPLOYEE" # SQL 查询语句
35+
try:
36+
cursor.execute(sql)# 获取所有记录列表
37+
results = cursor.fetchall()
38+
return results
39+
except:
40+
pass
41+
db.close()
42+
43+
def bulildmysql():
44+
try:
45+
os.makedirs("./StrayLibrary") #创建一个文件夹
46+
Desktoppath = './StrayLibrary/book.db'#文件夹下创建一个数据库
47+
file=open(Desktoppath,'w')
48+
file.close()
49+
50+
db = sqlite3.connect(Desktoppath)
51+
cursor = db.cursor()# 使用cursor()方法获取操作游标
52+
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 如果数据表已经存在使用 execute() 方法删除表。
53+
sql = """CREATE TABLE EMPLOYEE (name TEXT(255),author TEXT(255),comment TEXT(255),state TEXT(255))"""
54+
cursor.execute(sql)# 创建数据表SQL语句
55+
db.close()
56+
database.addmysql('惶然录','费尔南多·佩索阿','一个迷失方向且濒于崩溃的灵魂的自我启示、一首对默默无闻、失败、智慧、困难和沉默的赞美诗。','未借出')
57+
database.addmysql('以箭为翅','简媜','调和空灵文风与禅宗境界,刻画人间之缘起缘灭。像一条柔韧的绳子,情这个字,不知勒痛多少人的心肉。','未借出')
58+
database.addmysql('心是孤独的猎手','卡森·麦卡勒斯','我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。','已借出')
59+
except:
60+
pass
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
from tkinter import *
2+
from .database import database as db
3+
'''
4+
提前安装好模块:pip install tkinter-page
5+
需要掌握的知识:Python基础、Mysql命令、os模块、tkinter模块
6+
'''
7+
class Book():
8+
def __init__(self, name, author, comment, state):
9+
self.name = name
10+
self.author = author
11+
self.comment = comment
12+
self.state = state
13+
def __str__(self):
14+
return '\n名称:《%s》 \n作者:%s \n推荐语:%s\n状态:%s \n---------' % (self.name, self.author, self.comment,self.state)
15+
16+
class StrayLibrary():
17+
books = []
18+
def __init__(self,init_window_name):
19+
self.init_window_name = init_window_name
20+
results = db.checkmysql()
21+
for row in results:
22+
name = row[0]
23+
author = row[1]
24+
comment = row[2]
25+
state = row[3]
26+
book1 = Book(name, author, comment, state)
27+
self.books.append(book1)
28+
29+
def set_init_window(self):#设置窗口
30+
self.init_window_name.title("流浪图书馆(StrayLibrary)") #窗口名
31+
self.init_window_name.geometry('450x260+10+10')
32+
self.result_data_Text = Text(self.init_window_name, width=35, height=15) #处理结果展示
33+
self.result_data_Text.grid(row=1, column=12, rowspan=7, columnspan=7)
34+
35+
self.mianbutton1 = Button(self.init_window_name, text="查询(check)", bg="DodgerBlue", width=20,command=self.show_all_book) # 调用内部方法 加()为直接调用
36+
self.mianbutton2 = Button(self.init_window_name, text="添加(add)", bg="DodgerBlue",width=20,command=self.add_book) # 调用内部方法 加()为直接调用
37+
self.mianbutton3 = Button(self.init_window_name, text="借阅(lend)", bg="DodgerBlue", width=20,command=self.lend_book) # 调用内部方法 加()为直接调用
38+
self.mianbutton4 = Button(self.init_window_name, text="归还(return)", bg="DodgerBlue",width=20,command=self.return_book) # 调用内部方法 加()为直接调用
39+
self.mianbutton1.grid(row=1, column=11)
40+
self.mianbutton2.grid(row=3, column=11)
41+
self.mianbutton3.grid(row=5, column=11)
42+
self.mianbutton4.grid(row=7, column=11)
43+
44+
#功能函数
45+
def show_all_book(self):
46+
self.result_data_Text.delete(0.0,END)
47+
for book in self.books:
48+
self.result_data_Text.insert(1.0,book)
49+
def add_book(self):
50+
top = Tk()
51+
top.title("添加(add)")
52+
top.geometry('300x120+450+10')
53+
self.L1 = Label(top, text="请输入书籍名称:")
54+
self.E1 = Entry(top, bd =5)
55+
self.L2 = Label(top, text="请输入作者名称:")
56+
self.E2 = Entry(top, bd =5)
57+
self.L3 = Label(top, text="请输入书籍推荐语:")
58+
self.E3 = Entry(top, bd =5)
59+
self.L1.place(x=0,y=0)
60+
self.L2.place(x=0,y=30)
61+
self.L3.place(x=0,y=60)
62+
self.E1.place(x=120,y=0)
63+
self.E2.place(x=120,y=30)
64+
self.E3.place(x=120,y=60)
65+
self.B = Button(top, text ="输入完毕请点击确认,无需继续输入请关闭窗口", command = self.add_booking)
66+
self.B.pack(side = BOTTOM)
67+
def add_booking(self):
68+
new_name = self.E1.get()
69+
new_author = self.E2.get()
70+
new_comment = self.E3.get()
71+
self.result_data_Text.delete(0.0,END)
72+
new_book = Book(new_name, new_author, new_comment,'未借出')
73+
self.books.append(new_book)
74+
db.addmysql(new_name, new_author, new_comment,'未借出')#写入数据库
75+
self.result_data_Text.insert(1.0,new_name+'录入成功!\n')
76+
77+
def check_book(self,name):
78+
for book in self.books:
79+
if book.name == name:
80+
return book
81+
else:
82+
return None
83+
84+
def lend_book(self):
85+
toplend = Tk()
86+
toplend.title("借阅(lend)")
87+
toplend.geometry('330x50+450+30')
88+
self.lendE1 = Entry(toplend, bd =5)
89+
self.lendE1 .pack(side = RIGHT)
90+
self.lendB1 = Button(toplend, text ="输入书名,输入完毕请点击", command = self.lend_booking)
91+
self.lendB1.pack(side = LEFT)
92+
93+
def lend_booking(self):
94+
name = self.lendE1.get()
95+
res = self.check_book(name)
96+
self.result_data_Text.delete(0.0,END)
97+
if res != None:
98+
if res.state == '已借出':
99+
self.result_data_Text.insert(1.0,'你来晚了一步,这本书已经被借走了噢')
100+
else:
101+
res.state = '已借出'
102+
db.changemysql('已借出',res.name)
103+
self.result_data_Text.insert(1.0,'借阅成功,借了不看会变胖噢〜')
104+
else:
105+
self.result_data_Text.insert(1.0,'这本书暂时没有收录在系统里呢')
106+
107+
def return_book(self):
108+
topreturn = Tk()
109+
topreturn.title("归还(return)")
110+
topreturn.geometry('330x50+450+30')
111+
self.returnE1 = Entry(topreturn, bd =5)
112+
self.returnE1 .pack(side = RIGHT)
113+
self.returnB1 = Button(topreturn, text ="输入书名,完毕请点击", command = self.return_booking)
114+
self.returnB1.pack(side = LEFT)
115+
116+
def return_booking(self):
117+
name = self.returnE1.get()
118+
res = self.check_book(name)# 调用check_book方法,将返回值赋值给变量res
119+
self.result_data_Text.delete(0.0,END)
120+
if res == None:# 如果返回的是空值,即这本书的书名不在系统里
121+
self.result_data_Text.insert(1.0,'没有这本书噢,你恐怕输错了书名〜')
122+
else:# 如果返回的是实例对象
123+
if res.state =='未借出':# 如果实例属性state等于0,即这本书的借阅状态为'未借出'
124+
self.result_data_Text.insert(1.0,'这本书没有被借走,在等待有缘人的垂青呢!')
125+
else: # 如果实例属性state等于1,即状态为'已借出'
126+
self.result_data_Text.insert(1.0,'归还成功!')
127+
res.state ='未借出'# 归还后书籍借阅状态为0,重置为'未借出'
128+
db.changemysql('未借出',res.name)
129+
130+
def gui_start():
131+
init_window = Tk() #实例化出一个父窗口
132+
ZMJ_PORTAL = StrayLibrary(init_window) # 设置根窗口默认属性
133+
ZMJ_PORTAL.set_init_window()
134+
init_window.mainloop() #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /