For all of the steps described herewithin, the MVC architecture should be employed.

Overall Goal
Create an application that allows a user to track his or her progress in a degree program at York in terms of number of courses completed, number of courses remaining, and GPA calculations. Other outputs (such as year-by-year GPA calculations) are not mandatory and can be implemented at your discretion.

Discussion of the Application Domain

Many existing GPA calculators are burdensome to use. See http://www.arts.yorku.ca/gpa_calculator/ and http://webapps.utsc.utoronto.ca/aaccweb/index.php/academicplanning/academic-standing/gpa-calculator.
The reason is that the calculators have been made general enough for any student in any degree program.

If the calculator "knows" the degree program, then it can take advantage of this "knowledge" to make its interface much less burdensome to use.

In general, each degree program has degree requirements. These degree requirements consist of core courses (course that must be taken), electives (choice of course left up to student), and core-choice courses (student must take a certain number of credits from a list of specified courses). A course consists of a rubric and a number. The rubric is either three or four characters (e.g., CSE or MATH). The number is always 4 digits long; the first digit is the year of the course. A course has a weight (3.0, 6.0, or 9.0 credits).

Degrees that consist solely of core courses are the easiest to model, since the courses that a student will take are known in advance.
Elective courses are also easy to model, since we can rely upon the user to specify the course taken (either by entering it in as a string or perhaps allowing the user to choose the rubric from a combo box).
Core-choice courses pose a design challenge - the user will need to specify in some manner which course are taken, but we know in advance the pool from which their choice will be made.

Implementation
You may constrain your application to a single particular degree program.
For this step, select one degree program at York. Any degree program that is described in the undergraduate course calendar can be selected. Locate a webpage that lists the degree requirements. Ensure that you provide the URL of the degree requirements in your source code. Here is an example: http://calendars.registrar.yorku.ca/calendars/2010-2011/faculty_programs/SC/digital_media.htm or http://www.digitalmedia.yorku.ca/courses.php

Create an interface that will allow a student within that particular degree program to specify the courses that he or she has taken (or plans to take). For any courses taken, the user should be able to specify the grade he or she earned.
The interface should exploit knowledge about the degree program in order to not require the user to enter the rubric and course number of every single course.

One approach is to create a multi-view application (such as soccerTeamExample_tableVersion). The JTable provides the means for entering grades (for instance, the first column is for the courses and the second column is editable and corresponds to the grades). The other view can consist of radio buttons or check boxes that implement the choices that are possible within the degree program. Selection of these choices in turn determines the courses listed in the JTable. Other approaches are possible; the choice is up to you.

A course is considered completed once a grade has been entered for it.

Your interface should report on the number of courses completed, number of courses remaining, and the calculation of cumulative GPA. Your application may report other pieces of information if you choose.

Your application should allow the user to save his or her information. When the application is opened, it should be possible to retrieve a prior session. The saved file does not need to be text based (so you can read and write objects to and from a file). You can assume that this is a single-user application.


Add-on Components:
Modify your application so that it allows the user to indicate that he or she has retaken a particular course. In the GPA calculation, only one mark per course should be used. If a course has been taken more than once, then the highest grade is used.

Design your application so that it does not hard-code the degree requirements. It should be easy to update the application if changes to the degree requirements are made.