Tehnici avansate de programare - tema 3

Temă „la cerere” :

Cerințe:

  1. Scrieți o aplicație care să gestioneze angajatii unei companii. Informațiile care vor descrie „obiectele” de tip angajat sînt: cod, nume, salariu.
    Programul trebuie sa permită:

    • actualizarea mulțimii angajatilor (cel puțin adăugare)
    • listarea angajatilor curenți
    • salvarea acestora într-un fișier (text, binar sau xml) cu posibilitatea de restaurare
    • generarea unui raport în format HTML (sau PDF, EXCEL etc) cu angajații companiei

    Raportul HTML va fi de forma:
    Raport HTML

  2. Scrieți un program care să permită căutarea unui fișier cu un anumit nume sau care conține o anumită expresie regulată, într-un director specificat și recursiv, în subdirectoarele acestuia.

Rezolvări:

  1. Clasa angajat:

    1.  
    2. package tema3;
    3.  
    4. import java.util.*;
    5. import java.io.*;
    6.  
    7. class Angajat implements Serializable
    8. {
    9.    private long cod;
    10.    private String nume;
    11.    private long salariu;
    12.    public Angajat ()
    13.    {
    14.       nume = "";
    15.       salariu = 0;
    16.       cod = 0;
    17.    }
    18.    public Angajat (long cod, String nume, long salariu)
    19.    {
    20.       this.cod = cod;
    21.       this.nume = nume;
    22.       this.salariu = salariu;
    23.    }
    24.    public void setCod (long cod)
    25.    {
    26.       this.cod = cod;
    27.    }
    28.    public long getCod ()
    29.    {
    30.       return this.cod;
    31.    }
    32.    public void setNume (String nume)
    33.    {
    34.       this.nume = nume;
    35.    }
    36.    public String getNume ()
    37.    {
    38.       return this.nume;
    39.    }
    40.    public void setSalariu (long salariu)
    41.    {
    42.       this.salariu = salariu;
    43.    }
    44.    public long getSalariu ()
    45.    {
    46.       return this.salariu;
    47.    }
    48.    @Override
    49.    public String toString ()
    50.    {
    51.       return cod + "\n~~~~\n" + "Nume: " + nume + "\n" + "Salariu: " + salariu +"\n\n";
    52.    }
    53. }

    Clasa angajați:

    1.  
    2. package tema3;
    3.  
    4. import java.util.*;
    5. import java.io.*;
    6.  
    7. class Angajati implements Serializable
    8. {
    9.    List lista = new LinkedList ();
    10.    public Angajati ()
    11.    {
    12.    }
    13.    public void adauga (Angajat a)
    14.    {
    15.       int n = lista.size ();
    16.       for (int i = 0; i < n; i ++)
    17.       {
    18.          Angajat s = (Angajat) lista.get (i);
    19.          if (a.getCod () == s.getCod ())
    20.          {
    21.             System.out.println ("Exista deja un angajat cu codul respectiv");
    22.             return;
    23.          }
    24.       }
    25.       lista.add (a);
    26.    }
    27.    public void stergeAngajat (long cod_sters)
    28.    {
    29.       int n = lista.size ();
    30.       for (int i = 0; i < n; i ++)
    31.       {
    32.          Angajat s = (Angajat) lista.get (i);
    33.          if (s.getCod () == cod_sters)
    34.          {
    35.             lista.remove (i);
    36.             return;
    37.          }
    38.       }
    39.       System.out.println ("Nu exista niciun angajat cu codul respectiv");
    40.    }
    41.    public void modificaSalariu (long cod_sters, long sal)
    42.    {
    43.       int n = lista.size ();
    44.       for (int i = 0; i < n; i++)
    45.       {
    46.          Angajat s = (Angajat) lista.get (i);
    47.          if (s.getCod () == cod_sters)
    48.          {
    49.             s.setSalariu (sal);
    50.             return;
    51.          }
    52.       }
    53.       System.out.println ("Nu exista niciun angajat cu codul respectiv");
    54.    }
    55.    @Override
    56.    public String toString ()
    57.    {
    58.       String s = "";
    59.       Iterator it = lista.iterator();
    60.       while (it.hasNext ())
    61.       {
    62.          Angajat a = (Angajat) it.next ();
    63.          s = s + a + "————————————————-"+"\n";
    64.       }
    65.       return s;
    66.    }
    67. }

    Clasa Main:

    1.  
    2. package tema3;
    3. import java.io.*;
    4. import java.util.*;
    5.  
    6. public class Main
    7. {
    8.    public static void main (String [] args)
    9.    {
    10.       Angajati lista = new Angajati ();
    11.       int OPT = 0;
    12.       BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
    13.       do
    14.       {
    15.          System.out.println("Introduceti optiunea: ");
    16.          System.out.println("1 - Adauga angajat");
    17.          System.out.println("2 - Sterge angajat");
    18.          System.out.println("3 - Modifica salariu");
    19.          System.out.println("4 - Afiseaza lista angajatilor");
    20.          System.out.println("5 - Salveaza stare");
    21.          System.out.println("6 - Restaureaza lista angajatilor");
    22.          System.out.println("7 - Genereaza raport");
    23.          System.out.println("0 - Iesire");
    24.          try
    25.          {
    26.             OPT = Integer.parseInt (stdin.readLine());
    27.          }
    28.          catch (IOException e)
    29.          {
    30.             System.out.println("Eroare la citirea datelor!");
    31.          }
    32.          switch (OPT)
    33.          {
    34.             case 0: break;
    35.             case 1: long cod, salariu;
    36.                     String nume;
    37.                     try
    38.                     {
    39.                        System.out.println ("Introduceti codul angajatului: ");
    40.                        cod = Long.parseLong (stdin.readLine ());
    41.                        System.out.println ("Introduceti numele angajatului: ");
    42.                        nume = stdin.readLine ();
    43.                        System.out.println ("Intoduceti salariul angajatlui: ");
    44.                        salariu = Long.parseLong (stdin.readLine ());
    45.                        Angajat angajat_nou = new Angajat (cod, nume, salariu);
    46.                        lista.adauga (angajat_nou);
    47.                                 }
    48.                             catch(IOException e){
    49.                                 System.out.println("Eroare la citirea datelor!");
    50.                                 }
    51.                             break;
    52.                     case 2:
    53.                         String lin;
    54.                         try{
    55.                             System.out.println("Introduceti codul angajatului: ");
    56.                             lin = stdin.readLine();
    57.                             long cod_sters=Integer.parseInt(lin);
    58.                             lista.stergeAngajat(cod_sters);
    59.                         }
    60.                         catch (IOException e){
    61.                             System.out.println(e.getMessage());
    62.                         }
    63.                         break;
    64.                     case 3:
    65.                         String lin4,lin5;
    66.                         try{
    67.                             System.out.println("Introduceti codul angajatului: ");
    68.                             lin4 = stdin.readLine();
    69.                             long cod_mod=Integer.parseInt(lin4);
    70.                             System.out.println("Introduceti noul salariu al angajatului: ");
    71.                             lin5 = stdin.readLine();
    72.                             long sal = Integer.parseInt(lin5);
    73.                             lista.modificaSalariu(cod_mod, sal);
    74.                         }
    75.                         catch (IOException e){
    76.                             System.out.println(e.getMessage());
    77.                         }
    78.                         break;
    79.                     case 4:
    80.                         if(lista.lista.size () > 0){
    81.                             System.out.println(lista);
    82.                         }
    83.                         else
    84.                         {
    85.                             System.out.println("Lista angajatilor este vida");
    86.                         }
    87.                         break;
    88.                     case 5:
    89.                         try{
    90.                             System.out.println("Salvam…");
    91.                             FileOutputStream fout = new FileOutputStream("angajati.tmp");
    92.                             ObjectOutputStream sout = new ObjectOutputStream(fout);
    93.                             sout.writeObject(lista);
    94.                             sout.flush();
    95.                             sout.close();
    96.                             fout.close();
    97.                             System.out.println("A fost salvat obiectul " +"\n"+ lista);
    98.                         }
    99.                         catch(IOException e){
    100.                             System.out.println("Exceptie, nu pot salva lista de angajati!"+e.getMessage()+e.toString());
    101.                         }
    102.                         break;
    103.                     case 6:
    104.                         try{
    105.                             System.out.println("Restauram…");
    106.                             FileInputStream fin = new FileInputStream("angajati.tmp");
    107.                             ObjectInputStream sin = new ObjectInputStream(fin);
    108.                             try {
    109.                                 lista = (Angajati) sin.readObject();
    110.                             }
    111.                             catch (ClassNotFoundException e) {
    112.                             }
    113.                             sin.close();
    114.                             fin.close();
    115.                             System.out.println("Lista a fost restaurata ");
    116.                             System.out.println(lista);
    117.                         }
    118.                         catch(Exception e)
    119.                         {
    120.                             System.out.println("Lista nu a fost restaurata");
    121.                         }
    122.                         break;
    123.                     case 7:
    124.                         try{
    125.                             FileWriter file = new FileWriter("angajati.html") ;
    126.                             if(file!= null)
    127.                             {
    128.                                 file.write("<head>\n<title>\nAngajati\n</title>\n</head>\n<body>\n<table border=’2′ cellpading=’2′>\n<tr bgcolor=’yellow’>\n<th>\nCod</th>\n<th>\nNume\n</th>\n<th>\nSalariu\n</th>\n</tr>");
    129.                                 for (int i=0; i < lista .lista.size (); i ++) {
    130.                                     file.write("<tr>\n");
    131.                                     Angajat s = (Angajat) lista.lista.get (i);
    132.                                     file.write("<td>" + s.getCod () + "</td>\n");
    133.                                     file.write("<td>" + s.getNume () + "</td>\n");
    134.                                     file.write("<td>" + s.getSalariu () + "</td>\n");
    135.                                     file.write("\n");
    136.                                 }
    137.                                 file.close();
    138.                             }
    139.                         }
    140.                         catch (Exception ex)
    141.                         {
    142.                             System.err.println("Fisierul nu poate fi deschis");
    143.                         }
    144.                         System.out.println("Lista a fost salvata in fisierul angajati.html");
    145.                         break;
    146.                     default:
    147.                         System.out.println("Optiune invalida");
    148.                         break;
    149.                 }
    150.         }while(!(OPT==0));
    151.     }
    152.     }
    1.  
    2. package tema3_2;
    3.  
    4. import java.util.*;
    5. import java.io.*;
    6. import java.util.regex.*;
    7.  
    8. public class Main
    9. {
    10.    public static void search (String exp, File dir, String nfile)
    11.    {
    12.       try
    13.       {
    14.          String line;
    15.          if (dir.isFile ())
    16.          {
    17.             if (dir.getName ().equals (nfile))
    18.             {
    19.                System.out.println("Fiserul "+nfile+" a fost gasit in "+dir.getParent());
    20.             }
    21.             BufferedReader in = new BufferedReader(new FileReader(dir));
    22.             Pattern pattern = Pattern.compile(exp);
    23.             try
    24.             {
    25.                while ((line = in.readLine ()) != null)
    26.                {
    27.                   Matcher matcher = pattern.matcher (line);
    28.                   if (matcher.find ())
    29.                   {
    30.                      System.out.println("Expresia a fost gasita in fiserul "+dir.getName()+", folderul "+dir.getParent());
    31.                      System.out.println();
    32.                      break;
    33.                   }
    34.                }
    35.                in.close();
    36.             }
    37.             catch (IOException e)
    38.             {
    39.                System.err.println("Fisierul nu poate fi inchis!");
    40.             }
    41.          }
    42.          else
    43.          {
    44.             File [] list;
    45.             list = dir.listFiles ();
    46.             for (int i = 0; i < list.length; i ++)
    47.             {
    48.                search (exp, list [i], nfile);
    49.             }
    50.          }
    51.       }
    52.       catch(FileNotFoundException e)
    53.       {
    54.          System.err.println ("Fisierul nu poate fi gasit");
    55.       }
    56.    }
    57.  
    58.    public static void main (String [] args)
    59.    {
    60.       String fdir="test1";
    61.       File dir = new File (fdir);
    62.       String nfile="abcd.txt";
    63.       String exp="a*b";
    64.       search (exp, dir, nfile);
    65.    }
    66. }

NOTĂ:
Rezolvările de mai sus îmi aparțin și nu voi face alte comentarii în cadrul lor…

Comments

5 Responses to “Tehnici avansate de programare - tema 3”

  1. dani on Martie 25th, 2008 12:53

    mersi de cod :)

  2. Adrian Cătălin on Martie 25th, 2008 08:32

    N-ai pentru ce și cred că e penultima temă pe care o fac publică. Motivele cred că sînt evidente!

  3. andrei on Martie 26th, 2008 01:09

    ar fi sanse k ultima tema p kre o postezi sa fie tema 2 la haskell? m-ai ajuta mult dak ai face asta…..ms mult

  4. dani on Martie 26th, 2008 03:36

    da :) , atunci o asteptam pe ultima :)

  5. Adrian Cătălin on Martie 29th, 2008 09:44

    andrei: comentariul tău a fost prins în filtrul de spam (nu știu de ce). Voi încerca să rezolv tema 2 la PF și să ajut pe cine are nevoie de ajutor. De aici înțelege fiecare ce vrea.

Leave a Reply




nimic.org