LoginSignup
0
0

More than 5 years have passed since last update.

課題レポート:【アルゴリズム】本を管理するアプリをつくってみよう!

Posted at

課題

def input_book_info
  book = {}
  puts "本の名前を入力してください:"
  book[:name] = gets.chomp
  puts "本の値段を入力してください:"
  book[:price] = gets.to_i
  puts "出版社を入力してください:"
  book[:company] = gets.chomp
  books << book
end

def show_book_info(books)
  unless books.empty?
    books.each do |book|
      put "番号:[#{index}], 本の名前: #{book[:name]}"
      index += 1
    end

    puts "詳細を見る本の番号を入力してください:"
    input = gets.to_i
    book = books[input]

    puts "本の名前: #{book[:name]}\t|値段: #{book[:price]} 円\t|出版社: #{book[:company]}"
  else
    puts "本が登録されていません。"
end

def end_program
  puts "ご利用ありがとうございました"
  exit
end


books = []

while true do
  puts "登録された本の数:#{books.length}"
  puts "[0]:本の情報を入力する"
  puts "[1]:本の名前を一覧表示する"
  puts "[2]:プログラムを終了する"
  input = gets

  if input == 0
    input_book_info(books)
  elsif input == 1
    show_book_info(books)
  else
    end_program
  end
end

まず、エラー表示によりend抜けを推測、unlessに対するend抜けは素早く発見できたが、その後エラー表示がなくなるので困った。プログラムは一応走るが、[0]:本の情報を入力する [1]:本の名前を一覧表示する がelse扱いになっているので、input以下に間違いがあると当初推測していたが、gets.to_iの単純な記述不足であった。その後リタイアしてしまったが…
以下 def show_book_infoのindex = 0の定義づけの抜け、1行目の引数の記述不足、他、じっくり眺めればわかる問題だった。要注意。

解答

def input_book_info(books)
  book = {}
  puts "本の名前を入力してください:"
  book[:name] = gets.chomp
  puts "本の値段を入力してください:"
  book[:price] = gets.to_i
  puts "出版社を入力してください:"
  book[:company] = gets.chomp
  books << book
end

def show_book_info(books)
  unless books.empty?
    index = 0
    books.each do |book|
      puts "番号:[#{index}], 本の名前: #{book[:name]}"
      index += 1
    end

    puts "詳細を見る本の番号を入力してください:"
    input = gets.to_i
    book = books[input]

    puts "本の名前: #{book[:name]}\t|値段: #{book[:price]} 円\t|出版社: #{book[:company]}"
  else
    puts "本が登録されていません。"
  end
end

def end_program
  puts "ご利用ありがとうございました"
  exit
end


books = []

while true do
  puts "登録された本の数:#{books.length}"
  puts "[0]:本の情報を入力する"
  puts "[1]:本の名前を一覧表示する"
  puts "[2]:プログラムを終了する"
  input = gets.to_i

  if input == 0
    input_book_info(books)
  elsif input == 1
    show_book_info(books)
  else
    end_program
  end
end

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0