このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/922
#  [1] C言語プログラミング演習  
#  [2] 問題文(含コード&リンク 
#  <<920の課題を基に「引出し」の機能を追加せよ.具体的には,
# 口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をする
# プログラムを追加すればよい.機能の選択は,起動時できるようにすること.  
#   
#          % ./withdraw 
#          [0]終了  [1]残高表示  [2]引出し: 2 
#          口座番号を入力してください: 5000           ← 存在しない 
#          暗証番号を入力してください: 0123 
#          口座番号または暗証番号が間違っています. 
#          口座番号を入力してください: 9012 
#          暗証番号を入力してください: 5555           ← 間違っている 
#          口座番号または暗証番号が間違っています. 
#          口座番号を入力してください: 9012 
#          暗証番号を入力してください: 0123 
#          引出し額を入力してください: 1000000        ← 預金額より多い 
#          預金額が不足しています. 
#          口座番号を入力してください: 9012 
#          暗証番号を入力してください: 0123 
#          引出し額を入力してください: 20000 
#          ありがとうございました.残高は 518600 円です. 
#          [0]終了  [1]残高表示  [2]引出し: 2         ← 始めに戻る 
#   

'「引出し」の機能を追加せよ.具体的には,口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をするプログラムを追加すればよい.'(_引き出し_または_口座残高表示) :-
        「引出し」または「口座残高表示」(_引き出し_または_口座残高表示).

「引出し」または「預金残高表示」(引き出し) :-
        repeat,
        口座番号の入力(_口座番号),
        暗証番号の入力と確認(_口座番号),
        支払い(_口座番号),!.

「引出し」または「預金残高表示」(預金残高表示) :-
        repeat,
        口座番号の入力(_口座番号),
        暗証番号の入力と確認(_口座番号),
        「預金残高表示」(_口座番号),!.

支払い(_口座番号) :-
        引出額の入力(_引出額),
        預金口座(_,_口座番号,_預金残高),
        支払い(_口座番号,_預金残高,_引出額),!.

支払い(_口座番号,_預金残高1,_引出額) :-
        _引出額 > _預金残高1,
        write('口座残高が不足です\n御支払いできません\n'),!.

支払い(_口座番号,_預金残高1,_引出額) :-
        _引出額 =< _預金残高,
        支払いオペレーション,
        預金残高の更新(_口座番号,_引出額,_預金残高),
        預金残高を画面へ出力する(_口座番号),!.

口座番号の入力(_口座番号) :-
        write('口座番号を入力してください : '),
        get_integer(_口座番号1),
        口座番号の入力(_口座番号1,_口座番号).

口座番号の入力(_口座番号,_口座番号) :-
        預金口座(_,_口座番号,_),!.
口座番号の入力(_口座番号1,_口座番号) :-
        write_formatted('口座番号%tは正しい口座番号ではありません \nもう一度、',[_口座番号1]),
        口座番号の入力(_口座番号).

暗証番号の入力と確認(_口座番号) :-
        rawmode,
        write('暗証番号を入力してください : '),
        findall(C,(for(1,N,4),get_char(C),put_char(*)),L),
        norawmode,
        number_chars(_暗証番号,L),
        _暗証番号 is (_口座番号 + 1111) mod 10000,!.
暗証番号の入力と確認(_口座番号) :-
        write('暗証番号が一致しませんでした\n'),
        fail.

支払額の入力(_引出額) :-
        write('引出額を入力してください : '),
        get_integer(_引出額),

預金残高の更新(_口座番号,_引出額,_預金残高) :-
        retract(預金口座(_氏名,_口座番号,_預金残高1)),
        _預金残高 is _預金残高1 - _引出額,
        assertz(預金口座(_氏名,_口座番号,_預金残高)),!.

預金残高を画面へ出力する :-
        ひとり分の預金残高を表示する(_口座番号),!.

支払いオペレーション.