Кредитный калькулятор на C# - Часть 1 (Создаем внешний интерфейс)

Несмотря на то, что каждый банк считает проценты, начисляемые к сумме кредита по-своему, всячески изменяет формулы вычисления платежей (в зависимости от страховки, например), полезно перед взятием кредита хотя бы примерно прикинуть, во сколько нам встанет тот или иной кредит. Для этой цели сегодня мы напишем кредитный калькулятор на C# (Windows Forms).


В его задачи будет входить: расчет итоговой стоимости кредита, переплаты, ежемесячного платежа, а также создание графика платежей и сохранение всего этого добра в *.csv-файл для дальнейших манипуляций.
Нам понадобится форма (MainForm.cs). Ее мы заполним следующими основными элементами:
  • ToolTip (Name = "toolTipPaymentType")  
  • TabConrol (2 вкладки: "По стоимости покупки", "По сумме кредита"), Dock = "Left".
  • GroupBox1 (Text = График платежей, Dock = "Bottom")
  • GroupBox2(Text = Результат расчетов, Doc = "Fill")
На первой вкладке TabControl разместим следующие элементы:
  • Label ("Стоимость покупки:", "руб.", "Первоначальный взнос:", "Сумма кредита:", "руб.", "Процентная ставка:", "% годовых", "Срок кредита:", "Вид платежа:")
  • NumericUpDown (Name = "pricePrice", Minimum = "1000", Maximum = "10000000000", ThousandsSeparator = "True")
  • NumericUpDown (Name = "priceInitial", Maximum = "10000000000", ThousandsSeparator = "True")
  • ComboBox (Name = "priceInitialType", DropDownStyle = "DropDownList", Item1 = "руб.", Item2 = "%")
  • TextBox (Name = "priceCreditSum", ReadOnly = "True")
  • NumericUpDown (Name = "priceProcent", DecimalPlaces = "2", Increment = "0,1", Maximum = "1000")
  • NumericUpDown (Name = "pricePeriod", Minimum = "1")
  • ComboBox (Name = "pricePeriodCombo", DropDownStyle = "DropDownList", Item1 = "лет", Item2 = "мес.")
  • RadioButton (Name = "priceAnnuitet", ToolTip на toolTipPayment = "Вариант ежемесячного платежа по кредиту, когда размер ежемесячного платежа остаётся постоянным на всём периоде кредитования.")
  • RadioButton (Name = "priceDiffer", ToolTip на toolTipPayment = "Вариант ежемесячного платежа по кредиту, когда размер ежемесячного платежа по погашению кредита постепенно уменьшается к концу периода кредитования.")
  • Button1 (Name = "butPriceClear", Text = "Очистить расчеты")
  • Button2 (Name = "butPriceGo", Text = "Рассчитать стоимость")

На второй вкладке TabConrol разместим следующие элементы:
  • Label ("Сумма кредита:", "руб.", "Процентная ставка:", "% годовых", "Срок кредита:", "Вид платежа:")
  • NumericUpDown (Name = "sumCreditSum", Increment = "1000", Minimum = "1000", Maximum = "10000000000")
  • NumericUpDown (Name = "sumProcent", DecimalPlaces = "2", Increment = "0,1", Maximum = "1000")
  • NumericUpDown (Name = "sumPeriod", Minimum = "1")
  • ComboBox (Name = "sumPeriodCombo", DropDownStyle = "DropDownList", Item1 = "лет", Item2 = "мес.")
  • RadioButton (Name = "sumAnnuitet", ToolTip на toolTipPayment = "Вариант ежемесячного платежа по кредиту, когда размер ежемесячного платежа остаётся постоянным на всём периоде кредитования.")
  • RadioButton (Name = "sumDiffer", ToolTip на toolTipPayment = "Вариант ежемесячного платежа по кредиту, когда размер ежемесячного платежа по погашению кредита постепенно уменьшается к концу периода кредитования.")
  • Button1 (Name = "butSumClear", Text = "Очистить расчеты")
  • Button2 (Name = "butSumGo", Text = "Рассчитать стоимость")

Внутри GroupBox (График платежей) мы разместим элемент DataGridView (Name = "dgvGrafik", Columns = "Месяц", "Сумма платежа", "Платеж по основному долгу, руб.", "Платеж по процентам, руб.", "Остаток основного долга, руб.", Dock = Fill).


Внутри GroupBox (Результат расчетов) мы разместим элементы:
  • Label ("Итоговая стоимость:", "руб.", "Переплата по кредиту:", "руб.", "Ежемесячный платеж:", "руб.")
  • Textbox, 3шт. с одинаковыми свойствами (ReadOnly = "True")
  • Button (Name = "butSaveAsCSV", Text = "Экспорт расчетов в .CSV")

Теперь, когда все элементы расставлены по своим местам, а их свойства настроены для наших нужд, можно приступать к написанию кода для их взаимодействия.

Код для события MainForm_Load:

priceInitialType.SelectedIndex = 0;
pricePeriodCombo.SelectedIndex = 0;
priceAnnuitet.Checked = true;
sumPeriodCombo.SelectedIndex = 0;
sumAnnuitet.Checked = true;

Данным кодом мы задаем стандартные значения для расчета стоимости кредита, кроме числовых значений, конечно же.

Код для события MainForm_Shown:

pricePrice.Focus();

Чтобы пользователь сразу после открытия программы имел возможность начать заполнять исходные данные для расчета - при отображении формы фокусируемся на поле "Стоимость покупки".

Создадим возможность быстро заполнять элементы формы с помощью клавиши "Tab". Для этого напишем следующий код для события "Enter" элементов pricePrice, priceInitial, priceProcent, pricePeriod, sumCreditSum, sumProcent, sumPeriod:

private void MainForm_Shown(object sender, EventArgs e)
{
    pricePrice.Focus();
}

private void pricePrice_Enter(object sender, EventArgs e)
{
    pricePrice.Select(0, pricePrice.Text.Length);
}

private void priceInitial_Enter(object sender, EventArgs e)
{
    priceInitial.Select(0, priceInitial.Text.Length);
}

private void priceProcent_Enter(object sender, EventArgs e)
{
    priceProcent.Select(0, priceProcent.Text.Length);
}

private void pricePeriod_Enter(object sender, EventArgs e)
{
    pricePeriod.Select(0, pricePeriod.Text.Length);
}

private void sumCreditSum_Enter(object sender, EventArgs e)
{
    sumCreditSum.Select(0, sumCreditSum.Text.Length);
}

private void sumProcent_Enter(object sender, EventArgs e)
{
    sumProcent.Select(0, sumProcent.Text.Length);
}

private void sumPeriod_Enter(object sender, EventArgs e)
{
    sumPeriod.Select(0, sumPeriod.Text.Length);
}

Данный код выделяет все содержимое элементов при фокусировке на них.

На этом работа с внешним интерфейсом кредитного калькулятора завершена. В следующей части мы напишем код для расчетов платежей, а также код для сохранения данных из dataGridView в "*.csv".