В данной статье мы создадим калькулятор процентных ставок на C# для расчёта доходов с банковских вкладов.
Для начала, как и всегда, создаём форму:
У нас имеются 5 Label’ов, 3 NumericUpDown, ComboBox и Button.
Первый NumericUpDown мы назовём в вкладке «Разработка» в Свойствах numstartcount:
Это означает, что в коде мы будем называть этот NumericUpDown именем, которое написано в данной вкладке.
В numstartcount пользователь будет вводить изначальное количество денег, которые он хочет положить в банк.
Также мы выставляем следующие свойства для этого элемента:
Вкладка Value показывает, какое число будет изначально выводиться в этом элементе.
Мы написали 10000 и, как видно в форме, данное число теперь стоит у нас в элементе.
DecimalPlaces показывает количество цифр после запятой в элементе. Так как помимо рублей у нас есть ещё и копейки, их также надо учитывать, поэтому мы ставим цифру 2 в этой вкладке, и теперь у нас в элементе будет написано не просто «10000», а «10000,00».
Increment показывает, на какое число уменьшается или увеличивается значение в NumericUpDown’e при нажатии на нём стрелок вниз или вверх.
Maximum указывает максимальное значение, которое может вмещать в себя данный элемент.
Minimum указывает минимальное значение, которое может вмещать данный элемент.
ThousandsSeparator в значении True устанавливает разделитель тысяч. Теперь вместо записи «10000,00» у нас будет «10 000,00». Это удобнее для пользователя, да и выглядеть будет лучше.
Второй NumericUpDown в вкладке «Разработка» будет называться numpercent. В нём пользователь будет указывать процентную ставку (в процентах).
В свойствах к нему мы изменяем лишь DecimalPlaces на 2, что также даёт ему лишние две цифры после запятой.
Minimum по умолчанию будет 0, Maximum 100. Это нам подходит.
Следующий NumericUpDown будет называться numyears. Здесь пользователь указывает, на сколько лет он делает вклад. В свойствах кроме названия элемента мы ничего не меняем.
Далее у нас идёт ComboBox. В «Разработке» назовём его comboprocess. Тут пользователь укажет процесс начисления денег (начисляются ли они ежедневно, ежемесячно, ежеквартально, по полугодиям или ежегодно).
Для того, чтобы внеси все эти вкладки выбора, нажимаем в форме на ComboBox, а затем на кнопку в верхней части комбобокса.
Открывается окошко, в котором надо нажать «Изменить элементы».
Откроется редактор коллекций строк, в котором мы пишем наши элементы по одному на строку.
Ниже у нас расположен последний NumericUpDown. Имя в «Разработке» у него будет total.
В нём будет выводиться сумма, которую пользователь получит в итоге.
Может возникнуть вопрос, а почему мы не использовали TextBox для простого вывода числа на экран? Всё дело в «презентабельности» вида. В TextBox’e нет свойства ThousandsSeparator, который разделял бы тысячи пробелами (можно написать код для такого разделения, но зачем же лишний геморрой?). Но раз мы начали делать всё красиво, то отступаться от этого не стоит. Тогда появляется следующий вопрос: но у NumericUpDown’a же стрелки, он не подойдёт для вывода текста, ведь пользователь, возможно, захочет проверить их работоспособность. Ответ: мы уберём эти стрелки, и NumericUpDown будет выглядеть точно как TextBox, сделаем мы это, написав одну строку в коде. Пока же разбираемся с свойствами.
Для начала мы решили поменять шрифт текста, выводимого пользователю, для более удобного просмотра:
Затем меняем уже известные нам DecimalPlaces, Maximum и ThousandsSeparator, ради которого всё затевалось:
Остаётся лишь кнопка button «Рассчитать», при нажатии на которую и будет рассчитана конечная сумма. В «Разработке» она называется calc.
Переходим к коду.
Уберём для начала стрелки с total. Нажимаем на форме правой кнопкой мыши и выбираем «Перейти к коду».
Далее находим функцию public Form1(), и внутри неё (под строкой InitializeComponent()) пишем строку:
1 |
total.Controls[0].Visible = false; |
Написано в ней примерно следующее: в элементе total видимость(visible) контроллеров (controls) равно «ложь» (иначе говоря, отсутствие). Теперь стрелок в этом NumericUpDown’e не будет.
Идём далее. Возвращаемся в форму и там дважды нажимаем на Button, нас переносит к участку кода, отвечающему за нажатие пользователем этой кнопки.
Там мы пишем:
1 2 3 |
double startcount = Convert.ToDouble(numstartcount.Value); double rate = Convert.ToDouble(numpercent.Value); int years = Convert.ToInt32(numyears.Value); |
Здесь мы считываем значения, которые имеются в numstartcount, numpercent и numyears и конвертируем их из строкового типа в числовые.
В первых двух случаях мы создаём переменные с типом double, так как значения могут быть не целочисленными.
Последняя переменная у нас int’овская, целочисленная, так как годы у нас не могут быть дробными.
Далее пишем :
1 2 |
rate = rate / 100; int periods = 0; |
В первой строке мы делим значение, полученное из numpercent (процентная ставка) на 100, то есть переводим её в проценты.
Затем мы объявляем переменную periods, которая понадобится нам для вычисления процентов в зависимости от процесса начисления вклада.
Теперь самое сложное: нам надо вывести формулу для расчёта процентных ставок в зависимости от процесса начисления.
Мы формулу уже вывели и выглядит она примерно так: p=c(1+r/n)^nt ,где
p – это итоговая сумма, которую получит пользователь
с – начальная сумма, которую положить пользователь на вклад.
r/n – это процентная ставка, деленная на количество дней начисления денег (n у нас будет меняться в зависимости от того, какое значение выберет пользователь в ComboBox’e, например, если проценты начисляются ежедневно, то начислять деньги будут каждый день, и n=365, если ежеквартально, то начислять проценты будут раз в квартал, то есть 4 раза, значит n=4.)
n*t – это количество дней начисления денег, умноженное на количество лет, на которое хочет положить деньги пользователь.
Остаётся написать условие для каждого выбора пользователя в ComboBox’e, так как от него существенно зависит начисление процентов.
Сначала пишем условие для ситуации, когда пользователь выберет в комбобоксе первый вариант («Ежедневно»):
1 2 3 4 5 6 7 |
if (comboprocess.SelectedIndex==0) { double dayRate = rate / 365; periods = years * 365; startcount = startcount * Math.Pow((1 + dayRate), periods); total.Text = Convert.ToString(Math.Round(startcount, 2)); } |
Если индекс выбранной строки в комбобоксе будет равен нулю (индексы в C# начинаются с нуля, а не с единицы!), то мы применяем нашу формулу и выводим полученное число в total (цифра 2 в выводе означает, что полученное значение округляется до двух знаков после запятой).
Теперь создадим условие, если пользователь выбрал значение «Ежемесячно»:
1 2 3 4 5 6 7 |
else if (comboprocess.SelectedIndex == 1) { double monthRate = rate / 12; periods = years * 12; startcount = startcount * Math.Pow((1 + monthRate), periods); total.Text = Convert.ToString(Math.Round(startcount, 2)); } |
То же самое, меняются только r/n и n*t.
Далее строка «Ежеквартально»:
1 2 3 4 5 6 7 |
else if (comboprocess.SelectedIndex == 2) { double quarterRate = rate / 4; periods = years * 4; startcount = startcount * Math.Pow((1 + quarterRate), periods); total.Text = Convert.ToString(Math.Round(startcount, 2)); } |
Затем «По полугодиям»:
1 2 3 4 5 6 7 |
else if (comboprocess.SelectedIndex == 3) { double halfyearRate = rate / 2; periods = years * 2; startcount = startcount * Math.Pow((1 + halfyearRate), periods); total.Text = Convert.ToString(Math.Round(startcount, 2)); } |
И, наконец, «Ежегодно»:
1 2 3 4 5 6 7 |
else if (comboprocess.SelectedIndex == 4) { double yearRate = rate; periods = years; startcount = startcount * Math.Pow((1 + yearRate), periods); total.Text = Convert.ToString(Math.Round(startcount, 2)); } |
Ещё мы сделаем ещё одно ответвление условия, при котором пользователь забудет или нарочно не выберет ни одну из перечисленных вкладок. Мы в самом ComboBox’e напишем ему «напоминание»: «Процесс не выбран»:
1 2 3 4 |
else { comboprocess.Text = "Процесс не выбран"; } |
Выглядеть это будет вот так, если пользователь выберет все нужные ему опции, но не выберет эту:
Вот и всё. Наша программа готова:
Скачать калькулятор процентных ставок на C# можно ниже:
Скачать исходник
Поделиться в соц. сетях: