前提・実現したいこと
Ruby初心者です。
現在簡単な蔵書管理アプリを作成しています。
実行すると初期化、登録、表示、別ファイルへ保存、終了を選択することができます。
入力したデータを保存せずに終了しようとすると警告が表示されるような処理を実装してみたいのですが、何をどうしたらいいやら全く見当がつきません。
助力お願いいたします。
発生している問題・エラーメッセージ
該当のソースコード
Ruby
1require 'date' 2 3class BookInfo 4 attr_accessor :title, :author, :pages, :publish_date 5 def initialize(title, author, pages, publish_date) 6 @title = title 7 @author = author 8 @pages = pages 9 @publish_date = publish_date 10 end 11 12 def to_s 13 "#{@title},#{@author},#{@pages},#{@publish_date}" 14 end 15 16 def toFormattedString(sep="\n") 17 "書籍名:#{@title}#{sep}著者名:#{@author}#{sep}ページ数:#{@pages.to_s}#{sep}発刊日:#{@publish_date.to_s}#{sep}" 18 end 19end 20 21 22class BookInfoManager 23 24 def initialize(csv_fname = "book_info.csv") 25 @book_infos = [] 26 @csv_fname = csv_fname 27 if File.exist?(@csv_fname) 28 open(@csv_fname, "r") do |file| 29 file.each do |line| 30 title, author, pages, publish_date = line.chomp.split(",") 31 @book_infos << BookInfo.new( title, author, pages.to_i, Date.parse(publish_date)) 32 end 33 end 34 end 35 end 36 37 def addBookInfo 38 book_info = BookInfo.new("", "", 0, Date.new) 39 print "書籍名:" 40 book_info.title = gets.chomp 41 print "著者名:" 42 book_info.author = gets.chomp 43 print "ページ数:" 44 book_info.pages = gets.chomp.to_i 45 print "発刊年:" 46 year = gets.chomp.to_i 47 print "発刊月:" 48 month = gets.chomp.to_i 49 print "発刊日:" 50 day = gets.chomp.to_i 51 book_info.publish_date = Date.new( year, month, day) 52 53 @book_infos << book_info 54 end 55 56 def listAllBookInfos 57 @book_infos.each do |info| 58 print info.toFormattedString 59 end 60 end 61 62 def saveAllBookInfos 63 open(csv_fname = "book_info.csv", "w") do |file| 64 @book_infos.each do |book| 65 file.puts book.to_s 66 end 67 end 68 end 69 70 def run 71 while true 72 print "蔵書管理アプリ 73 0. 蔵書データベースの初期化 74 1. 蔵書データの登録 75 2. 蔵書データの表示 76 8.蔵書データをファイルへ保存 77 9. 終了 78 番号を選んでください(0, 1, 2, 8, 9):" 79 80 num = gets.chomp 81 82 case num 83 when '0' 84 initialize 85 when '1' 86 addBookInfo 87 when '2' 88 listAllBookInfos 89 when '8' 90 saveAllBookInfos 91 when '9' 92 break 93 end 94 end 95 end 96end 97 98bim = BookInfoManager.new() 99bim.run
試したこと
1でデータを追加した場合のみ、9を押した際に事前に8で保存していなければ警告メッセージを表示したいのですが、思ったより複雑で何をどうしたらいいかわかりません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/27 10:56