第8回 ことはじめ レポート課題 氏名 : 畠山貴衣 学籍番号 : C1101709 語学クラス : 英語6 コース(系) : 政策マネジメントコース [1]筆記問題 A.CGI変数とHashの似ている点 ・プログラムに新しく配列のように組み込むところが似ている。 例 : hash_item.rb と ticket.rb item = Hash.new("非取扱商品") / cgi = CGI.new('html4') ・また、取りこんだ配列を出力する際の表示方法も似ている 例 : hash_item.rb と ticket.rb item[customer] arv = cgi["arrive"] B.CGIの仕組み ・" .htaccess"でCGI実行の基盤を作る。この作業をしないと作成したCGIデータ (*htmlと*rb)を実行することが出来ない。 ".htaccess"では、プログラムを公開するに当たって、どの程度第3者にプログ ラムを操作してもらえるかを定め、ある一定の操作以外行えないように制御す るための設定も兼ねている。 ・"*html"でのちの"*rb"で作成するデータの基礎を作成する。この"html"がな かったら"rb"で作ったデータを表示できない。(表示するところが存在しない。) ・"*rb"は実際のプログラムであり、行われた動作をどう処理するか指定されて いる。これは、始めに設定した"*html"上で公開される。 ・上記より、" .htaccess" "*html" "*rb" はどれかが欠けると正常に働かなく なってしまう。このことより、CGIを実行する上で欠かせない要素である。 C.プログラム上でCGI変数を渡す仕組み ・今回は授業内で作成した ticket.html のプログラムで説明する。 *7行目
利用者にデータを入力してもらうために form メソッドを使用している。formメ ソッドではさまれている部分が当てはまる。 action の部分には、結果を表示するプログラム名を入れる。 また、11行目の これは、プログラムに情報を送信して良いかどうかを最終的に聞く作業である。 type で、入力formの部品を指定。submit であれば、そのまま指定されたプログ ラムに情報を送信し、実行する。resetの場合は、情報がリセットされ、プログ ラムに情報は送られず、実行もしない。 value は、ホームページ上で表示される文字である。 D."*rb"内でCGI変数を渡す仕組み 解説には ticket.rb を用いる。 *6行目 cgi = CGI.new('html4') この部分で、html内で入力され、受け取ったデータを使用することを指定。 これは CGI 用の Hash の指定をしている。 *9行目 arv = cgi["arrive"] Hashを使用することを指示。 arv は変数で、何を入れても良い。[]内の変数を配列として読みこむ。 key と value はそれぞれ、 name と option が当てはまっている。 [2]プログラム問題 A. チケット

プログラムロゴ




* オンラインチケット *

プログラミングII




プログラム

オンラインチケットのhtml

基礎プログラミングを学んで

過去のプログラム

基礎プログラミン グロゴ

はたけのHP



---*-----------------------**-----------


*注意事項*

HPに関して、プログラムの感想・質問・意見等ございましたら、
下記のアドレスまで連絡下さい。
ad : c110170@f.koeki-u.ac.jp


著作権 © 畠山貴衣(2011)

プログラム ●設定 架空の鉄道会社のオンラインチケットの乗車駅と行先を選択でき、その間の乗 車料金を計算するプログラムを作成しました。 ●作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コード require 'cgi' # htmlからデータを持ってくる。 cgi = CGI.new('html4') print("Content-type: text/html; charset-EUC-jp\n\n") lea = cgi["leave"] # RubyのCGIでもらってきた値を代入(出発駅) arv = cgi["arrive"] # 到着駅 namae = cgi["name"] # 名前を取り入れる kigen = cgi["hiduke"] # 日付を取り入れる #p arv #Ruby の変数に入ったか確認 kyori = 0 #距離を計算するために必要な初期値 sta =Hash.new # Hash配列を staとする。(stationの略) sta["新庄駅"] = 0.0 sta["升形駅"] = 7.5 sta["羽前前波駅"] = 10.6 sta["津谷駅"] = 12.9 sta["古口駅"] = 17.0 sta["高屋駅"] = 24.8 sta["清川駅"] = 31.1 sta["狩川駅"] = 34.9 sta["南野駅"] = 38.9 sta["余目駅"] = 43.0 #kyori.to_i = sta[arv] - sta[lea] #ryoukin = (( kyori / 2 ) * 20 ) + 120 def ryoukin(kyori,arv,lea) # def メソッドの設定 if arv > lea # 出発が到着の値より大きかった場合 kyori = arv - lea # 距離を出す式 else arv < lea # 到着が出発の値より大きかった場合 kyori = lea - arv # 距離の計算式 end 120 + ( kyori / 2 ) * 20 # 値段を出す式 end # def に対する end print("\n") # ホームページ表示 print("\n") # hradの設定 print("券発行\n") # title の設定、終わり print("\n") # head の終わり print("\n") # 本文の書きはじめ print("

\n") # 改行と線 print("

乗車券

\n") # 文字を大きく表示 if arv == lea # もし乗車と下車駅が同じだったら print("

エラー発生です

\n") # メッセージ表示 print("

前画面に戻ってやり直して下さい

\n") else # それ以外の場合 printf("

%s 樣

",namae) # 名前確認 printf("

%s--%s間

\n",lea,arv) #乗車区間 print("
\n") # 改行 #kyori.to_i = sta[arv] - sta[lea] #ryoukin = (( kyori / 2 ) * 20 ) + 120 printf("

料金 : %d 円 <\p>\n",ryoukin(kyori,sta[arv],sta[lea])) # 料金表示 printf("

この乗車券の有効期限は %s 当日のみです。

\n",kigen) # 期限の確認 print("

ご注意下さい。\n


") print("

庄内鉄道

\n") print("
\n") # 線 end # if に対する end print("\n") # 本文の終わり print("\n") # ホームページの表示終わり #kyori.to_i = sta[arv] - sta[lea] #ryoukin = 120 + ( kyori.to_i * 20 ) ●変更点 元にしたプログラムは授業内で作成した ticket.rb 。 これに新しく配列を付け加え、値段を計算するための式を def を用いて組み 込んだ。 ●実行結果 pan{HATAKEYAMA Kie}% ./ticket2.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) leave="新庄駅" arrive="余目駅" name="はたけ" hiduke="11月11日" Content-type: text/html; charset-EUC-jp 券発行

乗車券

はたけ 樣

新庄駅--余目駅間


料金 : 550 円

この乗車券の有効期限は 11月11日 当日のみです。

ご注意下さい。


庄内鉄道


(乗車駅と下車駅が同じだった場合) pan{c110170}% ./ticket2.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) leave="新庄駅" arrive="新庄駅" name="はたけ" hiduke="11月11日" Content-type: text/html; charset-EUC-jp 券発行

乗車券

エラー発生です

前画面に戻ってやり直して下さい

●考察 bc -l で、料金が正しく計算されているか確かめてみた。 新庄駅 - 余目駅 pan{c110170}% bc -l [~/public_html/rubycgi] 43/2*20+120 550.00000000000000000000 quit となり、実行結果で表示した料金と等しいため、計算は正しいといえる。 今回苦戦した点 値段の計算を def を使わないで出来ないかと試行錯誤をしてみた(計算式を33行 目のようにHashのすぐ後に入れたり、69行目のようにprint文の中に入れてみた り、プログラムの最後に入れてみたり)が、上手く計算できなかった。 そのため、to_i で数字扱いをしてやり直してみたが、結果は変わらなかった。 なぜ、 def だと計算できるのに、そのまま組み込むと出来ないのか、最後まで 分からなかった。 B. GIMPで作成したロゴ掲載ホームページ http://roy/~c110170/advertise2/kokoku2.html logoだけのページ http://roy/~c110170/advertise2/logo.html C. PDFファイルへのリンク http://roy/~c110170/advertise2/r2_c110170.pdf [3]感想 今回はプログラムにも時間がかかったが、プラスで作業が多かったためいつもよ り時間がかかってしまった。 今回は普段目にするようなプログラムの作成だったので完成したときは嬉しかっ た。 [4]参考文献等 西村まどか先生 第8回 「ことはじめ」授業ページ http://roy/~madoka/2011/r2/08/ 共同製作者 : 伊藤桜子 齋藤陽香 ----------------------------------- 東北公益文科大学  公益学部 公益学科 2年 畠山貴衣  c110170@f.koeki-u.ac.jp ----------------------------------- 東北公益文科大学  公益学部 公益学科 2年 畠山貴衣  c110170@f.koeki-u.ac.jp