第10回 基礎プログラミング II レポート課題 氏名:宮川史礼 学籍番号:C1071948 語学クラス:英語1 コース(系):社会系 1.筆記問題 ディレクトリを全て書き込み可能にすると、プログラムそのものを破壊されかね ないので、pstoreというディレクトリを作り、そのなかだけを第三者に書きこん でもらえるようにする。 ディレクトリ作成時に行なう動作 % cd ./public_html/rubycgi % mkdir pstore % chmod o+w pstore データベースにデータをしまうプログラムの作成 % touch データ名.db % chmod o+w データ名.db その後、% chmod o+w プログラム.rbをして、プログラムから得た値を機械が書 きこめるようにする。 最後に、% chmod +x プログラム.rbをする必要もある。 プログラム部分では、次の様なものを書く。 require 'pstore' PStore 変数 = PStore.new("データベース.db") PStore 変数.transaction do CGI 変数.transaction do end 2.プログラム問題 山形新幹線つばさ専用の券売機(因みに宮川鉄道のイメージカラーはピンク色で す) 宮川史礼の最高傑作ページ http://roy/~c107194/advertise2/ CGIの最高傑作ページ http://roy/~c107194/advertise2/rubycgi/r2_cgi_best.html プログラム本体1 つばさ券売機

つばさ券売機

自由席 指定席

本体(その2) #!/usr/bin/env ruby require 'cgi' cgi = CGI.new("html4") data = Hash.new print("Content-type: text/html; charset =EUC-JP\n\n") lea = cgi["iki"] arv = cgi["kaeri"] seki = cgi["seat"] open("tubasa.dat","r") do |tubasa| while line = tubasa.gets if /(\S+)\s+(\S+)/ =~line data[$1] = $2 end end end hajime = data[lea].to_f owa = data[arv].to_f #乗車券の値段の計算 def jyosya(start,goal) if start > goal a=start-goal elsif goal > start a=goal-start elsif start == goal a=0 end a/2*20 + 120 end #特急券の値段 def tokkyu(isu,saki,ato) if saki > ato kiro=saki-ato elsif ato > saki kiro=ato-saki elsif saki == ato kiro=0 end if isu == "自由席" if 0 < kiro && kiro <= 50 500 elsif 50 < kiro && kiro <= 100 900 elsif 100 < kiro && kiro <= 150 1300 elsif 150 < kiro && kiro <= 200 1680 elsif 200 < kiro && kiro <= 300 1890 elsif 300 < kiro && kiro <= 400 2100 elsif 400 < kiro 2420 elsif kiro == 0 0 end elsif isu == "指定席" if 0 < kiro && kiro <= 50 1010 elsif 50 < kiro && kiro <= 100 1410 elsif 100 < kiro && kiro <= 150 1810 elsif 150 < kiro && kiro <= 200 2190 elsif 200 < kiro && kiro <= 300 2400 elsif 300 < kiro && kiro <= 400 2610 elsif 400 < kiro 2930 elsif kiro == 0 0 end end end print("\n") print("\n") print("") print("つばさ券売機\n") print("\n") print("\n") print("

御利用ありがとうございます。<\h2>\n") print("<乗車券>\n") print("\n") print("\n") print("
\n") print("
") print("乗車券\n") printf("

%s → %s<\h1>\n", lea, arv) print("

\n") print("
") print("<特急券>\n") print("
") print("\n") print("\n") print("
\n") print("
") if seki == "指定席" printf("%s 13号車 A\n",seki) else printf("%s\n",seki) end print("

") printf("%s → %s\n", lea, arv) print("<\h1>") print("

\n") printf("

合計で %d 円になります。

\n", jyosya(hajime,owa)+tokkyu(seki,hajime,owa)) print("
") print("--株式会社みやがわ鉄道--\n") print("\n") print("\n") データファイル 新庄 421.4 大石田 399.7 村山 386.3 さくらんぼ東根 380.9 天童 373.2 山形 359.9 かみのやま温泉 347.8 赤湯 328.9 高畠 322.7 米沢 312.9 福島 272.8 郡山 226.7 新白河 185.4 那須塩原 157.8 宇都宮 109.5 小山 80.6 大宮 30.3 上野 3.6 東京 0.0 実行結果 その1 pan{c107194}% ./r2_cgi_best.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) iki="大石田" kaeri="郡山" seat="自由席" Content-type: text/html; charset =EUC-JP つばさ券売機

御利用ありがとうございます。

<乗車券>

乗車券

大石田 → 郡山


<特急券>

自由席

大石田 → 郡山

合計で 3530 円になります。


--株式会社みやがわ鉄道-- 本体2 pan{c107194}% ./r2_cgi_best.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) iki="東京" kaeri="高畠" seat="指定席" Content-type: text/html; charset =EUC-JP つばさ券売機

御利用ありがとうございます。

<乗車券>

乗車券

東京 → 高畠


<特急券>

指定席 13号車 A

東京 → 高畠

合計で 5957 円になります。


--株式会社みやがわ鉄道-- その3 pan{c107194}% ./r2_cgi_best.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) iki="米沢" kaeri="米沢" seat="自由席" Content-type: text/html; charset =EUC-JP つばさ券売機

御利用ありがとうございます。

<乗車券>

乗車券

米沢 → 米沢


<特急券>

自由席

米沢 → 米沢

合計で 120 円になります。


--株式会社みやがわ鉄道-- 3.感想 http://roy/~c109066/advertise2/rubycgi/fork.html このページが良いと思ったのは、ページの色づかいのビジュアルが個人的に良か ったと感じたのと、血液型の性格診断なんかも、おそらくちゃんと調べている(と 思われる)ことが述べられていたところからです(こういうのは統計学の類の気が しないでもないけれど)。因みに欲を言えば、誕生石をもう少し多めに紹介でき なかったのだろうかと思うところ。 −−余談−− 授業でもやたらに取りあげるので、電車のダイヤ関係のものをネタにしてみよう と思ったのと、最近就活で利用する機会を得た山形新幹線つばさのことをプログ ラムにしてみるかと、ふとひらめいたことがきっかけでこの大作を作ってみた。 先ず最初の調べることなどに時間を取られたし、プログラム本体を完成させるま でにも、かなり悪戦苦闘した。 それにしても、ようやくここまで辿り着いたと正直腰が抜け気味てしまっている。 しかしまだ個人戦が全試合終了しただけで、あと5回分、今度は団体戦が待って いる。むしろこちらのほうが結果の出来合いに関して言うと未知数なので、果た して前途はいかほどかという心情になり、まさしくダブルパンチで更にぐったり と来てしまった。……とはいえ、いよいよ最終局面だ。 それを臨む前に、今期の出席・レポートと、両方の課題を取り組む際に、ほとん どの回でおよそ専属として、僕のサポートに徹してくれた智也くんには感謝のし ようがないくらいにお世話になった。それだからこそ、僕自身が尚のこと、彼に 有難うと言っておかなければならない。智也くんの協力なしには、課題レポート を完成品にすることは出来なかった。そして、残りの数回の授業の時にもよろし くお願いしたい。 P.S. 自分は基本、就活などでなく、遊びで関東方面に出向くときには羽越戦の 特急で新潟に入ってから、上越新幹線に乗り換えて行く方です。正直山形新幹線 はきつい。大体東北自体、山ばかりの高地だから、乗ってるうちに相当具合が悪 くなってくるわけです。まあそれを言うと、新潟(特に中越地方)も群馬も高地だ った気がするけど……。 4.参考文献 基礎プログラミング II 第10回 CGIことおぼえ 「CGIで使うことのできるデータベース」 http://roy/~madoka/2010/r2/10/10_01_theme_01_pstore.html 基礎プログラミング II 第10回 CGIことおぼえ 「プログラム部分について」 http://roy/~madoka/2010/r2/10/10_02_theme_02_program.html 基礎プログラミング II 第9回 CGIことえらび 「ラジオボタンの作り方」 http://roy/~madoka/2010/r2/09/09_04_theme_02_radio.html 特別急行券 - Wikipedia http://ja.wikipedia.org/wiki/特別急行券 つばさ (列車)- Wikipedia http://ja.wikipedia.org/wiki/つばさ_(列車) 協力してくれたTA 工藤智也