Pythonオブジェクト版学習者向け管理システム

9240 ワード

ターゲット
  • オブジェクト開発プロセスにおけるクラス内部機能の解析方法
  • を理解する.
  • 一般的なシステム機能の理解
  • 追加
  • 削除
  • 修正
  • クエリー

  • 一.システム要件
    対象向けプログラミング思想を用いて学習者管理システムの開発を完成し、具体的には以下の通りである.
  • システム要件:学習者データがファイルに格納される
  • システム機能:学習者の追加、学習者の削除、学習者情報の変更、学習者情報の照会、すべての学習者情報の表示、学習者情報の保存、システムの終了などの機能.

  • 二.プログラムファイルの準備
    2.1分析
  • ロール分析
  • 学習者
  • 管理システム

  • 仕事上の注意
  • コードのメンテナンスを容易にするために、一般的に1つのロールのプログラムファイルです.
  • プロジェクトにはメインプログラムの入り口があり、習慣はmain.py
  • である.
    2.2プログラムファイルの作成
    プロジェクトディレクトリの作成(StudentManagerSystemなど)
    プログラムファイルは次のとおりです.
  • プログラムエントリファイル:main.py
  • 学習者ファイル:student.py
  • 管理システムファイル:managerSystem.py

  • 三.ライティングプログラム
    3.1 student.py
    必要:
  • 学生情報には、名前、性別、携帯電話番号が含まれています.
  • __str__魔法方法を追加し、学習者のオブジェクト情報
  • を簡単に表示できます.
    3.1.2プログラムコード
    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}'

    3.2 managerSystem.py
    必要:
  • データを格納する場所:ファイル(student.data)
  • ファイルデータをロード
  • データを修正してファイル
  • に保存する.
  • 格納データの形式:リスト格納学習者オブジェクト
  • システム機能
  • 学習者を追加
  • 学習者
  • を削除
  • 修正学習者
  • 学習者情報の照会
  • すべての学習者情報を表示
  • 学習者情報を保存
  • システム
  • を終了する

    3.2.1クラスの定義
    class StudentManager(object):
        def __init__(self):
            #          
            self.student_list = []

    3.2.2システムフレームワークの管理
    需要:システム機能の循環使用、ユーザーは異なる機能番号を入力して異なる機能を実行します.
  • ステップ
  • プログラムエントリ関数の定義
  • ロードデータ
  • 表示機能メニュー
  • ユーザ入力機能番号
  • は、ユーザが入力機能番号に応じて異なる機能
  • を実行する.
  • システム機能関数を定義し、学習者などの
  • を追加、削除する.
    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
    
        #  .       
        # 2.1       
        @staticmethod
        def show_menu():
            print('       -----------------')
            print('1:    ')
            print('2:    ')
            print('3:      ')
            print('4:      ')
            print('5:        ')
            print('6:      ')
            print('7:    ')
    
        # 2.2     
        def add_student(self):
            pass
    
        # 2.3     
        def del_student(self):
            pass
    
        # 2.4       
        def modify_student(self):
            pass
    
        # 2.5       
        def search_student(self):
            pass
    
        # 2.6         
        def show_student(self):
            pass
    
        # 2.7       
        def save_student(self):
            pass
    
        # 2.8       
        def load_student(self):
            pass

    3.3 main.py
    # 1.   managerSystem  
    from managerSystem import *
    
    
    # 2.         
    if __name__ == '__main__':
        student_manager = StudentManager()
    
        student_manager.run()

    3.4システム機能関数の定義
    3.4.1機能の追加
  • 需要:ユーザーは学生の名前、性別、携帯電話番号を入力し、学生をシステムに追加します.
  • ステップ
  • ユーザ入力氏名、性別、携帯電話番号
  • 学習者オブジェクトを作成する
  • 学習者オブジェクトをリスト
  • に追加
  • コード
  • from student import *
    
    
    class StudentManager(object):
    		......
        
        # 2.2     
        def add_student(self):
            # 1.       、  、   
            name = input('       :')
            gender = input('       :')
            tel = input('        :')
    
            # 2.       :       ,     
            student = Student(name, gender, tel)
    
            # 3.            
            self.student_list.append(student)
            
            #     
            print(self.student_list)
            print(student)

    3.4.2学習者の削除
  • 需要:ユーザーは対象の学習者の名前を入力し、学習者が存在する場合は削除します.
  • ステップ
  • ユーザー入力対象学習者名
  • 学習者データリストを巡回し、ユーザーが入力した学習者の名前が存在する場合は削除します.そうでない場合は、学習者が存在しないことを示します.

  • コード
  •     # 2.3     :         
        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('    !')
    
            #       ,      
            print(self.student_list)

    3.4.3学習者情報の修正
  • 需要:ユーザーは対象の学習者の名前を入力し、学習者が存在する場合は学習者の情報を変更します.
  • ステップ
  • ユーザーは目標学習者の名前を入力します.
  • 学習者データのリストを巡回し、ユーザーが入力した学習者の名前が存在する場合、学習者の名前、性別、携帯電話番号のデータを変更します.そうしないと、学習者が存在しないことを示します.

  • コード
  •     # 2.4       
        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('    !')

    3.4.5学習者情報の照会
  • 需要:ユーザーは目標学習者の名前を入力し、学習者が存在する場合はその学習者情報
  • を印刷する.
  • ステップ
  • ユーザー入力対象学習者名
  • 学習者データリストを巡回し、ユーザーが入力した学習者の名前が存在する場合は学習者情報を印刷します.そうしないと、学習者が存在しないことを示します.

  • コード
  •     # 2.5       
        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('    !')

    3.4.6すべての学習者情報を表示する
  • すべての学習者情報を印刷
  • ステップ
  • 学習者データリストを巡回し、すべての学習者情報
  • を印刷する.
  • コード
  •     # 2.6         
        def show_student(self):
            print('  \t  \t   ')
            for i in self.student_list:
                print(f'{i.name}\t{i.gender}\t{i.tel}')

    3.4.7学習者情報の保存
  • 要件:変更後の学習者データをデータを格納するファイルに保存します.
  • ステップ
  • ファイルを開く
  • ファイル書き込みデータ
  • ファイル
  • を閉じる

    考える
  • ファイルに書き込まれたデータは学習者オブジェクトのメモリアドレスですか?
  • ファイル内のデータ要求のデータ型は何ですか?
  • 開拓__dict__
  • class A(object):
        a = 0
    
        def __init__(self):
            self.b = 1
    
    
    aa = A()
    #                  
    print(A.__dict__)
    #              
    print(aa.__dict__)

    Pythonで
  • コード
  •     # 2.7       
        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': 'nv', 'tel': '111'}]
            print(new_list)
    
            #   2:             ,                      
            f.write(str(new_list))
    
            # 3.     
            f.close()

    3.4.8学習者情報のロード
  • 需要:システムに入るたびに、修正されたデータはファイルの中のデータ
  • である.
  • ステップ
  • 学習者データファイルを"r"モードで開くことを試み、ファイルが存在しない場合は"w"モードで
  • ファイルを開く.
  • ファイルが存在する場合はデータを読み出して格納する
  • データ
  • を読み出す.
  • データ型をリストに変換するリスト内の辞書をオブジェクトに変換する
  • .
  • 学習者データを学習者リスト
  • に格納する.
  • ファイル
  • を閉じる
  • コード
  •     # 2.8       
        def load_student(self):
            #    "r"        ,          ;    (    )     
            try:
                f = open('student.data', 'r')
            except:
                f = open('student.data', 'w')
            else:
                # 1.     
                data = f.read()
    
                # 2.                         ,                         
                new_list = eval(data)
                self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
            finally:
                # 3.     
                f.close()

    四.まとめ
  • 関数
  • 定義および呼び出し
  • パラメータの使用
  • オブジェクト向け
  • 定義クラス
  • オブジェクト
  • を作成する
  • インスタンス属性
  • を定義および呼び出す.
  • インスタンスメソッド
  • を定義および呼び出す
  • データ型
  • リスト
  • 削除データ
  • を追加
  • リスト導出式
  • 辞書
  • 文字列
  • ファイルアクション
  • ファイルを開く
  • 読み書き
  • ファイル
  • を閉じる