Advertisement
dzocesrce

[NP] Advanced Programming Course

Apr 24th, 2025
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.16 KB | None | 0 0
  1. //package mk.ukim.finki.midterm;
  2.  
  3. import java.util.*;
  4. import java.util.stream.Collectors;
  5. import java.util.*;
  6. import java.util.stream.Collectors;
  7. import java.util.stream.IntStream;
  8. import java.util.Comparator;
  9.  
  10. class Student implements Comparable<Student>{
  11.     String index;
  12.     String name;
  13.     int midterm1;
  14.     int midterm2;
  15.     int labs;
  16.  
  17.     public Student(String index, String name) {
  18.         this.index = index;
  19.         this.name = name;
  20.         this.midterm1 = 0;
  21.         this.midterm2 = 0;
  22.         this.labs = 0;
  23.     }
  24.  
  25.     public String getIndex() {
  26.         return index;
  27.     }
  28.  
  29.     public void setIndex(String index) {
  30.         this.index = index;
  31.     }
  32.  
  33.     public String getName() {
  34.         return name;
  35.     }
  36.  
  37.     public void setName(String name) {
  38.         this.name = name;
  39.     }
  40.  
  41.     public int getMidterm1() {
  42.         return midterm1;
  43.     }
  44.  
  45.     public double getPoints(){
  46.         return 0.45*midterm1+0.45*midterm2+labs;
  47.     }
  48.  
  49.     public void setMidterm1(int midterm1) throws InvalidPointsException {
  50.         if(midterm1>100 || midterm1<0)
  51.             throw new InvalidPointsException();
  52.         this.midterm1 = midterm1;
  53.     }
  54.  
  55.     public int getMidterm2() {
  56.  
  57.         return midterm2;
  58.     }
  59.  
  60.     public void setMidterm2(int midterm2) throws InvalidPointsException {
  61.         if(midterm2>100 || midterm2<0)
  62.             throw new InvalidPointsException();
  63.         this.midterm2 = midterm2;
  64.     }
  65.  
  66.     public int getLabs() {
  67.         return labs;
  68.     }
  69.  
  70.     public void setLabs(int labs) throws InvalidPointsException {
  71.         if(labs>10 || labs<0)
  72.             throw new InvalidPointsException();
  73.         this.labs = labs;
  74.     }
  75.  
  76.     public int getGrade(){
  77.         if(getPoints()>=90)
  78.             return 10;
  79.         else if(getPoints()>=80)
  80.             return 9;
  81.         else if(getPoints()>=70)
  82.             return 8;
  83.         else if(getPoints()>=60)
  84.             return 7;
  85.         else if(getPoints()>=50)
  86.             return 6;
  87.         else
  88.             return 5;
  89.     }
  90.  
  91.     @Override
  92.     public String toString() {
  93.         return String.format("ID: %s Name: %s First midterm: %d Second midterm %d Labs: %d Summary points: %.2f Grade: %d",
  94.                 getIndex(),getName(),getMidterm1(),getMidterm2(),getLabs(),getPoints(),getGrade());
  95.     }
  96.     //ID: 151020 Name: Stefan First midterm: 78 Second midterm 80 Labs: 8 Summary points: 79.10 Grade: 8
  97.  
  98.     @Override
  99.     public int compareTo(Student o) {
  100.         return Comparator.comparing(Student::getPoints).reversed().compare(this,o);
  101.     }
  102. }
  103.  
  104. class InvalidPointsException extends Exception{
  105.     public InvalidPointsException() {
  106.     }
  107. }
  108. class AdvancedProgrammingCourse {
  109.  
  110.     Map<String,Student> students;
  111.  
  112.     public AdvancedProgrammingCourse() {
  113.         this.students= new HashMap<>();
  114.     }
  115.  
  116.     public void addStudent(Student student) {
  117.         students.putIfAbsent(student.getIndex(),student);
  118.  
  119.     }
  120.  
  121.     public void updateStudent(String idNumber, String activity, int points) {
  122.         if(activity.equalsIgnoreCase("midterm1")){
  123.             students.computeIfPresent(idNumber,
  124.                     (k,v)-> {
  125.                         try {
  126.                             v.setMidterm1(v.getMidterm1()+points);
  127.                         } catch (InvalidPointsException e) {
  128.                             return v;
  129.                         }
  130.                         return v;
  131.             });
  132.         }
  133.         else if(activity.equalsIgnoreCase("midterm2")){
  134.             students.computeIfPresent(idNumber,
  135.                     (k,v)-> {
  136.                         try {
  137.                             v.setMidterm2(v.getMidterm2()+points);
  138.                         } catch (InvalidPointsException e) {
  139.                             return v;
  140.                         }
  141.                         return v;
  142.                     });
  143.         }
  144.         else{
  145.             students.computeIfPresent(idNumber,
  146.                     (k,v)-> {
  147.                         try {
  148.                             v.setLabs(v.getLabs()+points);
  149.                         } catch (InvalidPointsException e) {
  150.                             return v;
  151.                         }
  152.                         return v;
  153.                     });
  154.         }
  155.     }
  156.  
  157.     public List<Student> getFirstNStudents(int n) {
  158.         return students.values().stream().sorted().limit(n).collect(Collectors.toList());
  159.     }
  160.  
  161.     public Map<Integer, Long> getGradeDistribution() {
  162.         Map<Integer,Long> studentsByGrade = students.values().stream().collect(Collectors.groupingBy(
  163.                 Student::getGrade,
  164.                 Collectors.counting()
  165.         ));
  166.  
  167.         return IntStream.range(5, 11)
  168.                 .boxed()
  169.                 .collect(Collectors.toMap(
  170.                         grade -> grade,
  171.                         grade -> studentsByGrade.getOrDefault(grade, 0L),
  172.                         (a, b) -> a,
  173.                         TreeMap::new
  174.                 ));
  175.     }
  176.  
  177.     public void printStatistics() {
  178.         DoubleSummaryStatistics doubleSummaryStatistics= students.values().stream().filter(i->i.getGrade()>5).mapToDouble(i->i.getPoints()).summaryStatistics();
  179.         System.out.println(String.format("Count: %d Min: %.2f Average: %.2f Max: %.2f",doubleSummaryStatistics.getCount(),
  180.                                                                         doubleSummaryStatistics.getMin(),
  181.                                                                         doubleSummaryStatistics.getAverage(),
  182.                                                                         doubleSummaryStatistics.getMax()));
  183.     }
  184. }
  185.  
  186. public class CourseTest {
  187.  
  188.     public static void printStudents(List<Student> students) {
  189.         students.forEach(System.out::println);
  190.     }
  191.  
  192.     public static void printMap(Map<Integer, Long> map) {
  193.         map.forEach((k, v) -> System.out.printf("%d -> %d%n", k, v));
  194.     }
  195.  
  196.     public static void main(String[] args) {
  197.         AdvancedProgrammingCourse advancedProgrammingCourse = new AdvancedProgrammingCourse();
  198.  
  199.         Scanner sc = new Scanner(System.in);
  200.  
  201.         while (sc.hasNextLine()) {
  202.             String line = sc.nextLine();
  203.             String[] parts = line.split("\\s+");
  204.  
  205.             String command = parts[0];
  206.  
  207.             if (command.equals("addStudent")) {
  208.                 String id = parts[1];
  209.                 String name = parts[2];
  210.                 advancedProgrammingCourse.addStudent(new Student(id, name));
  211.             } else if (command.equals("updateStudent")) {
  212.                 String idNumber = parts[1];
  213.                 String activity = parts[2];
  214.                 int points = Integer.parseInt(parts[3]);
  215.                 advancedProgrammingCourse.updateStudent(idNumber, activity, points);
  216.             } else if (command.equals("getFirstNStudents")) {
  217.                 int n = Integer.parseInt(parts[1]);
  218.                 printStudents(advancedProgrammingCourse.getFirstNStudents(n));
  219.             } else if (command.equals("getGradeDistribution")) {
  220.                 printMap(advancedProgrammingCourse.getGradeDistribution());
  221.             } else {
  222.                 advancedProgrammingCourse.printStatistics();
  223.             }
  224.         }
  225.     }
  226. }
  227.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement