第7回 基礎プログラミング II レポート課題 氏名: xxxxxxxx 学籍番号:C109xxxxxx 語学クラス:中国語1 コース(系):地域共創コース A 仕様書、取扱い説明書 ● 仕様書(siyousyo.txt) <<仕様書>> <企画の意図> ネットショッピングなど、多くある品物の中で、指定した品物を選択し、数量を 選ぶ。そして、指定した品物の値段と数量とを計算するプログラムを作成したい と思ったためである。また、本物のネットショッピングのように、いくら以上購 入の場合は送料無料という計算をいれたプログラムを作成した。 <プログラム作成前・作成後> はじめは、実行するとハッシュの部分の並びかえがなっていなかったり…という 状態であったが、改良をおこない、値段の安い順番に並べ、見やすいように並び かえをおこなった。 作成前は、データが多くなると予想したため、産地名を入力してもらい表示 する予定であったが、検索するにせよ検索しないにせよ検索するのであれば、結 局データを全て表示させなくてはいけなかったので、検索をやめて全て表示させ ることにした。 <今後の課題> 現在のプログラムは、1品を買った時点で、商品名 数量:◯となっている。 実際には全ての買い物をし終えた時点で、 商品A 数量:◯ 商品B 数量:△ 商品C 数量:□ というようにしたかった。 しかし、変数は覚えられるのは複数だが、別の数が入ってしまうと忘れてしまう ので、変数以外での表示の仕方をして表示できるようにすれば分かりやすいので ないかと思った。 また、今回は各都道府県1品ずつになってしまったので、もっとデータを増やし て(その場合には見やすくして)改良していきたい。 <連絡先> このプログラムに対しての意見、感想などは下記のアドレスまでお願いします。 c109001@e.koeki-u.ac.jp <ご注意> このプログラムは 東北公益文科大学 青木千紗 が著作権を保有しています。 このプログラムの入手・実行・改変は自由に行うことができますが、取り扱うこ とで生じた結果に対しては著作権者は責任は一切負いませんので、ご了承ください。 ● 取扱い説明書(torisetu_o.txt) <<取扱説明書>> このプログラムは、ネットショッピングの要領で、全国から特産品を取り寄せる ことができる。 プログラムを実行する際には、取扱説明書ならびに、仕様書をよく読み、プログ ラム(obtaining.rb)をダウンロードし、保存してください。 <ダウロード後の手順> ktermを起動してください。 保存したディレクトリ public_html / advertise2 であるなら、 cd public_html / advertise2 と打ち込んでください。 そして、実行するために chmod +x obtaining.rb と入力し、チェンジモードを おこなってください。 そして ./obtaining.rb で起動して、プログラムの指示にしたがって下さい。 B 最高傑作のプログラム プログラム(obtaining.rb) a 考えた設定 ネットショッピングの要領で、買いたい商品の値段と数量とを計算するプログ ラムを作成した。そのうえで、10000円以上のものを買うと送料無料になった り、支払い方法で手数料の値段が変わってくるプログラムを考えた。 b 作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' def message(m) # メソットの設定 print("\n\n以上で買い物を終えますか?\n") print("\n終了なら space → Retrun、続けて買うのであれば Return を入力してください。\n") end # defに対するend obtain = Hash.new # Hash.newで新しくハッシュをつくる total = 0 # totalは0からはじまる # 以下hashの設定 obtain[1] = "特大ホタテ(300g)", 4179 ,"北海道" obtain[2] = "津軽せんべい(40枚)" , 1980, "青森" obtain[3] = "三陸いくら(500g)" , 3980, "岩手" obtain[4] = "牛タン(200g)" , 1050, "宮城" obtain[5] = "横手やきそば(4食)" , 1260, "秋田" obtain[6] = "つや姫(5kg)" , 2980,"山形" obtain[7] = "高田梅(500g)" , 3097,"福島" obtain[8] = "あんこう鍋セット" , 5980,"茨城" obtain[9] = "日光手打ちそば(一升盛)" , 3885,"栃木" obtain[10] = "上州餃子(40個)" , 1056,"群馬" obtain[11] = "さつまいもシュー(5個入)" , 746,"埼玉" obtain[12] = "ハマグリ(1kg)" , 4800,"千葉" obtain[13] = "泡盛玉友(1800ml)" , 2110,"東京" obtain[14] = "横浜中華まんじゅうセット" , 4480,"神奈川" obtain[15] = "コシヒカリ(10kg)" , 4380,"新潟" obtain[16] = "ホタルイカ(10袋)" , 5000,"富山" obtain[17] = "寒ブリ干物セット" , 4780,"石川" obtain[18] = "越ルビー(900g)" , 2690,"福井" obtain[19] = "甲州ワインビーフ(500g)" , 2625,"山梨" obtain[20] = "やぶ本店生そば" , 5880,"長野" obtain[21] = "登り鮎(30本)" , 4095,"岐阜" obtain[22] = "緑茶[静の赤](1kg)" , 6560,"静岡" obtain[23] = "味噌煮込みうどんセット" , 5250,"愛知" obtain[24] = "さんま寿司(3パック)" , 2500,"三重" obtain[25] = "純米(1800ml)" , 3050,"滋賀" obtain[26] = "生八つ橋(8個)" , 1617,"京都" obtain[27] = "水ナス(5個)" , 1250,"大阪" obtain[28] = "神戸ワッフルセット" , 2500,"兵庫" obtain[29] = "金山寺漬(500g)" , 1260,"奈良" obtain[30] = "有田みかん(5kg)" , 1599,"和歌山" obtain[31] = "白山命水(2l×6本)" , 2205,"鳥取" obtain[32] = "リーフティー(25g)" , 4935,"島根" obtain[33] = "高瀬舟ようかん(24個)" , 1200,"岡山" obtain[34] = "広島風お好み焼き(5枚入)" , 2310,"広島" obtain[35] = "サザエ(1kg)" , 2480,"山口" obtain[36] = "ももいちご(28粒)" , 6000,"徳島" obtain[37] = "オリーブの実饅頭(大)" , 1260,"香川" obtain[38] = "じゃこ天(30枚)" , 4300,"愛媛" obtain[39] = "かつお角煮セット" , 1995,"高知" obtain[40] = "辛子明太子(800g)" , 4980,"福岡" obtain[41] = "イカシュウマイ(8個)" , 1100,"佐賀" obtain[42] = "かまぼこつめ合わせ" , 3150,"長崎" obtain[43] = "カラシレンコン(2本)" , 3500,"熊本" obtain[44] = "かぼすパイ(1箱)" , 840,"大分" obtain[45] = "マンゴー(1kg)" , 3980,"宮崎" obtain[46] = "とんかつ用ロース(4枚)" , 1300,"鹿児島" obtain[47] = "ちんすこうバラエティーセット" , 2500,"沖縄" print("ページにアクセス中…\n") sleep 1 print("しばらくお待ちください。\n") system('display http://roy.e.koeki-u.ac.jp/~c109001/advertise2/pasokon.png&') # 画像の表示 sleep 3.5 system('pkill display -U `whoami`') # 画像を強制終了させる print("\n秋の全国うまいもんフェア!!\n") print("お取り寄せを行います。\n") print("10000円以上購入の場合は送料無料です。\n") print "-" * 50 print("\n買い物カゴ\n") print("商品なし\n") print "-" * 50 print("\n価格の安い順に並べています。\n") sleep 2 print"\n・\n" sleep 1 print"・\n" sleep 1 print("\n商品を選んで下さい。\n") obtain.keys.sort{|a, b| # sortで並びかえる。sortをaとbという名 obtain[a][1] <=> obtain[b][1] # 前に置き換える。 }.each{|c| printf("ナンバー%d \t %s産 \t %s \t 価格 %d円 \n", c, obtain[c][2], obtain[c][0], obtain[c][1]) } while true # breakが終わるまで繰り返す print("\n買いたい番号を入力してください。\n") x = gets.chomp.to_i # xをとってきて整数にする print("数量は何個買いますか。\n") y = gets.chomp.to_i # yをとってきて整数にする total += obtain[x][1] * y # 合計の計算 print "-" * 50 print("\n買い物カゴ\n") printf("\n%s \t 数量: %d\n",obtain[x][0],y) print "-" * 50 message(x) # メソットを呼び出す z = gets.chomp # zをとってくる if z == " " # もしzがスペースなら break # 抜け出す end # ifに対するend end # whileに対するend total.to_i # totalをとってくる print "-" * 50 printf("\n合計%d円です。(送料別)\n",total) print "-" * 50 print("\nそれでは、支払画面に進みます。\n\n") sleep 2 print("支払方法を選択してください。\n") print("1:カード\t2:コンビニ払い\t3:郵便局\t4:銀行振込\t5:代金引換\n") print("\n手数料一覧になります。\n") print("1:手数料なし\t2:各店舗105円\t3:手数料210円\t4:手数料なし\t5:手数料315円\n\n") STDERR.print("番号:") # 番号を入力させる hurikomi = STDIN.gets.chomp.to_i # hurikomiをとってきて整数にする if hurikomi == 1 # もしhurikomiが1なら print("\nお支払はカード払いですね。\n") elsif hurikomi == 2 # もしhurikomiが2なら print("\nお支払はコンビニ払いですね。\n") print("お支払するコンビニを選択してください。\n") print("\n1:久保田コンビニ\t2:横山コンビニ\t3:大島コンビニ\t4:小松コンビニ\n") STDERR.print("番号:") # 番号を入力させる konbini = STDIN.gets.chomp.to_i # konbiniをとってきて整数にする if konbini == 1 # もしkonbiniが1なら print "-" * 50 print("\n久保田コンビニですね。\n") print("\n手数料が105円かかります。\n") elsif konbini == 2 # もしkonbiniが2なら print "-" * 50 print("\n横山コンビニですね。\n") print("\n手数料が105円かかります。\n") elsif konbini == 3 # もしkonbiniが3なら print "-" * 50 print("\n大島コンビニですね。\n") print("\n手数料が105円かかります。\n") else # それ以外なら print "-" * 50 print("\n小松コンビニですね。\n") print("\n手数料が105円かかります。\n") end # ifに対するend elsif hurikomi == 3 # もしhurikomiが3なら print "-" * 50 print("\n郵便局払いですね。\n") print("\n手数料が210円かかります。\n") elsif hurikomi == 4 # もしhurikomiが4なら print("\n銀行振込ですね。\n") print("お振り込みする銀行を選択してください。\n") print("\n1:久保田銀行\t2:横山銀行\t3:大島銀行\t4:小松銀行\n") STDERR.print("番号:") # 番号を入力させる ginkou = STDIN.gets.chomp.to_i # ginkouをもってきて整数にする if ginkou == 1 # もしginkouが1なら print "-" * 50 print("\n久保田銀行ですね。\n") elsif ginkou == 2 # もしginkouが2なら print "-" * 50 print("\n横山銀行ですね。\n") elsif ginkou == 3 # もしginkouが3なら print "-" * 50 print("\n大島銀行ですね。\n") else # それ以外なら print "-" * 50 print("\n小松銀行ですね。\n") end # ifに対するend else # それ以外なら print "-" * 50 print("\n代金引換ですね。\n") print("\n手数料が315円かかります。\n") end # ifに対するend print "-" * 50 print("\nそれでは、宅配時間の選択をお願いします。\n") sleep 2 print("\n宅配指定時間を選択してください。\n") print("1:午前\t2:午後\t3:指定無し\n") print("\n宅配時間帯:午前10時から午後9時まで\n") STDERR.print("\n番号:") # 番号を入力させる shitei = gets.chomp.to_i # shiteioをもってきて整数にする if shitei == 1 # もしshiteiが1なら STDERR.print("指定時間(数字を入力してください。):") shitei = gets.chomp.to_i # shiteiをもってきて整数にする print "-" * 50 printf("\n午前%d時にお届けします。\n",shitei) print "-" * 50 elsif shitei == 2 # もしshiteiが2なら STDERR.print("指定時間(数字を入力してください。):") shitei = gets.chomp.to_i # shiteiをもってきて整数にする print "-" * 50 printf("\n午後%d時にお届けします。\n",shitei) print "-" * 50 else # それ以外なら print "-" * 50 print("\n指定時間なし\n") print "-" * 50 end # ifに対するend if hurikomi == 2 # もしhurikomiが2なら purasu_a = 105 # purasu_aは105 else # それ以外なら purasu_a = 0 # purasu_aは0 end # ifに対するend if hurikomi == 3 # もしhurikomiが3なら purasu_b = 210 # purasu_bは210 else # それ以外なら purasu_b = 0 # purasu_bは0 end # ifに対するend if hurikomi == 5 # もしhurikomiが5なら purasu_c = 315 # purasu_cは315 else # それ以外なら purasu_c = 0 # purasu_cは0 end # ifに対するend if total <= 10000 # もしtotalが10000より少なかったら print("\n\n") print "*" * 50 price = 1500 # priceは1500 printf("\n送料手数料込で、合計%d円です。\n",total + price + purasu_a + purasu_b + purasu_c) print "*" * 50 else # それ以外なら print("\n\n") print "*" * 50 price = 0 # priceは0 printf("\n1万円以上お買上げのため送料無料で、合計%d円です。\n",total + price + purasu_a + purasu_b + purasu_c) print "*" * 50 end printf("\n\n\n数日後…。\n") sleep 1 print("\n・\n") sleep 1 print("・\n") print("\nピンポーン\n") sleep 2 print("\nくぼっち宅配です!\n") system('display http://roy.e.koeki-u.ac.jp/~c109001/advertise2/danbo.png&') # 画像の表示 sleep 3.5 print("\n無事荷物が届いた!\n") system('pkill display -U `whoami`') # 画像を強制終了させる c もとにしたプログラム two_methods.rb / def_twoparam.rb / hash_ary_sort.rb を参考にプログ ラムを作成した。 d 実行結果 pan{c109001}% ./obtaining.rb [~/public_html/advertis ページにアクセス中… しばらくお待ちください。 秋の全国うまいもんフェア!! お取り寄せを行います。 10000円以上購入の場合は送料無料です。 -------------------------------------------------- 買い物カゴ 商品なし -------------------------------------------------- 価格の安い順に並べています。 ・ ・ 商品を選んで下さい。 ナンバー11 埼玉産 さつまいもシュー(5個入) 価格 746円 ナンバー44 大分産 かぼすパイ(1箱) 価格 840円 ナンバー4 宮城産 牛タン(200g) 価格 1050円 ナンバー10 群馬産 上州餃子(40個) 価格 1056円 ナンバー41 佐賀産 イカシュウマイ(8個) 価格 1100円 ナンバー33 岡山産 高瀬舟ようかん(24個) 価格 1200円 ナンバー27 大阪産 水ナス(5個) 価格 1250円 ナンバー29 奈良産 金山寺漬(500g) 価格 1260円 ナンバー5 秋田産 横手やきそば(4食) 価格 1260円 ナンバー37 香川産 オリーブの実饅頭(大) 価格 1260円 ナンバー46 鹿児島産 とんかつ用ロース(4枚) 価格 1300円 ナンバー30 和歌山産 有田みかん(5kg) 価格 1599円 ナンバー26 京都産 生八つ橋(8個) 価格 1617円 ナンバー2 青森産 津軽せんべい(40枚) 価格 1980円 ナンバー39 高知産 かつお角煮セット 価格 1995円 ナンバー13 東京産 泡盛玉友(1800ml) 価格 2110円 ナンバー31 鳥取産 白山命水(2l×6本) 価格 2205円 ナンバー34 広島産 広島風お好み焼き(5枚入) 価格 2310円 ナンバー35 山口産 サザエ(1kg) 価格 2480円 ナンバー47 沖縄産 ちんすこうバラエティーセット 価格 2500円 ナンバー28 兵庫産 神戸ワッフルセット 価格 2500円 ナンバー24 三重産 さんま寿司(3パック) 価格 2500円 ナンバー19 山梨産 甲州ワインビーフ(500g) 価格 2625円 ナンバー18 福井産 越ルビー(900g) 価格 2690円 ナンバー6 山形産 つや姫(5kg) 価格 2980円 ナンバー25 滋賀産 純米(1800ml) 価格 3050円 ナンバー7 福島産 高田梅(500g) 価格 3097円 ナンバー42 長崎産 かまぼこつめ合わせ 価格 3150円 ナンバー43 熊本産 カラシレンコン(2本) 価格 3500円 ナンバー9 栃木産 日光手打ちそば(一升盛) 価格 3885円 ナンバー45 宮崎産 マンゴー(1kg) 価格 3980円 ナンバー3 岩手産 三陸いくら(500g) 価格 3980円 ナンバー21 岐阜産 登り鮎(30本) 価格 4095円 ナンバー1 北海道産 特大ホタテ(300g) 価格 4179円 ナンバー38 愛媛産 じゃこ天(30枚) 価格 4300円 ナンバー15 新潟産 コシヒカリ(10kg) 価格 4380円 ナンバー14 神奈川産 横浜中華まんじゅうセット 価格 4480円 ナンバー17 石川産 寒ブリ干物セット 価格 4780円 ナンバー12 千葉産 ハマグリ(1kg) 価格 4800円 ナンバー32 島根産 リーフティー(25g) 価格 4935円 ナンバー40 福岡産 辛子明太子(800g) 価格 4980円 ナンバー16 富山産 ホタルイカ(10袋) 価格 5000円 ナンバー23 愛知産 味噌煮込みうどんセット 価格 5250円 ナンバー20 長野産 やぶ本店生そば 価格 5880円 ナンバー8 茨城産 あんこう鍋セット 価格 5980円 ナンバー36 徳島産 ももいちご(28粒) 価格 6000円 ナンバー22 静岡産 緑茶[静の赤](1kg) 価格 6560円 買いたい番号を入力してください。 35 数量は何個買いますか。 1 -------------------------------------------------- 買い物カゴ サザエ(1kg) 数量: 1 -------------------------------------------------- 以上で買い物を終えますか? 終了なら space → Retrun、続けて買うのであれば Return を入力してください。 買いたい番号を入力してください。 45 数量は何個買いますか。 1 -------------------------------------------------- 買い物カゴ マンゴー(1kg) 数量: 1 -------------------------------------------------- 以上で買い物を終えますか? 終了なら space → Retrun、続けて買うのであれば Return を入力してください。 買いたい番号を入力してください。 11 数量は何個買いますか。 1 -------------------------------------------------- 買い物カゴ さつまいもシュー(5個入) 数量: 1 -------------------------------------------------- 以上で買い物を終えますか? 終了なら space → Retrun、続けて買うのであれば Return を入力してください。 -------------------------------------------------- 合計7206円です。(送料別) -------------------------------------------------- それでは、支払画面に進みます。 支払方法を選択してください。 1:カード 2:コンビニ払い 3:郵便局 4:銀行振込 5:代金引換 手数料一覧になります。 1:手数料なし 2:各店舗105円 3:手数料210円 4:手数料なし 5:手数料315円 番号:2 お支払はコンビニ払いですね。 お支払するコンビニを選択してください。 1:久保田コンビニ 2:横山コンビニ 3:大島コンビニ 4:小松コンビニ 番号:1 -------------------------------------------------- 久保田コンビニですね。 手数料が105円かかります。 -------------------------------------------------- それでは、宅配時間の選択をお願いします。 宅配指定時間を選択してください。 1:午前 2:午後 3:指定無し 宅配時間帯:午前10時から午後9時まで 番号:3 -------------------------------------------------- 指定時間なし -------------------------------------------------- ************************************************** 送料手数料込で、合計8811円です。 ************************************************** 数日後…。 ・ ・ ピンポーン くぼっち宅配です! 無事荷物が届いた! e 考察 dの実行結果で購入したものは、 サザエ 数量:1 価格:2480円 マンゴー 数量:1 価格:3980円 さつまいもシュー 数量:1 価格:746円 を購入し、合計金額は 7206円 である。 7206円ということは10000円以下のため、送料である 1500円 がプラスされる。 次いで、支払い方法は コンビニ払い であるので、手数料 105円 がプラスさ れる。そのため、合計金額が 8811 円 になる。 このような計算を行なっているが、正しく計算されているかわからない。 そこで、bc -lで確かめ算を行なった。 pan{c109001}% bc -l [~] 2480 + 3980 + 746 7206 7206 + 1500 8706 8706 + 105 8811 quit 実行結果と確かめ算により、きちんと表示され、計算も正しく行なわれてい ることがわかった。よって、このプログラムは正確に機能したといえる。 また、この場合は1万円以内の買物であるので、プラス1500円であるが、1万 円以上の買物をした場合にきちんと送料無料プラス0円になっているかを確か めるために、一番高い商品(6560円)を10個買ってみた。(この場合、わかりや すいように手数料なしの支払い方法にしてみる)すると、「1万円以上お買上 げのため送料無料で、合計65600円です。」という結果であったので、10000 円以内の場合にはプラス1500円、10000円以上の場合にはプラス0円になって いることがわかった。 手数料の場合も、1:カードの場合は商品料金プラス0円、2:コンビニ払いの場 合は商品料金プラス105円、3:郵便局払いの場合は商品料金プラス210円、4: 銀行払いの場合は商品料金プラス0円、5:代金引換の場合は商品涼雨金プラス 315円になったので、プログラムは正しく実行されている。 ● 広告ページ(リンク先) http://roy/~c109001/advertise2/ 秋のうまいもんフェア ----------------------------------------------- 2 感想 今回のプログラムは、最高傑作を作るということで前期・後期に学習したこと をまじえて、プログラムを作成しました。今回の作品は、ジブリから離れて… プログラムを考えました。ネットショッピングの要領で何種類もの買物をでき るようにしました。絵も2枚いれたのですが、少ないのでこれから商品の絵な どいれていければと思います。また、もっとリアルにするために改良していき たいです。(もちろんデータももっと増やしていきたいです。) 3 参考文献 基礎プログラミング II 第2回 なになにといえばこれこれ http://roy/~madoka/2010/r2/02/02_11_theme_10_sortinkey.html 「key を使って並び換え」 ------------------------------------------------------------- 基礎プログラミング II 第4回 繰り返しは引っ張りだそう http://roy/~madoka/2010/r2/04/04_05_theme_05_print.html 「分かりやすいプログラムへ」 http://roy/~madoka/2010/r2/04/04_14_review_01_hash.html 「Hash の作りかた」 ------------------------------------------------------------ 著者:西村まどか 4 共同学習者 大島藍 小松由里 久保田瑛一郎 横山広樹 5 添付