Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //package mk.ukim.finki.midterm;
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- import java.util.Comparator;
- class Student implements Comparable<Student>{
- String index;
- String name;
- int midterm1;
- int midterm2;
- int labs;
- public Student(String index, String name) {
- this.index = index;
- this.name = name;
- this.midterm1 = 0;
- this.midterm2 = 0;
- this.labs = 0;
- }
- public String getIndex() {
- return index;
- }
- public void setIndex(String index) {
- this.index = index;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getMidterm1() {
- return midterm1;
- }
- public double getPoints(){
- return 0.45*midterm1+0.45*midterm2+labs;
- }
- public void setMidterm1(int midterm1) throws InvalidPointsException {
- if(midterm1>100 || midterm1<0)
- throw new InvalidPointsException();
- this.midterm1 = midterm1;
- }
- public int getMidterm2() {
- return midterm2;
- }
- public void setMidterm2(int midterm2) throws InvalidPointsException {
- if(midterm2>100 || midterm2<0)
- throw new InvalidPointsException();
- this.midterm2 = midterm2;
- }
- public int getLabs() {
- return labs;
- }
- public void setLabs(int labs) throws InvalidPointsException {
- if(labs>10 || labs<0)
- throw new InvalidPointsException();
- this.labs = labs;
- }
- public int getGrade(){
- if(getPoints()>=90)
- return 10;
- else if(getPoints()>=80)
- return 9;
- else if(getPoints()>=70)
- return 8;
- else if(getPoints()>=60)
- return 7;
- else if(getPoints()>=50)
- return 6;
- else
- return 5;
- }
- @Override
- public String toString() {
- return String.format("ID: %s Name: %s First midterm: %d Second midterm %d Labs: %d Summary points: %.2f Grade: %d",
- getIndex(),getName(),getMidterm1(),getMidterm2(),getLabs(),getPoints(),getGrade());
- }
- //ID: 151020 Name: Stefan First midterm: 78 Second midterm 80 Labs: 8 Summary points: 79.10 Grade: 8
- @Override
- public int compareTo(Student o) {
- return Comparator.comparing(Student::getPoints).reversed().compare(this,o);
- }
- }
- class InvalidPointsException extends Exception{
- public InvalidPointsException() {
- }
- }
- class AdvancedProgrammingCourse {
- Map<String,Student> students;
- public AdvancedProgrammingCourse() {
- this.students= new HashMap<>();
- }
- public void addStudent(Student student) {
- students.putIfAbsent(student.getIndex(),student);
- }
- public void updateStudent(String idNumber, String activity, int points) {
- if(activity.equalsIgnoreCase("midterm1")){
- students.computeIfPresent(idNumber,
- (k,v)-> {
- try {
- v.setMidterm1(v.getMidterm1()+points);
- } catch (InvalidPointsException e) {
- return v;
- }
- return v;
- });
- }
- else if(activity.equalsIgnoreCase("midterm2")){
- students.computeIfPresent(idNumber,
- (k,v)-> {
- try {
- v.setMidterm2(v.getMidterm2()+points);
- } catch (InvalidPointsException e) {
- return v;
- }
- return v;
- });
- }
- else{
- students.computeIfPresent(idNumber,
- (k,v)-> {
- try {
- v.setLabs(v.getLabs()+points);
- } catch (InvalidPointsException e) {
- return v;
- }
- return v;
- });
- }
- }
- public List<Student> getFirstNStudents(int n) {
- return students.values().stream().sorted().limit(n).collect(Collectors.toList());
- }
- public Map<Integer, Long> getGradeDistribution() {
- Map<Integer,Long> studentsByGrade = students.values().stream().collect(Collectors.groupingBy(
- Student::getGrade,
- Collectors.counting()
- ));
- return IntStream.range(5, 11)
- .boxed()
- .collect(Collectors.toMap(
- grade -> grade,
- grade -> studentsByGrade.getOrDefault(grade, 0L),
- (a, b) -> a,
- TreeMap::new
- ));
- }
- public void printStatistics() {
- DoubleSummaryStatistics doubleSummaryStatistics= students.values().stream().filter(i->i.getGrade()>5).mapToDouble(i->i.getPoints()).summaryStatistics();
- System.out.println(String.format("Count: %d Min: %.2f Average: %.2f Max: %.2f",doubleSummaryStatistics.getCount(),
- doubleSummaryStatistics.getMin(),
- doubleSummaryStatistics.getAverage(),
- doubleSummaryStatistics.getMax()));
- }
- }
- public class CourseTest {
- public static void printStudents(List<Student> students) {
- students.forEach(System.out::println);
- }
- public static void printMap(Map<Integer, Long> map) {
- map.forEach((k, v) -> System.out.printf("%d -> %d%n", k, v));
- }
- public static void main(String[] args) {
- AdvancedProgrammingCourse advancedProgrammingCourse = new AdvancedProgrammingCourse();
- Scanner sc = new Scanner(System.in);
- while (sc.hasNextLine()) {
- String line = sc.nextLine();
- String[] parts = line.split("\\s+");
- String command = parts[0];
- if (command.equals("addStudent")) {
- String id = parts[1];
- String name = parts[2];
- advancedProgrammingCourse.addStudent(new Student(id, name));
- } else if (command.equals("updateStudent")) {
- String idNumber = parts[1];
- String activity = parts[2];
- int points = Integer.parseInt(parts[3]);
- advancedProgrammingCourse.updateStudent(idNumber, activity, points);
- } else if (command.equals("getFirstNStudents")) {
- int n = Integer.parseInt(parts[1]);
- printStudents(advancedProgrammingCourse.getFirstNStudents(n));
- } else if (command.equals("getGradeDistribution")) {
- printMap(advancedProgrammingCourse.getGradeDistribution());
- } else {
- advancedProgrammingCourse.printStatistics();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement