Ôn tập: Phương thức thanh toán
Thuộc phần Lập trình hướng đối tượng trong hành trình Kotlin của Coddy. Bài học 26 trên 57.
Thử thách
Trung bìnhThiết kế các phương thức thanh toán dựa trên một giao diện.
PaymentMethodyêu cầuname,fee(amount),pay(amount)(trả về liệu đã thanh toán hay chưa) vàstatus(), đồng thời cung cấptotal(amount)mặc định: số tiền cộng với phí.Card(têncard) tính phí 2% (làm tròn xuống), luôn thanh toán và đếm số lần thanh toán:card: 2 payment(s).Wallet(balance)(tênwallet) không tính phí và chỉ thanh toán khi số dư đủ trả tổng số tiền, sau đó trừ khoản tiền đó khỏi số dư:wallet: 50 left.GiftCard(balance)(têngift card) cũng không tính phí, nhưng chỉ thanh toán các khoản không quá 100 và chỉ khi số dư đủ trả các khoản đó:gift card: 40 left.
Sau đó, hãy hoàn thiện checkout(amount, methods), hàm này lần lượt thử từng PaymentMethod và trả về paid 100 with wallet (total 100) cho phương thức đầu tiên thanh toán thành công, hoặc declined nếu không có phương thức nào thanh toán.
Code được cung cấp đọc các phương thức theo dạng card,wallet:150,gift:120, sau đó đọc mỗi dòng một số tiền, in ra kết quả của từng lần thanh toán và cuối cùng in trạng thái status() của mọi phương thức.
Code của bạn nằm trong PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt và Functions.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
fun main() {
// Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
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())
}
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpHàm khởi tạo chínhKhối init và kiểm tra tính hợp lệHàm khởi tạo phụÔn tập: thẻ thư viện4Kế thừa
Lớp mở và lớp conGhi đè thành viênsuper và hàm khởi tạoLớp trừu tượngÔn tập: Danh bạ nhân viên2Thuộc tính và tính đóng gói
Trình truy cập tùy chỉnhBộ sửa đổi phạm vi truy cậpSetter riêng tưlazy và lateinitÔn tập: tài khoản ngân hàng5Giao diện
Khai báo giao diệnPhương thức mặc địnhNhiều giao diệnGiao diện như kiểu dữ liệuÔn tập: Phương thức thanh toánTự luyện tập: Playground Kotlin