kubabebe

ZarzadzanieKadrami Final ver2

Jul 26th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.97 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.HashSet;
  3. import java.util.Scanner;
  4. import java.util.Set;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7. import java.io.*;
  8.  
  9. class PracownikNew implements Serializable {
  10.     private String imie;
  11.     private String nazwisko;
  12.     private double placa;
  13.     private char plec;
  14.     private int dzial;
  15.  
  16.     public PracownikNew(String imie, String nazwisko, double placa, char plec, int dzial) {
  17.         /*
  18.          * if (constructorValidationIfLetters(imie) &&
  19.          * constructorValidationIfLetters(nazwisko) &&
  20.          * constructorValidationIfNumbersDouble(String.valueOf(placa)) &&
  21.          * constructorValidationIfLetters(String.valueOf(plec)) &&
  22.          * constructorValidationIfNumbersInt(String.valueOf(dzial))){
  23.          */
  24.         this.imie = imie;
  25.         this.nazwisko = nazwisko;
  26.         this.placa = placa;
  27.         this.plec = plec;
  28.         this.dzial = dzial;
  29.         /*
  30.          * } else { System.out.
  31.          * println("Nieprawidłowy typ danych przy dodawaniu pracownika."); }
  32.          */
  33.     }
  34.  
  35.     /*
  36.      * private boolean constructorValidationIfLetters(String text) {
  37.      *
  38.      * return Pattern.matches("^[A-Za-z]+$", text); }
  39.      *
  40.      * private boolean constructorValidationIfNumbersDouble(String numberDouble)
  41.      * {
  42.      *
  43.      * return Pattern.matches("[0-9]{1,7}.[0-9]{0,2}", numberDouble); }
  44.      *
  45.      * private boolean constructorValidationIfNumbersInt(String numberInt) {
  46.      * return Pattern.matches("[0-9]", numberInt); }
  47.      */
  48.  
  49.     @Override
  50.     public String toString() {
  51.         return String.format("| %15s | %20s | %10.2f |  %c |   %d |", imie, nazwisko, placa, plec, dzial);
  52.     }
  53.  
  54.     public boolean czyPracujeWDziale(int departamentNumber) {
  55.         return this.dzial == departamentNumber;
  56.  
  57.     }
  58.  
  59.     public double getPlaca() {
  60.         return this.placa;
  61.     }
  62.  
  63.     public int getDzial() {
  64.         return this.dzial;
  65.     }
  66. }
  67.  
  68. class Kadry implements Serializable {
  69.     private static final int MAKSYMALNE_ZATRUDNIENIE = 100;
  70.     private static final double MAKSYMALNA_PLACA = 100000;
  71.     // private static final int LICZBA_DZIALOW = 5;
  72.     private static final char PLEC_M = 'M';
  73.     private static final char PLEC_K = 'K';
  74.     private static final int DZIAL_MIN = 1;
  75.     private static final int DZIAL_MAX = 5;
  76.     private PracownikNew[] pracownicy_;
  77.     private int zatrudnienie_;
  78.  
  79.     public Kadry() {
  80.         pracownicy_ = new PracownikNew[MAKSYMALNE_ZATRUDNIENIE];
  81.         zatrudnienie_ = 0;
  82.     }
  83.  
  84.     public void dodajPracownika(PracownikNew pracownik) {
  85.         if (zatrudnienie_ < MAKSYMALNE_ZATRUDNIENIE) {
  86.             pracownicy_[zatrudnienie_] = pracownik;
  87.             zatrudnienie_++;
  88.         } else {
  89.             System.out.println("Za dużo pracowników");
  90.         }
  91.  
  92.     }
  93.  
  94.     public void dodajPracownikaInteraktywnie() {
  95.         System.out.println("Podaj dane pracownika:");
  96.         Scanner in = new Scanner(System.in);
  97.         System.out.print("Imie: ");
  98.         String imie = in.next();
  99.         System.out.print("Nazwisko: ");
  100.         String nazwisko = in.next();
  101.  
  102.         System.out.print("Placa: ");
  103.         String placa;
  104.         do {
  105.             placa = in.next();
  106.             if (!placaValidationIfNumbersDouble(placa) || placaCheck(placa))
  107.                 System.out.println("Płaca spoza zakresu. Wpisz kwotę z zakresu 0 - " + MAKSYMALNA_PLACA);
  108.  
  109.         } while (!placaValidationIfNumbersDouble(placa) || placaCheck(placa));
  110.  
  111.         System.out.print("Płeć: ");
  112.         char plec;
  113.         do {
  114.             plec = Character.toUpperCase(in.next().charAt(0));
  115.             if (plecCheck(plec))
  116.                 System.out.println("Nieprawidłowy znak płci. Podaj M lub K.");
  117.         } while (plecCheck(plec));
  118.  
  119.         System.out.print("Dział: ");
  120.         String dzial;
  121.         do {
  122.             dzial = in.next();
  123.             if (!dzialValidationIfNumbersInt(dzial) || dzialCheck(dzial))
  124.                 System.out.println("Nieprawidłowy numer działu. Wybierz liczbe z zakresu 1 - 5");
  125.         } while (!dzialValidationIfNumbersInt(dzial) || dzialCheck(dzial));
  126.  
  127.         PracownikNew pracownik = new PracownikNew(imie, nazwisko, Double.valueOf(placa), plec, Integer.valueOf(dzial));
  128.         dodajPracownika(pracownik);
  129.  
  130.     }
  131.  
  132.     private boolean placaCheck(String placa) {
  133.         return (Double.valueOf(placa) < 0 || Double.valueOf(placa) >= MAKSYMALNA_PLACA);
  134.     }
  135.  
  136.     private boolean plecCheck(char plec) {
  137.         return plec != PLEC_M && plec != PLEC_K;
  138.     }
  139.  
  140.     private boolean dzialCheck(String dzial) {
  141.         return Integer.valueOf(dzial) < DZIAL_MIN || Integer.valueOf(dzial) > DZIAL_MAX;
  142.     }
  143.  
  144.     public void importujZPlikuTekstowego(String fileName) throws IOException {
  145.  
  146.         try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
  147.             String line = reader.readLine();
  148.             while (line != null) {
  149.                 if (lineOnEmployeeValidation(line)) {
  150.                     dodajPracownika(lineOnEmployee(line));
  151.                     line = reader.readLine();
  152.                 } else {
  153.                     System.out.println("Nieprawidłowy typ danych przy dodawaniu pracownika.");
  154.                     line = reader.readLine();
  155.                 }
  156.             }
  157.  
  158.         }
  159.  
  160.     }
  161.  
  162.     private PracownikNew lineOnEmployee(String line) {
  163.         String[] splitLine = line.split("\\s");
  164.  
  165.         return new PracownikNew(splitLine[0], splitLine[1], Double.parseDouble(splitLine[2]), splitLine[3].charAt(0),
  166.                 Integer.parseInt(splitLine[4]));
  167.  
  168.     }
  169.  
  170.     private boolean lineOnEmployeeValidation(String line) {
  171.         String[] splitLine = line.split("\\s");
  172.         return textValidationIfLetters(splitLine[0]) && textValidationIfLetters(splitLine[1])
  173.                 && placaValidationIfNumbersDouble(splitLine[2]) && textValidationIfLetters(splitLine[3])
  174.                 && dzialValidationIfNumbersInt(splitLine[4]);
  175.  
  176.     }
  177.  
  178.     private boolean textValidationIfLetters(String text) {
  179.  
  180.         return Pattern.matches("^[A-Za-z]+$", text);
  181.     }
  182.  
  183.     private boolean placaValidationIfNumbersDouble(String numberDouble) {
  184.  
  185.         return Pattern.matches("[0-9]{1,6}\\.[0-9]{0,2}|[0-9]{1,6}", numberDouble);
  186.     }
  187.  
  188.     private boolean dzialValidationIfNumbersInt(String numberInt) {
  189.         return Pattern.matches("[" + DZIAL_MIN + "-" + DZIAL_MAX + "]", numberInt);
  190.     }
  191.  
  192.     public int getZatrudnienie() {
  193.         return zatrudnienie_;
  194.     }
  195.  
  196.     public double sredniZarobek() {
  197.         double sumaZarobek = 0;
  198.         for (int i = 0; i < zatrudnienie_; i++) {
  199.             sumaZarobek += pracownicy_[i].getPlaca();
  200.         }
  201.         if (zatrudnienie_ == 0) {
  202.             System.out.println("Brak pracowników w firmie");
  203.             return 0;
  204.         } else {
  205.             return (sumaZarobek / zatrudnienie_);
  206.         }
  207.     }
  208.  
  209.     public double sredniZarobek(int dzial) {
  210.         double sumaZarobek = 0;
  211.         int liczbaPracownikowWDziale = 0;
  212.         for (int i = 0; i < zatrudnienie_; i++) {
  213.             if (pracownicy_[i].getDzial() == dzial) {
  214.                 sumaZarobek += pracownicy_[i].getPlaca();
  215.                 liczbaPracownikowWDziale++;
  216.             }
  217.         }
  218.         if (liczbaPracownikowWDziale == 0) {
  219.             System.out.println("Brak pracowników we wskazanym dziale");
  220.             return 0;
  221.         } else {
  222.             return (sumaZarobek / liczbaPracownikowWDziale);
  223.         }
  224.     }
  225.  
  226.     public int[] dajDzialy() {
  227.  
  228.         HashSet<Integer> dzialySet = new HashSet<Integer>();
  229.         for (int i = 0; i < zatrudnienie_; i++) {
  230.             dzialySet.add(pracownicy_[i].getDzial());
  231.         }
  232.         int[] dzialy = new int[dzialySet.size()];
  233.         int index = 0;
  234.         for (int i : dzialySet) {
  235.             dzialy[index++] = i;
  236.         }
  237.         return dzialy;
  238.  
  239.     }
  240.  
  241.     public void pisz() {
  242.         System.out.println("|            Imie |             Nazwisko |      Placa |Plec|Dzial|");
  243.         for (int i = 0; i < zatrudnienie_; i++) {
  244.             System.out.println(pracownicy_[i]);
  245.         }
  246.         System.out.format("Średnia płaca w firmie: %.2f\n", sredniZarobek());
  247.         for (int dzial : dajDzialy()) {
  248.  
  249.             System.out.format("Średnia płaca w dziale %d wynosi: %.2f\n", dzial, sredniZarobek(dzial));
  250.  
  251.         }
  252.     }
  253.  
  254.     public void zapiszDoPliku(String fileName, Kadry kadry) throws FileNotFoundException {
  255.  
  256.         try (FileOutputStream fos = new FileOutputStream(fileName);
  257.                 ObjectOutputStream oos = new ObjectOutputStream(fos);) {
  258.  
  259.             oos.writeObject(kadry);
  260.  
  261.         } catch (IOException e) {
  262.             System.out.println(e);
  263.         }
  264.  
  265.     }
  266.  
  267.     public Kadry odczytajZPliku(String fileName) {
  268.  
  269.         Kadry afterSerialization = null;
  270.         try (FileInputStream fis = new FileInputStream(fileName); ObjectInputStream ois = new ObjectInputStream(fis);) {
  271.  
  272.             afterSerialization = (Kadry) ois.readObject();
  273.  
  274.         } catch (IOException | ClassNotFoundException e) {
  275.             System.out.println(e);
  276.         }
  277.  
  278.         return afterSerialization;
  279.     }
  280. }
  281.  
  282. public class ZarzadzanieKadrami {
  283.  
  284.     public static void main(String[] args) throws IOException, ClassNotFoundException {
  285.         String fileName = "empl.txt";
  286.         String fileNameOut = "serial.txt";
  287.         Kadry kadry = new Kadry();
  288.         Kadry kadry2 = new Kadry();
  289.         System.out.println(kadry.sredniZarobek());
  290.         kadry.importujZPlikuTekstowego(fileName);
  291.         System.out.println(Arrays.toString(kadry.dajDzialy()));
  292.         kadry.pisz();
  293.  
  294.         kadry.dodajPracownikaInteraktywnie();
  295.         kadry.pisz();
  296.         System.out.println(Arrays.toString(kadry.dajDzialy()));
  297.         kadry.zapiszDoPliku(fileNameOut, kadry);
  298.         kadry2 = kadry.odczytajZPliku(fileNameOut);
  299.         kadry2.pisz();
  300.         System.out.println(Arrays.toString(kadry2.dajDzialy()));
  301.         /*
  302.          * System.out.println(kadry.getZatrudnienie());
  303.          * System.out.println(kadry.sredniZarobek());
  304.          * System.out.println(kadry.sredniZarobek(3));
  305.          * System.out.println(Arrays.toString(kadry.dajDzialy()));
  306.          * kadry.dodajPracownikaInteraktywnie();
  307.          * System.out.println(kadry.getZatrudnienie());
  308.          * System.out.println(kadry.sredniZarobek());
  309.          */
  310.     }
  311. }
Advertisement
Add Comment
Please, Sign In to add comment