Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

【#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ざっくりやれて楽しいわ。。