今回は簡単なプログラムを作ってメソッドや配列を使う練習をしたものを言語化して整理します。
仕様
アプリケーションを起動すると
[1] : 書籍を登録する, [2] : 書籍情報を確認する, [3] : アプリケーションを終了する
という選択肢を表示し、ユーザーに入力を求め、その入力に従い以下の処理を行う。
アプリケーションを終了するまで、処理を繰り返す。
[1]の処理
名前、著者名、ジャンル、ページ数を入力させ、保存する
[2]の処理
登録された書籍情報から番号と名前で一覧を表示し(例 [1]ハリーポッター)、見たい書籍の番号の入力を求める。
入力された書籍の名前、著者名、ジャンル、ページ数を表示する。
[3]の処理
アプリケーションを終了する
def registration_book
# 書籍の名前、著者名、ジャンル、ページ数を登録できるようにしなさい
book = {}
puts '書籍名を入力してください'
puts '著者名を入力してください'
puts 'ジャンルを入力してください'
puts 'ページ数を入力してください'
end
def show_book_info
# 登録された書籍の名前を番号を振って表示しなさい
puts '見たい書籍の番号を入力してください'
# 選択された書籍の名前、著者名、ジャンル、ページ数を表示できるようにしなさい
puts "書籍名:"
puts "著者名:"
puts "ジャンル:"
puts "ページ数:"
end
books = []
while true
puts '行いたい項目を選択してください'
puts '[1]書籍を登録する'
puts '[2]書籍情報を確認する'
puts '[3]アプリケーションを終了する'
input = gets.to_i
if input == 1
registration_book
elsif input == 2
show_book_info
elsif input == 3
exit
else
puts '無効な値です'
end
end
1 def registration_book(books)
2 # 書籍の名前、著者名、ジャンル、ページ数を登録できるようにしなさい
3 book = {}
4 puts '書籍名を入力してください'
5 book[:name] = gets.chomp
6 puts '著者名を入力してください'
7 book[:author] = gets.chomp
8 puts 'ジャンルを入力してください'
9 book[:genre] = gets.chomp
10 puts 'ページ数を入力してください'
11 book[:page] = gets.to_i
12 books << book
13 end
引数(books)を指定してメソッドの外部からデータを受け取る。
booksには書籍情報が格納されている。
bookハッシュにname,author,genre,pageをそれぞれ入力させる。
books << bookでbooksという配列にbookハッシュを格納する。
最終的に以下のようになる。
books = [{name: (入力された値1), author: (入力された値2), genre: (入力された値3), page: (入力された値4)}, {name: (入力された値1), author: (入力された値2), genre: (入力された値3), page: (入力された値4)}, ......]
1 def show_book_info(books)
2 i = 0
3 # 登録された書籍の名前を番号を振って表示しなさい
4 books.each do |book|
5 puts "#[{i}:#{book[:name]}"
6 i += 1
7 end
8 puts '見たい書籍の番号を入力してください'
9 num = gets.to_i
10 book = books[num]
11
12# 選択された書籍の情報を表示できるようにしなさい
13 puts "書籍名:#{book[:name]}"
14 puts "著者名:#{book[:author]}"
15 puts "ジャンル:#{book[:genre]}"
16 puts "ページ数:#{book[:page]}ページ"
17 end
18
19 books = []
4~6行目で登録された書籍を番号:書籍名という形で表示する。
6行目は番号が1ずつ増えていくようにしている。
10行目は配列booksから特定の要素(書籍)を選択するためのコード。
選択された書籍情報がbookに代入される。
1 while true
2 puts '行いたい項目を選択してください'
3 puts '[1]書籍を登録する'
4 puts '[2]書籍情報を確認する'
5 puts '[3]アプリケーションを終了する'
6 input = gets.to_i
7 if input == 1
8 registration_book(books)
9 elsif input == 2
10 show_book_info(books)
11 elsif input == 3
12 exit
13 else
14 puts '無効な値です'
15 end
16 end
ループ処理で繰り返し選択できるようにする。
5行目の指定で無限ループから抜け出す処理を入れている。
7~12行目でプログラムを実行。
配列とハッシュが組み合わさる点が複雑に感じてまだまだ苦手な部分です。
引数の指定も忘れがちなのでもっとたくさん問題を解いてマスターします!!