Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Класи, полиморфизам и исклучоци (2)
- Контакти Problem 2 (0 / 6)
- Се со цел да се подобри комуникацијата на факултетот потребно е да се направи систем за чување на контакти за секој студент.
- Да се креира класа Contact. За потребите на оваа класа да се дефинираат следниве методи:
- Contact(String date) - конструктор каде што date е датумот кога е креиран контактот даден во следниов формат YYYY-MM-DD
- isNewerThan(Contact c):boolean - метод кој враќа true доколку контактот е креиран подоцна од контактот c и обратно
- getType():String - метод кој враќа вредност "Email" или "Phone" во зависност од типот на контактот
- Од класата Contact не треба да може директно да се инстанцира објект.
- Од оваа класа се изведуваат класите EmailContact и PhoneContact.
- За класата EmailContact дополнително се чува e-маил кој што е од типот String. Да се дефинираат следниве методи:
- EmailContact(String date, String email) - конструктор
- getEmail():String - метод кој што го враќа е-маилот
- getType():String- имплементација на методот од класата Contact
- За класата PhoneContact дополнително се чува телефонски број кој што е од типот String и оператор кој што е енумерација
- и се дефинира на следниов начин enum Operator { VIP, ONE, TMOBILE }. За оваа класа да се дефинираат следниве методи:
- PhoneContact(String date, String phone) - конструктор
- getPhone():String - метод кој што го враќа телефонскиот број
- getOperator():Operator - метод кој што го враќа операторот (070, 071, 072 – TMOBILE, 075,076 – ONE, 077, 078 – VIP)
- getType():String- имплементација на методот од класата Contact
- *Забелешка: Сите телефонски броеви се во формат 07X/YYY-ZZZ каде што X има вредност {0,1,2,5,6,7,8}
- Потоа да се дефинира класата Student каде што се чува низа на контакти за секој студент
- Student(String firstName, String lastName, String city, int age, long index) – конструктор
- addEmailContact(String date, String email):void – метод што додава е-маил контакт во низата на контакти
- addPhoneContact(String date, String phone):void – метод што додава телефонски контакт во низата на контакти
- getEmailContacts():Contact[] – враќа низа на email контактите на студентот
- getPhoneContacts():Contact[] – враќа низа на phone контактите на студентот
- getCity():String - метод кој го враќа градот
- getFullName():String - метод кој го враќа целосното име на студентот во формат IME PREZIME
- getIndex():long - метод кој го враќа индексот на студентот
- getLatestContact():Contact – го враќа најновиот контакт (според датум) од студентот
- toString() – претставува JSON репрезентација на класата студент пр. {"ime":"Jovan", "prezime":"Jovanov", "vozrast":20,
- "grad":"Skopje", "indeks":101010, "telefonskiKontakti":["077/777-777", "078/888-888"], "emailKontakti":
- ["jovan.jovanov@example.com", "jovanov@jovan.com", "jovan@jovanov.com"]}
- *Забелешка: Во класата Student да се чува само една низа од контакти Contact[], а не две низи одделно (PhoneContact[]
- * и EmailContact[])
- *Напомена да не се користи instanceOf или getClass при имплементација на овие методи
- Дополнително да се дефинира класа Faculty. За оваа класа да се дефинираат следниве методи:
- Faculty(String name, Student [] students) – конструктор
- countStudentsFromCity(String cityName):int – враќа колку студенти има од даден град
- getStudent(long index):Student – метод кој го враќа студентот кој го има дадениот индекс
- getAverageNumberOfContacts():double – враќа просечен број на контакти по студент
- getStudentWithMostContacts():Student – метод кој го враќа студентот со најмногу контакти (доколку има повеќе студенти со
- ист број на контакти да го врати студентот со најголем индекс)
- toString() – претставува JSON репрезентација на класата Faculty пример: {"fakultet":"FINKI", "studenti":
- [STUDENT1, STUDENT2, ...]} каде што треба да има целосни информации за секој студент.
- Sample input
- 4
- CREATE_FACULTY Ekonomski fakultet
- 3
- Sanja Mihova Skopje 21 82907017
- Emil Stankov Bitola 29 43009931
- Emil Trajanov Bitola 29 24914336
- ADD_EMAIL_CONTACT 82907017 2012-04-10 sanja@ef.ukim.mk
- ADD_PHONE_CONTACT 82907017 2010-03-05 070/744-235
- CHECK_SIMPLE
- Sample output
- Average number of contacts: 0.67
- Number of students from Skopje: 1
- */
- import java.text.DecimalFormat;
- import java.util.Arrays;
- import java.util.Scanner;
- import java.time.Year;
- abstract class Contact {
- private String date; //YYYY-MM-DD
- private final int day;
- private final int month;
- private final int year;
- public Contact(String date){
- this.date = date;
- year = Integer.parseInt(date.substring(0,4));
- month = Integer.parseInt(date.substring(5,7));
- day = Integer.parseInt(date.substring(8,10));
- }
- public boolean isNewerThan(Contact c){
- if (year > c.year)
- return true;
- if (year < c.year)
- return false;
- if (month > c.month)
- return true;
- if (month < c.month)
- return false;
- if (day > c.day)
- return true;
- return false;
- }
- 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 phone; //Сите телефонски броеви се во формат 07X/YYY-ZZZ каде што X има вредност {0,1,2,5,6,7,8}
- enum Operator {VIP, ONE, TMOBILE}
- public PhoneContact(String date, String phone) {
- super(date);
- this.phone = phone;
- }
- public String getPhone() {
- return phone;
- }
- public Operator getOperator(){
- //070, 071, 072 – TMOBILE, 075,076 – ONE, 077, 078 – VIP
- 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;
- }
- @Override
- public String getType() {
- return "Phone";
- }
- }
- class Student {
- private String firstName;
- private String lastName;
- private String city;
- private int age;
- private long index;
- Contact[] contacts;
- private int contactsNumber;
- 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;
- contactsNumber = 0;
- emailContacts = 0;
- phoneContacts = 0;
- }
- public void addEmailContact(String date, String email){
- Contact[] tmp = new Contact[contactsNumber+1];
- for (int i=0; i<contactsNumber; i++){
- tmp[i] = contacts[i];
- }
- tmp[contactsNumber++] = new EmailContact(date,email);
- contacts = tmp;
- emailContacts++;
- }
- public void addPhoneContact(String date, String phone){
- Contact[] tmp = new Contact[contactsNumber + 1];
- for (int i=0; i<contactsNumber; i++){
- tmp[i] = contacts[i];
- }
- tmp[contactsNumber++] = new PhoneContact(date,phone);
- contacts = tmp;
- phoneContacts++;
- }
- public Contact[] getEmailContacts(){
- Contact[] tmp = new EmailContact[emailContacts];
- int counter = 0;
- for (Contact c:contacts) {
- if (c.getType().equals("Email")){
- tmp[counter++] = c;
- }
- }
- return tmp;
- }
- public Contact[] getPhoneContacts(){
- Contact[] tmp = new PhoneContact[phoneContacts];
- int counter = 0;
- for (Contact c:contacts) {
- if (c.getType().equals("Phone")){
- tmp[counter++] = c;
- }
- }
- return tmp;
- }
- public Contact getLatestContact(){
- int newestIndex = 0;
- for (int i=1; i<contactsNumber; i++){
- if (contacts[i].isNewerThan(contacts[newestIndex])){
- newestIndex = i;
- }
- }
- return contacts[newestIndex];
- }
- public String getFullName() {
- return (firstName + " " + lastName).toUpperCase();
- }
- public String getCity() {
- return city;
- }
- public long getIndex() {
- return index;
- }
- @Override
- public String toString() {
- //JSON reprezentacija
- StringBuilder sb = new StringBuilder();
- sb.append("{\"ime\":\"").append(firstName).append("\", \"prezime\":\"").append(lastName);
- sb.append("\", \"vozrast\":").append(age).append(", \"grad\":\"").append(city);
- sb.append("\", \"indeks\":").append(index).append(", \"telefonskiKontakti\":[");
- PhoneContact[] pc = (PhoneContact[]) getPhoneContacts();
- for (int i=0; i<phoneContacts-1; i++){
- sb.append("\"").append(pc[i].getPhone()).append("\", ");
- }
- if (phoneContacts>0)
- sb.append("\"").append(pc[phoneContacts-1].getPhone()).append("\"");
- sb.append("], ");
- sb.append("\"emailKontakti\":[");
- EmailContact[] ec = (EmailContact[]) getEmailContacts();
- for (int i=0; i<emailContacts-1; i++){
- sb.append("\"").append(ec[i].getEmail()).append("\", ");
- }
- if (emailContacts>0)
- sb.append("\"").append(ec[emailContacts-1].getEmail()).append("\"");
- sb.append("]}");
- return sb.toString();
- }
- public int getContactsNumber() {
- return contactsNumber;
- }
- }
- 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 (cityName.equals(s.getCity()))
- count++;
- }
- return count;
- }
- public Student getStudent(long index){
- int ind = -1;
- for (int i=0; i<students.length; i++){
- if (students[i].getIndex() == index){
- ind = i;
- break;
- }
- }
- return students[ind];
- }
- public double getAverageNumberOfContacts(){
- double sum = 0;
- for (Student s:students) {
- sum += s.getContactsNumber();
- }
- return sum/students.length;
- }
- public Student getStudentWithMostContacts(){
- int maxIndex = 0;
- int maxContactsNumber = students[0].contacts.length;
- for (int i=1; i<students.length; i++){
- if (students[i].contacts.length > maxContactsNumber){
- maxContactsNumber = students[i].contacts.length;
- maxIndex = i;
- }
- else if (students[i].contacts.length == maxContactsNumber){
- if (students[i].getIndex() > students[maxIndex].getIndex()){
- maxContactsNumber = students[i].contacts.length;
- maxIndex = i;
- }
- }
- }
- return students[maxIndex];
- }
- @Override
- public String toString() {
- //JSON reprezentacija
- 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()
- .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