ライブラリ管理システム-機能機能
関数を使用してコード構造を明確にし、実際のコードで複数回使用できます。プログラムはよりコンパクトで整理されています。
パスワードの検証:
user_info=[]
user_info=multpasswordbox(msg='请输入登录信息',title='Login',fields=('用户名','密码'))
name=user_info[0]
password=user_info[1]
ここで、multpasswordboxの戻り値のデータ型はリストです。
def login(lista):
user_info=[]
user_info=multpasswordbox(msg='请输入登录信息',title='Login',fields=('用户名','密码'))
name=user_info[0]
password=user_info[1]
if name in lista.keys() :
targp=lista[name]
if targp==password:
return (1)
else:
login(lista)
else:
msgbox("该用户不存在或账户错误,请重新输入")
login(lista)
def operate(op_choice):
if op_choice=='查看借书书单':
display_book()
elif op_choice =='添加书籍':
append_book()
elif op_choice =='删除书籍':
delete_book()
elif op_choice =='借书':
borrow_book()
elif op_choice =='还书':
return_book()
elif op_choice =='输入id查书':
search_book()
elif op_choice =='查看书单':
all_book()
if-elseと同等で、複数のifでも同じ効果を得ることができます。
この部分は、後続の関数実行のために、いわゆる「ブロードキャスト」処理を効果的に実行できます。
def borrow_book():
borrow_msg=[]
borrow_msg = multenterbox("借书", "图书借阅系统", ["书名", "id", "作者"])
br=0
for i in range(1,ws.max_row):
if ws.cell(row=i,column=1).value==borrow_msg[0] or ws.cell(row=i,column=2).value==borrow_msg[1]:
print("书单有该书籍")
wbw.append(borrow_msg)
ws.delete_rows(i)
br=1
wb.save('books.xlsx')
return
if br==0:
print("图书馆无该书")
wb.save('books.xlsx')
return
def return_book():
re=0
borrow_msg = multenterbox("还书", "图书借阅系统", ["书名","id", "作者"])
for i in range(1,wbw.max_row):
if wbw.cell(row=i,column=1).value==borrow_msg[0]:
print("书单有该书籍")
ws.append(borrow_msg)
wbw.delete_rows(i)
re=1
wb.save('books.xlsx')
return
if re==0:
print("改书未在借书单内")
wb.save('books.xlsx')
return
这两个部分操作是一样的,只不过一个是对sheet1进行了添加,而对另外一个删减。所谓借还就是对不同的sheet页进行特定的操作不同而已。
def all_book():
print(ws["A"])
for cell in ws["A"]:
print(cell.value)
return
def display_book():
for cell in wbw["A"]:
print(cell.value)
return
これらの2つの部分は、セルの出力読み取り操作です。
def delete_book():
colunms=[]
for col in ws["A"]:
colunms.append(col.value)
while True:
de_book=choicebox(msg='请选择要删除的书',title='图书管理系统',choices=colunms)
if de_book in colunms:
ws.delete_rows(de_book.rows)
print("删除成功")
break
else:
print("删除失败")
continue
def append_book():
append_msg=[]
append_msg=multenterbox("添加新书","图书管理系统",["书名","id","作者"])
ws.append(append_msg) # 也可以使用遍历rows,同时把遍历的内容添加到表格里,这样就实现了多行写入。
wb.save('books.xlsx')
return
ブックの削除と追加は、2つで使用される機能が異なることを除いてほぼ同じであり、本質はテーブルを処理することです。
def search_book():
search_msg=enterbox("输入需找书的id","图书借阅系统",)
for i in range(1,ws.max_row):
if ws.cell(row=i,column=2).value==search_msg:
print("书为",ws.cell(row=i,column=3).value,"作品",ws.cell(row=i,column=1).value)
return
この部分では、関数operate()を再利用して、関数の使用率の増加による魔法の効果を反映します。ローカル変数とグローバル変数の使用を含む、複数の関数のネストと関数の再帰があります。
def choice(cchoices):
if(cchoices == '管理员'):
login(admsg)
while 1:
c=choicebox(msg='请选择下列操作', title='管理员系统', choices=['查看借书书单', '添加书籍', '删除书籍','退出'])
if c !='退出':
operate(c)
else:
msgbox("欢迎下次使用")
break
elif (cchoices == '普通用户'):
login(usermsg)
while 1:
c=choicebox(msg='请选择下列操作', title='学生操作系统', choices=['借书', '还书','输入id查书','查看书单', '退出'])
if c !='退出':
operate(c)
else:
msgbox("欢迎下次使用")
break
else:
return 0
if __name__ == "__main__":
while 1:
cchoices = buttonbox(msg='选择登陆方式', title='Library', choices=('普通用户', '管理员'))
if cchoices is None:
break
else:
choice(cchoices)
補足:
if name == ' main 'の意味:.pyファイルが直接実行されると、if name == ' main 'の下のコードブロックが実行されます; .pyファイルがモジュールとしてインポートされると、if name = = 「main」の下のコードブロックは実行されません。
完全なコード:
# 图书管理系统
from easygui import *
from openpyxl import *
admsg = {'李元': '111', '王二': '222', '张三': '333'}
usermsg = {'小芳': '444', '婷婷': '555', '小辉': '666'}
cchoices = 0
wb = load_workbook(r"E:\library\books.xlsx")
print(wb.sheetnames)
ws = wb['Sheet1']
wbw = wb['bbook_sheet']
def login(lista):
user_info = []
user_info = multpasswordbox(msg='请输入登录信息', title='Login', fields=('用户名', '密码'))
name = user_info[0]
password = user_info[1]
if name in lista.keys():
targp = lista[name]
if targp == password:
return (1)
else:
login(lista)
else:
msgbox("该用户不存在或账户错误,请重新输入")
login(lista)
def display_book():
for cell in wbw["A"]:
print(cell.value)
return
def append_book():
append_msg = []
append_msg = multenterbox("添加新书", "图书管理系统", ["书名", "id", "作者"])
ws.append(append_msg) # 也可以使用遍历rows,同时把遍历的内容添加到表格里,这样就实现了多行写入。
wb.save('books.xlsx')
return
def delete_book():
colunms = []
for col in ws["A"]:
colunms.append(col.value)
while True:
de_book = choicebox(msg='请选择要删除的书', title='图书管理系统', choices=colunms)
if de_book in colunms:
ws.delete_rows(de_book.rows)
print("删除成功")
break
else:
print("删除失败")
continue
def borrow_book():
borrow_msg = []
borrow_msg = multenterbox("借书", "图书借阅系统", ["书名", "id", "作者"])
br = 0
for i in range(1, ws.max_row):
if ws.cell(row=i, column=1).value == borrow_msg[0] or ws.cell(row=i, column=2).value == borrow_msg[1]:
print("书单有该书籍")
wbw.append(borrow_msg)
ws.delete_rows(i)
br = 1
wb.save('books.xlsx')
return
if br == 0:
print("图书馆无该书")
wb.save('books.xlsx')
return
def return_book():
re = 0
borrow_msg = multenterbox("还书", "图书借阅系统", ["书名", "id", "作者"])
for i in range(1, wbw.max_row):
if wbw.cell(row=i, column=1).value == borrow_msg[0]:
print("书单有该书籍")
ws.append(borrow_msg)
wbw.delete_rows(i)
re = 1
wb.save('books.xlsx')
return
if re == 0:
print("改书未在借书单内")
wb.save('books.xlsx')
return
def search_book():
search_msg = enterbox("输入需找书的id", "图书借阅系统", )
for i in range(1, ws.max_row):
if ws.cell(row=i, column=2).value == search_msg:
print("书为", ws.cell(row=i, column=3).value, "作品", ws.cell(row=i, column=1).value)
return
def all_book():
print(ws["A"])
for cell in ws["A"]:
print(cell.value)
return
wb.save('books.xlsx')
def operate(op_choice):
if op_choice == '查看借书书单':
display_book()
elif op_choice == '添加书籍':
append_book()
elif op_choice == '删除书籍':
delete_book()
elif op_choice == '借书':
borrow_book()
elif op_choice == '还书':
return_book()
elif op_choice == '输入id查书':
search_book()
elif op_choice == '查看书单':
all_book()
def choice(cchoices):
if (cchoices == '管理员'):
login(admsg)
while 1:
c = choicebox(msg='请选择下列操作', title='管理员系统', choices=['查看借书书单', '添加书籍', '删除书籍', '退出'])
if c != '退出':
operate(c)
else:
msgbox("欢迎下次使用")
break
elif (cchoices == '普通用户'):
login(usermsg)
while 1:
c = choicebox(msg='请选择下列操作', title='学生操作系统', choices=['借书', '还书', '输入id查书', '查看书单', '退出'])
if c != '退出':
operate(c)
else:
msgbox("欢迎下次使用")
break
else:
return 0
if __name__ == "__main__":
msgbox('欢迎进入图书管理系统', 'Library')
while 1:
cchoices = buttonbox(msg='选择登陆方式', title='Library', choices=('普通用户', '管理员'))
if cchoices is None:
break
else:
choice(cchoices)
今日はそれについて話しましょう。ご不明な点がございましたら、お気軽にメッセージを残してください。!!