1. Projekt Konceptualny

1.1. Sformułowanie zadania projektowego

Przedmiotem projektu jest opracowanie systemu przelewów do ZUS. W założeniach system ma udostępniać możliwość prowadzenia rachunku oraz dokonywanie z poziomu aplikacji web przelewu środków do ZUS. Ze względu na złożoną specyfikę zagadnienia nie ma możliwości pełnej implementacji systemu, umożliwiającą realizowanie tego typu operacji. W związku z tym główny nacisk położony został na dostarczenie użytkownikowi odpowiednio przygotowanego, intuicyjnego i funkcjonalnego interfejsu do realizacji tego typu operacji oraz przygotowanie logiki biznesowej zdolnej do przetwarzania danych, które następnie będą składowane w bazie.

1.2. Analiza wymagań użytkownika i wstępne określenie funkcjonalności.

„System przelewów do ZUS” będzie posiadał następujące funkcjonalności:

1. MUST:

  • Dwuetapowe logowanie do systemu
  • Dwuetapowy proces realizacji przelewu
  • Wyświetlanie listy wykonanych przelewów
  • Wyświetlanie szczegółów wykonanych przelewów
  • Wyświetlanie danych o dostępnych w systemie rachunkach
  • Wylogowanie z systemu

2. SHOULD:

3. COULD:

  • Rejestracja nowego użytkownika
  • Wysłanie wniosku o utworzenie konta w systemie
  • Wysyłanie wniosku o otworzenie nowego rachunku

4. WON'T:

  • Status przelewu
  • Wiadomość e-mail/SMS z powiadomieniem o realizacji, zmianie statusu przelewu

1.3. Określenie scenariuszy użycia

1. Logowanie:

  • Użytkownik posiada konto w systemie, przydzielony numer Id oraz hasło.
  • Użytkownik nie jest zalogowany, przechodzi do pierwszej strony logowania.
  • Użytkownik wprowadza swój indywidualny numer ID i klika w przycisk zaloguj.
  • Następuje weryfikacja numeru ID i pobranie danych użytkownika.
  • Pojawia się drugie okno logowania, w którym użytkownik podaje swoje hasło.
  • Następuje weryfikacja podanych danych.
  • Jeśli wprowadzone dane są poprawne pojawia się okno główne systemu.
  • Jeśli wprowadzone dane nie są poprawne pojawia się informacja o błędnym logowaniu.

2. Przeglądanie listy własnych rachunków:

  • Użytkownik loguje się do systemu
  • Użytkownik przechodzi do zakładki Rachunki
  • Pojawia się lista dostępnych rachunków

3. Przeglądanie szczegółów wybranego rachunku:

  • Użytkownik loguje się do systemu
  • Użytkownik przechodzi do zakładki Rachunki
  • Pojawia się lista dostępnych rachunków
  • Użytkownik klika w zakładkę Szczegóły rachunku
  • Pojawiają się szczegóły pierwszego rachunku
  • Użytkownik ma możliwość zmiany rachunku z selektora

4. Przeglądanie historii przelewów:

  • Użytkownik loguje się do systemu
  • Użytkownik przechodzi do zakładki Historia
  • Pojawia się lista zrealizowanych przelewów

5. Przeglądanie szczegółów wykonanych przelewów:

  • Użytkownik loguje się do systemu
  • Użytkownik przechodzi do zakładki Historia
  • Pojawia się lista wykonanych przelewów
  • Użytkownik klika w zakładkę Szczegóły przelewów
  • Pojawiają się szczegóły ostatniego przelewu
  • Użytkownik ma możliwość zmiany przelewu z selektora

6. Realizacja przelewu:

  • Użytkownik loguje się do systemu
  • Użytkownik przechodzi do zakładki Przelew
  • Pojawia się formularz do wprowadzenia odpowiednich danych
  • Użytkownik wprowadza dana i klika przycisk Zatwierdź
  • System sprawdza poprawność danych
  • Jeśli dane okazały się poprawne wyświetlone zostają szczegóły przelewu
  • W celu zatwierdzenia przelewu użytkownik ponownie klika Zatwierdź

1.4. Identyfikacja funkcji

1. Przechowywanie danych o użytkownikach i danych do logowania

2. Składowanie i udostępnianie informacji o przelewach

3. Składowanie i udostępnianie informacji o rachunkach

1.5. Budowa i analiza diagramu przepływu danych

1. Logowanie

2. Przelew

3. Szczegóły wykonanych przelewów

4. Szczegóły rachunków

1.6. Wybór encji (obiektów) i ich atrybutów

W projekcie wyróżnione zostały następujące encje:

  • Rachunek:
    • Numer rachunku
    • Waluta
    • Saldo
    • Data otwarcia
    • Stan rachunku
  • Użytkownik:
    • Imię
    • Nazwisko
    • Telefon
    • Adres e-mail
    • Numer identyfikacyjny
    • Hasło
    • Stan użytkownika
  • Przelew:
    • Typ
    • Stan
    • Tytuł
    • Rachunek
    • Kwota
    • Waluta
    • Data
    • Dane beneficjenta

1.7. Projektowanie powiązań (relacji) pomiędzy encjami. Konstrukcja diagramu ERD (Entity-Relationship Diagram)

1.8. Projekt diagramów STD (State Transition Diagram – diagramy przejść pomiędzy stanami)

2. Projekt Logiczny

2.1. Projekt encji

public class Account implements Serializable {

	private static final long serialVersionUID = 1L;

	private int acc_id;
	
	private String acc_no = "";
	
	private String acc_currency = "";
	
	private double acc_balance;
	
	private Date acc_open_date;
	
	private String acc_closed = "";

	public int getAcc_id() {
		return acc_id;
	}

	public void setAcc_id(int acc_id) {
		this.acc_id = acc_id;
	}

	public String getAcc_no() {
		return acc_no;
	}

	public void setAcc_no(String acc_no) {
		this.acc_no = acc_no;
	}

	public String getAcc_currency() {
		return acc_currency;
	}

	public void setAcc_currency(String acc_currency) {
		this.acc_currency = acc_currency;
	}

	public double getAcc_balance() {
		return acc_balance;
	}

	public void setAcc_balance(double acc_balance) {
		this.acc_balance = acc_balance;
	}

	public Date getAcc_open_date() {
		return acc_open_date;
	}

	public void setAcc_open_date(Date acc_open_date) {
		this.acc_open_date = acc_open_date;
	}

	public String getAcc_closed() {
		return acc_closed;
	}

	public void setAcc_closed(String acc_closed) {
		this.acc_closed = acc_closed;
	}
public class Transfer implements Serializable {

	private static final long serialVersionUID = 1L;

	private int trn_id;
	
	private String trn_state = "";
	
	private String trn_acc_no = "";
	
	private double trn_amount;
	
	private String trn_benef_acc_no = "";
	
	private String trn_currency = "";
	
	private String trn_title = "";
	
	private Date trn_date;

	public int getTrn_id() {
		return trn_id;
	}

	public void setTrn_id(int trn_id) {
		this.trn_id = trn_id;
	}

	public String getTrn_state() {
		return trn_state;
	}

	public void setTrn_state(String trn_state) {
		this.trn_state = trn_state;
	}

	public String getTrn_acc_no() {
		return trn_acc_no;
	}

	public void setTrn_acc_no(String trn_acc_no) {
		this.trn_acc_no = trn_acc_no;
	}

	public double getTrn_amount() {
		return trn_amount;
	}

	public void setTrn_amount(double trn_amount) {
		this.trn_amount = trn_amount;
	}

	public String getTrn_benef_acc_no() {
		return trn_benef_acc_no;
	}

	public void setTrn_benef_acc_no(String trn_benef_acc_no) {
		this.trn_benef_acc_no = trn_benef_acc_no;
	}

	public String getTrn_currency() {
		return trn_currency;
	}

	public void setTrn_currency(String trn_currency) {
		this.trn_currency = trn_currency;
	}

	public String getTrn_title() {
		return trn_title;
	}

	public void setTrn_title(String trn_title) {
		this.trn_title = trn_title;
	}

	public Date getTrn_date() {
		return trn_date;
	}

	public void setTrn_date(Date trn_date) {
		this.trn_date = trn_date;
	}
public class User implements Serializable {

	private static final long serialVersionUID = 1L;

	private int user_id;
	
	private String usr_state = "";
	
	private String usr_login_id = "";
	
	private String usr_name = "";
	
	private String usr_surname = "";
	
	private Date usr_born_date;
	
	private String usr_pesel = "";
	
	private String usr_phone = "";
	
	private String usr_mail = "";
	
	private String usr_nip = "";

	public int getUser_id() {
		return user_id;
	}

	public void setUser_id(int user_id) {
		this.user_id = user_id;
	}

	public String getUsr_state() {
		return usr_state;
	}

	public void setUsr_state(String usr_state) {
		this.usr_state = usr_state;
	}

	public String getUsr_login_id() {
		return usr_login_id;
	}

	public void setUsr_login_id(String usr_login_id) {
		this.usr_login_id = usr_login_id;
	}

	public String getUsr_name() {
		return usr_name;
	}

	public void setUsr_name(String usr_name) {
		this.usr_name = usr_name;
	}

	public String getUsr_surname() {
		return usr_surname;
	}

	public void setUsr_surname(String usr_surname) {
		this.usr_surname = usr_surname;
	}

	public Date getUsr_born_date() {
		return usr_born_date;
	}

	public void setUsr_born_date(Date usr_born_date) {
		this.usr_born_date = usr_born_date;
	}

	public String getUsr_pesel() {
		return usr_pesel;
	}

	public void setUsr_pesel(String usr_pesel) {
		this.usr_pesel = usr_pesel;
	}

	public String getUsr_phone() {
		return usr_phone;
	}

	public void setUsr_phone(String usr_phone) {
		this.usr_phone = usr_phone;
	}

	public String getUsr_mail() {
		return usr_mail;
	}

	public void setUsr_mail(String usr_mail) {
		this.usr_mail = usr_mail;
	}

	public String getUsr_nip() {
		return usr_nip;
	}

	public void setUsr_nip(String usr_nip) {
		this.usr_nip = usr_nip;
	}

2.2. Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. w oparciu o zdefiniowany diagram ERD

CREATE TABLE "ACCOUNTS"
(
  "ACC_ID" serial NOT NULL, -- Identyfikator rachunku
  "ACC_NO" character(30), -- Numer rachunku
  "ACC_CURRENCY" character(3), -- Waluta rachunku
  "ACC_BALANCE" double precision, -- Saldo księgowe rachunku
  "ACC_OPEN_DATE" date, -- Data otwarcia rachunku
  "ACC_CLOSED" character(1) DEFAULT 'N'::bpchar, -- Czy rachunek zamknięty
  "ACC_BANK_ID" integer, -- Idenyfikator rachunku w systemie bankowym
  CONSTRAINT "ACC_ID_PK" PRIMARY KEY ("ACC_ID" )
)

CREATE TABLE "DICTIONARIES_DEF"
(
  "DICT_NAME" character(20), -- Nazwa słownika
  "DICT_ID" serial NOT NULL, -- Identyfikator słownika
  "DICT_CODE" character(20), -- Kod słownika
  CONSTRAINT "DICT_ID_PK" PRIMARY KEY ("DICT_ID" )
)

CREATE TABLE "DICTIONARIES_VALUE"
(
  "DICT_ID" integer, -- Identyfikator słownika
  "DICT_CODE" character(10), -- Kod
  "DICT_MEANING" character(100), -- Znaczenie
  "DICT_LANG" character(10), -- Język rekordu
  CONSTRAINT "DICT_ID_FK" FOREIGN KEY ("DICT_ID")
      REFERENCES "DICTIONARIES_DEF" ("DICT_ID") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE "TRANSFER"
(
  "TRN_STATE" character(2),
  "TRN_TYPE" character(3),
  "TRN_ACC_ID" integer,
  "TRN_USR_ID" integer,
  "TRN_AMOUNT" double precision, -- Kwota przelewu
  "TRN_CURRENCY" character(3), -- Waluta przelewu
  "TRN_TITLE" character(100), -- Tytuł przelewu
  "TRN_DATE" date, -- Data przelewu
  "TRN_CHANNEL" character(3), -- Kanał złożenia zlecenia (WWW, TEL)
  "TRN_ID" serial NOT NULL,
  "TRN_BNF_ACCOUNT" character(26),
  "TRN_NIP" character(10),
  "TRN_EID_TYPE" character(1),
  "TRN_EID_VALUE" character(15),
  "TRN_DEC_1" character(6),
  "TRN_DEC_2" character(2),
  "TRN_DEC_NO" character(20), -- Numer decyzji
  "TRN_NOTE" character(100), -- Notatka
  CONSTRAINT "TRN_ID_PK" PRIMARY KEY ("TRN_ID" ),
  CONSTRAINT "TRN_ACC_ID_FK" FOREIGN KEY ("TRN_ACC_ID")
      REFERENCES "ACCOUNTS" ("ACC_ID") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT "TRN_USR_ID_FK" FOREIGN KEY ("TRN_USR_ID")
      REFERENCES "USER" ("USR_ID") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE "USER"
(
  "USR_ID" serial NOT NULL, -- Identyfikator użytkownika
  "USR_STATE" character(1), -- Stan użytkownika
  "USR_LOGIN_ID" character(8),
  "USR_NAME" character(20),
  "USR_SURNAME" character(20),
  "USR_PASSWORD" character(15), -- Hasło
  "USR_BORN" date, -- Data urodzenia
  "USR_PHONE" character(10), -- Numer telefonu
  "USR_EMAIL" character(20), -- Adres e-mail
  "USR_PESEL" character(11), -- Numer pesel
  "USR_NIP" character(10), -- Numer NIP
  CONSTRAINT "USR_ID_PK" PRIMARY KEY ("USR_ID" )
)

CREATE TABLE "USER_ACCOUNTS"
(
  "USR_ID" integer, -- Identyfikator użytkownika
  "ACC_ID" integer, -- Identyfikator rachunku
  "USR_ACC_TYPE" character(1) -- Typ przynależności
)

CREATE TABLE "ZUS_TRANSFER"
(
  "ZTR_TRN_ID" integer, -- Identyfikator przelewu
  "ZTR_DOC_TYPE" character(1), -- Typ dokumentu (1 - dowód os., 2 - paszport, P - PESEL, R - REGON)
  "ZTR_NIP" character(10), -- NIP max. 10 znaków
  "ZTR_PAYMENT_TYPE" character(1), -- Typ wpłaty: ...
  "ZTR_USR_NAME" character(100), -- Nazwa płatnika
  "ZTR_DECLARATION_NO" character(2), -- Nr deklaracji (kod 2-cyfrowy od 00 do 99)
  "ZTR_AGREEMENT_NO" character(15), -- Nr decyzji / umowy / tytułu wykonawczego
  "ZTR_DECLARATION_1" integer,
  "ZTR_DOK_ID" integer, -- Identyfikator dokumentu
  CONSTRAINT "TRN_ID_FK" FOREIGN KEY ("ZTR_TRN_ID")
      REFERENCES "TRANSFER" ("TRN_ID") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

2.3. Projektowanie operacji na danych

pobranie danych użytkownika na podstawie ID:

SELECT "USR_ID","USR_STATE","USR_LOGIN_ID","USR_NAME","USR_SURNAME","USR_BORN","USR_PHONE","USR_EMAIL","USR_PESEL","USR_NIP" FROM "USER" WHERE "USR_LOGIN_ID" = 'P_ID';

pobranie listy rachunków dla klienta:

SELECT "ACCOUNTS"."ACC_ID","ACC_NO","ACC_CURRENCY","ACC_BALANCE","ACC_OPEN_DATE","ACC_CLOSED" FROM "ACCOUNTS","USER_ACCOUNTS" WHERE "USR_ID" = 'USR_ID';


pobranie historii przelewów dla klienta:

SELECT "TRN_STATE","TRN_AMOUNT","TRN_CURRENCY","TRN_DATE","TRN_ID","TRN_BNF_ACCOUNT","ACCOUNTS"."ACC_NO","TRN_NOTE" FROM "TRANSFER","ACCOUNTS" WHERE "TRN_USR_ID" = 'USR_ID';


dodanie nowego przelewu do bazy:

INSERT INTO "TRANSFER"("TRN_STATE","TRN_TYPE","TRN_ACC_ID","TRN_USR_ID","TRN_AMOUNT","TRN_CURRENCY","TRN_DATE","TRN_CHANNEL","TRN_BNF_ACCOUNT","TRN_NIP","TRN_EID_TYPE",
"TRN_EID_VALUE","TRN_DEC_1","TRN_DEC_2","TRN_DEC_NO","TRN_NOTE") VALUES ('TRN_STATE','TRN_ACC_ID','TRN_USR_ID','TRN_AMOUNT','TRN_CURRENCY','TRN_DATE','TRN_CHANNEL','TRN_BNF_ACCOUNT',
'TRN_NIP','TRN_EID_TYPE','TRN_EID_VALUE','TRN_DEC_1','TRN_DEC_2','TRN_DEC_NO','TRN_NOTE')

3. Raport końcowy

3.1. Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych

1. Logowanie

2. Przelew

3. Historia przelewów

4. Rachunki

3.2. Zdefiniowanie panelu sterowania aplikacji

W przypadku tej aplikacji nie było potrzeby tworzenia panelu sterowania. Jednak ciekawym rozwiązaniem może być opracowanie zewnętrznej aplikacji do zarządzania i realizowania przelewów.

3.3. Zdefiniowanie makropoleceń dla realizacji typowych operacji

3.4. Uruchamianie i testowanie aplikacji

Aplikacja była testowana w środowisku lokalnym. Testy aplikacji odbywały się z wykorzystaniem serwera aplikacji JBoss Application Server w wersji 7.1.1 oraz bazy danych PostgreSQL w wersji .

3.5. Wprowadzanie danych

W opracowanym projekcie nie istniała potrzeba migracji dotychczasowych danych, jednak ze względu na specyfikę systemu, ręcznie dodane zostały dane klientów. Wszystkie pozostałe dane wprowadzane są do systemu przy pomocy interfejsu WWW przez użytkowników.

3.6. Wdrażanie systemu do użytkowania

Wdrażanie aplikacji polega na instalacji serwera baz danych oraz serwera aplikacyjnego oraz serwera WWW. Aby utworzyć schemat bazy danych należy uruchomić odpowiedni skrypt. Następnie w konsoli administracyjnej serwera aplikacji należy odpowiedni DataSource oraz do katalogu deployments odpowiedni plik ear. W konfiguracji serwera WWW należy utworzyć dwa moduły login oraz app i podać w nich ścieżki do odpowiednich plików war. Aplikacji powinna być dostępna z poziomu przeglądarki WWW.

3.7. Przeprowadzenie szkolenia użytkowników

W przypadku opracowanej aplikacji nie ma potrzeby przeprowadzania szkolenia użytkowników. Aplikacja jest intuicyjna i podczas jej użytkowania nie powinny pojawić się żadne problemy.

3.8. Zapewnienie dokumentacji technicznej i użytkowej

Niniejsza dokumentacja spełnia wszystkie wymagania klienta pod względem wdrożenia oraz późniejszej obsługi aplikacji.

3.9. Zapewnienie obsługiwania systemu po wdrożeniu

System jest samodzielną aplikacją i nie wymaga dodatkowej obsługi po wdrożeniu.

3.10. Rozwijanie i modyfikowanie aplikacji

Aplikacja może być rozwijana i modyfikowana po wcześniejszym wykryciu jej niedoskonałości oraz w przypadku rozszerzenia funkcjonalności.

3.11. Opracowanie doświadczeń wynikających z realizacji projektu

pl/dydaktyka/ztb/2012/projekty/zus/start.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0