問題文
各曜日の午前・午後・深夜で商品の割引率が変化します。(詳細はここでは省略)
ある曜日、時間帯における価格を計算する関数を作成せよ。
解決したいこと
・ユーザー(質問主)定義関数getPriceは割引率を求め、価格を表示する内容となっていますが、**割引率を表示する関数と商品価格を表示する関数の2つに分けたいです。(1つの関数に1つの機能としたいため)
**
・曜日の定義を列挙型を関数getPrice内でのみ利用していますが、別の部分でも曜日の列挙型をできるのではないかと思いました。
今の用途だけだとgetPrice内のswitch case~~ の ~~部分がわかりやすいだけになっている。
以下ソースコード
ソースコード全体を表示すると長いため、概要がわかる程度に質問に関係する部分だけ残して省略させていただきます。
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
static const int kmorning = 420, knoon = 720, knight = 1320, kmidnight = 1440; // 0時からの経過時間(分)
enum EWeek
{
Sun, Mon, Tue, Wed, Thu, Fri, Sat
};
int getPrice(int price, int dayofWeek, int visitTime)
{
switch (dayofWeek) {
case Sun:
if (kmorning <= visitTime && kmidnight > visitTime) {
return price * 1.0;
}
break;
case Mon: if (kmorning <= visitTime && knight > visitTime) { return price * 1.0; } else if (knight <= visitTime && kmidnight > visitTime) { return price * 0.95; } return price;
}
int main()
{
string dayofWeek = "\0";
static const int free = 0; int Price = 0, Week = 0, visitHour = 0, visitMinute = 0, visitTime = 0;
// 調べたい時間の入力
//その時間営業しているかどうかの処理
//入力エラー処理
while (1) { cout << "来店する日の曜日を入力(例:Mon, Tue)" << endl; cin >> dayofWeek; if (cin.fail()) { cout << "入力エラーです。もう一度入力してください。 \n" << endl; cin.clear(); cin.ignore(1024, '\n'); continue; } if (dayofWeek == "Sun") { Week = 0; break; } else if (dayofWeek == "Mon") { Week = 1; break; } else if (dayofWeek == "Tue") { Week = 2; break; } else if (dayofWeek == "Wed") { Week = 3; break; } else if (dayofWeek == "Thu") { Week = 4; break; } else if (dayofWeek == "Fri") { Week = 5; break; } else if (dayofWeek == "Sat") { Week = 6; break; } }
// 商品価格の入力
// 入力エラー処理
cout << "惣菜の価格は" << getPrice(Price, Week, visitTime) << "円" << endl; return 0;
}