一、系統需求分析
1、需求分析
使用面向對象編程思想完成學員管理系統的開發,具體如下:
① 系統要求:學員數據存儲在文件中
② 系統功能:添加學員、刪除學員、修改學員信息、查詢學員信息、顯示所有學員信息、保存學員信息及退出系統等功能。
2、角色分析
在面向對象編程思想中,必須找到要具體實現操作的實體。
通過系統實現添加學員操作
通過系統實現刪除學員操作
....
最終可以得出一個結論:這個通訊管理系統,其主要的實體就是通訊錄管理系統本身
注意事項
① 為了方便維護代碼,一般一個角色一個程序文件
② 項目要有主程序入口,習慣為main.py
3、創建項目
創建類文件 => studentManager.py
創建項目入口文件 => main.py
二、系統的代碼開發
1、學員信息存儲代碼分析
students = [{}, {}, {}]
學員姓名
學員年齡
學員電話
學員信息(姓名、年齡、電話),可以使用字典來表示。但是我們已經學習了面向對象,其學員信息可以完全用對象來進行實現。
學員(主體) => 屬性(姓名、年齡、電話)
2、student.py類文件編寫
需求:
學員信息包含:姓名、年齡、電話
添加__str__
魔法方法,方便查看學員對象信息
# 定義一個Student類
class Student():
? ? # 定義魔術方法,用于初始化屬性信息
? ? def __init__(self, name, age, mobile):
? ? ? ? self.name = name
? ? ? ? self.age = age
? ? ? ? self.mobile = mobile
? ? # 定義魔術方法,用于打印輸出學員信息
? ? def __str__(self):
? ? ? ? return f'{self.name}, {self.age}, {self.mobile}'
3、編寫studentManager.py代碼
studentManager.py
class StudentManager(object):
? ? # 定義__init__魔術方法,用于初始化操作
? ? def __init__(self):
? ? ? ? # 定義一個列表,將來用于保存所有學員信息
? ? ? ? self.student_list = []
未來數據的存儲格式如下:
self.student_list = [p1, p2, p3, p4, ...]
4、學員管理系統具體功能說明
需求:
存儲數據的位置:文件(student.data)
-
加載文件數據
-
修改數據后保存到文件
存儲數據的形式:列表存儲學員對象
系統功能:
① 添加學員信息
② 刪除學員信息
③ 修改學員信息
④ 查詢學員信息
⑤ 顯示所有學員信息
⑥ 保存學員信息
⑦ 退出系統
編寫程序代碼,用于實現以上的所有功能:
☆ 基礎邏輯代碼
class StudentManager(object):
? ? # 定義一個__init__魔術方法,用于初始化數據
? ? def __init__(self):
? ? ? ? # 初始化一個student_list屬性,用于將來保存所有學員對象信息
? ? ? ? self.student_list = []
? ? # 定義load_student()方法
? ? def load_student(self):
? ? ? ? pass
? ? # 定義靜態show_help()方法
? ? @staticmethod
? ? def show_help():
? ? ? ? print('-' * 40)
? ? ? ? print('傳智教育通訊錄管理系統V2.0')
? ? ? ? print('1.添加學員信息')
? ? ? ? print('2.刪除學員信息')
? ? ? ? print('3.修改學員信息')
? ? ? ? print('4.查詢學員信息')
? ? ? ? print('5.顯示所有學員信息')
? ? ? ? # V2.0新增功能
? ? ? ? print('6.保存學員信息')
? ? ? ? print('7.退出系統')
? ? ? ? print('-' * 40)
? ? def add_student(self):
? ? ? ? pass
? ? def del_student(self):
? ? ? ? pass
? ? def mod_student(self):
? ? ? ? pass
? ? def show_student(self):
? ? ? ? pass
? ? def show_all(self):
? ? ? ? pass
? ? def save_student(self):
? ? ? ? pass
? ? # 定義一個run()方法,專門用于實現對管理系統中各個功能調用
? ? def run(self):
? ? ? ? # 1、調用一個學員加載方法,用于加載文件中的所有學員信息,加載完成后,把得到的所有學員信息保存在student_list屬性中
? ? ? ? self.load_student()
? ? ? ? # 2、顯示幫助信息,提示用戶輸入要實現的功能編號
? ? ? ? while True:
? ? ? ? ? ? # 顯示幫助信息
? ? ? ? ? ? self.show_help()
? ? ? ? ? ? # 提示用戶輸入要操作功能編號
? ? ? ? ? ? user_num = int(input('請輸入要操作功能的編號:'))
? ? ? ? ? ? if user_num == 1:
? ? ? ? ? ? ? ? self.add_student()
? ? ? ? ? ? elif user_num == 2:
? ? ? ? ? ? ? ? self.del_student()
? ? ? ? ? ? elif user_num == 3:
? ? ? ? ? ? ? ? self.mod_student()
? ? ? ? ? ? elif user_num == 4:
? ? ? ? ? ? ? ? self.show_student()
? ? ? ? ? ? elif user_num == 5:
? ? ? ? ? ? ? ? self.show_all()
? ? ? ? ? ? elif user_num == 6:
? ? ? ? ? ? ? ? self.save_student()
? ? ? ? ? ? elif user_num == 7:
? ? ? ? ? ? ? ? print('感謝您使用傳智教育通訊錄管理系統V2.0,歡迎下次使用!')
? ? ? ? ? ? ? ? break
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? print('信息輸入錯誤,請重新輸入...')
☆ main.py入口文件的編寫
# 從studentManager模塊中導入StudentManager類功能
from studentManager import StudentManager
# 定義入口代碼
if __name__ == '__main__':
? ? student_manager = StudentManager()
? ? student_manager.run()
☆ 編寫add_student()學員添加方法實現
需求:用戶輸入學員姓名、年齡、手機號,將學員添加到系統。
步驟:
① 用戶輸入姓名、年齡、手機號
② 創建該學員對象(真正添加到列表中的是對象)
③ 將該學員對象添加到列表[] => append()
? ? from student import Student
?? ?... ? ?
? ? ...
? ? ...
? ? def add_student(self):
? ? ? ? # 提示用戶輸入學員信息
? ? ? ? name = input('請輸入學員的姓名:')
? ? ? ? age = int(input('請輸入學員的年齡:'))
? ? ? ? mobile = input('請輸入學員的電話:')
? ? ? ? # 使用Student類實例化對象
? ? ? ? student = Student(name, age, mobile)
? ? ? ? # 調用student_list屬性,追加student對象信息
? ? ? ? self.student_list.append(student)
? ? ? ? print('學員信息已添加成功')
☆ 編寫del_student()學員刪除方法實現
需求:用戶輸入目標學員姓名,如果學員存在則刪除該學員。
步驟:
① 用戶輸入目標學員姓名
② 遍歷學員數據列表,如果用戶輸入的學員姓名存在則刪除,否則則提示該學員不存在。
?? ? ? ?def del_student(self):
? ? ? ? # 提示用戶輸入要刪除的學員姓名
? ? ? ? name = input('請輸入要刪除的學員姓名:')
? ? ? ? # 對student_list屬性(本質列表)進行遍歷
? ? ? ? for i in self.student_list:
? ? ? ? ? ? if i.name == name:
? ? ? ? ? ? ? ? # 找到了要刪除的學員,刪除
? ? ? ? ? ? ? ? self.student_list.remove(i)
? ? ? ? ? ? ? ? print(f'學員{name}信息刪除成功')
? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? print('您要刪除的學員不存在...')
☆ 編寫mod_student()學員修改方法實現
? ? def mod_student(self):
? ? ? ? # 提示用戶輸入要修改的學員姓名
? ? ? ? name = input('請輸入要修改的學員姓名:')
? ? ? ? # 對student_list屬性進行遍歷,判斷要修改的學員姓名是否存在
? ? ? ? for i in self.student_list:
? ? ? ? ? ? if i.name == name:
? ? ? ? ? ? ? ? i.name = input('請輸入修改后的學員姓名:')
? ? ? ? ? ? ? ? i.age = int(input('請輸入修改后的學員年齡:'))
? ? ? ? ? ? ? ? i.mobile = input('請輸入修改后的學員電話:')
? ? ? ? ? ? ? ? print(f'學員信息修改成功,修改后信息如下 => 學員姓名:{i.name},學員年齡:{i.age},學員電話:{i.mobile}')
? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? print('您要修改的學員信息不存在...')
☆ 編寫show_student()學員查詢方法實現
? ? def show_student(self):
? ? ? ? # 提示用戶輸入要查詢的學員姓名
? ? ? ? name = input('請輸入要查詢的學員姓名:')
? ? ? ? # 對student_list屬性進行遍歷
? ? ? ? for i in self.student_list:
? ? ? ? ? ? if i.name == name:
? ? ? ? ? ? ? ? print(i)
? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? print('您要查找的學員信息不存在...')
☆ 編寫show_all()方法查詢所有學員實現
? ? def show_all(self):
? ? ? ? # 直接對列表進行遍歷
? ? ? ? for i in self.student_list:
? ? ? ? ? ? print(i)
☆ 編寫save_student()方法學員信息保存功能實現
需求:將所有學員信息都保存到存儲數據的文件。
步驟:
① 打開文件 ② 讀寫文件 ③ 關閉文件
思考:
① 文件寫入的數據是學員對象的內存地址嗎?
答:一定不能是對象的內存地址,因為隨著系統的運行,內存地址可能會隨時改變。
② 文件內數據要求的數據類型是什么?答:必須是字符串,可以使用str()轉換