Advertisement
SashkoKlincharov

[Java][НП] - Евалуатор на кандидати

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