このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1325685876/581
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):ttp://www1.axfc.net/uploader/Sc/so/312148 
#  
#  データ例のように名前,性別, 5教科(国語,算数,理科,社会,英語)の試験の
#  得点を格納したファイルがある.このデータを用いて実行例のような操作を行うことが
#  できるプログラムを作成せよ.ただし、構造体を用いてプログラム作成を行うこと
#  ※データは読み込み毎に上書きされる仕様でかまわない(保存する必要は無い)
#  
#  【データ例】
#  データファイル名は classA.txt
#  Andrew M  92  63  85  71  81 
#  Helen  F  81  89  83  79  51 
#  Jane   F  65  75  59  81  69 
#  John   M  85  98  95  81  91 
#  Susan  F  60  50  53  69  43 
#  Thomas M  72  62  79  66  72 
#  
#  
#  データファイル名は classB.txt 
#  Ichiro M  82  65  75  81  41 
#  Jiro   M  61  72  51  41  69 
#  Sabu   M  55  68  85  81  81 
#  Hanako F  90  80  93  89  93 
#  
#  
#  【実行例】 
#  ./a.out? 
#  ----------------------- Menu --------------------------
#  1.データ読込 
#  2.一覧表示 
#  0.終了 
#  ---------------------------------------------------------------
#  コマンド >> 1 
#  [データ読込]
#  ファイル名を入力してください >> classA.txt
#  ファイル classA.txtからデータを読み込みました. 
#  ----------------------- Menu --------------------------
#  1.データ読込 
#  2.一覧表示 
#  0.終了 
#  ---------------------------------------------------------------
#  コマンド >> 2 
#  [一覧表示 ]
#  名前	性別	国語	数学	理科	社会	英語	平均点 
#  Andrew	M 	92 	63 	85 	71 	81 	78.4
#  Helen	F 	81 	89 	83 	79 	51 	76.6
#  Jane	F 	65 	75 	59 	81 	69 	69.8
#  John	M 	85 	98 	95 	81 	91 	90.0
#  Susan	F 	60 	50 	53 	69 	43 	55.0
#  Thomas	M 	72 	62 	79 	66 	72 	70.2
#  
#  ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Menu ‐‐‐‐‐‐‐‐‐‐‐‐‐‐
#  1.データ読込 
#  2.一覧表示 
#  0.終了 
#  ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
#  コマンド >> 0 
#  プログラムを終了します

操作の選択 :-
        repeat,
        メニュー表示,
        操作の選択(_コマンド).

メニュー表示 :-
        write('----------------------- Menu --------------------------\n1.データ読込\n2.一覧表示\n0.終了\n----------------------------------------------\n'),

操作の選択(0).
操作の選択(1) :-
        データの読み込み,
        fail.
操作の選択(2) :-
        一覧表示,
        fail.

コマンドの入力(_コマンド) :-
        write('コマンド >> '),
        get_line(_コマンド).

'データ読込' :-
        write('ファイル名を入力してください : '),
        get_line(_ファイル名),
        split(_ファイル名,['Class','.txt'],[_クラス名]),
        既存データの削除(_クラス名),
        'データ読込'(_ファイル名,_クラス名).

'データ読込'(_ファイル名,_クラス名) :-
        get_split_lines(_ファイル名,[' '],LL1),
        append(_,[L|R],LL1),
        P =.. [試験の得点,_クラス名|L],
        assertz(P),
        R = [].

既存データの削除(_クラス名) :-
        P =.. [試験の得点,_クラス名,_,_,_,_,_,_,_,_],
        retract(P),
        fail.
既存データの削除(_).

一覧表示 :-
        write('名前 性別 国語 数学 理科 社会 英語 平均点\n'),
        試験の得点(_クラス,_名前,_性別,_国語,_数学,_理科,_社会,_英語,_平均点),
        writef('%10l %t %4r %4r %4r %4r %4r',[_名前,_性別,_国語,_数学,_理科,_社会,_英語]),
        format(' ~1f\n',[_平均点]),
        fail.
一覧表示.