Загрузка данных
#pragma once
namespace OSAGO_Calculator {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Globalization;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
}
protected:
~Form1()
{
if (components)
{
delete components;
}
}
// Коэффициенты для расчета
private: double GetTerritoryCoefficient()
{
switch (comboBoxTerritory->SelectedIndex)
{
case 0: return 2.0; // Москва
case 1: return 1.8; // Санкт-Петербург
case 2: return 1.5; // Другие города > 1 млн
case 3: return 1.3; // Другие города < 1 млн
case 4: return 0.9; // Сельская местность
default: return 1.0;
}
}
private: double GetAgeExperienceCoefficient()
{
switch (comboBoxAgeExperience->SelectedIndex)
{
case 0: return 1.8; // До 22 лет, стаж до 3 лет
case 1: return 1.7; // 22-25 лет, стаж до 3 лет
case 2: return 1.4; // Старше 25 лет, стаж до 3 лет
case 3: return 1.0; // Старше 25 лет, стаж более 3 лет
default: return 1.0;
}
}
private: double GetPowerCoefficient()
{
switch (comboBoxPower->SelectedIndex)
{
case 0: return 0.6; // До 50
case 1: return 1.0; // 50-70
case 2: return 1.1; // 70-100
case 3: return 1.2; // 100-120
case 4: return 1.4; // 120-150
case 5: return 1.6; // Свыше 150
default: return 1.0;
}
}
private: double GetPeriodCoefficient()
{
switch (comboBoxPeriod->SelectedIndex)
{
case 0: return 0.5; // 3 месяца
case 1: return 0.7; // 6 месяцев
case 2: return 0.9; // 9 месяцев
case 3: return 1.0; // 12 месяцев
default: return 1.0;
}
}
private: double GetDriversCoefficient()
{
return checkBoxLimitedDrivers->Checked ? 1.0 : 1.8;
}
private: double GetKBMCoefficient()
{
// Упрощенный расчет КБМ
try
{
int class_val = Int32::Parse(textBoxClass->Text);
int accidents = Int32::Parse(textBoxAccidents->Text);
// Базовый КБМ для класса 3 = 1.0
double kbm = 1.0;
// Увеличиваем/уменьшаем в зависимости от аварий
if (accidents > 0)
kbm = 1.0 + (accidents * 0.5);
return kbm;
}
catch (...)
{
return 1.0;
}
}
// Обработчик кнопки OK
private: System::Void buttonOK_Click(System::Object^ sender, System::EventArgs^ e)
{
try
{
// Проверка ввода
double baseRate = Double::Parse(textBoxBaseRate->Text,
CultureInfo::InvariantCulture);
if (baseRate <= 0)
{
MessageBox::Show("Базовая ставка должна быть положительным числом!",
"Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Warning);
return;
}
// Расчет стоимости ОСАГО
double coefficient = GetTerritoryCoefficient() *
GetAgeExperienceCoefficient() *
GetPowerCoefficient() *
GetPeriodCoefficient() *
GetDriversCoefficient() *
GetKBMCoefficient();
double totalCost = baseRate * coefficient;
// Формирование сообщения
String^ message = String::Format(
"Стоимость ОСАГО: {0:F2} руб.\n\n" +
"Коэффициенты:\n" +
"Территория: {1:F2}\n" +
"Возраст/стаж: {2:F2}\n" +
"Мощность: {3:F2}\n" +
"Период: {4:F2}\n" +
"Водители: {5:F2}\n" +
"КБМ: {6:F2}\n\n" +
"Итоговый коэффициент: {7:F2}",
totalCost,
GetTerritoryCoefficient(),
GetAgeExperienceCoefficient(),
GetPowerCoefficient(),
GetPeriodCoefficient(),
GetDriversCoefficient(),
GetKBMCoefficient(),
coefficient);
MessageBox::Show(message, "Результат расчета ОСАГО",
MessageBoxButtons::OK, MessageBoxIcon::Information);
}
catch (FormatException^)
{
MessageBox::Show("Пожалуйста, введите корректные числовые значения!",
"Ошибка ввода", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
catch (Exception^ ex)
{
MessageBox::Show("Произошла ошибка: " + ex->Message,
"Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}
private: System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
// ... (остальной код генерируется автоматически)
#pragma endregion
};
}