Politechnika Opolska
Wydział Elektrotechniki i Automatyki
Kierunek Informatyka
Semestr IV
Studia dzienne
Inżynieria oprogramowania
PROJEKT
KOMPUTERYZACJI SALONU
SPRZEDAŻY SAMOCHODÓW OSOBOWYCH
Autor Prowadzący
Maciej Krzyszkowski mgr inż. Krzysztof Bartecki
Opole 2004
1. Strukturalna analiza systemowa
1.1 Faza określania wymagań
1.1.1 Wycinek rzeczywistości
Klient trafiający do drzwi salonu oczekuje rzetelnej oraz aktualnej informacji związanej z asortymentem dostępnym poprzez salon. Każdy z obsługiwanych klientów staje się również potencjalnym kupującym pojazd.
Osobą, do której zwraca się klient w pierwszej kolejności jest pracownik BOK. Jest on wspierany przez zintegrowany system informatyczny (który właśnie jest przedmiotem niniejszego projektu), co pozwala mu na szybką i sprawną interakcję z klientem, zainteresowanym nabyciem lub też jedynie informacją na temat możliwości zakupu poszczególnych modeli oraz ich właściwości. Po odpowiednich uzgodnieniach (w przypadku wyrażenia przez klienta dość zdecydowanej chęci kupna określonego modelu), pracownik BOK kieruje zainteresowanego do działu sprzedaży, który posiada już stosowane informacje przekazane przez BOK. To tutaj właśnie dokonuje się decydujących czynności związanych z zakupem pojazdu (podpisanie umowy-zamówienia, wystawienie faktury, uregulowanie płatności). W przypadku pomyślnego przebiegu wszystkich czynności, klient otrzymuje w rezultacie oczekiwany produkt.
Na każdym etapie, poszczególne podmioty wchodzące w skład salonu sprzedaży (poszczególne działy) współpracują ze sobą w określony sposób oraz korzystają z dostępnych zasobów w celu osiągnięcia jak największego stopnia usatysfakcjonowania klienta, co leży w szeroko pojętym dobrym interesie salonu.
1.1.2 Wymagania funkcjonalne
Z założenia system ma za zadanie usprawnić oraz zautomatyzować sprzedaż samochodów osobowych w średniej wielkości salonie samochodowym. Projektowany system powinien być odpowiedzialny za:
obsługę klienta, zarówno w ramach sprzedaży, jak i informacji dotyczących poszczególnych modeli;
przyjmowanie zamówień od klienta, oraz ich weryfikacja pod względem dostępnego asortymentu;
prowadzenie zestawień sprzedaży;
gromadzenie danych dotyczących sprzedawanych samochodów;
przygotowywanie zamówień dotyczących pożądanego asortymentu.
Schemat 1. Hierarchia wymagań funkcjonalnych
1.1.3 Wymagania niefunkcjonalne
System powinien charakteryzować się stosunkowo prostym interfejsem graficznym, za pomocą którego możliwy będzie szybki dostęp do składników systemu, co oczywiście umożliwia sprawną obsługę klienta. Wymagania sprzętowe nie powinny być zbyt wysokie, co sprzyja ograniczeniu kosztów wdrożenia systemu. Ważne jest również zastosowanie łatwej w obsłudze platformy systemowej, co pozwoli zaoszczędzić czas oraz środki finansowe niezbędne do przeszkolenia pracowników salonu.
1.2 Faza analizy strukturalnej
1.2.1 Diagramy przepływu danych (DFD - Data Flow Diagram)
Schemat 2. Kontekstowy diagram przepływu danych
Schemat 3. Diagram przepływu danych pierwszego rzędu
Schemat 4. Dekompozycja funkcji Dział sprzedaży
Schemat 5. Dekompozycja funkcji Dział zaopatrzenia
1.2.2 Diagram związków encji (ERD - Entity Relation Diagram)
Poniższy diagram przedstawia relacje pomiędzy poszczególnymi encjami systemu. Określa także opcjonalność oraz mówi o roli, jaką pełni encja w danym związku. W bloku poszczególnych encji widoczne są ich atrybuty oraz identyfikatory.
Schemat 6. Diagram związków encji
Legenda:
1 - jest obsługiwany przez
2 - obsługuje
3 - jest prowadzona przez
4 - prowadzi
5 - zapewnia
6 - jest zapewniany przez
7 - jest dostarczany przez
8 - dostarcza
1.2.3 Słownik danych (DD - Data Dictionary)
Legenda:
{} - zbiór
[] - zakres
Sprzedaż
- numer sprzedaży = string {10*[A-Z|a-z|0-9|-]}
- data = dzień/miesiąc/rok
dzień = integer [1-31]
miesiąc = integer [1-12]
rok = integer [2004-2999]
- kwota = wartość - waluta
wartość = integer {max 7*[0-9]}
waluta = string {3*[A-Z]}
- ilość = integer [1-99]
- oznaczenie modelu = string {max 20*[A-Z|a-z|0-9| |-]}
Pracownik
- numer pracownika = int {5*[0-9]}
- imię i nazwisko = string {max 30*[A-Z|a-z| |-]}
- stanowisko = string {max 20*[A-Z|a-z| |-]}
- zakres obowiązków = string {max 1000*[A-Z|a-z|0-9| |-|,|;|'|/|(|)]}
- płaca = wysokość - waluta
wysokość = integer {max 5*[0-9]}
waluta = string {3*[A-Z]}
Klient
- numer PESEL = integer {11*[0-9]}
- numer dowodu osobistego = string {9*[A-Z|0-9]}
- imię i nazwisko = string {max 30*[A-Z|a-z| |-]}
- adres = miejscowość - ulica - kraj
miejscowość = string {max 20*[A-Z|a-z|0-9|-]}
ulica = nazwa - numer1/numer2
nazwa = string {max 30*[A-Z|a-z| |-]}
numer1 = integer {max 4*[1-9]}
numer2 = integer {max 4*[1-9]}
kraj = string {max 20*[A-Z|a-z]}
- rok urodzenia = dzień/miesiąc/rok
dzień = integer [1-31]
miesiąc = integer [1-12]
rok = integer [1890-2100]
Pojazd
- numer nadwozia = string {[A-Z|0-9]}
- numer silnika = string {[A-Z|0-9]}
- marka = string {max 20*[A-Z| |-]}
- model = string {max 20*[A-Z|a-z|0-9| |-]}
- kolor = integer {4*[0-9]}
- cena = wartość - waluta
wartość = integer {max 7*[0-9]}
waluta = string {3*[A-Z]}
Dostawca
- nazwa = string {max 30*[A-Z|a-z|0-9| |-]}
- REGON = integer {[0-9]}
- adres = miejscowość - ulica - kraj
miejscowość = string {max 20*[A-Z|a-z|0-9|-]}
ulica = nazwa - numer1/numer2
nazwa = string {max 30*[A-Z|a-z| |-]}
numer1 = integer {max 4*[1-9]}
numer2 = integer {max 4*[1-9]}
kraj = string {max 20*[A-Z|a-z]}
- asortyment = string {max 1000*[A-Z|a-z|0-9| |-|,|;|'|/|(|)]}
Zamówienie
- nr zamówienia = string {[A-Z|0-9]}
- data_zamówienia = dzień/miesiąc/rok
dzień = integer [1-31]
miesiąc = integer [1-12]
rok = integer [2004-2999]
- termin_płatności = dzień/miesiąc/rok
dzień = integer [1-31]
miesiąc = integer [1-12]
rok = integer [2004-2999]
- opłacono = boolean [TRUE|FALSE]
Zapotrzebowanie
- rodzaj = string max 99*{max 20*[A-Z| |-]}
- ilość = integer [1-99]
- priorytet = [Niski|Wysoki|Krytyczny]
Potwierdzenie płatności
- kwota = wartość - waluta
wartość = integer {max 7*[0-9]}
waluta = string {3*[A-Z]}
- nr sprzedaży = string {10*[A-Z|a-z|0-9|-]}
- zapłacono = boolean [TRUE|FALSE]
Faktura
- numer faktury = string {10*[A-Z|a-z|0-9|-]}
- data = dzień/miesiąc/rok
dzień = integer [1-31]
miesiąc = integer [1-12]
rok = integer [2004-2999]
- kwota = wartość - waluta
wartość = integer {max 7*[0-9]}
waluta = string {3*[A-Z]}
Polecenie wydania
- przedmiot = Pojazd
- komu = Klient
Polecenie sprzedaży
- przedmiot = Pojazd
- komu = Klient
Zamówiony produkt = Pojazd
Zamówione pojazdy = {Pojazd}
Przyjęty pojazd = Pojazd
Informacje o zamówieniu = Zamówienie
BOK = {Pracownik}
Dział zaopatrzenia = {Pracownik}
Dział sprzedaży = {Pracownik}
Magazyn pojazdów = {Pojazd}
Dane transakcji = Sprzedaż
Baza transakcji = {Sprzedaż}
2. Obiektowa analiza systemowa
2.1 Diagram przypadków użycia (Use Case Diagram)
UCD czyli diagramu przypadków użycia ma za zadanie przedstawienie funkcjonalności systemu z perspektywy zewnętrznego użytkownika. Stanowi również opis wymagań funkcjonalnych.
Schemat 7. Diagram przypadków użycia
2.2 Diagramy sekwencji
Diagramy sekwencjii przedstawiają perspektywę interakcji skupiając uwagę na kolejności przesyłania komunikatów w czasie.
Schemat 8. Diagram sekwencji dla przypadku zakupu pojazdu przez klienta.
Schemat 9. Diagram sekwencji dla przypadku zakupu pojazdu przez salon od dostawcy.
2.3 Diagram klas
Diagram klas służy do reprezentowania składowych systemu oraz zależności między nimi. Stanowi on odpowiednik diagramu związków encji z modelu strukturalnego. Symbol klasy składa się z trzech części: nazwy klasy, pola klasy oraz metod klasy.
9
Salon sprzedaży samochodów osobowych
Obsługa salonu
Obsługa klienta
Udzielanie informacji
Przyjmowanie zamówień
Wystawianie faktur
Sprzedaż
Kontakt z dostawcą
Kasa
Klient
Prowadzenie zestawień
(1) B O K
(2) Dział sprzedaży
Baza transakcji
Magazyn pojazdów
od klienta
z magazynu pojazdów
Dostawca
Klient
Sprzedaż
pojazdów
Dostawca
(3) Dział zaopatrzenia
z BOK
z magazynu pojazdów
od klienta
(3.3) Dział finansów
(3.1) Dział zamówień
(3.2)
Przyjmowanie pojazdów
do działu
zaopatrzenia
Sprzedaż
Klient
Pracownik
do magazynu pojazdów
Pojazd
Dostawca
ID:
- nr. nadwozia
- nr. silnika
Atrybuty:
- marka
- model
- kolor
-cena
ID:
-nazwa
-REGON
Atrybuty:
- adres
- asortyment
od dostawcy
ID:
- nr. pracowni.
Atrybuty:
- imię i nazw.
- stanowisko
- zakres obowiązków
- płaca
ID:
- nr. sprzedaż.
Atrybuty:
- data
- kwota
- ilość
(2.2) Dział finansów
ID:
- nr. PESEL
- nr. dowodu
Atrybuty:
- imię i nazw.
- adres
- rok urodz.
do kasy
1
2
3
4
(2.3) Dział wydawania pojazdów
z kasy
z działu sprzedaży
Dostawca
(2.1) Dział zamówień
do
klienta
5
6
7
8
do
klienta
baza transakcji
Przyjęcie pojazdu
Dodanie pojazdu do magazynu
Dostarczenie pojazdu
Złożenie zamówienia
Sprawdzenie dostępności
Wystawienie faktury
Wydanie pojazdu
Płatność
Klient
Pracownik
Dostawca
Salon sprzedaży
zamów (model, marka)
poleć sprzedaż
(model, marka, klient)
zadeklaruj zakup
odpowiedz (TRUE|FALSE)
udostępnij (wykaz pojazdów)
żądaj (wykaz pojazdów)
Dział sprzedaży
Magazyn pojazdów
BOK
zapytaj (model, marka)
Klient
płać (kwota)
Dostawca
Dział zaopatrzenia
Kasa
Magazyn pojazdów
zamów (marka, model, ilość)
dostarcz pojazdy ({Pojazd})
żądaj (kwota)
wypłać (kwota)
płać (kwota)
przyjmij pojazdy ({Pojazd})
wystaw fakturę (kwota, termin)
wydaj produkt (pojazd)
wystaw fakturę (kwota, termin)
- nr. PESEL: int
- nr. dowodu: string
- rok urodzenia: string
+ złóżZamówienie();
+ opłaćFakturę();
+ zgłośZapotrzebowanie();
+ przyjmijZapotrzebowanie();
+ pobierzŚrodkiFinansowe();
+ przyjmjiPojazd();
+ złóżZamówienie();
+ opłaćFakturę();
+ przyjmijZamówienie();
+ pobierzPłatność();
+ wystawFakturę();
+ pobierzDanePojazdu();
+ przyjmjiPolecenie();
+ zapiszTransakcję();
+ wydajPojazd();
- dział wewnętrzny:string
Pracownik działu sprzedaży
+ pobierzSpis();
+ polećSprzedaż();
+ poinformujKlienta();
Pracownik BOK
- nr. pracown: int
- stanowisko: string
- zakres obowiązków: string
- płaca: int,string
- adres: string
Pojazd
Pracownik
- dział wewnętrzny: string
Pracownik działu zaopatrzenia
- nr. nadwozia: string
- nr. silnika: string
- marka: string
- model: string
- kolor: int
- cena: int, string
- ilość miejsc: int
Dostawca
- nazwa: string
- REGON: int
- adres: string
- asortyment: string
Klient
Klient indywidualny
- nr. REGON: int
Klient instytucjonalny
Pojazd dostawczy
- ładowność kufra: int
Pojazd osobowy
- rozkładane siedzenia: boolean
- ilość drzwi: int
- ładowność bagażnika: int
+ dostarczPojazd();
+ przyjmjiZamówienie();
+ wystawFakturę();
+ pobierzPłatność();
1*
1*
1*
1*
dostarcza
jest dostarczany
jest sprzedawany
sprzedaje
obsługuje
jest obsługiwany
- nr. sprzedaży: int
- data: string
- kwota: int, string
- ilość: int
Osoba
- płeć: string
- wiek: int
- imię i nazwisko: string
- telefon kontaktowy: int
Transakcja
1*
zapisuje
jest zapisywana