Filip_Markoski

[NP] Евалуатор на кандидати

Nov 14th, 2017
707
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.02 KB | None | 0 0
  1. import java.lang.reflect.Array;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import java.util.Scanner;
  6.  
  7. /**
  8.  * I partial exam 2016
  9.  */
  10. public class ApplicantEvaluationTest {
  11.     public static void main(String[] args) {
  12.         Scanner scanner = new Scanner(System.in);
  13.         String name = scanner.nextLine();
  14.         int creditScore = scanner.nextInt();
  15.         int employmentYears = scanner.nextInt();
  16.         boolean hasCriminalRecord = scanner.nextBoolean();
  17.         int choice = scanner.nextInt();
  18.         Applicant applicant = new Applicant(name, creditScore, employmentYears, hasCriminalRecord);
  19.         Evaluator.TYPE type = Evaluator.TYPE.values()[choice];
  20.         Evaluator evaluator = null;
  21.         try {
  22.             evaluator = EvaluatorBuilder.build(type);
  23.             System.out.println("Applicant");
  24.             System.out.println(applicant);
  25.             System.out.println("Evaluation type: " + type.name());
  26.             if (evaluator.evaluate(applicant)) {
  27.                 System.out.println("Applicant is ACCEPTED");
  28.             } else {
  29.                 System.out.println("Applicant is REJECTED");
  30.             }
  31.         } catch (InvalidEvaluation invalidEvaluation) {
  32.             System.out.println("Invalid evaluation");
  33.         }
  34.     }
  35. }
  36.  
  37. class Applicant {
  38.     private String name;
  39.  
  40.     private int creditScore;
  41.     private int employmentYears;
  42.     private boolean hasCriminalRecord;
  43.  
  44.     public Applicant(String name, int creditScore, int employmentYears, boolean hasCriminalRecord) {
  45.         this.name = name;
  46.         this.creditScore = creditScore;
  47.         this.employmentYears = employmentYears;
  48.         this.hasCriminalRecord = hasCriminalRecord;
  49.     }
  50.  
  51.     public String getName() {
  52.         return name;
  53.     }
  54.  
  55.     public int getCreditScore() {
  56.         return creditScore;
  57.     }
  58.  
  59.     public int getEmploymentYears() {
  60.         return employmentYears;
  61.     }
  62.  
  63.     public boolean hasCriminalRecord() {
  64.         return hasCriminalRecord;
  65.     }
  66.  
  67.     @Override
  68.     public String toString() {
  69.         return String.format("Name: %s\nCredit score: %d\nExperience: %d\nCriminal record: %s\n",
  70.                 name, creditScore, employmentYears, hasCriminalRecord ? "Yes" : "No");
  71.     }
  72. }
  73.  
  74. interface Evaluator {
  75.     enum TYPE {
  76.         NO_CRIMINAL_RECORD,
  77.         MORE_EXPERIENCE,
  78.         MORE_CREDIT_SCORE,
  79.         NO_CRIMINAL_RECORD_AND_MORE_EXPERIENCE,
  80.         MORE_EXPERIENCE_AND_MORE_CREDIT_SCORE,
  81.         NO_CRIMINAL_RECORD_AND_MORE_CREDIT_SCORE,
  82.         INVALID // should throw exception
  83.     }
  84.  
  85.     boolean evaluate(Applicant applicant);
  86. }
  87.  
  88. class InvalidEvaluation extends Exception {
  89.  
  90. }
  91.  
  92. class EvaluatorBuilder {
  93.     public static Evaluator build(Evaluator.TYPE type) throws InvalidEvaluation {
  94.         switch (type) {
  95.             case INVALID:
  96.                 throw new InvalidEvaluation();
  97.             case MORE_EXPERIENCE:
  98.                 return new EvaluatorDecorator(new EvaluatorExperience());
  99.             case MORE_CREDIT_SCORE:
  100.                 return new EvaluatorDecorator(new EvaluatorCredit());
  101.             case NO_CRIMINAL_RECORD:
  102.                 return new EvaluatorDecorator(new EvaluatorCriminal());
  103.             case MORE_EXPERIENCE_AND_MORE_CREDIT_SCORE:
  104.                 return new EvaluatorDecorator(new EvaluatorExperience(), new EvaluatorCredit());
  105.             case NO_CRIMINAL_RECORD_AND_MORE_EXPERIENCE:
  106.                 return new EvaluatorDecorator(new EvaluatorCriminal(), new EvaluatorExperience());
  107.             case NO_CRIMINAL_RECORD_AND_MORE_CREDIT_SCORE:
  108.                 return new EvaluatorDecorator(new EvaluatorCriminal(), new EvaluatorCredit());
  109.             default:
  110.                 throw new InvalidEvaluation();
  111.         }
  112.     }
  113. }
  114.  
  115. class EvaluatorExperience implements Evaluator {
  116.  
  117.     @Override
  118.     public boolean evaluate(Applicant applicant) {
  119.         if (applicant.getEmploymentYears() < 10) {
  120.             return false;
  121.         }
  122.         return true;
  123.     }
  124. }
  125.  
  126. class EvaluatorCredit implements Evaluator {
  127.  
  128.     @Override
  129.     public boolean evaluate(Applicant applicant) {
  130.         if (applicant.getCreditScore() < 500) {
  131.             return false;
  132.         }
  133.         return true;
  134.     }
  135. }
  136.  
  137. class EvaluatorCriminal implements Evaluator {
  138.  
  139.     @Override
  140.     public boolean evaluate(Applicant applicant) {
  141.         if (applicant.hasCriminalRecord()) {
  142.             return false;
  143.         }
  144.         return true;
  145.     }
  146. }
  147.  
  148. class EvaluatorDecorator implements Evaluator {
  149.     List<Evaluator> evaluators;
  150.  
  151.     public EvaluatorDecorator(Evaluator... evaluators) {
  152.         this.evaluators = new ArrayList<>(Arrays.asList(evaluators));
  153.  
  154.         /* if Experience and Criminal are sent */
  155.  
  156.  
  157.     }
  158.  
  159.     @Override
  160.     public boolean evaluate(Applicant applicant) {
  161.         for (Evaluator e : evaluators) {
  162.             if (e.evaluate(applicant) == false)
  163.                 return false;
  164.         }
  165.         return true;
  166.     }
  167. }
  168. /*
  169.  
  170. class EvaluatorExperienceCredit implements EvaluatorExperience, EvaluatorCredit {
  171.  
  172.     @Override
  173.     public boolean evaluate(Applicant applicant) {
  174.         if (EvaluatorExperience.super.evaluate(applicant) == false ||
  175.                 EvaluatorCredit.super.evaluate(applicant) == false) {
  176.             return false;
  177.         }
  178.         return true;
  179.     }
  180. }
  181.  
  182. class EvaluatorCriminalExperience implements EvaluatorCriminal, EvaluatorExperience {
  183.  
  184.     @Override
  185.     public boolean evaluate(Applicant applicant) {
  186.         if (EvaluatorCriminal.super.evaluate(applicant) == false ||
  187.                 EvaluatorExperience.super.evaluate(applicant) == false) {
  188.             return false;
  189.         }
  190.         return true;
  191.     }
  192. }
  193.  
  194. class EvaluatorCriminalCredit implements EvaluatorCriminal, EvaluatorCredit {
  195.  
  196.     @Override
  197.     public boolean evaluate(Applicant applicant) {
  198.         if (EvaluatorCriminal.super.evaluate(applicant) == false ||
  199.                 EvaluatorCredit.super.evaluate(applicant) == false) {
  200.             return false;
  201.         }
  202.         return true;
  203.     }
  204. }
  205.  
  206. */
Advertisement
Add Comment
Please, Sign In to add comment