Skip to Content
0
Former Member
Sep 26, 2008 at 08:28 AM

Shortdump in exceeded BALANCE.

37 Views

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.