Python實(shí)現(xiàn)圖書(shū)借閱管理系統(tǒng)
本篇文章將編寫(xiě)一個(gè)python簡(jiǎn)易的圖書(shū)借閱管理系統(tǒng),可以實(shí)現(xiàn)一些基本的功能。
圖書(shū)借閱管理系統(tǒng)需求分析:
1. 書(shū)籍的屬性信息:書(shū)名, 作者, 借閱狀態(tài)(借出數(shù)量, 未借的數(shù)量)
2. 書(shū)籍借閱需要的操作:
1). 錄入書(shū)籍信息;
2). 借閱書(shū)籍信息;
3). 歸還書(shū)籍;
4). 查詢書(shū)籍信息;
5). 退出
主要思路:
用戶進(jìn)入系統(tǒng)后,可以通過(guò)鍵入數(shù)字1~5去實(shí)現(xiàn)相對(duì)應(yīng)的功能,并且可以重復(fù)操作,直到輸入數(shù)字5之后退出系統(tǒng)。
先創(chuàng)建一個(gè)空的列表,作為一個(gè)存放書(shū)籍信息的容器,執(zhí)行程序時(shí)先進(jìn)行初始化,自動(dòng)添加幾個(gè)已有的信息到列表中;
當(dāng)輸入數(shù)字1后,要求用戶輸入要錄入的書(shū)籍名稱,若書(shū)籍已存在列表中,則報(bào)錯(cuò),若書(shū)籍不在列表中,則進(jìn)一步要求用戶輸入相應(yīng)的書(shū)籍信息,并把它們存放到列表中去;
當(dāng)輸入數(shù)字2后,要求用戶輸入要借閱的書(shū)籍名稱,之后判斷該書(shū)籍的庫(kù)存數(shù)量是否為0,若庫(kù)存為0,則返回庫(kù)存不足的信息,否則,借閱成功,庫(kù)存數(shù)減1,借出數(shù)加1;
當(dāng)輸入數(shù)字3后,要求用戶輸入要?dú)w還的書(shū)籍名稱,并且?guī)齑鏀?shù)量加1,借出數(shù)量減1;
當(dāng)輸入數(shù)字4后,可以給用戶以表格的形式返回所有的書(shū)籍信息;
當(dāng)輸入數(shù)字5后,退出系統(tǒng)。
在寫(xiě)圖書(shū)借閱管理系統(tǒng)之前,需要寫(xiě)一個(gè)改變字體的顏色的代碼,在借閱系統(tǒng)中出現(xiàn)不同的情況時(shí),會(huì)有相應(yīng)的顏色變化。
下面簡(jiǎn)單介紹一下Python中怎樣改變輸出字體顏色:
實(shí)現(xiàn)過(guò)程:
終端的字符顏色是用轉(zhuǎn)義序列控制的,是文本模式下的系統(tǒng)顯示功能,和具體的語(yǔ)言無(wú)關(guān)。
轉(zhuǎn)義序列是以ESC開(kāi)頭,即用\033來(lái)完成(ESC的ASCII碼用十進(jìn)制表示是27,用八進(jìn)制表示就是033)。
書(shū)寫(xiě)格式:
開(kāi)頭部分:\033[顯示方式;前景色;背景色m + 結(jié)尾部分:\033[0m
注意:
開(kāi)頭部分的三個(gè)參數(shù):顯示方式,前景色,背景色是可選參數(shù),可以只寫(xiě)其中的某一個(gè);
另外由于表示三個(gè)參數(shù)不同含義的數(shù)值都是唯一的沒(méi)有重復(fù)的,所以三個(gè)參數(shù)的書(shū)寫(xiě)先后順序沒(méi)有固定要求,系統(tǒng)都能識(shí)別;但是,建議按照默認(rèn)的格式規(guī)范書(shū)寫(xiě)。
對(duì)于結(jié)尾部分,其實(shí)也可以省略,但是為了書(shū)寫(xiě)規(guī)范,建議\033[***開(kāi)頭,\033[0m結(jié)尾。
數(shù)值表示的參數(shù)含義:
顯示方式: 0(默認(rèn)值)、1(高亮)、22(非粗體)、4(下劃線)、24(非下劃線)、 5(閃爍)、25(非閃爍)、7(反顯)、27(非反顯)
前景色: 30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍(lán)色)、35(洋 紅)、36(青色>)、37(白色)
背景色: 40(黑色)、41(紅色)、42(綠色)、 43(黃色)、44(藍(lán)色)、45(洋 紅)、46(青色>)、47(白色)
先創(chuàng)建一個(gè)colorFont.py文件,方便之后調(diào)用,并編寫(xiě)代碼:
OKGREEN = '\033[32m' ERROR = '\033[31m' WARNING = '\033[33m' END = '\033[0m' ? if __name__ == '__main__': ? ? print(OKGREEN + 'OK') ? ? print(ERROR + '錯(cuò)誤') ? ? print(WARNING + "警告")
測(cè)試后,輸出結(jié)果如下:

接下來(lái)就是系統(tǒng)的編寫(xiě)了,首先需要導(dǎo)入colorFont模塊,代碼如下:
from colorFont import *
from prettytable import PrettyTable
class Book(object):
? ? def __init__(self, name, author, borrowed=0, borrow=0):
? ? ? ? """
? ? ? ? :param name:書(shū)籍名稱
? ? ? ? :param author: 作者
? ? ? ? :param borrowed: 已借出書(shū)籍?dāng)?shù)
? ? ? ? :param borrow: 未借出的書(shū)籍?dāng)?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ū)籍信息的函數(shù), 添加書(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 + "初始化書(shū)籍信息成功" + END)
?
? ? def find(self, name):
? ? ? ? """
? ? ? ? 根據(jù)用戶傳入的書(shū)籍名稱判斷書(shū)籍是否存在, 如果存在, 返回該書(shū)籍對(duì)象; 如果不存在, 返回None
? ? ? ? """
? ? ? ? for book in self.books:
? ? ? ? ? ? if book.name == name:
? ? ? ? ? ? ? ? return book
? ? ? ? else:
? ? ? ? ? ? return None
?
? ? def entering(self):
? ? ? ? name = input("請(qǐng)輸入要錄入的書(shū)籍名稱:").strip()
? ? ? ? book = self.find(name)
? ? ? ? if book:
? ? ? ? ? ? print(WARNING + "該書(shū)信息已存在,請(qǐng)不要重復(fù)錄入" +END)
? ? ? ? else:
? ? ? ? ? ? author = input("請(qǐng)輸入作者:")
? ? ? ? ? ? borrow = input("請(qǐng)輸入錄入數(shù)量:")
? ? ? ? ? ? borrowed = 0
? ? ? ? ? ? self.books.append(Book(name, author, borrowed, int(borrow)))
? ? ? ? ? ? print(OKGREEN + "錄入書(shū)籍信息成功" +END)
?
? ? def borrowBook(self):
? ? ? ? # 刪除字符串左右的空格
? ? ? ? name = input("借閱書(shū)籍名稱:").strip()
? ? ? ? # 查找書(shū)籍, 如果存在, 返回書(shū)籍對(duì)象, 不存在, 返回None;
? ? ? ? book = self.find(name)
? ? ? ? if book:
? ? ? ? ? ? if book.borrow > 0:
? ? ? ? ? ? ? ? # 未借出書(shū)籍?dāng)?shù)量減1;
? ? ? ? ? ? ? ? book.borrow -= 1
? ? ? ? ? ? ? ? # 借出書(shū)籍?dāng)?shù)量加1
? ? ? ? ? ? ? ? book.borrowed += 1
? ? ? ? ? ? ? ? print(OKGREEN + "書(shū)籍借閱成功" + END)
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? print(WARNING + "書(shū)籍%s庫(kù)存不足" %(book.name) + END)
? ? ? ? else:
? ? ? ? ? ? print(ERROR + "書(shū)籍%s不存在" %(name) + END)
?
? ? def returnBook(self):
? ? ? ? name = input("歸還書(shū)籍名稱:").strip()
? ? ? ? book = self.find(name)
? ? ? ? if book:
? ? ? ? ? ? book.borrow += 1
? ? ? ? ? ? book.borrowed -= 1
? ? ? ? ? ? print(OKGREEN + "書(shū)籍歸還成功" + END)
? ? ? ? else:
? ? ? ? ? ? print(ERROR + "本圖書(shū)館沒(méi)有此書(shū)" + END)
?
? ? def show(self):
? ? ? ? print("書(shū)籍信息顯示".center(50, '*'))
? ? ? ? table = PrettyTable()
? ? ? ? table.field_names = ["編號(hào)", "書(shū)籍名稱", "作者", "已借出數(shù)量", "庫(kù)存數(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)建書(shū)籍管理的對(duì)象
? ? bm = BookManage()
? ? # 先初始化書(shū)籍信息
? ? bm.init()
? ? prompt = """
? ? ? ? ? ? ? ? 書(shū)籍借閱與管理系統(tǒng)
? ? ? ? ? ? ? ??
? ? ? ? ? ? 1).錄入書(shū)籍信息
? ? ? ? ? ? 2).借閱書(shū)籍信息
? ? ? ? ? ? 3).歸還書(shū)籍
? ? ? ? ? ? 4).查詢書(shū)籍信息
? ? ? ? ? ? 5).退出系統(tǒng)
? ? ? ? ? ??
? ? ? ? ? ??
? ? 請(qǐ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("請(qǐng)輸入正確的選項(xiàng)")
?
if __name__ == '__main__':
? ? main()運(yùn)行程序之后,輸出如下所示:

之后輸入要執(zhí)行的操作相對(duì)應(yīng)的數(shù)字,先輸入一個(gè) 4 吧,看一下書(shū)庫(kù)里最開(kāi)始有什么信息,輸入4后,得到下面的輸出:

再輸入一個(gè) 1 ,錄入一個(gè)新的信息:

再輸入一個(gè)2,借一本書(shū)吧:

再輸入 3 還書(shū)吧:

再輸入 4 看一下,現(xiàn)在書(shū)庫(kù)中所有書(shū)的情況吧:

最后輸入 5 就可以退出該系統(tǒng)了。
以上就是一個(gè)簡(jiǎn)單的圖書(shū)借閱管理系統(tǒng)的實(shí)現(xiàn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python模擬實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- python實(shí)現(xiàn)簡(jiǎn)易圖書(shū)管理系統(tǒng)
- python編寫(xiě)圖書(shū)管理系統(tǒng)
- Python實(shí)現(xiàn)簡(jiǎn)易的圖書(shū)管理系統(tǒng)
- Python實(shí)現(xiàn)圖書(shū)管理系統(tǒng)設(shè)計(jì)
- python面向?qū)ο蠓▽?shí)現(xiàn)圖書(shū)管理系統(tǒng)
- wxpython實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- python圖書(shū)管理系統(tǒng)
- python實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- Python實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)管理系統(tǒng)
相關(guān)文章
Python調(diào)用訊飛語(yǔ)音合成API接口來(lái)實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音
這篇文章主要為大家介紹了Python調(diào)用訊飛語(yǔ)音合成API接口來(lái)實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
python實(shí)現(xiàn)txt文件格式轉(zhuǎn)換為arff格式
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)txt文件格式轉(zhuǎn)換為arff格式的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
利用Python制作動(dòng)態(tài)排名圖的實(shí)現(xiàn)代碼
這篇文章主要介紹了利用Python制作動(dòng)態(tài)排名圖的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
解決python中遇到字典里key值為None的情況,取不出來(lái)的問(wèn)題
今天小編就為大家分享一篇解決python中遇到字典里key值為None的情況,取不出來(lái)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
手把手教你pycharm專業(yè)版安裝破解教程(linux版)
這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

