質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

3回答

1539閲覧

Ruby を使った簡単なアプリ

novel

総合スコア14

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

1グッド

2クリップ

投稿2019/03/31 08:30

前提・実現したいこと

下記のような簡単なアプリ作成しようと頑張っています。
仕様

  • 実行すると [1] : 件数を登録する, [2] : 件数を確認する, [3] : 終了する という選択肢を表示し、ユーザーに入力を求め、その入力に従い以下のような処理を行う
  • [1]の処理
    1. 名前、年齢、アポイント・案内・成約の3つの件数を入力させ、保存する
  • [2]の処理
    1. 投稿された情報から番号と名前で一覧を表示し(例 [1]山田)、見たい個人の番号の入力を求める
    2. 入力された個人の名前、年齢、アポイント・案内・成約の3つの件数を表示する
  • [3]の処理
    1. アプリケーションを終了する
  • [3]でアプリケーションを終了するまで、投稿や閲覧ができるように繰り返す

使う、雛形

def registration_staff

社員の名前と年齢を登録

staff = {}
puts '社員名を入力してください'
puts '社員の年齢を入力してください'

登録した社員のアポイント、案内、成約の件数を登録

puts "アポイント件数は?"
puts "案内件数は?"
puts "成約件数は?"
end

def show_staff_name

登録された社員の名前を番号を振って表示

puts '見たい社員の番号を入力してください'

選択された社員の名前、年齢、アポイント、案内、成約の件数を表示できるようにする

puts "名前:"
puts "年齢:"
puts "アポイント:"
puts "案内:"
puts "成約:"
end

staffs = []

while true
puts '行いたい項目を選択してください'
puts '[1]件数を登録する'
puts '[2]件数を確認する'
puts '[3]終了する'
input = gets.to_i
puts input
if input == 1
registration_staff
elsif input == 2
show_staff_name
elsif input == 3
# アプリケーションを終了
else
puts '無効な値です'
end
end

発生している問題・エラーメッセージ

Traceback (most recent call last): 1: from q.rb:51:in `<main>' q.rb:18:in `registration_student': undefined local variable or method `scores' for main:Object (NameError) Did you mean? score

該当のソースコード

Ruby

1ソースコード 2 3def registration_staff 4 5 staff = {} 6 puts '社員名を入力してください' 7 staff[:name] = gets.chomp 8 puts '社員の年齢を入力してください' 9 staff[:age] = gets.chomp 10 11 12 puts "アポイント件数は?" 13 language = gets.to_i 14 puts "案内件数は?" 15 mathematics = gets.to_i 16 puts "成約件数は?" 17 english = gets.to_i 18 19 number = { appointments: appointment, guides: guide, closings: closing } 20 numbers << number 21 22 return staff 23 24 end 25 26 def show_staff_name 27 28 puts '見たい社員の番号を入力してください' 29 names.each_with_index do |name, index| 30 puts "#{index + 1}: #{staff[:name]}" 31 end 32 input = gets.to_i 33 show_detail(staff[input - 1]) 34 35 36 puts "名前:#{:name}" 37 puts "年齢:#{:age}" 38 puts "アポイント:#{:appointment}" 39 puts "案内:#{:guide}" 40 puts "成約:#{:closing}" 41 end 42 43 staffs = [] 44 45 while true 46 puts '行いたい項目を選択してください' 47 puts '[1]件数を登録する' 48 puts '[2]件数を確認する' 49 puts '[3]終了する' 50 input = gets.to_i 51 puts input 52 if input == 1 53 registration_staff 54 elsif input == 2 55 show_staff_name 56 elsif input == 3 57 exit 58 else 59 puts '無効な値です' 60 end 61 end

試したこと

いろいろと自力で試したのですがどんどん深みにハマりまして、
ご教授いただけましたら幸いです。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2019/03/31 08:58

エラー文とプログラムが一致していません。エラーの内容は「scoresという変数が見つからない」と指摘していますが、ご提示のコードのどこにもscoresという変数の記載がありません。ソースを省略していませんか?
novel

2019/03/31 10:37

ありがとうございます。 これで全てなのですが、足りない部分をどうすればいいのか・・・ 今もいろいろ試していますが、完全に深みにハマっているようです。 拙くて申し訳ございません。 よろしくおねがいいたします。
kazto

2019/03/31 12:34

なるほど。それでは、実行しているとnovel様が考えているスクリプトと、実際に動作しているスクリプトが異なっていると考えられます。エディタの保存忘れ、スクリプトの取り違えなどありませんでしょうか。
otn

2019/03/31 12:45

このソースから、そのエラーメッセージは出ませんので、実行するファイルを間違えていると思われます。 よく見直してください。
novel

2019/04/01 00:05

重ね重ね、申し訳ございません。 エラーは下記の通りです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Traceback (most recent call last): 1: from w.rb:50:in `<main>' w.rb:17:in `registration_staff': undefined local variable or method `guide' for main:Object (NameError) Did you mean? guides ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー お手間取らせまして申し訳ございません。
guest

回答3

0

number = { appointments: appointment, guides: guide, closings: closing }

上記の行で、未定義の変数 appointment, guide, closingを参照しています。

投稿2019/04/01 06:43

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

novel

2019/04/01 09:43

ありがとうございます。 何日かかっても自力でやってみます。 こういう場合どう定義づければいいか悩んで試行錯誤していますが、 グダグダになってこの状態まで戻す => 無限ループ中です。
guest

0

変数名がおかしいです。ソースコードを「意味を考えながら」、よく見直しましょう。

投稿2019/04/01 05:16

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

不完全ではございますがここまでたどり着きました。
修正したほうがいいよという部分ございましたら、
ご指摘いただけましたら幸いです。

def registration_staff(hoges)
staff = {}
puts “社員名を入力してください”
staff[:name]=gets.chomp
puts “社員の年齢を入力してください”
staff[:age]=gets.to_i

puts “アポイント件数は?”
staff[:appoint]=gets.to_i
puts “案内件数は?”
staff[:try]=gets.to_i
puts “成約件数は?”
staff[:succes]=gets.to_i
hoges<<staff
end

def show_staff_name(hoges)
hoges.each.with_index do |hoge, index|
puts “[#{index}]: #{hoge[:name]}”
end
puts “見たい社員の番号を入力してください”
inputs=gets.to_i
fugas=hoges[inputs]
puts “名前:”
puts “#{fugas[:name]}”
puts “年齢:”
puts “#{fugas[:age]}”
puts “アポイント:”
puts “#{fugas[:appoint]}”
puts “案内:”
puts “#{fugas[:try]}”
puts “成約:”
puts “#{fugas[:succes]}”
end

staffs = []

while true
puts “行いたい項目を選択してください”
puts “[1]件数を登録する”
puts “[2]件数を確認する”
puts “[3]終了する”
input = gets.to_i
puts input
if input == 1
registration_staff(staffs)
elsif input == 2
show_staff_name(staffs)
elsif input == 3
exit
else
puts “無効な値です”
end
end

投稿2019/04/05 10:00

novel

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問