2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ruby練習

Posted at

今回は簡単なプログラムを作ってメソッドや配列を使う練習をしたものを言語化して整理します。

仕様

アプリケーションを起動すると

[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]の処理
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配列
books = [{name: (入力された値1), author: (入力された値2), genre: (入力された値3), page: (入力された値4)}, {name: (入力された値1), author: (入力された値2), genre: (入力された値3), page: (入力された値4)}, ......]
[2]の処理
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行目でプログラムを実行。

配列とハッシュが組み合わさる点が複雑に感じてまだまだ苦手な部分です。
引数の指定も忘れがちなのでもっとたくさん問題を解いてマスターします!!

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?