本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
以下文章來源于IT叢林 ,作者: IT叢林
說明:此程式適合入門基本練習,
私信回復“資料”,即可免費領取Python實戰案例講解視頻
Python GUI制作視頻決議神器,全網視頻免費看
https://www.bilibili.com/video/BV1tz4y1o7Yc/
目標
了解面向物件開發程序中類內部功能的分析方法,
了解常用系統功能
系統需求
使用面向物件編程思想完成圖書管理系統的開發,具體如下:
系統要求:圖書資訊存盤到檔案中
系統功能,添加,洗掉,修改,保存,查詢,顯示所有圖書資訊,退出系統等功能,
程式檔案分析設計
角色分析:圖書,管理系統
注意事項:
一個角色一個程式檔案
專案的主入口,可以定義為main.py
主要功能
基于面向物件:實作圖書:
添加功能,
洗掉功能,
修改功能,
查詢功能,
顯示所有,
保存到檔案中,
加載資料等功能,
程式檔案
程式入口:main.py
圖書檔案:book.py
管理系統檔案:systemmgr.py
1.1.4 程式代碼
圖書檔案代碼
圖書檔案:book.py
需求:圖書包括:書名,型別,sn號等,
添加__str__魔法方法,方便查看圖書物件資訊
代碼:
class Book(object):
def __init__(self,name,type,sn):
self.name=name
self.type=type
self.sn=sn
def __str__(self):
return f'{self.name},{self.type},{self.sn}'
管理檔案程式代碼
需求:
系統功能回圈使用,根據用戶輸入的功能序號執行不同的功能
步驟:
加載資料
顯示功能選單
根據用戶輸入進行不同操作功能
定義系統功能函式:添加,洗掉,保存等
定義該管理系統的類:用于初始化,類中存盤管理系統的代碼,
定義一個一個list_page空圖書串列,方便存盤,
def __init__(self):
self.list_page=[]
添加一個靜態方法用于顯示功能選單
@staticmethod
def show_menu():
print("請選擇如下功能")
print("1,添加新書")
print("2,洗掉新書")
print("3,修改新書")
print("4,查詢相關書")
print("5,顯示所有書")
print("6,保存書資訊")
print("7,加載書資訊")
print("9,退出系統")
程式入口函式,啟動程式執行的函式 run()
def run(self):
while True:
self.show_menu()
int_num=int(input("請輸入功能序號"))
if int_num==1:#添加
self.add_book()
if int_num == 2:#洗掉
self.del_book()
elif int_num==3:#修改
self.update_book()
elif int_num==4:#查詢
self.search_book()
elif int_num==5:#顯示
self.show_book()
elif int_num==6:#保存
self.save_book()
elif int_num == 7:#加載
self.load_book()
elif int_num == 9:
print("退出系統")
break
else:
print("輸入錯誤!")
程式入口檔案程式代碼
功能:匯入系統管理模塊,啟動圖書管理系統,
main.py
from xm19code.systemgr import Systemmgr
if __name__=='__main__':
rr = Systemmgr()
rr.run()
程式代碼清單:
具體代碼如下圖:
class Book(object):
def __init__(self,name,type,sn):
self.name=name
self.type=type
self.sn=sn
def __str__(self):
return f'{self.name},{self.type},{self.sn}'
from xm19code.systemgr import Systemmgr
if __name__=='__main__':
rr = Systemmgr()
rr.run()
#from book import *
from xm19code.book import *
class Systemmgr(object):
def __init__(self):
self.list_page=[]
#回圈
@staticmethod
def show_menu():
print("請選擇如下功能")
print("1,添加新書")
print("2,洗掉新書")
print("3,修改新書")
print("4,查詢相關書")
print("5,顯示所有書")
print("6,保存書資訊")
print("7,加載書資訊")
print("9,退出系統")
def run(self):
while True:
self.show_menu()
int_num=int(input("請輸入功能序號"))
if int_num==1:#添加
self.add_book()
if int_num == 2:#洗掉
self.del_book()
elif int_num==3:#修改
self.update_book()
elif int_num==4:#查詢
self.search_book()
elif int_num==5:#顯示
self.show_book()
elif int_num==6:#保存
self.save_book()
elif int_num == 7:#加載
self.load_book()
elif int_num == 9:
print("退出系統")
break
else:
print("輸入錯誤!")
def add_book(self):
#根據用戶輸入的欄位添加
name=input("請輸入書的名稱")
type=input("請輸入書的分類")
sn = input("請輸入書的sn")
book=Book(name,type,sn)
self.list_page.append(book)
print(self.list_page)
print(book)
def update_book(self):
names = input("請輸入要修改的圖書:")
for i in self.list_page:
if i.name==names:
i.name=input("請輸入要修改的圖書名稱:")
i.type = input("請輸入要修改的圖書型別:")
i.sn = input("請輸入要修改的圖書SN:")
print(f'修改了圖書資訊成功:圖書{i.name} ,型別{i.type},sn為:{i.sn}')
break
else:
print("沒有該圖書!")
def del_book(self):
names=input("請輸入要洗掉的圖書:")
# for 回圈查詢
for i in self.list_page:
if i.name == names:
self.list_page.remove(i)
print("洗掉成功!")
break
else:
print("沒有該圖書")
def show_book(self):
print('圖書名稱\t\t\t型別\t\t\tSN')
for i in self.list_page:
print(f'{i.name}\t\t\t{i.type}\t\t\t{i.sn}')
def save_book(self):
# 打開檔案
f = open('book.data', 'w')
# 檔案寫人 把list【圖書物件】轉換為字典
new_list = [i.__dict__ for i in self.list_page]
print(new_list)
f.write(str(new_list))
# 檔案關閉
f.close();
def search_book(self):
names=input("請輸入要查詢的圖書名稱:")
#for 回圈查詢
for i in self.list_page:
if i.name==names:
print(f'查詢到的圖書資訊:圖書{i.name} ,'
f'型別{i.type},sn為:{i.sn}')
break
else:
print("沒有該圖書")
def load_book(self):
try:
f=open('book.data','r')
except:
f=open('book.data','w')
else:
data=https://www.cnblogs.com/hhh188764/p/f.read()
#檔案讀取的資料都是字串且字串內部為字典資料
# 故需要轉換資料型別在轉換字典為物件存盤到圖書串列中
new_list=eval(data)
self.list_page=[Book(i['name'],i['type'],i['sn']) for i in new_list]
print('圖書\t\t型別\t\tSN')
for i in self.list_page:
print(f'{i.name}\t\t{i.type}\t\t{i.sn}')
finally:
#關閉檔案
f.close()
程式代碼運行結果:
C:\Python\Python38\python.exe D:/pythonProject/xm19code/main.py
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號7
圖書 型別 SN
py py 1234
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號2
請輸入要洗掉的圖書:22
沒有該圖書
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號3
請輸入要修改的圖書:22
沒有該圖書!
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號1
請輸入書的名稱1
請輸入書的分類1
請輸入書的sn1
[<xm19code.book.Book object at 0x000000000277F7C0>, <xm19code.book.Book object at 0x00000000025159D0>]
1,1,1
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號6
[{'name': 'py', 'type': 'py', 'sn': '1234'}, {'name': '1', 'type': '1', 'sn': '1'}]
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號1
請輸入書的名稱2
請輸入書的分類2
請輸入書的sn2
[<xm19code.book.Book object at 0x000000000277F7C0>, <xm19code.book.Book object at 0x00000000025159D0>, <xm19code.book.Book object at 0x000000000277F7F0>]
2,2,2
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號4
請輸入要查詢的圖書名稱:1
查詢到的圖書資訊:圖書1 ,型別1,sn為:1
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號4
請輸入要查詢的圖書名稱:1
查詢到的圖書資訊:圖書1 ,型別1,sn為:1
請選擇如下功能
1,添加新書
2,洗掉新書
3,修改新書
4,查詢相關書
5,顯示所有書
6,保存書資訊
7,加載書資訊
9,退出系統
請輸入功能序號6
[{'name': 'py', 'type': 'py', 'sn': '1234'}, {'name': '1', 'type': '1', 'sn': '1'