fork download
  1. /*
  2. We are building a program to manage a gym's membership. The gym has multiple members, each with a unique ID, name, and membership status. The program allows gym staff to add new members, update members status, and get membership statistics.
  3.  
  4. Definitions:
  5. * A "member" is an object that represents a gym member. It has properties for the ID, name, and membership status.
  6. * A "membership" is a class which is used for managing members in the gym.
  7.  
  8. To begin with, we present you with two tasks:
  9. 1-1) Read through and understand the code below. Please take as much time as necessary, and feel free to run the code.
  10. 1-2) The test for Membership is not passing due to a bug in the code. Make the necessary changes to Membership to fix the bug.
  11. */
  12. import java.util.*;
  13. import org.junit.Test;
  14. import static org.junit.Assert.*;
  15.  
  16. enum MembershipStatus {
  17. /*
  18.   Membership Status is of three types: BASIC, PRO and ELITE.
  19.   BASIC is the default membership a new member gets.
  20.   PRO and ELITE are paid memberships for the gym.
  21.   */
  22. BASIC,
  23. PRO,
  24. ELITE
  25. }
  26.  
  27. class Member {
  28. /* Data about a gym member.*/
  29. public int memberId;
  30. public String name;
  31. public MembershipStatus membershipStatus;
  32.  
  33. public Member(int memberId, String name, MembershipStatus membershipStatus) {
  34. this.memberId = memberId;
  35. this.name = name;
  36. this.membershipStatus = membershipStatus;
  37. }
  38.  
  39. @Override
  40. public String toString() {
  41. return "Member ID: " + memberId + ", Name: " + name + ", Membership Status: " + membershipStatus;
  42. }
  43. }
  44.  
  45. class Membership {
  46. /*
  47.   Data for managing a gym membership, and methods which staff can
  48.   use to perform any queries or updates.
  49.   */
  50. public List<Member> members;
  51.  
  52. public Membership() {
  53. members = new ArrayList<>();
  54. }
  55.  
  56. public void addMember(Member member) {
  57. members.add(member);
  58. }
  59.  
  60. public void updateMembership(int memberId, MembershipStatus membershipStatus) {
  61. for (Member member : members) {
  62. if (member.memberId == memberId) {
  63. member.membershipStatus = membershipStatus;
  64. break;
  65. }
  66. }
  67. }
  68.  
  69. public MembershipStatistics getMembershipStatistics() {
  70. int totalMembers = members.size();
  71. int totalPaidMembers = 0;
  72. for (Member member : members) {
  73. if (member.membershipStatus == MembershipStatus.PRO) {
  74. totalPaidMembers++;
  75. }
  76. }
  77. double conversionRate = (totalPaidMembers / (double) totalMembers) * 100.0;
  78. return new MembershipStatistics(totalMembers, totalPaidMembers, conversionRate);
  79. }
  80. }
  81.  
  82. class MembershipStatistics {
  83. /*
  84.   Class for returning the getMembershipStatistics result
  85.   */
  86. public int totalMembers;
  87. public int totalPaidMembers;
  88. public double conversionRate;
  89.  
  90. public MembershipStatistics(int totalMembers, int totalPaidMembers, double conversionRate) {
  91. this.totalMembers = totalMembers;
  92. this.totalPaidMembers = totalPaidMembers;
  93. this.conversionRate = conversionRate;
  94. }
  95. }
  96.  
  97. class Ideone {
  98. /*
  99.   This is not a complete test suite, but tests some basic functionality of
  100.   the code and shows how to use it.
  101.   */
  102. public static void main(String[] args) {
  103. testMember();
  104. testMembership();
  105. }
  106.  
  107. public static void testMember() {
  108. System.out.println("Running testMember");
  109. Member testMember = new Member(1, "John Doe", MembershipStatus.BASIC);
  110. assert testMember.memberId == 1;
  111. assert testMember.name.equals("John Doe");
  112. assert testMember.membershipStatus == MembershipStatus.BASIC;
  113. }
  114.  
  115. public static void testMembership() {
  116. System.out.println("Running testMembership");
  117. Membership testMembership = new Membership();
  118. Member testMember = new Member(1, "John Doe", MembershipStatus.BASIC);
  119. testMembership.addMember(testMember);
  120. assert testMembership.members.size() == 1;
  121. assert testMembership.members.get(0).equals(testMember);
  122.  
  123. testMembership.updateMembership(1, MembershipStatus.PRO);
  124. assert testMembership.members.get(0).membershipStatus == MembershipStatus.PRO;
  125.  
  126. Member testMember2 = new Member(2, "Alex C", MembershipStatus.BASIC);
  127. testMembership.addMember(testMember2);
  128.  
  129. Member testMember3 = new Member(3, "Marie C", MembershipStatus.ELITE);
  130. testMembership.addMember(testMember3);
  131.  
  132. Member testMember4 = new Member(4, "Joe D", MembershipStatus.PRO);
  133. testMembership.addMember(testMember4);
  134.  
  135. MembershipStatistics attendanceStats = testMembership.getMembershipStatistics();
  136. assert attendanceStats.totalMembers == 4;
  137. assert attendanceStats.totalPaidMembers == 3;
  138. assert Math.abs(attendanceStats.conversionRate - 75.00) < 0.1;
  139. }
  140. }
Success #stdin #stdout 0.09s 54584KB
stdin
Standard input is empty
stdout
Running testMember
Running testMembership