<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了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。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45