課題
以下の仕様を満たすアプリケーションを作成。実装の際、注意の下に記載されている雛形を使用してください。
仕様
プログラムの実行を行うと、
・ [0]を選択した場合は、本の著者、タイトル、価格を入力させ、保存する。
・ [1]を選択した場合は、保存された本の番号とタイトルを出力、選択できるようにする。 表示した番号を選択された場合は、選択された本の著者、タイトル、価格を出力する。
・ [2]を選択した場合は、アプリケーションを終了する。
必要な知識
gets と chomp
to_i
ハッシュ
配列と配列演算子(<<)
実引数と仮引数
eachメソッド
雛形
def register_book
# 本の著者、タイトル、価格をユーザーに入力させ、保存する
puts '著者を入力してください'
puts 'タイトルを入力してください'
puts '価格を入力してください'
book = { author: author, title: title, price: price }
end
def show_books(books)
puts "見たい番号を入力してください"
# 保存された本の一覧を出力する
end
def show_detail
# 選択された本の詳細な情報(著者、タイトル、価格)を出力する
puts "著者 #{book[:author]}"
puts "タイトル #{book[:title]}"
puts "価格 #{book[:price]}円"
end
while true do
puts "番号を入力してください"
puts "0: 本を登録する"
puts "1: 本の一覧を見る"
puts "2: 終了する"
case gets.to_i
when 0
# 本の登録を行う
when 1
# 保存された本の一覧を出力する
when 2
exit
else
puts '無効な値です'
end
end
def register_book(books) #1
puts '著者を入力してください'
author = gets.chomp
puts 'タイトルを入力してください'
title = gets.chomp
puts '価格を入力してください'
price = gets.to_i
book = { author: author, title: title, price: price }
books << book
end
def show_books(books) #2
puts "見たい番号を入力してください"
index = 1
books.each do |book|
puts "#{index}: #{book[:title]}"
index += 1
end
input = gets.to_i
show_detail(books[input - 1])
end
def show_detail(book) #3
puts "著者 #{book[:author]}"
puts "タイトル #{book[:title]}"
puts "価格 #{book[:price]}円"
end
books = []
while true do
puts "番号を入力してください"
puts "0: 本を登録する"
puts "1: 本の一覧を見る"
puts "2: 終了する"
case gets.to_i
when 0
register_book(books)
when 1
show_books(books)
when 2
exit
else
puts '無効な値です'
end
end
コードの内容
register_bookメソッド
このメソッドで処理したい内容は下記の通りです。
・本の著者、タイトル、価格をユーザーに入力させ、指定の変数に保存する
・保存した値をハッシュとして変数bookに格納する
・仮引数であり、配列であるbooksにbookの値を追加する
def register_book(books)
puts '著者を入力してください'
author = gets.chomp
puts 'タイトルを入力してください'
title = gets.chomp
puts '価格を入力してください'
price = gets.to_i
book = { author: author, title: title, price: price }
books << book
end
show_books メソッド
このメソッドで処理したい内容は下記の通りです。
・booksに保存されている情報のタイトルを表示する(ユーザーが選択できるように、本の一覧番号も一緒に表示させる)
・ユーザーが選択した番号の情報を出力する
def show_books(books)
puts "見たい番号を入力してください"
index = 1
books.each do |book|
puts "#{index}: #{book[:title]}"
index += 1
end
input = gets.to_i
show_detail(books[input - 1])
end
show_detail メソッド
このメソッドで処理したい内容は下記の通りです。
著者、タイトル、価格をハッシュから取り出し表示する
def show_detail(book)
puts "著者 #{book[:author]}"
puts "タイトル #{book[:title]}"
puts "価格 #{book[:price]}円"
end