Пишем программу, которая одобрит вам кредит
vk f t

Пишем программу, которая одобрит вам кредит

Или не одоб­рит, хехех

В этом выпус­ке вы смо­же­те потре­ни­ро­вать про­грам­мист­скую кон­струк­цию «Если... то...» — один из глав­ных кир­пи­чи­ков любой про­грам­мы. Для инте­ре­са обер­нём её в понят­ную зада­чу.

Когда банк выда­ёт кре­дит, он про­ве­ря­ет чело­ве­ка по мно­гим пара­мет­рам. Один из них — пла­тё­же­спо­соб­ность. Это зна­чит, что банк берёт уро­вень дохо­дов, при­мер­но при­ки­ды­ва­ет ваши тра­ты и смот­рит, хва­тит ли вам денег рас­счи­тать­ся по кре­ди­ту.

Про­бле­ма в том, что кри­те­ри­ев пла­тё­же­спо­соб­но­сти и трат может быть очень мно­го и они могут вет­вить­ся: если у чело­ве­ка одна ситу­а­ция, счи­тать одно; если дру­гая — счи­тать дру­гое. Что­бы уско­рить про­вер­ку, бан­ки созда­ют авто­ма­ти­че­ские систе­мы оцен­ки — по-нашему, систе­мы ско­рин­га. Сей­час мы напи­шем похо­жую про­грам­му: она будет учи­ты­вать несколь­ко кри­те­ри­ев и выда­вать оцен­ку пла­тё­же­спо­соб­но­сти по нашей соб­ствен­ной мето­ди­ке.

Зачем вам такой каль­ку­ля­тор — решай­те сами: мож­но открыть соб­ствен­ный банк, мож­но оце­ни­вать бизнес-проекты, мож­но при­ки­ды­вать эко­но­ми­че­скую эффек­тив­ность поезд­ки на дачу.

Бан­ки исполь­зу­ют намно­го более слож­ный ана­лиз кли­ен­та, чем тот, кото­рый опи­шем в этой про­грам­ме мы. Резуль­та­ты, кото­рые вы полу­чи­те после выпол­не­ния про­грам­мы, — при­мер­ные, и не вли­я­ют на полу­че­ние реаль­но­го кре­ди­та.

Объявляем переменные

Смысл реше­ния в том, что­бы вна­ча­ле узнать у чело­ве­ка всё про кре­дит и про его семей­ное поло­же­ние, затем выяс­нить раз­мер еже­ме­сяч­но­го пла­те­жа и нако­нец рас­счи­тать нуж­ный уро­вень зар­пла­ты.

Для нача­ла объ­явим пере­мен­ные, кото­рые будем исполь­зо­вать в рас­чё­тах.

    
language: JavaScript
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(), кото­рая рабо­та­ет так: в скоб­ках пода­ём стро­ку, а воз­вра­ща­ет­ся чис­ло.

    
language: JavaScript
// запрашиваем размер кредита, срок и проценты
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. В общем виде он выгля­дит так:

    
language: JavaScript
if (условие) {

    действие

  };


Ско­пи­ро­вать код
Код ско­пи­ро­ван

По-русски это зву­чит так: если усло­вие выпол­ни­лось, то выпол­ня­ем какое-то дей­ствие. Ино­гда нуж­но допол­ни­тель­но что-то сде­лать, если усло­вие не выпол­ня­ет­ся. Для это­го в конец услов­но­го опе­ра­то­ра добав­ля­ют else {}

    
language: JavaScript
if (условие) {

    //если условие выполняется, то делаем это

  } else {

    //если условие не выполняется, делаем это

    };


Ско­пи­ро­вать код
Код ско­пи­ро­ван

Внут­ри одно­го услов­но­го опе­ра­то­ра тоже мож­но исполь­зо­вать дру­гие услов­ные опе­ра­то­ры, вкла­ды­вая их друг в дру­га. Они не пере­пу­та­ют­ся внут­ри, если вни­ма­тель­но сле­дить за фигур­ны­ми скоб­ка­ми: {}. Сколь­ко у нас откры­ва­ю­щих ско­бок {, столь­ко же долж­но быть и закры­ва­ю­щих }, ина­че про­грам­ма не будет рабо­тать.

Вот как выгля­дит наша про­вер­ка воз­рас­та с вло­жен­ным усло­ви­ем. Если кли­ен­ту боль­ше 55 лет, то дела­ем повы­шен­ный коэф­фи­ци­ент рис­ка. В про­тив­ном слу­чае (else) мы смот­рим, сколь­ко у него детей. Если ребё­нок один — дела­ем одни рас­хо­ды, если два и боль­ше — дру­гие.

    
language: JavaScript
//если клиенту больше 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 + ' р.');

Итоговый код

    
language: JavaScript
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 + ' р.');


Ско­пи­ро­вать код
Код ско­пи­ро­ван

Этот алго­ритм мож­но сде­лать более при­бли­жён­ным к жиз­ни: про­ве­рить стаж рабо­ты, семей­ное поло­же­ние, тру­до­вой стаж и так далее. Попро­буй­те изме­нить код под свои нуж­ды: поставь­те мощь ком­пью­тер­ной логи­ки на служ­бу себе.

Ещё по теме