2001 Spring C++ 程式設計第二次程式作業

簡易成績資料庫

範例執行程式

本作業中你要應用基本的類別設計、 建構元、 解構元、 new/delete、 以及類別界面的設計, 來製作一個基本的成績資料庫以存放某一科目一學期內學生的所有成績, 並提供操作者進行查詢、增加、修改、刪除、存檔等功能。 以下是範例程式執行的列印結果, 可以說明大部分程式的功能

 


c:>SimpleGradeDB

---
請選擇下列功能:
1:輸入資料庫檔案名稱
2:結束操作
1
請輸入檔案名稱:class88.dat
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
6
>>資料庫內沒有任何資料
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
1
請輸入學生姓名:張三
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
2
請輸入學生姓名:張三
請輸入成績:76
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
2
請輸入學生姓名:張三
請輸入成績:96
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
3
請輸入學生姓名:張三
>>姓名:張三
>>成績:76 96
>>平均成績是:86
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
1
請輸入學生姓名:李四
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
3
請輸入學生姓名:李四
>>姓名:李四
>>目前沒有記錄任何資料
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
2
請輸入學生姓名:李四
請輸入成績:80
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
3
請輸入學生姓名:王五
>>資料庫內找不到此學生
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
4
請輸入學生姓名:張三
>>姓名:張三
>>成績:76 96
請問要修改第幾筆成績:2
請輸入成績:98
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
6
>>姓名:張三
>>成績:76 98
>>平均成績是:87
>>姓名:李四
>>成績:80
>>平均成績是:80
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
5
請輸入學生姓名:李四
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
1
請輸入學生姓名:張三
>>資料庫內已經有此一學生
---
<class88.dat>請選擇下列功能:
1:增加一新學生
2:對一學生增加一新成績
3:查詢一學生之所有成績
4:更改一學生之成績
5:刪除某一學生
6:列印顯示所有資料庫中之資料
7:存檔並關閉 class88.dat 檔案
8:結束操作
7
---
請選擇下列功能:
1:輸入資料庫檔案名稱
2:結束操作
2

 


請注意:

請依照下列提示製作你的類別:

  1. 請製作 CGrade 類別以存放同一個學生該科目本學期的所有成績, 本作業中限定最多可輸入 6 個成績, 如果使用者打算存入第七個成績時系統會列印出下列錯誤訊息:
    >>超過個人最多成績筆數無法加入資料庫內
  2. 請製作 CStudent 類別以存放某一學生之個人資料, 在此類別中需動態配置一陣列存放學生之姓名, 此外你必須假設學生姓名不超過 12 個字元 (合理的中文姓名), 如此你可以將鍵盤輸入的字元暫時存放在一個固定長度的記憶體陣列內, 另外此類別內需以一個 CGrade 類別的私有物件來存放此學生的成績。
  3. 製作一 CClass 的類別來存放所有學生的資料, 並且處理輸入命令的解譯工作, 此類別內要用一個 CStudent *[100] 指標陣列來存放動態配置的學生物件, 系統最多可存放 100 個學生的資料, 如果使用者要求存入第 101 個學生, 系統會印出如下的錯誤訊息:
    >>本資料庫只能容納 100 名學生,目前人數已滿
    輸入命令解譯工作由此類別的成員函式 query() 來負責, 此函式為一無窮迴圈, 一直執行到使用者選擇 "結束操作" 為止, 程式的主函式 main 的內容應該如下
    void main()
    {
    }
    此函式為本程式中唯一不屬於任何物件的函式。
  4. 存檔的動作可以用 Binary 的格式也可以用 Text 的格式, 以我的經驗來說, 我覺得用固定位元組的 Binary 格式在讀檔的時候會比較簡單, 請特別注意在存檔時不要破壞了每一個物件的封裝特性。

 

除了以上要求與說明外, 你必須自己加入其它需要的資料成員與成員函式, 程式撰寫時請注意下列各項 C++ 程式設計的一般要點:

  1. 如果成員函式不會更改物件狀態與內容的話,請使用 const
  2. 儘量運用初始化串列 (initialization list) 來撰寫類別的建構元
  3. 不要讓你的資料成員成為 public,也不要讓 private 的成員函式成為 public
  4. 物件所有成員的初始值要在建構元中一併設定完成
  5. 擁有動態配置成員的物件要有適當的解構元
  6. 變數及函式名稱請務必用有意義的英文或是縮寫
  7. 每一個成員函式內請務必只放相關的程式碼, 不要把不相干的東西都擠在同一個函式內

程式繳交說明:

  1. 請以 makefile 或是 workspace / project 來編譯多檔案的程式
  2. 請繪出系統的類別/物件圖,並標示各類別之介面
  3. 請將程式目錄中 *.obj *.exe *.ncb *.plg *.aps ..\debug\*.* ..\release\*.* 的檔案刪除後 zip 起來,然後以附件形式 email 到 pyting@cs.ntou.edu.tw, 信件標題請依照下列範例撰寫:

程式 Demo 說明:

  1. 程式必須能夠現場編譯沒有錯誤
  2. 請說明你的測試方法與測試資料,並操作測試, 請將你要測試的資料先打好,例如 GradeDB1Input.dat, 利用 DOS 的重新導向來測試,例如 GradeDB.exe < GradeDB1Input.dat > result.log
  3. 請回答你的程式設計上的相關問題

C++ 程式設計課程 首頁

製作日期: 03/12/2001 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 理工學院 資訊科學系 Lagoon