作業履歴 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回だけ実行され、その日が給与日である従業員に給与を支払う。システムは各従業員の給与日の通達を受け、給与が最後に支払われた日から指定された日までのレコード(記録)を元に給与を支払う。
+
+# ユースケース
+
+
+
+## ユースケース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:トランザクションが正しい形式で記述されていない場合
+
+トランザクションが正しい形式で記述されていない場合は、エラーメッセージを吐き出す。エラーメッセージを出力するだけで、何も処理は行わない。
+
+
+
+## ユースケース2:従業員を削除する
+
+DelEmpトランザクションは従業員を削除する。このトランザクションの形式を下記に示す:
+
+```text
+DelEmp <EmpID>
+```
+
+このトランザクションが処理されると、指定の従業員レコードが削除される。
+
+別記1:EmpIDが正しい形式で記述されていない場合や認識不能な場合
+
+<EmpID>のフィールドが正しい形式で記述されていなかったり、有効な従業員レコードを参照していない場合、トランザクションはエラーメッセージを吐き出す。エラーメッセージを出力するだけで、何も処理をは行わない。
+
+## ユースケース3:タイムカードの処理を要請する
+
+TimeCardトランザクションはタイムカードレコードを作成し、それを適切な従業員レコードと結び付ける。
+
+```text
+TimeCard <EmpId> <date> <hours>
+```
+
+別記1:選択された従業員が時給ではない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+別記2:トランザクションが正しい形式で記述されていない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+
+
+## ユースケース4:売上げレシートの処理を要請する
+
+SalesReceiptトランザクションは新規に売上げレシートを作成し、それを特別報酬を受ける従業員と結びつける。
+
+```text
+SalesReceipt <EmpID> <date> <amount>
+```
+
+別記1:指定された従業員が特別報酬対象の従業員でない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+別記2:トランザクションが正しい形式で記述されていない場合
+
+エラーメッセージを出力するだけで、何も処理は行わない。
+
+
+
+## ユースケース5:組合サービス料の処理を要請する
+
+ServiceChargeトランザクションは組合サービス料(Union Service Charge)のレコードを作成し、それを組合員と結び付ける。
+
+```text
+ServiceCharge <memberID> <amount>
+```
+
+別記1:トランザクションが正しい形式で記述されていない場合
+
+このトランザクションが正しい形式で記述されていなかったり、存在しない組合員を<memberID>が参照していたりする場合には、エラーメッセージを吐き出す。
+
+
+
+## ユースケース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>
+```
+
+
+
+時給の従業員の給与計算
+
+
+
+成功報酬のある従業員の給与計算
+
+
+
+固定給の従業員の給与計算
+
+# コアモデル
+
\ 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