Martina312

[НП] - Контакти

Jan 27th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.65 KB | None | 0 0
  1. import java.text.DecimalFormat;
  2. import java.util.Scanner;
  3. import java.lang.Enum;
  4.  
  5. abstract class Contact{
  6. private String date;
  7.  
  8. public Contact(String date){
  9. this.date=date;
  10. }
  11. //da se razgleda ova
  12. public boolean isNewerThan(Contact c){
  13. if(this.date.compareTo(c.getDate())>0)
  14. return true;
  15. else return false;
  16. }
  17.  
  18. public String getDate(){
  19. return date;
  20. }
  21.  
  22. public abstract String getType();
  23. }
  24.  
  25. class EmailContact extends Contact{
  26. private String email;
  27.  
  28. public EmailContact(String date, String email){
  29. super(date);
  30. this.email=email;
  31. }
  32.  
  33. public String getEmail() {
  34. return email;
  35. }
  36.  
  37. @Override
  38. public String getType() {
  39. return "Email";
  40. }
  41. }
  42.  
  43. class PhoneContact extends Contact{
  44. private String phoneNumber;
  45. public enum Operator {VIP, ONE, TMOBILE};
  46.  
  47. public PhoneContact(String date, String phoneNumber) {
  48. super(date);
  49. this.phoneNumber = phoneNumber;
  50. }
  51.  
  52. public String getPhone() {
  53. return phoneNumber;
  54. }
  55. public Operator getOperator(){
  56. if(phoneNumber.charAt(2)=='0' || phoneNumber.charAt(2)=='1' || phoneNumber.charAt(2)=='2')
  57. return Operator.TMOBILE;
  58. else if(phoneNumber.charAt(2)=='5' || phoneNumber.charAt(2)=='6')
  59. return Operator.ONE;
  60. else
  61. return Operator.VIP;
  62. }
  63. @Override
  64. public String getType() {
  65. return "Phone";
  66. }
  67. }
  68.  
  69. class Student{
  70. private String firstName;
  71. private String lastName;
  72. private String city;
  73. private int age;
  74. private long index;
  75. private Contact[]contacts;
  76. private int numE;
  77. private int numP;
  78.  
  79. public Student(String firstName, String lastName, String city, int age, long index) {
  80. this.firstName = firstName;
  81. this.lastName = lastName;
  82. this.city = city;
  83. this.age = age;
  84. this.index = index;
  85. numE=numP=0;
  86. contacts=new Contact[0];
  87. }
  88.  
  89. public void addEmailContact(String date, String email){
  90. numE++;
  91. Contact [] tmp=new Contact[contacts.length+1];
  92. for(int i=0;i<contacts.length;i++){
  93. tmp[i]=contacts[i];
  94. }
  95. tmp[contacts.length]=new EmailContact(date,email);
  96. contacts=tmp;
  97. }
  98.  
  99. public void addPhoneContact(String date, String phone){
  100. numP++;
  101. Contact [] tmp=new Contact[contacts.length+1];
  102. for(int i=0;i<contacts.length;i++){
  103. tmp[i]=contacts[i];
  104. }
  105. tmp[contacts.length]=new PhoneContact(date,phone);
  106. contacts=tmp;
  107. }
  108.  
  109. public Contact[] getEmailContacts(){
  110. Contact [] ec=new Contact[numE];
  111. int i=0;
  112. for(Contact c:contacts){
  113. if(c.getType().equals("Email")){
  114. ec[i]=c;
  115. i++;
  116. }
  117. }
  118. return ec;
  119. }
  120. public Contact[] getPhoneContacts(){
  121. Contact [] pc=new Contact[numP];
  122. int i=0;
  123. for(Contact c:contacts){
  124. if(c.getType().equals("Phone")){
  125. pc[i]=c;
  126. i++;
  127. }
  128. }
  129. return pc;
  130. }
  131.  
  132. public String getCity() {
  133. return city;
  134. }
  135.  
  136. public String getFullName(){
  137. return firstName+" "+lastName;
  138. }
  139.  
  140. public int getNumContacts(){
  141. return contacts.length;
  142. }
  143.  
  144. public long getIndex() {
  145. return index;
  146. }
  147.  
  148. public Contact getLatestContact(){
  149. Contact latest=contacts[0];
  150.  
  151. for(int i=1;i<contacts.length;i++){
  152. if(contacts[i].isNewerThan(latest)){
  153. latest=contacts[i];
  154. }
  155. }
  156. return latest;
  157. }
  158.  
  159. public String toString(){
  160. StringBuilder sb=new StringBuilder();
  161. Contact [] ec=getEmailContacts();
  162. sb.append("{\"ime\":\""+firstName+"\", \"prezime\":\""+lastName+"\", \"vozrast\":"+age+", \"grad\":\""+city+"\", \"indeks\":"+index+", \"telefonskiKontakti\":[");
  163.  
  164. Contact [] emc=getEmailContacts();
  165. Contact [] phc=getPhoneContacts();
  166. for(int i=0;i<phc.length;i++){
  167. PhoneContact ph= (PhoneContact) phc[i];
  168. if(i==phc.length-1){
  169. sb.append("\""+ph.getPhone()+"\"");
  170. }
  171. else
  172. sb.append("\""+ph.getPhone()+"\", ");
  173. }
  174. sb.append("], \"emailKontakti\":[");
  175. for(int i=0;i<emc.length;i++){
  176. EmailContact em= (EmailContact) emc[i];
  177. if(i==emc.length-1)
  178. sb.append("\""+em.getEmail()+"\"");
  179. else
  180. sb.append("\""+em.getEmail()+"\", ");
  181. }
  182. sb.append("]}");
  183. return sb.toString();
  184. }
  185. }
  186.  
  187. class Faculty{
  188. private String name;
  189. private Student [] students;
  190.  
  191. public Faculty(String name, Student[] students) {
  192. this.name = name;
  193. this.students = students;
  194. }
  195.  
  196. public int countStudentsFromCity(String cityName){
  197. int count=0;
  198. for(Student s:students){
  199. if(s.getCity().equals(cityName))
  200. count++;
  201. }
  202. return count;
  203. }
  204.  
  205. public Student getStudent(long index){
  206. for(Student s:students){
  207. if(s.getIndex()==index)
  208. return s;
  209. }
  210. return null;
  211. }
  212.  
  213. public double getAverageNumberOfContacts(){
  214. int sum=0;
  215. for(Student s:students){
  216. sum+=s.getNumContacts();
  217. }
  218. return (double) sum / students.length;
  219. }
  220.  
  221. public Student getStudentWithMostContacts(){
  222. Student max=students[0];
  223.  
  224. for(int i=1;i<students.length;i++){
  225. if(students[i].getNumContacts()>max.getNumContacts()){
  226. max=students[i];
  227. }
  228. else if(students[i].getNumContacts()==max.getNumContacts()){
  229. if(students[i].getIndex()>max.getIndex()){
  230. max=students[i];
  231. }
  232. }
  233. }
  234. return max;
  235. }
  236.  
  237. public String toString(){
  238. StringBuilder sb=new StringBuilder();
  239. sb.append("{\"fakultet\":\""+name+"\", \"studenti\":[");
  240. for(int i=0;i<students.length;i++){
  241. if(i==students.length-1)
  242. sb.append(students[i].toString()+"]}");
  243. else
  244. sb.append(students[i].toString()+", ");
  245. }
  246. return sb.toString();
  247. }
  248. }
  249. public class ContactsTester {
  250.  
  251. public static void main(String[] args) {
  252. Scanner scanner = new Scanner(System.in);
  253.  
  254. int tests = scanner.nextInt();
  255. Faculty faculty = null;
  256.  
  257. int rvalue = 0;
  258. long rindex = -1;
  259.  
  260. DecimalFormat df = new DecimalFormat("0.00");
  261.  
  262. for (int t = 0; t < tests; t++) {
  263.  
  264. rvalue++;
  265. String operation = scanner.next();
  266.  
  267. switch (operation) {
  268. case "CREATE_FACULTY": {
  269. String name = scanner.nextLine().trim();
  270. int N = scanner.nextInt();
  271.  
  272. Student[] students = new Student[N];
  273.  
  274. for (int i = 0; i < N; i++) {
  275. rvalue++;
  276.  
  277. String firstName = scanner.next();
  278. String lastName = scanner.next();
  279. String city = scanner.next();
  280. int age = scanner.nextInt();
  281. long index = scanner.nextLong();
  282.  
  283. if ((rindex == -1) || (rvalue % 13 == 0))
  284. rindex = index;
  285.  
  286. Student student = new Student(firstName, lastName, city,
  287. age, index);
  288. students[i] = student;
  289. }
  290.  
  291. faculty = new Faculty(name, students);
  292. break;
  293. }
  294.  
  295. case "ADD_EMAIL_CONTACT": {
  296. long index = scanner.nextInt();
  297. String date = scanner.next();
  298. String email = scanner.next();
  299.  
  300. rvalue++;
  301.  
  302. if ((rindex == -1) || (rvalue % 3 == 0))
  303. rindex = index;
  304.  
  305. faculty.getStudent(index).addEmailContact(date, email);
  306. break;
  307. }
  308.  
  309. case "ADD_PHONE_CONTACT": {
  310. long index = scanner.nextInt();
  311. String date = scanner.next();
  312. String phone = scanner.next();
  313.  
  314. rvalue++;
  315.  
  316. if ((rindex == -1) || (rvalue % 3 == 0))
  317. rindex = index;
  318.  
  319. faculty.getStudent(index).addPhoneContact(date, phone);
  320. break;
  321. }
  322.  
  323. case "CHECK_SIMPLE": {
  324. System.out.println("Average number of contacts: "
  325. + df.format(faculty.getAverageNumberOfContacts()));
  326.  
  327. rvalue++;
  328.  
  329. String city = faculty.getStudent(rindex).getCity();
  330. System.out.println("Number of students from " + city + ": "
  331. + faculty.countStudentsFromCity(city));
  332.  
  333. break;
  334. }
  335.  
  336. case "CHECK_DATES": {
  337.  
  338. rvalue++;
  339.  
  340. System.out.print("Latest contact: ");
  341. Contact latestContact = faculty.getStudent(rindex)
  342. .getLatestContact();
  343. if (latestContact.getType().equals("Email"))
  344. System.out.println(((EmailContact) latestContact)
  345. .getEmail());
  346. if (latestContact.getType().equals("Phone"))
  347. System.out.println(((PhoneContact) latestContact)
  348. .getPhone()
  349. + " ("
  350. + ((PhoneContact) latestContact).getOperator().toString() + ")");
  351.  
  352. if (faculty.getStudent(rindex).getEmailContacts().length > 0&&faculty.getStudent(rindex).getPhoneContacts().length > 0) {
  353. System.out.print("Number of email and phone contacts: ");
  354. System.out
  355. .println(faculty.getStudent(rindex)
  356. .getEmailContacts().length
  357. + " "
  358. + faculty.getStudent(rindex)
  359. .getPhoneContacts().length);
  360.  
  361. System.out.print("Comparing dates: ");
  362. int posEmail = rvalue
  363. % faculty.getStudent(rindex).getEmailContacts().length;
  364. int posPhone = rvalue
  365. % faculty.getStudent(rindex).getPhoneContacts().length;
  366.  
  367. System.out.println(faculty.getStudent(rindex)
  368. .getEmailContacts()[posEmail].isNewerThan(faculty
  369. .getStudent(rindex).getPhoneContacts()[posPhone]));
  370. }
  371.  
  372. break;
  373. }
  374.  
  375. case "PRINT_FACULTY_METHODS": {
  376. System.out.println("Faculty: " + faculty.toString());
  377. System.out.println("Student with most contacts: "
  378. + faculty.getStudentWithMostContacts().toString());
  379. break;
  380. }
  381.  
  382. }
  383.  
  384. }
  385.  
  386. scanner.close();
  387. }
  388. }
Add Comment
Please, Sign In to add comment