Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Се со цел да се подобри комуникацијата на факултетот потребно е да се направи систем за чување на контакти за секој студент.
- Да се креира класа 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":["[email protected]", "[email protected]", "[email protected]"]}
- *Забелешка: Во класата 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, ...]} каде што треба да има целосни информации за секој студент.
- import java.util.Arrays;
- import java.text.DecimalFormat;
- import java.text.ParseException;
- import java.util.Scanner;
- class PhoneContact extends Contact{
- private String phone;
- enum Operator {
- VIP,
- ONE,
- TMOBILE
- }
- Operator TYPE_OPERATOR;
- public PhoneContact(String date, String phone) {
- super(date);
- //07X/YYY-ZZZ
- this.phone = phone;
- switch(phone.charAt(2)){
- case '0':
- case '1':
- case '2':
- TYPE_OPERATOR = Operator.TMOBILE;
- break;
- case '5':
- case '6':
- TYPE_OPERATOR = Operator.ONE;
- break;
- case '7':
- case '8':
- TYPE_OPERATOR = Operator.VIP;
- break;
- default:
- break;
- }
- }
- public PhoneContact(PhoneContact pc){
- super(pc);
- this.phone = pc.phone;
- this.TYPE_OPERATOR = pc.TYPE_OPERATOR;
- }
- public String getPhone() {
- return phone;
- }
- public Operator getOperator() {
- return TYPE_OPERATOR;
- }
- @Override
- public String getType() {
- return "Phone";
- }
- @Override
- public String getContact() {
- return phone;
- }
- }
- class Student {
- private Contact [] kontakti;
- private String firstName;
- private String lastName;
- private String city;
- private int age;
- private long index;
- private int indeksvoniza;
- private int numberEmailContacts;
- private int numberPhoneContacts;
- 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;
- kontakti = new Contact[0];
- this.indeksvoniza = 0;
- this.numberEmailContacts = 0;
- this.numberPhoneContacts = 0;
- }
- public void addEmailContact(String date, String email) {
- Contact [] pom = new Contact[kontakti.length+1];
- for (int i = 0; i < kontakti.length; i++)
- pom[i] = kontakti[i];
- Contact c = new EmailContact(date,email);
- numberEmailContacts++;
- kontakti = pom;
- kontakti[kontakti.length-1] = c;
- }
- public void addPhoneContact(String date, String phone) {
- Contact [] pom = new Contact[kontakti.length+1];
- for (int i = 0; i < kontakti.length; i++)
- pom[i] = kontakti[i];
- Contact c = new PhoneContact(date,phone);
- numberPhoneContacts++;
- kontakti = pom;
- kontakti[kontakti.length-1] = c;
- }
- public int getNumberEmailContacts() {
- return numberEmailContacts;
- }
- public int getNumberPhoneContacts() {
- return numberPhoneContacts;
- }
- public Contact [] getEmailContacts(){
- Contact [] c = new EmailContact[numberEmailContacts];
- int k = 0;
- for (int i = 0; i < kontakti.length; i++) {
- if(kontakti[i].getType().equals("Email"))
- c[k++] = kontakti[i];
- }
- return c;
- }
- public Contact [] getPhoneContacts(){
- Contact [] c = new PhoneContact[numberPhoneContacts];
- int k = 0;
- for (int i = 0; i < kontakti.length; i++) {
- if(kontakti[i].getType().equals("Phone"))
- c[k++] = kontakti[i];
- }
- return c;
- }
- public String getCity(){
- return city;
- }
- public String getFullName(){
- return String.format("%s %s",firstName,lastName);
- }
- public long getIndex(){
- return index;
- }
- private static String withSign(String a) {
- return "\"" + a + "\"";
- }
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{");
- sb.append(withSign("ime")).append(":").append(withSign(firstName)).append(", ").append(withSign("prezime"));
- sb.append(":").append(withSign(lastName)).append(", ").append(withSign("vozrast")).append(":").append(age);
- sb.append(", ").append(withSign("grad")).append(":").append(withSign(city)).append(", ").append(withSign("indeks"));
- sb.append(":").append(index).append(", ").append(withSign("telefonskiKontakti")).append(":[");
- int counter =0;
- for (int i=0; i < kontakti.length; ++i) {
- if (kontakti[i].getType().equals("Phone")) {
- sb.append(withSign(kontakti[i].getContact()));
- ++counter;
- if (counter < numberPhoneContacts)
- sb.append(", ");
- }
- if (counter == numberPhoneContacts){
- sb.append("]");
- break;
- }
- }
- sb.append(", ");
- sb.append(withSign("emailKontakti")).append(":[");
- counter =0;
- for (int i=0; i < kontakti.length; ++i) {
- if (kontakti[i].getType().equals("Email")) {
- sb.append(withSign(kontakti[i].getContact()));
- ++counter;
- if (counter < numberEmailContacts)
- sb.append(", ");
- }
- if (counter == numberEmailContacts) {
- sb.append("]}");
- break;
- }
- }
- return sb.toString();
- }
- public Contact getLatestContact() {
- Contact latest = kontakti[0];
- for (int i=1; i<kontakti.length; ++i) {
- if (kontakti[i].isNewerThan(latest))
- latest = kontakti[i];
- }
- if (latest.getType().equals("Email"))
- latest = new EmailContact((EmailContact)latest);
- else
- latest = new PhoneContact((PhoneContact)latest);
- return latest;
- }
- }
- class Faculty {
- private String nameFaculty;
- private Student[] students;
- public Faculty(String name, Student[] students) {
- this.students = Arrays.copyOf(students, students.length);
- nameFaculty = name;
- }
- public int countStudentsFromCity(String cityName) {
- int brojac = 0;
- for (int i = 0; i < students.length; i++) {
- if (students[i].getCity().equals(cityName))
- brojac++;
- }
- return brojac;
- }
- public Student getStudent(long index) {
- for (Student student :
- students) {
- if (student.getIndex() == index)
- return student;
- }
- return null;
- }
- public double getAverageNumberOfContacts() {
- int vkupenbrStudenti = students.length;
- int brojkontakti = 0;
- for (Student student : students) {
- brojkontakti += student.getNumberEmailContacts() + student.getNumberPhoneContacts();
- }
- return (float)brojkontakti / vkupenbrStudenti;
- }
- public Student getStudentWithMostContacts(){
- Student maxStudent = null;
- int maxKontakti = -10;
- for(Student s : students){
- if(s.getNumberPhoneContacts()+s.getNumberEmailContacts() > maxKontakti) {
- maxKontakti = s.getNumberPhoneContacts() + s.getNumberEmailContacts();
- maxStudent = s;
- }
- }
- for (Student s: students) {
- if(maxStudent!=null){
- if(maxStudent.getNumberEmailContacts() + maxStudent.getNumberPhoneContacts() == s.getNumberEmailContacts() + s.getNumberPhoneContacts()){
- if(maxStudent.getIndex() < s.getIndex()){
- maxStudent = s;
- }
- }
- }
- }
- return maxStudent;
- }
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{\"fakultet\":\"").append(nameFaculty).append("\", \"studenti\":[");
- for (int i=0; i<students.length; ++i){
- sb.append(students[i].toString());
- if (i+1 != students.length)
- sb.append(", ");
- }
- sb.append("]}");
- return sb.toString();
- }
- }
- abstract class Contact {
- protected final int day;
- protected final int month;
- protected final int year;
- protected String celString;
- public Contact(String date) {
- celString = date;
- year = Integer.parseInt(date.substring(0,4));
- month = Integer.parseInt(date.substring(5,7));
- day = Integer.parseInt(date.substring(8,10));
- }
- public Contact(Contact c) {
- day = c.day;
- month = c.month;
- year = c.year;
- }
- public boolean isNewerThan(Contact c) {
- if (year > c.year)
- return true;
- if (year == c.year&&month > c.month)
- return true;
- return year == c.year && month == c.month && day > c.day;
- }
- public abstract String getType();
- public abstract String getContact();
- }
- class EmailContact extends Contact {
- private String email;
- public EmailContact(String date, String email) {
- super(date);
- this.email = email;
- }
- public EmailContact(EmailContact ec){
- super(ec);
- this.email = ec.email;
- }
- public String getEmail() {
- return email;
- }
- @Override
- public String getType() {
- return "Email";
- }
- @Override
- public String getContact() {
- return email;
- }
- }
- 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();
- }
- }
- 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 [email protected]
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement