欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2022年07月20日 14:59:40   作者:程序喵正在路上  
這篇文章主要為大家詳細(xì)介紹了如何利用python實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο蟀妫?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、目標(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)

工作中注意事項(xiàng):

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

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

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

創(chuàng)建項(xià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__)
# 返回實(shí)例內(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()

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()

六、總結(jié)

知識點(diǎn)

函數(shù)

? 定義和調(diào)用

? 參數(shù)的使用

面向?qū)ο?/p>

? 定義類

? 創(chuàng)建對象

? 定義和調(diào)用實(shí)例屬性

? 定義和調(diào)用實(shí)例方法

數(shù)據(jù)類型

? 列表

增加刪除數(shù)據(jù)

列表推導(dǎo)式

? 字典

? 字符串

文件操作

? 打開文件

? 讀取或?qū)懭?/p>

? 關(guān)閉文件

到此這篇關(guān)于基于Python實(shí)現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)的文章就介紹到這了,更多相關(guān)Python學(xué)生管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 下載文件的多種方法匯總

    python 下載文件的多種方法匯總

    這篇文章主要介紹了python 下載文件的多種方法匯總,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • python 實(shí)現(xiàn)讀取一個(gè)excel多個(gè)sheet表并合并的方法

    python 實(shí)現(xiàn)讀取一個(gè)excel多個(gè)sheet表并合并的方法

    今天小編就為大家分享一篇python 實(shí)現(xiàn)讀取一個(gè)excel多個(gè)sheet表并合并的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python生成tensorflow輸入輸出的圖像格式的方法

    python生成tensorflow輸入輸出的圖像格式的方法

    本篇文章主要介紹了python生成tensorflow輸入輸出的圖像格式的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • python之基數(shù)排序的實(shí)現(xiàn)

    python之基數(shù)排序的實(shí)現(xiàn)

    這篇文章主要介紹了python之基數(shù)排序的實(shí)現(xiàn),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Python排序函數(shù)的使用方法詳解

    Python排序函數(shù)的使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Python排序函數(shù)使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python?copy()與deepcopy()方法之間有什么區(qū)別

    Python?copy()與deepcopy()方法之間有什么區(qū)別

    這篇文章主要介紹了Python中的copy()和deepcopy(),下面詳細(xì)介紹該內(nèi)容并附上詳細(xì)代碼,需要的朋友可以參考一下文章的具體內(nèi)容,希望對你有所幫助
    2022-10-10
  • Python中map,reduce,filter和sorted函數(shù)的使用方法

    Python中map,reduce,filter和sorted函數(shù)的使用方法

    這篇文章主要介紹了Python中map,reduce,filter和sorted函數(shù)的使用方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • Pytho樹的直徑的計(jì)算實(shí)現(xiàn)

    Pytho樹的直徑的計(jì)算實(shí)現(xiàn)

    樹的直徑是樹中任意兩個(gè)節(jié)點(diǎn)之間最長路徑的長度,本文主要介紹了Pytho樹的直徑的計(jì)算實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Python中裝飾器高級用法詳解

    Python中裝飾器高級用法詳解

    這篇文章主要介紹了Python中的裝飾器的高級用法,以實(shí)例形式詳細(xì)的分析了Python中的裝飾器的使用技巧及相關(guān)注意事項(xiàng)
    2017-12-12
  • python超時(shí)重新請求解決方案

    python超時(shí)重新請求解決方案

    這篇文章主要介紹了python超時(shí)重新請求解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評論