Preamble
Banking system is a software case study,
which is implemented in State Chart XML (SCXML) and PauWare .
PauWare is a Java engine for executing
Harel's Statecharts in general.
Goal
This case study is a banking system. The Requirements Definition Doc. is
☛ (PDF, Chap. 6, in French).
Resources
Database SQL scripts
Java DB
Microsoft Access
Oracle
Java SE application
(PauWare ver. 1.3 PauWare_Java_EE.zip )
as a Ant project Banking_system_JavaFX.zip
Implementation in PauWare (ver. 1.3) and
JavaFX
Specification (Card reader, Cash dispenser…)
Specification (Transaction)
Specification (ATM) as full-size SVG image
ATM
Working
Transaction_in_progress
Out_of_order
entry/ ATM.display_out_of_order
End
entry/ Card_reader.card_to_be_ejected
entry/ ATM.display_take_card
exit/ Transaction_manager.to_be_recorded
Second_delaying
exit/ ATM.to_be_killed(Statechart)
exit/ ATM.to_be_killed(Statechart)
Suspicious_end
entry/ Card_reader.card_to_be_put_down
exit/ Transaction_manager.to_be_recorded
Transaction_verification
entry/ ATM.to_be_set(Statechart,Long)
entry/ ATM.display_transaction_starts_
exit/ ATM.to_be_killed(Statechart)
Password_request
entry/ ATM.to_be_set(Statechart,Long)
entry/ ATM.display_enter_password
exit/ ATM.to_be_killed(Statechart)
Printing
Start
entry/ ATM.display_insert_card
Brief_end
entry/ Card_reader.card_to_be_ejected
entry/ ATM.display_take_card
First_delaying
entry/ ATM.to_be_set(Statechart,Long)
exit/ ATM.to_be_killed(Statechart)
Third_delaying
entry/ ATM.to_be_set(Statechart,Long)
exit/ ATM.to_be_killed(Statechart)
Deposit_in_progress
Withdrawal_in_progress
Operation_verification
entry/ ATM.to_be_set(Statechart,Long)
entry/ ATM.display_operation_starts_
exit/ ATM.to_be_killed(Statechart)
Transaction_end_choice
entry/ ATM.display_choose_continuation_or_termination
Account_choice
entry/ ATM.display_choose_account
Operation_kind_choice
entry/ ATM.display_choose_operation_kind
Amount_choice
entry/ ATM.to_be_set(Statechart,Long)
entry/ ATM.display_choose_amount
exit/ ATM.to_be_killed(Statechart)
Amount_verification
time_out
card_unreadable/ATM.display_card_unreadable
card_put_down/ATM.display_card_put_down
card_removed
transaction_empty[ATM.breakdown_equal_to_false]
transaction_not_empty[ATM.breakdown_equal_to_false]/Receipt_printer.to_be_printed(Transaction_manager)
card_read/ATM.set_attempt_(Byte)
password_entered[ATM.password_equal_to_authorisation_password(String)]/^Consortium.start_of(String,Object,Timestamp)
card_put_down/ATM.display_card_put_down
time_out[ATM.context_equal_to_Password_request_and_attempt_equal_to_2(Statechart)]
password_entered[ATM.password_not_equal_to_authorisation_password(String)]/ATM.display_invalid_password;ATM.to_be_set(Statechart,Long)
time_out[ATM.context_equal_to_Password_request_and_attempt_equal_to_1(Statechart)]/ATM.set_attempt_(Byte)
response_to_START_OF_not_ok/ATM.display_transaction_error(String);Transaction_manager.error(String);ATM.to_be_set(Statechart,Long)
card_removed/^Transaction_manager.empty_
time_out
time_out[ATM.context_equal_to_Transaction_verification(Statechart)]
time_out/Consortium.end_of(String,Object)
card_put_down[ATM.breakdown_equal_to_false]/ATM.display_card_put_down
operation_kind_chosen[ATM.operation_is_not_Query]/ATM.set_amount_choice_try_to(Byte);ATM.set_again_to(Boolean)
amount_chosen[ATM.operation_is_Withdrawal]/^Cash_dispenser.enough_(Integer)
amount_chosen[ATM.operation_is_Deposit][ATM.operation_is_Transfer]/ATM.set_transfer_end(Boolean)
operation_kind_chosen[ATM.operation_is_Query]
enough_cash[ATM.amount_less_or_equal_to_authorisation_withdrawal_weekly_limit]
continuation
response_to_TO_BE_PROCESSED_ok[ATM.operation_is_Withdrawal]/Transaction_manager.to_be_added(Operation);^Cash_dispenser.to_be_dispensed(Integer)
response_to_TO_BE_PROCESSED_ok[ATM.operation_is_Deposit]/^Deposit_drawer.to_be_deposited;Transaction_manager.to_be_added(Operation)
time_out[ATM.amount_choice_try_not_equal_to_2]
enough_cash[ATM.amount_greater_than_authorisation_withdrawal_weekly_limit]/ATM.display_operation_error(String);ATM.set_amount_choice_try_to(Byte);ATM.set_again_to(Boolean)
not_enough_cash/ATM.display_operation_error(String);ATM.set_amount_choice_try_to(Byte);ATM.set_again_to(Boolean)
response_to_TO_BE_PROCESSED_not_ok/ATM.display_operation_error(String)
response_to_TO_BE_PROCESSED_ok[ATM.operation_is_Query_or_Transfer]/Transaction_manager.to_be_added(Operation);ATM.display_account
withdrawal_done/ATM.display_account
time_out[ATM.amount_choice_try_equal_to_2]
deposit_done/ATM.display_account
deposit_drawer_breakdown/ATM.set_breakdown(Boolean);Consortium.to_be_canceled(String,Object,Object)
time_out/Consortium.end_of(String,Object)
termination/Consortium.end_of(String,Object)
time_out/Consortium.end_of(String,Object);Consortium.to_be_canceled(String,Object,Object)
cash_dispenser_breakdown/ATM.set_breakdown(Boolean);Consortium.to_be_canceled(String,Object,Object)
response_to_START_OF_ok
abort/Consortium.end_of(String,Object)
card_reader_breakdown
receipt_printer_breakdown
card_put_down[ATM.breakdown_equal_to_true]
transaction_empty[ATM.breakdown_equal_to_true]
transaction_not_empty[ATM.breakdown_equal_to_true]/Receipt_printer.to_be_printed(Transaction_manager)
repairing/ATM.set_breakdown(Boolean);Card_reader.repairing;Cash_dispenser.repairing;Deposit_drawer.repairing;Receipt_printer.repairing