Guest User

Untitled

a guest
Jan 19th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.54 KB | None | 0 0
  1. /*------------*/
  2. /* Vehicle.cs */
  3. /*------------*/
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9.  
  10. namespace TollFeeCalculator
  11. {
  12. public interface Vehicle
  13. {
  14. String GetVehicleType();
  15. }
  16. }
  17.  
  18. /*--------------*/
  19. /* Motorbike.cs */
  20. /*--------------*/
  21. using System;
  22. using System.Collections.Generic;
  23. using System.Linq;
  24. using System.Text;
  25. using System.Threading.Tasks;
  26.  
  27. namespace TollFeeCalculator
  28. {
  29. public class Motorbike : Vehicle
  30. {
  31. public string GetVehicleType()
  32. {
  33. return "Motorbike";
  34. }
  35. }
  36. }
  37.  
  38. /*--------*/
  39. /* Car.cs */
  40. /*--------*/
  41. using System;
  42. using System.Collections.Generic;
  43. using System.Linq;
  44. using System.Text;
  45. using System.Threading.Tasks;
  46.  
  47. namespace TollFeeCalculator
  48. {
  49. public class Car : Vehicle
  50. {
  51. public String GetVehicleType()
  52. {
  53. return "Car";
  54. }
  55. }
  56. }
  57.  
  58. /*-------------------*/
  59. /* TollCalculator.cs */
  60. /*-------------------*/
  61. using System;
  62. using System.Globalization;
  63. using TollFeeCalculator;
  64.  
  65. public class TollCalculator
  66. {
  67. /* Calculate the total toll fee for one day
  68. * @param vehicle - the vehicle
  69. * @param dates - date and time of all passes on one day
  70. * @return - the total toll fee for that day
  71. */
  72.  
  73. public int GetTollFee(Vehicle vehicle, DateTime[] dates)
  74. {
  75. DateTime intervalStart = dates[0];
  76. int totalFee = 0;
  77. foreach (DateTime date in dates)
  78. {
  79. int nextFee = GetTollFee(date, vehicle);
  80. int tempFee = GetTollFee(intervalStart, vehicle);
  81.  
  82. long diffInMillies = date.Millisecond - intervalStart.Millisecond;
  83. long minutes = diffInMillies/1000/60;
  84.  
  85. if (minutes <= 60)
  86. {
  87. if (totalFee > 0) totalFee -= tempFee;
  88. if (nextFee >= tempFee) tempFee = nextFee;
  89. totalFee += tempFee;
  90. }
  91. else
  92. {
  93. totalFee += nextFee;
  94. }
  95. }
  96. if (totalFee > 60) totalFee = 60;
  97. return totalFee;
  98. }
  99.  
  100. private bool IsTollFreeVehicle(Vehicle vehicle)
  101. {
  102. if (vehicle == null) return false;
  103. String vehicleType = vehicle.GetVehicleType();
  104. return vehicleType.Equals(TollFreeVehicles.Motorbike.ToString()) ||
  105. vehicleType.Equals(TollFreeVehicles.Tractor.ToString()) ||
  106. vehicleType.Equals(TollFreeVehicles.Emergency.ToString()) ||
  107. vehicleType.Equals(TollFreeVehicles.Diplomat.ToString()) ||
  108. vehicleType.Equals(TollFreeVehicles.Foreign.ToString()) ||
  109. vehicleType.Equals(TollFreeVehicles.Military.ToString());
  110. }
  111.  
  112. public int GetTollFee(DateTime date, Vehicle vehicle)
  113. {
  114. if (IsTollFreeDate(date) || IsTollFreeVehicle(vehicle)) return 0;
  115.  
  116. int hour = date.Hour;
  117. int minute = date.Minute;
  118.  
  119. if (hour == 6 && minute >= 0 && minute <= 29) return 8;
  120. else if (hour == 6 && minute >= 30 && minute <= 59) return 13;
  121. else if (hour == 7 && minute >= 0 && minute <= 59) return 18;
  122. else if (hour == 8 && minute >= 0 && minute <= 29) return 13;
  123. else if (hour >= 8 && hour <= 14 && minute >= 30 && minute <= 59) return 8;
  124. else if (hour == 15 && minute >= 0 && minute <= 29) return 13;
  125. else if (hour == 15 && minute >= 0 || hour == 16 && minute <= 59) return 18;
  126. else if (hour == 17 && minute >= 0 && minute <= 59) return 13;
  127. else if (hour == 18 && minute >= 0 && minute <= 29) return 8;
  128. else return 0;
  129. }
  130.  
  131. private Boolean IsTollFreeDate(DateTime date)
  132. {
  133. int year = date.Year;
  134. int month = date.Month;
  135. int day = date.Day;
  136.  
  137. if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) return true;
  138.  
  139. if (year == 2013)
  140. {
  141. if (month == 1 && day == 1 ||
  142. month == 3 && (day == 28 || day == 29) ||
  143. month == 4 && (day == 1 || day == 30) ||
  144. month == 5 && (day == 1 || day == 8 || day == 9) ||
  145. month == 6 && (day == 5 || day == 6 || day == 21) ||
  146. month == 7 ||
  147. month == 11 && day == 1 ||
  148. month == 12 && (day == 24 || day == 25 || day == 26 || day == 31))
  149. {
  150. return true;
  151. }
  152. }
  153. return false;
  154. }
  155.  
  156. private enum TollFreeVehicles
  157. {
  158. Motorbike = 0,
  159. Tractor = 1,
  160. Emergency = 2,
  161. Diplomat = 3,
  162. Foreign = 4,
  163. Military = 5
  164. }
  165. }
Add Comment
Please, Sign In to add comment