第7回 ゼミ紹介 レポート課題 氏名:菅原彩花 学籍番号:c1101253 語学クラス:英語6 コース:政策マネジメントコース A、広告ホームページアドレス URL:http://roy.e.koeki-u.ac.jp/~c110125/advertise2/index.html a,仕様書 ----------仕様書------------------------- --<企画意図>-- くだものなどを親類や御世話になった人に送る際、スーパーで贈り物を買って送っ てもらうことが多いが、店員がいなくても送る手続ができるのでは、と思い作成 した。 ---- 何種類かの宅配可能なくだものがすでに登録されている。そこから商品と個数を 選択し、その後送り先を選び送料を確認します。最後に商品合計と送料の合計が分 かります。 --<遊び方>-- このプログラムは、プログラムファイルをダウンロードした後にkterm上で % chmod +x shop.rb と入力し、Returnキーを押した後、 % ./shop.rb と入力し、Returnキーを押すとプログラムが始まります。 --<著作権について>-- プログラム(syop.rb)は菅原彩花が著作権を保有しています。 このプログラムの入手、実行、改変、再配布はいずれも自由に行うことができま す。 ただしこのプログラムを取り扱うことで生じたいかなる結果に対しても責任を負 いません。このプログラムについて感想・要望などありましたら c110125@f.koeki-u.ac.jp にご連絡ください。 b,作成したプログラムについて (1)作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' #漢字コード def total(syouhin,souryou) #商品代金と送料を計算する関数total syouhin + souryou end print("あらかじめ宅配伝票に必要事項を記入しておく必要があります。\n") print("まずは送りたい商品を選んでください。\n") item = Hash.new("登録されていません") #Hashをつかってデータを登録しておく #変数をitemとする item ["1"] = ["ラフランス 5個入 "," 1000"] item ["2"] = ["ラフランス10個入 "," 2000"] item ["3"] = ["和梨 10個入 "," 1500"] item ["4"] = ["庄内柿 10個入 "," 1300"] item ["5"] = ["リンゴ 20個入 "," 2000"] for number,name in item #登録してあるデータを全て表示させる printf("%s番の商品は%s---%d円\n",number,name[0],name[1].to_i) end #for-endを使って配列に入っているものを全て表示させ、なくなったら終わる kosuu = 0 #商品の購入個数をkosuuとし初期値を0とする goods_total = 0 #商品の購入代金をgoods_totalとし初期値を0とする while true #商品の購入、個数についての繰り返し STDERR.print("商品の番号を入力して下さい。") number = gets.chomp!.to_s #購入する商品の番号を入力させる。 #入力した番号をnumberとし、to_sで文字として扱う #hashに登録されているものに入力した番号があるかをさがす if item.key?(number) == false #入力した番号が無いとき printf("%s番の商品はございません。\n",number) print("もう一度最初からやり直してください。\n") redo #入力した番号がないときはもういちど商品番号を入力するまでもどる else item.key?(number) == true #入力した番号があるとき printf("ご購入商品は%s番の%s円ですね。\n",number,item[number]) STDERR.print("いくつ購入されますか?\n") #購入個数を入力させる kosuu = gets.to_i #入力した個数をkosuuとし整数として扱う break #whileから抜けて次へ進む end end #ここで商品×個数で商品代金を計算する if number.to_i == 1 goods_total = 1000 * kosuu.to_i elsif number.to_i == 2 goods_total = 2000 * kosuu.to_i elsif number.to_i == 3 goods_total = 1500 * kosuu.to_i elsif number.to_i == 4 goods_total = 1300 * kosuu.to_i else number.to_i == 5 goods_total = 2000 * kosuu.to_i end printf("\n商品の合計金額は%d円です。\n",goods_total) #商品合計の表示 while true #商品合計が0円のときにはプログラムを終了する。 if goods_total == 0 print("商品のご購入がないので終了します。\n") break end #ifのend print("続いて送料を確認します。\n") print("\n") district = Hash.new #送料をhashをつかって変数districtに登録 district ["北海道"] = "600" district ["東北"] = "500" district ["関東"] = "600" district ["中部"] = "600" district ["近畿"] = "700" district ["四国"] = "800" district ["中国"] = "800" district ["九州・沖縄"] = "900" for dis,send in district #登録してあるデータを全て表示させる #地域をdis、送料をsendとしている。 printf("%-10sまでの送料は%4s円です。\n",dis,send) end send_money = 0 while true #送る地方を選択するためのwhile STDERR.print("\n送りたい地方を入力して下さい。") dis = gets.chomp!.to_s #送る地方をdisとする。 if district.key?(dis) == false #入力された地方が登録されていないときやり直す printf("%s地方はございません。\n",dis) print("もう一度地方を選んでください。\n") redo #地方を入力する直前に戻る else district.key?(dis) == true #入力された地方が登録されているとき printf("送り先は%s地方ですね。\n",dis) send_money =district[dis].to_i printf("送料は%d円かかります。\n",district[dis])#hashから送料を取り出す break #繰り返しから抜け出して次に進む end #ifのend end #送る地方を選択するためのwhileのend printf("\n商品と送料の合計は%d円です。\n",total(goods_total,send_money)) print("送り先まで大切にお届けします。\n") print("商品の到着までお客様控えの保管をお願いいたします。\n") print("ありがとうございました。\n") break end #商品代金が0円のときに終了するためのwhileのend (2)実行結果 I,全ての入力が上手く終了した場合 pan{SUGAWARA Sayaka}% ./shop.rb [~/public_html/advertise2] あらかじめ宅配伝票に必要事項を記入しておく必要があります。 まずは送りたい商品を選んでください。 1番の商品はラフランス 5個入 ---1000円 2番の商品はラフランス10個入 ---2000円 3番の商品は和梨 10個入 ---1500円 4番の商品は庄内柿 10個入 ---1300円 5番の商品はリンゴ 20個入 ---2000円 商品の番号を入力して下さい。3 ご購入商品は3番の和梨 10個入 1500円ですね。 いくつ購入されますか? 2 商品の合計金額は3000円です。 続いて送料を確認します。 関東 までの送料は 600円です。 四国 までの送料は 800円です。 近畿 までの送料は 700円です。 九州・沖縄までの送料は 900円です。 中部 までの送料は 600円です。 東北 までの送料は 500円です。 中国 までの送料は 800円です。 北海道 までの送料は 600円です。 送りたい地方を入力して下さい。北海道 送り先は北海道地方ですね。 送料は600円かかります。 商品と送料の合計は3600円です。 送り先まで大切にお届けします。 商品の到着までお客様控えの保管をお願いいたします。 ありがとうございました。 II、登録されていない商品番号が入力されたとき pan{c110125}% ./shop.rb [~/public_html/advertise2] あらかじめ宅配伝票に必要事項を記入しておく必要があります。 まずは送りたい商品を選んでください。 1番の商品はラフランス 5個入 ---1000円 2番の商品はラフランス10個入 ---2000円 3番の商品は和梨 10個入 ---1500円 4番の商品は庄内柿 10個入 ---1300円 5番の商品はリンゴ 20個入 ---2000円 商品の番号を入力して下さい。6 6番の商品はございません。 もう一度最初からやり直してください。 商品の番号を入力して下さい。3 ご購入商品は3番の和梨 10個入 1500円ですね。 いくつ購入されますか? 1 商品の合計金額は1500円です。 続いて送料を確認します。 関東 までの送料は 600円です。 四国 までの送料は 800円です。 近畿 までの送料は 700円です。 九州・沖縄までの送料は 900円です。 中部 までの送料は 600円です。 東北 までの送料は 500円です。 中国 までの送料は 800円です。 北海道 までの送料は 600円です。 送りたい地方を入力して下さい。九州・沖縄 送り先は九州・沖縄地方ですね。 送料は900円かかります。 商品と送料の合計は2400円です。 送り先まで大切にお届けします。 商品の到着までお客様控えの保管をお願いいたします。 ありがとうございました。 III、商品の購入金額が0円のとき pan{c110125}% ./shop.rb [~/public_html/advertise2] あらかじめ宅配伝票に必要事項を記入しておく必要があります。 まずは送りたい商品を選んでください。 1番の商品はラフランス 5個入 ---1000円 2番の商品はラフランス10個入 ---2000円 3番の商品は和梨 10個入 ---1500円 4番の商品は庄内柿 10個入 ---1300円 5番の商品はリンゴ 20個入 ---2000円 商品の番号を入力して下さい。2 ご購入商品は2番のラフランス10個入 2000円ですね。 いくつ購入されますか? 0 商品の合計金額は0円です。 商品のご購入がないので終了します。 IV、登録されていない地方が入力されたとき pan{SUGAWARA Sayaka}% ./shop.rb [~/public_html/advertise2] あらかじめ宅配伝票に必要事項を記入しておく必要があります。 まずは送りたい商品を選んでください。 1番の商品はラフランス 5個入 ---1000円 2番の商品はラフランス10個入 ---2000円 3番の商品は和梨 10個入 ---1500円 4番の商品は庄内柿 10個入 ---1300円 5番の商品はリンゴ 20個入 ---2000円 商品の番号を入力して下さい。5 ご購入商品は5番のリンゴ 20個入 2000円ですね。 いくつ購入されますか? 2 商品の合計金額は4000円です。 続いて送料を確認します。 関東 までの送料は 600円です。 四国 までの送料は 800円です。 近畿 までの送料は 700円です。 九州・沖縄までの送料は 900円です。 中部 までの送料は 600円です。 東北 までの送料は 500円です。 中国 までの送料は 800円です。 北海道 までの送料は 600円です。 送りたい地方を入力して下さい。ロシア ロシア地方はございません。 もう一度地方を選んでください。 送りたい地方を入力して下さい。中国 送り先は中国地方ですね。 送料は800円かかります。 商品と送料の合計は4800円です。 送り先まで大切にお届けします。 商品の到着までお客様控えの保管をお願いいたします。 ありがとうございました。 (3)プログラムの説明 プログラム本体に記載 (4)考察 まず計算結果が正しいのか確かめる。 Iのとき pan{SUGAWARA Sayaka}% bc -l [~/public_html/advertise2] 1500*2 3000 3000+600 3600 IIのとき pan{c110125}% bc -l [~/public_html/advertise2] 1500*1 1500 1500+900 2400 IIIのとき pan{c110125}% bc -l [~/public_html/advertise2] 2000*0 0 IVのとき pan{c110125}% bc -l [~/public_html/advertise2] 2000*2 4000 4000+800 4800 それぞれプログラムの実行結果とこたえが同じになるのでプログラムの計算結果 は正しいと言える。 プログラムを作成している際に商品のHashから商品の金額を取り出してそ のまま計算式にいれて使いたかったのですが、うまく取り出せなかったのでifを つかって全ての番号の場合の計算をさせてしまった。 登録されている数が少なければifで全ての計算を場合分けして出来るが、数が増 えてしまったら取り出して計算させる方法でないと厳しい。 B、リンクをはったWEBページのURL http://roy.e.koeki-u.ac.jp/~c110125/advertise2/index.html C、感想 今回はHashとdefを使ったプログラムを自力で作成したが前期で学んだ内容を忘 れていることに気付いた。わからないところを調べながら作成したので時間が余 計にかかってしまった。 またwhile-endの位置によってもプログラムの実行結果が違うので、実行結果を みながらどこが余計に繰り返しているのかなど確認しながら作業した。 D、参考文献 2010年基礎プログラミングII 著者:西村先生 URL:http://roy/~madoka/2010/r2/ 2011年基礎プログラミングII 著者:西村先生 URL:http://roy/~madoka/2011/r2/ 基礎プログラミングI 著者:神田先生 URL:http://roy/~naoya/ruby/index.html ------------------- 東北公益文科大学 公益学部 公益学科 2年 菅原彩花 c110125@f.koeki-u.ac.jp