python實現:用類實現一個圖書館,實現借書,入庫,還書,查書,等功能,要求數據可以保存到文件中,退出后下次可以找回數據


第一步:標准化先獲得信息

#coding=utf-8
import traceback
import pickle
import os
import os.path


class GRLlibrary(object):
    '''huiziz的圖書館'''
    def __init__(self,name,location):
        self.name=name
        self.location=location
        self.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 = name
        self.__author = author
        self.__tag = tag
        self.__price = price 

    def get_book_name(self):
        return self.__name

    def set_book_name(self,new_name):
        self.__name = new_name

    def book_info(self):
        print(self.name,self.author,self.tag,self.price)

class GRLibrary(object):
    '''吳老師創建的創建的光榮之路圖書館!'''
    
    def __init__(self,name,location):
        self.name = name
        self.location = location
        
    def get_library_info(self):
        info = "名字:%s  \n地點:%s" %(self.name,self.location)
        return info

def list_info():
    print("""
        圖書館可以輸入如下命令進行操作:
        create:創建圖書館
        use:使用某個圖書館
        add:增加圖書
        borrow:借閱圖書
        lend:還書
        list:查看庫中的圖書列表
        search:查看庫中是否存在某本書
        """)
library = None
def create(library_name,location):
    global library
    library = 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 = name
        self.__author = author
        self.__tag = tag
        self.__price = price 

    def get_book_name(self):
        return self.__name

    def set_book_name(self,new_name):
        self.__name = new_name

    def book_info(self):
        print(self.name,self.author,self.tag,self.price)

class GRLibrary(object):
    '''吳老師創建的創建的光榮之路圖書館!'''
    def __init__(self,name,location):
        self.name = name
        self.location = location
        self.book_list=[]
        
    def get_library_info(self):
        info = "名字:%s  \n地點:%s" %(self.name,self.location)
        return info
        
    def 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 library
    library_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":
                break
            eval(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 = name
        self.__author = author
        self.__tag = tag
        self.__price = price 

    def get_book_name(self):
        return self.__name

    def set_book_name(self,new_name):
        self.__name = new_name

    def book_info(self):
        print(self.name,self.author,self.tag,self.price)

class GRLibrary(object):
    '''吳老師創建的創建的光榮之路圖書館!'''
    def __init__(self,name,location):
        self.name = name
        self.location = location
        self.book_list=[]  #存儲所有的書的實例對象
        
    def get_library_info(self):
        info = "名字:%s  \n地點:%s" %(self.name,self.location)
        return info
        
    def 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)
                break
        else:
            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 library
    library_name=input("請輸入圖書館的名字:").strip()
    location=input("請輸入圖書館的地址:").strip()
    library = GRLibrary(library_name,location)  ####這個定義...嗯
    print ("圖書館創建成功")

def use_library():
    global library
    global data_file_path
    data_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 library
    if 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()
                break
            eval(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.py

E:\workspace-python\test>py -3 a.py

        圖書館可以輸入如下命令進行操作:
        create:創建圖書館
        use:使用某個圖書館
        add:增加圖書
        borrow:借閱圖書
        lend:還書
        list:查看庫中的圖書列表
        find:查看庫中是否存在某本書
        exit:退出

請輸入操作命令:use
請輸入圖書館數據文件的位置:e:\\a.py
請輸入操作命令:list
測試開發
自動化測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM