Ôn tập: hệ thống thanh toán
Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 31 trên 57.
Thử thách
KhóThiết kế một hệ thống thanh toán bằng các giao thức. PaymentMethod yêu cầu name, fee(for amount: Int) -> Int và mutating func pay(_ amount: Int) -> Bool. Phần mở rộng giao thức cung cấp total(for:) (số tiền cộng với phí). Hãy triển khai Card (phí 2% được làm tròn xuống, luôn thành công, đếm payments), Wallet (có balance được lưu trữ, không tính phí, thất bại khi tổng số tiền lớn hơn số dư, nếu không thì trừ số tiền đó khỏi số dư) và GiftCard (có balance được lưu trữ, không tính phí, thanh toán trong phạm vi số dư: nếu số dư không đủ thì từ chối). Hoàn thành checkout(_:with:), hàm này thử từng phương thức thanh toán theo thứ tự đã cho và trả về paid 100 with wallet (fee 0) 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 thành công. Hàm cũng trả về các phương thức đã cập nhật để số dư được giữ lại giữa các lần mua.
Code được cung cấp đọc số dư ví và số dư thẻ quà tặng, sau đó đọc các khoản tiền mua hàng. Với mỗi lần mua, chương trình thử thẻ quà tặng, ví rồi đến thẻ theo thứ tự đó, in kết quả, sau đó in số dư cuối cùng.
Code của bạn nằm trong PaymentMethod.swift, Card.swift, Wallet.swift, GiftCard.swift và Functions.swift. main.swift 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ử
// Đoạn code đầu vào/đầu ra đã cho: giữ nguyên
var input: [String] = []
while let line = readLine() { input.append(line) }
var methods: [any PaymentMethod] = [GiftCard(balance: Int(input[1])!), Wallet(balance: Int(input[0])!), Card()]
for line in input.dropFirst(2) {
let (result, updated) = checkout(Int(line)!, with: methods)
methods = updated
print(result)
}
for m in methods {
if let g = m as? GiftCard { print("gift card left \(g.balance)") }
if let w = m as? Wallet { print("wallet left \(w.balance)") }
if let c = m as? Card { print("card payments \(c.payments)") }
}
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ớpPhương thức và selfHàm khởi tạoLớp là tham chiếuÔn tập: Thẻ thư viện2Struct và kiểu giá trị
StructNgữ nghĩa giá trịPhương thức thay đổiStruct hay classÔn tập: mặt hàng trong kho5Kế thừa
Lớp conGhi đè phương thứcHàm khởi tạo và superfinal và hệ phân cấpÔn tập: hệ phân cấp nhân viên8Các giao thức tiêu chuẩn
CustomStringConvertibleEquatableComparableHashableÔn tập: Sắp xếp tùy chỉnh3Tìm hiểu sâu về thuộc tính
Thuộc tính tính toánQuan sát thuộc tínhThành viên tĩnhEnum với phương thứcÔn tập: Nhật ký nhiệt độ6Giao thức
Định nghĩa giao thứcCác kiểu tuân thủMở rộng giao thứcGiao thức dưới dạng kiểuÔn tập: hệ thống thanh toánTự luyện tập: Playground Swift