第7回 ゼミ紹介 レポート課題 氏名 : 余語結佳 学籍番号 : c1101974 語学クラス : 英語2 コース : 地域共創コース ---------------------------------------------------------------------- 1. プログラム ---------------------------------------------------------------------- ********************************************************************** 仕様書 : siyousyo.txt ********************************************************************** **** kyuuryou.rbの仕様書 **** ●企画意図● 大学生のみなさんは多くの人がバイトをしています。しかしバイト先では時給な どを計算するプログラムはあまりないと思います。そのため、プログラムの利用 者に時給、労働時間、休憩時間、出勤日数を入力してもらうことで純労働時間、 日給計算、月給計算のそれぞれを算出できるプログラムを作れば需要があるので はないかと予想したのでこのプログラムを作成しました。 また、実際にバイト先に置くと想定して作成したので、今まで覚えた業務の内容 を書き出して自分で確認できるというプログラムもあります。定期的に書き出す と業務内容の確認ができるのでバイトの人の業務記憶漏れをふせぐことが出来る と思ったのでこの機能もつけ足した。 ●使用方法● プログラムを起動すると、どのモードを実行するか聞いてきます。 1 労働時間、給料計算モード 2 業務内容メモモード 3 終了 <<1を選択した場合>> 計算の前にそれぞれの要素を入力してもらうと どの計算結果が知りたいですか?選択してください。 1 純労働時間計算 2 日給計算 3 月給計算 4 終了 と選択肢がでてきて 純労働時間計算(純労働時間 = 全体の労働時間から休憩時間をひいたもの)と、 日給計算(時給×労働時間)と、 月給計算(日給×出勤日数) をそれぞれ求めることができます。 4の終了を選択しない限り終了しないので何度でも結果を見ることが出来ます。 <<2を選択した場合>> 業務内容を確認して確認できるプログラムモードが実行されます。 このモードはどちらを実行しても終了の3を入力しない限り終了しないので何度 でも実行することができます。 <<終了方法>> 1の計算モードと2のメモモードは、3の終了を入力しない限り終了しないので何 度でもプログラムを実行することが出来ます。 ●連絡先● このプログラムに対する、感想・助言・要望・などがあれば大歓迎致します。 c110197@f.koeki-u.ac.jp までメッセージをお送り下さい。 ただし、迷惑メール防止のため@は全角にしています。 コピーして使用する場合は半角にするようよろしくお願い致します。 ●無保障● このプログラムは余語結佳が著作権を保有しています。 このプログラムの入手・実行・改変・再配布は、いずれも無料で自由に行なうこ とができます。 が、このプログラムを取り扱うことで生じたいかなる結果に対してもこちらは責 任を負いません。 ********************************************************************** 作成したプログラム : kyuuryou.rb ****************************** 考えた設定 **************************** 仕様書の企画意図と多少重なりますが、バイト先でこのようなプログラムがあれ ば便利だと思ったので作成しました。 求められた各項目を入力することで日給や月給、労働時間などを求めることが出 来ます。 また、業務内容を書き出して業務の確認をすることもできます。 *************************** 作成したプログラム *********************** #!/usr/koeki/bin/ruby def mode # モード選択のためのdef print"\nどのモードを実行しますか?\n" print"\e[36m 1 労働時間、給料計算モード\n" print" 2 業務内容メモモード\n" print" 3 終了\e[m\n" print"\n選択番号 : " end # def-end def keisan # 計算選択のためのdef print"どの計算結果が知りたいですか?選択してください。\n" print"\e[32m 1 純労働時間計算\n" print" 2 日給計算\n" print" 3 月給計算\n" print" 4 終了\e[m\n" print"\n選択番号 : " end # def-end # 純労働時間算出のためのdef def zyuntime(h,r) # h=hour(時間),r=rest(休憩) h *= 60 # ◯時間→分に計算したのをhに乗算代入 h -= r # 分に直した労働時間(h)-休憩時間(r)で純労働時間 h / 60 # ↑のままだと分単位なので時間単位に戻す end # def zyuntime-end #--------------------------------------------------- $KCODE = 'e' # このプログラムの漢字コードは EUC である while true # モードを実行する間繰り返すためのwhlie mode # モードの選択肢が書いてあるmode defを呼んでいる sentaku = gets.to_i # 選んだモード番号を代入 if sentaku == 1 # もしmodeで1を選択したら print"\n\n\e[1;4m【1.計算モード】\e[m\n\n" print"あなたの純労働時間、日給、月給を計算します。\n" print"\n\e[4;1m <<入力>>\e[m\n\n" print"●あなたの時給を入力して下さい。(単位不要)\n" print"時 給 : " money = gets.to_i # 時給を代入 print"\n●労働時間は何時間ですか?\n" print" 「◯時間◯分」の場合の入力方法\n" print" ◯時間15分→◯.25\n" print" ◯時間30分→◯.50\n" print" ◯時間45分→◯.75\n" print" のように入力してください。\n" print"\n時 間 : " hour = gets.to_f # 労働時間代入 print"\n●休憩時間は何分ですか?\n" print"※ここでは15分であれば「15」のようにそのまま入力してください。\n" print"休憩時間 : " rest = gets.to_f # 休憩時間代入 print"\n●今月は合計で何日出勤しましたか?\n" print"日 数 : " day = gets.to_i # 出勤日数代入 nikkyu = money * zyuntime(hour,rest) # 日給計算。月給でもこの計算結果が必要なのでここで計算。 print"\n\n\e[4;1m <<計算>> \e[m\n\n" while true # 計算をするあいだ繰り返し keisan # 計算の選択肢が書いてあるkeisan defを呼んでいる choice = gets.to_i # 選択結果をchoiceに代入 if choice == 1 # もしchoiceで1を選択されたら print"-----------------------------\n" printf("\n\e[30;43m一日の純労働時間は%4.2f時間です。\e[m\n\n",zyuntime(hour,rest)) # zyuntimeメソッドの最後の行を呼び出して出力 print"※小数表記について※\n" print" 小数以下は労働時間入力の時と同じで\n" print" ◯時間15分→◯.25\n" print" ◯時間30分→◯.50\n" print" ◯時間45分→◯.75\n" print" のように表記しています。\n\n" print"-----------------------------\n" end # if-end if choice == 2 # もしchioceで2を選択されたら print"-----------------------------\n" printf("\n\e[30;43m一日当たりの日給は%d円です。\e[m\n\n",nikkyu) # whileの外で計算したnikkyuを代入 print"-----------------------------\n" end # if-end if choice == 3 # もしchioceで3を選択されたら print"-----------------------------\n" printf("\n\e[30;43m今月の月給は%d円です。\e[m\n\n",nikkyu * day) # 日給変数×出勤日数 = 月給 print"-----------------------------\n" end # if-end if choice == 4 # もしchioceで4を選択されたら print"計算モードを終了します。\n\n" print"=============================\n" break # 繰り返しから抜ける end # if-end end # while-end end # if sentaku == 1 end if sentaku == 2 # もしmodeで1を選択したら print"\n\n\t\e[1;4m【業務内容メモモード】\e[m\n\n" print"業務内容を書き出してみましょう。\n" print"入力終了はCtrl-Dです。\n" print"※業務内容を書き直したいときは同じ業務名を入力して内容を変更してください。\n" work = Hash.new # workをハッシュにする宣言 while true # 入力をbreakされるまで繰り返し print"\n-----------------------------\n" print"業務名 : " gyoumu = gets # 業務名をkeyのgyoumuに代入 if gyoumu == nil # もしCtrl-Dが入力されたら break # 繰り返しを抜ける else # そうでなければ gyoumu == gyoumu.chomp! # 改行文字を取る end # if gyoumu == nil end print"\n業務内容 : " work[gyoumu] = gets.chomp! # 業務内容をvalueに代入 # p work # keyとvalueが正しく代入されているかの確認p文 print"-----------------------------\n" end # whilr-end print"\n\n業務内容メモの確認\n" for namae,naiyou in work # namae=key(業務名),naiyou=value(業務内容) printf("\n\n\e[30;43m%sの業務内容は%sです。\e[m\n",namae,naiyou) end # for繰り返しend g = gets # リターンキー入力で終了 end # if sentaku == 2 end if sentaku == 3 # もしmodeで1を選択したら print"終了します。\n" exit # 強制終了 end # if sentaku == 3 end end # while end *********************** 元にしたプログラム ************************* 今回元にしたプログラムはありません。 defとHashを使うということを目的にしたので今まで作成したdefとHashの内容を 思い出しながら作成しました。 ******************************* 実行結果 **************************** pan{YOGO Yuka}% ./kyuuryou.rb [~/Ruby] どのモードを実行しますか? 1 労働時間、給料計算モード 2 業務内容メモモード 3 終了 選択番号 : 1 【1.計算モード】 あなたの純労働時間、日給、月給を計算します。 <<入力>> ●あなたの時給を入力して下さい。(単位不要) 時 給 : 650 ●労働時間は何時間ですか? 「◯時間◯分」の場合の入力方法 ◯時間15分→◯.25 ◯時間30分→◯.50 ◯時間45分→◯.75 のように入力してください。 時 間 : 4.25 ●休憩時間は何分ですか? ※ここでは15分であれば「15」のようにそのまま入力してください。 休憩時間 : 15 ●今月は合計で何日出勤しましたか? 日 数 : 9 <<計算>> どの計算結果が知りたいですか?選択してください。 1 純労働時間計算 2 日給計算 3 月給計算 4 終了 選択番号 : 1 ----------------------------- 一日の純労働時間は4.00時間です。 ※小数表記について※ 小数以下は労働時間入力の時と同じで ◯時間15分→◯.25 ◯時間30分→◯.50 ◯時間45分→◯.75 のように表記しています。 ----------------------------- どの計算結果が知りたいですか?選択してください。 1 純労働時間計算 2 日給計算 3 月給計算 4 終了 選択番号 : 2 ----------------------------- 一日当たりの日給は2600円です。 ----------------------------- どの計算結果が知りたいですか?選択してください。 1 純労働時間計算 2 日給計算 3 月給計算 4 終了 選択番号 : 3 ----------------------------- 今月の月給は23400円です。 ----------------------------- どの計算結果が知りたいですか?選択してください。 1 純労働時間計算 2 日給計算 3 月給計算 4 終了 選択番号 : 4 計算モードを終了します。 ============================= どのモードを実行しますか? 1 労働時間、給料計算モード 2 業務内容メモモード 3 終了 選択番号 : 2 【業務内容メモモード】 業務内容を書き出してみましょう。 入力終了はCtrl-Dです。 ※業務内容を書き直したいときは同じ業務名を入力して内容を変更してください。 ----------------------------- 業務名 : レジ打ち 業務内容 : お客様の会計 ----------------------------- ----------------------------- 業務名 : 本棚整理 業務内容 : はたきを持って本棚整理 ----------------------------- ----------------------------- 業務名 : 清掃 業務内容 : トイレ掃除 ----------------------------- ----------------------------- 業務名 : 清掃 業務内容 : モップ掛け ----------------------------- ----------------------------- 業務名 : ^D 業務内容メモの確認 本棚生理の業務内容ははたきを持って本棚整理です。 レジ打ちの業務内容はお客様の会計です。 清掃の業務内容はモップ掛けです。 どのモードを実行しますか? 1 労働時間、給料計算モード 2 業務内容メモモード 3 終了 選択番号 : 3 終了します。 ******************************** 考察 ******************************** ●defについて 上から2つめのdef keisan で、最初は def zyuntime(h,r) # h=hour(時間),r=rest(休憩) h *= 60 # ◯時間→分に計算したのをhに乗算代入 h -= r # 分に直した労働時間(h)-休憩時間(r)で純労働時間 zyun = h / 60 # ↑のままだと分単位なので時間単位に戻す end のようにしていました。 ですがこれだと、出力先のprintで表示されずエラーメッセージが帰ってきま した。 そこでdefの中で zyun = h / 60 としていたところをzyunを消して実行するとエラーメッセージは表示されず printにあてはめて文章が出力されました。このことから、defの最後の行が帰っ て来るという機能を使いたいときは余計な変数は使っては行けないと言うことが わかりました。 ●Hash-valueの上書き機能について メモ機能を作成する際に、最初は keyに番号を、valueには業務名と業務内容を書き込むようにしようと思いました。 つまりvalueの要素をふたつにしようと思ったのです。 valueの要素の指定は ハッシュ名[変数][0]=gets のようにしようと思いました。 ですがpで表示させながらこれを実行すると、valueの要素は2つ記憶されるので はなく上書きされてしまいました。 そのためvalueに2つ要素を作ることは叶いませんでした。 ですがこの機能を利用して上書き機能にすることができるということに気が付き ました。 そこで、メモ機能で業務内容を書き直したい場合は、同じ業務名を入力してもら うと上書きすることが出来ると言う説明文をくわえました。 ●実行結果確認 ◯純労働時間 pan{c110197}% bc -l [~/Ruby] 4.25 * 60 ←分に直している 255.00 ←255分 255 - 15 ←休憩時間を引く 240 ←純労働時間 240 / 60 ←分単位から時間単位へ変換 4.00000000000000000000 ←変換結果で、出力結果と一致している。 ◯日給計算 時給×純労働時間なので入力してもらった時給×↑の結果 時給は650円と入力されているので pan{c110197}% bc -l [~/Ruby] 650 * 4 2600 で出力結果と一致している。 ◯月給計算 日給×出勤日なので入力してもらった出勤日×↑の結果 出勤日は9日と入力されているので pan{c110197}% bc -l [~/Ruby] 2600 * 9 23400 で出力結果と一致しているのでプログラムは正しく動いている。 ◯メモ機能の上書き ----------------------------- 業務名 : 清掃 業務内容 : トイレ掃除 ----------------------------- ----------------------------- 業務名 : 清掃 業務内容 : モップ掛け ----------------------------- と、二回入力したことによって業務内容メモの確認をしたときに上書きがなって いるかを見ると、 清掃の業務内容はモップ掛けです。 としか出力されていない。 このことから上書き機能が正しく動作していることがわかります。 ***************************** リンク先 **************************** 広告ページのリンク先は以下のとおりです。 http://roy/~c110197/advertise2/ ********************************************************************** ---------------------------------------------------------------------- 2. 感想 ---------------------------------------------------------------------- 後期のプログラムは基本的に「実際に企業などで使えるもの」という設定でプロ グラムに取り組んできています。 その中でも、今回のプログラムは自分がバイト先であったらきっと使うだろうな というプログラムを作成しました。いつもバイト先でレジを打っている時を思 い出しながら作成しましたし、よりリアルにするために見やすさも考えて改行 文字や、着色文字などを使用したのでよりリアルなものに仕上がったのではな いかと思います。 また、今回もまた今までわかっていなかった個所を理解できたものがあったので 学習に結びついたと思います。 また、webページ作成は忘れていることが多く時間がかかってしまいましたが、 以前わからなかったことも学習することが出来たのでよかったです。 その学習の中で思ったことが、今回私は使っていませんがクラス属性とは、プロ グラムのdefと似ているということです。 形は違えど、パソコンのプログラムを書くようなものはいかに便利で短時間にわ かりやすく作成できるか考えているというのはみんなおなじなんだなと思いまし た。 --------------------------------------------------------------------- 4.参考文献 ---------------------------------------------------------------------- ◯第2回 基礎プログラミングII なになにといえばこれこれ 西村 まどか http://roy/~madoka/2011/r2/02/ ◯基礎プログラミングI 第11回 神田直弥 http://roy/~naoya/ruby/11.html ◯基礎プログラミングI 電子チケットを作ろう 西村まどか http://roy/~madoka/2011/r1/08/ ◯Webページ作成の基礎 http://roy.e.koeki-u.ac.jp/web/ ◯情報リテラシー2 第8回 山本直美 http://roy/~yamamoto/text10/k208.html ◯基礎プログラミングI 第10回 神田直弥 http://roy/~naoya/ruby/10.html ◯自分のメモ ◯以前自分が作成したwebページ 学習協力者:斎藤陽香さん 畠山貴衣さん 伊藤桜子さん ---------------------------------------------------------------------- 5. 添付 ---------------------------------------------------------------------- 1 仕様書のsiyousyo.txt 2 プログラムのkyuuryou.rb ======================== 余語結佳 Yogo Yuka 東北公益文科大学 2年 c110197@f.koeki-u.ac.jp ========================