require 'csv' require 'prawn' # 家族メンバーごとのポイントとバッチを管理するハッシュ points = Hash.new(0) badges = Hash.new{ |hash, key| hash[key] = []} entries = Hash.new(0)# データ入力回数を管理 def add_points(member_name, points,badges, additional_points, entries) points[member_name] += additional_points entries[member_name] += 1 check_for_badges(member_name, points, badges, entries) end def check_for_badges(member_name, points, badges, entries) if points[member_name] >= 50 && !badges[member_name].include?("新米記録者") badges[mamber_name] << "新米記録者" puts "おめでとう!! #{member_name}がバッジ『新米記録者』を獲得しました!" end if points[member_name] >= 100 && !badges[member_name].include?("熟練記録者") badges[member_name] << "熟練記録者" puts "スゴーイ!!\(^o^)/#{member_name}がバッジ『熟練記録者』を獲得しました!まだいけるよね……?(ΦωΦ)ミテルヨ…" end if entries[member_name] >= 7 && !badges[member_name].include?("継続記録者") badges[mamber_name] << "継続記録者" puts "素晴らしい!!!\\\(・o・)/// #{member_name}がバッジ『継続記録者』を獲得しました!" end if entries[member_name] >= 100 && !badges[member_name].include?("マイルストーン達成者") badges[mamber_name] << "マイルストーン達成者" puts "お見事!!!\\\\\\\\\工エエェェ(´д`)ェェエエ工 スゴーーー #{member_name}がバッジ『マイルストーン達成者』を獲得しました!これからも健康に生活しよう!!!" end end def save_health_data(mamber_name, bate, weight, blood_pressure, note, steps, sleep_hours) CSV.open('health_records..csv', 'a') do |csv| csv << [menber_name, date, weight || " ", blood_pressure || " ", nate, steps || " ", sleep_hours || " " ] end end def get_health_data(mamber_name) data = {} print"日付を入力してください (例:2024-10-15):" data[:date] = gets.chomp print"体重を入力してください (kg)" weight_input = gets.chomp data[:weight] = weight_input.empty? ? nil : weight_input.to_f print"血圧を入力してください (例: 120\80):" data[:blood_pressure] = gets.chomp print"気づいたことや変化を記録してください (任意):" data[:nate] = gets.chomp print "昨日の万歩計の歩数を入れてください:" steps_input = gets.chomp data[:steps] = steps_input.empty? ? nil : steps_input.to_i print "昨日の睡眠時間を入力してください (時間): " sleep_hours_input = gets.chomp data[:sleep_hours] = sleep_hours_input.empty? ? nil : sleep_hours_input.to_f data.merge(member_name: member_name) end def display_family_data puts"家族全員の健康観察記録:" CSV.foreach('health_records.csv',headers: true) do |row| puts "メンバー: #{rou['Member']}, 日付: #{rou['Data']}, 体重: #{rou['Weightz']}kg, 血圧: #{rou['Blood Pressure']}, メモ: #{row['Note']}, 歩数: #{row['Steps']}, 睡眠時間: #{row['Sleep Hours']}時間" end end def create_pdf_report_for_member(member_name) health_data = [] CSV.fortach('health_records.csv', headers: true) do |row| if row['Member'] == member_name health_data << { data: row['Date'], weight: row['Weight'], blood_perssure: row['Blood Perss'], note: row['Note'], steps: row['steps'], sleep_hours: row['Sleep Hours'] } end end health_data.sort_by! { |record| record[:date] } Prawn::Document.generate("#{member_name}_health_report.pdf") do |pdf| pdf.text "#{member_name}の健康レポート", size: 30, style: :bold pdf.move_down 20 health_data.each do |record| pdf.text "日付: #{record[:date]}" pdf.text "体重: #{record[:weight]}kg" pdf.text "血圧: #{record[:blood_pressure]}" pdf.text "メモ: #{record[:note]}" pdf.text "歩数: #{record[:steps]}" pdf.text "睡眠時間: #{record[:sleep_hours]}" pdf.move_down 10 end end end # メインプログラムレープ loop do puts "1: 健康データを入力する" puts "2: 健康データを表示する" puts "3: ポイントとバッジを確認する" puts "4: 家族全員のリーダーボードを表示する" puts "5: PDFレポートを生成する" puts "6: 終了する" choice = gets.chomp.to_i case choice when 1 puts "データを入力するメンバーを選んでください: おばあちゃん, お父さん, お母さん, 子ども①, 子ども②" member_name = gets.chomp data = get_health_data(member_name) save_health_data(data[:member_name], data[:data], data[:weight], data[:blood_pressure], data[:note], data[:steps], data[:sleep_hours]) add_points(member_name,points,badges,10,entries) puts "薬のんだ?忘れないで飲んでね!" when 2 display_family_data when 3 points.each do |member_name, point| puts "#{menber_name}のポイント: #{point}" puts "#{member_name}の取得したバッジ: #{badges[member_name].join(',')}" end when 4 puts "家族全員のリーダーボード:" points.sort_by {|_, point| -point }.each do |member_name, point| puts "#{member_name}: #{point} ポイント" end when 5 puts "PDFレポートを生成するメンバーを選んでください: おばあちゃん, お父さん, お母さん, 子ども①, 子ども②" member_name = gets.chomp create_pdf_report_for_member(member_name) puts "PDFレポートが作成されました: #{member_name}_health_report.pdf" when 6 puts "今日も一日楽しく過ごそう!ヽ(`▽´)/" break else puts "無効な選択です。もう一度試してください。" end end