您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“基于Python如何實現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“基于Python如何實現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)”吧!
了解面向?qū)ο箝_發(fā)過程中類內(nèi)部功能的分析方法
了解常用系統(tǒng)功能
? 添加
? 刪除
? 修改
? 查詢
使用面向?qū)ο缶幊趟枷胪瓿蓪W(xué)生管理系統(tǒng)的開發(fā),具體如下:
系統(tǒng)要求:學(xué)生數(shù)據(jù)存儲在文件中
系統(tǒng)功能:添加學(xué)生、刪除學(xué)生、修改學(xué)生信息、查詢學(xué)生信息、顯示所有學(xué)生信息、保存學(xué)生信息以及退出系統(tǒng)等功能
角色分析
? 學(xué)生
? 管理系統(tǒng)
工作中注意事項:
為了方便維護(hù)代碼,一般一個角色一個程序文件
項目要有主程序入口,習(xí)慣為 main.py
創(chuàng)建項目目錄,例如:StudentManagerSystem
程序文件如下:
程序入口文件:main.py
學(xué)生文件:student.py
管理系統(tǒng)文件:managerSystem.py
需求:
學(xué)生信息包含:姓名、性別、手機(jī)號
添加 __str__ 魔法方法,方便查看學(xué)生對象信息
程序代碼如下
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}'
存儲數(shù)據(jù)的位置:文件(student.data)
? 加載文件數(shù)據(jù)
? 修改數(shù)據(jù)后保存到文件
存儲數(shù)據(jù)的形式:列表存儲學(xué)生對象
系統(tǒng)功能
? 添加學(xué)生
? 刪除學(xué)生
? 修改學(xué)生信息
? 查詢學(xué)生信息
? 顯示所有學(xué)生信息
? 保存學(xué)生信息
定義管理系統(tǒng)類:
class StudentManager(object): def __init__(self): # 存儲數(shù)據(jù)所用的列表 self.student_list = []
管理系統(tǒng)框架:
需求:系統(tǒng)功能循環(huán)使用,用戶輸入不同的功能序號執(zhí)行不同的功能
步驟:
定義程序入口函數(shù)
? 加載數(shù)據(jù)
? 顯示功能菜單
? 用戶輸入功能序號
? 根據(jù)用戶輸入的功能序號執(zhí)行不同的功能
定義系統(tǒng)功能函數(shù),添加、刪除學(xué)生等
基礎(chǔ)程序代碼如下
from student import * class StudentManager(object): def __init__(self): # 存儲數(shù)據(jù)所用的列表 self.student_list = [] # 一. 程序入口函數(shù),啟動程序后執(zhí)行的函數(shù) def run(self): # 1. 加載學(xué)生信息 self.load_student() while True: # 2. 顯示功能菜單 self.show_menu() # 3. 用戶輸入功能序號 menu_num = int(input('請輸入您需要的功能序號:')) # 4. 根據(jù)用戶輸入的功能序號執(zhí)行不同的功能 if menu_num == 1: # 添加學(xué)生 self.add_student() elif menu_num == 2: # 刪除學(xué)生 self.del_student() elif menu_num == 3: # 修改學(xué)生信息 self.modify_student() elif menu_num == 4: # 查詢學(xué)生信息 self.search_student() elif menu_num == 5: # 顯示所有學(xué)生信息 self.show_student() elif menu_num == 6: # 保存學(xué)生信息 self.save_student() elif menu_num == 7: # 退出系統(tǒng) -> 退出循環(huán) break # 顯示功能菜單 @staticmethod def show_menu(): print('請選擇如下功能:') print('1. 添加學(xué)生') print('2. 刪除學(xué)生') print('3. 修改學(xué)生信息') print('4. 查詢學(xué)生信息') print('5. 顯示所有學(xué)生信息') print('6. 保存學(xué)生信息') print('7. 退出系統(tǒng)') # 添加學(xué)生 def add_student(self): pass # 刪除學(xué)生 def del_student(self): pass # 修改學(xué)生信息 def modify_student(self): pass # 查詢學(xué)生信息 def search_student(self): pass # 顯示所有學(xué)生信息 def show_student(self): pass # 保存學(xué)生信息 def save_student(self): pass # 加載學(xué)生信息 def load_student(self): pass
# 1. 導(dǎo)入managerSystem模塊 from managerSystem import * # 2. 啟動學(xué)生管理系統(tǒng) if __name__ == '__main__': student_manager = StudentManager() student_manager.run()
需求:用戶輸入學(xué)生姓名、性別、手機(jī)號,將學(xué)生添加到系統(tǒng)
步驟
? 用戶輸入姓名、性別、手機(jī)號
? 創(chuàng)建該學(xué)生對象
? 將該學(xué)生對象保存到列表
代碼
# 添加學(xué)生 def add_student(self): # 用戶輸入姓名、性別、手機(jī)號 name = input('請輸入學(xué)生的姓名:') gender = input('請輸入學(xué)生的性別:') tel = input('請輸入學(xué)生的手機(jī)號:') # 創(chuàng)建該學(xué)生對象 student = Student(name, gender, tel) # 將該學(xué)生對象保存到列表 self.student_list.append(student) # 打印提示信息 print(f'學(xué)生【{student.name}, {student.gender}, {student.tel}】添加成功!')
需求:用戶輸入目標(biāo)學(xué)生姓名、性別、手機(jī)號,如果學(xué)生存在則刪除該學(xué)生
步驟:
? 用戶輸入目標(biāo)學(xué)生姓名
? 遍歷學(xué)生數(shù)據(jù)列表,如果用戶輸入的學(xué)生姓名存在則刪除,否則提示該學(xué)生不存在
代碼
# 刪除學(xué)生 def del_student(self): # 1. 用戶輸入目標(biāo)學(xué)生姓名 del_name = input('請輸入要刪除的學(xué)生姓名:') # 2. 如果用戶輸入的學(xué)生姓名存在則刪除,否則提示學(xué)生不存在 for i in self.student_list: if i.name == del_name: self.student_list.remove(i) break else: print('查無此人!')
需求:用戶輸入目標(biāo)學(xué)生姓名,如果學(xué)生存在則修改學(xué)生信息
步驟
? 用戶輸入目標(biāo)學(xué)生姓名
? 遍歷學(xué)生數(shù)據(jù)列表,如果用戶輸入的學(xué)生姓名存在則修改學(xué)生的姓名、性別、手機(jī)號數(shù)據(jù),否則提示該學(xué)生不存在
代碼
# 修改學(xué)生信息 def modify_student(self): # 1. 用戶輸入目標(biāo)學(xué)生姓名 modify_name = input('請輸入要修改的學(xué)生姓名:') # 2. 如果用戶輸入的學(xué)生姓名存在則修改姓名、性別、手機(jī)號數(shù)據(jù),否則提示學(xué)生不存在 for i in self.student_list: if i.name == modify_name: i.name = input('請輸入學(xué)生姓名:') i.gender = input('請輸入學(xué)生性別:') i.tel = input('請輸入學(xué)生手機(jī)號:') print(f'修改該學(xué)生信息成功,姓名: {i.name}, 性別: {i.gender}, 手機(jī)號: {i.tel}') break else: print('查無此人!')
需求:用戶輸入目標(biāo)學(xué)生姓名,如果學(xué)生存在則打印該學(xué)生信息
步驟
? 用戶輸入目標(biāo)學(xué)生姓名
? 遍歷學(xué)生數(shù)據(jù)列表,如果用戶輸入的學(xué)生姓名存在則打印學(xué)生信息,否則提示該學(xué)生不存在
代碼
# 查詢學(xué)生信息 def search_student(self): # 1. 用戶輸入目標(biāo)學(xué)生姓名 search_name = input('請輸入要查詢的學(xué)生姓名:') # 2. 如果用戶輸入的學(xué)生存在,則打印學(xué)生信息,否則提示學(xué)生不存在 for i in self.student_list: if i.name == search_name: print(f'姓名: {i.name}, 性別: {i.gender}, 手機(jī)號: {i.tel}') break else: print('查無此人!')
需求:打印所有學(xué)生的信息
步驟
? 遍歷學(xué)生數(shù)據(jù)列表,打印所有學(xué)生信息
代碼
# 顯示所有學(xué)生信息 def show_student(self): print('姓名\t性別\t手機(jī)號') for i in self.student_list: print(f'{i.name}\t{i.gender}\t{i.tel}')
需求:將修改后的學(xué)生數(shù)據(jù)保存到存儲數(shù)據(jù)的文件
步驟
? 打開文件
? 將數(shù)據(jù)寫入文件
? 關(guān)閉文件
思考:
文件寫入的數(shù)據(jù)是學(xué)生對象的內(nèi)存地址嗎?
文件內(nèi)數(shù)據(jù)要求的數(shù)據(jù)類型是什么?
拓展:__dict__
class A(object): a = 0 def __init__(self): self.b = 1 aa = A() # 返回類內(nèi)部所有屬性和方法的字典 print(A.__dict__) # 返回實例內(nèi)部屬性和值組成的字典 print(aa.__dict__)
代碼
# 保存學(xué)生信息 def save_student(self): # 1. 打開文件 f = open('student.data', 'w') # 2. 將學(xué)生的信息寫入文件 # 注意1:文件寫入的數(shù)據(jù)不能是學(xué)生對象的內(nèi)存地址,需要把學(xué)生數(shù)據(jù)轉(zhuǎn)換成列表字典數(shù)據(jù)再做存儲 new_list = [i.__dict__ for i in self.student_list] # [ { 'name' : 'aa', 'gender' : '女', 'tel' : '123' } ] print(new_list) # 注意2:文件內(nèi)數(shù)據(jù)要求為字符串類型,故需要先轉(zhuǎn)換數(shù)據(jù)類型為字符串才能將數(shù)據(jù)寫入文件 f.write(str(new_list)) # 3. 關(guān)閉文件 f.close()
需求:每次進(jìn)入系統(tǒng)后,修改的數(shù)據(jù)是文件里面的數(shù)據(jù)
步驟
嘗試以 “r” 模式打開學(xué)生數(shù)據(jù)的文件,如果文件不存在則以 “w” 模式打開文件
如果文件存在則讀取數(shù)據(jù)并存儲數(shù)據(jù)
? 讀取數(shù)據(jù)
? 轉(zhuǎn)換數(shù)據(jù)類型為列表并轉(zhuǎn)換列表內(nèi)的字典為對象
? 存儲學(xué)生數(shù)據(jù)到學(xué)生列表
關(guān)閉文件
代碼
# 加載學(xué)生信息 def load_student(self): # 嘗試以 “r” 模式打開數(shù)據(jù)文件,文件不存在則提示用戶;文件存在則讀取數(shù)據(jù)并存儲數(shù)據(jù) try: f = open('student.data', 'r') except: f = open('student.data', 'w') else: # 讀取數(shù)據(jù) data = f.read() # 轉(zhuǎn)換數(shù)據(jù)類型為列表并轉(zhuǎn)換列表內(nèi)的字典為對象 new_list = eval(data) # 存儲學(xué)生數(shù)據(jù)到學(xué)生列表 self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list] finally: # 關(guān)閉文件 f.close()
# 1. 導(dǎo)入managerSystem模塊 from managerSystem import * # 2. 啟動學(xué)生管理系統(tǒng) 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): # 存儲數(shù)據(jù)所用的列表 self.student_list = [] # 一. 程序入口函數(shù),啟動程序后執(zhí)行的函數(shù) def run(self): # 1. 加載學(xué)生信息 self.load_student() while True: # 2. 顯示功能菜單 self.show_menu() # 3. 用戶輸入功能序號 menu_num = int(input('請輸入您需要的功能序號:')) # 4. 根據(jù)用戶輸入的功能序號執(zhí)行不同的功能 if menu_num == 1: # 添加學(xué)生 self.add_student() elif menu_num == 2: # 刪除學(xué)生 self.del_student() elif menu_num == 3: # 修改學(xué)生信息 self.modify_student() elif menu_num == 4: # 查詢學(xué)生信息 self.search_student() elif menu_num == 5: # 顯示所有學(xué)生信息 self.show_student() elif menu_num == 6: # 保存學(xué)生信息 self.save_student() elif menu_num == 7: # 退出系統(tǒng) -> 退出循環(huán) print('感謝您的使用,祝您生活愉快!') break # 顯示功能菜單 @staticmethod def show_menu(): print('請選擇如下功能:') print('1. 添加學(xué)生') print('2. 刪除學(xué)生') print('3. 修改學(xué)生信息') print('4. 查詢學(xué)生信息') print('5. 顯示所有學(xué)生信息') print('6. 保存學(xué)生信息') print('7. 退出系統(tǒng)') # 添加學(xué)生 def add_student(self): name = input('請輸入學(xué)生的姓名:') gender = input('請輸入學(xué)生的性別:') tel = input('請輸入學(xué)生的手機(jī)號:') student = Student(name, gender, tel) self.student_list.append(student) print(f'學(xué)生【{student.name}, {student.gender}, {student.tel}】添加成功!') # 刪除學(xué)生 def del_student(self): # 1. 用戶輸入目標(biāo)學(xué)生姓名 del_name = input('請輸入要刪除的學(xué)生姓名:') # 2. 如果用戶輸入的學(xué)生姓名存在則刪除,反之提示學(xué)生不存在 for i in self.student_list: if i.name == del_name: self.student_list.remove(i) break else: print('查無此人!') # 修改學(xué)生信息 def modify_student(self): # 1. 用戶輸入目標(biāo)學(xué)生姓名 modify_name = input('請輸入要修改的學(xué)生姓名:') # 2. 如果用戶輸入的學(xué)生姓名存在則修改姓名、性別、手機(jī)號數(shù)據(jù),否則提示學(xué)生不存在 for i in self.student_list: if i.name == modify_name: i.name = input('請輸入學(xué)生姓名:') i.gender = input('請輸入學(xué)生性別:') i.tel = input('請輸入學(xué)生手機(jī)號:') print(f'修改該學(xué)生信息成功,姓名: {i.name}, 性別: {i.gender}, 手機(jī)號: {i.tel}') break else: print('查無此人!') # 查詢學(xué)生信息 def search_student(self): # 1. 用戶輸入目標(biāo)學(xué)生姓名 search_name = input('請輸入要查詢的學(xué)生姓名:') # 2. 如果用戶輸入的學(xué)生存在,則打印學(xué)生信息,否則提示學(xué)生不存在 for i in self.student_list: if i.name == search_name: print(f'姓名: {i.name}, 性別: {i.gender}, 手機(jī)號: {i.tel}') break else: print('查無此人!') # 顯示所有學(xué)生信息 def show_student(self): print('姓名\t性別\t手機(jī)號') for i in self.student_list: print(f'{i.name}\t{i.gender}\t{i.tel}') # 保存學(xué)生信息 def save_student(self): # 1. 打開文件 f = open('student.data', 'w') # 2. 將學(xué)生的信息寫入文件 # 注意1:文件寫入的數(shù)據(jù)不能是學(xué)生對象的內(nèi)存地址,需要把學(xué)生數(shù)據(jù)轉(zhuǎn)換成列表字典數(shù)據(jù)再做存儲 new_list = [i.__dict__ for i in self.student_list] # [ { 'name' : 'aa', 'gender' : '女', 'tel' : '123' } ] print(new_list) # 注意2:文件內(nèi)數(shù)據(jù)要求為字符串類型,故需要先轉(zhuǎn)換數(shù)據(jù)類型為字符串才能將數(shù)據(jù)寫入文件 f.write(str(new_list)) # 3. 關(guān)閉文件 f.close() # 加載學(xué)生信息 def load_student(self): # 嘗試以 “r” 模式打開數(shù)據(jù)文件,文件不存在則提示用戶;文件存在則讀取數(shù)據(jù)并存儲數(shù)據(jù) try: f = open('student.data', 'r') except: f = open('student.data', 'w') else: # 讀取數(shù)據(jù) data = f.read() # 轉(zhuǎn)換數(shù)據(jù)類型為列表并轉(zhuǎn)換列表內(nèi)的字典為對象 new_list = eval(data) # 存儲學(xué)生數(shù)據(jù)到學(xué)生列表 self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list] finally: # 關(guān)閉文件 f.close()
到此,相信大家對“基于Python如何實現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。