[ stevanio @ 29.05.2011. 09:51 ] @
Pozdrav svima!

Imam problema sa ovim JAVA zadatkom sto smo dobili u skoli. Nije nista komplikovano, ali sam malo zbunjen. Ovo smo radili pre jedno 5 meseci, i sve sam zaboravio...Prvo sam pomislio da se treba koristiti GUI, ali posle sam skontao da netreba...

Pitao sam za pomoc, ali ova profesorica je nesto izbrbljala da samo trebam to i to, i onda dodam ono..i to je to..Nemam pojma sta je rekla ili na sta je mislila.

Mi koristimo Jens Editor i trebamo da koristimo ReadKb klasu da korisnik unese nesto i da onda prikazemo informacije.

Dakle, ovo je zadatak:
Ima dva dela. Prvi Deo:

Napravi klasu koristecu JAVU koji izracunava i prikazuje bruto i neto plate zaposlenog na osnovu unetih podataka od strane korisnika.

Prilikom dizajniranja klase obratite paznju na sledece tacke:

* Ime klase treba biti EmployeePayroll

* Klasa treba da sadrži polja za ime, prezime zaposlenog, ID, kolko je sati radio, kolko dobija po satu, bruto i neto platu.

* Klasa treba da ima podrazumevani konstruktor koji ce se koristi da zapocne polja za ime, prezime, ID i kolko dobija po satu.

* Klasa treba da ima drugi konstruktor koji prihvata vrednost za ime, prezime, ID,sate rada i platu.

* Svako polje treba da ima svoju metodu koja vraća vrednost.

* 'Setter' metode su neophodne za ime, prezime, ID-sati, radio, i platu.

* Posebni metodi su potrebni za izračunavanje bruto i neto plate pomoću formula. Nijedna od ovih metoda vraća vrednost.

* Poreska stopa je fiksna vrednost od 42% (0,42).

Formule koje su nam dali:

Za zaposlene koji su radili do 38 sati:
bruto plate = sati * platna stopa

Za zaposlene koji su radili do 42 sati:
bruto plate = 38 * platna stopa + (sati rada - 38) * 1.5 * platna stopa

Za zaposlene koji su radili do 60 sati:
bruto plate = 38 * platna stopa + 4 * 1.5 * platna stopa + (sati rada - 42) * 2 * platna stopa

neto plate = bruto plate - (bruto plate * poreske stope)



Ja nemam pojma odakle da pocnem, ne mogu da se setim kako ovo treba da se uradi( secam se da smo nekad na pocetku radili slican ali jednostavniji program..ali nemogu nigde naci fajlove na mom racunaru)



Ako iko moze pomoci, bio bih puno zahvalan.



[ dule_ns @ 29.05.2011. 09:57 ] @
Ajde ja cu ti pomoci. Za pocetak napravi praznu klasu i postuj kod ovde pa cemo ici korak po korak. Ako neces tako odma javi da se ne cimam.
[ stevanio @ 29.05.2011. 17:28 ] @
Code:

/* EmployeePayroll
*/
import java.util.Scanner;
import java.awt.*;
import java.awt.event.*;
import java.text.*;

public class EmployeePayroll{
    
                   }




Jel mi uopste treba ovo 'import java.awt.event., .awt , .text ?

[ biske86 @ 29.05.2011. 18:19 ] @
Pa zavisi šta ćeš imati u ovoj klasi EmployeePayroll.
Moj savet ti je da pređeš osnove jave, bilo preko nekog tutorijala bilo preko knjige. Znači ovo su osnovne stvari vezane za objektno orijenisano programiranje. Konkretno vezano za ovo tvoje poslednje pitanje, radi se o nasleđivanju. Trenutno kad ti je prazna klasa ne trebaju ti ovi import delovi.

Ok napravio si klasu, kreni dalje da radiš, pa kako budemo dodavali funkcionalnosti klasi, tako ćemo dodavati i ove import delove ukoliko su potrebni. Za sad ih izbriši, ne trebaju ti.

Prvi sledeći korak koji treba da uradiš je da napraviš polja klase koji su opisani u zadatku. Posle dodavanja polja klasa bi trebala da izgleda na sledeći način:

Code:

public class EmployeePayroll {
    private String Ime;
    private String Prezime;
    private int ID;
    private int brojSatiRada;
    private int cenaRada;
    private int brutoPlata;
    private int netoPlata;
}


Sledeće šta treba da uradiš je da dodaš konstruktore.

Kreni pa ako budeš zapeo javi se. Svako od nas može ovo da ti odradi u roku od 10 minuta ali nije poenta da ti mi radimo domaće zadatke. Ovako usput ćemo ti objašnjavati redom šta je šta, a ti ćeš naučiti nove stvari.. Tako da navali sa radom i naravno pitanjima..
[ dule_ns @ 30.05.2011. 07:23 ] @
biske ti je lepo napisao samo mislim da za cenu rada, bruto i neto platu ne koristiš int. Javi ako si zapeo i postuj kod pa ćemo nastaviti.
[ stevanio @ 31.05.2011. 03:06 ] @
Ok, evo sta sam do sad uradio...nisam siguran da li je dobro...
Ovo sam uradio uz pomoc drugih vezbi koje smo radili i primera.

Ako nije problem, mozemo li ovo na engleskom da radimo(kod)?

Code:


/* 
   FileName: EmployeePayroll.java
*/

public class EmployeePayroll{
                  
    private String FirstName;
    private String LastName;
    private int ID;
    private int hoursWorked;
    private double payRate;
    private double grossPay;
    private double netPay;
    
public EmployeePayroll(){
     
     FirstName = "";
     LastName = "";
     ID = 0;
     hoursWorked = 0;
     payRate = 0;
     grossPay = 0;
     netPay = 0; 
                        }
         
public EmployeePayroll(double n, double g, double p, int i, int h, String f, String l){
    
     FirstName = f;
     LastName = l;
     ID = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;
                                        }
                                        
public void set(double n, double g, double p, int i, int h, String f, String l){
     FirstName = f;
     LastName = l;
     ID = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;     
                                                                               }          
                      
public void get(double n, double g, double p, int i, int h, String f, String l){
     FirstName = f;
     LastName = l;
     ID = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;  


za ovaj 'get', da li moze ovako kao sto je gore, ili moram sve jedno po jedno nrp:
Code:
public String getFirstName(){
    return f;
[ dule_ns @ 31.05.2011. 07:06 ] @
Seteri i geteri ti ne valjaju. Kod im je isti što nema smisla. Oni služe da se neka vrednost (atribut) setuje, to jest uzme. Znači mora ono što si na kraju napisao, tj za svaki atribut posebno. Aj to ispravi pa idemo dalje. Što se tiče koda na engleskom, to je sasvim u redu.
[ stevanio @ 01.06.2011. 03:51 ] @
OK

Code:

/* 
   FileName: EmployeePayroll.java
   
*/



public class EmployeePayroll{
                  
    private String FirstName;
    private String LastName;
    private int ID;
    private int hoursWorked;
    private double payRate;
    private double grossPay;
    private double netPay;
    
public EmployeePayroll(){
     
     FirstName = "";
     LastName = "";
     ID = 0;
     hoursWorked = 0;
     payRate = 0;
     grossPay = 0;
     netPay = 0; 
                        }
         
public EmployeePayroll(double n, double g, double p, int i, int h, String f, String l){
    
     FirstName = f;
     LastName = l;
     ID = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;
                                        }
                                        
public void set(double n, double g, double p, int i, int h, String f, String l){
     FirstName = f;
     LastName = l;
     ID = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;     
                                                                               }          
                      
                         
public String getFirstName(){
    return f;               }

public String getLastName(){
    return l;              }
    
public int getID(){
    return i;     }
    
public int gethoursWorked(){
    return h;              }
    
public double getpayRate(){
    return = p;           }
    
public double getgrossPay(){
    return = g;            }
    
public double getnetPay(){
    return = n;          }


Jel ovo ok?

Sta bi bio sledeci korak?
[ dule_ns @ 01.06.2011. 07:36 ] @
Citat:
stevanio: OK

Code:

...
                                        }
                                        
public void set(double n, double g, double p, int i, int h, String f, String l){
     FirstName = f;
     LastName = l;
     ID = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;     
                                                                               }          
                      
                         
public String getFirstName(){
    return f;               }

public String getLastName(){
    return l;              }
    
public int getID(){
    return i;     }
    
public int gethoursWorked(){
    return h;              }
    
public double getpayRate(){
    return = p;           }
    
public double getgrossPay(){
    return = g;            }
    
public double getnetPay(){
    return = n;          }


Jel ovo ok?

Sta bi bio sledeci korak?


Nije ok.

seter i geter treba da budu:


Code:

public void setFirstName(String firstName) {
    FirstName = firstName;
}

public String getFirstName() {
    return FirstName;
}


Ovo što si ti napisao uopšte ne može da se kompajlira.
[ Vlade Maksimovic @ 01.06.2011. 15:26 ] @
Citat:
dule_ns: Nije ok.

seter i geter treba da budu:


Code:

public void setFirstName(String firstName) {
FirstName = firstName;
}

public String getFirstName() {
return FirstName;
}



Nije OK.
Bez obzira sto ovo radi nije u skladu sa standardom.
Ovo "FirstName" nije u skladu sa standardom, treba da bude "firstName"(properti u klasi moze da pocinje sa $ ili _ ili sa malom karakterom). Najbolje je od pocetka poceti da ucis da radis stvari po standardu, jel cete posle imati problema pri nekoj sertifikaciji.
[ biske86 @ 01.06.2011. 18:15 ] @
I ja se slažem sa ovim. Pošto ćeš često morati da čitaš tuđi kod ako odmah prihvatiš konvenciju onda će ti biti lakše.

Imaš nedoslednosti i kod naziva metoda. Treba na primer da bude getHoursWorked umesto gethouseWorked.
[ stevanio @ 03.06.2011. 02:43 ] @
1.Prvo mi kazete da treba da pocnem sa malim slovom.. npr. hoursWorked, a onda ispod da stavim getHoursWorked?? kako je ovo drugo H veliko ako je prvo malo?

2. A jel ovaj deo uredu:
Code:
 public EmployeePayroll(double n, double g, double p, int id, int h, String f, String l){
    
     firstName = f;
     lastName = l;
     id = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;
                                        }



i 3. Ako promenim ovaj, skroz gore, prvi deo ovako(kako ste rekli):
Code:
 public class EmployeePayroll{
                  
    private String firstName;
    private String lastName; 
      ....

jel onda treba isto dole, gde su setteri i getteri da stavim isto sve sa malim slovom, ovako:
Code:

public void setfirstName(String firstName) {
    firstName = firstName;
}
[ dule_ns @ 03.06.2011. 08:31 ] @
I da i ne.

Gledaj da ti uvek klase počinju velikim slovom.
Metode i atributi da ti počinju malim slovom.

Svaka nova reč da počinje velikim slovom.


klasa EmployeePayroll je ok.

atribut firstName je ok.

seter setfirstName nije ok nego treba setFirstName.




Ovo nije obavezno ali većina tako piše.
[ stevanio @ 03.06.2011. 14:34 ] @
Aha, ok..ne, ja sam mislio da nece raditi ako je jedno malo a drugo veliko slovo..evo sad cu promeniti ovo
[ stevanio @ 03.06.2011. 14:43 ] @
ok, evo koda..valjda je do sada u redu.

Code:

/* 
   FileName: EmployeePayroll.java
   
*/



public class EmployeePayroll{
                  
    private String firstName;
    private String lastName;
    private int id;
    private int hoursWorked;
    private double payRate;
    private double grossPay;
    private double netPay;
    
public EmployeePayroll(){
     
     firstName = "";
     lastName = "";
     id = 0;
     hoursWorked = 0;
     payRate = 0;
     grossPay = 0;
     netPay = 0; 
                        }
         
public EmployeePayroll(double n, double g, double p, int id, int h, String f, String l){
    
     firstName = f;
     lastName = l;
     id = i;
     hoursWorked = h;
     payRate = p;
     grossPay = g;
     netPay = n;
                                        }
                                        
                                        
public void setFirstName(String firstName) {
    FirstName = firstName;
}   

public void setLastName(String lastName) {
    LastName = lastName;
}

public void setID(int id) {
    ID = id;
}

public void setHoursWorked(int hoursWorked) {
    HoursWorked = hoursWorked;
}

public void setPayRate(double payRate) {
    PayRate = payRate;
}

public void setGrossPay(double grossPay) {
    GrossPay = grossPay;
}

public void setNetPay(double netPay) {
    NetPay = netPay;
}                                     
                                        
                     
public String getFirstName(){
    return FirstName;
                             }

public String getLastName(){
    return LastName;  
                           }
    
public int getID(){
    return ID;    
                  }
    
public int getHoursWorked(){
    return HoursWorked; 
                           }
    
public double getPayRate(){
    return = PayRate;   
                          }
    
public double getGrossPay(){
    return = GrossPay;   
                           }
    
public double getNetPay(){
    return = NetPay; 
                         }       
                                                           }


[ dule_ns @ 03.06.2011. 14:59 ] @
Citat:
stevanio: ok, evo koda..valjda je do sada u redu.

...


Ne. Ja kad ovo ubacim u eclipse dobijem 15 grešaka:

public EmployeePayroll(double n, double g, double p, int id, int h, String f, String l){

firstName = f;
lastName = l;
id = i;
hoursWorked = h;
payRate = p;
grossPay = g;
netPay = n;

Šta ti je i, valjda treba id

public void setFirstName(String firstName) {
FirstName = firstName;
}

nemaš atribut FirstName nego firstName i tu grešku imaš u svim seterima

public String getFirstName(){
return FirstName;
}

kao i prethodno.


public double getPayRate(){
return = PayRate;
}

= ti je višak a kad ga ukloniš PayRate ti je greška jer ti imaš payRate.



Elem sve ove greške su sintaksne. Da li ti koristiš neki razvojni alat (eclipse ...) ili radiš u običnom text editoru?
[ biske86 @ 03.06.2011. 18:52 ] @
Po formatiranom kodu vidi se da je radio u običnom tekstualnom editoru pa da je kompajlirao/pokretao ručno. Ja ne vidim nikakav razlog da se to radi. Pojedini autori navode da je to dobro da bi se uvežbala sintaksa. Ja se ne slažem sa time, pre sam za to da čovek radi što više primera u razvojnom okruženju nego da gubi vreme da ručno kompajlira program. U početku kad pišeš ovakve jednostavne programe nemaš puno problema ali kad krene debagovanje koda onda je rad u konzoli noćna mora. Znači toplo preporučujem da uzmeš neki editor, bilo koji, ja koristim Eklipsu.

Tvoj zadatak je imao grešaka zbog ovoga što je Dule naglasio, ispravljen izgleda ovako:

Code:
/* 
   FileName: EmployeePayroll.java
   
*/
public class EmployeePayroll{
                  
    private String firstName;
    private String lastName;
    private int id;
    private int hoursWorked;
    private double payRate;
    private double grossPay;
    private double netPay;
    
public EmployeePayroll(){
     
     firstName = "";
     lastName = "";
     id = 0;
     hoursWorked = 0;
     payRate = 0;
     grossPay = 0;
     netPay = 0; 
}
         
public EmployeePayroll(double netPay, double grossPay, double payRate, int id, int hoursWorked, String firstName, String lastName){    
     this.firstName = firstName;
     this.lastName = lastName;
     this.id = id;
     this.hoursWorked = hoursWorked;
     this.payRate = payRate;
     this.grossPay = grossPay;
     this.netPay = netPay;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}   

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public void setID(int id) {
    this.id = id;
}

public void setHoursWorked(int hoursWorked) {
    this.hoursWorked = hoursWorked;
}

public void setPayRate(double payRate) {
    this.payRate = payRate;
}

public void setGrossPay(double grossPay) {
    this.grossPay = grossPay;
}

public void setNetPay(double netPay) {
    this.netPay = netPay;
}                                     
                                        
                     
public String getFirstName(){
    return firstName;
}

public String getLastName(){
    return lastName;  
}
    
public int getID(){
    return id;    
}
    
public int getHoursWorked(){
    return hoursWorked; 
}
    
public double getPayRate(){
    return payRate;   
}
    
public double getGrossPay(){
    return grossPay;   
}
    
public double getNetPay(){
    return netPay; 
}       
}



E sad hteo bi samo da ti malo pojasnim. Znači greška ti je bila to što si pokušavao da dodeliš vrednost atributu klase koji ne postoji. Na primer imao si HoursWorked a trebalo je hoursWorked. Napominjem te da je Java case-sensitive tj. da je osetljiva na mala i velika slova. Na primer work, Work i WORK su tri razlicite promenljive.

Dalje postoje dva stila pisanja seter metoda, na primer da staviš hoursWorked da bude parametar metode i da onda dodeljujes atributu klase vrednost na sledeći način:
Code:
this.hoursWorked=hoursWorked

this je ključna reč jezika i sadrži referencu na tekuću klasu u kojoj se ovaj kod nalazi. U našem primeru to bi bilo isto kao:
EmployeePayroll.hoursWorked

Drugi nacin je da staviš kao parametar recimo h, pa da dodelu vrednosti odradiš na sledeći način:
Code:
hoursWorked=h


Izvini možda te malo udavih ali sam hteo da ti objasnim da bolje razumeš.

Inače ja više volim ovo sa ključnom rečju this.
[ dule_ns @ 03.06.2011. 21:28 ] @
Slažem se sa bisketom. Elem da napravimo reviziju i ubrzamo stvar.

Zadatak je:

1) Ime klase treba biti EmployeePayroll

2) Klasa treba da sadrži polja za ime, prezime zaposlenog, ID, kolko je sati radio, kolko dobija po satu, bruto i neto platu.

3) Klasa treba da ima podrazumevani konstruktor koji ce se koristi da zapocne polja za ime, prezime, ID i kolko dobija po satu.

4) Klasa treba da ima drugi konstruktor koji prihvata vrednost za ime, prezime, ID,sate rada i platu.

5) Svako polje treba da ima svoju metodu koja vraća vrednost.

6) 'Setter' metode su neophodne za ime, prezime, ID-sati, radio, i platu.

7) Posebni metodi su potrebni za izračunavanje bruto i neto plate pomoću formula. Nijedna od ovih metoda vraća vrednost.

8) Poreska stopa je fiksna vrednost od 42% (0,42).




1) je ok

2) je ok

3) ti si napisao konstruktor koji radi i malo vise. Po meni je tvoj konstruktor sasvim ispravan jer postavlja vrednosti svih atributa.

4) Ovo bi već mogao da izmeniš i da staviš da konstruktor prima samo navedenih 5 vrednosti

5) je ok (geteri)

6) je ok

7) ovo jos treba da odradis, nije tesko


Ajde odradi sve ovo odjednom.
[ stevanio @ 05.06.2011. 07:52 ] @
Kako da uradim ove kalkulacije? Sta treba da napisem?

Ovo su date formule:
Citat:

For employees who have worked up to 38 hours:
gross pay = hours worked * pay rate

For employees who have worked up to 42 hours:
gross pay = 38 * pay rate + (hours worked – 38) * 1.5 * pay rate

For employees who have worked up to 60 hours:
gross pay = 38 * pay rate + 4 * 1.5 * pay rate + (hours worked – 42) * 2 * pay rate

net pay = gross pay – (gross pay * tax rate)


Jeli ovako nesto?
Code:
 
if (hoursWorked <= 38)
            grossPay = hoursWorked * payRate;
        
        else if (hoursWorked <=42)
            grossPay = 38*payRate+(hoursWorked-38)*1.5*payRate;
                    
             else if (hoursWorked <=60)
                grossPay = 38*payRate+4*1.5*payRate+(hoursWorked-42)*2*payRate;
                


Jel to ide odma posle onog sto smo pre uradili. Posto drugi deo zadatka je da se napravi TestEmployeePayroll i da se testira funkcijalnost. Da mozda ne treba tamo da se stavi? Kad cemo importovati sve potrebne stvari?

[Ovu poruku je menjao stevanio dana 05.06.2011. u 09:46 GMT+1]
[ dule_ns @ 05.06.2011. 09:52 ] @
Da, to ti je ok za grossPay.

Treba to da ubaciš u neku metodu i da napraviš metodu za netPay.


To stavi u ovu klasu i eventualno izmeni ono što sam ti napisao za tačku 4 pa ćemo da vidimo šta treža u testu.
[ biske86 @ 05.06.2011. 10:24 ] @
Polako, drugi deo zadatka ćemo da uradimo kad završimo prvi. Uglavnom ne cimaj se za taj drugi deo to je par linija koda, ništa posebno.

Što se tiče ovih formula kod ti je ispravan samo treba da ga ubaciš u metodu (pogledaj svoju specifikaciju u prvom postu, tamo se kaže da treba da se naprave posebne metode za izračunavanje bruto i neto plate). Ovu formulu što si napisao je bruto plata. Znači u klasu sam dodao dve metode, to su: calculateGrossPay() i calculateNetPay(). Pored toga dodao sam konstantu TAX_RATE. Napisao sam i komentar vezan za ovu konstantu, pogledaj kod.

Code:

/* 
   FileName: EmployeePayroll.java
   
 */
public class EmployeePayroll {

    private String firstName;
    private String lastName;
    private int id;
    private int hoursWorked;
    private double payRate;
    private double grossPay;
    private double netPay;
    
    //Ovo je poreska stopa, zato je konstanta (ključna reč final).
    //Konvencija je da se imena konstanti pišu velikim slovima, i da se između reči stavlja donja crta
    private final double TAX_RATE = 0.42;

    public String toString() {
        return this.getFirstName() + " " + this.getLastName();
    }

    public EmployeePayroll() {

        firstName = "";
        lastName = "";
        id = 0;
        hoursWorked = 0;
        payRate = 0;
        grossPay = 0;
        netPay = 0;
    }

    public EmployeePayroll(double netPay, double grossPay, double payRate,
            int id, int hoursWorked, String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.id = id;
        this.hoursWorked = hoursWorked;
        this.payRate = payRate;
        this.grossPay = grossPay;
        this.netPay = netPay;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setID(int id) {
        this.id = id;
    }

    public void setHoursWorked(int hoursWorked) {
        this.hoursWorked = hoursWorked;
    }

    public void setPayRate(double payRate) {
        this.payRate = payRate;
    }

    public void setGrossPay(double grossPay) {
        this.grossPay = grossPay;
    }

    public void setNetPay(double netPay) {
        this.netPay = netPay;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getID() {
        return id;
    }

    public int getHoursWorked() {
        return hoursWorked;
    }

    public double getPayRate() {
        return payRate;
    }

    public double getGrossPay() {
        return grossPay;
    }

    public double getNetPay() {
        return netPay;
    }
    
    public void calculateGrossPay() {
        if (hoursWorked <= 38)
            grossPay = hoursWorked * payRate;

        else if (hoursWorked <= 42)
            grossPay = 38 * payRate + (hoursWorked - 38) * 1.5 * payRate;

        else if (hoursWorked <= 60)
            grossPay = 38 * payRate + 4 * 1.5 * payRate + (hoursWorked - 42)
                    * 2 * payRate;
    }
    
    public void calculateNetPay(){
        netPay = grossPay - (grossPay*TAX_RATE);
    }
}





Ostaje ti za ovaj prvi deo zadatka samo još da popraviš konstruktore da bi odgovarali navedenim zahtevima. Znači pročitaj one dve stavke vezano za konstruktore u tvom prvom postu i uporedi sa kodom u klasi i vidi da li kod odgovara zahtevima.

Pogle toga ostaje još samo da testiramo ovo što smo napravili.
[ stevanio @ 06.06.2011. 08:54 ] @
Sto se tice konstruktora, samo ovo ima u zadatku:
Citat:

* Klasa treba da ima podrazumevani konstruktor koji ce se koristi da zapocne polja za ime, prezime, ID i kolko dobija po satu.

* Klasa treba da ima drugi konstruktor koji prihvata vrednost za ime, prezime, ID,sate rada i platu.


Zar to nismo vec uradili?
[ dule_ns @ 06.06.2011. 09:37 ] @
Da uradio si to plus još nešto malo. To nešto malo nije uvek poželjno.

Prvi konstruktor ti setuje sve vrednosti. Traženo je samo 4, al pošto je to podrazumevani konstruktor i pošto ti atributi nisu objekti nego primitivne promenjive po meni je ok kako si uradio, al opet nije ono što piše u zadatku.

Drugi konstruktor ti setuje sve vrednosti a ne samo 5 traženih. Opet postavalja se pitanje da li je to logički ispravno, al definitivno nije ono što piše u tekstu zadatka.



U svakom slučaju to možeš i da proveriš sa profesorom.
[ stevanio @ 06.06.2011. 13:07 ] @
Ok, pitacu ja..pa ako ne budu pravili frku, ostavicu ovako.
[ biske86 @ 06.06.2011. 13:22 ] @
Kako god hoćeš, vezano za konstruktore, i ovako će raditi.
Sad možemo da napišemo test klasu da isprobamo šta smo uradili..
Znači treba da napraviš jednu klasu koja se zove na primer EmployeePayrollTest, koja će imati main metodu. U toj main metodi kreiraj klasu EmployeePayroll i ubaci vrednosti u nju. Vrednosti ubacuješ preko seter metoda. Na primer setFirstName("Stevan");

Kreni pa daj kod da vidimo šta si uradio.

I da, umalo da zaboravim. Nisi nam uopšte rekao šta koristiš, jel neki IDE (Netbeans, Eclipse,..) ili preko notpeda..
[ stevanio @ 07.06.2011. 02:19 ] @
Koristim program koji se zove Jens Editor. To su nam dali,po sto kao, jednostavan je za pocetnike.

za TestEmployeePayroll treba da korsitimo user input sa tastature, koristeci onaj ReadKb. Jeli i onda moramo staviti ' setFirstName("Stevan");' ili samo treba da koristimo get?


Ovo je drugi deo zadatka:

Citat:

Create a class to test the functionality of your EmployeePayroll class.

* Name the class TestEmployeePayroll

* Instantiate one EmployeePayroll object that initially sets the first name, last name, and ID fields to your name and student number, the pay rate field to 20.00 and the hours worked field to 38.0.

* Instantiate a second EmployeePayroll object using the default constructor.

* Instantiate an object of the ReadKb class so that your test class can receive user input from the keyboard.

* User input is required for first name, last name, ID, hours worked and pay category (see following table)
Category Pay Rate
1 $55.00
2 $30.00
3 $25.00
4 $20.00


* Validation is required for user input of hours worked (must be between 0 and 60 inclusively) and pay category (must be between 1 and 4 inclusively). Assume the user will enter only numeric input for these values.

* The values entered by the user are to be assigned to the fields of the second EmployeePayroll object using the appropriate setter methods.

* Calculate gross and net pay for each EmployeePayroll object.



Jel li se ovako nekako mora poceti?
Code:

/*
 File Name: TestEmployeePayroll.java
*/


public class TestEmployeePayroll{
public static void main(String[]args){
    String firstName;
    String lastName;
    String id;
    int hoursWorked;
    double payRate;
    double grossPay;
    double netPay;
    int payCategory;
    
    
    
     ReadKb readKb=new ReadKb();
     
     System.out.print("Enter your first name: ");
     firstName=readKb.getString();
     
     System.out.print("Enter your last name: ");
     lastName=readKb.getString();
     
     System.out.print("Enter your employee ID: ");
     id=readKb.getString();
     
     System.out.print("Enter hours worked: ");
     hoursWorked=readKb.getInt();
     
     System.out.print("Enter your pay category: ");
     payCategory=readKb.getInt();
     
     
    //ovde treba ona kalkulacija da se desi(???) i onda posle da sve zajedno prikazemo ispod
     

     System.out.println("*******************************");//ovo je samo bzveze linija da se vidi
     System.out.println("Employee Name: "+firstName+lastName );
     System.out.println("Employee ID: "+id);
     System.out.println("Hours Worked: "+hoursWorked);
     System.out.println("Pay Category: "+payCategory);
     
     
     
                                     }
                            }




[Ovu poruku je menjao stevanio dana 08.06.2011. u 04:24 GMT+1]

[Ovu poruku je menjao stevanio dana 08.06.2011. u 05:12 GMT+1]

[Ovu poruku je menjao stevanio dana 08.06.2011. u 05:17 GMT+1]
[ stevanio @ 07.06.2011. 23:00 ] @
Zar ne treba da importujemo onaj scanner i jos nesto da bi sve moglo da radi kako treba u prvom delu?

Kako ovaj TestEmployeePayroll uzima informacije i one formule is prvog dela da sve izracuna kad se pokrene?
Ovaj drugi deo ja malo zbunjujuci...

jel mislite da cemo moci ovo zavrsiti do petka ili subote?
[ stevanio @ 08.06.2011. 04:33 ] @
pito sam profesorku da pogleda ovo..i ona kaze da one setter-e sve zajedno moramo staviti. ona kaze bice previse komplikovano, iz nekog razloga , da stavim sve settere posebno.
znaci ipak moram ovako nesto:
Code:

 public void set(String firstName, String lastName, String id, int hoursWorked, double payRate, double grossPay, double netPay) {
        firstName = firstName;
        lastName = lastName;
        id = id;
        hoursWorked = hoursWorked;
        payRate = payRate;
        grossPay = grossPay;
        netPay = netPay;
    }
[ dule_ns @ 08.06.2011. 08:56 ] @
Pa pazi, ako ona tako kaže onda ona tako kaže. Al to nema veze sa životom. Zašto? Pa zato što recimo ti imaš već kreiran objekat sa vrednostima atributa. I u nekom trenutku ti želiš da izmeniš 2 atributa na nove vrednosti. Kako ćeš to uraditi. Normalno je da pozoveš 2 setera za te vrednosti. Nenormalno (njen način) je da prvo pročitaš sve vrednosti, pa da pozoveš taj jedan seter sa tim originalnim vrednostima i sa dve izmenjene. Il ako ona zna za neki drugi način.

Za ovaj scanner ću videti šta tačno radi kod pa ti javim.
[ biske86 @ 08.06.2011. 12:00 ] @
Potpuni promašaj ako staviš samo jedan seter. Lepo je Dule objasnio, šta ako moraš samo jedan atribut klaseda promeniš, na primer firstName?
Kako god hoćeš, možeš i uraditi kako ti profesorka kaže, samo zapamti zbog sebe da to nije ispravno. Valjda i sam uviđaš da to nije u redu.

Uglavnom ja sam ti odradio ovu klasu i prepravio neke stvari koje smo pogrešno odradili pa pogledaj kod. Naravno stavio sam ti i komentare.


1) Name the class TestEmployeePayroll
Urađeno.

2) Instantiate one EmployeePayroll object that initially sets the first name, last name, and ID fields to your name and student number, the pay rate field to 20.00 and the hours worked field to 38.0.
Ovde se kaže da treba da kreiramo jedan objekat klase EmployeePayroll i da mu prosledimo first name, last name, id, pay rate, and hours worked. Na osnovu ovoga zaključujem da drugi konstruktor u klasi ne treba da inicijalizuje netPay i grossPay. To je i logično i to smo ti mi i pričali, jer nelogično je da ti prosleđuješ neto i bruto platu, upravo zato pravimo klasu da bi ona sama izračunala ove vrednosti. Znači evo u kodu ispod sam ti ispravio konstruktor da odgovara ovim zahtevima.

3) Instantiate a second EmployeePayroll object using the default constructor.
Ovo instanciramo podrazumevanim konstruktorom. To je linija:
EmployeePayroll employee2 = new EmployeePayroll();


4) Instantiate an object of the ReadKb class so that your test class can receive user input from the keyboard.
Ovo je klasa koja nije standardna tj. ne postoji u java-sdk već je možeš dobiti sa koristeći neku biblioteku. Ja sam našao na internetu implementaciju ove klase i ubacio sam je u projekat. Pogledaj kod ispod.

5) User input is required for first name, last name, ID, hours worked and pay category (see following table)
Category Pay Rate
1 $55.00
2 $30.00
3 $25.00
4 $20.00
Znači korisnik treba da unese kategoriju a mi kasnije u programu to pretvaramo u cenu rada (payRate). To činimo switch konstrukcijom.

6) Validation is required for user input of hours worked (must be between 0 and 60 inclusively) and pay category (must be between 1 and 4 inclusively). Assume the user will enter only numeric input for these values.
Validaciju rade do while petlje. Uzeto je do while a ne while petlja posto se do while petlja izvrsava makar jednom, a to je ono što nama treba.

7) The values entered by the user are to be assigned to the fields of the second EmployeePayroll object using the appropriate setter methods.
Ovde se jasno vidi iz samog smisla rečenice da moramo da imamo seter metode a ne samo jednu seter metodu.


8) Calculate gross and net pay for each EmployeePayroll object.
Na osnovu ovoga se vidi da u konstruktoru koji prihvata vrednosti ne smemo da prosleđujemo bruto i neto platu nego da se one izračunavaju pomoću metoda koje smo napravili (to su calculateNetPay i calcluateGrossPay).



Evo u nastavku izvornog koda:

Code:

/* 
   FileName: EmployeePayroll.java
   
 */
public class EmployeePayroll {

    private String firstName;
    private String lastName;
    private String id;
    private int hoursWorked;
    private double payRate;
    private double grossPay;
    private double netPay;
    
    //Ovo je poreska stopa, zato je konstanta (ključna reč final).
    //Konvencija je da se imena konstanti pišu velikim slovima, i da se između reči stavlja donja crta
    private final double TAX_RATE = 0.42;

    public EmployeePayroll() {

        firstName = "";
        lastName = "";
        id = "";
        hoursWorked = 0;
        payRate = 0;
        grossPay = 0;
        netPay = 0;
    }

    public EmployeePayroll(String firstName, String lastName, String id, double payRate, int hoursWorked) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.id = id;
        this.hoursWorked = hoursWorked;
        this.payRate = payRate;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setID(String id) {
        this.id = id;
    }

    public void setHoursWorked(int hoursWorked) {
        this.hoursWorked = hoursWorked;
    }

    public void setPayRate(double payRate) {
        this.payRate = payRate;
    }

    public void setGrossPay(double grossPay) {
        this.grossPay = grossPay;
    }

    public void setNetPay(double netPay) {
        this.netPay = netPay;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getID() {
        return id;
    }

    public int getHoursWorked() {
        return hoursWorked;
    }

    public double getPayRate() {
        return payRate;
    }

    public double getGrossPay() {
        return grossPay;
    }

    public double getNetPay() {
        return netPay;
    }
    
    public void calculateGrossPay() {
        if (hoursWorked <= 38)
            grossPay = hoursWorked * payRate;

        else if (hoursWorked <= 42)
            grossPay = 38 * payRate + (hoursWorked - 38) * 1.5 * payRate;

        else if (hoursWorked <= 60)
            grossPay = 38 * payRate + 4 * 1.5 * payRate + (hoursWorked - 42)
                    * 2 * payRate;
    }
    
    public void calculateNetPay(){
        netPay = grossPay - (grossPay*TAX_RATE);
    }
}




Code:

/* 
   FileName: TestEmployeePayroll.java
   
 */

public class TestEmployeePayroll {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String firstName;
        String lastName;
        String id;
        int hoursWorked;
        double payRate;
        double grossPay;
        double netPay;
        int payCategory;
        
        EmployeePayroll employee1 = new EmployeePayroll("Stevan", "Stevic", "144", 20, 38);
        EmployeePayroll employee2 = new EmployeePayroll();
        
        ReadKb readKb=new ReadKb();
        System.out.print("Enter your first name: ");
        firstName=readKb.getString();
        
        System.out.print("Enter your last name: ");
        lastName=readKb.getString();
        
        System.out.print("Enter your employee ID: ");
        id=readKb.getString();
        
        //Validacija sata rada. Vraćamo korisnika na ovaj korak sve dok ne unese ispravnu vrednost.
        do {
            System.out.print("Enter hours worked (0-60):");
            hoursWorked = readKb.getInt();
        } while (hoursWorked < 0 || hoursWorked > 60);
        
        //Isto kao iznad.
        do {
            System.out.print("Enter your pay category (1-4):");
            payCategory=readKb.getInt();
        } while (payCategory <1 || payCategory>4);
        
        //Ovo je zadatak pod 7
        employee2.setFirstName(firstName);
        employee2.setLastName(lastName);
        employee2.setID(id);
        employee2.setHoursWorked(hoursWorked);
        switch (payCategory) {
        case 1:
            employee2.setPayRate(55);
        case 2:
            employee2.setPayRate(30);
        case 3:
            employee2.setPayRate(25);
        case 4:
            employee2.setPayRate(20);
        }
        
        employee1.calculateGrossPay();
        employee1.calculateNetPay();
        
        employee2.calculateGrossPay();
        employee2.calculateNetPay();
        
        System.out.println("*********************************************");
        System.out.println("employee1");
        System.out.println("Employee name:" + employee1.getFirstName() + " " + employee1.getLastName());
        System.out.println("Employee ID: " + employee1.getID());
        System.out.println("Hours worked: " + employee1.getHoursWorked());
        System.out.println("Pay rate: " + employee1.getPayRate());
        System.out.println("Gross pay:" + employee1.getGrossPay());
        System.out.println("Net pay:" + employee1.getNetPay());
        
        System.out.println("*********************************************");
        System.out.println("employee1");
        System.out.println("Employee name:" + employee2.getFirstName() + " " + employee2.getLastName());
        System.out.println("Employee ID: " + employee2.getID());
        System.out.println("Hours worked: " + employee2.getHoursWorked());
        System.out.println("Pay rate: " + employee2.getPayRate());
        System.out.println("Gross pay:" + employee2.getGrossPay());
        System.out.println("Net pay:" + employee2.getNetPay());
    }
}




Code:

/* 
   FileName: ReadKb.java
   
 */

import java.util.Scanner;

public class ReadKb {

    private Scanner scanner = new Scanner(System.in);

    public double getDouble() {
        double d = 0.0;
        if (scanner.hasNextDouble()) {
            d = scanner.nextDouble();
        } else {
            String s = scanner.next();
            System.out
                    .println("You entered: " + s + "- a double was expected.");
        }
        return d;
    }

    public int getInt() {
        int i = 0;

        if (scanner.hasNextInt()) {
            i = scanner.nextInt();
        } else {
            String s = scanner.next();
            System.out
                    .println("You entered: " + s + "- a double was expected.");
        }
        return i;
    }

    public String getString() {
        String s = scanner.next();
        return s;
    }

    public String getLine() {
        String s = scanner.nextLine();
        return s;
    }
}




Evo u prilogu imaš i jar izvršnu datoteku pa probaj kako to radi. Uđi u konzolu (ne znam da li koristiš vindovs ili linuks), i kucaj:

java -jar TestEmployeePayroll.jar


i testiraj aplikaciju.


Kod mene je to izgledalo ovako:

[ stevanio @ 09.06.2011. 11:03 ] @
Ja cu uraditi ovako kako ste vi rekli. Ja mislim da nece praviti probleme kad vidi da sve radi kako treba. Pokazacu joj, pa cu javiti sta je rekla..

A Sta ovo 'this.' znaci i sta radi? jel se moze bez toga?
Code:

public void setPayRate(double payRate) {
        this.payRate = payRate;
    }
[ biske86 @ 09.06.2011. 11:32 ] @
Očigledno da nisi dobro ispratio diskusiju, objasnio sam u jednom od prehodnih postova zbog čega stoji ključna reč this. A i da nisam mogao si na guglu da ukucaš java this keyword i samo bi ti se reklo.
Videćeš kad uznapreduješ malo u programiranju forumi će ti postati ograničenje zato što ne možeš uvek da brzo dobiješ informaciju. Zato je korišćenje pretrage (tj. Gugla) od velike važnosti.

Druga stvar koju sam zaboravio da ti napomenem, je da uzmeš jednu knjigu i da naučiš osnove. Veruj mi i ja sam ranije pokušava tako nešto kao ti i znam kako je mučenje kad gledaš tuđi kod a slabo šta razumeš. Znači neku knjigu koja objašnjava javu i objektno orijentisano programiranje. Ti se raspitaj ali moja preporuka je Head First Java ili Thinking in Java od Busa Ekela.
[ stevanio @ 14.06.2011. 02:12 ] @
ok, predao sam ovo. mislim da ce biti ok.

HVALA PUNOO SVIMA!!!