?- 'a##'. c133-827#
このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1260532772/827
#  770で一度投稿しましたが問題文に不足が多かったため再度投稿します。 
#  [1] 授業単元:プログラミング  
#  [2] 問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10362.txt[3] 環境  
# 下記の機能を備えた極めて単純なデータベースシステムであるカード型データベースシステムの構築を考える。 
# 課題7-1
# 下記のような方針でプログラムを作成せよ。
# 
# 新しい科目を登録する機能
# すでに登録されている科目を修正(更新)する機能 
# 登録科目のソート(並び替え)を行う機能
# 登録科目の一部分のみを検索して取り出し、表示する機能
# 登録科目から、卒業までに必要な単位を計算し、表示する機能
# データベースファイルの仕様
# データベースファイルについては、本格的なデータベースになると、アクセス性や
# 安定性など様々な要求を満たす必要があるが、ここでは最も単純なテキストファイルとする。
# さらに、書き込みをfprintfで、読み込みをfscanfで行えるように、 1行中に、
# それぞれの項目(フィールド)がスペースで区切られているようなファイルとする。
# なお、この場合、それぞれの項目はスペースを含んでいけないこととなる。
# 履修科目データベースシステムの例においては、例えば、
# 単位の種類(必修、選択必修など)、単位数、年次、前期か後期か、再履修かどうか、成績の6項目を含むこととする。
# ここで、いくつかの選択肢から選択するものについては、数字で置き換えることとする。
# このような仕様に基づいたファイルの例は以下のようなものになる。ここでは、ファイル名は、"ユーザ名_kamokudb.txt"とする。
# typedef struct _KAMOKU {
# char name[MAX_KAMOKU_NAME]; /* 科目名 */
# int tanni_type; /* 必修、選択必修、選択、自由のいずれか */
# int tanni; /* 何単位か */
# int nenji; /* 何年次か */
# int kouki_flag; /* 前期なら0、後期なら1 */
# int sairi_flag; /* 再履修なら1、そうでないなら0 */
# int seiseki; /* 59点以下は不可、-1は未履修であることを示す */
# } KAMOKU;
# 
# KAMOKU kamoku_list[200];

履修科目データベースの検索(_検索項目,_検索鍵,_検索データ) :-
        get_split_lines('ユーザ名_kamokudb.txt',[' '],LL),
        member(_検索データ,LL),
        鍵情報(_検索項目名,_検索データ,_検索鍵).

鍵情報(科目名,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_科目名).
鍵情報(単位の種類,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_単位の種類).
鍵情報(単位数,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_単位数).
鍵情報(年次,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_年次).
鍵情報(後期,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_後期).
鍵情報(前期,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_前期).
鍵情報(再履修,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_再履修).
鍵情報(成績,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_成績).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
鍵情報ソースプログラムの生成(_項目名ならび) :-
        append(_,[_項目名|R],_項目名ならび),
        findall(B,(member(A,_項目名ならび),concat_atom(['_',A],B)),L2),
        concat_atom(L2,',',_項目名ならび文字列),
        write_formatted('鍵情報(%t,[%t],_%t).\n',[_項目名,_項目名ならび文字列,_項目名]),
        R = [].