TQC+ 物件導向程式語言 Java 6 605 成績資訊系統
第6類:物件導向程式設計與例外處理

TQC+ 物件導向程式語言 Java 6 605 成績資訊系統

來自的免費背景照片 zh.pngtree.com

題目前後相關,請閱讀完這個題組的五個題目之後再作答,每題答案皆能獨立執行。請將需要重複或共同使用的程式片段撰寫成函式,以供在類別中呼叫使用,避免在不同的類別中重複寫相同的程式碼,否則將酌量扣分。

題目一:

題目說明:

請開啟檔案 JPD06_1.java,為資訊管理系設計「成績資訊系統」程式,計算學生的選修課及平均成績,請依下列題意完成作答。將 JPD06_1.java 內的 class JPD06_1 修改為 class JPA06_1,將檔案另存為 JPA06_1.java 後編譯為 JPA06_1.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) MIS 有 IT 與 IM 兩個學程。MIS 學生的共同必修課為 chi、eng。 IT 的選修課有:pl、db、ds;IM 的選修課有:econ、acct 。

(2) 學生總平均成績為必修課平均成績佔 40%,選修課平均成績佔 60%,計算公式是:必修課的平均成績 * 0.4 + 選修課的平均成績 * 0.6。

(3) 請宣告兩位學生 John 以及 Paul 的資料,計算其「選修課的平均成績」及「總平均成績」。

執行結果參考畫面:



JPD06_1.java 檔案下載

程式碼:

abstract class MIS {
	String name;
	int chi, eng;
	
	MIS(String name, int chi, int eng) {
		this.name = name;
		this.chi = chi;
		this.eng = eng;
	}
	
	double averageCompulsory() {
		return (chi + eng) / 2.0;
	}
	
	abstract double averageElect();
	double averageAll() {
		return averageCompulsory() * 0.4 + averageElect() * 0.6;
	}
}

class IT extends MIS {
	int pl, db, ds;
	
	IT(String name, int chi, int eng, int pl, int db, int ds) {
		super(name, chi, eng);
		this.pl = pl;
		this.db = db;
		this.ds = ds;
	}
	
	double averageElect() {
		return (pl + db + ds) / 3.0;
	}
}

class IM extends MIS {
	int econ, acct;
	
	IM(String name, int chi, int eng, int econ, int acct) {
		super(name, chi, eng);
		this.econ = econ;
		this.acct = acct;
	}
	
	double averageElect() {
		return (econ + acct) / 2.0;
	}
}

public class JPA06_1 {
    public static void main(String argv[]) {
        MIS s1 = new IT("John", 88, 90, 76, 68, 84);
        MIS s2 = new IM("Paul", 92, 80, 76, 68);
        System.out.printf("John's elect score: %.2f all score %.2f\n", s1.averageElect(), s1.averageAll());
        System.out.printf("Paul's elect score: %.2f all score %.2f\n", s2.averageElect(), s2.averageAll());
 
    }
}

JPA06_1.java 檔案下載



題目二:

題目說明:

請開啟 JPD06_2.java,該系決議另行增加一個 ITM 學程,ITM 的學生除了要修 IT 的課之外,另外還需要修 acct 一門課,請依下列題意完成作答。將 JPD06_2.java 内的 class JPD06_2 修改為 class JPA06_2,將檔案另存為 JPA06_2.java 後編譯為 JPA06_2.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) ITM 學程,ITM 的學生除了要修 IT 的課之外,另外還需要加修 acct 一門課。

(2) ITM 學生總平均成績的計算公式是:
必修課的平均成績 * 0.4 + IT 課程的平均成績 * 0.4 + acct * 0.2。

(3) ITM 學生選修課平均成績的計算公式是:
(IT 課程的平均成績 + acct) / 2。

(4) 請宣告一位 ITM 學生 Mary 的資料,並計算其「選修課平均成績」及「總平均成績」。

執行結果參考畫面:



JPD06_2.java 檔案下載

程式碼:

abstract class MIS {
	String name;
	int chi, eng;
	
	MIS(String name, int chi, int eng) {
		this.name = name;
		this.chi = chi;
		this.eng = eng;
	}
	
	double averageCompulsory() {
		return (chi + eng) / 2.0;
	}
	
	abstract double averageElect();
	double averageAll() {
		return averageCompulsory() * 0.4 + averageElect() * 0.6;
	}
}

class IT extends MIS {
	int pl, db, ds;
	
	IT(String name, int chi, int eng, int pl, int db, int ds) {
		super(name, chi, eng);
		this.pl = pl;
		this.db = db;
		this.ds = ds;
	}
	
	double averageElect() {
		return (pl + db + ds) / 3.0;
	}
}

class IM extends MIS {
	int econ, acct;
	
	IM(String name, int chi, int eng, int econ, int acct) {
		super(name, chi, eng);
		this.econ = econ;
		this.acct = acct;
	}
	
	double averageElect() {
		return (econ + acct) / 2.0;
	}
}

class ITM extends IT {
	int acct;
	
	ITM(String name, int chi, int eng, int pl, int db, int ds, int acct) {
		super(name, chi, eng, pl, db, ds);
		this.acct = acct;
	}
	
	double averageElect() {
		return (super.averageElect() + acct) / 2.0;
	}
	
	double averageAll() {
		return averageCompulsory() * 0.4 + super.averageElect() * 0.4 + acct * 0.2;
	}
}

public class JPA06_2 {
   public static void main(String argv[]) {
        MIS s3 = new ITM("Mary", 79, 88, 94, 92, 83, 69);
        System.out.printf("Mary's elect score: %.2f all score %.2f\n", s3.averageElect(), s3.averageAll());
    }
}

JPA06_2.java 檔案下載



題目三:

題目說明:

請開啟 JPD06_3.java,系上想要統計目前系上的所有學生人數,請依下列題意完成作答。將 JPD06_3.java 内的 class JPD06_3 修改為 class JPA06_3,將檔案另存為 JPA06_3.java 後編譯為 JPA06_3.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請以類別變數累計學生人數,並呼叫一個方法傳回該系的學生人數。

執行結果參考畫面:



JPD06_3.java 檔案下載

程式碼:

abstract class MIS {
	String name;
	int chi, eng;
	static int students = 0;
	
	MIS(String name, int chi, int eng) {
		this.name = name;
		this.chi = chi;
		this.eng = eng;
		students++;
	}
	
	double averageCompulsory() {
		return (chi + eng) / 2.0;
	}
	
	abstract double averageElect();
	double averageAll() {
		return averageCompulsory() * 0.4 + averageElect() * 0.6;
	}
	
	static int getStudents() {
		return students;
	}
}

class IT extends MIS {
	int pl, db, ds;
	
	IT(String name, int chi, int eng, int pl, int db, int ds) {
		super(name, chi, eng);
		this.pl = pl;
		this.db = db;
		this.ds = ds;
	}
	
	double averageElect() {
		return (pl + db + ds) / 3.0;
	}
}

class IM extends MIS {
	int econ, acct;
	
	IM(String name, int chi, int eng, int econ, int acct) {
		super(name, chi, eng);
		this.econ = econ;
		this.acct = acct;
	}
	
	double averageElect() {
		return (econ + acct) / 2.0;
	}
}

class ITM extends IT {
	int acct;
	
	ITM(String name, int chi, int eng, int pl, int db, int ds, int acct) {
		super(name, chi, eng, pl, db, ds);
		this.acct = acct;
	}
	
	double averageElect() {
		return (super.averageElect() + acct) / 2.0;
	}
	
	double averageAll() {
		return averageCompulsory() * 0.4 + super.averageElect() * 0.4 + acct * 0.2;
	}
}

public class JPA06_3 {
    public static void main(String argv[]) {
        MIS s1 = new IT("John", 88, 90, 76, 68, 84);
        MIS s2 = new IM("Paul", 92, 80, 76, 68);
        MIS s3 = new ITM("Mary", 79, 88, 94, 92, 83, 69);
        System.out.printf("John's elect score: %.2f all score %.2f\n", s1.averageElect(), s1.averageAll());
        System.out.printf("Paul's elect score: %.2f all score %.2f\n", s2.averageElect(), s2.averageAll());
        System.out.printf("Mary's elect score: %.2f all score %.2f\n", s3.averageElect(), s3.averageAll());
        System.out.println("Total students: " + MIS.getStudents());
    }
}

JPA06_3.java 檔案下載



題目四:

題目說明:

請開啟 JPD06_4.java,系上於學期末時,需要印製一份班級的學生姓名及平均成績,請依下列題意完成作答。將 JPD06_4.java 内的 class JPD06_4 修改為 class JPA06_4,將檔案另存為 JPA06_4.java 後編譯為 JPA06_4.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請使用 HashMap 為該系設計建立一個 MISClass 類別,HashMap 的 key 值為學生姓名 (String),value 值為學生的物件,使其代入學生姓名後,可輸出該名學生的總平均成績,總平均成績依該學程有不同的計算方式,請參考題目一 2.(2)及題目二 2.(2) 的公式。

(2) 一個 MISClass 的實例即代表一個班級,並且有 put、 list 兩個方法。

(3) 使用 put 方法個別加入三名學生,再使用 list 方法印出該班所有學生的名字及總平均成績。

執行結果參考畫面:



JPD06_4.java 檔案下載

程式碼:

import java.util.HashMap;

abstract class MIS {
	String name;
	int chi, eng;
	static int students = 0;
	
	MIS(String name, int chi, int eng) {
		this.name = name;
		this.chi = chi;
		this.eng = eng;
		students++;
	}
	
	double averageCompulsory() {
		return (chi + eng) / 2.0;
	}
	
	abstract double averageElect();
	double averageAll() {
		return averageCompulsory() * 0.4 + averageElect() * 0.6;
	}
	
	static int getStudents() {
		return students;
	}
}

class IT extends MIS {
	int pl, db, ds;
	
	IT(String name, int chi, int eng, int pl, int db, int ds) {
		super(name, chi, eng);
		this.pl = pl;
		this.db = db;
		this.ds = ds;
	}
	
	double averageElect() {
		return (pl + db + ds) / 3.0;
	}
}

class IM extends MIS {
	int econ, acct;
	
	IM(String name, int chi, int eng, int econ, int acct) {
		super(name, chi, eng);
		this.econ = econ;
		this.acct = acct;
	}
	
	double averageElect() {
		return (econ + acct) / 2.0;
	}
}

class ITM extends IT {
	int acct;
	
	ITM(String name, int chi, int eng, int pl, int db, int ds, int acct) {
		super(name, chi, eng, pl, db, ds);
		this.acct = acct;
	}
	
	double averageElect() {
		return (super.averageElect() + acct) / 2.0;
	}
	
	double averageAll() {
		return averageCompulsory() * 0.4 + super.averageElect() * 0.4 + acct * 0.2;
	}
}

class MISClass {
	HashMap hashmap = new HashMap();
	
	void put(String name, MIS mis) {
		hashmap.put(name, mis);
	}
	
	void list() {
		MIS mis;
		
		for(Object key : hashmap.keySet()) {
			mis = (MIS)hashmap.get(key);
			System.out.printf("%s: %.2f\n", mis.name,mis.averageAll());
		}
	}
}

public class JPA06_4 {
    public static void main(String argv[]) {
        MIS s1 = new IT("John", 88, 90, 76, 68, 84);
        MIS s2 = new IM("Paul", 92, 80, 76, 68);
        MIS s3 = new ITM("Mary", 79, 88, 94, 92, 83, 69);
        System.out.printf("John's elect score: %.2f all score %.2f\n", s1.averageElect(), s1.averageAll());
        System.out.printf("Paul's elect score: %.2f all score %.2f\n", s2.averageElect(), s2.averageAll());
        System.out.printf("Mary's elect score: %.2f all score %.2f\n", s3.averageElect(), s3.averageAll());
        MISClass c1 = new MISClass();
        c1.put("John", s1);
        c1.put("Paul", s2);
        c1.put("Mary", s3);
        c1.list();
    }
}

JPA06_4.java 檔案下載



題目五:

題目說明:

請開啟 JPD06_5.java,接續題目四的成績列印,請依下列題意完成作答。將 JPD06_5.java 内的 class JPD06_5 修改為 class JPA06_5,將檔案另存為 JPA06_5.java 後編譯為 JPA06_5.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請宣告一位 IM 學生 Peter 的資料如下,此學生平均成績大於 100 (代表資料錯誤),請使用例外處理,將學生的名字前增印兩個星號 (**),並結束程式。

執行結果參考畫面:



JPD06_5.java 檔案下載

程式碼:

import java.util.HashMap;

abstract class MIS {
	String name;
	int chi, eng;
	static int students = 0;
	
	MIS(String name, int chi, int eng) {
		this.name = name;
		this.chi = chi;
		this.eng = eng;
		students++;
	}
	
	double averageCompulsory() {
		return (chi + eng) / 2.0;
	}
	
	abstract double averageElect();
	double averageAll() {
		return averageCompulsory() * 0.4 + averageElect() * 0.6;
	}
	
	static int getStudents() {
		return students;
	}
}

class IT extends MIS {
	int pl, db, ds;
	
	IT(String name, int chi, int eng, int pl, int db, int ds) {
		super(name, chi, eng);
		this.pl = pl;
		this.db = db;
		this.ds = ds;
	}
	
	double averageElect() {
		return (pl + db + ds) / 3.0;
	}
}

class IM extends MIS {
	int econ, acct;
	
	IM(String name, int chi, int eng, int econ, int acct) {
		super(name, chi, eng);
		this.econ = econ;
		this.acct = acct;
	}
	
	double averageElect() {
		return (econ + acct) / 2.0;
	}
}

class ITM extends IT {
	int acct;
	
	ITM(String name, int chi, int eng, int pl, int db, int ds, int acct) {
		super(name, chi, eng, pl, db, ds);
		this.acct = acct;
	}
	
	double averageElect() {
		return (super.averageElect() + acct) / 2.0;
	}
	
	double averageAll() {
		return averageCompulsory() * 0.4 + super.averageElect() * 0.4 + acct * 0.2;
	}
}

class MISClass {
	HashMap hashmap = new HashMap();
	
	void put(String name, MIS mis) {
		hashmap.put(name, mis);
	}
	
	void list() {
		MIS mis;
		
		for(Object key : hashmap.keySet()) {
			mis = (MIS)hashmap.get(key);
			
			try {
				if(mis.averageAll() > 100)
					throw new Exception();
				else
					System.out.printf("%s: %.2f\n", mis.name,mis.averageAll());
			} catch(Exception e) {
				System.out.printf("**%s: %.1f\n", mis.name,mis.averageAll());
			}
		}
	}
}

public class JPA06_5 {
    public static void main(String argv[]) {
        MISClass c1 = new MISClass();
        c1.put("Peter", new IM("Peter", 89, 980, 77, 69));
        c1.list();
    }
}

JPA06_5.java 檔案下載



TQC+ 物件導向程式語言 Java 6 第六類:物件導向程式設計與例外處理




如果覺得文章內容還不錯的話,麻煩請幫我點個讚!感謝

可以多點幾次喔~~

第一次點讚需使用 Google 或 Facebook 帳號註冊

發表迴響