петак, 18. мај 2012.

Ispitni cas - Sportska prodavnica

Zadatak: Sportska prodavnica

 

            Želimo da uradimo aplikaciju pomoću koje ćemo moći da izračunamo kolko kupac treba da plati kupljenu robu. U prodavnici se kupuju patike, trenerke, majice. Patike koštaju 7000, trenerke 1200, majice 750. Kupac može da bira jedno od tri načina plaćanja, plaćanje kreditnom karticom pomoću koje ostvaruje 5% popusta na kupljenu robu; plaćanje gotovinom u tom sučakju nema popusta; i odloženo plaćanje na koje se dodaje 5%. Ako kupac vrši kupovinu vikendom ostvaruje popust od 10%, ako je kupac đak ostvaruje popust od 5%.

 

            Započnimo novi projekat. Sa padajućeg menia File izaberimo New pa Aplication.

 

 

Dobijamo formu koja je prazna. Za ovaj zadatak trebaće nam sledeće komponente:

  1. Label
  2. Edit
  3. ComboBox
  4. RadioGroup
  5. CheckBox
  6. Button

           

Sve potrebne komponente možete naći na standardnoj kartici.

 

 


            Komponente poređajte na formi kao što je prikazano na sledećoj slici.

 

 

            Komponenti Label1 promenite opciju Caption u delu Properties, i napišite Naziv proizvoda. Za Label2 stavite Kolicina, a za Label3 stavite Iznos.

 

 

            Poljima Edit1 i Edit2 obrišite tekst iz opcije Text u Properties.

 

            Komponenti ComboBox1 obrišite tekst u opciji Text u Properties, i kliknite na opciju Items. Kada se otvori prozor upišite stavke Patike, Trenerke, Majica. Svaku u novom redu. Indeksiranje stavki počinje nulom rako da Patike imaju indeks 0, Trenerke indeks 1 i Majice indeks 2.

 


            Komponenti RadioGroup1 promenite opciju Caption u Plaćanje. Kliknite na opciju Items i u novom prozoru koji će vam se otvoriti upišite stavke Kreditna kartica (-5%),  Gotovina, Odloženo plaćanje (+5%),  svaku stavku u novom redu. Indeksiranje stavki počinje nulom, tako da stavka Kreditna kartica (-5%)  ima indeks 0, Gotovina indeks 1, i Odloženo plaćanje (+5%) indeks 2.

 

 

            Komponenti CheckBox1 u Properties  u opciji Caption upišite Vikend Akcija (-10%) i opciji Name upišite vikend.

            Komponenti CheckBox2 u Properties  u opciji Caption upišite Djacki popust (-5%) i opciji Name upišite djak.

            Komponenti Button1 u opciji Caption upišite Racun.

 

Sada naša forma izgleda ovako.

 

 

            Sada treba da isprogramiramo dugme Button1. Sa forme uradimo dupli klik na komponentu Button1. Otvara nam se prozor u kom pišemo željeni kod.

 

            Potrebne su nam promenljive cena i ukupno tipa real, i kolicina i indeks tipa integer. Promenljiva ukupno predstavlja cenu koju kupac treba da plati. I zadamo joj početnu vrednost nula. Promenljiva cena nam predstavlja cenu proizvoda koji je kupljen. Kolicina predstavlja kolicinu kupljene robe. Promenljiva Indeks vodi računa koji je proivod izabran ili kojim načinom se plaća kupljeni proizvod.

 

            Da bi videli koji je proizvod kupljen u ovom slučaju izabran iz liste, moramo uzeti indeks izabranog proizvoda iz liste. To činimo na sledeći način, promenljivi indeks dodelimo vrednost ComboBox1.ItemIndex. U zavisnosti da li je indeks jednak nuli imamo da je cena jednaka 7000 pošto su u pitanju patike, ako je indeks jednak jedinici onda su u pitanju trenerke i njihova cena je 1200, i ako je indeks 2 onda su u pitanju majice i cena je 750.

 

            U komponenti Edit1 se nalazi količina kupljene robe. Pošto se u komponentama tipa edit čuvaju samo stringovi pre nego sto našoj promeljivi kolicina dodelimo vrednost iz Edit1 polja moramo da izvršimo pretvaranje stringa u integer. Za to nam služi metoda StrToInt.

 

            Sada u promenjivoj ukupno upišemo proizvod dva broja, cene i kolicine. Sledeće što treba uraditi je izračunati da li kupac ostvaruje neki od popusta. U komponenti RadioGroup1 može da se označi samo jedna od stavki. Želimo da znamo kojim načinom se vrši plaćanje. U promenljivi indeks ćemo smestiti indeks označene stavke. To postižemo naredbom indeks:=RadioGroup1.ItemIndex; sada ispitamo čemu je jednak indeks, ako je nula onda je u pitanju plaćanje kreditnom karticom i kupac ostvaruje popust od 5%, ukupno:=ukupno-(ukupno*0.05); ako je indeks jednak jedinici nemamo potrebe da menjamo promeljivu ukupno, ako je indeks jednak 2 onda je u pitanju odloženo plaćanje pa imamo naredbu ukupno:=ukupno+(ukupno*0.05).

 

            Proverimo sada da li je u pitanju Vikend Akcija ili Djacki popust. Sve što je potrebno uraditi je da proverimo da li su ovi CheckBox-ovi čekirani. CheckBox1 za Vikend akciju ima naziv vikend, pa naredbom vikend.Checked proveravamo da li je ona čekirana ili ne. Naredba vraća True ili False. Ako je čekirana imamo ostvarenje popusta od 10% i novo računanje promenljive ukupno naredbom ukupno:=ukupno-(ukupno*0.1);. Da li je u pitanju Djacki popust proveravamo naredbom djak.Checked, ukoliko je True onda imamo popust od 5% ukupno:=ukupno-(ukupno*0.05);

            Na kraju treba promenljivu ukupno upisati u Edit2. Pošto je ukupno tipa real a u Edit2 možemo upisati samo string, potrebno je da konvertujemo naredbom Edit2.Text:=FloatToStr(ukupno);.

 


Ceo kod.

 

procedure TForm1.Button1Click(Sender: TObject);

var cena, ukupno : real;

kolicina, indeks : integer;

begin

ukupno:=0;

 

indeks:=ComboBox1.ItemIndex;

 

if indeks=0 then cena:=7000;

if indeks=1 then cena:=1200;

if indeks=2 then cena:=750;

 

kolicina:=StrToInt(Edit1.Text);

 

ukupno:=cena*kolicina;

 

indeks:=RadioGroup1.ItemIndex;

if indeks=0 then ukupno:=ukupno-(ukupno*0.05);

if indeks=2 then ukupno:=ukupno+(ukupno*0.05);

 

if vikend.Checked then ukupno:=ukupno-(ukupno*0.1);

if djak.Checked then ukupno:=ukupno-(ukupno*0.05);

 

Edit2.Text:=FloatToStr(ukupno);

end;

 

 

            Prilikom testiranja programa primetićemo da se u komponenti Edit1 mogu uneti i slova, decimalni brojevi ili znakovi, što nije poželjno. Pa ćemo zabraniti loš unos koriteci proceduru Val(s,n,gr). S nam je string koji želimo da upisemo u n koji je tipa integer. Gr je tipa integer i čuva poziciju greške.

 

Primer

            Ako želimo da s=’12b21’ prebacimo u n. Prvo će se prebaciti 1, zatim 2, kad se stigne do slova b koje ne možemo da prebacimo u n dolazi do greške i onda gr uzima vrednost 3. (b je treće po redu).

Ako ne dodje do greške onda gr ima vrednost 0.

 

            Proveru unosa ćemo isprogramirati na komponenti Edit1 u dogadjaju OnExit. Ukoiko dođe do nepravilnog unosa prikazaćemo korisniku poruku da je došlo do nepravilnog unosa  ShowMessage('Kolicina nije dobro uneta.'); , stavićemo fokus na polje Edit1 naredbom Edit1.SetFocus; i selektvaćemo loše unešen tekst naredbom Edit1.SelectAll;.

 

 

procedure TForm1.Edit1Exit(Sender: TObject);

var s:string;

n:integer;

gr:integer;

begin

s:=Edit1.Text;

val(s,n,gr);

if gr<>0 then

  begin

  ShowMessage('Kolicina nije dobro uneta.');

  Edit1.SetFocus;

  Edit1.SelectAll;

  end;

end;

 

            Ne dopada nam se to što u komponenti Edit2 možemo unositi bilo kakav tekst. To možemo zabraniti tako što u delu Properties opciji Enabled stavimo False.


Markuš Elizabeta


Нема коментара: