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;
- abstract class Contact {
- private String date;
- private int year;
- private int month;
- private int day;
- public Contact(String date) {
- this.date = date;
- this.year = Integer.parseInt(date.substring(0, 4));
- this.month = Integer.parseInt(date.substring(5, 7));
- this.day = Integer.parseInt(date.substring(8, 10));
- }
- public boolean isNewerThan(Contact other) {
- if (this.year > other.year) return true;
- if (this.year < other.year) return false;
- if (this.month > other.month) return true;
- if (this.month < other.month) return false;
- if (this.day > other.day) return true;
- return false;
- }
- public abstract String getType();
- public abstract String getEmail();
- public abstract String getPhone();
- }
- class EmailContact extends Contact {
- private String email;
- public EmailContact(String date, String email) {
- super(date);
- this.email = email;
- }
- public String getEmail() {
- return email;
- }
- @Override
- public String getPhone() {
- return null;
- }
- @Override
- public String getType() {
- return "Email";
- }
- }
- class PhoneContact extends Contact {
- private String phone;
- @Override
- public String getType() {
- return "Phone";
- }
- @Override
- public String getEmail() {
- return null;
- }
- private enum Operator {
- VIP,
- TMOBILE,
- ONE
- }
- public PhoneContact(String date, String phone) {
- super(date);
- this.phone = phone;
- }
- public String getPhone() {
- return phone;
- }
- public Operator getOperator() {
- if (phone.charAt(2) == '0' || phone.charAt(2) == '1' || phone.charAt(2) == '2') return Operator.TMOBILE;
- if (phone.charAt(2) == '5' || phone.charAt(2) == '6') return Operator.ONE;
- return Operator.VIP;
- }
- }
- class Student {
- Contact[] contacts;
- private String firstName;
- private String lastName;
- private String city;
- private int age;
- private long index;
- private int contactsCounter;
- private int phoneCounter;
- private int emailCounter;
- public Student(String firstName, String lastName, String city, int age, long index) {
- this.firstName = firstName;
- this.lastName = lastName;
- this.city = city;
- this.age = age;
- this.index = index;
- contactsCounter = 0;
- phoneCounter = 0;
- emailCounter = 0;
- }
- public void addEmailContact(String date, String email) {
- Contact[] auxArr = new Contact[contactsCounter + 1];
- for (int i = 0; i < contactsCounter; i++) {
- if (contacts == null) break;
- auxArr[i] = contacts[i];
- }
- auxArr[contactsCounter++] = new EmailContact(date, email);
- contacts = auxArr;
- emailCounter++;
- }
- public void addPhoneContact(String date, String phone) {
- Contact[] auxArr = new Contact[contactsCounter + 1];
- for (int i = 0; i < contactsCounter; i++) {
- if (contacts == null) break;
- auxArr[i] = contacts[i];
- }
- auxArr[contactsCounter++] = new PhoneContact(date, phone);
- contacts = auxArr;
- phoneCounter++;
- }
- public Contact[] getEmailContacts() {
- Contact[] emails = new Contact[emailCounter];
- int auxCounter = 0;
- for (Contact email : contacts) {
- if (email.getType().equals("Email")) {
- emails[auxCounter++] = email;
- }
- }
- return emails;
- }
- public Contact[] getPhoneContacts() {
- Contact[] phones = new Contact[phoneCounter];
- int auxCounter = 0;
- for (Contact phone: contacts) {
- if (phone.getType().equals("Phone"))
- phones[auxCounter++] = phone;
- }
- return phones;
- }
- public String getCity() {
- return city;
- }
- public String getFullName() {
- return firstName.toUpperCase() + " " + lastName.toUpperCase();
- }
- public long getIndex() {
- return index;
- }
- public Contact getLatestContact() {
- int newestContact = 0;
- for (int i = 0; i < contacts.length; i++) {
- if(contacts[i].isNewerThan(contacts[newestContact])){
- newestContact = i;
- }
- }
- return contacts[newestContact];
- }
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{\"ime\":\"").append(firstName).append("\", \"prezime\":\"").append(lastName).append("\", ");
- sb.append("\"vozrast\":").append(age).append(", \"grad\":\"").append(city).append("\", ");
- sb.append("\"indeks\":").append(index).append(", \"telefonskiKontakti\":[");
- Contact[] phones = getPhoneContacts();
- for (int i = 0; i < phones.length; i++) {
- if(i < phones.length-1){
- sb.append("\"").append(phones[i].getPhone()).append("\", ");
- }
- else{
- sb.append("\"").append(phones[i].getPhone()).append("\"");
- }
- }
- sb.append("], ");
- sb.append("\"emailKontakti\":[");
- Contact[] emails = getEmailContacts();
- for (int i = 0; i < emails.length; i++) {
- if(i < emails.length-1){
- sb.append("\"").append(emails[i].getEmail()).append("\", ");
- }
- else{
- sb.append("\"").append(emails[i].getEmail()).append("\"");
- }
- }
- sb.append("]}");
- return sb.toString();
- }
- public int getContactsNumber() {
- return contactsCounter;
- }
- }
- class Faculty {
- private String name;
- Student[] students;
- public Faculty(String name, Student[] students) {
- this.name = name;
- this.students = students;
- }
- public int countStudentsFromCity(String cityName) {
- //TODO da se proba so java streams.
- int fromCityCounter = 0;
- for (int i = 0; i < students.length; i++) {
- if (students[i].getCity().equals(cityName)) {
- fromCityCounter++;
- }
- }
- return fromCityCounter;
- }
- public Student getStudent(long index) {
- //TODO da se proba so java streams.
- Student student = students[0];
- for (int i = 0; i < students.length; i++) {
- if (students[i].getIndex() == index) {
- student = students[i];
- break;
- }
- }
- return student;
- }
- public double getAverageNumberOfContacts() {
- //TODO da se proveri dali raboti vaka.
- return Arrays.stream(students)
- .mapToDouble(Student::getContactsNumber)
- .sum() / students.length;
- }
- public Student getStudentWithMostContacts() {
- // TODO da se proba so java streams.
- int maxContacts = students[0].contacts.length;
- int index = 0;
- for (int i = 1; i < students.length; i++) {
- if (students[i].contacts.length > maxContacts) {
- maxContacts = students[i].contacts.length;
- index = i;
- } else if (students[i].contacts.length == maxContacts) {
- if (students[i].getIndex() > students[index].getIndex()) {
- maxContacts = students[i].contacts.length;
- index = i;
- }
- }
- }
- return students[index];
- }
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{\"fakultet\":\"").append(name).append("\", \"studenti\":[");
- for (int i = 0; i < students.length - 1; i++) {
- sb.append(students[i].toString()).append(", ");
- }
- sb.append(students[students.length - 1].toString()).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()
- + ")");
- 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