Краткое описание прототипа и конструкций

Поэтому мне нужно создать функцию, которая будет поворачивать часть 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;
}

Я знаю, что здесь много неправильного, и мне просто нужна была помощь в правильном направлении. Я понятия не имею, как решить вещи строковой переменной, я должен продолжать идти этим путем? или идти совсем другим путем?

Спасибо за любую помощь!

0

Решение

Есть несколько проектов и реализаций для ваших требований.

заявление о переключении
Вместо всех этих 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 для создания заявок и универсальную функцию для печати сводки заявок.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]