Advertisement
jovanovski

НП ЛБ2

Oct 20th, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.16 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.FileReader;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import java.util.Scanner;
  7.  
  8. //------------------------------------------------
  9. //EXCEPTIONS
  10.  
  11. @SuppressWarnings("serial")
  12. class InvalidNumberException extends Exception {
  13.     public InvalidNumberException (String number) {
  14.     super("This is not a valid number: "+ number);
  15.     }
  16. }
  17.  
  18. @SuppressWarnings("serial")
  19. class MissingEssentialInformationException extends Exception {
  20.     public MissingEssentialInformationException(String razlog){
  21.         super(razlog);
  22.     }
  23. }
  24.  
  25. @SuppressWarnings("serial")
  26. class ContactAlreadyExsistsException extends Exception {
  27.     public ContactAlreadyExsistsException(String name){
  28.         super("Vekje postoi kontakt so ime '" + name + "' i preklopuvacki broj!");
  29.     }
  30. }
  31.  
  32. //END EXCEPTIONS
  33. //-------------------------------------------------
  34.  
  35.  
  36. //CLASS ADDRESS -----------------------------------
  37. class Address {
  38.     String ulica;
  39.     String broj;
  40.     String grad;
  41.     String drzava;
  42.    
  43.     public Address(){
  44.         ulica = "";
  45.         broj = "";
  46.         grad = "";
  47.         drzava = "";
  48.     }
  49.    
  50.     public Address(String ulica, String broj, String grad, String drzava){
  51.         this.ulica = ulica;
  52.         this.broj = broj;
  53.         this.grad = grad;
  54.         this.drzava = drzava;
  55.     }
  56.    
  57.     @Override
  58.     public String toString(){
  59.         return "Ulica: " + this.ulica + ", Broj: " + this.broj + ", Grad: " + this.grad + ", Drzava: " + this.drzava;
  60.     }
  61.    
  62. }
  63. //END CLASS ADDRESS -----------------------------------
  64.  
  65. //CLASS PHONENUMBER -----------------------------------
  66. class PhoneNumber{
  67.     String number;
  68.    
  69.     public PhoneNumber(){
  70.         number = "";
  71.     }
  72.    
  73.     public PhoneNumber(String number) throws InvalidNumberException{
  74.         if(number.equals("")) this.number = "";
  75.         else {
  76.         for(int i=0;i<number.length();i++){
  77.             if(!Character.isDigit(number.charAt(i)))
  78.                 throw new InvalidNumberException(number);
  79.         }
  80.         this.number = number;
  81.         }
  82.     }
  83.    
  84.     public String getPhoneNumber(){
  85.         return this.number;
  86.     }
  87.    
  88.     public void setPhoneNumber(String number) throws InvalidNumberException{
  89.         for(int i=0;i<number.length();i++){
  90.             if(!Character.isDigit(number.charAt(i)))
  91.                 throw new InvalidNumberException(number);
  92.         }
  93.         this.number = number;
  94.     }
  95.    
  96.     @Override
  97.     public String toString(){
  98.         return this.number;
  99.     }
  100.    
  101.    
  102. }
  103. //END CLASS PHONENUMBER -----------------------------------
  104.  
  105. //CLASS CONTACT -----------------------------------
  106.  
  107. class Contact{
  108.    
  109.     String ime;
  110.     String prezime;
  111.     Address adresa;
  112.     PhoneNumber domasen;
  113.     PhoneNumber mobilen;
  114.     PhoneNumber drug;
  115.     String email;
  116.    
  117.     public Contact(String ime, String prezime, Address adresa, PhoneNumber domasen, PhoneNumber mobilen, PhoneNumber drug,  String email) throws MissingEssentialInformationException {
  118.         this.ime = ime;
  119.         this.prezime = prezime;
  120.         if((this.ime.equals(""))&&(this.prezime.equals("")))
  121.             throw new MissingEssentialInformationException("Mora da e specificirano bar ime ILI bar prezime");
  122.         this.adresa = adresa;
  123.        
  124.         if(domasen == null)
  125.             try {
  126.                 this.domasen = new PhoneNumber("");
  127.             } catch (InvalidNumberException e) {
  128.                 System.out.println("OPA: " + e.getMessage());
  129.             }
  130.         else this.domasen = domasen;
  131.        
  132.         if(mobilen == null)
  133.             try {
  134.                 this.mobilen = new PhoneNumber("");
  135.             } catch (InvalidNumberException e) {
  136.                 System.out.println("OPA: " + e.getMessage());
  137.             }
  138.         else this.mobilen = mobilen;
  139.        
  140.         if(drug == null)
  141.             try {
  142.                 this.drug = new PhoneNumber("");
  143.             } catch (InvalidNumberException e) {
  144.                 System.out.println("OPA: " + e.getMessage());
  145.             }
  146.         else this.drug = drug;
  147.         if((this.domasen.getPhoneNumber().equals(""))&&(this.mobilen.getPhoneNumber().equals(""))&&(this.drug.getPhoneNumber().equals("")))
  148.             throw new MissingEssentialInformationException("Mora da e specificiran bar eden telefonski broj");
  149.         this.email = email;
  150.     }
  151.    
  152.     @Override
  153.     public String toString(){
  154.         String finalno = "";
  155.         if(!(this.ime.equals(""))) finalno += "Ime: " + this.ime;
  156.         if(!(this.prezime.equals(""))) finalno += "\nPrezime: " + this.prezime;
  157.         finalno += "\nAdresa: " + this.adresa;
  158.         if(!(this.domasen.getPhoneNumber().equals(""))) finalno += "\nDomasen: " + this.domasen;
  159.         if(!(this.mobilen.getPhoneNumber().equals(""))) finalno += "\nMobilen: " + this.mobilen;
  160.         if(!(this.drug.getPhoneNumber().equals(""))) finalno += "\nDrug: " + this.drug;
  161.         if(!(this.email.equals(""))) finalno += "\nEmail: " + this.email;
  162.         finalno += "\n ---------------------------";
  163.         return finalno;
  164.         }
  165.    
  166.  
  167. }
  168.  
  169.  
  170. //END CLASS CONTACT -----------------------------------
  171.  
  172.  
  173.  
  174.  
  175.  
  176. //CLASS PHONEBOOK -----------------------------------
  177.  
  178. class Phonebook {
  179.     Contact [] kontakti;
  180.     int brojNaKontakti;
  181.  
  182.     public Phonebook(){
  183.         kontakti = new Contact[100];
  184.         brojNaKontakti = 0;
  185.     }
  186.    
  187.     public void sort(){
  188.         for(int j = 0; j < brojNaKontakti; j++) {
  189.             for(int i = j + 1; i < brojNaKontakti; i++) {
  190.                 String imeprezime1 = kontakti[i].prezime + kontakti[i].ime;
  191.                 String imeprezime2 = kontakti[j].prezime + kontakti[j].ime;
  192.                 if(imeprezime1.toLowerCase().compareTo(imeprezime2.toLowerCase()) < 0) {
  193.                 Contact t = kontakti[j];
  194.                 kontakti[j] = kontakti[i];
  195.                 kontakti[i] = t;
  196.                 }
  197.             }
  198.         }
  199.     }
  200.    
  201.     public void addContact(Contact kontakt) throws ContactAlreadyExsistsException{
  202.         boolean merged = false;
  203.         for(int i=0;i<brojNaKontakti;i++){
  204.             if((kontakti[i].ime.equals(kontakt.ime))&&(kontakti[i].prezime.equals(kontakt.prezime))&&
  205.                     (kontakti[i].adresa.equals(kontakt.adresa)))
  206.             {
  207.                
  208.                 if(!mergeContacts(kontakti[i], kontakt)) throw new ContactAlreadyExsistsException(kontakt.ime);
  209.                 merged = true;
  210.                 break;
  211.             }
  212.            
  213.         }
  214.        
  215.         if(!merged){
  216.             kontakti[brojNaKontakti] = kontakt;
  217.             brojNaKontakti++;
  218.         }
  219.        
  220.        
  221.     }
  222.    
  223.     public boolean mergeContacts(Contact a, Contact b){
  224.        
  225.         if(!(a.domasen.getPhoneNumber().equals(""))&&!(b.domasen.getPhoneNumber().equals(""))) return false;
  226.         if(!(a.mobilen.getPhoneNumber().equals(""))&&!(b.mobilen.getPhoneNumber().equals(""))) return false;
  227.         if(!(a.drug.getPhoneNumber().equals(""))&&!(b.drug.getPhoneNumber().equals(""))) return false;
  228.        
  229.         if(a.domasen.getPhoneNumber().equals("")) a.domasen = b.domasen;
  230.         if(a.mobilen.getPhoneNumber().equals("")) a.mobilen = b.mobilen;
  231.         if(a.drug.getPhoneNumber().equals("")) a.drug = b.drug;
  232.         return true;
  233.     }
  234.    
  235.     public void display(){
  236.         this.sort();
  237.         for(int i=0;i<brojNaKontakti;i++){
  238.             System.out.println(kontakti[i]);
  239.         }
  240.         System.out.println("----- Z END ------");
  241.     }
  242.    
  243.     public Contact[] searchContactByName(String query){
  244.         Contact [] rezultati = new Contact[100];
  245.         int brojNaRezultati = 0;
  246.        
  247.         for(int i=0;i<this.brojNaKontakti;i++){
  248.             if((kontakti[i].ime.toLowerCase().contains(query.toLowerCase()))||(kontakti[i].prezime.toLowerCase().contains(query.toLowerCase())))
  249.                 {
  250.                 rezultati[brojNaRezultati] = kontakti[i];
  251.                 brojNaRezultati++;
  252.                 }
  253.            
  254.         }
  255.        
  256.         Contact [] rezultatifinal = new Contact[brojNaRezultati];
  257.        
  258.         for(int i=0;i<brojNaRezultati;i++){
  259.             rezultatifinal[i] = rezultati[i];
  260.         }
  261.        
  262.         return rezultatifinal;
  263.     }
  264.    
  265.     public Contact[] searchContactByNumber(String query){
  266.         Contact [] rezultati = new Contact[100];
  267.         int brojNaRezultati = 0;
  268.        
  269.         for(int i=0;i<this.brojNaKontakti;i++){
  270.             if((kontakti[i].domasen.getPhoneNumber().equals(query))||(kontakti[i].mobilen.getPhoneNumber().equals(query))||(kontakti[i].drug.getPhoneNumber().equals(query)))
  271.                 {
  272.                 rezultati[brojNaRezultati] = kontakti[i];
  273.                 brojNaRezultati++;
  274.                 }
  275.            
  276.         }
  277.        
  278.         Contact [] rezultatifinal = new Contact[brojNaRezultati];
  279.        
  280.         for(int i=0;i<brojNaRezultati;i++){
  281.             rezultatifinal[i] = rezultati[i];
  282.         }
  283.        
  284.         return rezultatifinal;
  285.     }
  286.    
  287.     public void removeContact(Contact a){
  288.         for(int i=0;i<brojNaKontakti;i++){
  289.             if((kontakti[i].ime.equals(a.ime))&&(kontakti[i].prezime.equals(a.prezime))&&
  290.                     (kontakti[i].adresa.equals(a.adresa)))
  291.             {
  292.                 for(int j=i;j<brojNaKontakti-1;j++){
  293.                     kontakti[j] = kontakti[j+1];
  294.                 }
  295.                 kontakti[brojNaKontakti] = null;
  296.                 brojNaKontakti--;
  297.             }
  298.            
  299.         }
  300.     }
  301.    
  302.     public void saveToFile(String filename){
  303.         PrintWriter printWriter = null ;
  304.         try {
  305.             printWriter = new PrintWriter (new FileWriter(filename));
  306.             for (Contact kontakt : kontakti) {
  307.             if(kontakt==null) break;
  308.             printWriter.println(kontakt.ime+","+kontakt.prezime+","+kontakt.adresa.ulica+","+kontakt.adresa.broj+","+kontakt.adresa.grad+","+kontakt.adresa.drzava+","+kontakt.domasen.getPhoneNumber()+","+kontakt.mobilen.getPhoneNumber()+","+kontakt.drug.getPhoneNumber()+","+kontakt.email);
  309.             }
  310.         } catch (Exception e) {
  311.             e.printStackTrace();
  312.         } finally {
  313.             printWriter.close();
  314.         }
  315.        
  316.     }
  317.    
  318.     public void importFromFile(String filename) throws MissingEssentialInformationException, InvalidNumberException, ContactAlreadyExsistsException{
  319.         Scanner scanner = new Scanner(System.in);
  320.         BufferedReader fileReader = null;
  321.  
  322.         try {
  323.             fileReader = new BufferedReader(new FileReader(filename));
  324.             String line = null ;
  325.             while ((line = fileReader.readLine())!= null) {
  326.                 String [] parts = line.split(",");
  327.                 String [] delovi = new String[10];
  328.                 int i;
  329.                 for(i = 0 ; i<parts.length;i++){
  330.                     delovi[i] = parts[i];
  331.                 }
  332.                 while(i<delovi.length){
  333.                     delovi[i] = "";
  334.                     i++;
  335.                 }
  336.                 Address adresa = new Address(delovi[2], delovi[3], delovi[4], delovi[5]);
  337.                 Contact kontakt = new Contact(delovi[0], delovi[1], adresa, new PhoneNumber(delovi[6]), new PhoneNumber(delovi[7]), new PhoneNumber(delovi[8]), delovi[9]);
  338.                 this.addContact(kontakt);
  339.             }
  340.         } catch (IOException e) {
  341.             e.printStackTrace ();
  342.         } finally {
  343.             try {
  344.                 fileReader.close();
  345.             } catch (IOException e) {
  346.                 e.printStackTrace();
  347.             }
  348.         }
  349.  
  350.     }
  351.    
  352.     public void loadFromFile(String filename) throws MissingEssentialInformationException, InvalidNumberException, ContactAlreadyExsistsException{
  353.         Scanner scanner = new Scanner(System.in);
  354.         BufferedReader fileReader = null;
  355.         Phonebook tmpkniga = new Phonebook();
  356.         try {
  357.             fileReader = new BufferedReader(new FileReader(filename));
  358.             String line = null ;
  359.             while ((line = fileReader.readLine())!= null) {
  360.                 String [] parts = line.split(",");
  361.                 String [] delovi = new String[10];
  362.                 int i;
  363.                 for(i = 0 ; i<parts.length;i++){
  364.                     delovi[i] = parts[i];
  365.                 }
  366.                 while(i<delovi.length){
  367.                     delovi[i] = "";
  368.                     i++;
  369.                 }
  370.                 Address adresa = new Address(delovi[2], delovi[3], delovi[4], delovi[5]);
  371.                 Contact kontakt = new Contact(delovi[0], delovi[1], adresa, new PhoneNumber(delovi[6]), new PhoneNumber(delovi[7]), new PhoneNumber(delovi[8]), delovi[9]);
  372.                 tmpkniga.addContact(kontakt);
  373.             }
  374.         } catch (IOException e) {
  375.             e.printStackTrace ();
  376.         } finally {
  377.             try {
  378.                 fileReader.close();
  379.             } catch (IOException e) {
  380.                 e.printStackTrace();
  381.             }
  382.         }
  383.         tmpkniga.display();
  384.     }
  385.    
  386. }
  387.  
  388. //END CLASS PHONEBOOK -----------------------------------
  389.  
  390.  
  391.  
  392.  
  393. public class PhonebookTest {
  394.  
  395.     public static void main(String[] args) {
  396.        
  397.         Phonebook kniga = new Phonebook();
  398.        
  399.         Address Kozle = new Address("Kozle", "51b", "Skopje", "Makedonija");
  400.         Address Meckin  = new Address("Meckin Kamen", "53", "Skopje", "Makedonija");
  401.         try{
  402.         /*Contact Gorjan = new Contact("Gorjan", "Jovanovski", Kozle, new PhoneNumber("38977751563"), null, null, "");
  403.         Contact GorjanLos = new Contact("Gorjan", "Jovanovski", Kozle, new PhoneNumber("38977751563"), null, null, "");
  404.         Contact GorjanDobar = new Contact("Aetre", "Jovanovski", Kozle, null, new PhoneNumber("023085631"), null, "");
  405.         Contact Bojan = new Contact("Bojan", "Janevski", Meckin, null, new PhoneNumber("38977123456"), null, "");
  406.         kniga.addContact(Gorjan);
  407.         kniga.addContact(Bojan);
  408.         //Dodadi poklopuvanje kontakt
  409.         //kniga.addContact(GorjanLos);
  410.         //Dodaj ist kontakt bez poklokuvanje
  411.         kniga.addContact(GorjanDobar);
  412.        
  413.         //Samo izlistaj gi kontaktite od fajlot
  414.         kniga.loadFromFile("fajl.txt");
  415.        
  416.         //Vnesi gi vo segasnata biblioteka kontaktite od fajlot
  417.         kniga.importFromFile("fajl.txt");
  418.         kniga.display();
  419.        
  420.          */
  421.         }
  422.         catch(Exception e){
  423.             System.out.println("Opa Cupa, Exception: " + e.getMessage());
  424.         }
  425.         finally{
  426.  
  427.         }
  428.        
  429.         //Generiraj fajl.txt datoteka so kontaktite
  430.         //kniga.saveToFile("fajl.txt");
  431.        
  432.     }
  433.  
  434. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement