要求:使用类的形式做一个图书馆管理系统,实现借书,入库,还书,查书等功能。

设计思路:

第一步:先写一个书的类,来存储图书馆中最重要的组成部分书的信息管理,包括书名,书作者,书的所属类别,书的价格等

class Book():'''书类,存储书名,作者,分类,价格等信息'''def __init__(self,name,author,classify,price):self.name = nameself.author = authorself.classify = classifyself.price = pricedef get_bookinfo(self):print('书名:%s\n作者:%s\n分类:%s\n价格:%s'%(self.name,self.author,self.classify,self.price))def set_book_name(self,new_name):self.name = new_namedef get_book_name(self):#获取书名return self.namedef get_book_author(self):#获取书作者return self.authordef get_book_classify(self):#获取书分类return self.classfiydef get_book_price(self):#获取书的价格return self.price

第二步:因为单独一个类管理书籍信息,因此现在写一个图书馆主体类,写3个类变量,分别存储图书馆所有的图书(list)、尚未被借出的图书(list)、已被借出的图书(dict),并且使用序列化来存储信息编写算法如下:

class Library():'''图书馆,实现借书,入库,还书,查书等功能,使用序列化存储书的实例'''import pickle as pwith open(r'C:\Users\何发奋\Desktop\Python 习题\instance\book_library.txt','rb') as f:#序列化信息存储地址try:book_total_library = p.load(f)#存储所有的书book_in_library =p.load(f)#存储未被借出的书out_library = p.load(f)#存储被借出的书的信息,包括借书人以及借书日期except:book_total_library = []book_in_library =[]out_library = {}
def __init__(self,name,location):
'''初始化图书馆'''
self.name = name
self.location = location

第三步:写借书,入库,还书,查书等功能

3.1 入库

def add():'''加书'''import pickle as pbook_name = input('请输入书名:')author_name = input('请输入author:')classify = input('请输入classify:')price = input('请输入price:')book = Book(book_name,author_name,classify,price)Library.book_total_library.append(book)Library.book_in_library.append(book)#将书籍加入本馆总库以及在库图书列表with open(r'C:\Users\何发奋\Desktop\Python 习题\instance\book_library.txt','wb') as fp:p.dump(Library.book_total_library,fp)p.dump(Library.book_in_library,fp)p.dump(Library.out_library,fp)#将修改的数据记录入序列化

3.2借书,借书的逻辑是

  step1:遍历本馆书库,查看是否有该书籍

  step2:遍历本馆可借书单,查看书籍是否已被借出

  step3:如果本馆有此书,并且未被借出,则出借该书,记录出借记录,否则提示本馆无此书,或者此书已经被出借

def borrow(self,username,book_name):'''借书'''import pickle as pimport timecurrent_date = time.strftime('%Y-%m-%d',time.localtime())#print(Library.book_in_library)#print(Library.out_library)for book_object1 in Library.book_total_library:if book_object1.get_book_name() == book_name:for book_object2 in Library.book_in_library:#print(book_object2)#print(book_object2.get_book_name())if book_object2.get_book_name() ==book_name:print('object2:',book_object2)#查找图书在本馆,且未被借出Library.out_library[book_object2] = (username,current_date)#记录图书已经被借出,登记出借信息
                        Library.book_in_library.remove(book_object2)#print(Library.book_in_library)#print(Library.out_library)#修改在库图书记录,记录当前图书已被借出,不在库print('借书成功,请及时归还')with open(r'C:\Users\何发奋\Desktop\Python 习题\instance\book_library.txt','wb') as fp:p.dump(Library.book_total_library,fp)p.dump(Library.book_in_library,fp)p.dump(Library.out_library,fp)#序列化记录修改记录print()returnelse:#本馆有此书,但是已被借走print('您要的书已被借走,您可通过book_info查看已被借阅的信息')print()return#如果图书在本馆,但是已被借出,提示已被借走else:print('您所要借阅的书本馆尚无,请去其他图书馆看看')print()#如果本馆无此图书,提示

3.3还书,还书的逻辑为先查看出借记录,查看是否有对应的出借记录,如果有则收回书籍,修改在库记录,否则提示报错

def lend(self,book_name):'''还书'''import pickle as pfor book_object in Library.out_library.keys():print(book_object.get_book_name())if book_name ==book_object.get_book_name():Library.book_in_library.append(book_object)del Library.out_library[book_object]#删除出借记录with open(r'C:\Users\何发奋\Desktop\Python 习题\instance\book_library.txt','wb') as fp:p.dump(Library.book_total_library,fp)p.dump(Library.book_in_library,fp)p.dump(Library.out_library,fp)print('还书成功!')print()return#如果查到对应的借出记录,则记录归还记录else:print('未查到借阅记录,请确认是否是在本馆借的书')print()#如果未查到对应的借出记录不做操作

3.4查询功能,查书功能分3种,查询本馆所有的图书;查询本馆在库图书;查询本馆已被出借图书

def info_all(self):#所有书籍import pickle as pif Library.book_total_library:print('*'*80)for item in Library.book_total_library:item.get_bookinfo()print('-'*80)print(' '*80)def info_ready(self):#在库书籍if Library.book_in_library:print('-'*80)for item in Library.book_in_library:item.get_bookinfo()print('-'*80)print(' '*80)else:print('当前无可借书籍')print(' '*80)def info_borrow(self):#已被出借书籍if Library.out_library:print('*'*80)for item in Library.out_library:item.get_bookinfo()print('-'*80)print(' '*80)else:print('无被借阅记录')print(' '*80)

最后写程序的主体,也就是操作命令如下:

if __name__ == '__main__':#import operatorwhile 1:command = input('欢迎光临小何图书馆请输入命令:\nadd:增加图书\nborrow:借阅图书\nlend:还书\ninfo_all:查看库中图书列表\ninfo_ready:查看在库图书列表\ninfo_borrow:查看借出图书列表\nsearch:查找图书\nexit:退出\n')if command.strip().lower() == 'add':exec('xh_library.add()')elif command.strip().lower() == 'borrow':user_name = input('请输入用户名:')book_name = input('请输入书名:')temp = 'xh_library.borrow(%s,%s)'%(user_name,book_name)print(temp)exec('xh_library.borrow("%s","%s")'%(user_name,book_name))elif command.strip().lower() == 'lend':book_input = input('请输入要还的书名:')exec('xh_library.lend("%s")'% book_input)elif command.strip().lower() == 'info_all':exec('xh_library.info_all()')elif command.strip().lower() == 'info_ready':exec('xh_library.info_ready()')elif command.strip().lower() == 'info_borrow':#print('catch')exec('xh_library.info_borrow()')elif command.strip().lower() == 'exit':break

尚未完全完善,待后续更新!

转载于:https://www.cnblogs.com/hyj691001/p/10552029.html

20190318-使用类做一个简单的图书馆管理系统相关推荐

  1. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(三)密码修改以及密码重置...

     前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/as ...

  2. Python做一个简单的名片管理系统

    项目介绍 如下图,本次项目主要完成新建名片.显示全部名片.查询对应名片并对对应名片完成相关操作. 框架搭建: 名片管理首先可以由main.py以及tools.py组成,main.py主要完成主要功能, ...

  3. python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?

    原标题:技术图文:如何利用 Python 做一个简单的定时器类? 背景 今天在B站上看有关 Python 最火的一个教学视频 -- "零基础入门学习 Python",这也是我们 P ...

  4. 做一个简单的银行、账户演示程序。 (1)定义一个账户类,包含用户名、密码、余额等属性、存钱、取钱等方法。 (2)定义一个银行类,包含银行名、账户列表等属性,开账户、查账户的功能。账户列表可以使用集

    做一个简单的银行.账户演示程序. (1)定义一个账户类,包含用户名.密码.余额等属性.存钱.取钱等方法. (2)定义一个银行类,包含银行名.账户列表等属性,开账户.查账户的功能.账户列表可以使用集合相 ...

  5. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...

    程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...

  6. html控制图的宽,用JointJS做一个简单的功能控制图

    继上一篇介绍了GoJS之后,继续研究JS的绘图工具,毕竟GoJS有些小贵.这次选择了JointJS,完全开源,它还有一个商业版本叫Raddit,功能更强大.不过就我的需求场景,开源的Joint就足够了 ...

  7. java如何做网页_java怎么做一个简单网页?网页包括什么?

    学了java程序之后,大家就可以将这些运用到生活中去,比如做一个简单的网页.正好也可以检测自己学了怎么样,那么接下来,我们就来给大家讲解一下这方面的内容. 用Java语言编写实现一个简单的WEB浏览器 ...

  8. 用js做一个简单的秒表计时器

    用js做一个简单的秒表计时器 具体代码如下 <!DOCTYPE html> <html lang="en"><head><meta cha ...

  9. 做一个简单计算器(两个数的加减乘除)扣扣116119409

    做一个简单计算器(两个数的加减乘除) 一.语言和环境 a)实现语言Java b)环境要求Android Studio 二.要求: 1.可以清空,可以回退(一个一个回退): 2.按下去之后textvie ...

最新文章

  1. opencv中image watch插件安装与使用教程
  2. SAP PM纠正维护
  3. Remote System Upgrade With Cyclone III Devices
  4. 测验1: Python基本语法元素 (第1周)
  5. docker:Error running DeviceCreate (createSnapDevice) dm_task_run failed
  6. java 图形立即显示_java 图形显示
  7. 高仿微信对话列表滑动删除效果
  8. 如何将静态网页部署到github上
  9. 基于神念TGAM的脑波小车(1)
  10. 全向轮机器人运动模型及应用分析
  11. C++库介绍-标准库、类库
  12. zip unzip命令行_Linux / Unix中的Zip和Unzip命令
  13. 软件界面是怎么做出来的_可可英语这个软件怎么样?了解的人出来说说真实情况...
  14. Wifidog 认证
  15. LabView---信号发生器
  16. vtk教程第六章 基础算法
  17. DHCP服务配置-Cisco模拟器
  18. uni-app入门介绍
  19. java.lang.IllegalStateException: Duplicate key 【java8 toMap(key重复如何解决)】
  20. echarts渐变色不起作用

热门文章

  1. Java 8特性有望进入.Net/Mono
  2. 间接通过new 来申请一个二维的堆内存数组
  3. Linux 常见命令
  4. 计算机专业大二分方向,该选择人工智能还是网络安全
  5. python中insert()函数的用法_Python list insert()用法及代码示例
  6. form select multiple 某个字段是数组_你知道什么是Select函数吗?
  7. 线程和进程有什么区别
  8. 024_JDK的equals方法
  9. 012_原始值和引用值
  10. 安智armeabi 和 armeabi-v7a 的库文件增加法则