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
ruby练习小项目
最新推荐文章于 2024-05-28 09:32:21 发布