복습 - 결제 수단
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 26번째.
챌린지
중급인터페이스를 중심으로 결제 수단을 설계하세요.
PaymentMethod는name,fee(amount),pay(amount)(결제가 이루어졌는지를 반환),status()를 요구하며, 금액에 수수료를 더한 기본total(amount)을 제공합니다.Card(이름card)는 2%의 수수료를 부과하고(내림하여 반올림), 항상 결제하며 결제 횟수를 계산합니다:card: 2 payment(s).Wallet(balance)(이름wallet)는 수수료가 없으며 잔액이 총액을 충당할 때만 결제하고, 그 금액을 잔액에서 차감합니다:wallet: 50 left.GiftCard(balance)(이름gift card)도 수수료가 없지만, 금액이 최대 100인 경우에만, 그리고 잔액이 해당 금액을 충당할 때만 결제합니다:gift card: 40 left.
그런 다음 각 PaymentMethod를 순서대로 시도하여 결제에 성공하는 첫 번째 수단에 대해 paid 100 with wallet (total 100)을 반환하고, 어느 수단도 결제하지 못하면 declined를 반환하는 checkout(amount, methods)를 완성하세요.
제공된 코드는 결제 수단을 card,wallet:150,gift:120으로 읽은 다음, 줄마다 하나의 금액을 읽고 각 checkout의 결과를 출력한 뒤 마지막으로 모든 결제 수단의 status()를 출력합니다.
여러분의 코드는 PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt, Functions.kt에 작성합니다. Main.kt에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.
직접 해보기
fun main() {
// 제공된 입력/출력 코드: 그대로 유지하세요
val input = generateSequence(::readLine).toList()
val methods = input[0].split(",").map { spec ->
val p = spec.split(":")
when (p[0]) {
"card" -> Card()
"wallet" -> Wallet(p[1].toInt())
else -> GiftCard(p[1].toInt())
}
}
for (line in input.drop(1)) println(checkout(line.toInt(), methods))
for (m in methods) println(m.status())
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드