第12回 基礎プログラミング II レポート課題 氏名:吉田瑞恵 学籍番号:C1082030 語学クラス:英語(?) コース(系):社会 チーム名:山形新幹線 チームホームページアドレス: プロジェクト名:「東北新幹線 券売機」「この新幹線はなーに?」 1.全体の進み具合 「東北新幹線 券売機」の方は、ハッシュを利用するため別ファイルにデータを 作成中。メソッドも使えるよう検討中。 「この新幹線はなーに?」の方は、絵と文は完成に近づいている。 後はレイアウトなどを考えるようだ。 2.プロジェクトの進み具合 データをプログラムから分離中。 プレゼン/原稿は終了した模様。 デモ版ほぼ完成。 3.担当部分 本プログラム:今回ほとんど進展なし。 データ作成: 出発駅.txtで、内容は 到着駅 運賃 のデータを作成中。 今回は tokyo.txt ueno.txt oomiya.txt utsunomiya.txt kooriyama.txt fukushima.txt yonezawa.txt takahata.txt akayu.txt kaminoyama.txt yamagata.txt tendo.txt higashine.txt murayama.txt ooishida.txt shinjo.txt を作成。 ただし、東京、上野、大宮、宇都宮、郡山に関しては、 「つばさ」の停車駅のデータしかいれていないので未完成。 他の路線の停車駅も入力しなければならない。 デモ版: htmlページは宮川先輩、CGI部分は私が作成した。 宮川先輩が卒論で忙しいのと、私がハッシュを使う仕組みを理解しておきたいと 考えたためである。(解説は後述) 4.メンバーからの指摘 「ハッシュやメソッドを使わなくてはならないのでは?」 (もうひとつのプログラムでは使いようがないとのこと。) 「チケットのビジュアル的な面をもっとどうにかすべき」 5. <ハッシュ> これまでプログラムに書いていた料金をデータファイルに移すことにした。 データファイルから配列を読込み、ハッシュとして使う。 そのように動くものを、デモ版で作成した。 これを本プログラムに応用していく予定だ。 <メソッド> 選ばれた席の種類に応じて、運賃を高くしようと考えている。 その計算をするときにメソッドを使う。 <ビジュアル> 宮川先輩の作った発券機 http://roy/~c107194/advertise2/rubycgi/r2_cgi_best.html をもとに改良する。 6.デモ版作成 先週作成した本プログラムは、ハッシュを使わずに数値を表示させていた。 デモ版を作り、発展させて本プログラムにつなげようと考えた。 なので、私はプログラム作成担当だがデモ版も作ることにした。 (宮川先輩にはhtml部分を作成してもらった) だが、ハッシュのデータの読みこませ方が分からず、12/24になってから 西村先生に質問しようと思い立った。先生はご不在だったので広瀬雄二先生に相談した。 初めは新幹線ごとにtsubasa.datのようにそれぞれのデータを作り、内容は 東京 上野 990 東京 大宮 1580 : : : : : : 東京 新庄 12510 として、$1 と $2 から $3 を導き出せるようにしようとした。 だが、相談したところ、tokyo.datなど各駅ごとに作った方が データファイルは多くなるが簡単だということであった。 また、ハッシュの方法を理解しておらずプログラムが正常に作動しなかったが、 間違えた部分を指摘していただいたので動くようになった。 作成プログラム k_demo.rb #!/usr/koeki/bin/ruby require 'cgi' # cgi使用宣言 cgi = CGI.new("html4") # html4 でcgiを使う。 print("Content-type: text/html; charset=Euc-jp\n\n") station = Hash.new # hashを使う。 depa = cgi["depart"] arr = cgi["arrive"] print("\n") # html 開始 print("\n") print("\tチケット\n") print("") print("\n") print("\n") if depa == arr # 出発駅=到着駅のとき print("

エラー

\n") print("

出発と到着で同じ駅が選択されています

\n") print("

前のページに戻ってやり直して下さい

\n") print("\n") print("\n")#エラー文表示。 else # 発着駅が異なる場合 if depa == "新庄" # 新庄の場合 open("shinjo.txt","r") do |t| # shinjo.txtを開き読みこむ。 while fee = t.gets if /(\S+)\s+(\d+)/ =~ fee # 中身が 文字列 空白 数字 のとき station[$1] = $2 # ハッシュにいれる。 end end print("

チケット

") print("\n") print("
\n") # 表を作る。 print("\t

乗車券<\p>\n") printf("

%s→%s

\n",depa,arr) # どこの駅からどこの駅までか printf("

%s円

\n",station[arr]) # 料金はいくらか、ハッシュで出す。 print("\n") print("\n")#エラー文表示。 end end end はじめ、ハッシュを読みこむ前に$1を出させるなどの間違いをしていた。 広瀬先生に相談して解決した。 実行結果/考察 roy{c108203}% ./k_demo.rb [~/public_html] (offline mode: enter name=value pairs on standard input) depart="新庄" arrive="米沢" Content-type: text/html; charset=Euc-jp チケット

チケット

乗車券

新庄→米沢

4180円

米沢までの運賃は4180円としたので正しい。 発着どちらも新庄の場合 roy{c108203}% ./k_demo.rb [~/public_html] (offline mode: enter name=value pairs on standard input) depart="新庄" arrive="新庄" Content-type: text/html; charset=Euc-jp チケット

エラー

出発と到着で同じ駅が選択されています

前のページに戻ってやり直して下さい

設定したとおりのエラーメッセージが出たので、正しく動いていると言える。 *冬休みの間にすること* 到着駅と料金を書いた.txtファイルを自分のPCで作成する予定だ。 (それをこのアドレスに送り、修正必要箇所を直す。) 山形新幹線の駅の分は完了したので、他の東北新幹線の駅のデータを作っていく。 *今回の反省* 夜、集まって話し合うと言う約束をすっぽかした。 TAにも来てもらっていたため、迷惑をかけてしまった。 「眠かった」というあまりにも自分勝手な理由でである。 チームやプロジェクトで協力していかなければならないのに、 こういうことは輪を乱してしまいかねない。 これからはこのようなことのないようにしたい。 共同学習者 遠藤孝之 後藤輝久 宮川史礼先輩 質問に答えてくれた先生 広瀬雄二先生 参考文献 広瀬雄二『Ruby プログラミング基礎講座』2006,技術評論社 第12講、第13講