#include <stdio.h>

#define INIT_WAGES                    600000.0
#define INCREASE_WAGES                50000.0
#define EXTRA_PAY_PER_HOUR            5000.0
#define EXTRA_PAY_RATE_FOR_DANGER_JOB 0.30
#define FAMILY_ALLOWANCE_PER_ONE      50000.0
#define TRAVEL_COST                   100000.0
#define FOOD_EXPENSES                 100000.0

main()
{
        int     normal_condition;      /* 정상 상태 여부 */
        int     flag;

        int     years;                 /* 경력 */
        int     extra_hours;           /* 시간외 근무 시간 */
        int     is_danger_job;         /* 위험 수당 받는 일인지 여부 */
        int     nu_of_family;          /* 가족 수 */
       
        double  main_salary;           /* 본봉 */
        double  extra_pay;             /* 시간외 근무수당 */
        double  extra_pay_for_danger;  /* 위험 수당 */
        double  family_allowance;      /* 가족수당 */
        double  total_salary;          /* 급여총액 */

        /* 프로그램 설명 */

        printf("급여를 계산하는 프로그램입니다.\n");

        /* 경력, 가족수, 시간외 근무시간, 일의 성격 입력 */

        normal_condition = 1;
       
        printf("입사한지 몇년이 경과했습니까?(첫해는 0) : ");
        flag = scanf("%d", &years);

        while ((flag == 1) && (years < 0)) {
               printf("0보다 작은 값은 허용되지 않습니다. 다시 입력 : ");
               flag = scanf("%d", &years);
        }

        if (flag != 1) {
               normal_condition = 0;
        }


        if (normal_condition) {
               printf("시간외 근무한 시간을 입력하세요 : ");
               flag = scanf("%d", &extra_hours);
       
               while ((flag == 1) && (extra_hours < 0)) {
                       printf("0보다 작은 값은 허용되지 않습니다. 다시 입력 : ");
                       flag = scanf("%d", &extra_hours);
               }
              
               if (flag != 1) {
                       normal_condition = 0;
               }
        }


        if (normal_condition) {
               printf("위험 수당을 받지 않는 경우는 0, 받는 경우에는 그외 번호를 입력하세요 : ");
               flag = scanf("%d", &is_danger_job);
              
               if (flag != 1) {
                       normal_condition = 0;
               }
        }

        if (normal_condition) {
               printf("본인을 제외한 부양 가족 수를 입력하세요 : ");
               flag = scanf("%d", &nu_of_family);
               while ((flag == 1) && (nu_of_family < 0)) {
                       printf("0보다 작은 값은 허용되지 않습니다. 다시 입력 : ");
                       flag = scanf("%d", &nu_of_family);
               }

               if (flag != 1) {
                       normal_condition = 0;
               }
        }      

        /* 월급 계산 */

        if (normal_condition) {
               main_salary = INIT_WAGES + years * INCREASE_WAGES;
               extra_pay = extra_hours * EXTRA_PAY_PER_HOUR;

               extra_pay_for_danger = 0;
               if (is_danger_job) {
                       extra_pay_for_danger = (main_salary + extra_pay) * EXTRA_PAY_RATE_FOR_DANGER_JOB;
               }

               family_allowance = nu_of_family * FAMILY_ALLOWANCE_PER_ONE;

               total_salary = main_salary
                              + extra_pay + extra_pay_for_danger + family_allowance
                              + TRAVEL_COST + FOOD_EXPENSES;
        }

        /* 결과 출력 */

        if (normal_condition) {
               printf("%10.0f %10.0f %10.0f %10.0f %10.0f\n",
                              main_salary, extra_pay, extra_pay_for_danger,

                              family_allowance, total_salary);
        }
        else {  /* 오류 상황 */
               printf("Error\n");
        }
}