本文实例为大家分享了python实现图书管理系统的具体代码,供大家参考,具体内容如下
题目:写一个简单的图书借阅系统
学校二手书是个大市场,A老师决定涉足这个领域,她需要写一个图书管理系统帮她管理书籍的借阅情况,她希望这个程序可以做到:
1. 查询书籍:可以一键查询系统里所有书籍的信息和借阅情况
2. 添加书籍:往系统添加书籍时,需要输入书籍的基本信息(书名,作者,推荐理由)
3. 借阅书籍:当书籍的状态是“未借出”的时候,书籍才可以借,借出以后的书籍状态为“已借出”
4. 归还书籍:归还成功后书籍的状态会更改成“未借出”,下一个同学可以再借了。
既然已经学习了类和对象,所以不用考虑其他编程模式。
类的两种用法:1. 类作为实例对象的模板 2. 类作为函数包。第一种用法是使用类生成实例对象。类作为实例对象的模版,每个实例创建后,都将拥有类的所有属性和方法。第二种用法是用类将多个函数(方法)打包封装在一起,让类中的方法相互配合。
该项目中,处理的对象是每本具体的书籍,每本书都有自己的属性信息,由此,可以定义一个Book类,利用Book类创建一个个书的实例,绑定属性(第一种用法)
而对于而这个管理系统的运行主体,是多个可供选择的功能的叠加,所以我们可以创建一个系统运行类BookManager,将查询书籍、添加书籍等功能封装成类中的方法以供调用(第二种用法)
课堂上,我们已编写了基本功能,见附件1BookRent.py
------------------------------------------
对程序进行改造升级:
1. 图书信息从CSV文件获取(附件2),注意在借阅和归还时修改图书的状态
2. 考虑对书籍进行分类:继承Book类,创建一些子类,例如,FictionBook,改造其初始化方法,增加参数type=‘玄幻类’
3. 实现模糊查询:例如,让用户输入作者名,就能打印出系统里该作者所有书籍的相关信息;输入玄幻类,打印出所有这类书籍的相关信息
CSV表格部分如下:
代码:
# coding = utf-8 import csv from itertools import islice import pandas as pd import os class Book: def __init__(self, name, author, recommendation, type, status=0): # 对实例属性进行初始化 self.name = name self.author = author self.recommendation = recommendation self.status = status self.type = type def __str__(self): if self.status == 1: status = "已借出" else: status = "未借出" return "名称:《%s》作者:%s 推荐语:%s 类别: %s 状态:%s " % (self.name, self.author, self.recommendation, self.type, status) class FictionBook(Book): def __init__(self, type="奇幻"): self.type = type class NovelBook(Book): def __init__(self, type="小说"): self.type = type class JottingsBook(Book): def __init__(self, type="随笔"): self.type = type class BookManager: books = [] def __init__(self): f = open("BookInfos.csv", "r") readers = csv.reader(f) for row in islice(readers, 1, None): self.books.append(Book(row[0], row[1], row[2], row[3], row[4])) f.close() def menu(self): # 显示选择菜单,根据不同菜单的选项调用不同的方法 print("欢迎使用大数据团队图书节约系统,每本书都是好书,希望钟老师的市场越来越好。\n") while True: print(" 1.查询书籍\n 2.添加书籍\n 3.借阅书籍\n 4.归还书籍\n 5.退出系统\n") choice = int(input("请输入数字选项对应的功能,例如:1(指....)")) if choice == 1: self.show_all_book() elif choice == 2: self.add_book() elif choice == 3: self.lend_book() elif choice == 4: self.return_book() elif choice == 5: print("感谢使用!欢迎下次再来!") break def show_all_book(self): # 显示书籍信息 print("1.查询作者相关书籍\n2.查询类别相关书籍\n3.查询所有书籍") ch = eval(input("请输入你的选择:例如:1(指....)")) if ch == 1: author = input("请输入作者名字:") for book in self.books: if book.author == author: print("") print(book) elif ch == 2: type = input("请输入书籍类别:") for book in self.books: if book.type == type: print("") print(book) elif ch == 3: for book in self.books: print("") print(book) else: print("您的输入有误噢!") def add_book(self): # 添加书籍 new_name = input("请输入书籍的名字:") new_author = input("请输入书籍的作者:") new_comment = input("请输入书籍的推荐语:") new_type = input("请输入书籍的类别:") new_book = [new_name, new_author, new_comment, new_type, 0] # 写入CSV文件 f = open("BookInfos.csv", "a+") writer = csv.writer(f) writer.writerow(new_book) f.close() # 改变books[] self.books.append(Book(new_book[0], new_book[1], new_book[2], new_book[3], new_book[4])) print("书籍录入成功!\n") def check_book(self, name): # 检查是否存在该书籍 for book in self.books: if book.name == name: return book else: return -1 def lend_book(self): # 借阅书籍 name = input("请输入你想借阅的书籍名字:") res = self.check_book(name) if res != -1: if res.status == 1: print("你来晚了,这本书已经被借走了") else: print("借阅成功!借了不看会变胖~~~") res.status = 1 manager.change_status(name) else: print("这本书暂时没有在系统里!") def return_book(self): # 归还书籍 name = input("请输入归还书籍的名字:") res = self.check_book(name) if res == -1: print("没有这本书,你恐怕输错书名了~") else: if res.status == 0: print("这本书没有被借走!") else: print("归还成功") res.status = 0 manager.change_status(name) # 这里我做实验时有些些问题,去掉manager.会出现 name is not defined 学艺不精,还不够了解python,见谅 @staticmethod def change_status(name): # 修改CSV文件中借还书籍的状态 in_file = open("BookInfos.csv", "r") reader = csv.reader(in_file) out_file = open("BookInfos1.csv", "w", newline="") writer = csv.writer(out_file) for row in reader: if row[0] == name: if row[4] == "0": row[4] = "1" else: row[4] = "0" writer.writerow(row) in_file.close() out_file.close() os.remove("BookInfos.csv") # 删除原文件 os.rename("BookInfos1.csv", "BookInfos.csv") # 重命名写入文件,此法不可取,但是我暂时找不到好的方法了 print("已修改CSV文件") # 这里我做实验时也有些些问题。1.不会修改特定单元格,2.选择了修改后替换原文件的方法,此法若真实用于大型文件管理,会导致效率大幅度降低,不可取,见谅 manager = BookManager() manager.menu()
此次实验前前后后断断续续做了5天左右,主要还是对python的CSV模块不太熟悉,建议大家好好学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
上一篇:python实现简易图书管理系统
下一篇:python实现图书馆借阅系统
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?