python編寫圖書管理系統(tǒng)
本文實(shí)例為大家分享了python實(shí)現(xiàn)圖書管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
題目:寫一個(gè)簡單的圖書借閱系統(tǒng)????????????????????????????????????????????????????????????????????????????????????????????????
學(xué)校二手書是個(gè)大市場,A老師決定涉足這個(gè)領(lǐng)域,她需要寫一個(gè)圖書管理系統(tǒng)幫她管理書籍的借閱情況,她希望這個(gè)程序可以做到:????????????????????????????????????????????????????????????????????????????????????????????????
1. 查詢書籍:可以一鍵查詢系統(tǒng)里所有書籍的信息和借閱情況????????????????????????????????????????????????????????????????????????????????????????????????
2. 添加書籍:往系統(tǒng)添加書籍時(shí),需要輸入書籍的基本信息(書名,作者,推薦理由)????????????????????????????????????????????????????????????????????????????????????????????????
3. 借閱書籍:當(dāng)書籍的狀態(tài)是“未借出”的時(shí)候,書籍才可以借,借出以后的書籍狀態(tài)為“已借出”????????????????????????????????????????????????????????????????????????????????????????????????
4. 歸還書籍:歸還成功后書籍的狀態(tài)會(huì)更改成“未借出”,下一個(gè)同學(xué)可以再借了。????????????????????????????????????????????????????????????????????????????????????????????????
既然已經(jīng)學(xué)習(xí)了類和對(duì)象,所以不用考慮其他編程模式。????????????????????????????????????????????????????????????????????????????????????????????????
類的兩種用法:1. 類作為實(shí)例對(duì)象的模板 2. 類作為函數(shù)包。第一種用法是使用類生成實(shí)例對(duì)象。類作為實(shí)例對(duì)象的模版,每個(gè)實(shí)例創(chuàng)建后,都將擁有類的所有屬性和方法。第二種用法是用類將多個(gè)函數(shù)(方法)打包封裝在一起,讓類中的方法相互配合。????????????????????????????????????????????????????????????????????????????????????????????????
該項(xiàng)目中,處理的對(duì)象是每本具體的書籍,每本書都有自己的屬性信息,由此,可以定義一個(gè)Book類,利用Book類創(chuàng)建一個(gè)個(gè)書的實(shí)例,綁定屬性(第一種用法)????????????????????????????????????????????????????????????????????????????????????????????????
而對(duì)于而這個(gè)管理系統(tǒng)的運(yùn)行主體,是多個(gè)可供選擇的功能的疊加,所以我們可以創(chuàng)建一個(gè)系統(tǒng)運(yùn)行類BookManager,將查詢書籍、添加書籍等功能封裝成類中的方法以供調(diào)用(第二種用法)????????????????????????????????????????????????????????????????????????????????????????????????
課堂上,我們已編寫了基本功能,見附件1BookRent.py????????????????????????????????????????????????????????????????????????????????????????????????
------------------------------------------????????????????????????????????????????????????????????????????????????????????????????????????
對(duì)程序進(jìn)行改造升級(jí):????????????????????????????????????????????????????????????????????????????????????????????????
1. 圖書信息從CSV文件獲?。ǜ郊?),注意在借閱和歸還時(shí)修改圖書的狀態(tài)????????????????????????????????????????????????????????????????????????????????????????????????
2. 考慮對(duì)書籍進(jìn)行分類:繼承Book類,創(chuàng)建一些子類,例如,F(xiàn)ictionBook,改造其初始化方法,增加參數(shù)type=‘玄幻類’????????????????????????????????????????????????????????????????????????????????????????????????
3. 實(shí)現(xiàn)模糊查詢:例如,讓用戶輸入作者名,就能打印出系統(tǒng)里該作者所有書籍的相關(guān)信息;輸入玄幻類,打印出所有這類書籍的相關(guān)信息
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): ?# 對(duì)實(shí)例屬性進(jìn)行初始化 ? ? ? ? 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 狀態(tài):%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): ?# 顯示選擇菜單,根據(jù)不同菜單的選項(xiàng)調(diào)用不同的方法 ? ? ? ? print('歡迎使用大數(shù)據(jù)團(tuán)隊(duì)圖書節(jié)約系統(tǒng),每本書都是好書,希望鐘老師的市場越來越好。\n') ? ? ? ? while True: ? ? ? ? ? ? print(' 1.查詢書籍\n 2.添加書籍\n 3.借閱書籍\n 4.歸還書籍\n 5.退出系統(tǒng)\n') ? ? ? ? ? ? choice = int(input('請輸入數(shù)字選項(xiàng)對(duì)應(yīng)的功能,例如: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.查詢作者相關(guān)書籍\n2.查詢類別相關(guān)書籍\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('你來晚了,這本書已經(jīng)被借走了') ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? print('借閱成功!借了不看會(huì)變胖~~~') ? ? ? ? ? ? ? ? res.status = 1 ? ? ? ? ? ? ? ? manager.change_status(name) ? ? ? ? else: ? ? ? ? ? ? print('這本書暫時(shí)沒有在系統(tǒng)里!') ? ? def return_book(self): ?# 歸還書籍 ? ? ? ? name = input('請輸入歸還書籍的名字:') ? ? ? ? res = self.check_book(name) ? ? ? ? if res == -1: ? ? ? ? ? ? print('沒有這本書,你恐怕輸錯(cuò)書名了~') ? ? ? ? else: ? ? ? ? ? ? if res.status == 0: ? ? ? ? ? ? ? ? print('這本書沒有被借走!') ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? print('歸還成功') ? ? ? ? ? ? ? ? res.status = 0 ? ? ? ? ? ? ? ? manager.change_status(name) ? ? ? ? ? ? ? ? # 這里我做實(shí)驗(yàn)時(shí)有些些問題,去掉manager.會(huì)出現(xiàn) name is not defined 學(xué)藝不精,還不夠了解python,見諒 ? ? @staticmethod ? ? def change_status(name): ?# 修改CSV文件中借還書籍的狀態(tài) ? ? ? ? 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") ?# 重命名寫入文件,此法不可取,但是我暫時(shí)找不到好的方法了 ? ? ? ? print("已修改CSV文件") ? ? ? ? # 這里我做實(shí)驗(yàn)時(shí)也有些些問題。1.不會(huì)修改特定單元格,2.選擇了修改后替換原文件的方法,此法若真實(shí)用于大型文件管理,會(huì)導(dǎo)致效率大幅度降低,不可取,見諒 manager = BookManager() manager.menu()
此次實(shí)驗(yàn)前前后后斷斷續(xù)續(xù)做了5天左右,主要還是對(duì)python的CSV模塊不太熟悉,建議大家好好學(xué)習(xí)。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python模擬實(shí)現(xiàn)圖書管理系統(tǒng)
- python實(shí)現(xiàn)簡易圖書管理系統(tǒng)
- Python實(shí)現(xiàn)簡易的圖書管理系統(tǒng)
- Python實(shí)現(xiàn)圖書借閱管理系統(tǒng)
- Python實(shí)現(xiàn)圖書管理系統(tǒng)設(shè)計(jì)
- python面向?qū)ο蠓▽?shí)現(xiàn)圖書管理系統(tǒng)
- wxpython實(shí)現(xiàn)圖書管理系統(tǒng)
- python圖書管理系統(tǒng)
- python實(shí)現(xiàn)圖書管理系統(tǒng)
- Python實(shí)現(xiàn)簡單的圖書管理系統(tǒng)
相關(guān)文章
python tkinter canvas使用實(shí)例
這篇文章主要介紹了python tkinter canvas使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11解決pandas無法在pycharm中使用plot()方法顯示圖像的問題
今天小編就為大家分享一篇解決pandas無法在pycharm中使用plot()方法顯示圖像的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05如何在scrapy中集成selenium爬取網(wǎng)頁的方法
這篇文章主要介紹了如何在scrapy中集成selenium爬取網(wǎng)頁的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python實(shí)現(xiàn)的彩票機(jī)選器實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)彩票機(jī)選器的方法,可以模擬彩票號(hào)碼的隨機(jī)生成功能,需要的朋友可以參考下2015-06-06python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼
本文主要介紹了python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11python面向?qū)ο蠓▽?shí)現(xiàn)圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python面向?qū)ο蠓▽?shí)現(xiàn)圖書管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04