-
-
Save mattetti/126185 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CIS 282 | |
Files Assignment | |
To turn in: | |
Attach a file files_lastname.rb as an attachment to the assignment in Blackboard | |
Subject line: CIS 282, Name, Files | |
To do: | |
Take your program from the Hash Assignment and modify it to use files for storing the data instead of initializing the data at run-time. | |
Write a program that will read a datafile to initialize its Hash on startup. | |
When the user selects Exit, your program should then write the Hash into the same data file so that it can be read the next time it is run. Any new items that are created by the user need to be written to the file at the same time. | |
The format of the file should be: | |
123,shirt,9.99 | |
234,pants,19.50 | |
456,socks,3.99 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
########################################################### | |
# | |
# Name: Lorna Hartman | |
# Assignment: Files | |
# Date: June 09 | |
# Class: CIS 282 | |
# Description: Store, access, output data from hash assignment, including any new user-added items | |
# | |
############################################################ | |
# Progress notes: Argh! Can't find my notes on displaying option 5 properly. Option 7 not working -- Why?? | |
hash_hartman_startover = {} | |
files_assignment = File.open( "products.txt", "r") | |
files_assignment.each_line do |line| | |
id, name, price = line.chomp.split(',') | |
# same as: | |
# items = line.chomp.split(',') | |
# id = items[0] | |
# name = items[1] | |
# price = items[2] | |
hash_hartman_startover[id] = [name, price] | |
end | |
$stdout << hash_hartman_startover.inspect | |
print "\n1. View all products | |
2. Add a new product | |
3. Delete a product | |
4. Update a product | |
5. View highest-priced product and lowest-priced product | |
6. View sum of all product prices | |
7. Quit \n | |
Choose an option: " | |
$stdout.flush | |
choice = gets.chomp.to_i | |
if choice > 7 | |
print "That\'s not one of the choices. Try again: \n" | |
end | |
if choice == 1 | |
hash_hartman_startover.each{ |key, value| | |
puts "#{key} - #{value[0]}, #{value[1]}" | |
} | |
end | |
if choice == 2 | |
print "Enter the product name: " | |
$stdout.flush | |
name = gets.chomp.upcase | |
print "Enter the product price using a decimal (as in 44.99), with no dollar sign: " | |
$stdout.flush | |
price = gets.chomp.to_f | |
#generate random key, make sure it's unique | |
key = rand(899) + 100 | |
while hash_hartman_startover.has_key?(key) | |
key = rand(899) + 100 | |
end | |
puts hash_hartman_startover[key] = [name, price] | |
puts "You have entered a new product called #{name} with an assigned key of #{key}." | |
puts hash_hartman_startover.inspect.upcase | |
end | |
if choice == 3 | |
hash_hartman_startover.each{ |key, value| | |
puts "#{key} - #{value[0]}, #{value[1]}" | |
} | |
print "Enter the key number of the product you wish to delete: " | |
$stdout.flush | |
keynum = gets.chomp.to_i | |
if hash_hartman_startover.has_key?(keynum) | |
puts hash_hartman_startover[keynum] | |
hash_hartman_startover.delete(keynum) | |
hash_hartman_startover.each{ |key, value| | |
puts "#{key} - #{value[0]}, #{value[1]}" | |
} | |
elsif ! hash_hartman_startover.has_key?(keynum) | |
print "This product is not in the list.\n" | |
end | |
end | |
if choice == 4 | |
hash_hartman_startover.each{ |key, value| | |
puts "#{key} - #{value[0]}, #{value[1]}" | |
} | |
print "Enter the key number of the product you wish to update: " | |
$stdout.flush | |
keynumber = gets.chomp.to_i | |
if hash_hartman_startover.has_key?(keynumber) | |
puts hash_hartman_startover[keynumber] | |
print "Enter the name you want assigned to this product (it can be the same name as before): " | |
$stdout.flush | |
new_name = gets.chomp.upcase | |
puts new_name.upcase | |
print "Enter the price you want assigned to this product (it can be the same price as before): " | |
$stdout.flush | |
new_price = gets.chomp.upcase | |
hash_hartman_startover.delete(keynumber) | |
hash_hartman_startover[keynumber] = new_name, new_price | |
hash_hartman_startover.each{ |key, value| | |
puts "#{key} - #{value[0]} - #{value[1]}" | |
} | |
elsif ! hash_hartman_startover.has_key?(keynumber) | |
print "This product is not in the list.\n" | |
end | |
end | |
if choice == 5 | |
hash_hartman_startover.each{ |key, value| | |
puts "#{key} - #{value[0]}, #{value[1]}" | |
} | |
sorted = hash_hartman_startover.sort_by{|product| product[1] } | |
puts "The cheapest product is #{sorted.last}" | |
puts "The most expensive product is #{sorted.first}" | |
end | |
if choice == 6 | |
sum = 0 | |
hash_hartman_startover.each {|key, value| | |
puts "#{value[1]}" | |
sum += value[1] | |
} | |
puts sum | |
end | |
if choice == 7 | |
formatted_products = hash_hartman_startover.map do |key, value| | |
"#{key},#{value.join(",")}" | |
end | |
formatted_products = formatted_products.join("\n") | |
# $stdout << formatted_products | |
files_assignment = File.open("products.txt", "w") | |
files_assignment << formatted_products | |
files_assignment.close | |
exit | |
end | |
#This is a debugging exit, get rid of it when finished programming | |
if choice == 8 | |
exit | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
243,tie,19.95 | |
714,shoes,27.95 | |
108,socks,99.99 | |
472,hat,15.97 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment