Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.text.DecimalFormat;
- import java.util.Arrays;
- import java.util.Scanner;
- import java.util.Arrays;
- abstract class Contact{
- String date;
- Contact(String date){
- this.date=date;
- }
- public int getGodina() {
- String[] datum=date.split("-");
- int godina=Integer.parseInt(datum[0]);
- return godina;
- }
- public int getMesec() {
- String[] datum=date.split("-");
- int mesec=Integer.parseInt(datum[1]);
- return mesec;
- }
- public int getDen() {
- String[] datum=date.split("-");
- int den=Integer.parseInt(datum[2]);
- return den;
- }
- public boolean isNewerThan(Contact c) {
- if(c==null) return false;
- int godina=c.getGodina();
- int mesec=c.getMesec();
- int den=c.getDen();
- if(godina<this.getGodina()) {
- return true;
- }else if(godina==this.getGodina()&&mesec<this.getMesec()) {
- return true;
- }else if(godina==this.getGodina()&&mesec==this.getMesec() && den<this.getDen()) {
- return true;
- }
- return false;
- }
- abstract public String getType();
- abstract public String getContent();
- }
- class EmailContact extends Contact{
- String email;
- EmailContact(String date,String email){
- super(date);
- this.email=email;
- }
- public String getEmail() {
- return email;
- }
- public String getType() {
- return "Email";
- }
- public String getContent() {
- return email;
- }
- }
- class PhoneContact extends Contact{
- String telBroj;
- enum Operator { VIP, ONE, TMOBILE }
- PhoneContact(String date,String phone){
- super(date);
- this.telBroj=phone;
- }
- public String getPhone() {
- return telBroj;
- }
- public String getType() {
- return "Phone";
- }
- public Operator getOperator() {
- String[] string=telBroj.split("/");
- int operatorskiBroj=Integer.parseInt(string[0]);
- operatorskiBroj%=10;
- if(operatorskiBroj==1 || operatorskiBroj==0 || operatorskiBroj==2) {
- return Operator.TMOBILE;
- }
- if(operatorskiBroj==5 || operatorskiBroj==6) {
- return Operator.ONE;
- }
- if(operatorskiBroj==7 || operatorskiBroj==8) {
- return Operator.VIP;
- }
- return null;
- }
- public String getContent() {
- return telBroj;
- }
- }
- class Student{
- String ime,prezime,grad;
- int godini;
- long indeks;
- Contact[] kontakti;
- int brojKontakti;
- int brojEmail,brojPhone;
- Student(){}
- Student(String firstName, String lastName, String city, int age, long index){
- ime=firstName;
- prezime=lastName;
- grad=city;
- godini=age;
- indeks=index;
- kontakti=null;
- brojKontakti=0;
- brojEmail=brojPhone=0;
- }
- public void addEmailContact(String date, String email) {
- Contact[] kontaktiNova=new Contact[brojKontakti+1];
- for(int i=0;i<brojKontakti;i++) {
- kontaktiNova[i]=kontakti[i];
- }
- kontaktiNova[brojKontakti]=new EmailContact(date,email);
- kontakti=kontaktiNova;
- brojKontakti++;
- brojEmail++;
- }
- public void addPhoneContact(String date, String phone) {
- Contact[] kontaktiNova=new Contact[brojKontakti+1];
- for(int i=0;i<brojKontakti;i++) {
- kontaktiNova[i]=kontakti[i];
- }
- kontaktiNova[brojKontakti]=new PhoneContact(date,phone);
- kontakti=kontaktiNova;
- brojKontakti++;
- brojPhone++;
- }
- public Contact[] getEmailContacts() {
- Contact[] kontaktiEmail=new Contact[brojEmail];
- int counter=0;
- for(int i=0;i<brojKontakti;i++) {
- if(kontakti[i].getType()=="Email") {
- kontaktiEmail[counter]=kontakti[i];
- counter++;
- }
- }
- return kontaktiEmail;
- }
- public Contact[] getPhoneContacts() {
- Contact[] kontaktiPhone=new Contact[brojPhone];
- int counter=0;
- for(int i=0;i<brojKontakti;i++) {
- if(kontakti[i].getType()=="Phone") {
- kontaktiPhone[counter]=kontakti[i];
- counter++;
- }
- }
- return kontaktiPhone;
- }
- public String getCity() {
- return grad;
- }
- public String getFullName() {
- return ime+" "+prezime;
- }
- public long getIndex() {
- return indeks;
- }
- public Contact getLatestContact() {
- int latestIndex=0;
- for(int i=1;i<brojKontakti;i++) {
- if(kontakti[i].isNewerThan(kontakti[latestIndex])) {
- latestIndex=i;
- }
- }
- return kontakti[latestIndex];
- }
- public String toString() {
- StringBuilder s=new StringBuilder("");
- s.append("{\"ime\":\"").append(ime).append("\", \"prezime\":\"")
- .append(prezime).append("\", \"vozrast\":").append(godini)
- .append(", \"grad\":\"").append(grad)
- .append("\", \"indeks\":").append(indeks);
- if(brojPhone==0) s.append(", \"telefonskiKontakti\":[");
- else s.append(", \"telefonskiKontakti\":[\"");
- for(int i=0;i<brojPhone;i++) {
- if(i==brojPhone-1) {s.append(getPhoneContacts()[i].getContent()).append("\"], "); break;}
- s.append(getPhoneContacts()[i].getContent()).append("\", \"");
- }
- if(brojPhone==0){
- s.append("], ");
- }
- if(brojEmail==0) s.append("\"emailKontakti\":[");
- else s.append("\"emailKontakti\":[\"");
- for(int i=0;i<brojEmail;i++) {
- if(i==brojEmail-1) {s.append(getEmailContacts()[i].getContent()).append("\"]"); break;}
- s.append(getEmailContacts()[i].getContent()).append("\", \"");
- }
- if(brojEmail==0){
- s.append("]");
- }
- s.append("}");
- return s.toString();
- }
- public int numberOfContacts() {
- return brojKontakti;
- }
- }
- class Faculty{
- String name;
- Student[] students;
- Faculty(String name, Student [] students){
- this.name=name;
- this.students=Arrays.copyOf(students,students.length);
- }
- public int countStudentsFromCity(String cityName){
- int num=0;
- for(int i=0;i<students.length;i++) {
- if(students[i].getCity().equals(cityName)) {
- num++;
- }
- }
- return num;
- }
- public Student getStudentWithMostContacts() {
- Student mostContacts=students[0];
- for(int i=1;i<students.length;i++) {
- if(mostContacts.numberOfContacts()<students[i].numberOfContacts()) {
- mostContacts=students[i];
- }else if(mostContacts.numberOfContacts()==students[i].numberOfContacts()){
- if(mostContacts.getIndex()<students[i].getIndex()){
- mostContacts=students[i];
- }
- }
- }
- return mostContacts;
- }
- public Student getStudent(long index) {
- for(int i=0;i<students.length;i++){
- if(students[i].getIndex()==index){
- return students[i];
- }
- }
- return null;
- }
- public double getAverageNumberOfContacts() {
- double total=0;
- for(int i=0;i<students.length;i++) {
- total+=students[i].numberOfContacts();
- }
- return total/students.length;
- }
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{\"fakultet\":\"" + name + "\", \"studenti\":[");
- for(int i = 0; i < students.length; i++) {
- sb.append(students[i].toString());
- if(i!=students.length-1)
- sb.append(", ");
- }
- sb.append("]}");
- return sb.toString();
- }
- }
- public class ContactsTester {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int tests = scanner.nextInt();
- Faculty faculty = null;
- int rvalue = 0;
- long rindex = -1;
- DecimalFormat df = new DecimalFormat("0.00");
- for (int t = 0; t < tests; t++) {
- rvalue++;
- String operation = scanner.next();
- switch (operation) {
- case "CREATE_FACULTY": {
- String name = scanner.nextLine().trim();
- int N = scanner.nextInt();
- Student[] students = new Student[N];
- for (int i = 0; i < N; i++) {
- rvalue++;
- String firstName = scanner.next();
- String lastName = scanner.next();
- String city = scanner.next();
- int age = scanner.nextInt();
- long index = scanner.nextLong();
- if ((rindex == -1) || (rvalue % 13 == 0))
- rindex = index;
- Student student = new Student(firstName, lastName, city,
- age, index);
- students[i] = student;
- }
- faculty = new Faculty(name, students);
- break;
- }
- case "ADD_EMAIL_CONTACT": {
- long index = scanner.nextInt();
- String date = scanner.next();
- String email = scanner.next();
- rvalue++;
- if ((rindex == -1) || (rvalue % 3 == 0))
- rindex = index;
- faculty.getStudent(index).addEmailContact(date, email);
- break;
- }
- case "ADD_PHONE_CONTACT": {
- long index = scanner.nextInt();
- String date = scanner.next();
- String phone = scanner.next();
- rvalue++;
- if ((rindex == -1) || (rvalue % 3 == 0))
- rindex = index;
- faculty.getStudent(index).addPhoneContact(date, phone);
- break;
- }
- case "CHECK_SIMPLE": {
- System.out.println("Average number of contacts: "
- + df.format(faculty.getAverageNumberOfContacts()));
- rvalue++;
- String city = faculty.getStudent(rindex).getCity();
- System.out.println("Number of students from " + city + ": "
- + faculty.countStudentsFromCity(city));
- break;
- }
- case "CHECK_DATES": {
- rvalue++;
- System.out.print("Latest contact: ");
- Contact latestContact = faculty.getStudent(rindex)
- .getLatestContact();
- if (latestContact.getType().equals("Email"))
- System.out.println(((EmailContact) latestContact)
- .getEmail());
- if (latestContact.getType().equals("Phone"))
- System.out.println(((PhoneContact) latestContact)
- .getPhone()
- + " ("
- + ((PhoneContact) latestContact).getOperator()
- .toString() + ")");
- if (faculty.getStudent(rindex).getEmailContacts().length > 0
- && faculty.getStudent(rindex).getPhoneContacts().length > 0) {
- System.out.print("Number of email and phone contacts: ");
- System.out
- .println(faculty.getStudent(rindex)
- .getEmailContacts().length
- + " "
- + faculty.getStudent(rindex)
- .getPhoneContacts().length);
- System.out.print("Comparing dates: ");
- int posEmail = rvalue
- % faculty.getStudent(rindex).getEmailContacts().length;
- int posPhone = rvalue
- % faculty.getStudent(rindex).getPhoneContacts().length;
- System.out.println(faculty.getStudent(rindex)
- .getEmailContacts()[posEmail].isNewerThan(faculty
- .getStudent(rindex).getPhoneContacts()[posPhone]));
- }
- break;
- }
- case "PRINT_FACULTY_METHODS": {
- System.out.println("Faculty: " + faculty.toString());
- System.out.println("Student with most contacts: "
- + faculty.getStudentWithMostContacts().toString());
- break;
- }
- }
- }
- scanner.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement