Remember: the goal of these labs is to give you experience with Java. Labs are not graded, but you will receive feedback, and your participation is mandatory.
All exercises are due by midnight Friday. See below for the turn-in procedure.
Goal
This lab is divided into two sections:
- In the first section you will write a java program that keeps a list of students and teachers, sorts this person’s list by name and prints it.
- In the second section you will add to this program the possibility to keep track of courses, each course will have a teacher and many students. You will add a class that tries to find a schedule so that no teacher has to teach two courses the same day, and no student has to follow two courses the same day.
Part I: People
In the following exercises, we will create the following class hierarchy:
For each exercise, you will probably want to write a main
method in a separate class to test the classes you are implementing as you go.
Exercise 1: Class Person
Write an abstract class Person
that implements the above methods. A person should have a given name and a family name. It should also be possible to print a representation of the person.
Exercise 2: Classes Teacher
and Student
Write the Teacher
and Student
classes that inherit from Person
. In addition to a name, Students should have a current year in school. Printing a Teacher
or a Student
should show this additional information as well.
Exercise 3: Class People
Write a class People
that inherits from the java.util.ArrayList<Person>
class. This class will keep the list of students and teachers. It will also be capable of printing a list of all of the people.
Sorting out people
Now we want to sort people so that we can print them in alphabetical order. To achieve this, we will use the method java.util.Collections.sort()
that we saw in class the other day. This method requires that objects be Comparable
(by satisfying the) Comparable
interface.
Exercise 4: Interface Comparable<Person>
We want people to be ordered by the their names, family name first. If two people have the same family name, the two would be ordered by their given names.
Exercise 5: Sorting People
Add a method sort()
to the class People
.
Part II: Course scheduler
In this part, we will use your solutions from Part 1 to create the following class hierarchy:
Exercise 6: Courses
Create a class Course
. Each course has a single Teacher
and many students.
- Think about how to add students to the course. What do you need to do that make that possible?
- Each course is either scheduled or not scheduled for a specific day of the week, which we can represent by an
int
. - The
setDay(int)
method schedules a course for a given day of the week. - The method
compatible
checks if two courses can co-exist at the same time (that is, they do not share any People in common).
Next, we are going to write a class Schedule that tries to find a compatible schedule for a list of courses.
Exercice 7: Exceptions
Create a new exception class called IncompatibleSchedule
.
Exercice 8: Schedule
Write the class Schedule as shown above, but only implement the method print()
. The method print should print all the Courses in Schedule, and the day they are scheduled, or not scheduled if they are not scheduled.
Exercice 9: checkSchedule
Implement the method checkSchedule
. This method takes a Course:
- if all the others courses scheduled the same day are compatible, it does nothing.
- if one of them is not compatible, it throws exception
IncompatibleSchedule
.
Exercice 10: updateSchedule
Implement the method updateSchedule
, using the method checkSchedule. This method tries to find a schedule for all the Courses. If this schedule is found it returns true
; if no compatible schedule exists, it throws IncompatibleSchedule
.
- To implement this method you will use a backtracking algorithm.
- If all the courses are scheduled, return true.
- Otherwise, if there still are unscheduled courses, take one of them.
- For each of the available days:
- Try to schedule if for day d.
- call updateSchedule() recursively to try to schedule the other courses.
- if there is a schedule incompatibility, try another day.
- if there is no possible day on which to schedule the course, throw
IncompatibleSchedule
.
Exercice 11: Test
Add some students, teachers and courses and test the scheduling algorithm. To avoid adding a lot of courses, you can set daysInSchoolWeek to a small value during testing.
Hand-in
- Select your projects in Eclipse.
- Right-click and select
Export...
- Choose
General > Archive File
. - Be sure to un-check the .classpath and .project files.
- Export the project to an archive named your-last-name-lab2
- Upload the archive (zip) to the lab2 submission site.
Assignment by Pablo de Oliveira Castro, licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.