kristina7

НП - Лаб 2-2 Контакти

Nov 19th, 2018
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.55 KB | None | 0 0
  1. /*
  2. Се со цел да се подобри комуникацијата на факултетот потребно е да се направи систем за чување на контакти за секој студент.
  3.  
  4. Да се креира класа Contact. За потребите на оваа класа да се дефинираат следниве методи:
  5.  
  6. Contact(String date) - конструктор каде што date е датумот кога е креиран контактот даден во следниов формат YYYY-MM-DD
  7. isNewerThan(Contact c):boolean - метод кој враќа true доколку контактот е креиран подоцна од контактот c и обратно
  8. getType():String - метод кој враќа вредност "Email" или "Phone" во зависност од типот на контактот
  9. Од класата Contact не треба да може директно да се инстанцира објект.
  10.  
  11. Од оваа класа се изведуваат класите EmailContact и PhoneContact.
  12.  
  13. За класата EmailContact дополнително се чува e-маил кој што е од типот String. Да се дефинираат следниве методи:
  14.  
  15. EmailContact(String date, String email) - конструктор
  16. getEmail():String - метод кој што го враќа е-маилот
  17. getType():String- имплементација на методот од класата Contact
  18. За класата PhoneContact дополнително се чува телефонски број кој што е од типот String и оператор кој што е енумерација и се дефинира на следниов начин enum Operator { VIP, ONE, TMOBILE }. За оваа класа да се дефинираат следниве методи:
  19.  
  20. PhoneContact(String date, String phone) - конструктор
  21. getPhone():String - метод кој што го враќа телефонскиот број
  22. getOperator():Operator - метод кој што го враќа операторот (070, 071, 072 – TMOBILE, 075,076 – ONE, 077, 078 – VIP)
  23. getType():String- имплементација на методот од класата Contact
  24. *Забелешка: Сите телефонски броеви се во формат 07X/YYY-ZZZ каде што X има вредност {0,1,2,5,6,7,8}
  25.  
  26. Потоа да се дефинира класата Student каде што се чува низа на контакти за секој студент
  27.  
  28. Student(String firstName, String lastName, String city, int age, long index) – конструктор
  29. addEmailContact(String date, String email):void – метод што додава е-маил контакт во низата на контакти
  30. addPhoneContact(String date, String phone):void – метод што додава телефонски контакт во низата на контакти
  31. getEmailContacts():Contact[] – враќа низа на email контактите на студентот
  32. getPhoneContacts():Contact[] – враќа низа на phone контактите на студентот
  33. getCity():String - метод кој го враќа градот
  34. getFullName():String - метод кој го враќа целосното име на студентот во формат IME PREZIME
  35. getIndex():long - метод кој го враќа индексот на студентот
  36. getLatestContact():Contact – го враќа најновиот контакт (според датум) од студентот
  37. toString() – претставува JSON репрезентација на класата студент пр. {"ime":"Jovan", "prezime":"Jovanov", "vozrast":20, "grad":"Skopje", "indeks":101010, "telefonskiKontakti":["077/777-777", "078/888-888"], "emailKontakti":["[email protected]", "[email protected]", "[email protected]"]}
  38. *Забелешка: Во класата Student да се чува само една низа од контакти Contact[], а не две низи одделно (PhoneContact[] и EmailContact[])
  39.  
  40. *Напомена да не се користи instanceOf или getClass при имплементација на овие методи
  41.  
  42. Дополнително да се дефинира класа Faculty. За оваа класа да се дефинираат следниве методи:
  43.  
  44. Faculty(String name, Student [] students) – конструктор
  45. countStudentsFromCity(String cityName):int – враќа колку студенти има од даден град
  46. getStudent(long index):Student – метод кој го враќа студентот кој го има дадениот индекс
  47. getAverageNumberOfContacts():double – враќа просечен број на контакти по студент
  48. getStudentWithMostContacts():Student – метод кој го враќа студентот со најмногу контакти (доколку има повеќе студенти со ист број на контакти да го врати студентот со најголем индекс)
  49. toString() – претставува JSON репрезентација на класата Faculty пример: {"fakultet":"FINKI", "studenti":[STUDENT1, STUDENT2, ...]} каде што треба да има целосни информации за секој студент.
  50. */
  51.  
  52. import java.text.DecimalFormat;
  53. import java.util.*;
  54.  
  55. class Faculty{
  56.     String name;
  57.     Student[] students;
  58.    
  59.     public Faculty(String name, Student [] students) {
  60.         this.name = name;
  61.         this.students = Arrays.copyOf(students, students.length);
  62.     }
  63.     public int countStudentsFromCity(String cityName) {
  64.         int i=0;
  65.         for (Student student : students) {
  66.             if(student.getCity().equals(cityName))
  67.                 i++;
  68.         }
  69.         return i;
  70.     }
  71.     public Student getStudent(long index) {
  72.         for (Student student : students) {
  73.             if(student.getIndex() == index)
  74.                 return student;
  75.         }
  76.         return null;
  77.     }
  78.     public double getAverageNumberOfContacts() {
  79.         double suma = 0.0;
  80.         for (Student student : students) {
  81.             suma+=student.getNumberOfContacts();
  82.         }
  83.         return suma / students.length;
  84.     }
  85.     public Student getStudentWithMostContacts() {
  86.         Student max = students[0];
  87.         for (Student student : students) {
  88.             int res = Integer.compare(student.getNumberOfContacts(), max.getNumberOfContacts());
  89.             if(res > 0) {
  90.                 max = student;
  91.             }else if(res == 0) {
  92.                 if(student.getIndex() > max.getIndex())
  93.                     max = student;
  94.             }              
  95.         }
  96.         return max;
  97.     }
  98.     @Override
  99.     public String toString() {
  100.         StringBuilder sb = new StringBuilder();
  101.         sb.append(String.format("{\"fakultet\":\"%s\", ", this.name));
  102.         sb.append("\"studenti\":[");
  103.         for (Student student : students) {
  104.             sb.append(student + ", ");
  105.         }
  106.         String s = sb.toString();
  107.         if(students.length != 0)
  108.             s = s.substring(0, sb.length() -2);
  109.         s += "]}";
  110.         return s;
  111.     }
  112. }
  113.  
  114. abstract class Contact implements Comparable<Contact>{
  115.     protected String date;
  116.    
  117.     public Contact(String date) {
  118.         this.date = date;
  119.     }
  120.     public boolean isNewerThan(Contact c) {
  121.         return (this.date.compareTo(c.date) > 0);
  122.     }
  123.     public abstract String getType();
  124.     @Override
  125.     public int compareTo(Contact o) {
  126.         // TODO Auto-generated method stub
  127.         return this.date.compareTo(o.date);
  128.     }
  129.    
  130.    
  131. }
  132.  
  133. class EmailContact extends Contact{
  134.     private String email;
  135.  
  136.     public EmailContact(String date, String email) {
  137.         super(date);
  138.         this.email = email;
  139.     }
  140.     public String getEmail() {
  141.         return this.email;
  142.     }
  143.     @Override
  144.     public String getType() {
  145.         // TODO Auto-generated method stub
  146.         return "Email";
  147.     }
  148.     @Override
  149.     public String toString() {
  150.         return this.email;
  151.     }
  152. }
  153. class PhoneContact extends Contact{
  154.     public enum Operator{
  155.         VIP, ONE, TMOBILE
  156.     }
  157.    
  158.     private String num;
  159.    
  160.  
  161.     public PhoneContact(String date, String num) {
  162.         super(date);
  163.         this.num = num;
  164.     }
  165.     public String getPhone() {
  166.         return this.num;
  167.     }
  168.     public Operator getOperator() {
  169.         if(num.charAt(2) == '0' || num.charAt(2) =='1' || num.charAt(2) == '2')
  170.             return Operator.TMOBILE;
  171.         if(num.charAt(2) == '5' || num.charAt(2) =='6')
  172.             return Operator.ONE;
  173.         if(num.charAt(2) == '7' || num.charAt(2) =='8' )
  174.             return Operator.VIP;
  175.         return null;
  176.     }
  177.    
  178.     @Override
  179.     public String getType() {
  180.         // TODO Auto-generated method stub
  181.         return "Phone";
  182.     }
  183.    
  184.     @Override
  185.     public String toString() {
  186.         return this.num;
  187.     }
  188. }
  189.  
  190. class Student{
  191.     String firstName, lastName, city;
  192.     int age;
  193.     long index;
  194.     List<Contact> contacts;
  195.     public Student(String firstName, String lastName, String city, int age, long index) {
  196.         super();
  197.         this.firstName = firstName;
  198.         this.lastName = lastName;
  199.         this.city = city;
  200.         this.age = age;
  201.         this.index = index;
  202.         contacts = new ArrayList<>();
  203.     }
  204.     public int getNumberOfContacts() {
  205.         return contacts.size();
  206.     }
  207.     public void addEmailContact(String date, String email) {
  208.         contacts.add(new EmailContact(date, email));
  209.     }
  210.     public void addPhoneContact(String date, String phone) {
  211.         contacts.add(new PhoneContact(date, phone));
  212.     }
  213.     public Contact[] getEmailContacts() {
  214.         Contact[] result = new Contact[contacts.size()];
  215.         int i=0;
  216.         for (Contact c : contacts) {
  217.             if(c.getType().equals("Email"))
  218.                 result[i++] = c;
  219.         }
  220.         result = Arrays.copyOf(result, i);
  221.         return result;
  222.     }
  223.     public Contact[] getPhoneContacts() {
  224.         Contact[] result = new Contact[contacts.size()];
  225.         int i=0;
  226.         for (Contact c : contacts) {
  227.             if(c.getType().equals("Phone"))
  228.                 result[i++] = c;
  229.         }
  230.         result = Arrays.copyOf(result, i);
  231.         return result;
  232.     }
  233.     public String getCity() {
  234.         return this.city;
  235.     }
  236.     public String getFullName() {
  237.         return this.firstName + this.lastName;
  238.     }
  239.     public long getIndex() {
  240.         return this.index;
  241.     }
  242.     public Contact getLatestContact() {
  243.         return Collections.max(contacts);
  244.     }
  245.     public String toStringEmails() {
  246.         String s="";
  247.         for (Contact contact : getEmailContacts()) {
  248.             s += String.format("\"%s\", ", contact);
  249.         }
  250.         if(getEmailContacts().length != 0)
  251.             s = s.substring(0, s.length()-2);
  252.         return s;
  253.     }
  254.     public String toStringPhones() {
  255.         String s="";
  256.         for (Contact contact : getPhoneContacts()) {
  257.             s += String.format("\"%s\", ", contact);
  258.         }
  259.         if(getPhoneContacts().length != 0)
  260.             s = s.substring(0, s.length()-2);
  261.         return s;
  262.     }
  263.     @Override
  264.     public String toString() {
  265.         StringBuilder sb = new StringBuilder();
  266.         sb.append("{");
  267.         sb.append(String.format("\"ime\":\"%s\", ", this.firstName));
  268.         sb.append(String.format("\"prezime\":\"%s\", ", this.lastName));
  269.         sb.append(String.format("\"vozrast\":%d, ", this.age));
  270.         sb.append(String.format("\"grad\":\"%s\", ", this.city));
  271.         sb.append(String.format("\"indeks\":%d, ", this.index));
  272.         sb.append(String.format("\"telefonskiKontakti\":[%s], ", this.toStringPhones()));
  273.         sb.append(String.format("\"emailKontakti\":[%s]", this.toStringEmails()));
  274.         sb.append("}");
  275.         return sb.toString();
  276.        
  277.     }
  278. }
  279.  
  280.  
  281. public class ContactsTester {
  282.  
  283.     public static void main(String[] args) {
  284.         Scanner scanner = new Scanner(System.in);
  285.  
  286.         int tests = scanner.nextInt();
  287.         Faculty faculty = null;
  288.  
  289.         int rvalue = 0;
  290.         long rindex = -1;
  291.  
  292.         DecimalFormat df = new DecimalFormat("0.00");
  293.  
  294.         for (int t = 0; t < tests; t++) {
  295.  
  296.             rvalue++;
  297.             String operation = scanner.next();
  298.  
  299.             switch (operation) {
  300.             case "CREATE_FACULTY": {
  301.                 String name = scanner.nextLine().trim();
  302.                 int N = scanner.nextInt();
  303.  
  304.                 Student[] students = new Student[N];
  305.  
  306.                 for (int i = 0; i < N; i++) {
  307.                     rvalue++;
  308.  
  309.                     String firstName = scanner.next();
  310.                     String lastName = scanner.next();
  311.                     String city = scanner.next();
  312.                     int age = scanner.nextInt();
  313.                     long index = scanner.nextLong();
  314.  
  315.                     if ((rindex == -1) || (rvalue % 13 == 0))
  316.                         rindex = index;
  317.  
  318.                     Student student = new Student(firstName, lastName, city,
  319.                             age, index);
  320.                     students[i] = student;
  321.                 }
  322.  
  323.                 faculty = new Faculty(name, students);
  324.                 break;
  325.             }
  326.  
  327.             case "ADD_EMAIL_CONTACT": {
  328.                 long index = scanner.nextInt();
  329.                 String date = scanner.next();
  330.                 String email = scanner.next();
  331.  
  332.                 rvalue++;
  333.  
  334.                 if ((rindex == -1) || (rvalue % 3 == 0))
  335.                     rindex = index;
  336.  
  337.                 faculty.getStudent(index).addEmailContact(date, email);
  338.                 break;
  339.             }
  340.  
  341.             case "ADD_PHONE_CONTACT": {
  342.                 long index = scanner.nextInt();
  343.                 String date = scanner.next();
  344.                 String phone = scanner.next();
  345.  
  346.                 rvalue++;
  347.  
  348.                 if ((rindex == -1) || (rvalue % 3 == 0))
  349.                     rindex = index;
  350.  
  351.                 faculty.getStudent(index).addPhoneContact(date, phone);
  352.                 break;
  353.             }
  354.  
  355.             case "CHECK_SIMPLE": {
  356.                 System.out.println("Average number of contacts: "
  357.                         + df.format(faculty.getAverageNumberOfContacts()));
  358.  
  359.                 rvalue++;
  360.  
  361.                 String city = faculty.getStudent(rindex).getCity();
  362.                 System.out.println("Number of students from " + city + ": "
  363.                         + faculty.countStudentsFromCity(city));
  364.  
  365.                 break;
  366.             }
  367.  
  368.             case "CHECK_DATES": {
  369.  
  370.                 rvalue++;
  371.  
  372.                 System.out.print("Latest contact: ");
  373.                 Contact latestContact = faculty.getStudent(rindex)
  374.                         .getLatestContact();
  375.                 if (latestContact.getType().equals("Email"))
  376.                     System.out.println(((EmailContact) latestContact)
  377.                             .getEmail());
  378.                 if (latestContact.getType().equals("Phone"))
  379.                     System.out.println(((PhoneContact) latestContact)
  380.                             .getPhone()
  381.                             + " ("
  382.                             + ((PhoneContact) latestContact).getOperator()
  383.                                     .toString() + ")");
  384.  
  385.                 if (faculty.getStudent(rindex).getEmailContacts().length > 0&&faculty.getStudent(rindex).getPhoneContacts().length > 0) {
  386.                     System.out.print("Number of email and phone contacts: ");
  387.                     System.out
  388.                             .println(faculty.getStudent(rindex)
  389.                                     .getEmailContacts().length
  390.                                     + " "
  391.                                     + faculty.getStudent(rindex)
  392.                                             .getPhoneContacts().length);
  393.  
  394.                     System.out.print("Comparing dates: ");
  395.                     int posEmail = rvalue
  396.                             % faculty.getStudent(rindex).getEmailContacts().length;
  397.                     int posPhone = rvalue
  398.                             % faculty.getStudent(rindex).getPhoneContacts().length;
  399.  
  400.                     System.out.println(faculty.getStudent(rindex)
  401.                             .getEmailContacts()[posEmail].isNewerThan(faculty
  402.                             .getStudent(rindex).getPhoneContacts()[posPhone]));
  403.                 }
  404.  
  405.                 break;
  406.             }
  407.  
  408.             case "PRINT_FACULTY_METHODS": {
  409.                 System.out.println("Faculty: " + faculty.toString());
  410.                 System.out.println("Student with most contacts: "
  411.                         + faculty.getStudentWithMostContacts().toString());
  412.                 break;
  413.             }
  414.  
  415.             }
  416.         }
  417.  
  418.         scanner.close();
  419.     }
  420. }
Advertisement
Add Comment
Please, Sign In to add comment