REPORT zqc_first_local_class.
CLASS zcl_employee DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ty_create_empl,
id TYPE i,
name TYPE string,
position TYPE string,
further_educated TYPE boolean,
END OF ty_create_empl.
METHODS display_employee.
METHODS set_name IMPORTING im_name TYPE string.
METHODS get_name RETURNING VALUE(re_name) TYPE string.
* METHODS constructor IMPORTING im_empl_id TYPE i
* im_empl_name TYPE string
* im_position TYPE string.
METHODS constructor IMPORTING im_employee TYPE ty_create_empl.
METHODS is_further_educated RETURNING VALUE(re_further_educated) TYPE boolean.
METHODS raise_salary IMPORTING im_percent TYPE i.
CLASS-METHODS get_no_of_employees RETURNING VALUE(re_no_of_employees) TYPE i.
CLASS-METHODS display_no_of_employees.
CLASS-METHODS class_constructor.
PRIVATE SECTION.
DATA: g_empl_id TYPE i,
g_empl_name TYPE string,
g_position TYPE string,
g_salary TYPE p LENGTH 4 DECIMALS 2,
g_is_further_educated TYPE boolean.
CLASS-DATA g_no_of_employees TYPE i.
CLASS-DATA g_max_no_of_empl TYPE i.
CONSTANTS co_start_salary TYPE p LENGTH 4 DECIMALS 2 VALUE '2000.00'.
CLASS-METHODS count_employee.
ENDCLASS.
CLASS zcl_employee IMPLEMENTATION.
METHOD display_employee.
write: / g_empl_id, / g_empl_name, / g_position, / g_salary.
ULINE.
ENDMETHOD.
METHOD class_constructor.
g_max_no_of_empl = 10.
ENDMETHOD.
METHOD constructor.
IF g_no_of_employees < g_max_no_of_empl.
g_empl_id = im_employee-id.
g_empl_name = im_employee-name.
g_position = im_employee-position.
g_is_further_educated = im_employee-further_educated.
g_salary = co_start_salary.
me->count_employee( ).
* g_empl_id = im_empl_id.
* g_empl_name = im_empl_name.
* g_position = im_position.
* g_salary = co_start_salary.
* me->count_employee( ).
ENDIF.
ENDMETHOD.
METHOD set_name.
g_empl_name = im_name.
ENDMETHOD.
METHOD get_name.
re_name = g_empl_name.
ENDMETHOD.
METHOD count_employee.
add 1 to g_no_of_employees.
ENDMETHOD.
METHOD get_no_of_employees.
re_no_of_employees = g_no_of_employees.
ENDMETHOD.
METHOD display_no_of_employees.
WRITE: / 'Number of Employees ', g_no_of_employees.
ENDMETHOD.
METHOD is_further_educated.
re_further_educated = g_is_further_educated.
ENDMETHOD.
METHOD raise_salary.
me->g_salary = g_salary + ( g_salary / 100 * im_percent ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA g_employee1 TYPE REF TO zcl_employee.
DATA g_employee2 TYPE REF TO zcl_employee.
DATA g_empl_data TYPE zcl_employee=>ty_create_empl.
*TRY .
* g_empl_data-id = 1.
* g_empl_data-name = 'John Doe'.
* g_empl_data-position = 'Sales'.
* g_empl_data-further_educated = abap_true.
* CREATE OBJECT g_employee1
* EXPORTING
* im_employee = g_empl_data.
** im_empl_data-id = 1
** im_empl_data-name = 'John Doe'
** im_employee-position = 'Sales'.
*CATCH cx_sy_create_object_error.
*
*ENDTRY.
if g_employee1 IS NOT INITIAL.
IF g_employee1->is_further_educated( ) = abap_true.
g_employee1->raise_salary( 5 ).
ENDIF.
* 2 ways to call component method
call METHOD g_employee1->display_employee( ).
ENDIF.
TRY .
clear g_empl_data.
g_empl_data-id = 2.
g_empl_data-name = 'Quang Cao'.
g_empl_data-position = 'IT'.
g_empl_data-further_educated = abap_false.
CREATE OBJECT g_employee2
EXPORTING
im_employee = g_empl_data.
* im_empl_id = 2
* im_empl_name = 'Quang Cao'
* im_position = 'IT'.
CATCH cx_sy_create_object_error.
ENDTRY.
if g_employee2 IS NOT INITIAL.
IF g_employee2->is_further_educated( ) = abap_true.
g_employee2->raise_salary( 5 ).
ENDIF.
g_employee2->display_employee( ).
ENDIF.
* Class method
zcl_employee=>display_no_of_employees( ).
No comments:
Post a Comment