// File:  /home/walker/java/examples/Course/Course.java
// Created:  April 3, 2001
// Last Revised:  March 24, 2005

/**
 * Descriptive information of a course
 * Intended as an example of a simple class
 */

package course;

import java.io.PrintWriter;

public class Course {
    // Fields:  Listing of private data
    String subject;     // the subject or department name
    int number;     // the course number
    int credits;    // number of credits
    String title;       // name of the course

    // Methods
    // Constructors

    /* Build a course, based on subject
     */
    Course (String subj) {
        subject = subj;
        number = 0;
        credits = 0;
        title = "";
    }

    /* Build a course, based on subject, course number, credits, 
       and title
     */
    Course (String subj, int num, int cred, String name) {
        subject = subj;
        number = num;
        credits = cred;
        title = name;
    }
        
    // Extractors
    /* One extractor is defined to return each field in turn
     */
    public String getSubject () {
        return subject;
    }
    
    public int getNumber () {
        return number;
    }

    public int getCredits () {
        return credits;
    }

    public String getTitle () {
        return title;
    }

    // Modifers
    /* Specify course number and title
     */
    public void setNumTitle (int numb, String name) {
        number = numb;
        title = name;
    }

    /* Specify number of credits for the course
     */
    public void setCredits (int cr) {
        credits = cr;
    }

    // Data convertion
    /* Formulate a string of the fields, in a format suitable for 
       printing
     */
    public String toString () {
        return (subject + " " + number + ":  " + title
                + "\n   Credits:  " + credits + "\n"); 
    }

    // method for testing
    public static void main (String[] args) 
        throws Exception {

        // Set up framework for printing results
        PrintWriter out = new PrintWriter (System.out, true);

        // create two courses, using the two constructors
        Course myCourse = new Course ("CSC", 152, 4, "Fund. of CS II");
        Course yourCourse = new Course ("Math");

        // print results of initialization
        /* first use toString, then use extractors */
        out.println ("Initialization");
        out.println ("My course is ");
        out.println (myCourse.toString());
        out.println ("Your course is ");
        out.print(yourCourse.getSubject() + " ");
        out.println (yourCourse.getNumber() + ":  " + yourCourse.getTitle());
        out.println ("     your credits:  " + yourCourse.getCredits());

        // set other fields of yourCourse
        yourCourse.setNumTitle (131, "Calculus I");
        yourCourse.setCredits (4);

        // print results of modifications
        out.println ("\nAfter modification");
        out.println ("Your course is \n" + yourCourse);
    }

} // class Course
