Python實現(xiàn)圖書借閱管理系統(tǒng)
本篇文章將編寫一個python簡易的圖書借閱管理系統(tǒng),可以實現(xiàn)一些基本的功能。
圖書借閱管理系統(tǒng)需求分析:
1. 書籍的屬性信息:書名, 作者, 借閱狀態(tài)(借出數(shù)量, 未借的數(shù)量)
2. 書籍借閱需要的操作:
1). 錄入書籍信息;
2). 借閱書籍信息;
3). 歸還書籍;
4). 查詢書籍信息;
5). 退出
主要思路:
用戶進入系統(tǒng)后,可以通過鍵入數(shù)字1~5去實現(xiàn)相對應的功能,并且可以重復操作,直到輸入數(shù)字5之后退出系統(tǒng)。
先創(chuàng)建一個空的列表,作為一個存放書籍信息的容器,執(zhí)行程序時先進行初始化,自動添加幾個已有的信息到列表中;
當輸入數(shù)字1后,要求用戶輸入要錄入的書籍名稱,若書籍已存在列表中,則報錯,若書籍不在列表中,則進一步要求用戶輸入相應的書籍信息,并把它們存放到列表中去;
當輸入數(shù)字2后,要求用戶輸入要借閱的書籍名稱,之后判斷該書籍的庫存數(shù)量是否為0,若庫存為0,則返回庫存不足的信息,否則,借閱成功,庫存數(shù)減1,借出數(shù)加1;
當輸入數(shù)字3后,要求用戶輸入要歸還的書籍名稱,并且?guī)齑鏀?shù)量加1,借出數(shù)量減1;
當輸入數(shù)字4后,可以給用戶以表格的形式返回所有的書籍信息;
當輸入數(shù)字5后,退出系統(tǒng)。
在寫圖書借閱管理系統(tǒng)之前,需要寫一個改變字體的顏色的代碼,在借閱系統(tǒng)中出現(xiàn)不同的情況時,會有相應的顏色變化。
下面簡單介紹一下Python中怎樣改變輸出字體顏色:
實現(xiàn)過程:
終端的字符顏色是用轉(zhuǎn)義序列控制的,是文本模式下的系統(tǒng)顯示功能,和具體的語言無關(guān)。
轉(zhuǎn)義序列是以ESC開頭,即用\033來完成(ESC的ASCII碼用十進制表示是27,用八進制表示就是033)。
書寫格式:
開頭部分:\033[顯示方式;前景色;背景色m + 結(jié)尾部分:\033[0m
注意:
開頭部分的三個參數(shù):顯示方式,前景色,背景色是可選參數(shù),可以只寫其中的某一個;
另外由于表示三個參數(shù)不同含義的數(shù)值都是唯一的沒有重復的,所以三個參數(shù)的書寫先后順序沒有固定要求,系統(tǒng)都能識別;但是,建議按照默認的格式規(guī)范書寫。
對于結(jié)尾部分,其實也可以省略,但是為了書寫規(guī)范,建議\033[***開頭,\033[0m結(jié)尾。
數(shù)值表示的參數(shù)含義:
顯示方式: 0(默認值)、1(高亮)、22(非粗體)、4(下劃線)、24(非下劃線)、 5(閃爍)、25(非閃爍)、7(反顯)、27(非反顯)
前景色: 30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍色)、35(洋 紅)、36(青色>)、37(白色)
背景色: 40(黑色)、41(紅色)、42(綠色)、 43(黃色)、44(藍色)、45(洋 紅)、46(青色>)、47(白色)
先創(chuàng)建一個colorFont.py文件,方便之后調(diào)用,并編寫代碼:
OKGREEN = '\033[32m' ERROR = '\033[31m' WARNING = '\033[33m' END = '\033[0m' ? if __name__ == '__main__': ? ? print(OKGREEN + 'OK') ? ? print(ERROR + '錯誤') ? ? print(WARNING + "警告")
測試后,輸出結(jié)果如下:
接下來就是系統(tǒng)的編寫了,首先需要導入colorFont模塊,代碼如下:
from colorFont import * from prettytable import PrettyTable class Book(object): ? ? def __init__(self, name, author, borrowed=0, borrow=0): ? ? ? ? """ ? ? ? ? :param name:書籍名稱 ? ? ? ? :param author: 作者 ? ? ? ? :param borrowed: 已借出書籍數(shù) ? ? ? ? :param borrow: 未借出的書籍數(shù) ? ? ? ? """ ? ? ? ? self.name = name ? ? ? ? self.author = author ? ? ? ? self.borrowed = borrowed ? ? ? ? self.borrow = borrow ? ? ? def __str__(self): ? ? ? ? return '<Book: %s>' %(self.name) ? class BookManage(object): ? ? books = [] ? ? ? def init(self): ? ? ? ? """初始化書籍信息的函數(shù), 添加書籍信息""" ? ? ? ? self.books.append(Book("Python核心編程", 'Wesley Chun', 5, 0)) ? ? ? ? self.books.append(Book("Python for data analysis", 'Wes McKinney', 5, 10)) ? ? ? ? self.books.append(Book("流暢的Python", 'Luciano Ramalho', 0, 10)) ? ? ? ? print(OKGREEN + "初始化書籍信息成功" + END) ? ? ? def find(self, name): ? ? ? ? """ ? ? ? ? 根據(jù)用戶傳入的書籍名稱判斷書籍是否存在, 如果存在, 返回該書籍對象; 如果不存在, 返回None ? ? ? ? """ ? ? ? ? for book in self.books: ? ? ? ? ? ? if book.name == name: ? ? ? ? ? ? ? ? return book ? ? ? ? else: ? ? ? ? ? ? return None ? ? ? def entering(self): ? ? ? ? name = input("請輸入要錄入的書籍名稱:").strip() ? ? ? ? book = self.find(name) ? ? ? ? if book: ? ? ? ? ? ? print(WARNING + "該書信息已存在,請不要重復錄入" +END) ? ? ? ? else: ? ? ? ? ? ? author = input("請輸入作者:") ? ? ? ? ? ? borrow = input("請輸入錄入數(shù)量:") ? ? ? ? ? ? borrowed = 0 ? ? ? ? ? ? self.books.append(Book(name, author, borrowed, int(borrow))) ? ? ? ? ? ? print(OKGREEN + "錄入書籍信息成功" +END) ? ? ? def borrowBook(self): ? ? ? ? # 刪除字符串左右的空格 ? ? ? ? name = input("借閱書籍名稱:").strip() ? ? ? ? # 查找書籍, 如果存在, 返回書籍對象, 不存在, 返回None; ? ? ? ? book = self.find(name) ? ? ? ? if book: ? ? ? ? ? ? if book.borrow > 0: ? ? ? ? ? ? ? ? # 未借出書籍數(shù)量減1; ? ? ? ? ? ? ? ? book.borrow -= 1 ? ? ? ? ? ? ? ? # 借出書籍數(shù)量加1 ? ? ? ? ? ? ? ? book.borrowed += 1 ? ? ? ? ? ? ? ? print(OKGREEN + "書籍借閱成功" + END) ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? print(WARNING + "書籍%s庫存不足" %(book.name) + END) ? ? ? ? else: ? ? ? ? ? ? print(ERROR + "書籍%s不存在" %(name) + END) ? ? ? def returnBook(self): ? ? ? ? name = input("歸還書籍名稱:").strip() ? ? ? ? book = self.find(name) ? ? ? ? if book: ? ? ? ? ? ? book.borrow += 1 ? ? ? ? ? ? book.borrowed -= 1 ? ? ? ? ? ? print(OKGREEN + "書籍歸還成功" + END) ? ? ? ? else: ? ? ? ? ? ? print(ERROR + "本圖書館沒有此書" + END) ? ? ? def show(self): ? ? ? ? print("書籍信息顯示".center(50, '*')) ? ? ? ? table = PrettyTable() ? ? ? ? table.field_names = ["編號", "書籍名稱", "作者", "已借出數(shù)量", "庫存數(shù)量"] ? ? ? ? for index, book in enumerate(self.books): ? ? ? ? ? ? table.add_row([index+1, book.name, book.author, book.borrowed, book.borrow]) ? ? ? ? print(table) ? def main(): ? ? # 創(chuàng)建書籍管理的對象 ? ? bm = BookManage() ? ? # 先初始化書籍信息 ? ? bm.init() ? ? prompt = """ ? ? ? ? ? ? ? ? 書籍借閱與管理系統(tǒng) ? ? ? ? ? ? ? ?? ? ? ? ? ? ? 1).錄入書籍信息 ? ? ? ? ? ? 2).借閱書籍信息 ? ? ? ? ? ? 3).歸還書籍 ? ? ? ? ? ? 4).查詢書籍信息 ? ? ? ? ? ? 5).退出系統(tǒng) ? ? ? ? ? ?? ? ? ? ? ? ?? ? ? 請輸入你的選擇:""" ? ? while True: ? ? ? ? choice = input(prompt) ? ? ? ? if choice == '1': ? ? ? ? ? ? bm.entering() ? ? ? ? elif choice == '2': ? ? ? ? ? ? bm.borrowBook() ? ? ? ? elif choice == '3': ? ? ? ? ? ? bm.returnBook() ? ? ? ? elif choice == '4': ? ? ? ? ? ? bm.show() ? ? ? ? elif choice == '5': ? ? ? ? ? ? exit(0) ? ? ? ? else: ? ? ? ? ? ? print("請輸入正確的選項") ? if __name__ == '__main__': ? ? main()
運行程序之后,輸出如下所示:
之后輸入要執(zhí)行的操作相對應的數(shù)字,先輸入一個 4 吧,看一下書庫里最開始有什么信息,輸入4后,得到下面的輸出:
再輸入一個 1 ,錄入一個新的信息:
再輸入一個2,借一本書吧:
再輸入 3 還書吧:
再輸入 4 看一下,現(xiàn)在書庫中所有書的情況吧:
最后輸入 5 就可以退出該系統(tǒng)了。
以上就是一個簡單的圖書借閱管理系統(tǒng)的實現(xiàn)。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python+requests接口自動化框架的實現(xiàn)
這篇文章主要介紹了python+requests接口自動化框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08python實現(xiàn)自動網(wǎng)頁截圖并裁剪圖片
這篇文章主要為大家詳細介紹了python實現(xiàn)自動網(wǎng)頁截圖并裁剪圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07python 網(wǎng)絡(luò)編程要點總結(jié)
Python 提供了兩個級別訪問的網(wǎng)絡(luò)服務:低級別的網(wǎng)絡(luò)服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統(tǒng) Socket 接口的全部方法。高級別的網(wǎng)絡(luò)服務模塊SocketServer, 它提供了服務器中心類,可以簡化網(wǎng)絡(luò)服務器的開發(fā)。下面看下該如何使用2021-06-06cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解
getStructuringElement()函數(shù)可用于構(gòu)造一個特定大小和形狀的結(jié)構(gòu)元素,用于圖像形態(tài)學處理,這篇文章主要介紹了cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解的相關(guān)資料,需要的朋友可以參考下2022-12-12python實現(xiàn)xlwt xlrd 指定條件給excel行添加顏色
這篇文章主要介紹了python實現(xiàn)xlwt xlrd 指定條件給excel行添加顏色,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07使用pyplot.matshow()函數(shù)添加繪圖標題
這篇文章主要介紹了使用pyplot.matshow()函數(shù)添加繪圖標題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python基于urllib實現(xiàn)按照百度音樂分類下載mp3的方法
這篇文章主要介紹了python基于urllib實現(xiàn)按照百度音樂分類下載mp3的方法,涉及Python使用urllib模塊操作頁面元素的相關(guān)技巧,需要的朋友可以參考下2015-05-05