Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.text.DecimalFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.Scanner;
- abstract class Contact {
- protected String date;
- public Contact(String date) {
- this.date = date;
- }
- public Contact(Contact c) {
- this.date = c.date;
- }
- public boolean isNewerThan(Contact c){
- /*int thisYear = Integer.parseInt(date.substring(0, 4));
- int thatYear = Integer.parseInt(c.date.substring(0, 4));
- int thisMonth = Integer.parseInt(date.substring(5,7));
- int thatMonth = Integer.parseInt(c.date.substring(5,7));
- int thisDay = Integer.parseInt(date.substring(8,10));
- int thatDay = Integer.parseInt(c.date.substring(8,10));
- return (thisYear < thatYear ? false :
- thisYear > thatYear ? true :
- thisMonth < thatMonth ? false :
- thisMonth > thatMonth ? true :
- thisDay < thatDay ? false :
- thisDay > thatDay ? true : false);*/
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
- Date thisDate = null;
- Date thatDate = null;
- try {
- thisDate = simpleDateFormat.parse(this.date);
- thatDate = simpleDateFormat.parse(c.date);
- } catch (ParseException e) {
- System.out.println("ParseException in isNewerThan");
- }
- return thisDate.compareTo(thatDate) > 0;
- }
- abstract public String getType();
- }
- class EmailContact extends Contact {
- private String email;
- public EmailContact(String date, String email){
- super(date);
- this.email = email;
- }
- public EmailContact(EmailContact e){
- super(e);
- email = e.email;
- }
- public String getEmail(){ return email; }
- public String getType(){ return "Email"; }
- }
- enum Operator {
- TMOBILE, VIP, ONE
- }
- class PhoneContact extends Contact {
- private String phone;
- public PhoneContact(String date, String phone){
- super(date);
- this.phone = phone;
- }
- public PhoneContact(PhoneContact phoneContact){
- super(phoneContact);
- this.phone = phoneContact.phone;
- }
- public String getPhone(){ return phone; }
- public Operator getOperator(){
- char prefix = phone.charAt(2);
- if(prefix == '0' || prefix == '1' || prefix == '2'){
- return Operator.TMOBILE;
- } else if(prefix == '5' || prefix == '6'){
- return Operator.ONE;
- } else{
- return Operator.VIP;
- }
- }
- 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 emailContacts;
- private int phoneContacts;
- 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;
- this.contacts = new Contact[0];
- this.emailContacts = 0;
- this.phoneContacts = 0;
- }
- public Student(Student student){
- firstname = student.firstname;
- lastname = student.lastname;
- city = student.city;
- age = student.age;
- index = student.index;
- emailContacts = student.emailContacts;
- phoneContacts = student.phoneContacts;
- contacts = new Contact[student.contacts.length];
- for(int i = 0; i < contacts.length; i++) {
- if(student.contacts[i].getType().equals("Phone")){
- contacts[i] = new PhoneContact((PhoneContact) student.contacts[i]);
- } else if(student.contacts[i].getType().equals("Email")){
- contacts[i] = new EmailContact((EmailContact) student.contacts[i]);
- }
- }
- }
- private void increaseContacts(){
- Contact temp[] = new Contact[contacts.length];
- System.arraycopy(contacts, 0, temp, 0, contacts.length);
- /* better to just temp = contacts so you don't make a useless copy */
- contacts = new Contact[temp.length + 1];
- System.arraycopy(temp, 0, contacts, 0, temp.length);
- }
- public void addEmailContact(String date, String email){
- increaseContacts();
- contacts[contacts.length - 1] = new EmailContact(date, email);
- emailContacts++;
- }
- public void addPhoneContact(String date, String phone){
- increaseContacts();
- contacts[contacts.length - 1] = new PhoneContact(date, phone);
- phoneContacts++;
- }
- public Contact[] getEmailContacts(){
- Contact result[] = new Contact[emailContacts];
- int k = 0;
- for(int i = 0; i < contacts.length; i++){
- if(contacts[i].getType().equals("Email")){
- result[k++] = contacts[i];
- }
- }
- return result;
- }
- public Contact[] getPhoneContacts(){
- Contact result[] = new Contact[phoneContacts];
- int k = 0;
- for(int i = 0; i < contacts.length; i++){
- if(contacts[i].getType().equals("Phone")){
- result[k++] = contacts[i];
- }
- }
- return result;
- }
- public String getCity() { return city; }
- public String getFullName(){
- StringBuffer sb = new StringBuffer();
- sb.append(firstname + " " + lastname);
- return sb.toString();
- }
- public long getIndex(){ return index; }
- public int getNumberContacts(){ return contacts.length; }
- public Contact getLatestContact(){
- Contact result = contacts[0];
- for(int i = 1; i < contacts.length; i++){
- if(contacts[i].isNewerThan(result)){
- result = contacts[i];
- }
- }
- return result;
- }
- public String toString(){
- StringBuffer sb = new StringBuffer();
- sb.append(String.format("{"
- + "\"ime\":\"%s\", "
- + "\"prezime\":\"%s\", "
- + "\"vozrast\":%d, "
- + "\"grad\":\"%s\", "
- + "\"indeks\":%d, "
- + "\"telefonskiKontakti\":[",firstname, lastname, age, city, index));
- boolean last = false;
- int counter = 0;
- for(int i = 0; i < contacts.length; i++){
- if(counter == phoneContacts){
- break;
- }
- if(contacts[i].getType().equals("Phone")){
- if(counter == phoneContacts-1){
- last = true;
- }
- sb.append(String.format("\"%s\"", ((PhoneContact)contacts[i]).getPhone()));
- if(!last){
- sb.append(", ");
- }
- counter++;
- }
- }
- sb.append("], \"emailKontakti\":[");
- counter = 0;
- last = false;
- for(int i = 0; i < contacts.length; i++){
- if(counter == emailContacts){
- break;
- }
- if(contacts[i].getType().equals("Email")){
- if(counter == emailContacts - 1){
- last = true;
- }
- sb.append(String.format("\"%s\"", ((EmailContact)contacts[i]).getEmail()));
- if(!last){
- sb.append(", ");
- }
- counter++;
- }
- }
- sb.append("]}");
- return sb.toString();
- }
- }
- class Faculty{
- private String name;
- private Student[] students;
- public Faculty(String n, Student [] s){
- name = n;
- students = new Student[s.length];
- for(int i = 0; i < s.length; i++){
- students[i] = new Student(s[i]);
- }
- }
- public int countStudentsFromCity(String cityName){
- int counter = 0;
- for(int i = 0; i < students.length; i++){
- if(students[i].getCity().equals(cityName)){
- counter++;
- }
- }
- return counter;
- }
- 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 sum = 0;
- for(int i = 0; i < students.length; i++){
- sum += students[i].getNumberContacts();
- }
- return sum / students.length;
- }
- public Student getStudentWithMostContacts(){
- Student maxContacts = students[0];
- for(int i = 1; i < students.length; i++){
- if(students[i].getNumberContacts() > maxContacts.getNumberContacts()){
- maxContacts = students[i];
- } else if (students[i].getNumberContacts() == maxContacts.getNumberContacts()){
- if(students[i].getIndex() > maxContacts.getIndex()){
- maxContacts = students[i];
- }
- }
- }
- return maxContacts;
- }
- public String toString(){
- StringBuffer sb = new StringBuffer();
- sb.append(String.format("{\"fakultet\":\"%s\", \"studenti\":[", name));
- for(int i = 0; i < students.length - 1; i++){
- sb.append(students[i].toString());
- sb.append(", ");
- }
- sb.append(students[students.length-1].toString());
- 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