Advertisement
ilevishinov

Контакти

Oct 25th, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.54 KB | None | 0 0
  1. import java.text.DecimalFormat;
  2. import java.util.Arrays;
  3. import java.util.Scanner;
  4. import java.util.Arrays;
  5.  
  6.  
  7. abstract class Contact{
  8.     String date;
  9.    
  10.     Contact(String date){
  11.         this.date=date;
  12.     }
  13.    
  14.     public int getGodina() {
  15.         String[] datum=date.split("-");
  16.         int godina=Integer.parseInt(datum[0]);
  17.         return godina;
  18.     }
  19.    
  20.     public int getMesec() {
  21.         String[] datum=date.split("-");
  22.         int mesec=Integer.parseInt(datum[1]);
  23.         return mesec;
  24.     }
  25.    
  26.     public int getDen() {
  27.         String[] datum=date.split("-");
  28.         int den=Integer.parseInt(datum[2]);
  29.         return den;
  30.     }
  31.    
  32.     public boolean isNewerThan(Contact c) {
  33.         if(c==null) return false;
  34.         int godina=c.getGodina();
  35.         int mesec=c.getMesec();
  36.         int den=c.getDen();
  37.         if(godina<this.getGodina()) {
  38.             return true;
  39.         }else if(godina==this.getGodina()&&mesec<this.getMesec()) {
  40.             return true;
  41.         }else if(godina==this.getGodina()&&mesec==this.getMesec() && den<this.getDen()) {
  42.             return true;
  43.         }
  44.         return false;
  45.     }
  46.    
  47.     abstract public String getType();
  48.     abstract public String getContent();
  49. }
  50.  
  51. class EmailContact extends Contact{
  52.     String email;
  53.    
  54.     EmailContact(String date,String email){
  55.         super(date);
  56.         this.email=email;
  57.     }
  58.    
  59.     public String getEmail() {
  60.         return email;
  61.     }
  62.    
  63.     public String getType() {
  64.         return "Email";
  65.     }
  66.    
  67.     public String getContent() {
  68.         return email;
  69.     }
  70. }
  71.  
  72. class PhoneContact extends Contact{
  73.     String telBroj;
  74.     enum Operator { VIP, ONE, TMOBILE }
  75.    
  76.     PhoneContact(String date,String phone){
  77.         super(date);
  78.         this.telBroj=phone;
  79.     }
  80.    
  81.     public String getPhone() {
  82.         return telBroj;
  83.     }
  84.    
  85.     public String getType() {
  86.         return "Phone";
  87.     }
  88.    
  89.     public Operator getOperator() {
  90.         String[] string=telBroj.split("/");
  91.         int operatorskiBroj=Integer.parseInt(string[0]);
  92.         operatorskiBroj%=10;
  93.         if(operatorskiBroj==1 || operatorskiBroj==0 || operatorskiBroj==2) {
  94.             return Operator.TMOBILE;
  95.         }
  96.         if(operatorskiBroj==5 || operatorskiBroj==6) {
  97.             return Operator.ONE;
  98.         }
  99.         if(operatorskiBroj==7 || operatorskiBroj==8) {
  100.             return Operator.VIP;
  101.         }
  102.         return null;
  103.     }
  104.    
  105.     public String getContent() {
  106.         return telBroj;
  107.     }
  108.    
  109.    
  110. }
  111.  
  112. class Student{
  113.     String ime,prezime,grad;
  114.     int godini;
  115.     long indeks;
  116.     Contact[] kontakti;
  117.     int brojKontakti;
  118.     int brojEmail,brojPhone;
  119.    
  120.     Student(){}
  121.    
  122.     Student(String firstName, String lastName, String city, int age, long index){
  123.         ime=firstName;
  124.         prezime=lastName;
  125.         grad=city;
  126.         godini=age;
  127.         indeks=index;
  128.         kontakti=null;
  129.         brojKontakti=0;
  130.         brojEmail=brojPhone=0;
  131.     }
  132.    
  133.     public void addEmailContact(String date, String email) {
  134.         Contact[] kontaktiNova=new Contact[brojKontakti+1];
  135.         for(int i=0;i<brojKontakti;i++) {
  136.             kontaktiNova[i]=kontakti[i];
  137.         }
  138.         kontaktiNova[brojKontakti]=new EmailContact(date,email);
  139.         kontakti=kontaktiNova;
  140.         brojKontakti++;
  141.         brojEmail++;
  142.     }
  143.    
  144.     public void addPhoneContact(String date, String phone) {
  145.         Contact[] kontaktiNova=new Contact[brojKontakti+1];
  146.         for(int i=0;i<brojKontakti;i++) {
  147.             kontaktiNova[i]=kontakti[i];
  148.         }
  149.         kontaktiNova[brojKontakti]=new PhoneContact(date,phone);
  150.         kontakti=kontaktiNova;
  151.         brojKontakti++;
  152.         brojPhone++;
  153.     }
  154.    
  155.     public Contact[] getEmailContacts() {
  156.         Contact[] kontaktiEmail=new Contact[brojEmail];
  157.         int counter=0;
  158.         for(int i=0;i<brojKontakti;i++) {
  159.             if(kontakti[i].getType()=="Email") {
  160.                 kontaktiEmail[counter]=kontakti[i];
  161.                 counter++;
  162.             }
  163.         }
  164.         return kontaktiEmail;
  165.     }
  166.    
  167.     public Contact[] getPhoneContacts() {
  168.         Contact[] kontaktiPhone=new Contact[brojPhone];
  169.         int counter=0;
  170.         for(int i=0;i<brojKontakti;i++) {
  171.             if(kontakti[i].getType()=="Phone") {
  172.                 kontaktiPhone[counter]=kontakti[i];
  173.                 counter++;
  174.             }
  175.         }
  176.         return kontaktiPhone;
  177.     }
  178.    
  179.     public String getCity() {
  180.         return grad;
  181.     }
  182.    
  183.     public String getFullName() {
  184.         return ime+" "+prezime;
  185.     }
  186.    
  187.     public long getIndex() {
  188.         return indeks;
  189.     }
  190.    
  191.     public Contact getLatestContact() {
  192.         int latestIndex=0;
  193.         for(int i=1;i<brojKontakti;i++) {
  194.             if(kontakti[i].isNewerThan(kontakti[latestIndex])) {
  195.                 latestIndex=i;
  196.             }
  197.         }
  198.         return kontakti[latestIndex];
  199.     }
  200.    
  201.     public String toString() {
  202.         StringBuilder s=new StringBuilder("");
  203.         s.append("{\"ime\":\"").append(ime).append("\", \"prezime\":\"")
  204.         .append(prezime).append("\", \"vozrast\":").append(godini)
  205.         .append(", \"grad\":\"").append(grad)
  206.         .append("\", \"indeks\":").append(indeks);
  207.        
  208.         if(brojPhone==0) s.append(", \"telefonskiKontakti\":[");
  209.         else s.append(", \"telefonskiKontakti\":[\"");
  210.        
  211.         for(int i=0;i<brojPhone;i++) {
  212.             if(i==brojPhone-1) {s.append(getPhoneContacts()[i].getContent()).append("\"], "); break;}
  213.             s.append(getPhoneContacts()[i].getContent()).append("\", \"");
  214.         }
  215.         if(brojPhone==0){
  216.             s.append("], ");
  217.         }
  218.         if(brojEmail==0) s.append("\"emailKontakti\":[");
  219.         else s.append("\"emailKontakti\":[\"");
  220.         for(int i=0;i<brojEmail;i++) {
  221.             if(i==brojEmail-1) {s.append(getEmailContacts()[i].getContent()).append("\"]"); break;}
  222.             s.append(getEmailContacts()[i].getContent()).append("\", \"");
  223.         }
  224.         if(brojEmail==0){
  225.             s.append("]");
  226.         }
  227.         s.append("}");
  228.        
  229.        
  230.         return s.toString();
  231.     }
  232.    
  233.    
  234.    
  235.     public int numberOfContacts() {
  236.         return brojKontakti;
  237.     }
  238.    
  239.    
  240. }
  241.  
  242. class Faculty{
  243.     String name;
  244.     Student[] students;
  245.    
  246.     Faculty(String name, Student [] students){
  247.         this.name=name;
  248.         this.students=Arrays.copyOf(students,students.length);
  249.     }
  250.    
  251.     public int countStudentsFromCity(String cityName){
  252.         int num=0;
  253.         for(int i=0;i<students.length;i++) {
  254.             if(students[i].getCity().equals(cityName)) {
  255.                 num++;
  256.             }
  257.         }
  258.         return num;
  259.     }
  260.    
  261.     public Student getStudentWithMostContacts() {
  262.         Student mostContacts=students[0];
  263.         for(int i=1;i<students.length;i++) {
  264.             if(mostContacts.numberOfContacts()<students[i].numberOfContacts()) {
  265.                 mostContacts=students[i];
  266.             }else if(mostContacts.numberOfContacts()==students[i].numberOfContacts()){
  267.                 if(mostContacts.getIndex()<students[i].getIndex()){
  268.                     mostContacts=students[i];
  269.                 }
  270.             }
  271.         }
  272.         return mostContacts;
  273.     }
  274.    
  275.     public Student getStudent(long index) {
  276.         for(int i=0;i<students.length;i++){
  277.             if(students[i].getIndex()==index){
  278.                 return students[i];
  279.             }
  280.         }
  281.         return null;
  282.     }
  283.    
  284.     public double getAverageNumberOfContacts() {
  285.         double total=0;
  286.         for(int i=0;i<students.length;i++) {
  287.             total+=students[i].numberOfContacts();
  288.         }
  289.         return total/students.length;
  290.     }
  291.    
  292.     public String toString() {
  293.         StringBuilder sb = new StringBuilder();
  294.         sb.append("{\"fakultet\":\"" + name + "\", \"studenti\":[");
  295.         for(int i = 0; i < students.length; i++) {
  296.             sb.append(students[i].toString());
  297.             if(i!=students.length-1)
  298.                 sb.append(", ");
  299.         }
  300.         sb.append("]}");
  301.        
  302.         return sb.toString();
  303.     }
  304. }
  305.  
  306.  
  307.  
  308. public class ContactsTester {
  309.  
  310.     public static void main(String[] args) {
  311.         Scanner scanner = new Scanner(System.in);
  312.  
  313.         int tests = scanner.nextInt();
  314.         Faculty faculty = null;
  315.  
  316.         int rvalue = 0;
  317.         long rindex = -1;
  318.  
  319.         DecimalFormat df = new DecimalFormat("0.00");
  320.  
  321.         for (int t = 0; t < tests; t++) {
  322.  
  323.             rvalue++;
  324.             String operation = scanner.next();
  325.  
  326.             switch (operation) {
  327.             case "CREATE_FACULTY": {
  328.                 String name = scanner.nextLine().trim();
  329.                 int N = scanner.nextInt();
  330.  
  331.                 Student[] students = new Student[N];
  332.  
  333.                 for (int i = 0; i < N; i++) {
  334.                     rvalue++;
  335.  
  336.                     String firstName = scanner.next();
  337.                     String lastName = scanner.next();
  338.                     String city = scanner.next();
  339.                     int age = scanner.nextInt();
  340.                     long index = scanner.nextLong();
  341.  
  342.                     if ((rindex == -1) || (rvalue % 13 == 0))
  343.                         rindex = index;
  344.  
  345.                     Student student = new Student(firstName, lastName, city,
  346.                             age, index);
  347.                     students[i] = student;
  348.                 }
  349.  
  350.                 faculty = new Faculty(name, students);
  351.                 break;
  352.             }
  353.  
  354.             case "ADD_EMAIL_CONTACT": {
  355.                 long index = scanner.nextInt();
  356.                 String date = scanner.next();
  357.                 String email = scanner.next();
  358.  
  359.                 rvalue++;
  360.  
  361.                 if ((rindex == -1) || (rvalue % 3 == 0))
  362.                     rindex = index;
  363.  
  364.                 faculty.getStudent(index).addEmailContact(date, email);
  365.                 break;
  366.             }
  367.  
  368.             case "ADD_PHONE_CONTACT": {
  369.                 long index = scanner.nextInt();
  370.                 String date = scanner.next();
  371.                 String phone = scanner.next();
  372.  
  373.                 rvalue++;
  374.  
  375.                 if ((rindex == -1) || (rvalue % 3 == 0))
  376.                     rindex = index;
  377.  
  378.                 faculty.getStudent(index).addPhoneContact(date, phone);
  379.                 break;
  380.             }
  381.  
  382.             case "CHECK_SIMPLE": {
  383.                 System.out.println("Average number of contacts: "
  384.                         + df.format(faculty.getAverageNumberOfContacts()));
  385.  
  386.                 rvalue++;
  387.  
  388.                 String city = faculty.getStudent(rindex).getCity();
  389.                 System.out.println("Number of students from " + city + ": "
  390.                         + faculty.countStudentsFromCity(city));
  391.  
  392.                 break;
  393.             }
  394.  
  395.             case "CHECK_DATES": {
  396.  
  397.                 rvalue++;
  398.  
  399.                 System.out.print("Latest contact: ");
  400.                 Contact latestContact = faculty.getStudent(rindex)
  401.                         .getLatestContact();
  402.                 if (latestContact.getType().equals("Email"))
  403.                     System.out.println(((EmailContact) latestContact)
  404.                             .getEmail());
  405.                 if (latestContact.getType().equals("Phone"))
  406.                     System.out.println(((PhoneContact) latestContact)
  407.                             .getPhone()
  408.                             + " ("
  409.                             + ((PhoneContact) latestContact).getOperator()
  410.                                     .toString() + ")");
  411.  
  412.                 if (faculty.getStudent(rindex).getEmailContacts().length > 0
  413.                         && faculty.getStudent(rindex).getPhoneContacts().length > 0) {
  414.                     System.out.print("Number of email and phone contacts: ");
  415.                     System.out
  416.                             .println(faculty.getStudent(rindex)
  417.                                     .getEmailContacts().length
  418.                                     + " "
  419.                                     + faculty.getStudent(rindex)
  420.                                             .getPhoneContacts().length);
  421.  
  422.                     System.out.print("Comparing dates: ");
  423.                     int posEmail = rvalue
  424.                             % faculty.getStudent(rindex).getEmailContacts().length;
  425.                     int posPhone = rvalue
  426.                             % faculty.getStudent(rindex).getPhoneContacts().length;
  427.  
  428.                     System.out.println(faculty.getStudent(rindex)
  429.                             .getEmailContacts()[posEmail].isNewerThan(faculty
  430.                             .getStudent(rindex).getPhoneContacts()[posPhone]));
  431.                 }
  432.  
  433.                 break;
  434.             }
  435.  
  436.             case "PRINT_FACULTY_METHODS": {
  437.                 System.out.println("Faculty: " + faculty.toString());
  438.                 System.out.println("Student with most contacts: "
  439.                         + faculty.getStudentWithMostContacts().toString());
  440.                 break;
  441.             }
  442.  
  443.             }
  444.  
  445.         }
  446.  
  447.         scanner.close();
  448.     }
  449. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement