В этом выпуске вы сможете потренировать программистскую конструкцию «Если... то...» — один из главных кирпичиков любой программы. Для интереса обернём её в понятную задачу.
Когда банк выдаёт кредит, он проверяет человека по многим параметрам. Один из них — платёжеспособность. Это значит, что банк берёт уровень доходов, примерно прикидывает ваши траты и смотрит, хватит ли вам денег рассчитаться по кредиту.
Проблема в том, что критериев платёжеспособности и трат может быть очень много и они могут ветвиться: если у человека одна ситуация, считать одно; если другая — считать другое. Чтобы ускорить проверку, банки создают автоматические системы оценки — по-нашему, системы скоринга. Сейчас мы напишем похожую программу: она будет учитывать несколько критериев и выдавать оценку платёжеспособности по нашей собственной методике.
Зачем вам такой калькулятор — решайте сами: можно открыть собственный банк, можно оценивать бизнес-проекты, можно прикидывать экономическую эффективность поездки на дачу.
Объявляем переменные
Смысл решения в том, чтобы вначале узнать у человека всё про кредит и про его семейное положение, затем выяснить размер ежемесячного платежа и наконец рассчитать нужный уровень зарплаты.
Для начала объявим переменные, которые будем использовать в расчётах.
var age_coeff; // возрастной коэффициент, который влияет на платёжеспособность
// возраст, размер кредита и количество месяцев
var age;
var money;
var month;
var child; // сколько детей
var child_expense; // сколько уходит на детей в месяц
var percent; // процент по кредиту
var credit; //размер ежемесячного платежа по кредиту
var month_expense = 20000; // Предположение банка: сколько клиент тратит каждый месяц
var salary; // требуемый размер зарплаты
Мы сразу указали уровень минимальных трат каждый месяц — 20 тысяч рублей. Вы можете подкорректировать сумму под свою ситуацию или сможете запросить эти данные у пользователя.
Собираем данные пользователя
Теперь нужно узнать как можно больше подробностей о клиенте банка. Используем для этого команду prompt()
— она покажет пользователю диалоговое окно с вопросом, в которое тот введёт ответ. За внешний вид диалогового окна отвечает браузер и JavaScript, нас оно не должно волновать.
Мы используем prompt()
в строго учебных целях, чтобы ускорить работу — обычно в вебе эта команда не используется. В реальном продукте мы бы нарисовали веб-страницу, в которой была бы форма, а пользователь вводил свои данные в неё. Но это тема для отдельной статьи.
Результат работы prompt()
— строка, даже если пользователь ввёл число. А нам нужно работать с числами. Поэтому принудительно переведём все введённые значения в числа, чтобы в программе не возникло случайных ошибок (о них мы писали в статье о типах данных). Используем для этого функцию Number()
, которая работает так: в скобках подаём строку, а возвращается число.
// запрашиваем размер кредита, срок и проценты
var money_text = prompt('Сколько вам нужно денег? Напишите число в рублях');
var month_text = prompt('На сколько месяцев вы хотите его взять?');
var percent_text = prompt('Под какой процент?');
//узнаём возраст и количество детей на содержании
var age_text = prompt('Сколько вам лет?');
var child_text = prompt('Сколько у вас несовершеннолетних детей?');
//переводим строки в числа
money = Number(money_text);
month = Number(month_text);
percent = Number(percent_text);
child = Number(child_text);
age = Number(age_text);
Логика калькулятора
Теперь мы знаем всё, что нужно. Начинаем вычислять.
Банки смотрят, сколько у вас несовершеннолетних детей. По закону их обязаны содержать родители, и банки на каждого ребёнка закладывают определённую сумму. Её вычитают из вашей зарплаты, чтобы оценить, хватит ли денег платить за кредит каждый месяц.
Изначально предполагаем, что у клиента нет детей и расходов на них нет. Если дальше выяснится, что дети всё-таки есть, то переменной child_expense присвоим новое значение.
child_expense = 0;
Теперь смотрим на возраст. Давайте предположим, что чем старше человек, тем сложнее ему будет выплатить кредит. Это необязательно так, но при решении будем исходить из этого — так интереснее.
Чтобы проверить возраст, будем использовать условный оператор if
. В общем виде он выглядит так:
if (условие) {
действие
};
По-русски это звучит так: если условие выполнилось, то выполняем какое-то действие. Иногда нужно дополнительно что-то сделать, если условие не выполняется. Для этого в конец условного оператора добавляют else {}
if (условие) {
//если условие выполняется, то делаем это
} else {
//если условие не выполняется, делаем это
};
Внутри одного условного оператора тоже можно использовать другие условные операторы, вкладывая их друг в друга. Они не перепутаются внутри, если внимательно следить за фигурными скобками: {}. Сколько у нас открывающих скобок {, столько же должно быть и закрывающих }, иначе программа не будет работать.
Вот как выглядит наша проверка возраста с вложенным условием. Если клиенту больше 55 лет, то делаем повышенный коэффициент риска. В противном случае (else)
мы смотрим, сколько у него детей. Если ребёнок один — делаем одни расходы, если два и больше — другие.
//если клиенту больше 55 лет, устанавливаем повышенный коэффициент риска
if (age > 55) { age_coeff = 3 }
else {
// если не больше, чем 55 — устанавливаем стандартный возрастной коэффициент
age_coeff = 2;
// если у клиента один ребёнок, предполагается, что на него уходит 10 тысяч в месяц
if (child == 1) { child_expense = 10000 }
// если два и больше — умножаем количество детей на фиксированную ставку
else { child_expense = child * 8000 }
};
Теперь рассчитываем ежемесячный размер платежа. Для этого складываем сумму кредита с размером процентов, которые набегут за время кредита, и делим всё на количество месяцев.
credit = (money + ( (money*percent/(12* 100)) * month ))
/ month;
Чтобы посчитать минимально необходимую зарплату, берём наш ежемесячный платёж, умножаем его на возрастной коэффициент, и добавляем расходы на себя и на ребёнка.
salary = (credit*age_coeff) + month_expense
+ child_expense;
Нам не нужна точность до копеек — округлим зарплату до целых рублей функцией toFixed(). В скобках указываем, сколько цифр после запятой нам нужно. Так как нам копейки не нужны — указываем ноль.
salary = salary.toFixed(0);
Когда всё посчитано, выводим результат на экран.
alert('В месяц вам нужно будет платить ' + credit.toFixed(0)
+ 'р. Чтобы повысить шансы на одобрение такого кредита,
ваша зарплата должна быть не ниже ' + salary + ' р.');
Итоговый код
var age_coeff; // возрастной коэффициент, который влияет на платёжеспособность
// возраст, размер кредита и количество месяцев
var age;
var money;
var month;
var child; // количество детей
var child_expense; // сколько уходит на детей в месяц
var percent; // процент по кредиту
var credit; //размер ежемесячного платежа по кредиту
var month_expense = 20000; // Предположение банка: сколько клиент тратит каждый месяц
var salary; // требуемый размер зарплаты
// запрашиваем размер кредита, срок и проценты
var money_text = prompt('Сколько вам нужно денег? Введите сумму в рублях');
var month_text = prompt('На сколько месяцев вы хотите его взять?');
var percent_text = prompt('Под какой процент?');
//узнаём возраст и количество детей на содержании
var age_text = prompt('Сколько вам лет?');
var child_text = prompt('Сколько у вас несовершеннолетних детей?');
//переводим строки в числа
money = Number(money_text);
month = Number(month_text);
percent = Number(percent_text);
child = Number(child_text);
age = Number(age_text);
// изначально предполагаем, что у клиента нет детей и нет поэтому расходов на них
child_expense = 0;
//если клиенту больше 55 лет, устанавливаем повышенный коэффициент риска
if (age > 55) { age_coeff = 3 }
else {
// если не больше, чем 55 — устанавливаем стандартный возрастной коэффициент
age_coeff = 2;
// если у клиента один ребёнок, предполагается, что на него уходит 10 тысяч в месяц
if (child == 1) { child_expense = 10000 }
// если два и больше — умножаем количество детей на фиксированную ставку
else { child_expense = child * 8000 }
};
//считаем ежемесячный размер платежа
credit = (money + ((money * percent / (12 * 100)) * month)) / month;
// считаем зарплату с учётом трат и коэффициентов
salary = (credit * age_coeff) + month_expense + child_expense;
//округляем зарплату до целых чисел, без копеек
salary = salary.toFixed(0);
//выводим результат на экран
alert('В месяц вам нужно будет платить ' + credit.toFixed(0) + 'р. Чтобы повысить шансы на одобрение такого кредита, ваша зарплата должна быть не ниже ' + salary + ' р.');
Этот алгоритм можно сделать более приближённым к жизни: проверить стаж работы, семейное положение, трудовой стаж и так далее. Попробуйте изменить код под свои нужды: поставьте мощь компьютерной логики на службу себе.