天数:第十二天
时间:2023年12月26日
内容:
综合训练:图书管理系统(结合文件读取,json数据库调取,字典,列表,自定义函数)
题目是网上找的,代码自己打,自己测试的,真的进步很大!!!
关键只用了11天时间,感动死了~
(你们不懂得都能在下面评论,帮助一个人,我就可以巩固一部分)
好了,进入正题!!!!
---------------------------------------------------------------------------------------------------------------------------------
题目:宝安小学图书馆开馆了,准备开发一个图书管理系统。
用json模拟数据库的方式完成下列业务:
a.用户登录;login()
b.显示图书列表;showAllBooks()
c.图书上架;addBook() 增加图书信息
d.图书下架;delBook() 删除增加图书信息
e.借书;borrowBook()判断借出状态是不是可借,如果是,就更改为已借出
f.还书;returnBook()
提醒:
- 使用json数据保存用户数据(包含用户名,密码,姓名);
- 使用json数据保存图书数据(包含编号,书名,作者,借出状态state); 可借---已借出
- 编写用户各个业务函数,在main函数中将所有函数串联起来;
---------------------------------------------------------------------------------------------------------------------------------
代码:
import json
# {"编号": 1001, "书名": "<红楼梦>", "作者": "曹雪芹", "借出状态": "借出"}
# {"用户名": "admin", "密码": "123", "姓名": "张三"}
# step1:使用json数据保存图书数据(包含编号,书名,作者,状态(可借借出));
# bookData = {"编号":"001","书名":"红楼梦","作者":"曹雪芹","状态":"已借"},
{"编号":"002","书名":"工程营地水处理模块设计","作者":"中国水利水电出版社","状态":"可借"},
{"编号":"003","书名":"电能质量","作者":"中国水利水电出版社","状态":"可借"}
jsonData = json.dumps(bookData,ensure_ascii=False)
with open(r"C:\Users\gw\OneDrive\桌面\python\books.txt","w") as f1:
f1.write(jsonData)
# step2:使用json数据保存用户数据(包含用户名,密码,姓名);
# userData = {"用户名": "zhangsan", "密码": "123", "姓名": "张三"},
{"用户名": "lisi", "密码": "123", "姓名": "张三"}
jsonData = json.dumps(userData,ensure_ascii=False)
with open(r"C:\Users\gw\OneDrive\桌面\python\users.txt","w") as f2:
f2.write(jsonData)
def readInformation(userList, bookList):
if userList is not False and bookList is False:
with open(r"C:\Users\gw\OneDrive\桌面\python\users.txt", "r") as f1:
users = f1.read()
userList = json.loads(users)
return userList
if userList is False and bookList is not False:
with open(r"C:\Users\gw\OneDrive\桌面\python\books.txt", "r") as f1:
books = f1.read()
bookList = json.loads(books)
return bookList
def writeInformation(booluserList, boolbookList, context):
if booluserList is not False and boolbookList is False:
jsonData = json.dumps(context, ensure_ascii=False)
with open(r"C:\Users\gw\OneDrive\桌面\python\users.txt", "w") as f1:
f1.write(jsonData)
if booluserList is False and boolbookList is not False:
jsonData = json.dumps(context, ensure_ascii=False)
with open(r"C:\Users\gw\OneDrive\桌面\python\books.txt", "w") as f1:
f1.write(jsonData)
def showAllBooks():
# 从数据库中,读取用户信息
bookList = readInformation(False, True)
# 列出书单
for s in bookList:
print(s, '\n')
# 项目选择
# 3.图书上架;addBook() 增加图书信息
# 4.图书下架;delBook() 删除增加图书信息
# 5.借书;lendBook()判断借出状态是不是可借,如果是,就更改为已借出
# 6.还书;returnBook()
val = int(input("进行操作: 1.图书上架 2.图书下架 3.借书 4.还书 "))
if val == 1:
# 3.图书上架;addBook() 增加图书信息
addBook()
bookList = readInformation(False, True)
for s in bookList:
print(s, '\n')
return
if val == 2:
# 4.图书下架;delBook() 删除增加图书信息
bookList = readInformation(False, True)
for s in bookList:
print(s, '\n')
delBook()
bookList = readInformation(False, True)
for s in bookList:
print(s, '\n')
return
if val == 3:
# 5.借书;borrowBook()判断借出状态是不是可借,如果是,就更改为已借
borrowBook()
if val == 4:
# 6.还书;returnBook()
returnBook()
# 3.图书上架;addBook() 增加图书信息
def addBook():
bookList = readInformation(False, True)
number = len(bookList)
name = input("书名")
authorName = input("作者")
status = "可借"
if number < 9:
newBook = {"编号": "00" + str(number + 1), "书名": name, "作者": authorName, "状态": status}
print(newBook)
bookList.append(newBook)
writeInformation(False, True, bookList)
elif 9 <= number < 99:
newBook = {"编号": "0" + str(number + 1), "书名": name, "作者": authorName, "状态": status}
bookList.append(newBook)
writeInformation(False, True, bookList)
elif 99 <= number < 999:
newBook = {"编号": str(number + 1), "书名": name, "作者": authorName, "状态": status}
bookList.append(newBook)
writeInformation(False, True, bookList)
def delBook():
number = str(input("输入编号,即可删除. 如001,011,111 "))
bookList = readInformation(False, True)
for s in bookList:
if s["编号"] == number:
bookList.remove(s) # json转出来的是一个列表,列表里面套很多字典 想要删除包含很多内容的字典,就直接删,把他当成一个列表即可
writeInformation(False, True, bookList)
return
print("删除失败!没有此编号")
def borrowBook():
name = str(input("输入书名,查询是否可借"))
bookList = readInformation(False, True)
for s in bookList:
if s["书名"] == name and s["状态"] == "已借":
print("此书已借出,借出失败!!!")
return
elif s["书名"] == name and s["状态"] == "可借":
print("此书可借,并且成功借出!!!")
s["状态"] = "已借"
writeInformation(False, True, bookList)
return
print("输入错误,请重新输入!!!")
def returnBook():
name = input("输入书名,完成还书操作")
bookList = readInformation(False, True)
for s in bookList:
if s["书名"] == name and s["状态"] == "已借":
print("此书已还成功!!!")
s["状态"] = "可借"
writeInformation(False, True, bookList)
return
def login():
# 从数据库中,读取用户信息
userList = readInformation(True, False)
print(userList)
name = input("用户名")
pwd = input("密码")
for s in userList:
if s["用户名"] == name and s["密码"] == pwd:
print("成功登录")
showAllBooks()
return
print("登录失败!!! 请重新输入")
break
if __name__ == '__main__':
login()
这是users.txt 数据库:
[ {"用户名": "zhangsan", "密码": "123", "姓名": "张三"}, {"用户名": "lisi", "密码": "123", "姓名": "张三"} ]
这是books.txt 数据库:
[ {"编号": "001", "书名": "红楼梦", "作者": "曹雪芹", "状态": "已借"}, {"编号": "002", "书名": "工程营地水处理模块设计", "作者": "中国水利水电出版社", "状态": "已借"}, {"编号": "003", "书名": "电能质量", "作者": "中国水利水电出版社", "状态": "可借"}, {"编号": "004", "书名": "老舍", "作者": "老舍", "状态": "可借"} ]