Thời gian làm bài: 90p QUY ĐỊNH (1.0 đ) - Bài nộp đặt trong file nén. Đặt tên file nén là MSSV. - Trong file source, có ghi chú ở đầu mỗi file, nội dung ghi chú: Họ tên, MSSV, và những câu đã làm được trong bài. - Trừ việc đọc/ghi file (nếu có) và thao tác trên string (nếu có), sinh viên phải tự khai báo cấu trúc dữ liệu, không sử dụng thư viện có sẵn. - Nếu sử dụng Visual Studio, nộp các file Solution và Project liên quan, không nộp các file Debug. - Có nộp các file input và output trong file nén. - Chú ý: việc đạo văn, giống source code giữa các sinh viên sẽ là 0 điểm cả quá trình Thực hành cho tất cả các sinh viên liên quan.
NỘI DUNG (9.0 đ)
Hãy xây dựng cấu trúc dữ liệu danh sách liên kết đơn (DSLK) để quản lý các tài khoản khách hàng cá nhân của một Ngân hàng ABC. Thông tin mỗi tài khoản gồm: số tài khoản (dãy các số gồm 9 chữ số từ 000000001 đến 999999999), tên khách hàng (không quá 50 ký tự, tiếng Việt in hoa không dấu, có thể có ký hiệu khoảng cách), giới tính (M&F, tượng trưng cho male-nam và female-nữ), ngày sinh (DDMMYYYY), số tiền trong tài khoản (số dư tài khoản, số nguyên dương), loại khách hàng (SVIP, VIP, Normal) – với SVIP là tài khoản có số dư trên 1 triệu, VIP là tài khoản có số dư từ 65,000 đến 1 triệu, Normal là những tài khoản còn lại. Hãy viết chương trình cho phép người quản lý nghiệp vụ của Ngân hàng ABC thực hiện các thao tác sau: 1. Đọc file input.txt và thêm vào DSLK. Xuất ra màn hình số lượng node, kèm số tài khoản và tên theo thứ tự (1.0 đ) 2. Tạo thông tin một khách hàng mới (nhập từ bàn phím). Thêm tài khoản này vào cuối DSLK. (1.0 đ) 3. Xuất ra màn hình số lượng và danh sách tên khách hàng VIP có số tài khoản từ 200000000 đến 500000000 và có số dư tài khoản >= 500,000 (năm trăm ngàn) (1.0 đ) 4. Xuất ra màn hình thông tin của khách hàng nữ có tuổi nhỏ nhất. Nếu có nhiều tài khoản có tuổi trùng nhau thì chọn tài khoản có số dư lớn nhất. Nếu vẫn trùng thì xuất ra tất cả (1.0 đ) 5. Sử dụng thuật toán Quick Sort, hãy sắp xếp danh sách tài khoản theo thứ tự giảm dần của số dư, nếu hai tài khoản có số dư bằng nhau thì tài khoản nào có số tuổi nhỏ hơn sẽ xếp trước, nếu số tuổi cũng bằng nhau thì sắp theo thứ tự bảng chữ cái của tên khách hàng. Sau đó xuất ra thông tin các tài khoản (bao gồm số tài khoản, họ tên, ngày sinh, số dư) ứng với thứ tự trên. (1.5đ) Lưu ý: việc sắp xếp phải được tiến hành bằng cách đổi liên kết giữa các node. KHÔNG đổi dữ liệu giửa các node. 6. Xóa tất cả các tài khoản có số dư = 0. (0.5đ) 7. Ghi danh sách thông tin các tài khoản sau khi đã thực hiện các câu trên vào output file (output.txt) (1.0đ) Cấu trúc file output tương tự file input. 8. Giả sử người nhập đã nhập sai tất cả số dư tài khoản bị ngược (Ví dụ: 3000017 thay vì đúng sẽ là 7100003, riêng số tiền là 0 vẫn là 0), hãy viết hàm sửa lại số tiền cho đúng, kiểm tra và sửa lại loại khách hàng (nếu có thay đổi) và xuất kết quả ra output file (output1.txt). (2.0đ) Mẫu ví dụ của input.txt input.txt (example) 10 000000009, NGUYEN VAN AN, M, 19012000, 0, Normal 210345000, LE THI BONG, F, 27072000, 555001, VIP 321000008, TRAN THI CUC, F, 01022004, 700009, VIP 432000007, PHAM THI HONG DUNG, F, 01032004, 700003, VIP 480000056, HUYNH HOANG VUONG NGOC DIEM, F, 01032004, 2005, Normal 520000098, PHAN DANG MINH DUC, M, 19051998, 2000008, SVIP 200000009, VU THI GIANG, F, 19012000, 0, Normal 320000008, DANG HOANG HAI, M, 20101974, 3000001, SVIP 320000009, BUI VAN HAI, M, 20101979, 3000017, SVIP 390000009, DO VAN KHAI, M, 23111979, 3000019, SVIP