Advertisement
ppupil2

Manager

Nov 17th, 2020
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.29 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6.  
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.TreeSet;
  13. import model.Report;
  14. import model.Student;
  15.  
  16. /**
  17.  *
  18.  * @author phuon
  19.  */
  20. public class Manager {
  21.  
  22.     public void displayMenu() {
  23.         System.out.println("WELCOME TO STUDENT MANAGEMENT");
  24.         System.out.println("    1. Create");
  25.         System.out.println("    2. Find and Sort");
  26.         System.out.println("    3. Update/Delete");
  27.         System.out.println("    4. Report");
  28.         System.out.println("    5. Exit");
  29.         System.out.print("    Your choice [1-5]: ");
  30.     }
  31.  
  32.     public void createStudent(HashMap<String, TreeSet<Student>> records) {
  33.         DataInput in = new DataInput();
  34.  
  35.         System.out.println();
  36.         System.out.println("--------Create Student--------");
  37.         int size = getNumberOfRecords(records);
  38.         while (true) {
  39.             if (size > 10) {
  40.                 System.out.print("Do you want to continue (Y/N): ");
  41.                 boolean isYes = in.isAOrB("Y", "N");
  42.                 if (!isYes) {
  43.                     break;
  44.                 }
  45.             }
  46.             String id = in.inputID();
  47.             TreeSet<Student> students = records.get(id);
  48.             String name;
  49.             if (students != null) {
  50.                 Student firstRecord = students.first();
  51.                 name = firstRecord.getName();
  52.                 System.out.println("Name: " + name);
  53.             } else {
  54.                 name = in.inputName();
  55.             }
  56.             System.out.print("Semester: ");
  57.             int semester = in.inputInt("Semester", 1, 9);
  58.             String courseName = in.inputCourseName();
  59.             Student student = new Student(id, name, semester, courseName);
  60.             if (students == null) {
  61.                 students = new TreeSet<>();
  62.                 students.add(student);
  63.                 records.put(id, students);
  64.             } else {
  65.                 boolean isSuccess = students.add(student);
  66.                 if (!isSuccess) {
  67.                     System.out.println("Student records is already exists, enter again.");
  68.                 }
  69.             }
  70.             System.out.println();
  71.         }
  72.     }
  73.  
  74.     public void findAndSort(HashMap<String, TreeSet<Student>> records) {
  75.         DataInput in = new DataInput();
  76.  
  77.         System.out.println();
  78.         System.out.println("--------Find Student--------");
  79.         String name = in.inputName();
  80.         TreeSet<Student> students = getRecordByName(records, name);
  81.         if (students.isEmpty()) {
  82.             System.out.println("Can not find student with name contains \"" + name + "\"");
  83.         } else {
  84.             String lineFormat = "%-21s%10s%13s\n";
  85.             System.out.format(lineFormat, "Student name", "Semester", "Course name");
  86.             for (Student stu : students) {
  87.                 System.out.println(stu.getSearchResult());
  88.             }
  89.         }
  90.         System.out.println();
  91.     }
  92.  
  93.     public void updateOrDelete(HashMap<String, TreeSet<Student>> records) {
  94.         DataInput in = new DataInput();
  95.  
  96.         System.out.println();
  97.         System.out.println("--------Update/Delete Student--------");
  98.         if (!records.isEmpty()) {
  99.             String id = in.inputExistedID(records);
  100.             TreeSet<Student> students = records.get(id);
  101.             String lineFormat = "%-9s%-21s%10s%13s\n";
  102.             System.out.format(lineFormat, "Index", "Student name", "Semester", "Course name");
  103.             int i = 0;
  104.             for (Student stu : students) {
  105.                 System.out.format("%-9s%s\n", i, stu.getSearchResult());
  106.                 i++;
  107.             }
  108.             System.out.print("Choose record you want to Update/Delete "
  109.                     + "[0-" + students.size() + "]: ");
  110.             int index = in.inputInt("index", 0, students.size());
  111.             Student stu = getRecordByIndex(students, index);
  112.  
  113.             System.out.print("Do you want to update (U) or delete (D) student: ");
  114.             boolean isUpdate = in.isAOrB("U", "D");
  115.             if (!isUpdate) {
  116.                 students.remove(stu);
  117.                 System.out.println("Remove record successfull.");
  118.             } else {
  119.                 String newName = in.inputName();
  120.                 System.out.print("Semester: ");
  121.                 int newSemester = in.inputInt("Semester", 1, 9);
  122.                 String newCourseName = in.inputCourseName();
  123.                 String oldName = stu.getName();
  124.                 int oldSemester = stu.getSemester();
  125.                 String oldCourseName = stu.getCourseName();
  126.                 if (newSemester == oldSemester && newCourseName.equals(oldCourseName)) {
  127.                     if (newName.equals(oldName)) {
  128.                         System.out.println("Update fail: Report is unchanged");
  129.                     } else {
  130.                         updateNewName(students, newName);
  131.                     }
  132.                 } else {
  133.                     Student s = new Student(id, newName, newSemester, newCourseName);
  134.                     Student old = new Student(id, oldName, newSemester, newCourseName);
  135.                     if (!students.contains(old)) {
  136.                         students.remove(stu);
  137.                         students.add(s);
  138.                         if (!newName.equals(oldName)) {
  139.                             updateNewName(students, newName);
  140.                         }
  141.                     } else {
  142.                         System.out.println("Update fail: Report is already exists");
  143.                     }
  144.                 }
  145.             }
  146.         } else {
  147.             System.out.println("Empty data, please create student record first");
  148.         }
  149.         System.out.println();
  150.     }
  151.  
  152.     public void showReport(HashMap<String, TreeSet<Student>> records) {
  153.  
  154.         System.out.println();
  155.         System.out.println("-------- Student Reports --------");
  156.         List<Report> reports = getReports(records);
  157.         Collections.sort(reports);
  158.         if (!reports.isEmpty()) {
  159.             String lineFormat = "%-21s%12s%18s\n";
  160.             System.out.format(lineFormat, "Student name", "Course name", "Total of courses");
  161.             for (Report rp : reports) {
  162.                 System.out.println(rp.toString());
  163.             }
  164.         } else {
  165.             System.out.println("Empty data, please create student record first");
  166.         }
  167.         System.out.println();
  168.     }
  169.  
  170.     private TreeSet<Student> getRecordByName(HashMap<String, TreeSet<Student>> records, String name) {
  171.         TreeSet<Student> result = new TreeSet<>();
  172.         for (Map.Entry<String, TreeSet<Student>> entry : records.entrySet()) {
  173.             TreeSet<Student> students = entry.getValue();
  174.             for (Student record : students) {
  175.                 if (record.getName().contains(name)) {
  176.                     result.add(record);
  177.                 }
  178.             }
  179.         }
  180.         return result;
  181.     }
  182.  
  183.     private Student getRecordByIndex(TreeSet<Student> students, int index) {
  184.         int i = 0;
  185.         Student stu = null;
  186.         for (Student s : students) {
  187.             if (i == index) {
  188.                 stu = s;
  189.                 break;
  190.             }
  191.             i++;
  192.         }
  193.         return stu;
  194.     }
  195.  
  196.     private int getNumberOfRecords(HashMap<String, TreeSet<Student>> records) {
  197.         int size = 0;
  198.         for (Map.Entry<String, TreeSet<Student>> entry : records.entrySet()) {
  199.             size += entry.getValue().size();
  200.  
  201.         }
  202.         return size;
  203.     }
  204.  
  205.     private void updateNewName(TreeSet<Student> students, String newName) {
  206.         for (Student stu : students) {
  207.             stu.setName(newName);
  208.         }
  209.     }
  210.  
  211.     private List<Report> getReports(HashMap<String, TreeSet<Student>> records) {
  212.         List<Report> result = new ArrayList<>();
  213.         for (Map.Entry<String, TreeSet<Student>> entry : records.entrySet()) {
  214.             TreeSet<Student> students = entry.getValue();
  215.             String studentName = students.first().getName();
  216.             int javaCount = 0;
  217.             int dotNetCount = 0;
  218.             int cCount = 0;
  219.             for (Student stu : students) {
  220.                 switch (stu.getCourseName()) {
  221.                     case "Java": {
  222.                         javaCount++;
  223.                         break;
  224.                     }
  225.                     case ".Net": {
  226.                         dotNetCount++;
  227.                         break;
  228.                     }
  229.                     case "C/C++": {
  230.                         cCount++;
  231.                         break;
  232.                     }
  233.                 }
  234.             }
  235.             if (javaCount > 0) {
  236.                 Report report = new Report(studentName, "Java", javaCount);
  237.                 result.add(report);
  238.             }
  239.             if (dotNetCount > 0) {
  240.                 Report report = new Report(studentName, ".Net", dotNetCount);
  241.                 result.add(report);
  242.             }
  243.             if (cCount > 0) {
  244.                 Report report = new Report(studentName, "C/C++", cCount);
  245.                 result.add(report);
  246.             }
  247.         }
  248.         return result;
  249.     }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement