-
Notifications
You must be signed in to change notification settings - Fork 0
/
directory.rb
127 lines (103 loc) · 2.42 KB
/
directory.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
@students = []
def print_header
puts "The students of my cohort at Makers Academy"
puts "--------------"
end
def print (students)
students.each do |student|
puts "#{student[:name]}"
puts "age: #{student[:age]}"
puts "(#{student[:cohort]} cohort)"
puts ""
end
end
def print_input_students
puts "please enter your name and hit enter"
puts "then enter your age"
puts "FOR EXAMPLE \"Tom Groombridge \"\(Enter\)"
puts "\"19\"\(Enter\)"
puts "hit return twice to finish"
end
def input_students
students = []
name = STDIN.gets.chomp
age = STDIN.gets.chomp
while !name.empty? do
students << {:name => name, :age => age, :cohort => :Novemeber}
puts "now we have #{students.length} students"
name = STDIN.gets.chomp
age = STDIN.gets.chomp
end
@students = students
end
def print_footer (students)
puts"overall, we have #{students.length} great students"
end
def load_students (filename = "students.csv")
file = File.open(filename, "r")
file.readlines.each do |line|
name, age, cohort = line.chomp.split(',')
@students << {:name => name, :age => age, :cohort => cohort.to_sym}
end
file.close
end
def try_load_students
filename = ARGV.first #first arguement from the command line
return if filename.nil? #get out of the method if it isn't given
if File.exists?(filename) #if it exists
load_students(filename)
puts "Loaded #{@students.length} from the file #{filename}"
else #if it doesnt exist
puts "sorry #{filename} doesn't exist"
exit #quit the program
end
end
def save_students
file = File.open("students.csv", "w")
@students.each do |student|
student_data = [student[:name], student[:age], student[:cohort]]
csv_line = student_data.join(",")
file.puts csv_line
end
file.close
puts "file saved"
end
def menu
puts "1. Input the students"
puts "2. Show the students"
puts "3. save file"
puts "4. load students"
puts "9. Exit"
end
def show_students
print_header
print(@students)
print_footer (@students)
end
def process
selection = STDIN.gets.chomp
case selection
when "1"
print_input_students
input_students
when "2"
show_students
when "3"
save_students
when "4"
load_students
when "9"
exit
else
"Sorry I do not understand"
end
end
def interactive_menu
students = []
loop do
menu
process
end
end
try_load_students
interactive_menu