Ôn tập: Trình quản lý tài khoản ngân hàng
Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 18 trên 70.
Thử thách
DễHãy xây dựng một hệ thống quản lý tài khoản ngân hàng hoàn chỉnh, kết hợp mọi điều bạn đã học về kiến trúc lớp. Bạn sẽ tạo lớp BankAccount, phân biệt đúng giữa dữ liệu của từng đối tượng (chỉ dành riêng cho mỗi tài khoản) và dữ liệu tĩnh (dùng chung cho mọi tài khoản), đồng thời dùng tính năng xác thực để đảm bảo các tài khoản luôn ở trạng thái hợp lệ.
Bạn sẽ tạo hai tệp để sắp xếp code:
BankAccount.cs: Định nghĩa lớpBankAccounttrong không gian tênBanking. Tài khoản cần có:- Một trường
constMinimumBalancecó giá trị100, là số dư tối thiểu mọi tài khoản phải duy trì - Một trường
staticInterestRate(số thập phân) có giá trị ban đầu là0.03m, dùng chung cho mọi tài khoản - Một trường
staticTotalAccounts(số nguyên) để theo dõi số lượng tài khoản hiện có - Một trường
readonlyAccountNumber(chuỗi), được gán một lần khi tạo và không bao giờ thay đổi - Một trường riêng tư
_ownerNameđể lưu trữ dữ liệu, cùng thuộc tínhOwnerNamegiúp xóa khoảng trắng thừa khi gán giá trị - Một trường riêng tư
_balanceđể lưu trữ dữ liệu, cùng thuộc tínhBalancengăn số dư thấp hơnMinimumBalance(nếu có người thử đặt số dư thấp hơn, hãy giữ số dư ở mứcMinimumBalance) - Một hàm khởi tạo nhận số tài khoản, tên chủ tài khoản và số dư ban đầu, đồng thời tăng
TotalAccounts - Một phương thức tĩnh
SetInterestRate(decimal rate)để cập nhật lãi suất dùng chung - Một phương thức
CalculateInterest()trả về tích của số dư và lãi suất
- Một trường
Program.cs: Trong tệp chính, hãy tạo hai tài khoản ngân hàng bằng các giá trị đầu vào, cập nhật lãi suất và hiển thị thông tin tài khoản cùng dữ liệu ngân hàng dùng chung.
Bạn sẽ nhận bảy giá trị đầu vào:
- Số tài khoản thứ nhất
- Tên chủ tài khoản thứ nhất
- Số dư ban đầu của tài khoản thứ nhất
- Số tài khoản thứ hai
- Tên chủ tài khoản thứ hai
- Số dư ban đầu của tài khoản thứ hai
- Lãi suất mới (dạng số thập phân như
0.05)
In kết quả theo định dạng sau:
--- Bank Summary ---
Interest Rate: {InterestRate}
Minimum Balance: {MinimumBalance}
Total Accounts: {TotalAccounts}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}Ví dụ: nếu các giá trị đầu vào là ACC001, Alice Smith , 500, ACC002, Bob Jones, 50 và 0.05, kết quả sẽ là:
--- Bank Summary ---
Interest Rate: 0.05
Minimum Balance: 100
Total Accounts: 2
Account: ACC001
Owner: Alice Smith
Balance: 500
Interest Earned: 25.0
Account: ACC002
Owner: Bob Jones
Balance: 100
Interest Earned: 5.0Lưu ý tên Alice được xóa khoảng trắng thừa, còn số dư 50 của Bob được nâng lên mức tối thiểu là 100. Tiền lãi được tính bằng lãi suất mới 0.05, đã được thiết lập sau khi tạo các tài khoản.
Tự làm thử
using System;
using Banking;
class Program
{
public static void Main(string[] args)
{
// Đọc đầu vào cho tài khoản thứ nhất
string accountNumber1 = Console.ReadLine();
string ownerName1 = Console.ReadLine();
decimal balance1 = Convert.ToDecimal(Console.ReadLine());
// Đọc đầu vào cho tài khoản thứ hai
string accountNumber2 = Console.ReadLine();
string ownerName2 = Console.ReadLine();
decimal balance2 = Convert.ToDecimal(Console.ReadLine());
// Đọc lãi suất mới
decimal newRate = Convert.ToDecimal(Console.ReadLine());
// TODO: Tạo hai đối tượng BankAccount bằng các giá trị đầu vào
// TODO: Cập nhật lãi suất bằng phương thức tĩnh
// TODO: In ra thông tin tổng hợp của ngân hàng theo định dạng yêu cầu
// --- Bank Summary ---
// Interest Rate: {InterestRate}
// Minimum Balance: {MinimumBalance}
// Total Accounts: {TotalAccounts}
// (dòng trống)
// Tài khoản: {AccountNumber}
// Chủ tài khoản: {OwnerName}
// Số dư: {Balance}
// Interest Earned: {interest}
// (dòng trống)
// Tài khoản: {AccountNumber}
// Chủ tài khoản: {OwnerName}
// Số dư: {Balance}
// Interest Earned: {interest}
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Các khái niệm cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiKhông gian tên và chỉ thịGiới thiệu về lớp và đối tượngTừ khóa thisPhương thức và tham sốTrường và thuộc tínhHàm khởi tạoKhởi tạo đối tượngÔn tập: Máy tính đơn giản4Kế thừa
Cú pháp kế thừa cơ bản (:)Từ khóa 'base'Từ khóa virtual và overrideLớp sealedLớp cơ sở 'object'Ôn tập: hệ phân cấp nhân viên7Tính năng nâng cao
Nạp chồng toán tửBộ lập chỉ mục (this[])Ghi đè ToString()Phương thức mở rộngÔn tập: Danh sách tùy chỉnh10Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếSingleton an toàn với luồngMẫu FactoryMẫu Observer (sự kiện)Mẫu Strategy2Thuộc tính và thành viên tĩnh
Thuộc tính tự độngThuộc tính chỉ đọc hoặc chỉ ghiTrường và phương thức tĩnhLớp tĩnhThành viên có thân biểu thức5Đa hình và interface
Đa hình lúc biên dịch và lúc chạyInterface và lớp trừu tượngNhiều interfaceInterface tường minhUpcasting và downcastingÔn tập: bộ tính toán hình học8Các khái niệm OOP nâng cao
Ưu tiên composition hơn kế thừaGenerics (lớp và phương thức)Delegate và sự kiệnAttribute và reflectionGiao diện IDisposable và câu lệnh usingKiến thức cơ bản về dependency injection11Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổ hợp3Kiến trúc lớp
Dữ liệu instance và dữ liệu tĩnhTừ khóa 'readonly' và 'const'Trường lưu trữÔn tập: Trình quản lý tài khoản ngân hàngTự luyện tập: Trình biên dịch C# online