|
|
- package main
-
- import (
- "errors"
- "fmt"
- )
-
- const (
- goodScore = 450
- lowScoreRation = 10
- goodScoreRatio = 20
- )
-
- var (
- ErrCreditScore = errors.New("invalid credit score")
- ErrIncome = errors.New("income invalid")
- ErrLoanAmount = errors.New("loan amount invalid")
- ErrLoanTerm = errors.New("loan term not a multiple of 12")
- )
-
- func checkLoan(creditScore int, income float64,
- loanAmount float64, loanTerm float64) error {
-
- interest := 20.0
-
- if creditScore >= goodScore {
- interest = 15
- }
-
- if creditScore < 1 {
- return ErrCreditScore
- }
-
- if income < 1 {
- return ErrIncome
- }
-
- if loanAmount < 1 {
- return ErrLoanAmount
- }
-
- if loanTerm < 1 || int(loanTerm)%12 != 0 {
- return ErrLoanTerm
- }
-
- rate := interest / 100
-
- payment := ((loanAmount * rate) / loanTerm) + (loanAmount / loanTerm)
- totalInterest := (payment * loanTerm) - loanAmount
-
- approved := false
-
- if income > payment {
- ratio := (payment / income) * 100
- if creditScore >= goodScore && ratio < goodScoreRatio {
- approved = true
- } else if ratio < lowScoreRation {
- approved = true
- }
- }
-
- fmt.Println("Credit Score :", creditScore)
- fmt.Println("Income :", income)
- fmt.Println("Loan Amount :", loanAmount)
- fmt.Println("Loan Term :", loanTerm)
- fmt.Println("Monthly Payment :", payment)
- fmt.Println("Rate :", interest)
- fmt.Println("Total Cost :", totalInterest)
- fmt.Println("Approved :", approved)
- fmt.Println("")
-
- return nil
-
- }
-
- func main() {
-
- // Approved
- fmt.Println("Applicant 1")
- fmt.Println("-----------")
- err := checkLoan(500, 1000, 1000, 24)
- if err != nil {
- fmt.Println("Error:", err)
- }
-
- // Denied
- fmt.Println("Applicant 2")
- fmt.Println("-----------")
- err = checkLoan(350, 1000, 10000, 12)
- if err != nil {
- fmt.Println("Error:", err)
- }
-
- }
|