Advertisement
fensa08

npse

Aug 31st, 2021
1,310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.29 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4.  
  5. public class EnrollmentSystemTest {
  6.  
  7.     public static void main(String[] args) {
  8.         EnrollmentSystem enrollmentApplication = new EnrollmentSystem();
  9.  
  10.         System.out.println("--- READING FROM INPUT STREAM ---");
  11.         enrollmentApplication.readData(System.in);
  12.  
  13.         System.out.println();
  14.         System.out.println("--- PRINTING TO OUTPUT STREAM (ASCENDING) ---");
  15.         enrollmentApplication.printData(System.out, true);
  16.  
  17.         System.out.println();
  18.         System.out.println("--- PRINTING TO OUTPUT STREAM (DESCENDING) ---");
  19.         enrollmentApplication.printData(System.out, false);
  20.  
  21.         System.out.println();
  22.         System.out.println("--- PRINTING BY CITY ---");
  23.         enrollmentApplication.printByCity(System.out);
  24.  
  25.         System.out.println();
  26.         System.out.println("--- PRINTING ENROLLED STUDENTS ---");
  27.         enrollmentApplication.enrolledStudents(System.out);
  28.     }
  29. }
  30.  
  31. class InvalidProgramException extends Exception {
  32.  
  33.     @Override
  34.     public String getMessage() {
  35.         return super.getMessage();
  36.     }
  37.  
  38.     @Override
  39.     public String getLocalizedMessage() {
  40.         return super.getLocalizedMessage();
  41.     }
  42.  
  43.     @Override
  44.     public synchronized Throwable getCause() {
  45.         return super.getCause();
  46.     }
  47.  
  48.     @Override
  49.     public synchronized Throwable initCause(Throwable cause) {
  50.         return super.initCause(cause);
  51.     }
  52.  
  53.     @Override
  54.     public String toString() {
  55.         return super.toString();
  56.     }
  57.  
  58.     public InvalidProgramException() {
  59.     }
  60.  
  61.     public InvalidProgramException(String message) {
  62.         super("INVALID PROGRAM EXCEPTION");
  63.     }
  64.  
  65.     public InvalidProgramException(String message, Throwable cause) {
  66.         super(message, cause);
  67.     }
  68. }
  69.  
  70. enum Program {
  71.  
  72.     A,
  73.     B,
  74.     C
  75. }
  76.  
  77. class Student implements Comparable<Student> {
  78.  
  79.     // id name surname g1 g2 g3 g4 m1 m2 m3 city program
  80.     private Long id;
  81.     private String name;
  82.     private String surname;
  83.     private List<Float> gradesHS;
  84.     private List<Integer> gradesM;
  85.     private String city;
  86.     private Program program;
  87.     private double points;
  88.  
  89.     public Long getIdLong(){
  90.         return id;
  91.     }
  92.  
  93.     public Student() {
  94.         this.gradesHS = new ArrayList<>();
  95.         this.gradesM = new ArrayList<>();
  96.     }
  97.  
  98.     public Student(long id, String name, String surname, List<Float> gradesHS, List<Integer> gradesM, String city, Program program) {
  99.         this.id = id;
  100.         this.name = name;
  101.         this.surname = surname;
  102.         this.gradesHS = gradesHS;
  103.         this.gradesM = gradesM;
  104.         this.city = city;
  105.         this.program = program;
  106.         this.points = calculatePoints(gradesHS, gradesM, program);
  107.     }
  108.  
  109.     public double getPoints() {
  110.         return points;
  111.     }
  112.  
  113.     private double calculatePoints(List<Float> gradesHS, List<Integer> gradesM, Program program) {
  114.         double points = 0;
  115.         if (program.toString().equals("A")) {
  116.             points = (gradesHS.stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.4
  117.                     + (gradesHS.stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.6;   // todo check this
  118.         } else if (program.toString().equals("B")) {
  119.             points = (gradesHS.stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.6
  120.                     + (gradesHS.stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.4;   // todo check this
  121.         } else if (program.toString().equals("C")) {
  122.             points = (gradesHS.stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.5
  123.                     + (gradesHS.stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.5;   // todo check this
  124.         }
  125.         return points;
  126.     }
  127.  
  128.  
  129.   /*  public String printStudent() {
  130.         return String.format("%d %s %s %s %s %f", id, name, surname, city,
  131.                 program, points);
  132.     }*/
  133.  
  134.     @Override
  135.     public String toString() {
  136.         return String.format("%d %s %s %s %s %.2f", id, name, surname, city,
  137.                 program, points);
  138.     }
  139.  
  140.  
  141.     public int compareTo(Student s) {
  142.         if (points == s.getPoints())
  143.             return id.compareTo(s.getId());
  144.         if (points > s.getPoints())
  145.             return 1;
  146.         return -1;
  147.     }
  148.  
  149.  
  150.     public long getId() {
  151.         return id;
  152.     }
  153.  
  154.     public void setId(long id) {
  155.         this.id = id;
  156.     }
  157.  
  158.     public String getName() {
  159.         return name;
  160.     }
  161.  
  162.     public void setName(String name) {
  163.         this.name = name;
  164.     }
  165.  
  166.     public String getSurname() {
  167.         return surname;
  168.     }
  169.  
  170.     public void setSurname(String surname) {
  171.         this.surname = surname;
  172.     }
  173.  
  174.     public List<Float> getGradesHS() {
  175.         return gradesHS;
  176.     }
  177.  
  178.     public void setGradesHS(List<Float> gradesHS) {
  179.         this.gradesHS = gradesHS;
  180.     }
  181.  
  182.  
  183.     public List<Integer> getGradesM() {
  184.         return gradesM;
  185.     }
  186.  
  187.     public void setGradesM(List<Integer> gradesM) {
  188.         this.gradesM = gradesM;
  189.     }
  190.  
  191.     public String getCity() {
  192.         return city;
  193.     }
  194.  
  195.     public void setCity(String city) {
  196.         this.city = city;
  197.     }
  198.  
  199.     public Program getProgram() {
  200.         return program;
  201.     }
  202.  
  203.     public void setProgram(Program program) {
  204.         this.program = program;
  205.     }
  206. }
  207.  
  208. class Points {
  209.  
  210.     private double points;
  211.     private Student student;
  212.  
  213.     public double getPoints() {
  214.         return points;
  215.     }
  216.  
  217.  
  218.     @Override
  219.     public String toString() {
  220.         return String.format("%d %s %s %s %s %f", student.getId(), student.getName(), student.getSurname(), student.getCity(),
  221.                 student.getProgram(), points);
  222.  
  223.     }
  224.  
  225.     public void setPoints(float points) {
  226.         this.points = points;
  227.     }
  228.  
  229.     public Student getStudent() {
  230.         return student;
  231.     }
  232.  
  233.     public Points(double points, Student student) {
  234.         this.points = points;
  235.         this.student = student;
  236.     }
  237.  
  238.  
  239.     public void setStudent(Student student) {
  240.         this.student = student;
  241.     }
  242.  
  243. }
  244.  
  245. class EnrollmentSystem {
  246.  
  247.     // kolekcija na prijaviOdStudenti
  248.     // HashMap<Program, List<Student>> prijavi;
  249.     List<Student> prijavi;
  250.  
  251.     public EnrollmentSystem() {
  252.         this.prijavi = new ArrayList<>();
  253.  
  254.     }
  255.  
  256.     public void readData(InputStream is) {
  257.  
  258.         BufferedReader reader;
  259.         try {
  260.             reader = new BufferedReader(new InputStreamReader(is));
  261.  
  262.  
  263.             reader.lines()
  264.                     .forEach(line -> {
  265.                         String pom[] = line.split(" ");
  266.                         try {
  267.                             if (!(pom[11].equals("A") || pom[11].equals("C") || pom[11].equals("B")))
  268.                                 throw new InvalidProgramException();
  269.  
  270.                             Long id = Long.parseLong(pom[0]);
  271.                             String name = pom[1];
  272.                             String surname = pom[2];
  273.                             float g1 = Float.parseFloat(pom[3]);
  274.                             float g2 = Float.parseFloat(pom[4]);
  275.                             float g3 = Float.parseFloat(pom[5]);
  276.                             float g4 = Float.parseFloat(pom[6]);
  277.                             List<Float> gradesH = new ArrayList<>();
  278.                             gradesH.add(g1);
  279.                             gradesH.add(g2);
  280.                             gradesH.add(g3);
  281.                             gradesH.add(g4);
  282.  
  283.                             int m1 = Integer.parseInt(pom[7]);
  284.                             int m2 = Integer.parseInt(pom[8]);
  285.                             int m3 = Integer.parseInt(pom[9]);
  286.  
  287.                             String city = pom[10];
  288.  
  289.                             List<Integer> gradesM = new ArrayList<>();
  290.                             gradesM.add(m1);
  291.                             gradesM.add(m2);
  292.                             gradesM.add(m3);
  293.  
  294.                             Program program = Program.valueOf(pom[11]);
  295.                             // public Student(long id, String name, String surname, List<Float> gradesHS, List<Integer> gradesM, String city, Program program) {
  296.  
  297.                             Student student = new Student(id, name, surname, gradesH, gradesM, city, program);
  298.  
  299.                             prijavi.add(student);
  300.  
  301.  
  302.                         } catch (InvalidProgramException e) {
  303.                             System.out.println(e.getMessage());
  304.                         }
  305.  
  306.  
  307.                     });
  308.         } catch (Exception e) {
  309.             System.out.println(e.getMessage());
  310.         }
  311.  
  312.  
  313.     }
  314.  
  315.     private double calculatePoints(Student s) {
  316.         double points = 0;
  317.         if (s.getProgram().toString().equals("A")) {
  318.             points = (s.getGradesHS().stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.4
  319.                     + (s.getGradesM().stream().reduce(0, (prev, curr) -> prev += curr)) * 0.6;   // todo check this
  320.         } else if (s.getProgram().toString().equals("B")) {
  321.             points = (s.getGradesHS().stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.6
  322.                     + (s.getGradesM().stream().reduce(0, (prev, curr) -> prev += curr)) * 0.4;   // todo check this
  323.         } else if (s.getProgram().toString().equals("C")) {
  324.             points = (s.getGradesHS().stream().reduce((float) 0, (prev, curr) -> prev += curr)) * 0.5
  325.                     + (s.getGradesM().stream().reduce(0, (prev, curr) -> prev += curr)) * 0.5;   // todo check this
  326.         }
  327.         return points;
  328.     }
  329.  
  330.  
  331.     // not done
  332.     public void printData(OutputStream os, boolean ascending) {
  333.  
  334.         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
  335.  
  336.         List<Student> lista =
  337.                 prijavi.stream()
  338.                         .sorted(Student::compareTo)
  339.                         .collect(Collectors.toList());
  340.  
  341.  
  342.         if (ascending) {
  343.             lista.stream()
  344.                     .sorted(Comparator.reverseOrder())
  345.                     .forEach(student -> {
  346.                         try {
  347.                             writer.write(student.toString());
  348.                             writer.flush();
  349.                         } catch (IOException e) {
  350.                             e.printStackTrace();
  351.                         }
  352.  
  353.                     });
  354.         } else {
  355.             lista.stream()
  356.                     .forEach(student -> {
  357.                         try {
  358.                             writer.write(student.toString());
  359.                             writer.flush();
  360.                         } catch (IOException e) {
  361.                             e.printStackTrace();
  362.                         }
  363.                         });
  364.         }
  365.     }
  366.  
  367.  
  368.  
  369.  
  370.  
  371.     public void printByCity(OutputStream os) {
  372.  
  373.         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
  374.  
  375.  
  376.         prijavi
  377.                 .stream()
  378.                 .sorted((s1,s2) -> {
  379.                     if(s1.getCity().equals(s2.getCity()))
  380.                         return s1.compareTo(s2);
  381.                     return s1.getCity().compareTo(s2.getCity());
  382.                 })
  383.                 .forEach( student -> {
  384.  
  385.                     try {
  386.                         writer.write(student.toString());
  387.                         writer.flush();
  388.                     } catch (IOException e) {
  389.                         e.printStackTrace();
  390.                     }
  391.                 });
  392.  
  393.     }
  394.  
  395.     public void enrolledStudents(OutputStream os){
  396.  
  397.         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
  398.  
  399.         prijavi
  400.                 .stream()
  401.                 .filter(s -> s.getPoints() > 12)
  402.                 .sorted((s1,s2)->{
  403.                     if(s1.getPoints()==s2.getPoints())
  404.                         return s1.getIdLong().compareTo(s2.getIdLong());
  405.                     if(s1.getPoints() > s2.getPoints())
  406.                         return 1;
  407.                     return -1;
  408.  
  409.                 })
  410.                 .forEach( s -> {
  411.                     try {
  412.                         writer.write(s.toString());
  413.                         writer.flush();
  414.                     } catch (IOException e) {
  415.                         e.printStackTrace();
  416.                     }
  417.  
  418.                 });
  419.     }
  420.  
  421.  
  422. }
  423.  
  424.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement