(B)のコーディング


     1  -- ******  クラス定義
     2
     3  class 従業員 ()
     4    名前     : string
     5    職種     : string
     6    年齢     : number
     7    住所     : string
     8  end
     9
    10  class SE (従業員)
    11    担当機種 : string
    12  end
    13
    14  class 営業 (従業員)
    15    売上     : number := 0
    16  end
    17
    18  class 事務 (従業員) end
    19
    20  class 会社 ()
    21    従業員リスト : sequence of 従業員
    22  end
    23
    24  -- *********  メソッド
    25
    26  method 開始 会社 ()
    27    variable fd   : file
    28             キー : string
    29
    30    open fd "人事マスタ" input
    31    while not eof(fd) do
    32      read fd キー
    33      switch キー
    34        case "SE" insert new_SE() after 従業員リスト
    35        case "営業" insert new_営業() after 従業員リスト
    36        case "事務" insert new_事務() after 従業員リスト
    37      end
    38      send @従業員リスト ファイル入力 (fd, キー)
    39    end
    40    expose self using ポリモフィズム
    41  end
    42
    43  method ファイル入力 従業員 (fd : file, キー : string)
    44     set 職種 := キー
    45     read fd 名前, 年齢, 住所
    46  end
    47
    48  method ファイル入力 SE (fd : file, キー : string)
    49     set 職種 := キー
    50     read fd 名前, 年齢, 住所, 担当機種
    51  end
    52
    53  method ファイル入力 営業 (fd : file, キー : string)
    54     set 職種 := キー
    55     read fd 名前, 年齢, 住所, 売上
    56  end
    57
    58  method 書式 会社 ( x : 従業員, i : index )
    59     format "~A" ( x.名前 )
    60  end
    61
    62  method 選択 会社 ( x : 従業員, i : index )
    63     expose x using 表示
    64  end
    65
    66  -- ****** プレゼンテーション
    67
    68  frame ポリモフィズム 会社 { pushpin : true }
    69     scrollinglist : 従業員リスト
    70         { formatmethod : 書式,
    71           selectmethod : 選択 }
    72  end
    73
    74  frame 共通 従業員
    75    textfield    : 名前
    76    abbrevfield  : 職種
    77    numericfield : 年齢
    78    textfield    : 住所
    79  end
    80
    81  frame 表示 従業員 { pushpin : true }
    82     panel        : 共通
    83  end
    84
    85  frame 表示 SE { pushpin : true }
    86     panel      : 共通
    87     textfield  : 担当機種
    88  end
    89
    90  frame 表示 営業 { pushpin : true }
    91     panel        : 共通
    92     numericfield : 売上
    93  end
    94
    95  start 会社 with 開始