UNIVERZITET U BEOGRADUFAKULTET ORGANIZACIONIH NAUKA
Seminarski rad iz predmeta
PROJEKTOVANJE SOFTVERA
Naziv teme:
Online serivis za poručivanje hrane
Profesor : dr Siniša VlajićStudent : Nikolić Majda, 291/04
Beograd2012.
Online servis za poručivanje hrane
1. PRIKUPLJANJE ZAHTEVA
Verbalni opis
Predmet ovog seminarskog rada je projektovanje aplikacije koja bi omogućila restoranima I kupcima online uslugu narucivanja hrane.
Specifikacija zahteva pomoću modela sučajeva korišćenja
Slučajevi koriščenja kupca:
Logovanje Kreiranje porudžbine Izmena porudzbine Izmena licnih podataka
Slučajevi korisćenja restorana:
Logovanje Dodavanje jela Brisanje jela Izmena cene Pregled porudzbina
Tekstualni opis slučajeva korišćenja
SK1: LOGOVANJE
NAZIV SK: Logovanje
AKTOR SK: Korisnik (Kupac ili restoran)
UČESNICI SK: Korisnik i program (u daljem tekstu sistem)
PREDUSLOV: Sistem je pokrenut. Sistem prikazuje formu za logovanje.
OSNOVNI SCENARIO SK:
Majda Nikolic 291/04
Kupac
Izmena licnihpodataka
Izmenaporudzbine
Kreiranjeporudzbine
Logovanje
Restoran
Logovanje
Brisanje jelaDodavanje jela
Pregledporudzbina
Izmena cene
Online servis za poručivanje hrane
1. Korisnik unosi podatke. (APUSO)2. Korisnik poziva sistem da proveri unete podatke. (APSO)3. Sistem proverava unete podatke. (SO)4. Sistem prikazuje korisniku poruku o uspešnosti logovanja. (IA)
ALTERNATIVNI SCENARIO:
4.1 Ukoliko sistem ne pronađe korisnika obaveštava ga o neuspešnom logovanju. Prekida se izvršavanje scenarija.
SK2: KREIRANJE PORUDŽBINE
NAZIV SK: Kreiranje porudžbine
AKTOR SK: Kupac
UČESNICI SK: Kupac i sistem
PREDUSLOV: Sistem je pokrenut i Kupac je ulogovan pod svojom šifrom. Sistem prikazuje formu za operacije vezane za kupca. Kupac bira stavku „Izaberi hranu“ . Sistem inicijalno prikazuje spisak svih restorana.
OSNOVNI SCENARIO SK:
1. Kupac vrši izbor restorana. (ANSO)2. Kupac poziva sistem da prikaže meni izabranog restorana. (APSO)3. Sistem uzima podatke iz baze. (SO)4. Sistem prikazuje meni restorana. (IA)5. Kupac selektuje željena jela iz tabele menija. (APUSO)6. Kupac poziva sistem da sačuva porudžbinu. (APSO)7. Sistem čuva porudžbinu. (SO)8. Sistem obaveštava kupca o uspešnosti čuvanja porudžbine. (IA)
ALTERNATIVNI SCENARIO:
8.1 Ukoliko sistem ne može da sacuva porudžbinu, obaveštava Kupca o tome i prekida izvršenje scenarija.
SK3: IZMENA PORUDŽBINE
Majda Nikolic 291/04
Online servis za poručivanje hrane
NAZIV SK: Izmena porudžbine
AKTOR SK: Kupac
UČESNICI SK: Kupac i sistem
PREDUSLOV: Sistem je pokrenut i Kupac je ulogovan pod svojom šifrom. Sistem prikazuje formu za operacije vezane za kupca. Kupac bira stavku „Izmeni porudžbinu“. Sistem inicijalno prikazuje korisniku sve porudžbine.
OSNOVNI SCENARIO SK:
1. Kupac vrši izbor porudžbine. (ANSO)2. Kupac poziva sistem da prikaže stavke izabrane porudžbine. (APSO)3. Sistem uzima podatke iz baze. (SO)4. Sistem prikazuje podatke. (IA)5. Kupac vrši izbor stavki za brisanje. (ANSO)6. Kupac poziva sistem da sačuva izmene. (APSO)7. Sistem čuva izmenjene podatke. (SO)8. Sistem obaveštava kupca o uspešnoj izmeni podataka. (IA)
ALTERNATIVNI SCENARIO:
8.1 Ukoliko sistem nije mogao da sačuva izmenjene podatke, obaveštava Kupca o tome i prekida izvršenje scenarija.
SK4: IZMENA LIČNIH PODATAKA
NAZIV SK: Izmena ličnih podataka
AKTOR SK: Kupac
UČESNICI SK: Kupac i sistem
PREDUSLOV: Sistem je pokrenut i Kupac je ulogovan pod svojom šifrom. Sistem prikazuje formu za operacije vezane za kupca. Kupac bira stavku „Izmeni lične podatke“. Sistem inicijalno prikazuje lične podatke ulogovanog kupca.
OSNOVNI SCENARIO SK:
1. Kupac unosi podatke ze izmenu. (ANSO)2. Kupac poziva sistem da sačuva podatke. (APSO)3. Sistem čuva izmenjene podatke. (SO)4. Sistem obavestava kupca o uspešnosti čuvanja podataka. (IA)
Majda Nikolic 291/04
Online servis za poručivanje hrane
ALTERNATIVNI SCENARIO:
4.1 Ukoliko je Kupac uneo neispravne podatke, sistem ga obaveštava o tome.
4.2 Ukoliko sistem ne može da sačuva podatke, obaveštava Kupca o tome.
SK5:DODAVANJE JELA
NAZIV SK: Dodavanje jela
AKTOR SK: Restoran
UČESNICI SK: Restoran i sistem
PREDUSLOV: Sistem je pokrenut i Restoran je ulogovan pod svojom šifrom. Sistem prikazuje formu za operacije vezane za Restoran. Restoran bira stavku „Dodavanje jela“.
OSNOVNI SCENARIO SK:
1. Restoran unosi podatke o novom jelu. (APUSO)2. Restoran poziva sistem da zapamti novo jelo. (APSO)3. Sistem pamti novo jelo. (SO)4. Sistem prikazuje poruku o uspešnom pamćenju jela. (IA)
ALTERNATIVNI SCENARIO :
4.1 Ukoliko sistem ne može da zapamti novo jelo, prikazuje se poruka.
SK6 : BRISANJE JELA
NAZIV SK: Brisanje jela
AKTORI SK: Restoran
UČESNICI SK: Restoran i sistem
PREDUSLOV: Sistem je uključen i restoran je ulogovan. Sistem prikazuje formu za operacije vezane za restoran. Restoran bira stavku “Meni”. Sistem inicijalno prikazuje spisak svih jela na meniju.
OSNOVNI SCENARIO SK:
1. Restoran bira jelo iz menija. (APUSO)
Majda Nikolic 291/04
Online servis za poručivanje hrane
2. Restoran poziva sistem da izbriše odabrano jelo iz baze podataka. (APSO)3. Sistem briše jelo iz baze podataka. (SO)4. Sistem prikazuje poruku o uspesnom brisanju jela. (IA)
ALTERNATIVNI SCENARIO:
4.1 Ako sistem ne može da izbrise jelo, sistem prikazuje poruku da nije uspelo brisanje. Prekida se izvršenje scenarija.
SK7: IZMENA CENE
NAZIV SK: Izmena cene
AKTORI SK: Restoran
UČESNICI SK: Restoran i sistem
PREDUSLOV: Sistem je uključen i restoran je ulogovan. Sistem prikazuje formu za operacije vezane za restoran. Restoran bira stavku “Meni”. Sistem inicijalno prikazuje spisak svih jela na meniju.
OSNOVNI SCENARIO SK:
1. Restoran bira jelo koje želi da izmeni iz menija. (APUSO)2. Restoran unosi novu cenu izabranog jela. (APUSO)3. Restoran poziva sistem da sačuva izmenu. (APSO)4. Sistem čuva podatke. (SO)5. Sistem prikazuje korisniku poruku o uspešnosti izmene podatka. (IA)
ALTERNATIVNI SCENARIO:
5.1 Ako sistem ne može da izmeni podatke, prikazuje poruku. Prekida se izvršenje scenarija.
SK8:PREGLED PORUDŽBINA
NAZIV SK: Pregled porudžbina
AKTORI SK: Restoran
UČESNICI SK: Restoran i sistem
Majda Nikolic 291/04
Online servis za poručivanje hrane
PREDUSLOV: Sistem je uključen i restoran je ulogovan. Sistem prikazuje formu za operacije vezane za restoran. Restoran bira stavku “Pregled porudžbina”. Sistem inicijalno prikazuje spisak svih porudžbina.
OSNOVNI SCENARIO SK:
1. Restoran selektuje željenu porudžbinu. (APUSO)2. Restoran poziva sistem da mu prikaze stavke izabrane porudžbine i ukupan iznos. (APSO)3. Sistem uzima podatke date porudžbine. (SO)4. Sistem prikazuje podatke korisniku. (IA)
2. ANALIZA
Ponašanje softverskog sistema – Sistemski dijagram sekvenci
DS1:DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – LOGOVANJE
OSNOVNI SCENARIO SK:
1. Korisnik poziva sistem da proveri unete podatke. (APSO)
2. Sistem prikazuje korisniku poruku o uspešnosti logovanja. (IA)
ALTERNATIVNI SCENARIO:
2.1 Ukoliko sistem ne pronađe korisnika obaveštava ga o neuspešnom logovanju. Prekida se izvršavanje scenarija.
DS2: DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – KREIRANJE PORUDŽBINE
Majda Nikolic 291/04
Online servis za poručivanje hrane
OSNOVNI SCENARIO SK:
1. Kupac poziva sistem da prikaže spisak restorana. (APSO)2. Sistem prikazuje korisniku sve restorane. (IA)3. Kupac poziva sistem da prikaže meni izabranog restorana. (APSO)4. Sistem prikazuje meni restorana. (IA)5. Kupac poziva sistem da sa čuva porudžbinu. (APSO)6. Sistem obaveštava kupca o uspešnosti čuvanja porudžbine. (IA)
ALTERNATIVNI SCENARIO:
6.1 Ukoliko sistem ne može da sacuva porudžbinu, obaveštava Kupca o tome i prekida izvršenje scenarija.
DS3: DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – IZMENA PORUDŽBINE
OSNOVNI SCENARIO SK:
1. Kupac poziva sistem da prikaže sve porudžbine i stavke izabrane porudžbine. (APSO)
2. Sistem prikazuje podatke. (IA)3. Kupac poziva sistem da sačuva izmene. (APSO)4. Sistem obaveštava kupca o uspešnoj izmeni podataka. (IA)
ALTERNATIVNI SCENARIO:
4.1 Ukoliko sistem nije mogao da sačuva izmenjene podatke, obaveštava Kupca o tome i prekida izvršenje scenarija.
Majda Nikolic 291/04
Online servis za poručivanje hrane
DS4: DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – IZMENA LIČNIH PODATAKA
OSNOVNI SCENARIO SK:
1. Kupac poziva sistem da prikaže podatke za izmenu. (APSO)2. Sistem prikazuje podatke. (IA) 3. Kupac poziva sistem da sačuva podatke. (APSO)4. Sistem obavestava kupca o uspešnosti čuvanja podataka. (IA)
ALTERNATIVNI SCENARIO:
4.1 Ukoliko je Kupac uneo neispravne podatke, sistem ga obaveštava o tome.
4.2 Ukoliko sistem ne može da sačuva podatke, obaveštava Kupca o tome.
DS 5: DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – DODAVANJE JELA
OSNOVNI SCENARIO SK:
1. Restoran poziva sistem da zapamti novo jelo. (APSO) 2. Sistem prikazuje poruku o uspešnom pamćenju jela. (IA)
Majda Nikolic 291/04
Online servis za poručivanje hrane
ALTERNATIVNI SCENARIO :
2.1. Ukoliko sistem ne moze da sačuva novo jelo, prikazuje se poruka. Prekida se izvršenje scenarija.
DS 6: DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – BRISANJE JELA
OSNOVNI SCENARIO SK:
1. Restoran poziva sistem da prikaže sva jela . (APSO)2. Sistem prikazuje sva jela. (IA)3. Restoran poziva sistem da izbriše odabrano jelo iz baze
podataka. (APSO)4. Sistem prikazuje poruku o uspesnom brisanju jela. (IA)
ALTERNATIVNI SCENARIO:
4.1 Ako sistem ne može da izbrise jelo, prikazuje poruku da nije uspelo brisanje proizvoda. Prekida se izvršenje scenarija.
DS 7: DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – IZMENA CENE
OSNOVNI SCENARIO SK:
1. Restoran poziva sistem da prikaže sva jela. (APSO) 2. Sistem prikazuje meni.(IA)3. Restoran poziva sistem da sačuva izmenu. (APSO)4. Sistem prikazuje korisniku poruku o uspešnosti izmene podatka.
(IA)
Majda Nikolic 291/04
Online servis za poručivanje hrane
ALTERNATIVNI SCENARIO:
4.1 Ako sistem ne može da izmeni podatke, prikazuje poruku. Prekida se izvršenje scenarija.
DS 8: DIJAGRAM SEKVENCI SLUČAJA KORIŠĆENJA – PREGLED PORUDŽBINA
OSNOVNI SCENARIO SK:
1. Restoran poziva sistem da mu prikaze sve porudžbine, stavke izabrane porudžbine i ukupan iznos. (APSO)
2. Sistem prikazuje podatke. (IA)
Ponašanje softverskog sistema – Definisanje ugovora o sistemskim operacijama
UGOVOR UG1
OPERACIJA: VratiKorisnikID(Korisnik k)
VEZA SA SK: DS1
PREDUSLOV: -
POSTUSLOV: Korisnik je ulogovan
UGOVOR UG2
OPERACIJA: VratiSveRestorane()
VEZA SA SK: DS2
PREDUSLOV: -
POSTUSLOV: Vraćeni su restorani
Majda Nikolic 291/04
Online servis za poručivanje hrane
UGOVOR UG3
OPERACIJA: VratiMeni(restoranID)
VEZA SA SK: DS2, DS4,DS5
PREDUSLOV: -
POSTUSLOV: Vraćen spisak jela
UGOVOR UG4
OPERACIJA: SačuvajPorudžbinu(Porudžbina p)
VEZA SA SK: DS2
PREDUSLOV: -
POSTUSLOV: Sačuvana porudžbina
UGOVOR UG5
OPERACIJA: IzmeniPorudžbinu(Porudžbina p)
VEZA SA SK: DS3
PREDUSLOV: Postojanje porudžbine
POSTUSLOV: Izmenjena porudžbina
UGOVOR UG6
OPERACIJA: VratiKupca(Kupac k)
VEZA SA SK: DS4
PREDUSLOV: -
POSTUSLOV: Prikazani podaci
UGOVOR UG7
OPERACIJA: SacuvajKupca(Kupac k)
VEZA SA SK: DS4
PREDUSLOV: -
POSTUSLOV: Sačuvan kupac
UGOVOR UG8
Majda Nikolic 291/04
Online servis za poručivanje hrane
OPERACIJA: SačuvajNovoJelo(Jelo j)
VEZA SA SK: DS5
PREDUSLOV: -
POSTUSLOV: Sačuvano novo jelo
UGOVOR UG9
OPERACIJA: ObrišiJelo(Jelo j)
VEZA SA SK: DS6
PREDUSLOV: Postojanje jela
POSTUSLOV: Obrisano jelo
UGOVOR UG10
OPERACIJA: SačuvajNovuCenu(Jelo j)
VEZA SA SK: DS7
PREDUSLOV: Postojanje jela
POSTUSLOV: Izmenjeno jelo
UGOVOR UG11
OPERACIJA: VratiSvePorudzbina(sifra)
VEZA SA SK: DS3, DS8
PREDUSLOV: Postojanje porudžbina
POSTUSLOV: Vraćene su porudžbine
Majda Nikolic 291/04
Online servis za poručivanje hrane
Struktura softverskog sistema – Konceptualni (domenski) model
Relacioni model
Korisnik(KorisnikID, Username, Password)
Kupac(KupacID, Ime, Prezime, Ulica, Broj)
Restoran(RestoranID, Naziv)
Porudzbina(PorudzbinaID, Datum, UkupanIznos, KupacID, RestoranID)
StavkaPorudzbine(StavkaID, naziv, jeloID, porudzbinaID)
Majda Nikolic 291/04
Online servis za poručivanje hrane
Jelo(JeloID, Naziv, Cena)
3. PROJEKTOVANJE
Arhitektura softverskog sistema
U okviru faze projektovanja opisuje se fizička struktura i ponašanje softverskog sistema, tj. arhitektura softverskog sistema. U ovom seminarskom radu je korišćena klasična troslojna arhitektura.
Skladiste podataka
Korisnicki interfejs
Aplikaciona logika
Softverski sistem
I nivo III nivoII nivo
Skladiste podataka
Korisnicki interfejs Database
broker
Softverski sistem
I nivo III nivoII nivo
KontrolerPoslovna
logika
Aplikaciona logika
Treba isprojektovati svaki od elemenata tronivoiske arhitekture :
kontroler poslovna logika - domenske klase poslovna logika - sistemske operacije database broker skladište podataka korisnički interfejs
Majda Nikolic 291/04
Online servis za poručivanje hrane
Majda Nikolic 291/04
Online servis za poručivanje hrane
Projektovanje aplikacione logike - Kontroler
Kontroler poslovne logike je zadužen za komunikaciju između korisničkog interfejsa i sistemskih operacija.
KALKORISNIK
using System;using System.Collections.Generic;using System.Linq;using System.Text;using DomenskeKlase;using SistemskeOperacije;using SistemskeOperacije.KorisnikSO;
namespace KontrolerAplikacioneLogike{ public class KALKorisnik {
public string VratiIDKorisnika(Korisnik korisnikSelect) { VratiID vi = new VratiID(); Korisnik k = (Korisnik)vi.IzvrsiSO(korisnikSelect); return k.KorisnikID; } }}
KALKUPAC
using System;using System.Collections.Generic;using System.Linq;using System.Text;using DomenskeKlase;using SistemskeOperacije;using SistemskeOperacije.KupacSO;
namespace KontrolerAplikacioneLogike{ public class KALKupac {
public Kupac Vrati(Kupac kupacSelect) { VratiKupca vk = new VratiKupca(); Kupac kupac = (Kupac)vk.IzvrsiSO(kupacSelect); return kupac; }
Majda Nikolic 291/04
Online servis za poručivanje hrane
public bool Sacuvaj(Kupac kupacUpdate) { SacuvajKupca sc = new SacuvajKupca(); bool odgovor = (bool)sc.IzvrsiSO(kupacUpdate); if (odgovor) { return true; } else { return false; } } }}
KALRESTORAN
using System;using System.Collections.Generic;using System.Linq;using System.Text;using DomenskeKlase;using SistemskeOperacije;using SistemskeOperacije.RestoranSO;
namespace KontrolerAplikacioneLogike{ public class KALRestoran {
public List<Restoran> VratiSve(Restoran restoranSelect) { VratiSveRestorane vsr = new VratiSveRestorane(); return (List<Restoran>)vsr.IzvrsiSO(restoranSelect); } }}
Majda Nikolic 291/04
Online servis za poručivanje hrane
KALPORUDŽBINA
using System;using System.Collections.Generic;using System.Linq;using System.Text;using DomenskeKlase;using SistemskeOperacije;using SistemskeOperacije.PorudzbinaSO;using SistemskeOperacije.StavkaPorudzbineSO;
namespace KontrolerAplikacioneLogike{ public class KALPorudzbina { public bool Ubaci(Porudzbina porudzbinaInsert) { SacuvajPorudzbinu sp = new SacuvajPorudzbinu(); bool odgovor = (bool)sp.IzvrsiSO(porudzbinaInsert); if (odgovor) { for (int i = 0; i < porudzbinaInsert.ListaStavki.Count; i++) { SacuvajStavku ss = new SacuvajStavku(); bool odgovorS = (bool)ss.IzvrsiSO(porudzbinaInsert.ListaStavki[i]); if (!odgovorS) { return false; } } return true; } else { return false; } }
public List<Porudzbina> VratiSve(Porudzbina porudzbinaSelect) { VratiSvePorudzbine vsp = new VratiSvePorudzbine(); List<Porudzbina> listaPorudzbina = (List<Porudzbina>)vsp.IzvrsiSO(porudzbinaSelect); if (listaPorudzbina.Count > 0) { for (int i = 0; i < listaPorudzbina.Count; i++) { StavkaPorudzbine sp = new StavkaPorudzbine("", "", "", ""); sp.PodesiUslovPretraga("PorudzbinaID", listaPorudzbina[i].PorudzbinaID); VratiSveStavke vss = new VratiSveStavke(); List<StavkaPorudzbine> listaStavki = (List<StavkaPorudzbine>)vss.IzvrsiSO(sp); listaPorudzbina[i].ListaStavki = listaStavki; } } return listaPorudzbina; }
public bool Izmeni(Porudzbina porudzbinaUpdate) { IzmeniPorudzbinu ip = new IzmeniPorudzbinu(); bool odgovor = (bool)ip.IzvrsiSO(porudzbinaUpdate); if (odgovor) { porudzbinaUpdate.ListaStavki[0].PorudzbinaID = porudzbinaUpdate.PorudzbinaID; ObrisiStavku os = new ObrisiStavku(); bool odgovorOS = (bool)os.IzvrsiSO(porudzbinaUpdate.ListaStavki[0]);
if (odgovorOS) {
Majda Nikolic 291/04
Online servis za poručivanje hrane
for (int i = 0; i < porudzbinaUpdate.ListaStavki.Count; i++) { porudzbinaUpdate.ListaStavki[i].PorudzbinaID = porudzbinaUpdate.PorudzbinaID; SacuvajStavku ss = new SacuvajStavku(); bool odgovorSS = (bool)ss.IzvrsiSO(porudzbinaUpdate.ListaStavki[i]); if (!odgovorSS) { return false; } } return true; } else { return false; } } else { return false; } } }}
KALJELO
using System;using System.Collections.Generic;using System.Linq;using System.Text;using DomenskeKlase;using SistemskeOperacije;using SistemskeOperacije.JeloSO;
namespace KontrolerAplikacioneLogike{ public class KALJelo {
public List<Jelo> VratiSve(Jelo jeloSelect) { VratiSvaJela vsj = new VratiSvaJela(); return (List<Jelo>)vsj.IzvrsiSO(jeloSelect); }
Majda Nikolic 291/04
Online servis za poručivanje hrane
public bool Obrisi(Jelo jeloDelete) { ObrisiJelo oj = new ObrisiJelo(); bool odgovor = (bool)oj.IzvrsiSO(jeloDelete); if (odgovor) { return true; } else { return false; } }
public bool Sacuvaj(Jelo jeloUpdate) { SacuvajNovuCenu snc = new SacuvajNovuCenu(); bool odgovor = (bool)snc.IzvrsiSO(jeloUpdate); if (odgovor) { return true; } else { return false; } }
public bool Ubaci(Jelo jeloInsert) { SacuvajNovoJelo snj = new SacuvajNovoJelo(); bool odgovor = (bool)snj.IzvrsiSO(jeloInsert); if (odgovor) { return true; } else { return false; } } }}
Majda Nikolic 291/04
Online servis za poručivanje hrane
Projektovanje strukture soft. sistema (aplikaciona logika– poslovna logika – domenske klase)
Softverske klase strukture prave se na osnovu konceptualnog modela.
Projektovanje ponašanja softverskog sistema (Aplikaciona logika- Poslovna logika-Sistemske operacije)
UGOVOR UG1
OPERACIJA: VratiKorisnikID(Korisnik k)
POSTUSLOV: Korisnik je ulogovan
public class VratiID:OpstaSOKorisnik { public override object Izvrsi(BazniObjekat bo, Broker brok) { Korisnik korisnik = (Korisnik)bo; List<BazniObjekat> listaBaznihObjekata = (List<BazniObjekat>)brok.VratiSveObjekte(korisnik); List<Korisnik> listaKorisnika = new List<Korisnik>();
for (int i = 0; i < listaBaznihObjekata.Count; i++) { listaKorisnika.Add((Korisnik)listaBaznihObjekata[i]);
Majda Nikolic 291/04
Online servis za poručivanje hrane
if (listaKorisnika[i].Username == korisnik.Username && listaKorisnika[i].Password == korisnik.Password) { Korisnik ulogovan = listaKorisnika[i]; return ulogovan; } }
return null; } }
UGOVOR UG2
OPERACIJA: VratiSveRestorane()
POSTUSLOV: Vraćeni su restorani
public class VratiSveRestorane:OpstaSORestoran { public override object Izvrsi(BazniObjekat bo, Broker brok) { Restoran restoran = (Restoran)bo;
List<BazniObjekat> listaBaznihObjekata = brok.VratiSveObjekte(restoran); List<Restoran> listaRestorana = new List<Restoran>(); for (int i = 0; i < listaBaznihObjekata.Count; i++) { listaRestorana.Add((Restoran)listaBaznihObjekata[i]); }
return listaRestorana;
} }
Majda Nikolic 291/04
Online servis za poručivanje hrane
UGOVOR UG3
OPERACIJA: VratiMeni(restoranID)
POSTUSLOV: Vraćen spisak jela
public class VratiSvaJela:OpstaSOJelo { public override object Izvrsi(BazniObjekat bo, Broker brok) { Jelo jelo = (Jelo)bo; List<BazniObjekat> listaBaznihObjekata = brok.VratiSveObjekteSaUslovom(jelo); List<Jelo> listaJela = new List<Jelo>(); for (int i = 0; i < listaBaznihObjekata.Count; i++) { listaJela.Add((Jelo)listaBaznihObjekata[i]); }
return listaJela; } }
Majda Nikolic 291/04
Online servis za poručivanje hrane
UGOVOR UG4
OPERACIJA: SačuvajPorudžbinu(Porudžbina p)
POSTUSLOV: Sačuvana porudžbina
public class SacuvajPorudzbinu:OpstaSOPorudzbina { public override object Izvrsi(BazniObjekat bo, Broker brok) { Porudzbina p = (Porudzbina)bo; int brojRedova = brok.Ubaci(p); if (brojRedova == 1) { return true; } else { return false; } } }
UGOVOR UG5
OPERACIJA: IzmeniPorudžbinu(Porudžbina p)
POSTUSLOV: Izmenjena porudžbina
public class IzmeniPorudzbinu:OpstaSOPorudzbina { public override object Izvrsi(BazniObjekat bo, Broker brok) { try { Porudzbina p = (Porudzbina)bo; int brojRedova = brok.Izmeni(p); return true;
} catch (Exception) { return false; }
Majda Nikolic 291/04
Online servis za poručivanje hrane
} }
UGOVOR UG6
OPERACIJA: VratiKupca(kupacID)
POSTUSLOV: Prikazani podaci
public class VratiKupca: OpstaSOKupac { public override object Izvrsi(BazniObjekat bo, Broker brok) { Kupac kupac = (Kupac)bo; BazniObjekat kupacObjekat = brok.VratiObjekat(kupac); Kupac k = (Kupac)kupacObjekat; return k; } }
UGOVOR UG7
OPERACIJA: SacuvajKupca(Kupac k)
POSTUSLOV: Sačuvan kupac
Majda Nikolic 291/04
Online servis za poručivanje hrane
public class SacuvajKupca : OpstaSOKupac { public override object Izvrsi(BazniObjekat bo, Broker brok) { try { Kupac k = (Kupac)bo; int brojRedova = brok.Izmeni(k); return true;
} catch (Exception) { return false; } } }
UGOVOR UG8
OPERACIJA: SačuvajNovoJelo(Jelo j)
POSTUSLOV: Sačuvano novo jelo
public class SacuvajNovoJelo : OpstaSOJelo { public override object Izvrsi(BazniObjekat bo, Broker brok) { Jelo j = (Jelo)bo; int brojRedova = brok.Ubaci(j); if (brojRedova == 1) { return true; } else { return false; } } }
Majda Nikolic 291/04
Online servis za poručivanje hrane
UGOVOR UG9
OPERACIJA: ObrišiJelo(Jelo j)
POSTUSLOV: Obrisano jelo
public class ObrisiJelo:OpstaSOJelo { public override object Izvrsi(BazniObjekat bo, Broker brok) { Jelo jelo = (Jelo)bo; int brojRedova = brok.Obrisi(jelo); if (brojRedova == 1) { return true; } else { return false; } } }
Majda Nikolic 291/04
Online servis za poručivanje hrane
UGOVOR UG10
OPERACIJA: SačuvajNovuCenu(Jelo j)
POSTUSLOV: Izmenjeno jelo
public class SacuvajNovuCenu:OpstaSOJelo { public override object Izvrsi(BazniObjekat bo, Broker brok) { try { Jelo jelo = (Jelo)bo; int brojRedova = brok.Izmeni(jelo); return true; } catch (Exception) { return false; } } }
UGOVOR UG11
OPERACIJA: VratiSvePorudzbine(sifra)
POSTUSLOV: Vraćene su porudžbine
public class VratiSvePorudzbine:OpstaSOPorudzbina { public override object Izvrsi(BazniObjekat bo, Broker brok) { Porudzbina porudzbina = (Porudzbina)bo; List<BazniObjekat> listaBaznihObjekata = brok.VratiSveObjekteSaUslovom(porudzbina); List<Porudzbina> listaPorudzbina = new List<Porudzbina>(); for (int i = 0; i < listaBaznihObjekata.Count; i++) { Porudzbina porudzbina_objekat = (Porudzbina)listaBaznihObjekata[i];
StavkaPorudzbine sp = new StavkaPorudzbine("", "", "", ""); sp.PodesiUslovPretraga("PorudzbinaID", porudzbina_objekat.PorudzbinaID);
List<BazniObjekat> listaBaznihObjekata2 = brok.VratiSveObjekteSaUslovom(sp); List<StavkaPorudzbine> listaStavki = new List<StavkaPorudzbine>();
Majda Nikolic 291/04
Online servis za poručivanje hrane
for (int j = 0; j < listaBaznihObjekata2.Count; j++) { listaStavki.Add((StavkaPorudzbine)listaBaznihObjekata2[i]); } porudzbina_objekat.ListaStavki = listaStavki;
listaPorudzbina.Add(porudzbina_objekat); } return listaPorudzbina; } }
UGOVOR UG12
OPERACIJA: VratiSveStavke()
POSTUSLOV: Vraćene su stavke porudžbine
public class VratiSveStavke:OpstaSOStavka { public override object Izvrsi(BazniObjekat bo, Broker brok) { StavkaPorudzbine stavka = (StavkaPorudzbine)bo;
List<BazniObjekat> listaBaznihObjekata = brok.VratiSveObjekte(stavka); List<StavkaPorudzbine> listaStavki = new List<StavkaPorudzbine>(); for (int i = 0; i < listaBaznihObjekata.Count; i++) { listaStavki.Add((StavkaPorudzbine)listaBaznihObjekata[i]); }
return listaStavki;
} }
Majda Nikolic 291/04
Online servis za poručivanje hrane
UGOVOR UG13
OPERACIJA: SacuvajStavku()
POSTUSLOV: Sačuvana je stavka porudžbine
public class SacuvajStavku:OpstaSOStavka { public override object Izvrsi(BazniObjekat bo, Broker brok) { StavkaPorudzbine sp = (StavkaPorudzbine)bo; int brojRedova = brok.Ubaci(sp); if (brojRedova == 1) { return true; } else { return false; }
} }
Majda Nikolic 291/04
Online servis za poručivanje hrane
UGOVOR UG14
OPERACIJA: ObrisiStavku()
POSTUSLOV: Obrisana je stavka porudžbine
public class ObrisiStavku:OpstaSOStavka { public override object Izvrsi(BazniObjekat bo, Broker brok) { StavkaPorudzbine stavka = (StavkaPorudzbine)bo; int brojRedova = brok.Obrisi(stavka); if (brojRedova == 1) { return true; } else { return false; } } }
Nakon projektovanja svake od SO prelazi se na projektovanje klase koja je odgovorna za konekciju sa bazom I za kontrolu izvrsenja transakcije.
public class OpstaSO { protected Broker broker;
public OpstaSO() { this.broker = new Broker(); }
public object IzvrsiSO(BazniObjekat bo) { object output = null;
broker.OtvoriKonekciju(); broker.ZapocniTransakciju();
try {
Majda Nikolic 291/04
Online servis za poručivanje hrane
output = Izvrsi(bo, broker); broker.PrihvatiTransakciju(); } catch (Exception e) { broker.PonistiTransakciju(); throw e; } finally { broker.ZatvoriKonekciju(); }
return output; }
public virtual object Izvrsi(BazniObjekat bo, Broker broker) { return null; } }
Majda Nikolic 291/04
Online servis za poručivanje hrane
Projektovanje aplikacione logike – Database broker
Klasa Database broker je perzistentni okvir koji realizujr sledeće metode:
METODE POSTUSLOV
void OtvoriKonekciju()Uspostavlja se veza (konekcija) sa bazom podataka.
void ZatvoriKonekciju()Prekida se veza (konekcija) sa BP.
bool ZapocniTransakciju()Počinje transakcija.
bool PrihvatiTransakciju()Promene su uspešno zapamćene u bazi.
bool PonistiTransakciju()Promene nisu zapamćene u bazi (poništene su).
BazniObjekat VratiObjekat(BazniObjekat bo)
Ove metode projektovane su kao generičke, kako ne bi broj operacija DatabaseBroker-a rastao sa brojem klasa. Stoga je napravljena generalna klasa za specifične klase, BazniObjekat. Time ove metode mogu da prihvate različite domenske objekte preko parametara, pod uslovom da domenski objekti implementiraju interfejs BazniObjekat i njegove odgovarajuće metode. Ove metode vraćaju određenu vrednost, u zavisnosti od toga kakva je uspešnost njihovog izvršenja.
int Izmeni(BazniObjekat bo)
List<BazniObjekat> VratiSveObjekteSaUslovom(BazniObjekat bo)
int Obrisi(BazniObjekat bo)
int Ubaci(BazniObjekat bo)
List<BazniObjekat> VratiSveObjekte(BazniObjekat bo)
Interfejs BazniObjekat izgleda ovako:
public interface BazniObjekat { string VratiNazivTabele(); string VratiParametreZaUnos(); string VratiParametreZaIzmenu(); string VratiSpisakParametara(); string VratiUslov();
BazniObjekat VratiObjekat(DataRow dataRow); }
Njegove operacije implementira svaka od domenskih klasa kako bi imala mogučnost komuniciranja sa brokerom. Rezultat projektovanja klase Broker i apstraktne klase BazniObjekat prikazan je na sledećem dijagramu klasa:
Majda Nikolic 291/04
Online servis za poručivanje hrane
Majda Nikolic 291/04
Online servis za poručivanje hrane
Majda Nikolic 291/04
Skladište podataka
Korisnički interfejs
Softverski sistem
Struktura softverskog sistema
Aplikaciona logika
DataBase Broker
Online servis za poručivanje hrane
Projektovanje skladišta podataka
Skladište podataka projektujemo na osnovu softverskih klasa strukture. Kao rezultat dobijamo tabele relacionog sistema za upravljanje bazom podataka.
Table: KORISNIK
Columns:Name TypeKorisnikID TextUsername TextPassword Text
TableIndexes:Name Number of fieldsPrimaryKey 1Fields: KorisnikID
Table: KUPAC
Columns:Name TypeKupacID TextIme TextPrezime TextUlica TextBroj Text
TableIndexes:Name Number of fieldsPrimaryKey 1Fields: KupacID
Table: RESTORAN
Columns:Name TypeRestoranID TextNaziv Text
TableIndexes:
Majda Nikolic 291/04
Online servis za poručivanje hrane
Name Number of fieldsPrimaryKey 1Fields: RestoranID
Table: PORUDŽBINA
Columns:Name TypePorudzbinaID AutoNumberDatum TextUkupanIznos TextKupacID TextRestoranID Text
TableIndexes:Name Number of fieldsPrimaryKey 1Fields: PorudzbinaIDSecondaryKey 2Fields: KupacID, RestoranID
Table: STAVKAPORUDŽBINE
Columns:Name TypeStavkaID AutoNumberJeloID TextNaziv TextPorudzbinaID Number
TableIndexes:Name Number of fieldsPrimaryKey 2Fields: StavkaID, PorudzbinaIDSecondaryKey 1Fields: JeloID
Table: JELO
Columns:Name TypeJeloID Text
Majda Nikolic 291/04
Online servis za poručivanje hrane
Naziv TextCena Text
TableIndexes:Name Number of fieldsPrimaryKey 1Fields: JeloID
Struktura korisničkog interfejsa
Korisnički interfejs predstavlja ulazno-izlaznu reprezentaciju softverskog sistema.
On se sastoji iz dva dela : kontrolera korisničkog interfejsa i ekranske forme.
Aktor
Ekranska forma
Kontroler KI
Softverski sistem
Korisnički interfejs
Majda Nikolic 291/04
Online servis za poručivanje hrane
Majda Nikolic 291/04
Skladište podataka
Struktura softverskog sistema
Aplikaciona logika
DataBase Broker
Korisnički i nterfejs
Softverski sistem
Online servis za poručivanje hrane
Projektovanje ekranskih formi
Majda Nikolic 291/04
Top Related