Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.text.DecimalFormat;
- import java.util.Scanner;
- import java.lang.Enum;
- abstract class Contact{
- private String date;
- public Contact(String date){
- this.date=date;
- }
- //da se razgleda ova
- public boolean isNewerThan(Contact c){
- if(this.date.compareTo(c.getDate())>0)
- return true;
- else return false;
- }
- public String getDate(){
- return date;
- }
- public abstract String getType();
- }
- 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 getType() {
- return "Email";
- }
- }
- class PhoneContact extends Contact{
- private String phoneNumber;
- public enum Operator {VIP, ONE, TMOBILE};
- public PhoneContact(String date, String phoneNumber) {
- super(date);
- this.phoneNumber = phoneNumber;
- }
- public String getPhone() {
- return phoneNumber;
- }
- public Operator getOperator(){
- if(phoneNumber.charAt(2)=='0' || phoneNumber.charAt(2)=='1' || phoneNumber.charAt(2)=='2')
- return Operator.TMOBILE;
- else if(phoneNumber.charAt(2)=='5' || phoneNumber.charAt(2)=='6')
- return Operator.ONE;
- else
- return Operator.VIP;
- }
- @Override
- public String getType() {
- return "Phone";
- }
- }
- class Student{
- private String firstName;
- private String lastName;
- private String city;
- private int age;
- private long index;
- private Contact[]contacts;
- private int numE;
- private int numP;
- 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;
- numE=numP=0;
- contacts=new Contact[0];
- }
- public void addEmailContact(String date, String email){
- numE++;
- Contact [] tmp=new Contact[contacts.length+1];
- for(int i=0;i<contacts.length;i++){
- tmp[i]=contacts[i];
- }
- tmp[contacts.length]=new EmailContact(date,email);
- contacts=tmp;
- }
- public void addPhoneContact(String date, String phone){
- numP++;
- Contact [] tmp=new Contact[contacts.length+1];
- for(int i=0;i<contacts.length;i++){
- tmp[i]=contacts[i];
- }
- tmp[contacts.length]=new PhoneContact(date,phone);
- contacts=tmp;
- }
- public Contact[] getEmailContacts(){
- Contact [] ec=new Contact[numE];
- int i=0;
- for(Contact c:contacts){
- if(c.getType().equals("Email")){
- ec[i]=c;
- i++;
- }
- }
- return ec;
- }
- public Contact[] getPhoneContacts(){
- Contact [] pc=new Contact[numP];
- int i=0;
- for(Contact c:contacts){
- if(c.getType().equals("Phone")){
- pc[i]=c;
- i++;
- }
- }
- return pc;
- }
- public String getCity() {
- return city;
- }
- public String getFullName(){
- return firstName+" "+lastName;
- }
- public int getNumContacts(){
- return contacts.length;
- }
- public long getIndex() {
- return index;
- }
- public Contact getLatestContact(){
- Contact latest=contacts[0];
- for(int i=1;i<contacts.length;i++){
- if(contacts[i].isNewerThan(latest)){
- latest=contacts[i];
- }
- }
- return latest;
- }
- public String toString(){
- StringBuilder sb=new StringBuilder();
- Contact [] ec=getEmailContacts();
- sb.append("{\"ime\":\""+firstName+"\", \"prezime\":\""+lastName+"\", \"vozrast\":"+age+", \"grad\":\""+city+"\", \"indeks\":"+index+", \"telefonskiKontakti\":[");
- Contact [] emc=getEmailContacts();
- Contact [] phc=getPhoneContacts();
- for(int i=0;i<phc.length;i++){
- PhoneContact ph= (PhoneContact) phc[i];
- if(i==phc.length-1){
- sb.append("\""+ph.getPhone()+"\"");
- }
- else
- sb.append("\""+ph.getPhone()+"\", ");
- }
- sb.append("], \"emailKontakti\":[");
- for(int i=0;i<emc.length;i++){
- EmailContact em= (EmailContact) emc[i];
- if(i==emc.length-1)
- sb.append("\""+em.getEmail()+"\"");
- else
- sb.append("\""+em.getEmail()+"\", ");
- }
- sb.append("]}");
- return sb.toString();
- }
- }
- class Faculty{
- private String name;
- private Student [] students;
- public Faculty(String name, Student[] students) {
- this.name = name;
- this.students = students;
- }
- public int countStudentsFromCity(String cityName){
- int count=0;
- for(Student s:students){
- if(s.getCity().equals(cityName))
- count++;
- }
- return count;
- }
- public Student getStudent(long index){
- for(Student s:students){
- if(s.getIndex()==index)
- return s;
- }
- return null;
- }
- public double getAverageNumberOfContacts(){
- int sum=0;
- for(Student s:students){
- sum+=s.getNumContacts();
- }
- return (double) sum / students.length;
- }
- public Student getStudentWithMostContacts(){
- Student max=students[0];
- for(int i=1;i<students.length;i++){
- if(students[i].getNumContacts()>max.getNumContacts()){
- max=students[i];
- }
- else if(students[i].getNumContacts()==max.getNumContacts()){
- if(students[i].getIndex()>max.getIndex()){
- max=students[i];
- }
- }
- }
- return max;
- }
- public String toString(){
- StringBuilder sb=new StringBuilder();
- sb.append("{\"fakultet\":\""+name+"\", \"studenti\":[");
- for(int i=0;i<students.length;i++){
- if(i==students.length-1)
- sb.append(students[i].toString()+"]}");
- else
- sb.append(students[i].toString()+", ");
- }
- 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();
- }
- }
Add Comment
Please, Sign In to add comment