


import java.util.Scanner;	//program uses class Scanner
import java.text.DecimalFormat; //import this for formatting decimals



public class GradeCalculator {

	Scanner input = new Scanner (System.in);
	DecimalFormat toSecondDeci = new DecimalFormat("#.##"); //use '#' since don't want 0-valued decimals
	
	private double labUserMark, quizUserMark, assignmentUserMark, midtermUserMark, finalExamUserMark;
	private double theory, fin, practical;
	
	
	GradeCalculator(){
		//prints the title
		System.out.println  ("Welcome to the CST8215 Final Mark Calculator!\n");
	}
	//---------------------------------------
	private double getUserMark (String markType, int maximumMarks) {
		//This asks the user for the marks they received and returns the calculated value of their mark out of the full mark
		System.out.print ("Enter your " + markType + " mark out of " + maximumMarks + ":   ");
		//return user input
		return input.nextDouble();
	}
	public void getMarks(){
		//prompts the user for individual marks

		//get user inputs
		labUserMark= getUserMark("Lab", 10);
		quizUserMark= getUserMark("Quiz/Test", 10);
		assignmentUserMark= getUserMark("Assignment", 20);
		midtermUserMark= getUserMark("Midterm", 20);
		finalExamUserMark= getUserMark("Final Exam", 40);
	}
	public void calculateGrades() {
		//calculate the practical, theory and final grades (Note: ALL calculations are done here)

		theory= (quizUserMark + midtermUserMark + finalExamUserMark) / 0.7;
		practical= (assignmentUserMark + labUserMark) / 0.3;
		fin = theory*0.7 + practical*0.3;
	}
	public void displayGrades() {
		//displays the three grades

		// print theory grade
		System.out.println  ("\nTheory grade: " + toSecondDeci.format(theory) + "%");

		// print practical grade
		System.out.println  ("Practical grade: " + toSecondDeci.format(practical) + "%");
		
		// print final grade
		System.out.println  ("Final grade: " + toSecondDeci.format(fin) + "%");
	}
	
	public static void main (String[] args) {
		GradeCalculator newGrade = new GradeCalculator();
		newGrade.getMarks();
		newGrade.calculateGrades();
		newGrade.displayGrades();
	}
}

