このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354070278/84
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク): 
#  コマンド選択で,0) 終了,1) 追加,2) 検索(id),3) リスト表示,4) 変更 5) 削除 6) 特殊機能 が行える商品在庫管理プログラムを作成する。 
#  データは,商品の番号 商品名 数 単価 の形式で商品のデータを持っているファイルとする.
#  上の機能ルーチンは,全て関数として作成すること. 
#  ただし,追加と検索は実装済みである. 
#   
#   

'コマンド選択で,0) 終了,1) 追加,2) 検索(id),3) リスト表示,4) 変更 5) 削除 6) 特殊機能 が行える商品在庫管理プログラムを作成する。データは,商品の番号 商品名 数 単価 の形式で商品のデータを持っているファイルとする.' :-
        reconsult('在庫管理.pro'),
        コマンド選択で(_コマンド),
        '終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(_コマンド),
        '在庫管理.proの保存'.

コマンド選択で(_コマンド) :-
        整数を得る('0) 終了,1) 追加,2) 検索(id),3) リスト表示,4) 変更 5) 削除 6) 特殊機能を整数で',member(_整数,between(0,6,_整数),_整数),
        nth0(_整数,[終了,追加,'検索(id)',リスト表示,変更,削除,特殊機能],_コマンド).

'終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(終了) :- !.
'終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(追加) :-
        在庫追加.
'終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(検索) :-
        在庫検索.
'終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(リスト表示) :-
        リスト表示.
'終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(変更) :-
        在庫変更.
'終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(削除) :-
        在庫削除.
'終了,追加,検索(id),リスト表示,変更,削除,特殊機能,が行える'(特殊機能) :-
        特殊機能.

在庫追加 :-
        商品名を得る(_商品名),
        数量を得る(_数量),
        在庫追加(_商品名,_数量).

在庫追加(_商品名,_数量).
        retract(在庫(_商品名,_現在の数量)),
        _更新された数量 is _現在の数量 + _数量,
        asserta(在庫(_商品名,_更新された数量)),!.
在庫追加(追加,_商品名,_数量) :-
        asserta(在庫(_商品名,_数量)),!.

'在庫検索(id)' :-
        商品名を得る(_商品名),
        在庫(_商品名,_数量),
        writef('現在の在庫数量は %t です\n',[_数量]),!.
'在庫検索(id)' :-
        write('現在の在庫はありません\n').        

リスト表示 :-
        在庫(_商品名,_数量),
        writef('%t,%t\n',[_商品名,_数量]),
        fail.
リスト表示.

在庫変更 :-
        整数を得る('1..商品名 2..数量 どちらを変更するか',between(1,2,_整数),_整数),
        在庫変更(_整数).

在庫変更(1) :-
        現在の商品名を得る(_現在の商品名),
        正しい商品名を得る(_正しい商品名),
        在庫変更(_現在の商品名,_正しい商品名),!.
在庫変更(1) :-
        在庫変更(1).
在庫変更(2) :-
        商品名を得る(_商品名),
        '診断:: 商品名'(_商品名),
        数量を得る(_数量),
        retract(在庫(_商品名,_)),
        asserta(在庫(_商品名,_数量)),!.

現在の商品名を得る(_現在の商品名) :-
        write('現在の商品名を入力してください : '),
        get_line(_現在の商品名),
        '診断:: 現在の商品名'(_現在の商品名),!.

'診断:: 現在の商品名'(_現在の商品名) :-
        在庫(_現在の商品名,_),!.
'診断:: 現在の商品名'(_商品名) :-
        writef('入力された商品名の在庫はありません\n',[_商品名]),
        fail.

正しい商品名を得る(_正しい商品名) :-
        write('正しい商品名を入力してください : '),
        get_line(_正しい商品名),!.

'診断:: 商品名'(_商品名) :-
        在庫(_商品名,_),!.
'診断:: 商品名'(_商品名) :-
        writef('指定された商品名の %t の在庫登録はありません\n',[_商品名]),
        fail.

在庫変更(_現在の商品名,_正しい商品名) :-
        retract(在庫(_現在の商品名,_数量)),
        asserta(在庫(_正しいの商品名,_数量)),!.

在庫削除 :-
        商品名を得る(_商品名),
        retract(在庫(_商品名,_)).

特殊機能.

数量を得る(_数量) :-
        数を得る(数量,true,_数量).

'在庫管理.proの保存' :-
        tell('在庫管理.pro'),
        listing(在庫),
        told.