题目:写一个简单的图书借阅系统‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

学校二手书是个大市场,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 osclass Book:def __init__(self, name, author, recommendation, type, status=0):  # 对实例属性进行初始化self.name = nameself.author = authorself.recommendation = recommendationself.status = statusself.type = typedef __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 = typeclass NovelBook(Book):def __init__(self, type='小说'):self.type = typeclass JottingsBook(Book):def __init__(self, type='随笔'):self.type = typeclass 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('感谢使用!欢迎下次再来!')breakdef 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 bookelse:return -1def lend_book(self):  # 借阅书籍name = input('请输入你想借阅的书籍名字:')res = self.check_book(name)if res != -1:if res.status == 1:print('你来晚了,这本书已经被借走了')else:print('借阅成功!借了不看会变胖~~~')res.status = 1manager.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 = 0manager.change_status(name)# 这里我做实验时有些些问题,去掉manager.会出现 name is not defined 学艺不精,还不够了解python,见谅@staticmethoddef 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 图书管理系统书写相关推荐

  1. 一个简单的基于python图书管理系统

    一个简单的基于python图书管理系统 开发平台:pycharm 开发语言:python 数据库:mysql 登录界面 主界面 数据库文件 想要的联系丘丘:793064854.2R带走

  2. python毕业设计开题报告-基于Python图书管理系统开题报告

    选题的背景.意义及研究现状: 研究背景及意义: 随着我国的教育产业的快速发展,各个学校的学生数量越来越多,在这种情况下的图书馆书籍管理和查询,以及读者的管理变得非常困难,使用计算机软件的图书管理系统来 ...

  3. python+图书管理系统

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.代码展示 总结 前言 运用Python编程语言,实现图书管藏书(书号.书名.出版社.作者.价格以及库存).学生信息 ...

  4. Python图书管理系统(一)

    最近在写一个项目--图书管理系统 在完成这个项目的道路上我写了2个基础的图书管理系统. ①用IO完成数据存储的图书管理系统 ②用MySQL完成数据存储的图书管理系统    今天先来更新第一个用IO操作 ...

  5. Python图书管理系统(二)

    文章目录 前言 PyMySQL 安装 PyMySQL 使用 数据库方面的准备 图书管理系统代码          前言    上次写了用IO完成数据存储的图书管理系统, 这次更新一个用MySQL完成数 ...

  6. Python图书管理系统(课设)

    基于python的tkinter,将图书管理系统的界面进行简单的开发,我在这里使用的方法比较简单理解,但是代码过于繁多.添加.删除及修改并未使用数据库,而是使用了csv文件的读取操作,从而替代数据库. ...

  7. python图书管理系统

    以下三个文件需在同一目录下.json文件格式不能更改 books-fxm.json [{"name": "图书管理","author": & ...

  8. python图书管理系统增删改查_图书管理系统---增删改查

    此代码只考虑正确情况,未判断错误情况 package dboperate; import java.util.Scanner; import model.BookDB; import dboperat ...

  9. Python图书管理系统(终章)

    文章目录 前言 总的项目布局 效果展示 全部代码 总结          前言    上次写了用MySQL完成数据存储的图书管理系统, 这次我将把各个模块划分为系统的各个功能,通过flask框架与前端 ...

最新文章

  1. 清晰易懂的Focal Loss原理解释
  2. 路由网关--spring cloud zuul
  3. TensorFlow的基本运算01-01
  4. 【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )
  5. CentOS配置启动ssh与开机自启
  6. 【转帖】.Net中C#的DllImport的用法
  7. wait(),notify(),notifyAll()进行了详细的分析介绍
  8. java jpeg压缩解码_图片压缩(iOS)
  9. abaqus质量缩放系数取值_ABAQUS/Explicit质量缩放(MASS SCALING)使用心得  [转simwe]...
  10. 【每日一题】4月7日题目精讲 树
  11. 项目成功的关键是在投资最少的时候找出错误
  12. jdbc 连接 mysql 时的中文乱码问题
  13. iphone4 通讯录数据库文件!
  14. 学习SEO排行榜网站的SEO手法优化网站
  15. 数据结构——二叉链表
  16. 【PHP代码审计】RIPS代码审计工具
  17. 图片调整大小后变得不清晰了怎么办?
  18. sql 恢复刚删除的表
  19. python qq空间留言批量删除_易语言实现QQ空间留言批量删除的代码
  20. java助教的工作内容_2017-2018-2 165X 『Java程序设计』课程 助教总结

热门文章

  1. CentOS 查看主机地址
  2. 零基础学UI设计,学费要多少?
  3. 我的0.114基础QML+Felgo(V-Play)学习(3) (近日解决的问题
  4. 浙大版《C语言程序设计实验与习题指导(第4版)》题目集 实验2-3-8 计算火车运行时间
  5. 可编程渲染管线(Scriptable Render Pipeline, SRP)
  6. 零时科技 | Discover 闪电贷攻击事件分析
  7. 2021年广东工业大学第11届腾讯杯新生程序设计竞赛(同步赛)A 比比谁更大
  8. mysql中如何设置主键一直从0开始_怎么让mysql的id从0开始
  9. 如何做研究(How to research)
  10. 价值数十万的免费工具包