private: System::Void buttonOK_Click(System::Object^ sender, System::EventArgs^ e)
{
try
{
// Базовая ставка
double baseRate = Convert::ToDouble(textBoxBaseRate->Text);
// КБМ (класс предыдущего года) — обычно вводится вручную
double kbm = Convert::ToDouble(textBoxKBM->Text); // например 0.8 или 1.0
// Количество страховых случаев (для небольшой надбавки)
int accidents = Convert::ToInt32(textBoxAccidents->Text);
// Получаем коэффициенты из комбобоксов
double kvs = GetKVS(comboBoxAgeExp->SelectedIndex); // Возраст и стаж
double kt = GetKT(comboBoxTerritory->SelectedIndex); // Территория
double km = GetKM(comboBoxPower->SelectedIndex); // Мощность
// Ограничение водителей
bool limitedDrivers = checkBoxLimited->Checked;
double ko = limitedDrivers ? 1.0 : 1.8; // неограниченная = 1.8
// Период использования (в месяцах)
int months = Convert::ToInt32(comboBoxPeriod->Text);
double ks = months / 12.0;
// ==================== РАСЧЁТ ====================
double price = baseRate;
price *= kt; // территория
price *= kbm; // КБМ
price *= kvs; // возраст и стаж
price *= ko; // ограничение водителей
price *= km; // мощность
price *= ks; // период
// Небольшая надбавка за аварии (можно настроить)
if (accidents >= 3) price *= 1.50;
else if (accidents == 2) price *= 1.25;
else if (accidents == 1) price *= 1.10;
price = Math::Round(price, 2);
// ==================== КРАСИВЫЙ ВЫВОД ====================
String^ result = "=== РАСЧЁТ ПОЛИСА ОСАГО ===\n\n";
result += "Базовая ставка: " + baseRate.ToString("N0") + " ₽\n";
result += "КТ (территория): " + kt.ToString("0.00") + "\n";
result += "КБМ: " + kbm.ToString("0.00") + "\n";
result += "КВС (возраст+стаж): " + kvs.ToString("0.00") + "\n";
result += "КО (водители): " + ko.ToString("0.00") + "\n";
result += "КМ (мощность): " + km.ToString("0.00") + "\n";
result += "КС (период): " + ks.ToString("0.00") + "\n\n";
result += "ИТОГОВАЯ СТОИМОСТЬ: " + price.ToString("N2") + " ₽";
MessageBox::Show(result, "Результат расчёта ОСАГО",
MessageBoxButtons::OK, MessageBoxIcon::Information);
}
catch (Exception^ ex)
{
MessageBox::Show("Ошибка! Проверьте, что все поля заполнены правильно.\n\n" + ex->Message,
"Ошибка ввода", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}