<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import java.util.*;
import java.io.*;

public class CourseRecord {
  private CourseGrade[] data;
  private double gpa;

  public CourseRecord() {
    data = new CourseGrade[ 0 ];
  }

  public void merge( CourseGrade[] addition ) {
    CourseGrade[] updated
        = new CourseGrade[ data.length + addition.length ];
    for ( int i = 0; i &lt; data.length; i ++ ) {
      updated[ i ] = data[ i ];
    }
    for ( int i = 0; i &lt; addition.length; i ++ ) {
      updated[ i + data.length ] = addition[ i ];
    }
    data = updated;
    calculateGPA();
  }

  private void calculateGPA() {
    gpa = 0;
    for ( CourseGrade g : data ) {
      gpa += g.getValue() / size();
    }
  }

  public void read( File f ) throws FileNotFoundException {
    Scanner fileScanner = new Scanner( f );
    int size = Integer.parseInt( fileScanner.nextLine() );
    CourseGrade[] addition = new CourseGrade[ size ];
    for ( int i = 0; i &lt; size; i ++ ) {
      addition[ i ] = new CourseGrade( fileScanner.nextLine(),
        fileScanner.nextLine(), fileScanner.nextLine() );
    }
    fileScanner.close();
    merge( addition );
  }

  public void remove( int position ) {
    CourseGrade[] update = new CourseGrade[ data.length - 1 ];
    for ( int i = 0; i &lt; position; i ++ ) {
      update[ i ] = data[ i ];
    }
    for ( int i = position + 1; i &lt; data.length; i ++ ) {
      update[ i - 1 ] = data[ i ];
    }
    data = update;
    calculateGPA();
  }

  public CourseGrade get( int i ) {
    return data[ i ];
  }
  public int size() {
    return data.length;
  }
  public double getGPA() {
    return gpa;
  }

  public void write( File f ) throws FileNotFoundException {
    PrintStream stream = new PrintStream( f );
    stream.println( data.length );
    for ( CourseGrade g : data ) {
      stream.println( g.getNumber() );
      stream.println( g.getTitle() );
      stream.println( g.getGrade() );
    }
    stream.close();
  }

}
</pre></body></html>