首頁 > 軟體

python編寫圖書管理系統

2022-03-10 16:00:54

本文範例為大家分享了python實現圖書管理系統的具體程式碼,供大家參考,具體內容如下

題目:寫一個簡單的圖書借閱系統‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

學校二手書是個大市場,A老師決定涉足這個領域,她需要寫一個圖書管理系統幫她管理書籍的借閱情況,她希望這個程式可以做到:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

1. 查詢書籍:可以一鍵查詢系統裡所有書籍的資訊和借閱情況‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
2. 新增書籍:往系統新增書籍時,需要輸入書籍的基本資訊(書名,作者,推薦理由)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
3. 借閱書籍:當書籍的狀態是“未借出”的時候,書籍才可以借,借出以後的書籍狀態為“已借出”‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
4. 歸還書籍:歸還成功後書籍的狀態會更改成“未借出”,下一個同學可以再借了。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

既然已經學習了類和物件,所以不用考慮其他程式設計模式。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

類的兩種用法:1. 類作為範例物件的模板 2. 類作為函數包。第一種用法是使用類生成範例物件。類作為範例物件的模版,每個範例建立後,都將擁有類的所有屬性和方法。第二種用法是用類將多個函數(方法)打包封裝在一起,讓類中的方法相互配合。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

該專案中,處理的物件是每本具體的書籍,每本書都有自己的屬性資訊,由此,可以定義一個Book類,利用Book類建立一個個書的範例,繫結屬性(第一種用法)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

而對於而這個管理系統的執行主體,是多個可供選擇的功能的疊加,所以我們可以建立一個系統執行類BookManager,將查詢書籍、新增書籍等功能封裝成類中的方法以供呼叫(第二種用法)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

課堂上,我們已編寫了基本功能,見附件1BookRent.py‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

------------------------------------------‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

對程式進行改造升級:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

1. 圖書資訊從CSV檔案獲取(附件2),注意在借閱和歸還時修改圖書的狀態‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
2. 考慮對書籍進行分類:繼承Book類,建立一些子類,例如,FictionBook,改造其初始化方法,增加引數type=‘玄幻類’‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
3. 實現模糊查詢:例如,讓使用者輸入作者名,就能列印出系統裡該作者所有書籍的相關資訊;輸入玄幻類,列印出所有這類書籍的相關資訊

CSV表格部分如下:

程式碼:

# coding = utf-8
import csv
from itertools import islice
import pandas as pd
import os


class Book:
    def __init__(self, name, author, recommendation, type, status=0):  # 對範例屬性進行初始化
        self.name = name
        self.author = author
        self.recommendation = recommendation
        self.status = status
        self.type = type

    def __str__(self):
        if self.status == 1:
            status = '已借出'
        else:
            status = '未借出'
        return '名稱:《%s》作者:%s 推薦語:%s 類別: %s 狀態:%s ' % (self.name, self.author, self.recommendation, self.type, status)


class FictionBook(Book):
    def __init__(self, type='奇幻'):
        self.type = type


class NovelBook(Book):
    def __init__(self, type='小說'):
        self.type = type


class JottingsBook(Book):
    def __init__(self, type='隨筆'):
        self.type = type


class BookManager:
    books = []

    def __init__(self):
        f = open('BookInfos.csv', 'r')
        readers = csv.reader(f)
        for row in islice(readers, 1, None):
            self.books.append(Book(row[0], row[1], row[2], row[3], row[4]))
        f.close()

    def menu(self):  # 顯示選擇選單,根據不同選單的選項呼叫不同的方法
        print('歡迎使用巨量資料團隊圖書節約系統,每本書都是好書,希望鍾老師的市場越來越好。n')
        while True:
            print(' 1.查詢書籍n 2.新增書籍n 3.借閱書籍n 4.歸還書籍n 5.退出系統n')
            choice = int(input('請輸入數位選項對應的功能,例如:1(指....)'))
            if choice == 1:
                self.show_all_book()
            elif choice == 2:
                self.add_book()
            elif choice == 3:
                self.lend_book()
            elif choice == 4:
                self.return_book()
            elif choice == 5:
                print('感謝使用!歡迎下次再來!')
                break

    def show_all_book(self):  # 顯示書籍資訊
        print("1.查詢作者相關書籍n2.查詢類別相關書籍n3.查詢所有書籍")
        ch = eval(input('請輸入你的選擇:例如:1(指....)'))
        if ch == 1:
            author = input("請輸入作者名字:")
            for book in self.books:
                if book.author == author:
                    print('')
                    print(book)
        elif ch == 2:
            type = input("請輸入書籍類別:")
            for book in self.books:
                if book.type == type:
                    print('')
                    print(book)
        elif ch == 3:
            for book in self.books:
                print('')
                print(book)
        else:
            print("您的輸入有誤噢!")

    def add_book(self):  # 新增書籍
        new_name = input('請輸入書籍的名字:')
        new_author = input('請輸入書籍的作者:')
        new_comment = input('請輸入書籍的推薦語:')
        new_type = input('請輸入書籍的類別:')
        new_book = [new_name, new_author, new_comment, new_type, 0]
        # 寫入CSV檔案
        f = open('BookInfos.csv', 'a+')
        writer = csv.writer(f)
        writer.writerow(new_book)
        f.close()
        # 改變books[]
        self.books.append(Book(new_book[0], new_book[1], new_book[2], new_book[3], new_book[4]))
        print('書籍錄入成功!n')

    def check_book(self, name):  # 檢查是否存在該書籍
        for book in self.books:
            if book.name == name:
                return book
        else:
            return -1

    def lend_book(self):  # 借閱書籍
        name = input('請輸入你想借閱的書籍名字:')
        res = self.check_book(name)
        if res != -1:
            if res.status == 1:
                print('你來晚了,這本書已經被借走了')
            else:
                print('借閱成功!借了不看會變胖~~~')
                res.status = 1
                manager.change_status(name)
        else:
            print('這本書暫時沒有在系統裡!')

    def return_book(self):  # 歸還書籍
        name = input('請輸入歸還書籍的名字:')
        res = self.check_book(name)
        if res == -1:
            print('沒有這本書,你恐怕輸錯書名了~')
        else:
            if res.status == 0:
                print('這本書沒有被借走!')
            else:
                print('歸還成功')
                res.status = 0
                manager.change_status(name)
                # 這裡我做實驗時有些些問題,去掉manager.會出現 name is not defined 學藝不精,還不夠了解python,見諒

    @staticmethod
    def change_status(name):  # 修改CSV檔案中借還書籍的狀態
        in_file = open("BookInfos.csv", "r")
        reader = csv.reader(in_file)
        out_file = open("BookInfos1.csv", "w", newline='')
        writer = csv.writer(out_file)
        for row in reader:
            if row[0] == name:

                if row[4] == '0':
                    row[4] = '1'
                else:
                    row[4] = '0'
            writer.writerow(row)
        in_file.close()
        out_file.close()
        os.remove("BookInfos.csv")  # 刪除原檔案
        os.rename("BookInfos1.csv", "BookInfos.csv")  # 重新命名寫入檔案,此法不可取,但是我暫時找不到好的方法了
        print("已修改CSV檔案")
        # 這裡我做實驗時也有些些問題。1.不會修改特定單元格,2.選擇了修改後替換原檔案的方法,此法若真實用於大型檔案管理,會導致效率大幅度降低,不可取,見諒


manager = BookManager()
manager.menu()

此次實驗前前後後斷斷續續做了5天左右,主要還是對python的CSV模組不太熟悉,建議大家好好學習。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com