课程设计的主要内容
1. 录入功能:
可以录入每种图书的基本信息。基本信息包括ISBN、书名、作者、出版社、出版年月、库存量。
2. 查询功能:
可以根据书名或者作者,查询某种图书的所有信息。
3. 出库功能:
可以根据ISBN对某种图书进行出库操作。根据系统提示输入该图书的出库数量:
- 如果出库数量 < 库存量,更新库存量。
- 如果出库数量 = 库存量,删除该图书的信息。
- 如果出库数量 > 库存量,出库失败。
4. 入库功能:
可以根据ISBN对某种图书进行入库操作。
- 如果入库的图书已经存在,只需要输入入库数量,然后更新该图书的库存量。
- 如果入库的图书之前并不存在,需要输入该图书的所有信息。
5. 删除功能:
可以根据ISBN删除某种图书的信息。
6. 显示功能:
能输出显示所有图书的信息。
相关代码
library.json
用于模拟数据库,存放书本信息(json格式)
[{"name": "\u7406\u60f3\u56fd", "author": "\u67cf\u62c9\u56fe", "ISBN": "9787222187436", "press": "\u4e91\u5357\u4eba\u6c11", "pbDate": "2021", "stock": 28}, {"name": "JavaScript\u8bbe\u8ba1\u6a21\u5f0f", "author": "\u5f20\u5bb9\u94ed", "ISBN": "9787115396860", "press": "\u4eba\u6c11\u90ae\u7535", "pbDate": "2019", "stock": 78}, {"name": "\u6df1\u5165\u6d45\u51faReact Native", "author": "\u9648\u9646\u626c", "ISBN": "9787115572424", "press": "\u4eba\u6c11\u90ae\u7535", "pbDate": "2021", "stock": 34}]
library.py
主文件
import json
# 图书类
class Book(object):
def __init__(self, name, author, ISBN, press, pbDate, stock):
self.name = name
self.author = author
self.ISBN = ISBN
self.press = press
self.pbDate = pbDate
self.stock = stock
def __str__(self):
return f'书名 : {self.name} 作者 : {self.author} ISBN : {self.ISBN} 出版社 : {self.press} 出版年月 : {self.pbDate} 库存量 : {self.stock}'
# 图书馆
f = open("library.json", "r")
text = f.read()
if len(text) == 0:
library = []
else:
libraryJSON = json.loads(text)
library = [Book(i["name"], i["author"], i["ISBN"], i["press"], i["pbDate"], i["stock"]) for i in libraryJSON]
f.close()
# 管理系统类
class ManagementSystem(object):
# 显示
def showAll(self):
for i in library:
print(i)
# 录入
def typeIn(self):
ISBN = input("请输入书的ISBN : ")
if ISBN in [i.ISBN for i in library]:
print("该书目已经录入过了,如果需要进行入库操作请按4")
return
name = input("请输入书的名字 : ")
author = input("请输入书的作者 : ")
press = input("请输入书的出版社 : ")
pbDate = input("请输入书的出版年月 : ")
stock = int(input("请输入书的库存量 : "))
library.append(Book(name, author, ISBN, press, pbDate, stock))
# 查询
def search(self):
name = input("请输入书的名字 : ")
bookList = []
for i in library:
if name == i.name:
print(i)
bookList.append(i)
if len(bookList) == 0:
print("未录入该图书")
# 入库
def push(self):
ISBN = input("请输入书的ISBN : ")
if ISBN in [i.ISBN for i in library]:
for i in library:
if i.ISBN == ISBN:
stock = int(input("请输入入库数量 : "))
i.stock += stock
print("入库成功")
else:
name = input("请输入书的名字 : ")
author = input("请输入书的作者 : ")
press = input("请输入书的出版社 : ")
pbDate = input("请输入书的出版年月 : ")
stock = int(input("请输入书的库存量 : "))
library.append(Book(name, author, ISBN, press, pbDate, stock))
print("入库成功")
# 出库
def pop(self):
ISBN = input("请输入书的ISBN : ")
if ISBN in [i.ISBN for i in library]:
for i in library:
if i.ISBN == ISBN:
num = int(input("请输入要出库的数量 : "))
if num == i.stock:
del library[library.index(i)]
print("出库成功")
elif num < i.stock:
i.stock -= num
print("出库成功")
else:
print("出库失败")
else:
print("无法出库未录入的书目")
# 删除
def remove(self):
ISBN = input("请输入书的ISBN : ")
if ISBN in [i.ISBN for i in library]:
for i in library:
if i.ISBN == ISBN:
del library[library.index(i)]
print("删除成功")
else:
print("无法删除未录入的书目")
# 异常
def error(self):
print("请输入正确的操作序号")
ms = ManagementSystem()
# 定义不同的功能,代替switch...case...
def operationSheet(x):
return {
"1": "ms.showAll",
"2": "ms.typeIn",
"3": "ms.search",
"4": "ms.push",
"5": "ms.pop",
"6": "ms.remove",
"7": "ms.exit"
}.get(x, "ms.error")
while True:
print('''操作序号对应表
###########
# 1 : 显示 #
# 2 : 录入 #
# 3 : 查询 #
# 4 : 入库 #
# 5 : 出库 #
# 6 : 删除 #
# 7 : 退出 #
###########''')
operation = input("请输入操作序号:")
if operation == "7":
bookList = []
for i in library:
book = {
"name": i.name,
"author": i.author,
"ISBN": i.ISBN,
"press": i.press,
"pbDate": i.pbDate,
"stock": i.stock
}
bookList.append(book)
f = open("library.json", "w")
f.write(json.dumps(bookList))
f.close()
break
eval(operationSheet(operation))()