I need some help plz with my ruby project.

W

wiz_pendases

First, i need to extend the student class, and its to be enumerable by
courses. Then, show off the new functionality supported by this
change by writing an expression that returns a list of all of the
grades a student has earned in the courses he or she has completed for
the major.

here is what I got so far...what am i missing
-----------------------------------------------------------------------------------------------------------------
irb

# This class initializes a new student with ID,
# and shows a list of completed courses,
# and also shows a list of grades from completed courses.
class Student

include Enumerable

attr_reader :name, :id

# Initializing the students name and ID.
# Name = Student's name.
# ID = Student's ID.
# Initializing courses to equal a new hash.
def initialize(name, id)
@name = name
@id = id
@courses = {}
end

# Adding a course to the set of those completed.
def add_course(code, name, grade)
@courses
Code:
 = [code, name, grade]
end

# Retrieving the grade for a particular course.
def get_grade(code)
(c=@courses[code]) && c[Grade]
end

# Changing the grade for a course completed.
def set_grade(code, grade)
@courses[code][Grade] = grade
end

# Providing a list of all of the courses completed.
def list_courses
@courses.values
end

def each_grade
@courses.each { |course| yeild course }
end
end


s1 = Student.new("Eric", "00101")
s1.add_course("22c:021", "Computer Science I", "B-")
s1.each_grade.collect { |course| do course[2] }
puts s1
 
J

JeremyWoertink

well, to start I noticed a few syntax errors, yield is misspelled, and
in the line s1.each_grade.collect { |course| do course[2] } I don't
know what you were trying to do with 'do course[2]' maybe yield
course[2] and your get_grade method has c[Grade] but I don't know what
Grade is, so maybe it should be
def get_grade(code, Grade)
(c=@courses
Code:
) && c[Grade]
end

maybe that might help a little


~Jeremy
 
J

JeremyWoertink

oh, and also, take out the collect on s1.each_grade and try just
passing a block to each_grade so
irb(main):009:0> s1.each_grade { |course| puts course[2] }
nil
=> {"22c:021"=>["22c:021", "Computer Science I", "B-"]}


HTH


~Jeremy

well, to start I noticed a few syntax errors, yield is misspelled, and
in the line s1.each_grade.collect { |course| do course[2] } I don't
know what you were trying to do with 'do course[2]' maybe yield
course[2] and your get_grade method has c[Grade] but I don't know what
Grade is, so maybe it should be
def get_grade(code, Grade)
(c=@courses
Code:
) && c[Grade]
end

maybe that might help a little

~Jeremy

[QUOTE]
First, i need to extend the student class, and its to be enumerable by
courses.  Then, show off the new functionality supported by this
change by writing an expression that returns a list of all of the
grades a student has earned in the courses he or she has completed for
the major.[/QUOTE]
[QUOTE]
here is what I got so far...what am i missing[/QUOTE]
[QUOTE]
# This class initializes a new student with ID,
# and shows a list of completed courses,
# and also shows a list of grades from completed courses.
class Student[/QUOTE]
[QUOTE]
include Enumerable[/QUOTE]
[QUOTE]
attr_reader :name, :id[/QUOTE]
[QUOTE]
# Initializing the students name and ID.
# Name = Student's name.
# ID = Student's ID.
# Initializing courses to equal a new hash.
def initialize(name, id)
@name = name
@id = id
@courses = {}
end[/QUOTE]
[QUOTE]
# Adding a course to the set of those completed.
def add_course(code, name, grade)
@courses[code] = [code, name, grade]
end[/QUOTE]
[QUOTE]
# Retrieving the grade for a particular course.
def get_grade(code)
(c=@courses[code]) && c[Grade]
end[/QUOTE]
[QUOTE]
# Changing the grade for a course completed.
def set_grade(code, grade)
@courses[code][Grade] = grade
end[/QUOTE]
[QUOTE]
# Providing a list of all of the courses completed.
def list_courses
@courses.values
end[/QUOTE]
[QUOTE]
def each_grade
@courses.each { |course| yeild course }
end
end[/QUOTE]
[QUOTE]
s1 = Student.new("Eric", "00101")
s1.add_course("22c:021", "Computer Science I", "B-")
s1.each_grade.collect { |course| do course[2] }
puts s1[/QUOTE][/QUOTE]
 
U

ujihisa

class Student
attr_accessor :courses
def initialize(hash = {})
@name = hash[:name]
@id = hash[:id]
@courses = []

# if you need, write on some validations here.
end
end

class Course
def initialize(hash = {})
@code = hash[:name]
@name = hash[:id]
@grade = hash[:grade]

# if you need, write on some validations here.
end
end

s1 = Student.new :name => "Eric", :code => "00101"
s1.courses << Course.new:)code => "22c:021",
:name => "Computer Science I",
:grade =>"B-")
p s1.courses.map {|c| c[:grade] }
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,152
Members
46,697
Latest member
AugustNabo

Latest Threads

Top