Classes, Objects, and Variables(Chapter 3 of Programming Ruby)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 class BookInStock
2 attr_reader :isbn
3 attr_accessor :price
4 def initialize(isbn, price)
5 @isbn = isbn
6 @price = Float(price)
7 end
8
9 def to_s()
10 "ISBN: #{@isbn}, Price: #{@price}"
11 end
12 end
13
14 b1 = BookInStock.new("aa", 3)
15 p b1
16 b2 = BookInStock.new("bb", 2.3)
17 p b2
18 b3 = BookInStock.new("cc", "5.67")
19 puts b3
20 puts "ISBN: #{b1.isbn}"
2 attr_reader :isbn
3 attr_accessor :price
4 def initialize(isbn, price)
5 @isbn = isbn
6 @price = Float(price)
7 end
8
9 def to_s()
10 "ISBN: #{@isbn}, Price: #{@price}"
11 end
12 end
13
14 b1 = BookInStock.new("aa", 3)
15 p b1
16 b2 = BookInStock.new("bb", 2.3)
17 p b2
18 b3 = BookInStock.new("cc", "5.67")
19 puts b3
20 puts "ISBN: #{b1.isbn}"
book_in_stock.rb
1 class BookInStock
2 attr_reader :isbn, :price
3 def initialize(isbn, price)
4 @isbn = isbn
5 @price = Float(price)
6 end
7 end
2 attr_reader :isbn, :price
3 def initialize(isbn, price)
4 @isbn = isbn
5 @price = Float(price)
6 end
7 end
csv_reader.rb
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 require 'csv'
2 require_relative 'book_in_stock'
3 class CsvReader
4 def initialize
5 @books_in_stock = []
6 end
7 def read_in_csv_data(csv_file_name)
8 CSV.foreach(csv_file_name, headers: true) do |row|
9 @books_in_stock << BookInStock.new(row["ISBN"], row["Amount"])
10 end
11 end
12 def total_value_in_stock
13 sum = 0.0
14 @books_in_stock.each {|book| sum += book.price}
15 sum
16 end
17 def number_of_each_isbn
18 # ...
19 end
20 end
2 require_relative 'book_in_stock'
3 class CsvReader
4 def initialize
5 @books_in_stock = []
6 end
7 def read_in_csv_data(csv_file_name)
8 CSV.foreach(csv_file_name, headers: true) do |row|
9 @books_in_stock << BookInStock.new(row["ISBN"], row["Amount"])
10 end
11 end
12 def total_value_in_stock
13 sum = 0.0
14 @books_in_stock.each {|book| sum += book.price}
15 sum
16 end
17 def number_of_each_isbn
18 # ...
19 end
20 end
stock_stats.rb
require_relative 'csv_reader'
reader = CsvReader.new
ARGV.each do |csv_file_name|
STDERR.puts "Processing #{csv_file_name}"
reader.read_in_csv_data(csv_file_name)
end
puts "Total value = #{reader.total_value_in_stock}"
reader = CsvReader.new
ARGV.each do |csv_file_name|
STDERR.puts "Processing #{csv_file_name}"
reader.read_in_csv_data(csv_file_name)
end
puts "Total value = #{reader.total_value_in_stock}"
1 ruby stock_stats.rb test.csv
2
3 Processing test.csv
4 Total value = 122.07
2
3 Processing test.csv
4 Total value = 122.07