Поэтому мне нужно создать функцию, которая будет поворачивать часть COUT ТОЛЬКО из каждого оператора if:
// Respond to the user's menu selection
if (choice == ADULT_CHOICE)
{
charges = months * ADULT;
cout << over3 << "The total charges are $" << charges << endl;
}
else if (choice == CHILD_CHOICE)
{
charges = months * CHILD;
cout << over3 << "The total charges are $" << charges << endl;
}
else if (choice == SENIOR_CHOICE)
{
charges = months * SENIOR;
cout << over3 << "The total charges are $" << charges << endl;
}
В сводную функцию, которая читает как ЭТОТ.
До сих пор я сделал полный беспорядок в коде, и мне действительно нужна некоторая помощь … вот что у меня есть, но большая часть этого, вероятно, не подлежит восстановлению:
прототип функции:
int summary(string, int, int, double);
Главный:
//variables
int choice; // menu choice
int months; //number of months
double charges; //monthly charges
string type1 = "Adult", type2 = "Child", type3 = "Senior";if (choice == ADULT_CHOICE)
{
charges = months * ADULT;
cout << summary(type1, months, 40, charges);
}
else if (choice == CHILD_CHOICE)
{
charges = months * CHILD;
cout << summary(type2, months, 20, charges);
}
else if (choice == SENIOR_CHOICE)
{
charges = months * SENIOR;
cout << summary(type3, months, 30, charges);
}
определение функции:
int summary(string type, int months, int price , double charges)
{
system("CLS");
cout << down7;
cout << over3 << " Summary of Charges \n"<< over3 << "----------------------------\n"<< over3 << "Membership Type: " << type << endl;
cout << over3 << "Number of Months: " << months << endl;
cout << over3 << "Membership Prices: " << price << endl;
cout << over3 << "Total of Charges: " << charges << endl;
}
Я знаю, что здесь много неправильного, и мне просто нужна была помощь в правильном направлении. Я понятия не имею, как решить вещи строковой переменной, я должен продолжать идти этим путем? или идти совсем другим путем?
Спасибо за любую помощь!
Есть несколько проектов и реализаций для ваших требований.
заявление о переключении
Вместо всех этих if-else-if
в лестнице, используйте switch
заявление. Я верю switch
Заявление будет более читабельным:
double rate = 0.0;
std::string type_name;
double price = 0.0;
switch (choice)
{
case ADULT_CHOICE:
rate = adult_rate;
type_name = "Adult";
price = 40;
break;
case CHILD_CHOICE:
rate = child_rate;
type_name = "Child";
price = 20;
break;
case SENIOR_CHOICE:
rate = senior_rate;
type_name = "Senior";
price = 30;
break;
default:
cerr << "Invalid ticket type\r\n";
exit(1);
}
charges = months * rate;
summary(type_name, months, price, charges);
Справочная таблица
Более понятный дизайн и реализация заключается в использовании справочной таблицы. Создайте таблицу записей, которые содержат информацию о заявке. (Это приведет к последнему рассмотрению проекта).
struct Ticket
{
unsigned int choice;
char const * type_name;
double price;
double rate;
};
const Ticket ticket_info[] =
{
{ADULT_CHOICE, "Adult", 40, ADULT_RATE},
{CHILD_CHOICE, "Child", 10, CHILD_RATE},
{SENIOR_CHOICE, "Senior", 30, SENIOR_RATE},
};
const unsigned int maximum_ticket_types =
sizeof(ticket_info) / sizeof(ticket_info[0]);
for (unsigned int i = 0; i < maximum_ticket_types; ++i)
{
if (choice == ticket_info[i].choice)
{
summary(ticket_info[i].type_name,
months,
ticket_info[i].price,
ticket_info[i].rate * months);
break;
}
}
Преимущество заключается в том, что вы можете протестировать его только с 1 записью, а затем добавить дополнительные записи без добавления дополнительного кода.
Объектно-ориентированный
В объектно-ориентированном подходе у вас будет либо объект билета (как структура выше), либо объекты родительского билета и дочернего билета. Объекты будут содержать методы для печати резюме.
Вот образец:
class Ticket_Base
{
public:
friend std::ostream& operator>>(std::ostream& output, const Ticket_Base& ticket);
double rate;
double price;
std::string type_name;
};
class Adult_Ticket : public Ticket_Base
{
public:
Adult_Ticket()
: rate(ADULT_RATE), price(40), type_name("Adult");
};
Классы для старших и детей будут выглядеть так же, как билеты для взрослых.
Вы можете использовать Factory Pattern для создания заявок и универсальную функцию для печати сводки заявок.
Других решений пока нет …