ruby练习小项目

require 'time'

class Book

  attr_accessor :title, :describe, :book_type, :price, :published_at

  # 1.	定义一个名为MY_BOOK的常量,该常量是一个数组,内部包含三个hash
  MY_BOOK = Array[
    { :title => "台湾自助游参考手册", :describe => :"从此告别跟团的强制购物", :book_type => "1", :price => "50", :published_at => "2014-01-01 01:01:01" },
    { :title => "Ruby完全入门自学册", :describe => :"Ruby入门必读精品", :book_type => "2", :price => "75", :published_at => "2015-02-02 02:02:02" },
    { :title => "军事基础", :describe => :"军事迷必备书籍", :book_type => "3", :price => "100", :published_at => "2016-03-03 03:03:03" },
  ]

  # 2.	定义一个initialize方法,依次接受上述表格中的五个字段进行初始化
  def initialize(title, describe, book_type, price, published_at)

    @title = title
    @describe = describe
    @book_type = book_type
    @price = price
    @published_at = published_at

  end

  # 3.	定义一个类方法,名字为create_some_books,利用MY_BOOK,构建三个book的实例化对象:@b1,@b2,@b3
  def self.create_some_book #定义一个类方法
    puts "3.	定义一个类方法,名字为create_some_books,利用MY_BOOK,构建三个book的实例化对象:@b1,@b2,@b3"
    @b1 = Book.new(MY_BOOK[0][:title], MY_BOOK[0][:describe], MY_BOOK[0][:book_type], MY_BOOK[0][:price], MY_BOOK[0][:published_at])
    @b2 = Book.new(MY_BOOK[1][:title], MY_BOOK[1][:describe], MY_BOOK[1][:book_type], MY_BOOK[1][:price], MY_BOOK[1][:published_at])
    @b3 = Book.new(MY_BOOK[2][:title], MY_BOOK[2][:describe], MY_BOOK[2][:book_type], MY_BOOK[2][:price], MY_BOOK[2][:published_at])

    print "b1:", "\t"
    print @b1.title, "\t ", @b1.describe, "\t ", @b1.book_type, "\t ", @b1.price, "\t ", @b1.published_at, "\n"
    print "b2:", "\t"
    print @b1.title, "\t ", @b2.describe, "\t ", @b2.book_type, "\t ", @b2.price, "\t ", @b2.published_at, "\n"
    print "b3:", "\t"
    print @b1.title, "\t ", @b3.describe, "\t ", @b3.book_type, "\t ", @b3.price, "\t ", @b3.published_at, "\n"

  end

  #4.	定义一个price_level的实例方法,判断书的价格,返回价位等级
    # 0<=price<60 低价位
    # 60<= price <90 中价位
    # price>= 90 高价位

  def price_level
    puts "4.	定义一个price_level的实例方法,判断书的价格,返回价位等级"
    # puts @price.to_f
    if @price.to_f>=0&&@price.to_f<60
      puts "低价位","\n"
    elsif @price.to_f>=60&&@price.to_f<90
      puts "中价位","\n"
    elsif @price.to_f>=90
      puts "高价位","\n"
    end
  end

  # 5.	定义一个type_name的实例方法,返回book_type的中文描述(用case when实现)
    # 1 旅游类
    # 2 技术类
    # 3 军事类
  def type_name
    puts "5.	定义一个type_name的实例方法,返回book_type的中文描述(用case when实现)"
    case @book_type.to_i
    when 1
      puts "旅游类","\n"
    when 2
      puts "技术类","\n"
    when 3
      puts "军事类","\n"
    end
  end

  # 6.	定义一个类方法,名为high_price_book_price,返回MY_BOOK中,价位>=60元书的price总和
  def self.high_price_book_price

    sum=0
    for i in MY_BOOK
      if i[:price].to_f>=60
        sum+=i[:price].to_f
      end
    end
    puts "6.定义一个类方法,名为high_price_book_price,返回MY_BOOK中,价位>=60元书的price总和"
    puts sum,"\n"
  end

  # 7.	定义一个类方法,名为month_end,接受两个参数,year和month,返回该年该月的月末值,比如month_begin_and_end(2016,2),则返回29
  def self.month_end(year,month)
    months=[31,28,31,30,31,30,31,31,30,31,30,31]
    #是否闰年
    if month==2 && ((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0))
      puts "29"
    else
      puts "7.定义一个类方法,名为month_end,接受两个参数,year和month,返回该年该月的月末值,比如month_begin_and_end(2016,2),则返回29"
      puts months[month-1],"\n"
    end

  end

  # 8.	定义一个实例方法,名为published_at_cn,返回特定格式的pubulished_at,例如:2016年3月3日
  def published_at_cn
    puts "8.	定义一个实例方法,名为published_at_cn,返回特定格式的pubulished_at,例如:2016年3月3日"
    t1=Time.parse(@published_at)
    print t1.year,"年",t1.month,"月",t1.day,"日","\n\n"
  end

  # 9.	定义一个类方法,名为avg_price,返回MY_BOOK中,价位>=60元的书的平均价
  def self.avg_price
    sum=0
    num=0
    for i in MY_BOOK
      if i[:price].to_f>=60
        sum+=i[:price].to_f
        num+=1
      end
    end
    avg=sum/num
    puts "9.	定义一个类方法,名为avg_price,返回MY_BOOK中,价位>=60元的书的平均价"
    puts avg

  end
end


#第2题测试
book3 = Book.new("台湾自助游参考手册", "从此告别跟团的强制购物", "3", "50", "2014-01-01 01:01:01")
puts "2.	定义一个initialize方法,依次接受上述表格中的五个字段进行初始化"
puts book3.title

#第3题测试,(类方法)
Book.create_some_book

#第4题测试
book3.price_level

#第5题测试
book3.type_name

#第6题测试
Book.high_price_book_price

#第7题测试
Book.month_end(2019,11)

#第8题测试
book3.published_at_cn

#第9题测试
Book.avg_price

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值