程式設計 作業一 【學生管理系統】
一、 簡介:
你現在在系辦打工,蔡姐要你幫忙把學生的資料給電腦化。請寫一個「學生管理系統」,這個系統要能夠:
- 加入一個學生。
- 修改某位學生的資料。
- 列出所有的學生資料。
- 清除掉所有的學生資料。
學生的資料包括:
- 學號:為8位數的數字。
- 姓名:可能是中文或英文,長度在10以內。
- 性別:男生或女生。
- 生日:由年、月、日組成。
- 電話:為10位數的數字,09xxxxxxxx。
二、 基本要求
- 請使用struct來包裝學生的資料,不要用class。(-20)
- 要有「新增」、「修改」、「全部列出」、「全部刪除」的功能(各-5)。
- 程式必須根據功能,分割成函式,使用正確的參數與回傳值。(-20)。
- 範例程式是用if…else
if…else判斷使用者輸入,請用switch改寫(-10)。
- 達成以上功能,則可拿到基本分數75分,否則會扣括號裡的分數。
三、 參考架構:
你不一定要照這樣寫。如果你有更棒的寫法,告訴助教你的想法,還可以得到額外的加分。
struct Student
{
??? ID; // 學號
??? name; // 姓名
??? sex; // 性別
??? birthday; // 生日
??? phone; // 電話
};
/*
在這裡會遇到的問題:你該用什麼資料型態去記錄呢?
用整數(int)?字元陣列(char []),長度要多長?字串類別(class)?
性別又該怎麼記?用0/1代表,還是用’m’/’f’代表?
生日又該怎麼記?用另一個struct如何?譬如:
struct Birthday
{
int year, month, date;
}
*/
??? addData(???); // 新增一筆資料
??? modifyData(???); // 修改一筆資料
??? printOneData(???); // 印出一筆資料
??? printData(???); // 印出所有資料
??? clearData(???); // 清除所有資料
??? deleteOneData(???); // 刪除一筆資料(加分項目)
??? sortData(???); // 排序資料(加分項目)
??? filterData(???); // 篩選特定資料(加分項目)
/*
任何你想得出來的功能,都請獨立為函式
這裡的問題是,功能的切割,函式的參數與回傳值要怎麼給?
*/
int main()
{
Student students[???];
// 這個陣列你該怎麼定義它的大小?有沒有更好的寫法?
迴圈
{
提示使用者輸入;
接受使用者的輸入;
根據使用者輸入,呼叫適當的函式;
}
return 0;
}
四、 加分條件
- 錯誤偵測:如果使用者輸入了錯誤的資料,能提示使用者並重新輸入。
- 格式錯誤:若電話輸入1234567890或abcd…等等。
- 邏輯錯誤:每個學生的學號都不同,不該被重覆輸入。
- 流程錯誤:範例程式裡有些問題,譬如已經有十筆資料,若再新增則會如何?如何優雅的結束程式…等等。
- 總之,讓程式更不容易被玩到當機、程式流程更順暢、甚至讓螢幕輸出更加的整齊優美,都可以加分。
- 減少限制:在範例裡,最多只能儲存10筆資料。
- 改為執行時輸入學生人數(使用new動態配置)(10)。
- 實作出「刪除單一筆資料」的功能(15)。
- 進一步的資料處理:
- 能夠輸出「所有男生」、「所有女生」。(10)
- 能夠輸出「某個月(或某一天)出生的所有人」。(15)
- 能夠根據學號排序資料。(25)
- 任何你能想出來的東西,你都可以寫出來,跟助教討分數。