TQC+ 物件導向程式語言 Java 6 605 成績資訊系統
題目前後相關,請閱讀完這個題組的五個題目之後再作答,每題答案皆能獨立執行。請將需要重複或共同使用的程式片段撰寫成函式,以供在類別中呼叫使用,避免在不同的類別中重複寫相同的程式碼,否則將酌量扣分。
題目一:
題目說明:
請開啟檔案 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 的資料,計算其「選修課的平均成績」及「總平均成績」。
執行結果參考畫面:
程式碼:
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());
}
}
題目二:
題目說明:
請開啟 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 的資料,並計算其「選修課平均成績」及「總平均成績」。
執行結果參考畫面:
程式碼:
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());
}
}
題目三:
題目說明:
請開啟 JPD06_3.java,系上想要統計目前系上的所有學生人數,請依下列題意完成作答。將 JPD06_3.java 内的 class JPD06_3 修改為 class JPA06_3,將檔案另存為 JPA06_3.java 後編譯為 JPA06_3.class,所有題目中有使用到的類別也請編譯後一併儲存。
設計說明:
(1) 請以類別變數累計學生人數,並呼叫一個方法傳回該系的學生人數。
執行結果參考畫面:
程式碼:
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());
}
}
題目四:
題目說明:
請開啟 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 方法印出該班所有學生的名字及總平均成績。
執行結果參考畫面:
程式碼:
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();
}
}
題目五:
題目說明:
請開啟 JPD06_5.java,接續題目四的成績列印,請依下列題意完成作答。將 JPD06_5.java 内的 class JPD06_5 修改為 class JPA06_5,將檔案另存為 JPA06_5.java 後編譯為 JPA06_5.class,所有題目中有使用到的類別也請編譯後一併儲存。
設計說明:
(1) 請宣告一位 IM 學生 Peter 的資料如下,此學生平均成績大於 100 (代表資料錯誤),請使用例外處理,將學生的名字前增印兩個星號 (**),並結束程式。
執行結果參考畫面:
程式碼:
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();
}
}