課題3 レポートについて


レポート課題

継承と仮想関数のしくみを利用し、練習問題8で作成したプログラムを参考にして運動記録リストを表示するプログラムを作成せよ。ただし、以下の 1) ~ 3) の仕様を満たすこと。

1) 以下の3つのクラスを作成する。それぞれ、表に示したメンバ変数・メンバ関数を持たせること。(追加は自由)

クラス  
ListItemクラス コンテナに格納する要素の基本クラス
char* name : 文字列を指すポインタ
void Print()  : 文字列を標準出力に表示
Listクラス ListItemクラスを格納するコンテナ
void Add(ListItem* p) : pで指定された要素をコンテナに追加
void Sort()  : 要素を name に格納されているデータでソート
void Print() : 格納した要素のPrintメンバ関数を順に呼び出す
ExerciseLog クラス ListItemクラスから派生して作成する、年月日と運動メニュー,強度,時間を格納するクラス
char* exmenu:運動メニューを格納した文字列を指すポインタ
double mets :強度(METs)
int min :時間(min)
void Print() : 年月日と運動メニュー,強度,時間を標準出力に表示 (基本クラスの関数をオーバーライド)
ExerciseLog(const char* _date, const char* _exmenu, double _mets, int _min) : イニシャライザ付のコンストラクタ
 _date : 年月日を表す文字列 (ListItemクラスのメンバ変数 nameを利用する)
 _exmenu :運動メニューを表す文字列
 _mets :強度(METs)
 _min :時間(min)

引数で与えられた内容で、メンバ変数を初期化すること。

 

2) main関数に以下の例のようなテスト用コードを記述し、右図のような出力をすること 。

    //Listクラスのインスタンスの生成
    List menulist(100);
    
    // エントリーの追加
    menulist.Add(new ExerciseLog("2022-12-15", "cycling", 4.0, 60));
    menulist.Add(new ExerciseLog("2022-12-16", "swimming", 8.0, 45));
    menulist.Add(new ExerciseLog("2022-12-14", "jogging", 7.0, 30));
    menulist.Add(new ExerciseLog("2022-12-17", "dog-walking", 3.0, 45));

    //印刷
    menulist.Print();
    cout << "-----------------" << endl;
	
    //エントリーのソート
    menulist.Sort();
    //印刷
    menulist.Print();
	
実行結果
2022-12-15: cycling: 4(METs), 60(min)
2022-12-16: swimming: 8(METs), 45(min)
2022-12-14: jogging: 7(METs), 30(min)
2022-12-17: dog-walking: 3(METs), 45(min)
-----------------
2022-12-14: jogging: 7(METs), 30(min)
2022-12-15: cycling: 4(METs), 60(min)
2022-12-16: swimming: 8(METs), 45(min)
2022-12-17: dog-walking: 3(METs), 45(min)
<

この後ろに、各自で追加した機能が正常動作することを示す結果も表示すること

 

3)Listクラスには、独自のメンバ関数を最低限一つ追加すること。

Listクラスを拡張して、あれば良いと思うメンバ関数を追加しなさい。例を以下に示すが、各自が自由な発想で追加してよい。

4) (オプション課題) ListItemクラス、Listクラスを使用し、継承によりこれらのクラスの機能を利用してオリジナルのプログラムを作成せよ。

 

注意事項

  1. 各クラスに必要なコンストラクタ・デストラクタ・メンバ関数・メンバ変数は自由に追加して良い。適切な設計、適切なアクセス指定となるように考慮すること。
  2. Listクラス内のデータ構造は指定しないので、配列・リンクトリストなど、各自が自由に工夫して実装すること。
  3. ファイルは適切に分割し、2重インクルード防止などの措置を施すこと。
  4. メモリリークを起こしてはならない。

ヒント

レポートについて

以下の内容について記載すること

1. 課題の概要

2.データ構造

3.プログラム

4.実行結果

5. オプション課題

6.考察

7.実行環境

8. 感想

9.参考文献

テンプレートおよび提出期限

◎ レポートは,レポートテンプレート の章立てに従い作成すること.

◎ 提出先:Webclass (課題3レポートに提出すること.)

レポートの提出について

提出期限