OOP 2010/06/22 ONLINE exam. 可看任何自己的書或筆記等, 不可帶任何電子檔 不可以與同學用任何形式通訊, 但可以用 google.com 找並抓任何資料 :-) 請注意: * 所有資料必須放在一個以你學號為名的子目錄後壓縮成一個 可用 jar 解開的檔案! * 該子目錄中除了要有你的程式原始檔外, 還須有一個 00readme.txt 內含你做各題完成的程度摘要, 如: prob. 1 : 100% complete prob. 2 : 90% 完成, 可以 RUN, 有 bugs Prob. 3 : 沒寫 Prob. 4 : 70% complete, 可 compile, 部份還沒寫 做好各題後於21:25~21:35請將壓縮檔當作附件 mail to oop.nctu@gmail.com Subject: ONLINE_EXAM from 學號姓名 on 0622 信件內容是你學號姓名以及該 00readme.txt 的內容, 用 plain text, * 注意過了 21:35 才寄的但在 21:39 前則分數打 8 折 超過 21:39 才寄的但在 21:45 前則分數打 5 折; 過了 21:45 才寄不算分數! ** 能做幾題就做幾題, 做之前請先看過所有題目並想清楚要做哪些題! ** 此線上考的分數與筆試期末考分數計算方式: (以下這兩次考試簡稱"兩者") a. 兩者都先標準化為 0 ~ 100 b. 你的期末考分數 = 兩者較高分*0.7 + 兩者較低分*0.3 20%(1) 請把 genscore.c 修改為 Java application 以便給第 2 題使用 該檔案在這 http://www.csie.nctu.edu.tw/~tsaiwn/oop/online/ 你可以把裡面中文字換成英文, 或不換也可. 30%(2)使用第(I)題產生的資料, (若第一題不會寫, 可使用該 genscore.c 生出的資料) 可使用任何 Java Library, 寫一個 Java application 可以讀入(I)產生的資料, 對每個學生要算出學期總分 total = hwk *0.25+ mid*0.3+ quiz*0.1+ fin*0.35; (where hwk, mid, quiz, fin 請參看該 C program genscore.c) (當然你的資料結構中要準備總分和名次的欄位; 都要印總分, 且 b 到 d 都要印名次 ) (a)先印出最開始 5 筆, 再印出最後 5 筆 ( (b)把資料照 總分 total 由高排到低, 並依此序填入名次, 印出前5名與後5名資料 (c)把資料照 總分 total 由低排到高, 印出最開始 5 筆資料與最後5 筆資料 (d)把資料照 學號 sid 由低排到高, 印出最開始 5 筆資料與最後5 筆資料 25%(3)注意這題寫的時候要先想好如何寫才能很快改成第(4)題! 寫一個Java application 做簡易版的萬年曆, 不要有 GUI, 照美國英國的曆法, 程式每次可接受一個數至三個數, 可能空白或逗點隔開: (超過 3 個只看前 3 個) 0 結束程式 2012 表示要看西元 2012 年整年, 可以輸出成一個月接著一個月或每次三個月 5, 168 表示要看西元 168 年5月 5, 20 2010 表示要看西元 2010 年5月20日是星期幾 注意程式不可以因使用者亂輸入而當掉! 15%(4)把第(3)題改寫為 TCP Server 網路版, 讓全世界可以用 telnet 連入該程式使用萬年曆. 25%(5)寫一個 Java application with GUI 可以產生合法身分證; 在你的 GUI 畫面要有一個 "Generate" 按鈕, 一個可顯示合法身分證的 TextField, 以及一個可選 A 到 Z 表示要第一字母為該字 或 *表示隨便, 還有可以複選"男生" 或 "女生", 兩個都選表示產生"男生" 或 "女生"身分證號碼都可. 另外也要有一個 TextArea 以便紀錄所有已經產生過的身分證字號. 25%(6)寫一個可當作單機版也可當作 TCP server 網路版的 Java application, 此程式可以印出提示(prompt)後讀入兩個整數 m 與 n, 然後印出 C(m, n) 的答案. 注意輸入時 m 與 n 可用空白或逗號隔開, 若讀到 0 則結束程式 若只讀到一個數則把 n 看作 0, 程式不可因使用者亂輸入而當掉! 程式中全部用 long 即可, 不必考慮 BigDecimal. 請測試以下六組 data 並把 running script 用註解寫到程式中: 100, 5 和 100, 6 和 100, 7 和 100, 95 和 100, 94 和 100,93 請注意若只能當作單機版則分數減半!