You are on page 1of 55

Univerzitet u Novom Sadu

Tehnički fakultet »Mihajlo Pupin«


Zrenjanin

SEMINARSKI RAD

Predmet: Softversko Inženjerstvo 1


Tema: Aplikacija za prodaju automobila

Tema: Izrada desktop aplikacije u programskom


jeziku C#

Profesor: prof. dr. Dragica Radosav Student: Jovan Tatalović


Asistent: dr. Zdravko Ivanković Smer: Informacione tehnologije – Inženjerstvo

Zrenjanin, 9.4.2015.
SADRŽAJ

1. UVOD ............................................................................................................................................... 3
2. KORIŠTENE TEHNOLOGIJE ........................................................................................................ 4
3. KREIRANJE APLIKACIJE ............................................................................................................. 6
4. ZAKLjUČAK ................................................................................................................................. 21
5. LITERATURA ............................................................................................................................... 22
6. LISTING KODOVA ....................................................................................................................... 23

2
1. UVOD

Za ovaj seminarski rad kreirana je aplikacija koja može poslužiti za prodavnicu automobila.
Korisnik aplikacije ima mogućnost da unese neke statičke podatke kao što su podaci o
automobilima, prodavcima i načinima plaćanja, koje može dodavati, menjati, brisati i imati
pregled o njima u DataGridView kontroli. Radi upotrebljivosti aplikacije, omogućen je unos
kupovine od strane nekog kupca, koju vrši izabrani prodavac, načini plaćanja i valute, kao i unos
datuma kupovine. Može se izabrati i više od jednog automobila pomoću komande
CheckedListBox. Svaki kupac sadrži sledeće podatke: ime, prezime, adresa. Za svaki unos se
može napraviti izmena, tako npr. prodavac se može zameniti nekim drugim prodavcem. Kada
korisnik želi da unese još nekog prodavca, kupca ili vrstu plaćanja, potrebno je da klikne na
dugme Dodaj a zatim Potvrdi. Korisnik u svakom trenutku može odustati klikom na dugme
Odustani. Isto tako može obrisati ono što je prethodno uneto. Kada se izvrši unos Kupaca
podacima je omogućen prikaz u DataGridView kontroli.

Imamo i mogućnost da pogledamo izveštaj o automobilima koji su u bazi podataka, odnosno


broju njihove šasije, nazivu, boji, imenu i prezimenu radnika koji je izvršio prodaju. Prilikom
kreiranja ove aplikacije korištene su sledeće komponente .NET okruženja:

 TextBox
 Label
 DataGridView
 ComboBox
 CheckedListBox
 DateTimePicker
 ReportViewer
 MenuStrip

TextBox služi za unos podataka.


Label je komponenta koja se koristi za označavanje kontrola.
DataGridView služi za prikaz podataka.
ComboBox je kontrola koja se koristi za selekciju kao padajuća lista.
CheckedListBox služi za prikaz ListBox.
DateTimePicker služi da izaberemo datum koji želimo.
ReportViewer se koristi za prikazivanje izveštaja.
MenuStrip obezbeđuje meni za formu.

3
2. KORIŠTENE TEHNOLOGIJE

Prilikom kreiranja ove aplikacije koristio sam programski jezik C# i .NET okruženje. C#
predstavlja jezik koji je razvijen od strane Microsofta. Razvijen sa ciljem kako bi se radilo sa
.NET okruženjem.

.NET je razvojna platforma s novim interfejsom za programiranje aplikacija (engl.application


programming interface, API); nasledio je funkcionalnost i mogućnosti okruženja za
programiranje klasičnih operativnih sistema Windows, ali i usvojio brojne, različite tehnologije
koje Microsoft razvija od kraja devedesetih godina prošlog veka. To obuhvata rad s
komponentama COM+ i XML-om, objektno orijentisan dizajn,4 C# i .NET Framework podršku
za nove protokole za Web servise kakvi su SOAP, WSDL i UDDI, i orijentisanost ka Internetu;
sve je to integrisano u okviru DNA arhitekture (Distrubuted interNet Applications).
Microsoft .NET podržava ne samo nezavisnost jezika, već i njihovu integraciju. To znači da je
omogućeno nasleđivanje klasa, otkrivanje i obrada izuzetaka i polimorfizam između različitih
jezika. .NET Framework to postiže pomoću specifikacije zvane sistem zajedniåkih tipova (engl.
Common Type System, CTS), koju moraju da poštuju sve komponente platforme .NET. Na
primer, u okruženju .NET, sve je objekat neke klase koja se izvodi iz korene klase (engl. root
class) zvane System.Object. CTS podržava opšti koncept klasa, interfejsa i delegata (koji
podržavaju povratne pozive). Pored toga, .NET obuhvata zajedničku jezičku specifikaciju (engl.
Common Language Specification, CLS), koja sadrži niz osnovnih pravila neophodnih za
integraciju jezika. CLS definiše minimalne zahteve koje jezik mora ispunjavati da bi pripadao
porodici .NET jezika. Prevodioci (engl. compilers) usklađeni sa specifikacijom CLS prave
objekte koji mogu međusobno da sarađuju. Svaki jezik koji poštuje CLS moće da koristi čitavu
biblioteku klasa Frameworka (engl. Framework Class Library, FCL). .NET Framework je
postavàen preko operativnog sistema (bilo kog Windowsa), i sastoji se od većeg broja
komponenata u koje trenutno spadaju:
• Pet zvaničnih jezika: C#, VB, Visual C++, Visual Java# i JScript.NET
• CLR, objektno orijentisana platforma za razvoj Windows i Web aplikacija, zajednička
za sve pomenute jezike
• Brojne srodne biblioteke klasa, objedinjene pod imenom biblioteka klasa Frameworka
(FCL)

4
Slika 1.Dijagram arhitektonskih komponenata .NET Frameworka

C# 2.0 je jednostavan, bezbedan, moderan, objektno orijentisan jezik visokih performansi,


namenjen za pisanje .NET programa prilagođenih Internetu. C# je sada potpuno zreo jezik u
koga je ugrađeno tridesetogodišnje iskustvo.
C# je razoružavajuće jednostavan jezik, sa samo 80 rezervisanih reči i desetak ugrađenih tipova
podataka, ali je veoma izražajan kada je potrebno implementirati moderne programske ideje.
Podržava strukturirano, objektno orijentisano programiranje zasnovano na komponentama, što bi
se i očekivalo od modernog jezika nastalog na osnovu Jave i C++-a. Verzija C# 2.0 sadrži mnoge
od najvažnijih elemenata koji su nedostajali – na primer, generičke šablone (engl. generics) i
anonimne metode.

5
3. KREIRANJE APLIKACIJE

Kreiramo novu aplikaciju pod nazivom Seminarski. Prvo dodajemo novu bazu u projekat pod
nazivom: AutomobiliDB. Kako bi smo dodali novu bazu objekat kliknemo desnim tasterom miša
na ime projekta i izaberemo Add → New Item. Zatim u prozoru koji nam se otvori odaberemo
Service-Based Database i upišemo AutomobiliDB.

Slika 2. Kreiranje baze

Slika 3. Baza u Solution Exploreru

Nakon toga nam se pojavljuje prozor Data Source Configuration Wizard koji zatvaramo, pošto
ćemo podešavanja izvršiti kasnije. Kako bi smo dodali tabele u bazu kliknemo na desnim
tasterom na folder Tables i izaberemo opciju Add New Table.

6
Slika 4.Dodavanje novih tabela u bazu

Posle toga u bazu dodajemo u bazu šest novih tabela pod nazivima: Automobil, Kupovina,
Kupac, Automobil_Kupovina, Placanje, Prodavac.

U okviru tabele Kupac dodajemo sledeće kolone:

Slika 5.Izgled tabele Kupac

Za kolonu Kupac_ID namestimo da je primarni ključ. Posle toga za ovu kolonu namestimo
osobinu Identity Specification → Is Identity postaviti na Yes. Završavamo tako sto snimamo
tabelu pod nazivom Kupac.

Slika 6.Identity Specification postavljamo na Yes

7
U okviru tabele Kupovina dodajemo sledeće kolone:

Slika 7. Izgled tabele Kupovina

Za kolonu Kupovina_ID namestimo da je primarni ključ. Posle toga za ovu kolonu namestimo
osobinu Identity Specification → Is Identity postaviti na Yes. Završavamo tako sto snimamo
tabelu pod nazivom Kupovina.

U okviru tabele Automobil dodajemo sledeće kolone:

Slika 8. Izgled tabele Automobil

Za kolonu Automobil _ID namestimo da je primarni ključ. Posle toga za ovu kolonu namestimo
osobinu Identity Specification → Is Identity postaviti na Yes. Završavamo tako sto snimamo
tabelu pod nazivom Automobil.

U okviru tabele Automobil_Kupovina dodajemo sledeće kolone:

Slika 9. Izgled tabele Automobil_Kupovina

8
U okviru tabele Placanje dodajemo sledeće kolone:

Slika 10. Izgled tabele Placanje

Za kolonu Placanje_ID namestimo da je primarni ključ. Posle toga za ovu kolonu namestimo
osobinu Identity Specification → Is Identity postaviti na Yes. Završavamo tako sto snimamo
tabelu pod nazivom Placanje.

U okviru tabele Prodavac dodajemo sledeće kolone:

Slika 10. Izgled tabele Prodavac

Za kolonu Prodavac_ID namestimo da je primarni ključ. Posle toga za ovu kolonu namestimo
osobinu Identity Specification → Is Identity postaviti na Yes. Završavamo tako što snimamo
tabelu pod nazivom Prodavac.

Nakon toga dodajemo dijagram desnim klikom na Database Diagrams i odabirom opcije Add
New Diagram. Nakon toga u prozoru koji nam se pojavi izaberemo opciju Yes. Nakon toga
selektujemo sve tabele i dodamo ih pomoću opcije Add. Posle dodavanja tabele povezujemo
kolone sa primarnim ključem sa kolonama koje imaju isti naziv u drugim tabelama. Povezujemo:

 Kupac (Kupac_ID) → Kupovina (Kupac_ID)


 Placanje (Placanje_ID) → Kupovina (Placanje_ID)
 Kupovina (Kupovina_ID) → Automobil_ Kupovina (Kupovina _ID)
 Automobil (Automobil_ID) → Automobil_ Kupovina (Automobil_ID)
 Prodavac (Prodavac_ID) → Automobil (Prodavac_ID)

9
Slika 11. Izgled dijagrama koji prikazuje veze između tabela

Posle kreiranog modela dodajemo pet klasa u projekat. Imena klasa su: Automobil, Kupovina,
Prodavac, Automobil_Kupovina, Placanje, Kupac.

Posle dodatih klasa u aplikaciju dodajemo pet novih formi. Prva forma koju dodajemo je
frmKupac. Izgled ove forme je prikazan na sledećoj slici.

10
Slika 12. Izgled forme frmKupac
Imena komponenti su:

 Tekstualna polja

o TxtIme

o TxtPrezime

o TxtAdresa

 Dugmići:

o btnDodaj

o btnPromeni

o btnObrisi

o btnPotvrdi

o btnOdustani

 DataGridView kontrola:

o dgKupci

11
Za DataGridView kontrolu osobinu Anchor postaviti na Top, Bottom, Left, Right, a za sve ostale
komponente osobinu Anchor postaviti na Top.

Korisniku se u okviru forme frmKupac omogućava da unese sledeće podatke u tekstualna polja
ime Kupaca, prezime Kupaca, adresa Kupaca. Pored toga korisnik ima mogućnost da podatke
koje uneo prikaže u DataGridView tako što će kliknuti na dugme Dodaj, a zatim na dugme
Potvrdi. Jedna od mogućnosti koju korisnik ima posle dodavanja Kupaca u DataGridView je da
promeni neke od podataka vezane za Kupaca klkom na dugme Promeni, a nakon toga klikom na
dugme Potvrdi. Korisnik ima i mogućnost da izbriše nekog od dodatih Kupaca u DataGridView
tako što selektuje tog pevača u DataGridView i klikne dugme Obriši, pa na dugme Potvrdi.
Ukoliko se korisnik predomisli on ima mogućnost da nakon klika na dugme Dodaj, Promeni ili
Obrisi obustavi akciju koju je želeo da izvede klikom na dugme Odustani.

U sledećem koraku dodajemo formu pod nazivom frmKupovina. Izgled ove forme je prikazan
na sledećoj slici:

Slika 13. Izgled forme frmKupovina

12
Imena komponenti su:

 DateTimePicker kontrola:

o dtDatumNarudzbine

 ComboBox kontrole

o cbxKupac
o cbxPlacanje

 CheckedListBox

o clbxAutomobil

 Dugmići

o btnDodaj

o btnPromeni

o btnObrisi

o btnPotvrdi

o btnOdustani

 DataGridView kontrole

o dgNarudzbine
o dgAutomobil

Za DataGridView kontrolu osobinu Anchor postaviti na Top, Bottom, Left, Right, a za sve ostale
komponente osobinu Anchor postaviti na Top.

U okviru forme frmKupovina korisnik ima mogućnost da izabere datum kupovine, nekog od
kupaca u ComboBox kontroli cbxKupac, neku od ponuđenih načina plaćanja u okviru ComboBox
kontrole cbxPlacanje i nekog od ponuđenih automobila u okviru CheckedListBox kontrole
clbxAutomobil. Korisnik kao mogućnost ima da te podatke prikaže u DataGridView tako što će
kliknuti na dugme Dodaj, a nakon toga na dugme Potvrdi. Sledeća od mogućnosti kada je dodao
podatke za prijavu korisnik može i da promeni neki od podataka vezano za korisnika klikom na
dugme Promeni, a zatim klikom na dugme Potvrdi. Pored ovih opcija korisnik može da izbriše
prijavu koju je uneo u DataGridView tako što selektuje narudžbinu koju želi da obriše u
DataGridView i pritisne dugme Obrisi, a posle toga dugme Potvrdi. Ukoliko se korisnik
predomisli on ima mogućnost da nakon klika na dugme Dodaj, Promeni ili Obrisi obustavi
akciju koju je želeo da izvede klikom na dugme Odustani.

13
Dodajemo treću formu pod nazivom frmAutomobil. Izgled ove forme je prikazan na sledećoj
slici.

Slika 14. Izgled forme frmAutomobil

Imena komponenti su:

 Tekstualna polja

o TxtAutomobilc

o TxtBoja

o TxtBrojStampe

 Dugmići

o btnDodaj

o btnPromeni

o btnObrisi

o btnPotvrdi

o btnOdustani

14
 ComboBox kontrola:

o cbxProdavac

 DataGridView kontrola:

o dgAutomobil

Za DataGridView kontrolu osobinu Anchor postaviti na Top, Bottom, Left, Right, a za sve ostale
komponente osobinu Anchor postaviti na Top.

Korisniku se u okviru forme frmAutomobil omogućava da unese sledeće podatke u tekstualna


polja naziv automobila, boju, broj šasije i izabere iz Combobox kontrole naziv prodavca koji je
obavio prodaju, pošto se unesu podaci za formu Prodavac. Pored toga korisnik ima mogućnost
da podatke koje uneo prikaže u DataGridView tako što će kliknuti na dugme Dodaj, a zatim na
dugme Potvrdi. Jedna od mogućnosti koju korisnik ima posle dodavanja štampe u DataGridView
je da promeni neke od podataka vezane za štampu klikom na dugme Promeni, a nakon toga
klikom na dugme Potvrdi. Korisnik ima i mogućnost da izbriše neku od dodatih štampi u
DataGridView tako što selektuje tu štampu u DataGridView i klikne dugme Obriši, pa na dugme
Potvrdi. Ukoliko se korisnik predomisli on ima mogućnost da nakon klika na dugme Dodaj,
Promeni ili Obrisi obustavi akciju koju je želeo da izvede klikom na dugme Odustani.

U sledećem koraku dodajemo formu pod nazivom frmProdavac. Izgled ove forme je prikazan
na sledećoj slici:

Slika 15. Izgled forme frmProdavac


Imena komponenti su:

15
 Tekstualna polja

o txtIme

o txtPrezime

o txtDuznost

 Dugmići

o btnDodaj

o btnPromeni

o btnObrisi

o btnPotvrdi

o btnOdustani

 DataGridView kontrola

o dgProdavac

Za DataGridView kontrolu osobinu Anchor postaviti na Top, Bottom, Left, Right, a za sve ostale
komponente osobinu Anchor postaviti na Top.

U okviru forme frmProdavac korisnik ima mogućnost da unese sledeće podatke u tekstualna
polja i upiše ih u bazu: ime i prezime prodavca, kao i dužnost koju obavlja. Korisnik može te
podatke da prikaže u DataGridView tako što će pritisnuti na dugme Dodaj, a potom na dugme
Potvrdi. Sledeća od mogućnosti kada je dodao podatke za zaposlenog korisnik može i da
promeni neki od podataka vezano za prodavca klikom na dugme Promeni, a zatim klikom na
dugme Potvrdi. Nakon toga ovih korisnik može da obriše prodavca koju je uneo u DataGridView
tako što selektuje prodavca kojeg želi da obriše u DataGridView i pritisne dugme Obrisi, a zatim
dugme Potvrdi. Ukoliko se korisnik predomisli on ima mogućnost da nakon klika na dugme
Dodaj, Promeni ili Obrisi obustavi akciju koju je želeo da izvede klikom na dugme Odustani.

16
Dodajemo petu formu pod nazivom frmPlacanje. Izgled forme je prikazan na sledećoj slici.

Slika 15. Izgled forme frmPlacanje

Imena komponenti su:

 Tekstualna polja

o txtNaziv

o txtTip

 Dugmići

o btnDodaj

o btnPromeni

o btnObrisi

o btnPotvrdi

o btnOdustani

 DataGridView kontrola

o dgPlacanje

17
Za DataGridView kontrolu osobinu Anchor postaviti na Top, Bottom, Left, Right, a za sve ostale
komponente osobinu Anchor postaviti na Top.

U okviru forme frmPlacanje korisnik ima na raspolaganju mogućnost da unese sledeće podatke u
tekstualna polja i upiše ih u bazu: način plaćanja i valutu plaćanja. Kao mogućnost korisnik ima i
da te podatke prikaže u DataGridView tako što će pritisnuti na dugme Dodaj, a potom na dugme
Potvrdi. Sledeća od mogućnosti kada je dodao podatke za pesmu korisnik može i da promeni
neki od podataka vezano za korisnika klikom na dugme Promeni, a zatim klikom na dugme
Potvrdi. Pored ovih opcija korisnik može da obriše uslugu koju je uneo u DataGridView tako što
selektuje pesmu koju želi da obriše u DataGridView i pritisne dugme Obrisi, a zatim dugme
Potvrdi. Ukoliko se korisnik predomisli on ima mogućnost da nakon klika na dugme Dodaj,
Promeni ili Obrisi obustavi akciju koju je želeo da izvede klikom na dugme Odustani.

Dodajemo još jednu formu koju ćemo koristiti kao izveštaje. Za naziv forme stavljamo
frmIzvestajAuto. Prikaz forme je prikazan na sledećoj slici.

Slika 16. Izgled forme frmIzvestajAuto

Imena komponenti su:

 Combobox

o cbxProdavac

18
 ReportViewer

o reportViewer1

Osobinu Anchor za labelu i combobox stavimo na Top, a za reportviewer Top, Bottom, Left,
Right. U sledećem koraku dodajemo izveštaj rptAutomobil, a izvor podataka je objekat
rptAutomobil.

U okviru forme frmIzvestajAutomobil korisnik ima mogućnost da odabere nekog prodavca koga
je prethodno uneo u bazu i koji je izvršio neku prodaju i da za tog zaposlenog dobije sledeće
podatke: broj šasije, naziv automobila, boju automobila, kao i prikaz imena i prezimena
prodavca. Korisnik ima i mogućnost da odabere izveštaj za sve prodavce koji se nalaze u bazi
podataka.

Nakon toga prelazimo na glavnu formu, gde osobinu IsMdiContainer postavljamo na True. Posle
toga na glavnu formu stavljamo Menu Strip kontrolu koja poseduje sledeće stavke:

 Stavka Podaci

o podstavka Placanje ( osobina name: mniPodaciPlacanje)

o podstavka Kupac ( osobina name: mniPodaciKupac)

o podstavka Prodavac ( osobina name: mniPodaciProdavac)

o podstavka Automobil (osobina name: mniPodaciAutomobil)

o podstavka Kupovina (osobina name: mniPodaciKupovina)

 Stavka Izvestaji

o podstavka Automobil (osobina name: mniIzvestajiAutomobil)

Izgled glavne forme je prikazan na sledećoj slici.

19
Slika 17. Izgled glavne forme

Na glavnoj formi korisnik ima mogućnost da odabere jednu od stavki Podaci ili Izvestaji, ako
odabere stavku Podaci pojavljuju mu se sledeće podstavke Placanje, Kupac, Prodavac,
Automobil i Kupovina. Klikom na podstavku Placanje prelazimo na formu frmPlacanje, klikom
na podstavku Kupac prelazimo na formu frmKupac, klikom na podstavku Prodavac prelazimo
na formu frmProdavac, klikom na podstavku Automobil prelazimo na formu frmAutomobil,
klikom na podstavku Kupovina prelazimo na formu frmKupovina. Klikom na stavku Izvestaji
korisniku se pojavljuje podstavka Automobil. Ukoliko korisnik klikne na podstavku Automobil
prelazi na formu frmIzvestajAutomobil.

Na kraju kreiranja svake forme, treba povezati događaje sa određenim dugmadima i stavkama
menija.

20
4. ZAKLjUČAK

Aplikacija koja je kreirana naziva se „Prodavnica Automobila“ i smatram da je adaptirana za


lako i jednostavno korišćenje. Aplikacija se može koristiti u svrhe za unos i isčitavanje podataka
u prodavnici automobila. Aplikacija se može naknadno uređivati i može joj se dodati još opcija
ili drugačiji pristup.

21
5. LITERATURA

1. http://www.academia.edu

2. Microsoft Software Development Network, <https://msdn.microsoft.com/en-


us/default.aspx>

3. Literatura sa časova vežbi, Softversko inženjerstvo 1

4. www.mikroknjiga.rs/Knjige/CT4/01_CT4.pdf

22
6. LISTING KODOVA

Kod za klasu Placanje.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProdavnicaAutomobila
{
public partial class Placanje
{
partial void OnNacinChanging(string value)
{
if (string.IsNullOrEmpty(value))
throw new Exception("Nacin placanja mora biti unet!");
}

partial void OnValutaChanging(string value)


{
if (string.IsNullOrEmpty(value))
throw new Exception("Valuta placanja mora biti uneta!");
}

public void dodajPlacanje()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
ctx.Placanjes.AddObject(this);
ctx.SaveChanges();
}
}

public void azurirajPlacanje()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var pla = (from s in ctx.Placanjes
where s.Placanje_ID == Placanje_ID
select s).FirstOrDefault();
pla.Nacin = Nacin;
pla.Valuta = Valuta;
ctx.SaveChanges();
}
}

public void obrisiPlacanje()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var pla = (from s in ctx.Placanjes
where s.Placanje_ID == Placanje_ID
select s).FirstOrDefault();
ctx.Placanjes.DeleteObject(pla);

23
ctx.SaveChanges();
}
}

public static List<Placanje> ucitajPlacanja()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var placanjeList = from sl in ctx.Placanjes
select sl;
List<Placanje> returnLista = placanjeList.ToList<Placanje>();
return returnLista;
}
}
}
}

Kod za klasu Kupac.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProdavnicaAutomobila
{
public partial class Kupac
{
partial void OnImeChanging(string value)
{
if (string.IsNullOrEmpty(value))
throw new Exception("Ime kupca mora biti uneto!");
}

partial void OnPrezimeChanging(string value)


{
if (string.IsNullOrEmpty(value))
throw new Exception("Prezime kupca mora biti uneto!");
}

partial void OnAdresaChanging(string value)


{
if (string.IsNullOrEmpty(value))
throw new Exception("Adresa kupca mora biti unet!");
}

public void dodajKupca()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
ctx.Kupacs.AddObject(this);
ctx.SaveChanges();

24
}
}

public void azurirajKupca()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var kup = (from s in ctx.Kupacs
where s.Kupac_ID == Kupac_ID
select s).FirstOrDefault();
kup.Ime = Ime;
kup.Prezime = Prezime;
kup.Adresa = Adresa;
ctx.SaveChanges();
}
}

public void obrisiKupca()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var kup = (from s in ctx.Kupacs
where s.Kupac_ID == Kupac_ID
select s).FirstOrDefault();
ctx.Kupacs.DeleteObject(kup);
ctx.SaveChanges();
}
}

public static List<Kupac> ucitajKupce()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var kupciList = from sl in ctx.Kupacs
select sl;
List<Kupac> returnLista = kupciList.ToList<Kupac>();
return returnLista;
}
}
}
}

Kod za klasu Prodavac.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProdavnicaAutomobila
{
public partial class Prodavac
{
partial void OnImeChanging(string value)

25
{
if (string.IsNullOrEmpty(value))
throw new Exception("Ime prodavca mora biti uneto!");
}

partial void OnPrezimeChanging(string value)


{
if (string.IsNullOrEmpty(value))
throw new Exception("Prezime prodavca mora biti uneto!");
}

partial void OnDuznostChanging(string value)


{
if (string.IsNullOrEmpty(value))
throw new Exception("Duznost prodavca mora biti uneta!");
}

public void dodajProdavca()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
ctx.Prodavacs.AddObject(this);
ctx.SaveChanges();
}
}

public void azurirajProdavca()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var zap = (from s in ctx.Prodavacs
where s.Prodavac_ID == Prodavac_ID
select s).FirstOrDefault();
zap.Ime = Ime;
zap.Prezime = Prezime;
zap.Duznost = Duznost;
ctx.SaveChanges();
}
}

public void obrisiProdavca()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var zap = (from s in ctx.Prodavacs
where s.Prodavac_ID == Prodavac_ID
select s).FirstOrDefault();
ctx.Prodavacs.DeleteObject(zap);
ctx.SaveChanges();
}
}

public static List<Prodavac> ucitajProdavce()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var prodavciList = from sl in ctx.Prodavacs
select sl;

26
List<Prodavac> returnLista = prodavciList.ToList<Prodavac>();
return returnLista;
}
}
}
}

Kod za klasu Automobil.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProdavnicaAutomobila
{
public partial class Automobil
{
partial void OnNazivChanging(string value)
{
if (string.IsNullOrEmpty(value))
throw new Exception("Naziv automobila mora biti unet!");
}

partial void OnBSChanging(int value)


{
if (value < 1)
throw new Exception("Broj sasije mora biti pozitivan!");
}

partial void OnBojaChanging(string value)


{
if (string.IsNullOrEmpty(value))
throw new Exception("Boja automobila mora biti uneta!");
}

partial void OnProdavac_IDChanging(int value)


{
if (value < 1)
throw new Exception("Morate odabrati prodavca za dati automobil!");
}

public void dodajStampu()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
ctx.Automobils.AddObject(this);
ctx.SaveChanges();
}
}

public void azurirajStampa()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())

27
{
var auto = (from s in ctx.Automobils
where s.Automobil_ID == Automobil_ID
select s).FirstOrDefault();
auto.Naziv = Naziv;
auto.BS = BS;
auto.Boja = Boja;
auto.Prodavac_ID = Prodavac_ID;
ctx.SaveChanges();
}
}

public void obrisiAuto()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var auto = (from s in ctx.Automobils
where s.Automobil_ID == Automobil_ID
select s).FirstOrDefault();
ctx.Automobils.DeleteObject(auto);
ctx.SaveChanges();
}
}

public static List<Automobil> ucitajAuto()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var autoList = from sl in ctx.Automobils.
Include("Prodavac").Include("Kupovinas")
select sl;
List<Automobil> returnLista = autoList.ToList<Automobil>();
return returnLista;
}
}

public static List<Automobil> ucitajAutoZaProdavca(int ZaposleniId)


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var autoList = from sl in ctx.Automobils.Include("Prodavac")
where sl.Prodavac_ID == ZaposleniId
select sl;
List<Automobil> returnLista = autoList.ToList<Automobil>();
return returnLista;
}
}
}
}

Kod za klasu Kupovina.cs:

using System;
using System.Collections.Generic;

28
using System.Linq;
using System.Text;

namespace ProdavnicaAutomobila
{
public partial class Kupovina
{
public void dodajKupovinu(List<int> autoIDs)
{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
foreach (int autoId in autoIDs)
{
Automobil aut = (from s in ctx.Automobils
where s.Automobil_ID == autoId
select s).FirstOrDefault();
this.Automobils.Add(aut);
}
ctx.Kupovinas.AddObject(this);
ctx.SaveChanges();
}
}

public void azurirajKupovinu(List<int> autoIDs)


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
Kupovina kupovina = (from s in ctx.Kupovinas.Include("Kupovina")
where s.Kupovina_ID == Kupovina_ID
select s).FirstOrDefault();
kupovina.Datum = Datum;
kupovina.Kupac_ID = Kupac_ID;
kupovina.Placanje_ID = Placanje_ID;

kupovina.Automobils.Clear();
foreach (int autId in autoIDs)
{
Automobil aut = (from s in ctx.Automobils
where s.Automobil_ID == autId
select s).FirstOrDefault(); ;
kupovina.Automobils.Add(aut);
}
ctx.SaveChanges();
}
}

public void obrisiKupovinu()


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var kupovina = (from s in ctx.Kupovinas.Include("Automobil")
where s.Kupac_ID == Kupac_ID
where s.Placanje_ID == Placanje_ID
select s).FirstOrDefault();
ctx.Kupovinas.DeleteObject(kupovina);
ctx.SaveChanges();
}
}

29
public static List<Kupovina> ucitajKupovine()
{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var kupovineList = from sl in ctx.Kupovinas.Include("Automobils").
Include("Kupac").Include("Placanje")
select sl;
List<Kupovina> returnLista = kupovineList.ToList<Kupovina>();
return returnLista;
}
}

internal static List<Kupovina> ucitajKupovineZaKupca(int kupacID)


{
using (AutomobiliDBEntities ctx = new AutomobiliDBEntities())
{
var kupovinaList = from sl in ctx.Kupovinas.Include("Automobils").
Include("Kupac").Include("Placanje")
where sl.Kupac_ID == kupacID
select sl;
List<Kupovina> returnLista = kupovinaList.ToList<Kupovina>();
return returnLista;
}
}
}
}

Kod za formu frmPlacanje:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace ProdavnicaAutomobila
{
public partial class frmPlacanje : Form
{
List<Placanje> placanjeList = new List<Placanje>();
string akcija = "";
int indeksSelektovanog = -1;

public frmPlacanje()
{
InitializeComponent();

dgPlacanje.AllowUserToAddRows = false;
dgPlacanje.AllowUserToDeleteRows = false;
dgPlacanje.ReadOnly = true;
dgPlacanje.AutoGenerateColumns = false;

dgPlacanje.Columns.Add("ID", "ID");
dgPlacanje.Columns["ID"].Visible = false;

30
dgPlacanje.Columns.Add("nacinPlacanja", "Nacin placanja");
dgPlacanje.Columns.Add("valutaPlacanja", "Valuta");

txtDisabled();
btnChangeEnabled();
btnSubmitDisabled();

prikaziPlacanjeDGV();
}

private void txtDisabled()


{
txtNacin.Enabled = false;
txtValuta.Enabled = false;
}

private void txtEnabled()


{
txtNacin.Enabled = true;
txtValuta.Enabled = true;
}

private void btnChangeDisabled()


{
btnDodaj.Enabled = false;
btnPromeni.Enabled = false;
btnObrisi.Enabled = false;
}

private void btnChangeEnabled()


{
btnDodaj.Enabled = true;
btnPromeni.Enabled = true;
btnObrisi.Enabled = true;
}

private void btnSubmitDisabled()


{
btnPotvrdi.Enabled = false;
btnOdustani.Enabled = false;
}

private void btnSubmitEnabled()


{
btnPotvrdi.Enabled = true;
btnOdustani.Enabled = true;
}

private void ponistiUnosTxt()


{
txtNacin.Text = "";
txtValuta.Text = "";
}

private void prikaziPlacanjeTxt()


{
int idSelektovanog = (int)dgPlacanje.SelectedRows[0].Cells["ID"].Value;
Placanje selektovanoPlacanje =

31
placanjeList.Where(x => x.Placanje_ID ==
idSelektovanog).FirstOrDefault();

txtNacin.Text = selektovanoPlacanje.Nacin;
txtValuta.Text = selektovanoPlacanje.Valuta;
}

private void prikaziPlacanjeDGV()


{
placanjeList = Placanje.ucitajPlacanja();
dgPlacanje.Rows.Clear();
for (int i = 0; i < placanjeList.Count; i++)
{
dgPlacanje.Rows.Add();
dgPlacanje.Rows[i].Cells["ID"].Value =
placanjeList[i].Placanje_ID;
dgPlacanje.Rows[i].Cells["nacinPlacanja"].Value =
placanjeList[i].Nacin;
dgPlacanje.Rows[i].Cells["valutaPlacanja"].Value =
placanjeList[i].Valuta;
}
ponistiUnosTxt();
dgPlacanje.CurrentCell = null;
if (placanjeList.Count > 0)
{
dgPlacanje.ClearSelection();
if (indeksSelektovanog != -1)
dgPlacanje.Rows[indeksSelektovanog].Selected = true;
else
dgPlacanje.Rows[0].Selected = true;
prikaziPlacanjeTxt();
}
}

private void btnDodaj_Click(object sender, EventArgs e)


{
ponistiUnosTxt();
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "dodaj";
}

private void btnObrisi_Click(object sender, EventArgs e)


{
if (dgPlacanje.SelectedRows.Count > 0)
{
if (MessageBox.Show("Da li zelite da obrisete odabrano placanje?",
"Potvrda brisanja", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
int idSelektovanog =
(int)dgPlacanje.SelectedRows[0].Cells["ID"].Value;
Placanje selektovanoPlacanje =
placanjeList.Where(x => x.Placanje_ID ==
idSelektovanog).FirstOrDefault();
selektovanoPlacanje.obrisiPlacanje();
indeksSelektovanog = -1;
prikaziPlacanjeDGV();

32
}
}
else
{
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPromeni_Click(object sender, EventArgs e)


{
if (dgPlacanje.SelectedRows.Count > 0)
{
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "promeni";
}
else
{
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPotvrdi_Click(object sender, EventArgs e)


{
try
{
if (akcija == "promeni")
{
int idSelektovanog =
(int)dgPlacanje.SelectedRows[0].Cells["ID"].Value;
Placanje selektovanoPlacanje =
placanjeList.Where(x => x.Placanje_ID ==
idSelektovanog).FirstOrDefault();
selektovanoPlacanje.Nacin = txtNacin.Text;
selektovanoPlacanje.Valuta = txtValuta.Text;
selektovanoPlacanje.azurirajPlacanje();
indeksSelektovanog = dgPlacanje.SelectedRows[0].Index;
}
else if (akcija == "dodaj")
{
Placanje usl = new Placanje();
usl.Nacin = txtNacin.Text;
usl.Valuta = txtValuta.Text;
usl.dodajPlacanje();
indeksSelektovanog = dgPlacanje.Rows.Count;
}
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
prikaziPlacanjeDGV();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

33
private void btnOdustani_Click(object sender, EventArgs e)
{
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
}

private void dgPlacanje_CellClick(object sender,


DataGridViewCellEventArgs e)
{
if (dgPlacanje.CurrentRow != null)
{
dgPlacanje.Rows[dgPlacanje.CurrentRow.Index].Selected = true;
prikaziPlacanjeTxt();
}
}
}
}

Kod za formu frmKupac:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace ProdavnicaAutomobila
{
public partial class frmKupac : Form
{
List<Kupac> kupciList = new List<Kupac>();
string akcija = "";
int indeksSelektovanog = -1;

public frmKupac()
{
InitializeComponent();

dgKupci.AllowUserToAddRows = false;
dgKupci.AllowUserToDeleteRows = false;
dgKupci.ReadOnly = true;
dgKupci.AutoGenerateColumns = false;

dgKupci.Columns.Add("ID", "ID");
dgKupci.Columns["ID"].Visible = false;
dgKupci.Columns.Add("imeKupca", "Ime");
dgKupci.Columns.Add("prezimeKupca", "Prezime");
dgKupci.Columns.Add("adresaKupca", "Adresa");

txtDisabled();
btnChangeEnabled();
btnSubmitDisabled();

prikaziKupceDGV();
}

34
private void txtDisabled()
{
txtIme.Enabled = false;
txtPrezime.Enabled = false;
txtAdresa.Enabled = false;
}

private void txtEnabled()


{
txtIme.Enabled = true;
txtPrezime.Enabled = true;
txtAdresa.Enabled = true;
}

private void btnChangeDisabled()


{
btnDodaj.Enabled = false;
btnPromeni.Enabled = false;
btnObrisi.Enabled = false;
}

private void btnChangeEnabled()


{
btnDodaj.Enabled = true;
btnPromeni.Enabled = true;
btnObrisi.Enabled = true;
}

private void btnSubmitDisabled()


{
btnPotvrdi.Enabled = false;
btnOdustani.Enabled = false;
}

private void btnSubmitEnabled()


{
btnPotvrdi.Enabled = true;
btnOdustani.Enabled = true;
}

private void ponistiUnosTxt()


{
txtIme.Text = "";
txtPrezime.Text = "";
txtAdresa.Text = "";
}

private void prikaziKlijentaTxt()


{
int idSelektovanog = (int)dgKupci.SelectedRows[0].Cells["ID"].Value;
Kupac selektovaniKupac =
kupciList.Where(x => x.Kupac_ID == idSelektovanog).FirstOrDefault();

txtIme.Text = selektovaniKupac.Ime;
txtPrezime.Text = selektovaniKupac.Prezime;
txtAdresa.Text = selektovaniKupac.Adresa;
}

35
private void prikaziKupceDGV()
{
kupciList = Kupac.ucitajKupce();
dgKupci.Rows.Clear();
for (int i = 0; i < kupciList.Count; i++)
{
dgKupci.Rows.Add();
dgKupci.Rows[i].Cells["ID"].Value =
kupciList[i].Kupac_ID;
dgKupci.Rows[i].Cells["imeKupca"].Value =
kupciList[i].Ime;
dgKupci.Rows[i].Cells["prezimeKupca"].Value =
kupciList[i].Prezime;
dgKupci.Rows[i].Cells["adresaKupca"].Value =
kupciList[i].Adresa;
}
ponistiUnosTxt();
dgKupci.CurrentCell = null;
if (kupciList.Count > 0)
{
if (indeksSelektovanog != -1)
dgKupci.Rows[indeksSelektovanog].Selected = true;
else
dgKupci.Rows[0].Selected = true;
prikaziKlijentaTxt();
}
}

private void btnDodaj_Click(object sender, EventArgs e)


{
ponistiUnosTxt();
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "dodaj";
}

private void btnObrisi_Click(object sender, EventArgs e)


{
if (dgKupci.SelectedRows.Count > 0)
{
if (MessageBox.Show("Da li zelite da obrisete odabranog kupca?",
"Potvrda brisanja", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
int idSelektovanog = (int)dgKupci.SelectedRows[0].Cells["ID"].Value;
Kupac selektovaniKupac =
kupciList.Where(x => x.Kupac_ID ==
idSelektovanog).FirstOrDefault();
selektovaniKupac.obrisiKupca();
indeksSelektovanog = -1;
prikaziKupceDGV();
}
}
else
{
MessageBox.Show("Nema podataka ili ni jedan red nije odabran!");
}

36
}

private void btnPromeni_Click(object sender, EventArgs e)


{
if (dgKupci.SelectedRows.Count > 0)
{
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "promeni";
}
else
{
MessageBox.Show("Nema podataka ili ni jedan red nije odabran!");
}
}

private void btnPotvrdi_Click(object sender, EventArgs e)


{
try
{
if (akcija == "promeni")
{
int idSelektovanog = (int)dgKupci.SelectedRows[0].Cells["ID"].Value;
Kupac selektovaniKupac =
kupciList.Where(x => x.Kupac_ID ==
idSelektovanog).FirstOrDefault();
selektovaniKupac.Ime = txtIme.Text;
selektovaniKupac.Prezime = txtPrezime.Text;
selektovaniKupac.Adresa = txtAdresa.Text;
selektovaniKupac.azurirajKupca();
indeksSelektovanog = dgKupci.SelectedRows[0].Index;
}
else if (akcija == "dodaj")
{
Kupac kup = new Kupac();
kup.Ime = txtIme.Text;
kup.Prezime = txtPrezime.Text;
kup.Adresa = txtAdresa.Text;
kup.dodajKupca();
indeksSelektovanog = dgKupci.Rows.Count;
}
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
prikaziKupceDGV();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void btnOdustani_Click(object sender, EventArgs e)


{
txtDisabled();
btnSubmitDisabled();

37
btnChangeEnabled();
}

private void dgKlijenti_CellClick(object sender,


DataGridViewCellEventArgs e)
{
if (dgKupci.CurrentRow != null)
{
dgKupci.Rows[dgKupci.CurrentRow.Index].Selected = true;
prikaziKlijentaTxt();
}
}
}
}

Kod za formu frmProdavac:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace ProdavnicaAutomobila
{
public partial class frmProdavac : Form
{
List<Prodavac> prodavciList = new List<Prodavac>();
string akcija = "";
int indeksSelektovanog = -1;

public frmProdavac()
{
InitializeComponent();

dgProdavac.AllowUserToAddRows = false;
dgProdavac.AllowUserToDeleteRows = false;
dgProdavac.ReadOnly = true;
dgProdavac.AutoGenerateColumns = false;

dgProdavac.Columns.Add("ID", "ID");
dgProdavac.Columns["ID"].Visible = false;
dgProdavac.Columns.Add("imeprodavca", "Ime");
dgProdavac.Columns.Add("prezimeProdavca", "Prezime");
dgProdavac.Columns.Add("duznostProdavca", "Duznost");

txtDisabled();
btnChangeEnabled();
btnSubmitDisabled();

prikaziProdavceDGV();
}

private void txtDisabled()


{
txtIme.Enabled = false;

38
txtPrezime.Enabled = false;
txtDuznost.Enabled = false;
}

private void txtEnabled()


{
txtIme.Enabled = true;
txtPrezime.Enabled = true;
txtDuznost.Enabled = true;
}

private void btnChangeDisabled()


{
btnDodaj.Enabled = false;
btnPromeni.Enabled = false;
btnObrisi.Enabled = false;
}

private void btnChangeEnabled()


{
btnDodaj.Enabled = true;
btnPromeni.Enabled = true;
btnObrisi.Enabled = true;
}

private void btnSubmitDisabled()


{
btnPotvrdi.Enabled = false;
btnOdustani.Enabled = false;
}

private void btnSubmitEnabled()


{
btnPotvrdi.Enabled = true;
btnOdustani.Enabled = true;
}

private void ponistiUnosTxt()


{
txtIme.Text = "";
txtPrezime.Text = "";
txtDuznost.Text = "";
}

private void prikaziProdavcaTxt()


{
int idSelektovanog = (int)dgProdavac.SelectedRows[0].Cells["ID"].Value;
Prodavac selektovaniProdavac =
prodavciList.Where(x => x.Prodavac_ID ==
idSelektovanog).FirstOrDefault();
if (selektovaniProdavac != null)
{
txtIme.Text = selektovaniProdavac.Ime;
txtPrezime.Text = selektovaniProdavac.Prezime;
txtDuznost.Text = selektovaniProdavac.Duznost;
}
}

39
private void prikaziProdavceDGV()
{
prodavciList = Prodavac.ucitajProdavce();
dgProdavac.Rows.Clear();
for (int i = 0; i < prodavciList.Count; i++)
{
dgProdavac.Rows.Add();
dgProdavac.Rows[i].Cells["ID"].Value =
prodavciList[i].Prodavac_ID;
dgProdavac.Rows[i].Cells["imeProdavca"].Value =
prodavciList[i].Ime;
dgProdavac.Rows[i].Cells["prezimeProdavca"].Value =
prodavciList[i].Prezime;
dgProdavac.Rows[i].Cells["duznostProdavca"].Value =
prodavciList[i].Duznost;
}
ponistiUnosTxt();
dgProdavac.CurrentCell = null;
if (prodavciList.Count > 0)
{
if (indeksSelektovanog != -1)
dgProdavac.Rows[indeksSelektovanog].Selected = true;
else
dgProdavac.Rows[0].Selected = true;
prikaziProdavcaTxt();
}
}

private void btnDodaj_Click(object sender, EventArgs e)


{
ponistiUnosTxt();
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "dodaj";
}

private void btnObrisi_Click(object sender, EventArgs e)


{
if (dgProdavac.SelectedRows.Count > 0)
{
if (MessageBox.Show("Da li zelite da obrisete odabranog prodavca?",
"Potvrda brisanja", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
int idSelektovanog =
(int)dgProdavac.SelectedRows[0].Cells["ID"].Value;
Prodavac selektovaniProdavac = prodavciList.Where(x => x.Prodavac_ID
== idSelektovanog).FirstOrDefault();
if (selektovaniProdavac != null)
{
selektovaniProdavac.obrisiProdavca();
}
indeksSelektovanog = -1;
prikaziProdavceDGV();
}
}
else
{

40
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPromeni_Click(object sender, EventArgs e)


{
if (dgProdavac.SelectedRows.Count > 0)
{
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "promeni";
}
else
{
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPotvrdi_Click(object sender, EventArgs e)


{
try
{
if (akcija == "promeni")
{
int idSelektovanog =
(int)dgProdavac.SelectedRows[0].Cells["ID"].Value;
Prodavac selektovaniProdavac = prodavciList.Where(x => x.Prodavac_ID
== idSelektovanog).FirstOrDefault();

selektovaniProdavac.Ime = txtIme.Text;
selektovaniProdavac.Prezime = txtPrezime.Text;
selektovaniProdavac.Duznost = txtDuznost.Text;
selektovaniProdavac.azurirajProdavca();
indeksSelektovanog = dgProdavac.SelectedRows[0].Index;
}
else if (akcija == "dodaj")
{
Prodavac pro = new Prodavac();
pro.Ime = txtIme.Text;
pro.Prezime = txtPrezime.Text;
pro.Duznost = txtDuznost.Text;
pro.dodajProdavca();
indeksSelektovanog = dgProdavac.Rows.Count;
}
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
akcija = "";
prikaziProdavceDGV();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void btnOdustani_Click(object sender, EventArgs e)

41
{
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
}

private void dgProdavci_CellClick(object sender,


DataGridViewCellEventArgs e)
{
if (dgProdavac.CurrentRow != null)
{
dgProdavac.Rows[dgProdavac.CurrentRow.Index].Selected = true;
prikaziProdavcaTxt();
}
}
}
}

Kod za formu frmAutomobil:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Collections;

namespace ProdavnicaAutomobila
{
public partial class frmAutomobil : Form
{
List<Automobil> autoList = new List<Automobil>();
string akcija = "";
int indeksSelektovanog = -1;

public frmAutomobil()
{
InitializeComponent();

dgAuto.AllowUserToAddRows = false;
dgAuto.AllowUserToDeleteRows = false;
dgAuto.ReadOnly = true;
dgAuto.AutoGenerateColumns = false;

dgAuto.Columns.Add("ID", "ID");
dgAuto.Columns["ID"].Visible = false;
dgAuto.Columns.Add("nazivAutomobila", "Naziv");
dgAuto.Columns.Add("BS", "Broj stampe");
dgAuto.Columns.Add("bojaAutomobila", "Boja");
dgAuto.Columns.Add("imeProdavca", "Ime prodavca");
dgAuto.Columns.Add("prezimeProdavca", "Prezime prodavca");

List<Prodavac> prodavacList = Prodavac.ucitajProdavce();


cbxProdavac.Items.Add(new DictionaryEntry("Odaberite prodavca", 0));
foreach (Prodavac pro in prodavacList)
{

42
cbxProdavac.Items.Add(new DictionaryEntry(
pro.Ime + " " + pro.Prezime, pro.Prodavac_ID));
}
cbxProdavac.DisplayMember = "Key";
cbxProdavac.ValueMember = "Value";
cbxProdavac.DataSource = cbxProdavac.Items;

txtDisabled();
btnChangeEnabled();
btnSubmitDisabled();

prikaziAutoDGV();
}

private void txtDisabled()


{
txtAuto.Enabled = false;
txtBS.Enabled = false;
txtBoja.Enabled = false;
cbxProdavac.Enabled = false;
}

private void txtEnabled()


{
txtAuto.Enabled = true;
txtBS.Enabled = true;
txtBoja.Enabled = true;
cbxProdavac.Enabled = true;
}

private void btnChangeDisabled()


{
btnDodaj.Enabled = false;
btnPromeni.Enabled = false;
btnObrisi.Enabled = false;
}

private void btnChangeEnabled()


{
btnDodaj.Enabled = true;
btnPromeni.Enabled = true;
btnObrisi.Enabled = true;
}

private void btnSubmitDisabled()


{
btnPotvrdi.Enabled = false;
btnOdustani.Enabled = false;
}

private void btnSubmitEnabled()


{
btnPotvrdi.Enabled = true;
btnOdustani.Enabled = true;
}

private void ponistiUnosTxt()


{

43
txtAuto.Text = "";
txtBS.Text = "";
txtBoja.Text = "";
cbxProdavac.SelectedIndex = 0;
}

private void prikaziAutoTxt()


{
int idSelektovanog = (int)dgAuto.SelectedRows[0].Cells["ID"].Value;
Automobil selektovaniAuto =
autoList.Where(x => x.Automobil_ID == idSelektovanog).FirstOrDefault();
if (selektovaniAuto != null)
{
txtAuto.Text = selektovaniAuto.Naziv;
txtBS.Text = selektovaniAuto.BS.ToString();
txtBoja.Text = selektovaniAuto.Boja;
int zapIndex = cbxProdavac.FindString(
selektovaniAuto.Prodavac.Ime + " " +
selektovaniAuto.Prodavac.Prezime);
cbxProdavac.SelectedIndex = zapIndex;
}
}

private void prikaziAutoDGV()


{
autoList = Automobil.ucitajAuto();
dgAuto.Rows.Clear();
for (int i = 0; i < autoList.Count; i++)
{
dgAuto.Rows.Add();
dgAuto.Rows[i].Cells["ID"].Value =
autoList[i].Automobil_ID;
dgAuto.Rows[i].Cells["nazivAutomobila"].Value =
autoList[i].Naziv;
dgAuto.Rows[i].Cells["BS"].Value =
autoList[i].BS;
dgAuto.Rows[i].Cells["bojaAutomobila"].Value =
autoList[i].Boja;
dgAuto.Rows[i].Cells["imeProdavca"].Value =
autoList[i].Prodavac.Ime;
dgAuto.Rows[i].Cells["prezimeProdavca"].Value =
autoList[i].Prodavac.Prezime;
}
ponistiUnosTxt();
dgAuto.CurrentCell = null;
if (autoList.Count > 0)
{
if (indeksSelektovanog != -1)
dgAuto.Rows[indeksSelektovanog].Selected = true;
else
dgAuto.Rows[0].Selected = true;
prikaziAutoTxt();
}
}

private void btnDodaj_Click(object sender, EventArgs e)


{
ponistiUnosTxt();

44
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "dodaj";
}

private void btnObrisi_Click(object sender, EventArgs e)


{
if (dgAuto.SelectedRows.Count > 0)
{
if (MessageBox.Show("Da li zelite da obrisete odabrani automobil?",
"Potvrda brisanja", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
int idSelektovanog = (int)dgAuto.SelectedRows[0].Cells["ID"].Value;
Automobil selektovaniAuto = autoList.Where(x => x.Automobil_ID ==
idSelektovanog).FirstOrDefault();
if (selektovaniAuto != null)
{
selektovaniAuto.obrisiAuto();
}
indeksSelektovanog = -1;
prikaziAutoDGV();
}
}
else
{
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPromeni_Click(object sender, EventArgs e)


{
if (dgAuto.SelectedRows.Count > 0)
{
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "promeni";
}
else
{
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPotvrdi_Click(object sender, EventArgs e)


{
try
{
if (akcija == "promeni")
{
int idSelektovanog = (int)dgAuto.SelectedRows[0].Cells["ID"].Value;
Automobil selektovaniAuto = autoList.Where(x => x.Automobil_ID ==
idSelektovanog).FirstOrDefault();
selektovaniAuto.Naziv = txtAuto.Text;
selektovaniAuto.BS = Int32.Parse(txtBS.Text);
selektovaniAuto.Boja = txtBoja.Text;
selektovaniAuto.Prodavac_ID =

45
Int32.Parse(cbxProdavac.SelectedValue.ToString());
selektovaniAuto.azurirajStampa();
indeksSelektovanog = dgAuto.SelectedRows[0].Index;
}
else if (akcija == "dodaj")
{
Automobil auto = new Automobil();
auto.Naziv = txtAuto.Text;
auto.BS = Int32.Parse(txtBS.Text);
auto.Boja = txtBoja.Text;
auto.Prodavac_ID =
Int32.Parse(cbxProdavac.SelectedValue.ToString());
auto.dodajStampu();
indeksSelektovanog = dgAuto.Rows.Count;
}
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
prikaziAutoDGV();
}
catch (FormatException)
{
MessageBox.Show("Broj sasije nije korektno formatiran!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void btnOdustani_Click(object sender, EventArgs e)


{
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
}

private void dgAuto_CellClick(object sender,


DataGridViewCellEventArgs e)
{
if (dgAuto.CurrentRow != null)
{
dgAuto.Rows[dgAuto.CurrentRow.Index].Selected = true;
prikaziAutoTxt();
}
}
}
}

Kod za formu frmKupovina:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

46
using System.Collections;

namespace ProdavnicaAutomobila
{
public partial class frmKupovina : Form
{
List<Kupovina> kupovineList = new List<Kupovina>();
string akcija = "";
int indeksSelektovane = -1;

public frmKupovina()
{
InitializeComponent();

dgKupovine.AllowUserToAddRows = false;
dgKupovine.AllowUserToDeleteRows = false;
dgKupovine.ReadOnly = true;
dgKupovine.AutoGenerateColumns = false;

dgAuto.AllowUserToAddRows = false;
dgAuto.AllowUserToDeleteRows = false;
dgAuto.ReadOnly = true;
dgAuto.AutoGenerateColumns = false;

dgKupovine.Columns.Add("ID", "ID");
dgKupovine.Columns["ID"].Visible = false;
dgKupovine.Columns.Add("datumKupovine", "Datum narudzbine");
dgKupovine.Columns.Add("imeKupca", "Ime kupca");
dgKupovine.Columns.Add("prezimeKupca", "Prezime kupca");
dgKupovine.Columns.Add("nacinPlacanja", "Nacin placanja");
dgKupovine.Columns.Add("valutaPlacanja", "Valuta placanja");

dgAuto.Columns.Add("nazivAutomobila", "Kupljeni automobil");

List<Kupac> kupciList = Kupac.ucitajKupce();


cbxKupac.Items.Add(new DictionaryEntry("Odaberite kupca", 0));
foreach (Kupac kup in kupciList)
{
cbxKupac.Items.Add(new DictionaryEntry(
kup.Ime + " " + kup.Prezime, kup.Kupac_ID));
}
cbxKupac.DisplayMember = "Key";
cbxKupac.ValueMember = "Value";
cbxKupac.DataSource = cbxKupac.Items;

List<Placanje> placanjeList = Placanje.ucitajPlacanja();


cbxPlacanje.Items.Add(new DictionaryEntry("Odaberite placanje", 0));
foreach (Placanje placanje in placanjeList)
{
cbxPlacanje.Items.Add(new DictionaryEntry(
placanje.Nacin + " - " + placanje.Valuta, placanje.Placanje_ID));
}
cbxPlacanje.DisplayMember = "Key";
cbxPlacanje.ValueMember = "Value";
cbxPlacanje.DataSource = cbxPlacanje.Items;

List<Automobil> autoList = Automobil.ucitajAuto();


foreach (Automobil auto in autoList)

47
{
clbxAuto.Items.Add(new DictionaryEntry(
auto.Naziv + "(" + auto.Boja + ")", auto.Automobil_ID));
}
clbxAuto.DisplayMember = "Key";
clbxAuto.ValueMember = "Value";
clbxAuto.DataSource = clbxAuto.Items;

txtDisabled();
btnChangeEnabled();
btnSubmitDisabled();

prikaziKupovinuDGV();
prikaziAutomobileDGV();
}

private void txtDisabled()


{
dtDatumKupovine.Enabled = false;
cbxKupac.Enabled = false;
cbxPlacanje.Enabled = false;
clbxAuto.Enabled = false;
}

private void txtEnabled()


{
dtDatumKupovine.Enabled = true;
cbxKupac.Enabled = true;
cbxPlacanje.Enabled = true;
clbxAuto.Enabled = true;
}

private void btnChangeDisabled()


{
btnDodaj.Enabled = false;
btnPromeni.Enabled = false;
btnObrisi.Enabled = false;
}

private void btnChangeEnabled()


{
btnDodaj.Enabled = true;
btnPromeni.Enabled = true;
btnObrisi.Enabled = true;
}

private void btnSubmitDisabled()


{
btnPotvrdi.Enabled = false;
btnOdustani.Enabled = false;
}

private void btnSubmitEnabled()


{
btnPotvrdi.Enabled = true;
btnOdustani.Enabled = true;
}

48
private void ponistiUnosTxt()
{
dtDatumKupovine.Value = DateTime.Now;
cbxKupac.SelectedIndex = 0;
cbxPlacanje.SelectedIndex = 0;
foreach (int i in clbxAuto.CheckedIndices)
{
clbxAuto.SetItemCheckState(i, CheckState.Unchecked);
}
}

private void prikaziKupovinuTxt()


{
int idSelektovanog = (int)dgKupovine.SelectedRows[0].Cells["ID"].Value;
Kupovina selektovanaKupovina =
kupovineList.Where(x => x.Kupovina_ID ==
idSelektovanog).FirstOrDefault();

dtDatumKupovine.Value = selektovanaKupovina.Datum;
int klijIndex = cbxKupac.FindString(
selektovanaKupovina.Kupac.Ime + " " +
selektovanaKupovina.Kupac.Prezime);
cbxKupac.SelectedIndex = klijIndex;
int uslugaIndex = cbxPlacanje.FindString(
selektovanaKupovina.Placanje.Nacin + " - " +
selektovanaKupovina.Placanje.Valuta);
cbxPlacanje.SelectedIndex = uslugaIndex;
foreach (int i in clbxAuto.CheckedIndices)
{
clbxAuto.SetItemCheckState(i, CheckState.Unchecked);
}
foreach (Automobil aut in selektovanaKupovina.Automobils)
{
int listIndeks = clbxAuto.FindString(aut.Naziv);
clbxAuto.SetItemCheckState(listIndeks, CheckState.Checked);
}
}

private void prikaziKupovinuDGV()


{
kupovineList = Kupovina.ucitajKupovine();
dgKupovine.Rows.Clear();
for (int i = 0; i < kupovineList.Count; i++)
{
dgKupovine.Rows.Add();
dgKupovine.Rows[i].Cells["ID"].Value =
kupovineList[i].Kupovina_ID;
dgKupovine.Rows[i].Cells["datumKupovine"].Value =
kupovineList[i].Datum;
dgKupovine.Rows[i].Cells["imeKupca"].Value =
kupovineList[i].Kupac.Ime;
dgKupovine.Rows[i].Cells["prezimeKupca"].Value =
kupovineList[i].Kupac.Prezime;
dgKupovine.Rows[i].Cells["nacinPlacanja"].Value =
kupovineList[i].Placanje.Nacin;
dgKupovine.Rows[i].Cells["valutaPlacanja"].Value =
kupovineList[i].Placanje.Valuta;
}

49
ponistiUnosTxt();
dgKupovine.CurrentCell = null;
if (kupovineList.Count > 0)
{
if (indeksSelektovane != -1)
dgKupovine.Rows[indeksSelektovane].Selected = true;
else
dgKupovine.Rows[0].Selected = true;
prikaziKupovinuTxt();
}
}

private void prikaziAutomobileDGV()


{
if (dgKupovine.SelectedRows.Count > 0)
{
int idSelektovanog = (int)dgKupovine.SelectedRows[0].Cells["ID"].Value;
Kupovina selektovanaKupovina =
kupovineList.Where(x => x.Kupovina_ID ==
idSelektovanog).FirstOrDefault();

List<Automobil> aut = selektovanaKupovina.Automobils.ToList();

dgAuto.Rows.Clear();
for (int i = 0; i < aut.Count; i++)
{
dgAuto.Rows.Add();
dgAuto.Rows[i].Cells["nazivAutomobila"].Value =
aut[i].Naziv;
}
}
else
{
dgAuto.Rows.Clear();
}
}

private void btnDodaj_Click(object sender, EventArgs e)


{
ponistiUnosTxt();
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "dodaj";
}

private void btnObrisi_Click(object sender, EventArgs e)


{
if (dgKupovine.SelectedRows.Count > 0)
{
if (MessageBox.Show("Da li zelite da obrisete odabranu kupovinu?",
"Potvrda brisanja", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
int idSelektovanog =
(int)dgKupovine.SelectedRows[0].Cells["ID"].Value;
Kupovina selektovanaKupovina =
kupovineList.Where(x => x.Kupovina_ID ==
idSelektovanog).FirstOrDefault();

50
selektovanaKupovina.obrisiKupovinu();
indeksSelektovane = -1;
prikaziKupovinuDGV();
prikaziAutomobileDGV();
}
}
else
{
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPromeni_Click(object sender, EventArgs e)


{
if (dgKupovine.SelectedRows.Count > 0)
{
txtEnabled();
btnSubmitEnabled();
btnChangeDisabled();
akcija = "promeni";
}
else
{
MessageBox.Show("Nema unetih podataka");
}
}

private void btnPotvrdi_Click(object sender, EventArgs e)


{
try
{
if (akcija == "promeni")
{
int idSelektovanog =
(int)dgKupovine.SelectedRows[0].Cells["ID"].Value;
Kupovina selektovanaKupovina =
kupovineList.Where(x => x.Kupovina_ID ==
idSelektovanog).FirstOrDefault();
selektovanaKupovina.Datum = dtDatumKupovine.Value.Date;
selektovanaKupovina.Kupac_ID =
Int32.Parse(cbxKupac.SelectedValue.ToString());
selektovanaKupovina.Placanje_ID =
Int32.Parse(cbxPlacanje.SelectedValue.ToString());
List<int> autoIDs = new List<int>();
foreach (var item in clbxAuto.CheckedItems)
{
int autoId = (int)((DictionaryEntry)item).Value;
autoIDs.Add(autoId);
}
selektovanaKupovina.azurirajKupovinu(autoIDs);
indeksSelektovane = dgKupovine.SelectedRows[0].Index;
}
else if (akcija == "dodaj")
{
Kupovina kupovina = new Kupovina();
kupovina.Datum = dtDatumKupovine.Value.Date;
kupovina.Kupac_ID =
Int32.Parse(cbxKupac.SelectedValue.ToString());

51
kupovina.Placanje_ID =
Int32.Parse(cbxPlacanje.SelectedValue.ToString());
List<int> autoIDs = new List<int>();
foreach (var item in clbxAuto.CheckedItems)
{
int autoId = (int)((DictionaryEntry)item).Value;
autoIDs.Add(autoId);
}
kupovina.dodajKupovinu(autoIDs);
indeksSelektovane = dgKupovine.Rows.Count;
}
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
prikaziKupovinuDGV();
prikaziAutomobileDGV();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void btnOdustani_Click(object sender, EventArgs e)


{
txtDisabled();
btnSubmitDisabled();
btnChangeEnabled();
}

private void dgKupovine_CellClick(object sender,


DataGridViewCellEventArgs e)
{
if (dgKupovine.CurrentRow != null)
{
dgKupovine.Rows[dgKupovine.CurrentRow.Index].Selected = true;
prikaziKupovinuTxt();
prikaziAutomobileDGV();
}
}
}
}

Kod za formu frmIzvestajProdaje:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

52
namespace ProdavnicaAutomobila
{
public partial class frmIzvestajProd : Form
{
public frmIzvestajProd()
{
InitializeComponent();
List<Prodavac> prodavacList = Prodavac.ucitajProdavce();
cbxProdavac.Items.Add(new DictionaryEntry("Svi prodavci", 0));
foreach (Prodavac pro in prodavacList)
{
cbxProdavac.Items.Add(new DictionaryEntry(
pro.Ime + " " + pro.Prezime, pro.Prodavac_ID));
}
cbxProdavac.DisplayMember = "Key";
cbxProdavac.ValueMember = "Value";
cbxProdavac.DataSource = cbxProdavac.Items;
}

private void frmIzvestaj_Load(object sender, EventArgs e)


{
KupovinaBindingSource.DataSource = Automobil.ucitajAuto();
this.reportViewer1.RefreshReport();
}

private void cbxProdavac_SelectedIndexChanged(object sender, EventArgs e)


{
int itemValue = Int32.Parse(cbxProdavac.SelectedValue.ToString());
if (itemValue == 0)
KupovinaBindingSource.DataSource = Automobil.ucitajAuto();
else
KupovinaBindingSource.DataSource =
Automobil.ucitajAutoZaProdavca(itemValue);
this.reportViewer1.RefreshReport();
}

private void frmIzvestajStampa_Load(object sender, EventArgs e)


{

private void label1_Click(object sender, EventArgs e)


{

}
}

Kod za glavnu formu:

using System;
using System.Collections.Generic;

53
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ProdavnicaAutomobila
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void mniPodaciProdavci_Click(object sender, EventArgs e)


{
CloseAllForms();
frmProdavac prodavacForm = new frmProdavac();
prodavacForm.MdiParent = this;
prodavacForm.WindowState = FormWindowState.Maximized;
prodavacForm.ControlBox = false;
prodavacForm.Show();
}

private void mniPodaciAuto_Click(object sender, EventArgs e)


{
CloseAllForms();
frmAutomobil autoForm = new frmAutomobil();
autoForm.MdiParent = this;
autoForm.WindowState = FormWindowState.Maximized;
autoForm.ControlBox = false;
autoForm.Show();
}

private void mniPodaciKupac_Click(object sender, EventArgs e)


{
CloseAllForms();
frmKupac kupacForm = new frmKupac();
kupacForm.MdiParent = this;
kupacForm.WindowState = FormWindowState.Maximized;
kupacForm.ControlBox = false;
kupacForm.Show();
}

private void mniPodaciPlacanje_Click(object sender, EventArgs e)


{
CloseAllForms();
frmPlacanje placanjeForm = new frmPlacanje();
placanjeForm.MdiParent = this;
placanjeForm.WindowState = FormWindowState.Maximized;
placanjeForm.ControlBox = false;
placanjeForm.Show();
}

private void mniPodaciKupovina_Click(object sender, EventArgs e)


{

54
CloseAllForms();
frmKupovina kupovinaForm = new frmKupovina();
kupovinaForm.MdiParent = this;
kupovinaForm.WindowState = FormWindowState.Maximized;
kupovinaForm.ControlBox = false;
kupovinaForm.Show();
}

private void mniIzvestajiAuto_Click(object sender, EventArgs e)


{
CloseAllForms();
frmIzvestajProd izvestajForm = new frmIzvestajProd();
izvestajForm.MdiParent = this;
izvestajForm.WindowState = FormWindowState.Maximized;
izvestajForm.ControlBox = false;
izvestajForm.Show();
}

private void CloseAllForms()


{
Form[] formToClose = null;
int i = 1;
foreach (Form form in Application.OpenForms)
{
if (form != this)
{
Array.Resize(ref formToClose, i);
formToClose[i - 1] = form;
i++;
}
}
if (formToClose != null)
for (int j = 0; j < formToClose.Length; j++)
formToClose[j].Dispose();
}
}
}

55

You might also like