《敏捷软件开发:原则,模式与实践》学习总结《一》

在读《敏捷软件开发:原则,模式与实践》一书,针对其中的一个案例:雇员工资支付系统,书中是用c++实现的,现在根据自己的技术特点尝试使用java实现部分需求。

  1. 1.需求分析:

  2.    雇员分为:钟点工,销售人员和完全按照月薪结算的雇员。

  3.    钟点工的工资计算为:按照工作小时计算,如果当日工作超过八小时则超过部分按照时薪的1.5倍支付,每周五发放。

  4.   

  5.     销售人员的工资是基本月薪+根据销售单据计算的奖金,工资=奖金+基本工资,每隔一周的周五发放。

  6.    

  7.      完全按月计算工资的雇员:工资完全按月结算,每月最后一天发放。

  8. 2.实现:   

    •  雇员分类:钟点工(HourlyEmployee),销售人员(CommisedEmployee),完全按月发薪水雇员(SalaryEmployee)

    • 提取公共信息,建立雇员基本信息类。

       公共信息:雇员编号,地址,姓名    

      建立雇员基本信息类:

    • public class EmployeeBase {
          
          private Integer empId;
          
          private String empName;
          
          private String empAddress;
      
         //get set method 
          
      }
    • 建立不同雇员对应的类:

    • /**
       * 钟点工个
       * @author
       *
       */
      public class HourlyEmployee extends EmployeeBase{
      
          private Integer workHours;//工作时间
          
          private List<TimeCard> timeCard;//钟点工对应的打卡记录
          
          private Float hourlyRate;//每小时对应的工资
          
      }
    • import java.util.Calendar;
      import java.util.Date;
      public class TimeCard {
      
          private Date startTime;//上班时间
          
          private Date endTime;//下班时间
      
          public Date getStartTime() {
              return startTime;
          }
      
          public void setStartTime(Date startTime) {
              this.startTime = startTime;
          }
      
          public Date getEndTime() {
              return endTime;
          }
      
          public void setEndTime(Date endTime) {
              this.endTime = endTime;
          }
          //计算钟点工的工作时间
          public static float getWorkHourly(Date startTime,Date endTime){
              Calendar c1 = Calendar.getInstance();
              c1.setTime(startTime);
              Calendar c2 = Calendar.getInstance();
              c2.setTime(endTime);
              Long millis = c2.getTimeInMillis() - c1.getTimeInMillis();
              float dayMillis = 1000*60*60;
              float hours = millis/dayMillis;
              DecimalFormat decimalFormat=new DecimalFormat(".0");
              return Float.valueOf(decimalFormat.format(hours));
          }
    • /**
       * 销售人员
       * @author archermind
       *
       */
      public class CommissionedEmployee extends EmployeeBase{
      
          private Float monthlSalary;//基本工资
          
          //销售人员需要根据销售凭条计算奖金,所以还需要建立一个SaleReceipt类计算奖金
          private SaleReceipt saleReceipt;//销售凭条
          
          private Date lastPayday;
          
          
          public Date getLastPayday() {
              return lastPayday;
          }
      
          public void setLastPayday(Date lastPayday) {
              this.lastPayday = lastPayday;
          }
      
          public Float getMonthlSalary() {
              return monthlSalary;
          }
      
          public void setMonthlSalary(Float monthlSalary) {
              this.monthlSalary = monthlSalary;
          }
      
      
          public SaleReceipt getSaleReceipt() {
              return saleReceipt;
          }
      
          public void setSaleReceipt(SaleReceipt saleReceipt) {
              this.saleReceipt = saleReceipt;
          }
    • /**
       * 完全领月薪雇员
       * @author 
       *
       */
      public class SalaryEmployee extends EmployeeBase{
          
          private Float salary;
      
          public Float getSalary() {
              return salary;
          }
      
          public void setSalary(Float salary) {
              this.salary = salary;
          }
          
      }
  1. 3.不同的雇员信息类建立完毕,后面继续实现雇员工资的计算。

   


转载于:https://my.oschina.net/fangfeiAI/blog/337648

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值