<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
瞭解物件導向開發過程中類內部功能的分析方法
瞭解常用系統功能
◦ 新增
◦ 刪除
◦ 修改
◦ 查詢
使用物件導向程式設計思想完成學生管理系統的開發,具體如下:
系統要求:學生資料儲存在檔案中
系統功能:新增學生、刪除學生、修改學生資訊、查詢學生資訊、顯示所有學生資訊、儲存學生資訊以及退出系統等功能
角色分析
◦ 學生
◦ 管理系統
工作中注意事項:
為了方便維護程式碼,一般一個角色一個程式檔案
專案要有主程式入口,習慣為 main.py
建立專案目錄,例如:StudentManagerSystem
程式檔案如下:
需求:
學生資訊包含:姓名、性別、手機號
新增 __str__ 魔法方法,方便檢視學生物件資訊
程式程式碼如下
class Student(object): def __init__(self, name, gender, tel): self.name = name self.gender = gender self.tel = tel def __str__(self): return f'{self.name}, {self.gender}, {self.tel}'
儲存資料的位置:檔案(student.data)
◦ 載入檔案資料
◦ 修改資料後儲存到檔案
儲存資料的形式:列表儲存學生物件
系統功能
定義管理系統類:
class StudentManager(object): def __init__(self): # 儲存資料所用的列表 self.student_list = []
管理系統框架:
需求:系統功能迴圈使用,使用者輸入不同的功能序號執行不同的功能
步驟:
定義程式入口函數
定義系統功能函數,新增、刪除學生等
基礎程式程式碼如下
from student import * class StudentManager(object): def __init__(self): # 儲存資料所用的列表 self.student_list = [] # 一. 程式入口函數,啟動程式後執行的函數 def run(self): # 1. 載入學生資訊 self.load_student() while True: # 2. 顯示功能選單 self.show_menu() # 3. 使用者輸入功能序號 menu_num = int(input('請輸入您需要的功能序號:')) # 4. 根據使用者輸入的功能序號執行不同的功能 if menu_num == 1: # 新增學生 self.add_student() elif menu_num == 2: # 刪除學生 self.del_student() elif menu_num == 3: # 修改學生資訊 self.modify_student() elif menu_num == 4: # 查詢學生資訊 self.search_student() elif menu_num == 5: # 顯示所有學生資訊 self.show_student() elif menu_num == 6: # 儲存學生資訊 self.save_student() elif menu_num == 7: # 退出系統 -> 退出迴圈 break # 顯示功能選單 @staticmethod def show_menu(): print('請選擇如下功能:') print('1. 新增學生') print('2. 刪除學生') print('3. 修改學生資訊') print('4. 查詢學生資訊') print('5. 顯示所有學生資訊') print('6. 儲存學生資訊') print('7. 退出系統') # 新增學生 def add_student(self): pass # 刪除學生 def del_student(self): pass # 修改學生資訊 def modify_student(self): pass # 查詢學生資訊 def search_student(self): pass # 顯示所有學生資訊 def show_student(self): pass # 儲存學生資訊 def save_student(self): pass # 載入學生資訊 def load_student(self): pass
# 1. 匯入managerSystem模組 from managerSystem import * # 2. 啟動學生管理系統 if __name__ == '__main__': student_manager = StudentManager() student_manager.run()
需求:使用者輸入學生姓名、性別、手機號,將學生新增到系統
步驟
程式碼
# 新增學生 def add_student(self): # 使用者輸入姓名、性別、手機號 name = input('請輸入學生的姓名:') gender = input('請輸入學生的性別:') tel = input('請輸入學生的手機號:') # 建立該學生物件 student = Student(name, gender, tel) # 將該學生物件儲存到列表 self.student_list.append(student) # 列印提示資訊 print(f'學生【{student.name}, {student.gender}, {student.tel}】新增成功!')
需求:使用者輸入目標學生姓名、性別、手機號,如果學生存在則刪除該學生
步驟:
◦ 使用者輸入目標學生姓名
◦ 遍歷學生資料列表,如果使用者輸入的學生姓名存在則刪除,否則提示該學生不存在
程式碼
# 刪除學生 def del_student(self): # 1. 使用者輸入目標學生姓名 del_name = input('請輸入要刪除的學生姓名:') # 2. 如果使用者輸入的學生姓名存在則刪除,否則提示學生不存在 for i in self.student_list: if i.name == del_name: self.student_list.remove(i) break else: print('查無此人!')
需求:使用者輸入目標學生姓名,如果學生存在則修改學生資訊
步驟
◦ 使用者輸入目標學生姓名
◦ 遍歷學生資料列表,如果使用者輸入的學生姓名存在則修改學生的姓名、性別、手機號資料,否則提示該學生不存在
程式碼
# 修改學生資訊 def modify_student(self): # 1. 使用者輸入目標學生姓名 modify_name = input('請輸入要修改的學生姓名:') # 2. 如果使用者輸入的學生姓名存在則修改姓名、性別、手機號資料,否則提示學生不存在 for i in self.student_list: if i.name == modify_name: i.name = input('請輸入學生姓名:') i.gender = input('請輸入學生性別:') i.tel = input('請輸入學生手機號:') print(f'修改該學生資訊成功,姓名: {i.name}, 性別: {i.gender}, 手機號: {i.tel}') break else: print('查無此人!')
需求:使用者輸入目標學生姓名,如果學生存在則列印該學生資訊
步驟
◦ 使用者輸入目標學生姓名
◦ 遍歷學生資料列表,如果使用者輸入的學生姓名存在則列印學生資訊,否則提示該學生不存在
程式碼
# 查詢學生資訊 def search_student(self): # 1. 使用者輸入目標學生姓名 search_name = input('請輸入要查詢的學生姓名:') # 2. 如果使用者輸入的學生存在,則列印學生資訊,否則提示學生不存在 for i in self.student_list: if i.name == search_name: print(f'姓名: {i.name}, 性別: {i.gender}, 手機號: {i.tel}') break else: print('查無此人!')
需求:列印所有學生的資訊
步驟
◦ 遍歷學生資料列表,列印所有學生資訊
程式碼
# 顯示所有學生資訊 def show_student(self): print('姓名t性別t手機號') for i in self.student_list: print(f'{i.name}t{i.gender}t{i.tel}')
需求:將修改後的學生資料儲存到儲存資料的檔案
步驟
思考:
檔案寫入的資料是學生物件的記憶體地址嗎?
檔案內資料要求的資料型別是什麼?
拓展:__dict__
class A(object): a = 0 def __init__(self): self.b = 1 aa = A() # 返回類內部所有屬性和方法的字典 print(A.__dict__) # 返回範例內部屬性和值組成的字典 print(aa.__dict__)
程式碼
# 儲存學生資訊 def save_student(self): # 1. 開啟檔案 f = open('student.data', 'w') # 2. 將學生的資訊寫入檔案 # 注意1:檔案寫入的資料不能是學生物件的記憶體地址,需要把學生資料轉換成列表字典資料再做儲存 new_list = [i.__dict__ for i in self.student_list] # [ { 'name' : 'aa', 'gender' : '女', 'tel' : '123' } ] print(new_list) # 注意2:檔案內資料要求為字串型別,故需要先轉換資料型別為字串才能將資料寫入檔案 f.write(str(new_list)) # 3. 關閉檔案 f.close()
需求:每次進入系統後,修改的資料是檔案裡面的資料
步驟
嘗試以 “r” 模式開啟學生資料的檔案,如果檔案不存在則以 “w” 模式開啟檔案
如果檔案存在則讀取資料並儲存資料
◦ 讀取資料
◦ 轉換資料型別為列表並轉換列表內的字典為物件
◦ 儲存學生資料到學生列表
關閉檔案
程式碼
# 載入學生資訊 def load_student(self): # 嘗試以 「r」 模式開啟資料檔案,檔案不存在則提示使用者;檔案存在則讀取資料並儲存資料 try: f = open('student.data', 'r') except: f = open('student.data', 'w') else: # 讀取資料 data = f.read() # 轉換資料型別為列表並轉換列表內的字典為物件 new_list = eval(data) # 儲存學生資料到學生列表 self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list] finally: # 關閉檔案 f.close()
# 1. 匯入managerSystem模組 from managerSystem import * # 2. 啟動學生管理系統 if __name__ == '__main__': student_manager = StudentManager() student_manager.run()
class Student(object): def __init__(self, name, gender, tel): self.name = name self.gender = gender self.tel = tel def __str__(self): return f'{self.name}, {self.gender}, {self.tel}'
from student import * class StudentManager(object): def __init__(self): # 儲存資料所用的列表 self.student_list = [] # 一. 程式入口函數,啟動程式後執行的函數 def run(self): # 1. 載入學生資訊 self.load_student() while True: # 2. 顯示功能選單 self.show_menu() # 3. 使用者輸入功能序號 menu_num = int(input('請輸入您需要的功能序號:')) # 4. 根據使用者輸入的功能序號執行不同的功能 if menu_num == 1: # 新增學生 self.add_student() elif menu_num == 2: # 刪除學生 self.del_student() elif menu_num == 3: # 修改學生資訊 self.modify_student() elif menu_num == 4: # 查詢學生資訊 self.search_student() elif menu_num == 5: # 顯示所有學生資訊 self.show_student() elif menu_num == 6: # 儲存學生資訊 self.save_student() elif menu_num == 7: # 退出系統 -> 退出迴圈 print('感謝您的使用,祝您生活愉快!') break # 顯示功能選單 @staticmethod def show_menu(): print('請選擇如下功能:') print('1. 新增學生') print('2. 刪除學生') print('3. 修改學生資訊') print('4. 查詢學生資訊') print('5. 顯示所有學生資訊') print('6. 儲存學生資訊') print('7. 退出系統') # 新增學生 def add_student(self): name = input('請輸入學生的姓名:') gender = input('請輸入學生的性別:') tel = input('請輸入學生的手機號:') student = Student(name, gender, tel) self.student_list.append(student) print(f'學生【{student.name}, {student.gender}, {student.tel}】新增成功!') # 刪除學生 def del_student(self): # 1. 使用者輸入目標學生姓名 del_name = input('請輸入要刪除的學生姓名:') # 2. 如果使用者輸入的學生姓名存在則刪除,反之提示學生不存在 for i in self.student_list: if i.name == del_name: self.student_list.remove(i) break else: print('查無此人!') # 修改學生資訊 def modify_student(self): # 1. 使用者輸入目標學生姓名 modify_name = input('請輸入要修改的學生姓名:') # 2. 如果使用者輸入的學生姓名存在則修改姓名、性別、手機號資料,否則提示學生不存在 for i in self.student_list: if i.name == modify_name: i.name = input('請輸入學生姓名:') i.gender = input('請輸入學生性別:') i.tel = input('請輸入學生手機號:') print(f'修改該學生資訊成功,姓名: {i.name}, 性別: {i.gender}, 手機號: {i.tel}') break else: print('查無此人!') # 查詢學生資訊 def search_student(self): # 1. 使用者輸入目標學生姓名 search_name = input('請輸入要查詢的學生姓名:') # 2. 如果使用者輸入的學生存在,則列印學生資訊,否則提示學生不存在 for i in self.student_list: if i.name == search_name: print(f'姓名: {i.name}, 性別: {i.gender}, 手機號: {i.tel}') break else: print('查無此人!') # 顯示所有學生資訊 def show_student(self): print('姓名t性別t手機號') for i in self.student_list: print(f'{i.name}t{i.gender}t{i.tel}') # 儲存學生資訊 def save_student(self): # 1. 開啟檔案 f = open('student.data', 'w') # 2. 將學生的資訊寫入檔案 # 注意1:檔案寫入的資料不能是學生物件的記憶體地址,需要把學生資料轉換成列表字典資料再做儲存 new_list = [i.__dict__ for i in self.student_list] # [ { 'name' : 'aa', 'gender' : '女', 'tel' : '123' } ] print(new_list) # 注意2:檔案內資料要求為字串型別,故需要先轉換資料型別為字串才能將資料寫入檔案 f.write(str(new_list)) # 3. 關閉檔案 f.close() # 載入學生資訊 def load_student(self): # 嘗試以 「r」 模式開啟資料檔案,檔案不存在則提示使用者;檔案存在則讀取資料並儲存資料 try: f = open('student.data', 'r') except: f = open('student.data', 'w') else: # 讀取資料 data = f.read() # 轉換資料型別為列表並轉換列表內的字典為物件 new_list = eval(data) # 儲存學生資料到學生列表 self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list] finally: # 關閉檔案 f.close()
知識點
函數
◦ 定義和呼叫
◦ 引數的使用
物件導向
◦ 定義類
◦ 建立物件
◦ 定義和呼叫範例屬性
◦ 定義和呼叫實體方法
資料型別
◦ 列表
增加刪除資料
列表推導式
◦ 字典
◦ 字串
檔案操作
◦ 開啟檔案
◦ 讀取或寫入
◦ 關閉檔案
到此這篇關於基於Python實現物件導向版學生管理系統的文章就介紹到這了,更多相關Python學生管理系統內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援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