Hi all,
I have written the OOP program as below to SET_DEPOSIT, DEPOSIT and WITHDRAW.
There is a exception in the code to RAISE an event when withdrawal is more than the BALANCE.
However I always get a shortdump whenever the amount withdraw is exceeded the balance.
What should I do in the code to avoid shortdump. I know there is something missing in the code.
Please advice. Thanks.
*&---------------------------------------------------------------------*
*& Report Z_OOP_ACCOUNT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_OOP_ACCOUNT.
CLASS lcl_account DEFINITION.
PUBLIC SECTION.
DATA: BALANCE TYPE DMBTR.
METHODS:
SET_DEPOSIT IMPORTING NEW_BALANCE TYPE DMBTR,
DEPOSIT IMPORTING AMOUNT TYPE DMBTR
EXPORTING NEW_BALANCE TYPE DMBTR,
WITHDRAW IMPORTING AMOUNT TYPE DMBTR
EXPORTING NEW_BALANCE TYPE DMBTR
EXCEPTIONS INSUFFICIENT_FUNDS,
DISPLAY EXPORTING NEW_BALANCE TYPE DMBTR.
ENDCLASS.
CLASS lcl_account IMPLEMENTATION.
METHOD SET_DEPOSIT.
BALANCE = NEW_BALANCE.
ENDMETHOD.
METHOD DEPOSIT.
BALANCE = BALANCE + AMOUNT.
NEW_BALANCE = BALANCE.
ENDMETHOD.
METHOD WITHDRAW.
IF AMOUNT < BALANCE.
BALANCE = BALANCE - AMOUNT.
NEW_BALANCE = BALANCE.
ELSE.
RAISE INSUFFICIENT_FUNDS.
ENDIF.
ENDMETHOD.
METHOD DISPLAY.
WRITE: / 'BALANCE =', BALANCE.
ENDMETHOD.
ENDCLASS.
DATA: main_account TYPE REF TO lcl_account.
START-OF-SELECTION.
data: lv_excep TYPE REF TO CX_ROOT,
gv_message type string.
CREATE OBJECT: main_account.
CALL METHOD main_account->set_deposit
EXPORTING
NEW_BALANCE = 100.
CALL METHOD main_account->deposit
EXPORTING
AMOUNT = 100.
TRY.
CALL METHOD main_account->withdraw
EXPORTING
AMOUNT = 5000.
CATCH CX_ROOT INTO lv_excep.
gv_message = lv_excep->get_text( ).
WRITE :/ 'Exception = ', gv_message.
ENDTRY.
CALL METHOD main_account->display.