Java - podstawowe zadanie

0

Jak zabrać się za takie zadanie? Nie chodzi mi o kod, tylko o samą logikę i co wypadałoby użyć.

W naszej firmie zatrudniamy pracowników liniowych i kardę zarządzającą. Pracownicy liniowi codziennie uzupełniają rejestr przepracowanych godzin z opisem wykonanych zadań. Każdy pracownik z kadry zarządzającej posiada określoną liczbę podlegających mu pracowników liniowych. Chcielibyśmy, aby nasz system umożliwiał:- wyświetlenie wszystkich wpisów z rejestru dla zespołów pracowników liniowych menadżera- wyświetlanie listy wszystkich pracowników firmy

Tworzę sobie klasę pracownicy i robię tam 2 pola: private int liczbaGodzin oraz private String opisZadan. Tworzę drugą klasę kadra... hmm i co dalej?
Co do wyświetlenia wszystkich pracowników to w klasie pracownik zrobić liste pracowników? Jakim sposobem przydzielic kilku pracownikow do np 1 kierownika? Proszę o jakieś nakierowanie

1

Nie ma potrzeby tworzyć dwóch tabel na kadrę i pracowników. Przecież kadra zarządzająca to też pracownicy. Przy założeniu, że każdy pracownik ma jednego bezpośredniego przełożonego wystarczy jedna tabela np. Employee gdzie będzie pole np. superior (przełożony) gdzie będzie id przełożonego z tabeli Employee.

Employee
ID : int PK
name: varchar
superior: int FK - klucz do tabeli Employee

Do rejestrowania pracy może być taka struktura:

TimeTrack
ID: int PK
description: varchar
date: date
employeeID: int FK - klucz do tabeli Employee

Wtedy zapytania będą wyglądały np.

Wszyscy pracownicy:
SELECT e.name, t.description, t.date
FROM Employee e
INNER JOIN TimeTrack t ON
t.employeeID = e.ID

Pracownicy konkretnego managera:
SELECT e.name, t.description, t.date
FROM Employee e
INNER JOIN TimeTrack t ON
t.employeeID = e.ID
WHERE e.superior = (SELECT ID FROM Employee WHERE Name = 'Kowalski');

0

Dobra zrobiłem to tak, że zrobiłem 3 klasy Pracownicy, Liniowi i Kadra i dziedziczenie gdzie Liniowi i Kadra extends Pracownicy. Dzięki temu w klasie Pracownicy zrobiłem listę do której dodałem zarówno Liniowych jak i kadrę.
Tak to wygląda w main

pracownicy.dodajPracownika(new Liniowi("Bob"));
pracownicy.dodajPracownika(new Liniowi("Hall"));
pracownicy.dodajPracownika(new Liniowi("Thomas"));
pracownicy.dodajPracownika(new Liniowi("Kyle"));
pracownicy.dodajPracownika(new Kadra("Brad"));
pracownicy.dodajPracownika(new Kadra("John"));
pracownicy.dodajPracownika(new Kadra("Mike"));
pracownicy.dodajPracownika(new Kadra("Tom"));

Natomiast tak to wygląda w klasie pracownicy - metoda odpowiadajaca za dodawanie do listy i wyswietlanie potem tej listy

public void dodajPracownika(Pracownicy pracownik){
        pracownicy.add(pracownik);
    }

    public void pokazPracownikow(){
        for(Pracownicy pracownik: pracownicy){
            System.out.println(pracownik.toString());
        }
    }

I okej tutaj wszystko działa wypisuje mi sie lista wszystkich pracownikow. Teraz chcialbym przypisac danych pracownikow do jakiegos szefa z Kadry
Myslalem zeby zrobic to za pomoca Mapy jednak nie wiem jak sie za to zabrac. Tworzę mapę tylko nie wiem co do niej wrzucić?

HashMap<Kadra,Liniowi> myMap= new HashMap<>();

Problemem jest jeszcze, że teraz wyświetlam tylko imiona pracowników liniowych , a potem chciałbym wyświetlić również ich zadania, i liczbę godzin po przypisaniu do kogoś z kadry

0
elzulninho napisał(a):

Dobra zrobiłem to tak, że zrobiłem 3 klasy Pracownicy, Liniowi i Kadra i dziedziczenie gdzie Liniowi i Kadra extends Pracownicy. Dzięki temu w klasie Pracownicy zrobiłem listę do której dodałem zarówno Liniowych jak i kadrę.

Dzięki temu każdy obiekt pracownika (liniowy oraz kadra) ma własną listę pracowników. Raczej nie o to Ci chodzi :)

Przykładowe klasy:
Klasa Pracownik z podstawowymi danymi pracownika (i listą zadań jeżeli wszyscy pracownicy mają listę zadań).
Klasa Liniowy dziedzicząca po Pracownikach (i listą zadań jeżeli tylko liniowi mają zadania).
Klasa Kadra dziedzicząca po Pracownikach z możliwością przypisania innych Pracowników (lub Liniowych jeżeli ma nie przypisywać Kadry).
Klasa Firma która zarządza wszystkimi pracownikami.

0

Nie za bardzo rozumiem, to w jaki sposób można to napisać żeby była 1 wspólna lista wszystkich pracowników? I nie za bardzo jeszcze rozumiem co napisałeś w Klasie Kadra

1

Jedna wspólna lista pracowników będzie w klasie Firma.

W obiekcie klasy Kadra będzie lista osób którymi dany osobnik zarządza.
Jeżeli Kadra zarządza tylko Liniowymi to lista Liniowych.
Jeżeli zarządza Liniowymi i Kadrowymi to lista Pracowników.

0

Ok rozumiem. Wszystko wydaję się jasne. Dzięki!

0

Jednak jeszcze mam problem. Wydaje mi się, że rejestr pracowników dla danego menadżera napisałem dobrze. Czyli klasa kadra wygląda następująco

public class Kadra extends Pracownik {
    private List<Liniowy>lista = new ArrayList<>();


    public void dodajPracownika(Liniowy liniowy)
    {
        this.lista.add(liniowy);
    }

    @Override
    public String toString() {
        return ""+ lista;
    }
}

zaś klasa Liniowy wygląda tak:

public class Liniowy extends Pracownik{
    private int liczbaGodzin;
    private String opisZadan;


    public Liniowy(int liczbaGodzin, String opisZadan) {
        this.liczbaGodzin = liczbaGodzin;
        this.opisZadan = opisZadan;
    }

    @Override
    public String toString() {
        return "Liniowy{" +
                "liczbaGodzin=" + liczbaGodzin +
                ", opisZadan='" + opisZadan + '\'' +
                '}';
    }
}

No i w klasie Main

Kadra menadzer1 = new Kadra();
		Liniowy liniowy = new Liniowy(4,"Obróbka zdjęć");
		Liniowy liniowy1 = new Liniowy(8,"Przygotowanie dokumentów");
		Liniowy liniowy2 = new Liniowy(2,"Napisanie programu");
		Kadra menadzer2 = new Kadra();
		Liniowy liniowy3 = new Liniowy(2,"Prowadzenie dokumentacji");
		Liniowy liniowy4 = new Liniowy(4,"Serwis");
		menadzer1.dodajPracownika(liniowy);
		menadzer1.dodajPracownika(liniowy1);
		menadzer1.dodajPracownika(liniowy2);
		menadzer2.dodajPracownika(liniowy3);
		menadzer2.dodajPracownika(liniowy4);
		System.out.println("Wszystkie wpisy z rejestru pracowników podlegających menadżertowi numer 1");
		System.out.println(menadzer1.toString());
		System.out.println("Wszystkie wpisy z  rejestru pracowników podlegających menadżerowi numer 2");
		System.out.println(menadzer2.toString());

No i chyba jest ok? Przypisuje mi dla danego menadźera z kadry rejestr jego pracowników.
A teraz jak wyświetlić listę wszystkich pracowników?
Gdy zrobię w klasie Firma tak:

public class Firma {
    private List<Pracownik>lista = new ArrayList<>();

    public void dodajPracownika(Pracownik pracownik)
    {
        this.lista.add(pracownik);
    }

to dodając w klasie Main do listy pracowników menadźera , nie wypisze mi się ten menadżer tylko lista rejestru jego podwładnych. Trochę się w tym już pogubiłem :) Dla dopełnienia wszystkiego klasa Pracownik wygląda tak

public class Pracownik {
    private String name;
    private String surname;

   public Pracownik(){}
    public Pracownik(String name, String surname) {
        this.name = name;
        this.surname = surname;
    }

    @Override
    public String toString() {
        return "Pracownik{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                '}';
    }
}
0

Nie ustalaj zadań Liniowego w konstruktorze (on może mieć więcej zadań). Tam raczej podaj jego imię.

Do wypisania/zwrócenia różnych danych możesz użyć różnych metod.

0

Rozumie, że za pomocą setterów ustalić im zadania? A w konstruktorze dałem imię i nazwisko z klasy pracownik robiąc konstruktory zarówno w klasie Kadra jak i Liniowy ze słowem kluczowym super. Jednak nadal nie mam pomysłu jak wypisać wszystkich pracowników

0

Domyślnie (za pomocą toString() zwracaj tylko imię i nazwisko. Ewentualnie z dopiskiem kadra/liniowy.
Chcąc uzyskać inne dane użyj innych metod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1