1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【初心者向け】Rubyの配列を使用して、オリジナル本登録アプリを作ってみた。

Last updated at Posted at 2020-01-17

Rubyの配列を使用した学習をします。

配列が便利ということで、配列を使用して、スクールでおそらくやってない配列を使用した本登録アプリケーションを作ります。

条件

・本の名前を登録
・値段を登録
・booksという配列に、本の名前(title)と値段(price)をいれていく
・登録が済んだら、登録したデータを取り出すメソッドも作成する
・登録、一覧表示を繰り返し表示させられるよう、メソッドを書いていく

今回は擬似コードなしで書いていきます。


books = []

def register(books)
  puts "本のタイトルを記載してください"
  book_title = gets.chomp
  puts "本のタイトルを#{book_title}で登録しました"
  puts "販売したい値段を記載してください"
  price = gets.to_i

  books.each do |book_title, price|
  puts "#{book_title}#{price}円で登録しました"
  end
  book = [book_title, price]
  books << book
end

def book_list(books)
  puts "一覧から番号を選んでください"
  index = 1
  books.each do |book|
    puts "#{index}:#{book[0]}"
    index += 1
  end
  input = gets.to_i
  show(books[input-1])
end

def show(books)
  puts "本のタイトルは#{books[0][0]}"
  puts "値段は#{books[0][1]}円"
end

while true do
  puts "番号を選択してください"
  puts "1:本の登録"
  puts "2:本の詳細"
  puts "3:終了する"

  case  gets.to_i 
  when  1
    register(books)
  when  2
    book_list(books)
  when  3
    exit
  else
    "無効な値です"
  end
end

今回は登録したものが、そのまま本の詳細として表示される使用になっています。
あれ、しかも、動作確認すると、

番号を選択してください
1:本の登録
2:本の詳細
3:終了する
2
一覧から番号を選んでください
1:qwe
1
本のタイトルはq
値段はw円

になっている。値段どこいったw
ん、これはどうしたものか???

2分くらいで改修できました。


books = []

def register(books)
  puts "本のタイトルを記載してください"
  book_title = gets.chomp
  puts "本のタイトルを#{book_title}で登録しました"
  puts "販売したい値段を記載してください"
  price = gets.to_i
  puts "#{book_title}#{price}円で登録しました"
  book = [book_title, price]
  books << book
end

def book_list(books)
  puts "一覧から番号を選んでください"
  index = 1
  books.each do |book|
    puts "#{index}:#{book[0]}"
    index += 1
  end
  input = gets.to_i
  input = input - 1
  puts "本のタイトルは#{books[input][0]}"
  puts "値段は#{books[input][1]}円"
  puts "--------------------------"
end

while true do
  puts "番号を選択してください"
  puts "1:本の登録"
  puts "2:本の詳細"
  puts "3:終了する"

  case  gets.to_i 
  when  1
    register(books)
  when  2
    book_list(books)
  when  3
    exit
  else
    "無効な値です"
  end
end

しょーもない処理をしてしまっていたことに気づいた点

① registerで使ってたeach文いらんやん
② book_listメソッドでまとめて処理できるやん
③ メソッドをまとめたことによってinput変数で繰り返し処理できるやん
④ 動作確認すると、みずらい・・・・横棒いれよう!!

念の為、動作確認

番号を選択してください
1:本の登録
2:本の詳細
3:終了する
1
本のタイトルを記載してください
ビジョナリー・カンパニー
本のタイトルをビジョナリー・カンパニーで登録しました
販売したい値段を記載してください
3800
ビジョナリー・カンパニーを3800円で登録しました
番号を選択してください
1:本の登録
2:本の詳細
3:終了する
1
本のタイトルを記載してください
ビジョナリー・カンパニー飛躍の法則
本のタイトルをビジョナリー・カンパニー飛躍の法則で登録しました
販売したい値段を記載してください
4000
ビジョナリー・カンパニー飛躍の法則を4000円で登録しました
番号を選択してください
1:本の登録
2:本の詳細
3:終了する
2
一覧から番号を選んでください
1:ビジョナリー・カンパニー
2:ビジョナリー・カンパニー飛躍の法則
2
本のタイトルはビジョナリー・カンパニー飛躍の法則
値段は4000円
--------------------------
番号を選択してください
1:本の登録
2:本の詳細
3:終了する
2
一覧から番号を選んでください
1:ビジョナリー・カンパニー
2:ビジョナリー・カンパニー飛躍の法則
1
本のタイトルはビジョナリー・カンパニー
値段は3800円
--------------------------

2つ登録してみました。
動きましたね。

プログラミング楽しいですね。
ちなみに、知らない方いたらなんですが、ビジョナリー・カンパニー飛躍の法則、個人的におすすめ本です。
優良企業がなぜ優良企業なのか? 科学的(統計的)に分析した結果がわかります。

ここは違う、ここはこうしたほうがセンスが良い等々ございましたらご指摘いただけますと幸いです。

最後までみていただき、ありがとうございますm(_ _)m

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?