Skip to content

作業履歴 2017-04-06

概要

2017-04-06の作業内容をまとめています。

コミット: 4066263

メッセージ

タイムカード、売上げレシート、サービス料
・TestAddServiceCharge

変更されたファイル

  • A src/main/java/Affiliation.java
  • M src/main/java/Employee.java
  • M src/main/java/PayrollDatabase.java
  • A src/main/java/ServiceCharge.java
  • A src/main/java/ServiceChargeTransaction.java
  • A src/main/java/UnionAffiliation.java
  • M src/test/java/TestPayroll.java

変更内容

commit 4066263daa60eed3b9703f2a2c3d0f1e25407ca9
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 18:33:34 2017 +0900

    タイムカード、売上げレシート、サービス料

    ・TestAddServiceCharge

diff --git a/src/main/java/Affiliation.java b/src/main/java/Affiliation.java
new file mode 100644
index 0000000..4219855
--- /dev/null
+++ b/src/main/java/Affiliation.java
@@ -0,0 +1,6 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public interface Affiliation {
+    double GetServiceCharge(long date);
+}
diff --git a/src/main/java/Employee.java b/src/main/java/Employee.java
index 22da1f5..9efa332 100644
--- a/src/main/java/Employee.java
+++ b/src/main/java/Employee.java
@@ -8,6 +8,7 @@ class Employee {
     private PaymentClassification itsClassification;
     private PaymentSchedule itsSchedule;
     private PaymentMethod itsPaymentMethod;
+    private Affiliation itsAffiliation;

     public Employee(int empId, String name, String address) {
         itsEmpId = empId;
@@ -58,4 +59,12 @@ class Employee {
     public void SetMethod(PaymentMethod pm) {
         itsPaymentMethod = pm;
     }
+
+    public Affiliation GetAffiliation() {
+        return itsAffiliation;
+    }
+
+    public void SetAffiliation(Affiliation af) {
+        itsAffiliation = af;
+    }
 }
diff --git a/src/main/java/PayrollDatabase.java b/src/main/java/PayrollDatabase.java
index 679a8e6..dab5b04 100644
--- a/src/main/java/PayrollDatabase.java
+++ b/src/main/java/PayrollDatabase.java
@@ -6,6 +6,7 @@ import java.util.Map;
  */
 class PayrollDatabase {
     private static Map<Integer, Employee> itsEmployees = new HashMap<Integer, Employee>();
+    private static Map<Integer, Employee> itsUnionMembers = new HashMap<Integer, Employee>();

     public static void AddEmployee(int empId, Employee e) {
         itsEmployees.put(empId, e);
@@ -18,4 +19,12 @@ class PayrollDatabase {
     public static void DeleteEmployee(int empId) {
         itsEmployees.remove(empId);
     }
+
+    public static void AddUnionMember(int memberId, Employee e) {
+        itsUnionMembers.put(memberId, e);
+    }
+
+    public static Employee GetUnionMbember(int memberId) {
+        return itsUnionMembers.get(memberId);
+    }
 }
diff --git a/src/main/java/ServiceCharge.java b/src/main/java/ServiceCharge.java
new file mode 100644
index 0000000..313a8c1
--- /dev/null
+++ b/src/main/java/ServiceCharge.java
@@ -0,0 +1,20 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class ServiceCharge {
+    private long itsDate;
+    private double itsAmount;
+
+    public ServiceCharge(long date, double amount) {
+        itsDate = date;
+        itsAmount = amount;
+    }
+
+    public long GetDate() {
+        return itsDate;
+    }
+
+    public double GetAmount() {
+        return itsAmount;
+    }
+}
diff --git a/src/main/java/ServiceChargeTransaction.java b/src/main/java/ServiceChargeTransaction.java
new file mode 100644
index 0000000..058d09d
--- /dev/null
+++ b/src/main/java/ServiceChargeTransaction.java
@@ -0,0 +1,23 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class ServiceChargeTransaction implements Transaction {
+    private int itsMemberId;
+    private long itsDate;
+    private double itsAmount;
+
+    public ServiceChargeTransaction(int memberId, long date, double amount) {
+        itsMemberId = memberId;
+        itsDate = date;
+        itsAmount = amount;
+    }
+
+    public void Execute() {
+        Employee e = PayrollDatabase.GetUnionMbember(itsMemberId);
+        Affiliation af = e.GetAffiliation();
+        if (af instanceof UnionAffiliation) {
+            UnionAffiliation uaf = (UnionAffiliation) af;
+            uaf.AddServiceCharge(itsDate, itsAmount);
+        }
+    }
+}
diff --git a/src/main/java/UnionAffiliation.java b/src/main/java/UnionAffiliation.java
new file mode 100644
index 0000000..2d93912
--- /dev/null
+++ b/src/main/java/UnionAffiliation.java
@@ -0,0 +1,23 @@
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class UnionAffiliation implements Affiliation {
+    private Map<Long, ServiceCharge> itsServiceCharges = new HashMap<Long, ServiceCharge>();
+
+    public UnionAffiliation(double d) {
+    }
+
+    public double GetServiceCharge(long date) {
+        if (itsServiceCharges.get(date) == null) {
+            return 0;
+        }
+        return itsServiceCharges.get(date).GetAmount();
+    }
+
+    public void AddServiceCharge(long date, double amount) {
+        itsServiceCharges.put(date, new ServiceCharge(date, amount));
+    }
+}
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index 352a781..b71c30b 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -111,4 +111,23 @@ public class TestPayroll extends TestCase{
         assertNotNull(receipt);
         assertEquals(25000.0, receipt.GetAmount());
     }
+
+    public void testAddServiceCharge() {
+        System.err.println("TestAddServiceCharge");
+        int empId = 2;
+        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill","Home",15.25);
+        t.Execute();
+        TimeCardTransaction tct = new TimeCardTransaction(20011031,8.0, empId);
+        tct.Execute();
+        Employee e = PayrollDatabase.GetEmployee(empId);
+        assertNotNull(e);
+        Affiliation af = new UnionAffiliation(12.5);
+        e.SetAffiliation(af);
+        int memberId = 86;
+        PayrollDatabase.AddUnionMember(memberId,e);
+        ServiceChargeTransaction sct = new ServiceChargeTransaction(memberId, 20011031, 12.95);
+        sct.Execute();
+        double sc = af.GetServiceCharge(20011031);
+        assertEquals(12.95, sc, .001);
+    }
 }
\ No newline at end of file

コミット: 06df367

メッセージ

タイムカード、売上げレシート、サービス料
・TestSalesReceiptTransaction

変更されたファイル

  • M src/main/java/CommissionedClassification.java
  • A src/main/java/SalesReceipt.java
  • A src/main/java/SalesReceiptTransaction.java
  • M src/test/java/TestPayroll.java

変更内容

commit 06df367ec40926d5becaa3cd04a16bfc9e59b4dd
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 18:03:08 2017 +0900

    タイムカード、売上げレシート、サービス料

    ・TestSalesReceiptTransaction

diff --git a/src/main/java/CommissionedClassification.java b/src/main/java/CommissionedClassification.java
index f05b23b..49cc301 100644
--- a/src/main/java/CommissionedClassification.java
+++ b/src/main/java/CommissionedClassification.java
@@ -1,13 +1,18 @@
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by k2works on 2017/04/06.
  */
 public class CommissionedClassification implements PaymentClassification {
     private double itsSalary;
     private double itsCommissionRate;
+    private Map<Long, SalesReceipt> itsReceipts;

     public CommissionedClassification(double salary, double commissionRate) {
         itsSalary = salary;
         itsCommissionRate = commissionRate;
+        itsReceipts = new HashMap<Long, SalesReceipt>();
     }

     public double GetSalary() {
@@ -17,4 +22,12 @@ public class CommissionedClassification implements PaymentClassification {
     public double GetRate() {
         return itsCommissionRate;
     }
+
+    public void AddReceipt(SalesReceipt sr) {
+        itsReceipts.put(sr.GetSaleDate(),sr);
+    }
+
+    public SalesReceipt GetReceipt(long date) {
+        return itsReceipts.get(date);
+    }
 }
diff --git a/src/main/java/SalesReceipt.java b/src/main/java/SalesReceipt.java
new file mode 100644
index 0000000..84bb661
--- /dev/null
+++ b/src/main/java/SalesReceipt.java
@@ -0,0 +1,20 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class SalesReceipt {
+    private long itsSaleDate;
+    private double itsAmount;
+
+    public SalesReceipt(long saleDate, double amount) {
+        itsSaleDate = saleDate;
+        itsAmount = amount;
+    }
+
+    public long GetSaleDate() {
+        return itsSaleDate;
+    }
+
+    public double GetAmount() {
+        return itsAmount;
+    }
+}
diff --git a/src/main/java/SalesReceiptTransaction.java b/src/main/java/SalesReceiptTransaction.java
new file mode 100644
index 0000000..f69596f
--- /dev/null
+++ b/src/main/java/SalesReceiptTransaction.java
@@ -0,0 +1,29 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class SalesReceiptTransaction implements Transaction {
+    private long itsSaleDate;
+    private double itsAmount;
+    private int itsEmpId;
+
+    public SalesReceiptTransaction(long saleDate, double amount, int empId) {
+        itsSaleDate = saleDate;
+        itsAmount = amount;
+        itsEmpId = empId;
+    }
+
+    public void Execute() {
+        Employee e = PayrollDatabase.GetEmployee(itsEmpId);
+        if (e != null) {
+            PaymentClassification pc = e.GetClassification();
+            if (pc instanceof CommissionedClassification) {
+                CommissionedClassification cc = (CommissionedClassification) pc;
+                cc.AddReceipt(new SalesReceipt(itsSaleDate, itsAmount));
+            } else {
+                System.err.println("Tried to add sales receipt to non-commissioned employee");
+            }
+        } else {
+            System.err.println("No such employee.");
+        }
+    }
+}
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index 1e1b2e5..352a781 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -94,4 +94,21 @@ public class TestPayroll extends TestCase{
         assertNotNull(tc);
         assertEquals(8.0, tc.GetHours());
     }
+
+    public void testSalesReceiptTransaction() {
+        System.err.println("TestSalesReceiptTransaction");
+        int empId = 3;
+        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500, 3.2);
+        t.Execute();
+        SalesReceiptTransaction srt = new SalesReceiptTransaction(20011112, 25000, empId);
+        srt.Execute();
+        Employee e = PayrollDatabase.GetEmployee(empId);
+        assertNotNull(e);
+        PaymentClassification pc = e.GetClassification();
+        CommissionedClassification cc = (CommissionedClassification) pc;
+        assertNotNull(cc);
+        SalesReceipt receipt = cc.GetReceipt(20011112);
+        assertNotNull(receipt);
+        assertEquals(25000.0, receipt.GetAmount());
+    }
 }
\ No newline at end of file

コミット: 2c85363

メッセージ

タイムカード、売上げレシート、サービス料
・TestTimeCardTransaction

変更されたファイル

  • M src/main/java/HourlyClassification.java
  • A src/main/java/TimeCard.java
  • A src/main/java/TimeCardTransaction.java
  • M src/test/java/TestPayroll.java

変更内容

commit 2c85363027e4cb1c1fb9a947e5a6cbf393c99a4a
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 17:49:47 2017 +0900

    タイムカード、売上げレシート、サービス料

    ・TestTimeCardTransaction

diff --git a/src/main/java/HourlyClassification.java b/src/main/java/HourlyClassification.java
index 012a2e7..383c4a5 100644
--- a/src/main/java/HourlyClassification.java
+++ b/src/main/java/HourlyClassification.java
@@ -1,14 +1,27 @@
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by k2works on 2017/04/06.
  */
 public class HourlyClassification implements  PaymentClassification {
+    private Map<Long, TimeCard> itsTimeCards;
     private double itsHourlyRate;

     public HourlyClassification(double hourlyRate) {
+        itsTimeCards = new HashMap<Long, TimeCard>();
         itsHourlyRate = hourlyRate;
     }

     public double GetRate() {
         return itsHourlyRate;
     }
+
+    public TimeCard GetTimeCard(long date) {
+        return itsTimeCards.get(date);
+    }
+
+    public void AddTimeCard(TimeCard tc) {
+        itsTimeCards.put(tc.GetDate(), tc);
+    }
 }
diff --git a/src/main/java/TimeCard.java b/src/main/java/TimeCard.java
new file mode 100644
index 0000000..b95b0ed
--- /dev/null
+++ b/src/main/java/TimeCard.java
@@ -0,0 +1,20 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class TimeCard {
+    private long itsDate;
+    private double itsHours;
+
+    public TimeCard(long date, double hours) {
+        itsDate = date;
+        itsHours = hours;
+    }
+
+    public long GetDate() {
+        return itsDate;
+    }
+
+    public double GetHours() {
+        return itsHours;
+    }
+}
diff --git a/src/main/java/TimeCardTransaction.java b/src/main/java/TimeCardTransaction.java
new file mode 100644
index 0000000..268d20d
--- /dev/null
+++ b/src/main/java/TimeCardTransaction.java
@@ -0,0 +1,29 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class TimeCardTransaction implements Transaction {
+    private long itsDate;
+    private double itsHours;
+    private int itsEmpId;
+
+    public TimeCardTransaction(long date, double hours, int empId) {
+        itsDate = date;
+        itsHours = hours;
+        itsEmpId = empId;
+    }
+
+    public void Execute() {
+        Employee e = PayrollDatabase.GetEmployee(itsEmpId);
+        if (e != null) {
+            PaymentClassification pc = e.GetClassification();
+            if (pc instanceof HourlyClassification) {
+                HourlyClassification hc = (HourlyClassification) pc;
+                hc.AddTimeCard(new TimeCard(itsDate, itsHours));
+            } else {
+                throw new RuntimeException("Tried to add timecard to non-hourly employee.");
+            }
+        } else {
+            throw new RuntimeException("No such employee.");
+        }
+    }
+}
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index 147fabb..1e1b2e5 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -77,4 +77,21 @@ public class TestPayroll extends TestCase{
         e = PayrollDatabase.GetEmployee(empId);
         assertNull(e);
     }
+
+    public void testTimeCardTransaction() {
+        System.err.println("TestTimeCardTransaction");
+        int empId = 2;
+        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        t.Execute();
+        TimeCardTransaction tct = new TimeCardTransaction(20011031,8.0,empId);
+        tct.Execute();
+        Employee e = PayrollDatabase.GetEmployee(empId);
+        assertNotNull(e);
+        PaymentClassification pc = e.GetClassification();
+        HourlyClassification hc = (HourlyClassification) pc;
+        assertNotNull(hc);
+        TimeCard tc = hc.GetTimeCard(20011031);
+        assertNotNull(tc);
+        assertEquals(8.0, tc.GetHours());
+    }
 }
\ No newline at end of file

コミット: fa400dd

メッセージ

従業員を削除するトランザクション
・TestDeleteEmployee

変更されたファイル

  • A src/main/java/DeleteEmployeeTransaction.java
  • M src/main/java/PayrollDatabase.java
  • M src/test/java/TestPayroll.java

変更内容

commit fa400dd8c8f1a1de935a4419f6ccc40fd8478dc4
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 16:49:54 2017 +0900

    従業員を削除するトランザクション

    ・TestDeleteEmployee

diff --git a/src/main/java/DeleteEmployeeTransaction.java b/src/main/java/DeleteEmployeeTransaction.java
new file mode 100644
index 0000000..da66810
--- /dev/null
+++ b/src/main/java/DeleteEmployeeTransaction.java
@@ -0,0 +1,13 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class DeleteEmployeeTransaction implements Transaction {
+    private int itsEmpId;
+    public DeleteEmployeeTransaction(int empId) {
+        itsEmpId = empId;
+    }
+
+    public void Execute() {
+        PayrollDatabase.DeleteEmployee(itsEmpId);
+    }
+}
diff --git a/src/main/java/PayrollDatabase.java b/src/main/java/PayrollDatabase.java
index 8d07b44..679a8e6 100644
--- a/src/main/java/PayrollDatabase.java
+++ b/src/main/java/PayrollDatabase.java
@@ -4,7 +4,7 @@ import java.util.Map;
 /**
  * Created by k2works on 2017/04/06.
  */
-public class PayrollDatabase {
+class PayrollDatabase {
     private static Map<Integer, Employee> itsEmployees = new HashMap<Integer, Employee>();

     public static void AddEmployee(int empId, Employee e) {
@@ -15,7 +15,7 @@ public class PayrollDatabase {
         return itsEmployees.get(empId);
     }

-    public static void Clear(){
-        itsEmployees.clear();
+    public static void DeleteEmployee(int empId) {
+        itsEmployees.remove(empId);
     }
 }
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index fd335f9..147fabb 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -64,4 +64,17 @@ public class TestPayroll extends TestCase{
         assertNotNull(hm);

     }
+
+    public void testDeleteEmployee() {
+        System.err.println("TestDeleteEmployee");
+        int empId = 3;
+        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance","Home",2500,3.2);
+        t.Execute();
+        Employee e = PayrollDatabase.GetEmployee(empId);
+        assertNotNull(e);
+        DeleteEmployeeTransaction dt = new DeleteEmployeeTransaction(empId);
+        dt.Execute();
+        e = PayrollDatabase.GetEmployee(empId);
+        assertNull(e);
+    }
 }
\ No newline at end of file

コミット: 25c8808

メッセージ

従業員を追加するトランザクション
・TestAddCommissionedEmployee

変更されたファイル

  • A src/main/java/AddCommissionedEmployee.java
  • A src/main/java/BiweeklySchedule.java
  • A src/main/java/CommissionedClassification.java
  • M src/test/java/TestPayroll.java

変更内容

commit 25c88084f20dd4830c6e7c621bc2c882861dcbd6
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 16:33:52 2017 +0900

    従業員を追加するトランザクション

    ・TestAddCommissionedEmployee

diff --git a/src/main/java/AddCommissionedEmployee.java b/src/main/java/AddCommissionedEmployee.java
new file mode 100644
index 0000000..3f1a790
--- /dev/null
+++ b/src/main/java/AddCommissionedEmployee.java
@@ -0,0 +1,21 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class AddCommissionedEmployee extends AddEmployeeTransaction {
+    private double itsSalary;
+    private double itsCommissionRate;
+
+    public AddCommissionedEmployee(int empId, String name, String address, double salary, double commissionRate) {
+        super(empId, name, address);
+        itsSalary = salary;
+        itsCommissionRate = commissionRate;
+    }
+
+    PaymentClassification GetClassification() {
+        return new CommissionedClassification(itsSalary, itsCommissionRate);
+    }
+
+    PaymentSchedule GetSchedule() {
+        return new BiweeklySchedule();
+    }
+}
diff --git a/src/main/java/BiweeklySchedule.java b/src/main/java/BiweeklySchedule.java
new file mode 100644
index 0000000..9ee711d
--- /dev/null
+++ b/src/main/java/BiweeklySchedule.java
@@ -0,0 +1,5 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class BiweeklySchedule implements PaymentSchedule {
+}
diff --git a/src/main/java/CommissionedClassification.java b/src/main/java/CommissionedClassification.java
new file mode 100644
index 0000000..f05b23b
--- /dev/null
+++ b/src/main/java/CommissionedClassification.java
@@ -0,0 +1,20 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class CommissionedClassification implements PaymentClassification {
+    private double itsSalary;
+    private double itsCommissionRate;
+
+    public CommissionedClassification(double salary, double commissionRate) {
+        itsSalary = salary;
+        itsCommissionRate = commissionRate;
+    }
+
+    public double GetSalary() {
+        return itsSalary;
+    }
+
+    public double GetRate() {
+        return itsCommissionRate;
+    }
+}
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index 5bf487b..fd335f9 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -43,4 +43,25 @@ public class TestPayroll extends TestCase{
         HoldMethod hm = (HoldMethod) pm;
         assertNotNull(hm);
     }
+
+    public void testAddCommissionedEmployee() {
+        System.err.println("TestAddCommissionedEmployee");
+        int empId = 1;
+        AddCommissionedEmployee t = new AddCommissionedEmployee(empId, "Lance", "Home", 2500.0, 3.2);
+        t.Execute();
+        Employee e = PayrollDatabase.GetEmployee(empId);
+        assertNotNull(e);
+        assertEquals("Lance", e.GetName());
+        PaymentClassification pc = e.GetClassification();
+        CommissionedClassification cc = (CommissionedClassification) pc;
+        assertNotNull(cc);
+        assertEquals(2500.0, cc.GetSalary());
+        PaymentSchedule ps = e.GetSchedule();
+        BiweeklySchedule bs = (BiweeklySchedule) ps;
+        assertNotNull(bs);
+        PaymentMethod pm = e.GetMethod();
+        HoldMethod hm = (HoldMethod) pm;
+        assertNotNull(hm);
+
+    }
 }
\ No newline at end of file

コミット: 34d36a6

メッセージ

従業員を追加するトランザクション
・TestAddHourlyEmployee

変更されたファイル

  • A src/main/java/AddHourlyEmployee.java
  • A src/main/java/HourlyClassification.java
  • M src/main/java/PaymentClassification.java
  • M src/main/java/SalariedClassification.java
  • A src/main/java/WeeklySchedule.java
  • M src/test/java/TestPayroll.java

変更内容

commit 34d36a6463c46554ee5e07ca6adf59a3b6efa8e8
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 15:45:56 2017 +0900

    従業員を追加するトランザクション

    ・TestAddHourlyEmployee

diff --git a/src/main/java/AddHourlyEmployee.java b/src/main/java/AddHourlyEmployee.java
new file mode 100644
index 0000000..b5bdb47
--- /dev/null
+++ b/src/main/java/AddHourlyEmployee.java
@@ -0,0 +1,19 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class AddHourlyEmployee extends AddEmployeeTransaction {
+    private double itsHourlyRate;
+
+    public AddHourlyEmployee(int empId, String name, String address, double hourlyRate) {
+        super(empId, name, address);
+        itsHourlyRate = hourlyRate;
+    }
+
+    PaymentClassification GetClassification() {
+        return new HourlyClassification(itsHourlyRate);
+    }
+
+    PaymentSchedule GetSchedule() {
+        return new WeeklySchedule();
+    }
+}
diff --git a/src/main/java/HourlyClassification.java b/src/main/java/HourlyClassification.java
new file mode 100644
index 0000000..012a2e7
--- /dev/null
+++ b/src/main/java/HourlyClassification.java
@@ -0,0 +1,14 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class HourlyClassification implements  PaymentClassification {
+    private double itsHourlyRate;
+
+    public HourlyClassification(double hourlyRate) {
+        itsHourlyRate = hourlyRate;
+    }
+
+    public double GetRate() {
+        return itsHourlyRate;
+    }
+}
diff --git a/src/main/java/PaymentClassification.java b/src/main/java/PaymentClassification.java
index 057d2af..4250029 100644
--- a/src/main/java/PaymentClassification.java
+++ b/src/main/java/PaymentClassification.java
@@ -1,5 +1,5 @@
 /**
  * Created by k2works on 2017/04/06.
  */
-public class PaymentClassification {
+public interface PaymentClassification {
 }
diff --git a/src/main/java/SalariedClassification.java b/src/main/java/SalariedClassification.java
index 6a55fb9..38fd158 100644
--- a/src/main/java/SalariedClassification.java
+++ b/src/main/java/SalariedClassification.java
@@ -1,7 +1,7 @@
 /**
  * Created by k2works on 2017/04/06.
  */
-public class SalariedClassification extends PaymentClassification {
+public class SalariedClassification implements PaymentClassification {
     private double itsSalary;

     public SalariedClassification(double salary) {
diff --git a/src/main/java/WeeklySchedule.java b/src/main/java/WeeklySchedule.java
new file mode 100644
index 0000000..a03549a
--- /dev/null
+++ b/src/main/java/WeeklySchedule.java
@@ -0,0 +1,5 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class WeeklySchedule implements PaymentSchedule {
+}
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
index ba68ec8..5bf487b 100644
--- a/src/test/java/TestPayroll.java
+++ b/src/test/java/TestPayroll.java
@@ -23,4 +23,24 @@ public class TestPayroll extends TestCase{
         HoldMethod hm = (HoldMethod) pm;
         assertNotNull(hm);
     }
+
+    public void testAddHourlyEmployee() {
+        System.err.println("TestAddHourlyEmployee");
+        int empId = 2;
+        AddHourlyEmployee t = new AddHourlyEmployee(empId, "Bill", "Home", 15.25);
+        t.Execute();
+        Employee e = PayrollDatabase.GetEmployee(empId);
+        assertNotNull(e);
+        assertEquals("Bill", e.GetName());
+        PaymentClassification pc = e.GetClassification();
+        HourlyClassification hc = (HourlyClassification) pc;
+        assertNotNull(hc);
+        assertEquals(15.25, hc.GetRate());
+        PaymentSchedule ps = e.GetSchedule();
+        WeeklySchedule ws = (WeeklySchedule) ps;
+        assertNotNull(ws);
+        PaymentMethod pm = e.GetMethod();
+        HoldMethod hm = (HoldMethod) pm;
+        assertNotNull(hm);
+    }
 }
\ No newline at end of file

コミット: 8797b0e

メッセージ

従業員を追加するトランザクション

変更されたファイル

  • A .idea/kotlinc.xml
  • A src/main/java/AddEmployeeTransaction.java
  • A src/main/java/AddSalariedEmployee.java
  • A src/main/java/Employee.java
  • A src/main/java/HoldMethod.java
  • A src/main/java/MonthlySchedule.java
  • A src/main/java/PaymentClassification.java
  • A src/main/java/PaymentMethod.java
  • A src/main/java/PaymentSchedule.java
  • A src/main/java/PayrollDatabase.java
  • A src/main/java/SalariedClassification.java
  • A src/main/java/Transaction.java
  • A src/test/java/TestPayroll.java

変更内容

commit 8797b0ecb582a160806da12cbff24dd9a33ea741
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 14:37:43 2017 +0900

    従業員を追加するトランザクション

diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 0000000..1c24f9a
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="KotlinCommonCompilerArguments">
+    <option name="languageVersion" value="1.1" />
+    <option name="apiVersion" value="1.1" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/src/main/java/AddEmployeeTransaction.java b/src/main/java/AddEmployeeTransaction.java
new file mode 100644
index 0000000..33b5ecf
--- /dev/null
+++ b/src/main/java/AddEmployeeTransaction.java
@@ -0,0 +1,29 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public abstract class AddEmployeeTransaction implements Transaction {
+    private int itsEmpId;
+    private String itsName;
+    private String itsAddress;
+
+    public AddEmployeeTransaction(int empId, String name, String address) {
+        itsEmpId = empId;
+        itsName = name;
+        itsAddress = address;
+    }
+
+    public void Execute() {
+        PaymentClassification pc = GetClassification();
+        PaymentSchedule ps = GetSchedule();
+        PaymentMethod pm = new HoldMethod();
+        Employee e = new Employee(itsEmpId, itsName, itsAddress);
+        e.SetClassification(pc);
+        e.SetSchedule(ps);
+        e.SetMethod(pm);
+        PayrollDatabase.AddEmployee(itsEmpId, e);
+    }
+
+    abstract PaymentSchedule GetSchedule();
+
+    abstract PaymentClassification GetClassification();
+}
diff --git a/src/main/java/AddSalariedEmployee.java b/src/main/java/AddSalariedEmployee.java
new file mode 100644
index 0000000..f09e9e8
--- /dev/null
+++ b/src/main/java/AddSalariedEmployee.java
@@ -0,0 +1,19 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+class AddSalariedEmployee extends AddEmployeeTransaction {
+    private double itsSalary;
+
+    public AddSalariedEmployee(int empId, String name, String address, double salary) {
+        super(empId, name, address);
+        itsSalary = salary;
+    }
+
+    public PaymentClassification GetClassification() {
+        return new SalariedClassification(itsSalary);
+    }
+
+    public PaymentSchedule GetSchedule() {
+        return new MonthlySchedule();
+    }
+}
diff --git a/src/main/java/Employee.java b/src/main/java/Employee.java
new file mode 100644
index 0000000..22da1f5
--- /dev/null
+++ b/src/main/java/Employee.java
@@ -0,0 +1,61 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+class Employee {
+    private int itsEmpId;
+    private String itsName;
+    private String itsAddress;
+    private PaymentClassification itsClassification;
+    private PaymentSchedule itsSchedule;
+    private PaymentMethod itsPaymentMethod;
+
+    public Employee(int empId, String name, String address) {
+        itsEmpId = empId;
+        itsName = name;
+        itsAddress = address;
+    }
+
+    public int GetEmpId() {
+        return itsEmpId;
+    }
+
+    public String GetName() {
+        return itsName;
+    }
+
+    public void SetName(String name) {
+        itsName = name;
+    }
+
+    public String GetAddress() {
+        return itsAddress;
+    }
+
+    public void SetAddress(String address) {
+        itsAddress = address;
+    }
+
+    public PaymentClassification GetClassification() {
+        return itsClassification;
+    }
+
+    public void SetClassification(PaymentClassification pc) {
+        itsClassification = pc;
+    }
+
+    public PaymentSchedule GetSchedule() {
+        return itsSchedule;
+    }
+
+    public void SetSchedule(PaymentSchedule ps) {
+        itsSchedule = ps;
+    }
+
+    public PaymentMethod GetMethod() {
+        return itsPaymentMethod;
+    }
+
+    public void SetMethod(PaymentMethod pm) {
+        itsPaymentMethod = pm;
+    }
+}
diff --git a/src/main/java/HoldMethod.java b/src/main/java/HoldMethod.java
new file mode 100644
index 0000000..4d5b09a
--- /dev/null
+++ b/src/main/java/HoldMethod.java
@@ -0,0 +1,5 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class HoldMethod extends PaymentMethod {
+}
diff --git a/src/main/java/MonthlySchedule.java b/src/main/java/MonthlySchedule.java
new file mode 100644
index 0000000..a07f3c8
--- /dev/null
+++ b/src/main/java/MonthlySchedule.java
@@ -0,0 +1,5 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class MonthlySchedule implements PaymentSchedule {
+}
diff --git a/src/main/java/PaymentClassification.java b/src/main/java/PaymentClassification.java
new file mode 100644
index 0000000..057d2af
--- /dev/null
+++ b/src/main/java/PaymentClassification.java
@@ -0,0 +1,5 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class PaymentClassification {
+}
diff --git a/src/main/java/PaymentMethod.java b/src/main/java/PaymentMethod.java
new file mode 100644
index 0000000..2517559
--- /dev/null
+++ b/src/main/java/PaymentMethod.java
@@ -0,0 +1,5 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class PaymentMethod {
+}
diff --git a/src/main/java/PaymentSchedule.java b/src/main/java/PaymentSchedule.java
new file mode 100644
index 0000000..a6c2174
--- /dev/null
+++ b/src/main/java/PaymentSchedule.java
@@ -0,0 +1,5 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public interface PaymentSchedule {
+}
diff --git a/src/main/java/PayrollDatabase.java b/src/main/java/PayrollDatabase.java
new file mode 100644
index 0000000..8d07b44
--- /dev/null
+++ b/src/main/java/PayrollDatabase.java
@@ -0,0 +1,21 @@
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class PayrollDatabase {
+    private static Map<Integer, Employee> itsEmployees = new HashMap<Integer, Employee>();
+
+    public static void AddEmployee(int empId, Employee e) {
+        itsEmployees.put(empId, e);
+    }
+
+    public static Employee GetEmployee(int empId) {
+        return itsEmployees.get(empId);
+    }
+
+    public static void Clear(){
+        itsEmployees.clear();
+    }
+}
diff --git a/src/main/java/SalariedClassification.java b/src/main/java/SalariedClassification.java
new file mode 100644
index 0000000..6a55fb9
--- /dev/null
+++ b/src/main/java/SalariedClassification.java
@@ -0,0 +1,15 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class SalariedClassification extends PaymentClassification {
+    private double itsSalary;
+
+    public SalariedClassification(double salary) {
+        itsSalary = salary;
+    }
+
+    public double GetSalary() {
+        return itsSalary;
+    }
+
+}
diff --git a/src/main/java/Transaction.java b/src/main/java/Transaction.java
new file mode 100644
index 0000000..c8b1c7c
--- /dev/null
+++ b/src/main/java/Transaction.java
@@ -0,0 +1,6 @@
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public interface Transaction {
+    void Execute();
+}
diff --git a/src/test/java/TestPayroll.java b/src/test/java/TestPayroll.java
new file mode 100644
index 0000000..ba68ec8
--- /dev/null
+++ b/src/test/java/TestPayroll.java
@@ -0,0 +1,26 @@
+import junit.framework.TestCase;
+
+/**
+ * Created by k2works on 2017/04/06.
+ */
+public class TestPayroll extends TestCase{
+    public void testAddSalariedEmployee() {
+        System.err.println("TestAddSalariedEmployee");
+        int empId = 1;
+        AddSalariedEmployee t = new AddSalariedEmployee(empId, "Bob", "Home", 1000.00);
+        t.Execute();
+        Employee e = PayrollDatabase.GetEmployee(empId);
+        assertNotNull(e);
+        assertEquals("Bob", e.GetName());
+        PaymentClassification pc = e.GetClassification();
+        SalariedClassification sc = (SalariedClassification) pc;
+        assertNotNull(sc);
+        assertEquals(1000.00, sc.GetSalary());
+        PaymentSchedule ps = e.GetSchedule();
+        MonthlySchedule ms = (MonthlySchedule) ps;
+        assertNotNull(ms);
+        PaymentMethod pm = e.GetMethod();
+        HoldMethod hm = (HoldMethod) pm;
+        assertNotNull(hm);
+    }
+}
\ No newline at end of file

コミット: 1623147

メッセージ

Create specification

変更されたファイル

  • A docs/images/core_model.png
  • A docs/images/use_case.png
  • A docs/images/use_case_01.png
  • A docs/images/use_case_03.png
  • A docs/images/use_case_04.png
  • A docs/images/use_case_05.png
  • A docs/images/use_case_07_1.png
  • A docs/images/use_case_07_2.png
  • A docs/images/use_case_07_3.png
  • A docs/specification.md
  • A docs/uml/core_model.puml
  • A docs/uml/use_case.puml
  • A docs/uml/use_case_01.puml
  • A docs/uml/use_case_03.puml
  • A docs/uml/use_case_04.puml
  • A docs/uml/use_case_05.puml
  • A docs/uml/use_case_07_1.puml
  • A docs/uml/use_case_07_2.puml
  • A docs/uml/use_case_07_3.puml

変更内容

commit 1623147899fb0ed8deb9c18e50e78b69a76de559
Author: k2works <kakimomokuri@gmail.com>
Date:   Thu Apr 6 13:58:42 2017 +0900

    Create specification

diff --git a/docs/images/core_model.png b/docs/images/core_model.png
new file mode 100644
index 0000000..a077d2b
Binary files /dev/null and b/docs/images/core_model.png differ
diff --git a/docs/images/use_case.png b/docs/images/use_case.png
new file mode 100644
index 0000000..1e87c09
Binary files /dev/null and b/docs/images/use_case.png differ
diff --git a/docs/images/use_case_01.png b/docs/images/use_case_01.png
new file mode 100644
index 0000000..a452b44
Binary files /dev/null and b/docs/images/use_case_01.png differ
diff --git a/docs/images/use_case_03.png b/docs/images/use_case_03.png
new file mode 100644
index 0000000..41a4466
Binary files /dev/null and b/docs/images/use_case_03.png differ
diff --git a/docs/images/use_case_04.png b/docs/images/use_case_04.png
new file mode 100644
index 0000000..48fdafd
Binary files /dev/null and b/docs/images/use_case_04.png differ
diff --git a/docs/images/use_case_05.png b/docs/images/use_case_05.png
new file mode 100644
index 0000000..b8f9b12
Binary files /dev/null and b/docs/images/use_case_05.png differ
diff --git a/docs/images/use_case_07_1.png b/docs/images/use_case_07_1.png
new file mode 100644
index 0000000..0c4fd69
Binary files /dev/null and b/docs/images/use_case_07_1.png differ
diff --git a/docs/images/use_case_07_2.png b/docs/images/use_case_07_2.png
new file mode 100644
index 0000000..b20868d
Binary files /dev/null and b/docs/images/use_case_07_2.png differ
diff --git a/docs/images/use_case_07_3.png b/docs/images/use_case_07_3.png
new file mode 100644
index 0000000..17d6473
Binary files /dev/null and b/docs/images/use_case_07_3.png differ
diff --git a/docs/specification.md b/docs/specification.md
new file mode 100644
index 0000000..95bfe60
--- /dev/null
+++ b/docs/specification.md
@@ -0,0 +1,138 @@
+# 給与システムの基本仕様
+
++ 従業員の一部は時給である。彼らの給与は、従業員レコードが持つフィールド項目のひとつに登録されている時給をベースに支払われる。ただし、8時間以上働いた場合、時間外労働として通常の時給の1.5倍が支払われる。給与は毎週金曜日に支払われる。
++ 従業員の一部は固定給である。彼らの給与は月末に支払われる。給与の額は、従業員レコードのフィールド項目のひとつである。
++ 固定給の従業員の一部は、営業成績に応じて成功報酬を受ける。彼らは、売上日と売上金額を記録したレシートを提出しなければならない。成功報酬額は、彼らの従業員レコードのフィールドの項目の1つに記録されている。彼らの給与は隔週金曜日に支払われる。
++ 従業員は給与の受け取り方法を選択できる。給与小切手を指定の住所に郵送してもらうか、給与担当者が給与小切手を届けてくれるまで待つか、指定した銀行口座に直接入金してもらうか、いずれかを選択できる。
++ 従業員の一部は組合に入っている。彼らの従業員レコードには毎週支払わなければならない組合費の額がフィールド項目のひとつとして登録されている。組合費は必ず給与から天引きされる。また、組合はときおり各個人からサービス料を徴収する。これらのサービス料は組合から週単位で請求され、次回支払われる給与から天引きされる。
++ 給与アプリケーションは毎営業日に1回だけ実行され、その日が給与日である従業員に給与を支払う。システムは各従業員の給与日の通達を受け、給与が最後に支払われた日から指定された日までのレコード(記録)を元に給与を支払う。
+
+# ユースケース
+
+![](./images/use_case.png)
+
+## ユースケース1:従業員を追加する
+
+AddEmpトランザクションは新しい従業員を追加する。このトランザクションには必ず従業員(Employee)の「登録ID(EmpID)」、「名前(name)」、「住所(address)」が含まれる。このトランザクションには下記に示す3つの形式がある:
+```text
+AddEmp <EmpID> "<name>" "<address>" H <hourly-rate>
+
+AddEmp <EmpID> "<name>" "<address>" S <monthly-salary>
+
+AddEmp <EmpID> "<name>" "<address>" C <monthly-salary> <commission-rate>
+```
+  
+従業員レコードは、必要なフィールド項目とともに作成される。
+  
+別記1:トランザクションが正しい形式で記述されていない場合
+
+トランザクションが正しい形式で記述されていない場合は、エラーメッセージを吐き出す。エラーメッセージを出力するだけで、何も処理は行わない。
+
+![](./images/use_case_01.png)
+
+## ユースケース2:従業員を削除する
+
+DelEmpトランザクションは従業員を削除する。このトランザクションの形式を下記に示す:
+
+```text
+DelEmp <EmpID>
+```
+
+このトランザクションが処理されると、指定の従業員レコードが削除される。
+
+別記1:EmpIDが正しい形式で記述されていない場合や認識不能な場合
+
+<EmpID>のフィールドが正しい形式で記述されていなかったり、有効な従業員レコードを参照していない場合、トランザクションはエラーメッセージを吐き出す。エラーメッセージを出力するだけで、何も処理をは行わない。
+
+## ユースケース3:タイムカードの処理を要請する
+
+TimeCardトランザクションはタイムカードレコードを作成し、それを適切な従業員レコードと結び付ける。
+
+```text
+TimeCard <EmpId> <date> <hours>
+```
+
+別記1:選択された従業員が時給ではない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+別記2:トランザクションが正しい形式で記述されていない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+![](./images/use_case_03.png)
+
+## ユースケース4:売上げレシートの処理を要請する
+
+SalesReceiptトランザクションは新規に売上げレシートを作成し、それを特別報酬を受ける従業員と結びつける。
+
+```text
+SalesReceipt <EmpID> <date> <amount>
+```
+
+別記1:指定された従業員が特別報酬対象の従業員でない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+別記2:トランザクションが正しい形式で記述されていない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+![](./images/use_case_04.png)
+
+## ユースケース5:組合サービス料の処理を要請する
+
+ServiceChargeトランザクションは組合サービス料(Union Service Charge)のレコードを作成し、それを組合員と結び付ける。
+
+```text
+ServiceCharge <memberID> <amount>
+```
+
+別記1:トランザクションが正しい形式で記述されていない場合
+
+このトランザクションが正しい形式で記述されていなかったり、存在しない組合員を<memberID>が参照していたりする場合には、エラーメッセージを吐き出す。
+
+![](./images/use_case_05.png)
+
+## ユースケース6:従業員レコードの詳細を変更する
+
+ChgEmpトランザクションは、指定された従業員のレコードをひとつだけ修正する。このトランザクションには、いくつかバリエーションがある。
+
+```text
+ChgEmp <EmpID> Name <name>                               従業員の名前を変更する
+ChgEmp <EmpID> Address <address>                         従業員の住所を変更する
+ChgEmp <EmpID> Hourly <hourlyRate>                       時給を扁壺する
+ChgEmp <EmpID> Salaried <salary>                         固定給を変更する
+ChgEmp <EmpID> Commissioned <salary> <rate>              成功報酬を変更する
+ChgEmp <EmpID> Hold                                      給与担当者が届けてくれるまで待つ
+ChgEmp <EmpID> Direct <bank> <account>                   直接引き落とし払い
+ChgEmp <EmpID> Mail <address>                            給与小切手を郵送
+ChgEmp <EmpID> Member <memberID> Dues <rate>             組合員情報を変更する
+ChgEmp <EmpID> NoMember                                  組合員から外す
+```
+
+別記1;トランザクションエラー
+トランザクションが正しい形式で記述されていない場合、または、<EmpID>が参照する従業員が存在しない場合、もしくは<memberID>が既存の組合員に与えられている場合、トランザクションはエラーメッセージを吐き出す。エラーメッセージを出力するだけで、何も処理は行わない。
+
+## ユースケース7:当日の給与支払い処理を走らせる
+
+Paydayトランザクションは、指定した日が給与日の従業員をすべて探し出し、支払うべき金額を計算し、指定され方法で支払いを行う。
+
+```text
+Payday <date>
+```
+
+![](./images/use_case_07_1.png)
+
+時給の従業員の給与計算
+
+![](./images/use_case_07_2.png)
+
+成功報酬のある従業員の給与計算
+
+![](./images/use_case_07_3.png)
+
+固定給の従業員の給与計算
+
+# コアモデル
+![](./images/core_model.png)
\ No newline at end of file
diff --git a/docs/uml/core_model.puml b/docs/uml/core_model.puml
new file mode 100644
index 0000000..31fa490
--- /dev/null
+++ b/docs/uml/core_model.puml
@@ -0,0 +1,50 @@
+@startuml
+
+interface PaymentMethod
+interface Affiliation
+
+Employee *--> PaymentClassification
+PaymentClassification <|-- SalariedClassification
+PaymentClassification <|-- HourlyClassification
+PaymentClassification <|-- CommissionedClassification
+HourlyClassification *-->"0..*" TimeCard
+HourlyClassification *-->"0..*" SalesRecipt
+
+Employee *--> PaymentMethod
+PaymentMethod <|-- HoldMethod
+PaymentMethod <|-- DirectMethod
+PaymentMethod <|-- MailMethod
+
+Employee *--> Affiliation
+Affiliation <|-- NoAffiliation
+Affiliation <|-- UnionAffiliation
+UnionAffiliation *-->"0..*" ServiceCharge
+
+class SalariedClassification {
+ - Salary
+}
+
+class HourlyClassification {
+- HourlyRate
+}
+
+
+class CommissionedClassification {
+- CommissionRate
+- Salary
+}
+
+class DirectMethod {
+- Bank
+- Account
+}
+
+class MailMethod {
+- Address
+}
+
+class UnionAffiliation {
+- Dues
+}
+
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case.puml b/docs/uml/use_case.puml
new file mode 100644
index 0000000..a5afb82
--- /dev/null
+++ b/docs/uml/use_case.puml
@@ -0,0 +1,15 @@
+@startuml
+left to right direction
+skinparam packageStyle rectangle
+actor manager
+actor employee
+rectangle payroll {
+  manager -- (新しい従業員を追加する)
+  manager -- (従業員を削除する)
+  (タイムカードの処理を要請する) -- employee
+  (売上げレシートの処理を請求する) -- employee
+  (組合サービス料の処理を請求する) -- employee
+  manager -- (従業員レコードの詳細を変更する)
+  manager -- (当日の給与支払い処理を走らせる)
+}
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case_01.puml b/docs/uml/use_case_01.puml
new file mode 100644
index 0000000..541a2de
--- /dev/null
+++ b/docs/uml/use_case_01.puml
@@ -0,0 +1,7 @@
+@startuml
+
+Employee <|-- HourlyEmployee
+Employee <|-- CommissionedEmployee
+Employee <|-- SalariedEmployee
+
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case_03.puml b/docs/uml/use_case_03.puml
new file mode 100644
index 0000000..2081bc9
--- /dev/null
+++ b/docs/uml/use_case_03.puml
@@ -0,0 +1,4 @@
+@startuml
+
+HourlyEmployee *--> "0..*" TimeCard
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case_04.puml b/docs/uml/use_case_04.puml
new file mode 100644
index 0000000..b6dbeef
--- /dev/null
+++ b/docs/uml/use_case_04.puml
@@ -0,0 +1,5 @@
+@startuml
+
+CommissionedEmployee *-->"0..*" SalesReceipt
+
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case_05.puml b/docs/uml/use_case_05.puml
new file mode 100644
index 0000000..a9cc053
--- /dev/null
+++ b/docs/uml/use_case_05.puml
@@ -0,0 +1,5 @@
+@startuml
+
+UnionMember *-->"0..*"ServiceCharge
+
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case_07_1.puml b/docs/uml/use_case_07_1.puml
new file mode 100644
index 0000000..37e7c81
--- /dev/null
+++ b/docs/uml/use_case_07_1.puml
@@ -0,0 +1,14 @@
+@startuml
+actor Manager
+
+Manager -> HourlyClassification: CalculatePay
+Manager -> HourlyClassification: Date
+loop for each timecard
+    activate HourlyClassification
+      HourlyClassification -> TimeCard: GetHours
+      HourlyClassification <- TimeCard: hours
+      HourlyClassification -> TimeCard: GetDate
+      HourlyClassification <- TimeCard: date
+    deactivate HourlyClassification
+end
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case_07_2.puml b/docs/uml/use_case_07_2.puml
new file mode 100644
index 0000000..9d2bd27
--- /dev/null
+++ b/docs/uml/use_case_07_2.puml
@@ -0,0 +1,14 @@
+@startuml
+actor Manager
+
+Manager -> CommissionedClassification: CalculatePay
+Manager -> CommissionedClassification: Date
+loop for each sale receipt
+    activate CommissionedClassification
+      CommissionedClassification -> SalesReceipt: GetAmount
+      CommissionedClassification <- SalesReceipt: amount
+      CommissionedClassification -> SalesReceipt: GetDate
+      CommissionedClassification <- SalesReceipt: date
+    deactivate CommissionedClassification
+end
+@enduml
\ No newline at end of file
diff --git a/docs/uml/use_case_07_3.puml b/docs/uml/use_case_07_3.puml
new file mode 100644
index 0000000..ec63063
--- /dev/null
+++ b/docs/uml/use_case_07_3.puml
@@ -0,0 +1,8 @@
+@startuml
+actor Manager
+
+Manager -> SalariedClassification:Date
+Manager <- SalariedClassification:Pay
+Manager -> SalariedClassification:CalculatePay
+
+@enduml
\ No newline at end of file