【#100DaysOfCode】9日目 「作りながら学ぶRuby入門」第12章
蔵書管理アプリケーション(テキスト入力版)を作成する
ついに、これまでやってきた機能を一つにまとめ
【蔵書管理アプリケーション (テキスト入力版)】のコードを完成させる。
とりあえず今回は、【雛形】の完成だ。
形としてはまだまだだけど、達成感あるな〜〜
Day9
・「作りながら学ぶRuby入門」 12章
蔵書管理アプリケーションの機能
- 蔵書データを格納する
- 蔵書データを登録する
- 蔵書データを表示する
・蔵書管理アプリケーションの処理概要
蔵書データと蔵書データアプリケーションをクラスを使って書く
- 蔵書データクラス
蔵書データクラスのインスタンスとして作成。ハッシュに格納。
- 蔵書管理アプリケーションクラス
蔵書の管理は、このクラスの操作として実現。
以下そのコード
# 「作りながら学ぶRuby入門」 第12章 # 蔵書管理アプリケーション 【テキスト版】 # 全体のまとめ =begin ********** 処理のまとめ ****************** 蔵書データのクラスを作成 蔵書データ管理アプリケーションのクラスを作成 蔵書管理アプリケーションクラス のインスタンスを作る 蔵書管理アプリケーションクラス のインスタンスを呼び出す メソッドを指定して、蔵書管理の一連の流れを実行する **************************************************** 【検索機能】 【例外処理】の実装はこの後で学んで、実装!! =end require 'date' class BookInfo # BookInfoクラスのインスタンスを初期化する def initialize (title, author, pages, publish_date ) @title = title @author = author @pages = pages @publish_date = publish_date end # 最初に検討する属性に対するアクセサを提供する attr_accessor :title, :author, :pages, :publish_date # BookInfoクラスのインスタンスの文字列表現を返す def to_s "#@title, #@author, #@pages, #@publish_date" end # 蔵書データを書式をつけて出力する def toFormattedString( sep = "\n") "書籍名: #{@title}#{sep}, 著者名: #{@author}#{sep}, ページ数: #{@pages}ページ#{sep} 発刊日: #{@publish_date}#{sep}" end end # BookInfoManagerクラスを定義する class BookInfoManager def initialize @book_infos = {} end # 蔵書データをセットアップする def setUp # 複数冊の蔵書データを登録する @book_infos["Ruby2009"] = BookInfo.new( "作りながら学ぶRuby入門", "久保秋 真", 418, Date.new(2009, 10, 10 ) ) @book_infos["Yoko"] = BookInfo.new( "プラスチック解体高校 1 新装版 熱い!!", "日本橋 ヨヲコ", 214, Date.new(2014, 6, 23) ) @book_infos["Haruki2019"] = BookInfo.new( "騎士団長殺し 第1部 顕れるイデア編(上) くっそ面白い〜〜", "村上 春樹", "不明", Date.new( 2019, 3, 1) ) end # 蔵書データを登録する def addBookInfo # 蔵書データ1件分のインスタンスを作成する book_info = BookInfo.new("", "", 0, Date.new) # 登録するデータを項目ごとに入力する print "\n"; print "キー: " key = gets.chomp print "書籍名: " book_info.title = gets.chomp print "著者名: " book_info.author = gets.chomp print "ページ数: " book_info.pages = gets.chomp.to_i print "発行年: " year = gets.chomp.to_i # 数字を整数に変換するメソッド print "発行月: " month = gets.chomp.to_i print "発行日: " day = gets.chomp.to_i book_info.publish_date = Date.new( year, month, day ) # 作成した蔵書データの1件分をハッシュに登録する @book_infos[key] = book_info end # 蔵書データの一覧を表示する def listAllBookInfos puts "\n---------------------------" @book_infos.each { |key, info| print info.toFormattedString puts "\n---------------------------" } end # 処理の選択と選択後の処理を繰り返す def run while true # 機能選択画面を表示する print " 1. 蔵書データの登録 2. 蔵書データの表示 9. 終了 番号を選んでください (1, 2, 9) :" # 文字の入力を待つ num = gets.chomp case when '1' == num # 蔵書データの登録 addBookInfo when '2' == num # 蔵書データの表示 listAllBookInfos when '9' == num # アプリケーションの終了 break; else # 処理選択待ち画面に戻る end end end end # アプリケーションのインスタンスを作る book_info_manager = BookInfoManager.new() # BookInfoMnagerの蔵書データをセットアップする book_info_manager.setUp # BookInfoMnagerの処理の選択と、選択後の処理を繰り返す book_info_manager.run
楽しい〜〜。
追加で【蔵書の情報を検索する機能】は明日実装したい。
Rubyざっくりやれて楽しいわ。。