第一步:标准化先获得信息

#coding=utf-8
import traceback
import pickle
import os
import os.pathclass GRLlibrary(object):'''huiziz的图书馆'''def __init__(self,name,location):self.name=nameself.location=locationself.book_list=[]#获取图书馆的基本信息def get_library_info(self):info="名字:%s\n地点:%s"%(self.name,self.location)return info#只有当文件本身被执行【被当做模块被其他程序引用】的时候,才会执行if里面的代码[下面代码的作用]
if __name__=="__main__":gr_library=GRLlibrary("光荣之路北京图书馆","北京")print (gr_library.get_library_info())

运行结果:

E:\workspace-python\test>py -3 a.py
名字:光荣之路北京图书馆
地点:北京

第二步:打印出command命令

class Book(object):def __init__(self,name,author,tag,price):self.__name = nameself.__author = authorself.__tag = tagself.__price = price def get_book_name(self):return self.__namedef set_book_name(self,new_name):self.__name = new_namedef book_info(self):print(self.name,self.author,self.tag,self.price)class GRLibrary(object):'''吴老师创建的创建的光荣之路图书馆!'''def __init__(self,name,location):self.name = nameself.location = locationdef get_library_info(self):info = "名字:%s  \n地点:%s" %(self.name,self.location)return infodef list_info():print("""图书馆可以输入如下命令进行操作:create:创建图书馆use:使用某个图书馆add:增加图书borrow:借阅图书lend:还书list:查看库中的图书列表search:查看库中是否存在某本书""")
library = None
def create(library_name,location):global librarylibrary = GRLibrary(library_name,location)if __name__ == "__main__":list_info()#gr_library = GRLibrary("光荣之路北京图书馆","北京")#print(gr_library.get_library_info())

运行结果:

E:\workspace-python\test>py -3 a.py图书馆可以输入如下命令进行操作:create:创建图书馆use:使用某个图书馆add:增加图书borrow:借阅图书lend:还书list:查看库中的图书列表search:查看库中是否存在某本书

第三步:实现创建图书馆、添加图书、查看库中图书列表-雏形

import traceback
import pickle
class Book(object):def __init__(self,name,author,tag,price):self.__name = nameself.__author = authorself.__tag = tagself.__price = price def get_book_name(self):return self.__namedef set_book_name(self,new_name):self.__name = new_namedef book_info(self):print(self.name,self.author,self.tag,self.price)class GRLibrary(object):'''吴老师创建的创建的光荣之路图书馆!'''def __init__(self,name,location):self.name = nameself.location = locationself.book_list=[]def get_library_info(self):info = "名字:%s  \n地点:%s" %(self.name,self.location)return infodef add(self,book):self.book_list.append(book)#print ("%s图书入库成功"%book.get_book_name())def list(self):for book in self.book_list:#print (book)  #我写的print (book.get_book_name())   #获取每本书的书名def list_info():print("""图书馆可以输入如下命令进行操作:create:创建图书馆use:使用某个图书馆add:增加图书borrow:借阅图书lend:还书list:查看库中的图书列表search:查看库中是否存在某本书exit:退出""")
library = None
def create_library():global librarylibrary_name=input("请输入图书馆的名字:").strip()location=input("请输入图书馆的地址:").strip()library = GRLibrary(library_name,location)  ####这个定义...嗯print (("********"+"["+"%s"+"]"+"图书馆创建成功"+"********")%library_name)def add_book():book_name=input("请输入书名:").strip()author_name=input("请输入作者名:").strip()tag=input("请输入分类:").strip()price=input("请输入书的价格:").strip()book=Book(book_name,author_name,tag,price)if library is not None:library.add(book)print (("********"+"["+"%s"+"]"+"图书入库成功"+"********")%book_name)else:print ("图书馆还未创建,请输入create命令进行创建!")def list_book():if library is not None:print ("图书列表为:")library.list()command={"create":"create_library","add":"add_book","list":"list_book"}   #前面对应list_info中的值,后面对应要调用的方法if __name__ == "__main__":list_info()while 1:try:user_command=input("请输入操作命令:").lower().strip()if user_command=="exit":breakeval(command[user_command]+"()")  #执行程序:输入的东西+user_command就可以调用函数了except:traceback.print_exc()   #打印报错的堆栈信息if user_command not in command:print ("您输入的命令不存在")else:print ("您输入的命令有误,请按照命令列表输入:")print (list_info())#gr_library = GRLibrary("光荣之路北京图书馆","北京")#print(gr_library.get_library_info())

运行结果:

E:\workspace-python\test>py -3 a.py图书馆可以输入如下命令进行操作:create:创建图书馆use:使用某个图书馆add:增加图书borrow:借阅图书lend:还书list:查看库中的图书列表search:查看库中是否存在某本书exit:退出请输入操作命令:create
请输入图书馆的名字:zita
请输入图书馆的地址:虹口
********[zita]图书馆创建成功********
请输入操作命令:add
请输入书名:测试开发
请输入作者名:吴老师
请输入分类:测试
请输入书的价格:68
********[测试开发]图书入库成功********
请输入操作命令:add
请输入书名:自动化测试
请输入作者名:吴老师
请输入分类:测试
请输入书的价格:99
********[自动化测试]图书入库成功********
请输入操作命令:list
图书列表为:
测试开发
自动化测试

终极:写入文件+添加注释

import traceback
import pickle
import os
import os.path
class Book(object):def __init__(self,name,author,tag,price):   #定义4个书的实例变量self.__name = nameself.__author = authorself.__tag = tagself.__price = price def get_book_name(self):return self.__namedef set_book_name(self,new_name):self.__name = new_namedef book_info(self):print(self.name,self.author,self.tag,self.price)class GRLibrary(object):'''吴老师创建的创建的光荣之路图书馆!'''def __init__(self,name,location):self.name = nameself.location = locationself.book_list=[]  #存储所有的书的实例对象def get_library_info(self):info = "名字:%s  \n地点:%s" %(self.name,self.location)return infodef add(self,book):self.book_list.append(book)#print ("%s图书入库成功"%book.get_book_name())def list(self):for book in self.book_list:#print (book)  #我写的print (book.get_book_name())   #获取每本书的书名def find(self):book_search=input("请输入要查找书的名字:")for book in self.book_list: if book.get_book_name()==book_search:print ("找到了%s"%book_search)breakelse:print ("没有找到%s"%book_search)def list_info():print("""图书馆可以输入如下命令进行操作:create:创建图书馆use:使用某个图书馆add:增加图书borrow:借阅图书lend:还书list:查看库中的图书列表find:查看库中是否存在某本书exit:退出""")
library = None
library_data_file_path=""#封装了一个函数,这个函数实质上是在操作实例对象。所有要输入的参数通过命令行的方式让用户输入,然后再操作类。这个设计模式叫代理
#一个函数把这个类的所有操作都实现了
def create_library():global librarylibrary_name=input("请输入图书馆的名字:").strip()location=input("请输入图书馆的地址:").strip()library = GRLibrary(library_name,location)  ####这个定义...嗯print ("图书馆创建成功")def use_library():global libraryglobal data_file_pathdata_file_path=input("请输入图书馆数据文件的位置:").strip()if os.path.exists(data_file_path):try: fp=open(data_file_path,"rb")library=pickle.load(fp)  ###盲点。通过pickle模块的反序列化操作,从文件中创建上一次程序保存的对象。library_data_file_path=data_file_path  #库恢复出来了except:print ("图书馆的数据文件没有合法的数据")def add_book():book_name=input("请输入书名:").strip()author_name=input("请输入作者名:").strip()tag=input("请输入分类:").strip()price=input("请输入书的价格:").strip()book=Book(book_name,author_name,tag,price)if library is not None:library.add(book)print (("["+"%s"+"]"+"图书入库成功")%book_name)else:print ("图书馆还未创建,请输入create命令进行创建!")def list_book():if library is not None:library.list()def find_book():global libraryif library is not None:library.find()command={"create":"create_library","add":"add_book","list":"list_book","use":"use_library","find":"find_book"}   #前面对应list_info中的值,后面对应要调用的方法if __name__ == "__main__":list_info()while 1:try:user_command=input("请输入操作命令:").lower().strip()if user_command=="exit":if library_data_file_path=="":library_data_file_path=input("请输入保存图书馆数据的数据文件路径:")fp= open(library_data_file_path,"wb")if library is not None:   pickle.dump(library,fp) #序列化。通过pickle模块的序列化操作将程序中运行的对象信息保存到文件中去,永久存储
                fp.close()breakeval(command[user_command]+"()")  #执行程序:输入的东西+user_command就可以调用函数了except:traceback.print_exc()   #打印报错的堆栈信息,调试用if user_command not in command:print ("您输入的命令不存在")else:print ("您输入的命令有误,请按照命令列表输入:")print (list_info())continue

运行结果:

E:\workspace-python\test>py -3 a.py图书馆可以输入如下命令进行操作:create:创建图书馆use:使用某个图书馆add:增加图书borrow:借阅图书lend:还书list:查看库中的图书列表find:查看库中是否存在某本书exit:退出请输入操作命令:create
请输入图书馆的名字:zita
请输入图书馆的地址:虹口
图书馆创建成功
请输入操作命令:add
请输入书名:测试开发
请输入作者名:吴老师
请输入分类:测试
请输入书的价格:68
[测试开发]图书入库成功
请输入操作命令:add
请输入书名:自动化测试
请输入作者名:吴老师
请输入分类:测试
请输入书的价格:99
[自动化测试]图书入库成功
请输入操作命令:list
测试开发
自动化测试
请输入操作命令:exit
请输入保存图书馆数据的数据文件路径:e:\\a.pyE:\workspace-python\test>py -3 a.py图书馆可以输入如下命令进行操作:create:创建图书馆use:使用某个图书馆add:增加图书borrow:借阅图书lend:还书list:查看库中的图书列表find:查看库中是否存在某本书exit:退出请输入操作命令:use
请输入图书馆数据文件的位置:e:\\a.py
请输入操作命令:list
测试开发
自动化测试

转载于:https://www.cnblogs.com/huiziz/p/10009986.html

python实现:用类实现一个图书馆,实现借书,入库,还书,查书,等功能,要求数据可以保存到文件中,退出后下次可以找回数据...相关推荐

  1. python pickle模块的使用/将python数据对象序列化保存到文件中

    # Python 使用pickle/cPickle模块进行数据的序列化"""Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送给 ...

  2. python把字典保存到文件_将Python字典保存到文件中,并定期更新它

    我觉得这是一个非常简单的问题,这里有很多类似的问题,但我还是不知道如何得到我想要的.我正在使用远程设备,当它们联机时可以连接到它们.我想要一个记录设备最近正常运行时间的文件,如下所示:# device ...

  3. python两个类共用一个变量_python – 如何从一个类到另一个类访问变量?

    var1和var2是 instance variables.这意味着你必须将ClassA的实例发送到ClassB,以便ClassB访问它,即: class ClassA(object): def __ ...

  4. Python学习项目——类【流浪图书馆】案例

    class Book: def __init__(self, name, author, comment, state=0):self.name = nameself.author = authors ...

  5. python如何另存文件_脚本将.py保存到文件中的另一个目录

    如果你能用另一个文件扩展名来保存它的话. 但是我想你想换个方向的备份对吗?这取决于你的编辑,现在大多数人都会这么做.在 但是你可以在你的文件中写一些类似的东西,它只是把它复制到你选择的一个目录中:im ...

  6. python利用mysql数据库实现一个中英文翻译程序兼单词试卷生成并改阅功能,并可以爬取有道官网进行在线翻译。

    直接上运行截图(代码在后面) 开始界面 使用navicat查看mysql数据库中的数据 单词查询功能测试 本地翻译一个本地数据库中有的单词 本地翻译一个本地数据库中没有的单词 爬取有道官网进行在线翻译 ...

  7. python中print又可将数据写入文件_Python 通过print_lol将数据保存到文件中

    1. 定义一个print_lol函数来控制列表的缩进和写入位置 import sys """this is a new fuction, which work for a ...

  8. python存储numpy数据为文件_numpy.savetxt是否将数组保存到文件中的特定位置?

    我有一个file.txt形式:; In this topology include file, you will find position restraint ; entries for all t ...

  9. 用python爬取网页数据并存入数据库中源代码_Python爬取51cto数据并存入MySQL方法详解...

    [] 实验环境 1.安装Python 3.7 2.安装requests, bs4,pymysql 模块 实验步骤1.安装环境及模块 可参考https://www.jb51.net/article/19 ...

最新文章

  1. centos装oracle6,CentOS-6.7下安装Oracle11g
  2. swift选择类或结构体
  3. android调用系统设置
  4. 【数据竞赛】5行代码提升GBDT,提升巨大!
  5. iOS 11: CORE ML—浅析
  6. C#的变迁史02 - C# 2.0篇
  7. java部署jar还是war优劣_详解Spring Boot 部署jar和war的区别
  8. h3c交换机划分vlan配置_华为、H3C、锐捷三家交换机配置命令详解
  9. 关于Oxygen版 Eclipse JSP或html 中option标签使用c:if报错的问题
  10. 【STM32】【STM32CubeMX】STM32CubeMX的使用之七:定时器输入捕获实现超声波测距
  11. 第一次带姐姐和弟弟去看海
  12. 【mac】mac 安装 RibbitMQ 报错 Error when reading /Users/lcc/.erlang.cookie: eacces
  13. 1.7.05:输出亲朋字符串
  14. 两阶段网路dea模型matlab实现(支持多种投入产出结构任意组合,支持规模报酬是否可变的调整、两阶段效率权重下限的调整和共享投入分配比例的调整)
  15. nessus网页下载组件失败后处理方法
  16. 人脸识别技术原理及解决方案
  17. 【Pytorch】torch.nn.Conv1d()理解与使用
  18. 企业闪存应用八年回顾
  19. linux+scp+失败_Linux scp 命令卡住的原因
  20. WIN10系统下提示文件被另外一个程序打开无法重命名、删除、移动的解决方法

热门文章

  1. matlab ext2int,MATLAB程序解读。急急急急急!!!!!!!!!!!
  2. 企业研发人员配备比例_高新企业研发人员占比多少
  3. Glad You Came--带条件的线段树区间更新,区间查询(其实是单点查询)
  4. php中table,thinkphp中的table方法怎样使用?
  5. 操作系统—哲学家进餐问题
  6. 贪心法——LeetCode376 摆动序列
  7. Unity3D基础12:碰撞体
  8. C#基础12.1:Object类
  9. ZOJ 3993 2017CCPC秦皇岛 M:Safest Buildings
  10. bzoj 1066: [SCOI2007]蜥蜴(最大流)