Реализация списочной ведомости с помощью Java - PullRequest
1 голос
/ 18 мая 2011

Извините, я просто пытался пройти прошлый экзаменационный вопрос в рамках подготовки к экзамену по Java и надеялся, что кто-нибудь скажет мне, является ли мое решение правильным.Вопрос:

Используя Java перечисления, реализуйте класс для расчета заработной платы.Константы в классе соответствуют обычным дням недели: понедельник, вторник ... пятница, дни выходных: суббота и воскресенье и праздничные дни, которые являются особым праздником недели.

Класс долженукажите метод экземпляра double pay ( double time, double payrate ), который возвращает общую сумму заработной платы работника, работавшего в текущий день.Правила для расчета следующие:

Оплата за данный день, заданная как

base pay = pay rate * hours worked.

Здесь базовая заработная плата определяется как:

base pay = pay rate * hours worked

Сверхурочныеоплата за этот день определяется как

overtime pay = pay rate * overtime hours/2

Сверхурочные часы зависят от типа дня.

Обычный будний день: Для обычного рабочего дня сверхурочные часы - это часы, отработанные в этот деньпревышение 8 часов.

Выходные: в выходные дни сверхурочные часы - это часы, отработанные в этот день.

Выходные дни: в праздничные дни время сверхурочных в 1,5 раза большечасы работали в этот день.

Убедитесь, что ваш класс можно обслуживать.Должна быть возможность добавлять и удалять, не нарушая существующий код.Подсказка: реализуйте свой класс с помощью шаблона enum стратегии.

public class Payroll {
   public enum Day {
      MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY, SUNDAY, BANK HOLIDAY;
   }

   public double pay( double time, double payrate ) {
      if ( day
   }



}

Я не могу понять, куда идти дальше, кто-нибудь сможет мне помочь с этим, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 18 мая 2011

Есть подсказка, запрашивающая шаблон перечисления стратегии .Вот отправная точка:

 public enum Day {
    MONDAY(Type.NORMAL), TUESDAY(Type.NORMAL), WEDNESDAY(Type.NORMAL), 
    THURSDAY(Type.NORMAL), FRIDAY(Type.NORMAL), SATURDAY(Type.WEEKEND),
    SUNDAY(Type.WEEKEND), BANK_HOLIDAY(Type.BANK_HOLIDAY);

    private Type type;                         // <- the strategy
    private Day(Type type) {this.type=type;}

    public double pay(double time, double payRate) {
       // calculate the pay using the strategy: type.overtimePay(hours, payRate)
    }

    private enum Type {
      NORMAL {
         @Override
         double overtimePay(double hours, double payRate) {
            // TODO: implement
         }
      }
      // same for WEEKEND and BANK_HOLIDAY

      abstract double overtimePay(double hours, double payRate);
    }
 }

Итак, теперь, если вы хотите рассчитать оплату, это должно быть возможно с помощью

 double pay = Day.MONDAY.pay(10.5, 16.50);

или с помощью удобного (еще не реализованного метода):

 double pay = getDay(aDate).pay(10.5, 16.50);  // getDay returns a Day enum
2 голосов
/ 18 мая 2011

Как подсказывает Andreas_D , вы должны взглянуть на шаблон enum стратегии ;см., например, эту статью .

Вот какой-то быстро взломанный код:

public enum PayRoll {

    MONDAY {
        public double pay( double time, double payrate ) {
            if (time <= 8)
                return payrate * time;
            else
                return payrate * 8 + payrate * (time - 8) / 2;
        }
    },

    // implement TUESDAY, WEDNESDAY,THURSDAY, FRIDAY

    SATURDAY {
        public double pay( double time, double payrate ) {
            return payrate * time / 2;
        }
    },

    // implement SUNDAY

    BANK_HOLIDAY {
        public double pay( double time, double payrate ) {
            return payrate * 1.5 * time / 2;
        }
    };


    public abstract double pay(double time, double payrate);
}

Имея это, вы можете делать такие вещи, как:

public static void main(String[] args) {
    PayRoll christmasDay = PayRoll.BANK_HOLIDAY;
    System.out.println(christmasDay.pay(5, 3));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...