溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于Python如何實現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)

發(fā)布時間:2022-07-21 10:06:47 來源:億速云 閱讀:208 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“基于Python如何實現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“基于Python如何實現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)”吧!

    一、目標(biāo)

    了解面向?qū)ο箝_發(fā)過程中類內(nèi)部功能的分析方法

    了解常用系統(tǒng)功能

    ? 添加

    ? 刪除

    ? 修改

    ? 查詢

    二、系統(tǒng)需求

    使用面向?qū)ο缶幊趟枷胪瓿蓪W(xué)生管理系統(tǒng)的開發(fā),具體如下:

    系統(tǒng)要求:學(xué)生數(shù)據(jù)存儲在文件中

    系統(tǒng)功能:添加學(xué)生、刪除學(xué)生、修改學(xué)生信息、查詢學(xué)生信息、顯示所有學(xué)生信息、保存學(xué)生信息以及退出系統(tǒng)等功能

    三、準(zhǔn)備程序文件

    1. 分析

    角色分析

    ? 學(xué)生

    ? 管理系統(tǒng)

    工作中注意事項:

    為了方便維護(hù)代碼,一般一個角色一個程序文件

    項目要有主程序入口,習(xí)慣為 main.py

    2. 創(chuàng)建程序文件

    創(chuàng)建項目目錄,例如:StudentManagerSystem

    程序文件如下:

    • 程序入口文件:main.py

    • 學(xué)生文件:student.py

    • 管理系統(tǒng)文件:managerSystem.py

    四、書寫程序

    1. student.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}'

    2. 管理系統(tǒng)需求

    存儲數(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

    3. main.py

    # 1. 導(dǎo)入managerSystem模塊
    from managerSystem import *
    
    # 2. 啟動學(xué)生管理系統(tǒng)
    if __name__ == '__main__':
        student_manager = StudentManager()
    
        student_manager.run()

    4. 定義系統(tǒng)功能函數(shù)

    4.1 添加學(xué)生

    需求:用戶輸入學(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}】添加成功!')

    4.2 刪除學(xué)生

    需求:用戶輸入目標(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('查無此人!')

    4.3 修改學(xué)生信息

    需求:用戶輸入目標(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('查無此人!')

    4.5 查詢學(xué)生信息

    需求:用戶輸入目標(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('查無此人!')

    4.6 顯示所有學(xué)生信息

    需求:打印所有學(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}')

    4.7 保存學(xué)生信息

    需求:將修改后的學(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__)

    基于Python如何實現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)

    代碼

    # 保存學(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()

    4.8 加載學(xué)生信息

    需求:每次進(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()

    五、源代碼

    main.py

    # 1. 導(dǎo)入managerSystem模塊
    from managerSystem import *
    
    # 2. 啟動學(xué)生管理系統(tǒng)
    if __name__ == '__main__':
        student_manager = StudentManager()
        student_manager.run()

    student.py

    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}'

    managerSystem.py

    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í)!

    向AI問一下細(xì)節(jié)

    免責(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)容。

    AI