Để hỗ trợ hiện thực một hệ thống quản lý khách hàng (CRM – customer relation management), chúng ta cần xây dựng một class Customer và một class CRM với mục đích nhưsau: - Customer: lưu trữ thông tin, những thuộc tính và phương thức
cần thiết để thao tác với các thực thể khách hàng như sau: o Khách hàng có thểlà cá nhân hoặc đại diện cho một cơ quan, doanh nghiệp nào đó. o Trường hợp khách hàng mang tính chất cá nhân, cần lưu những thông tin cá nhân sau: mã khách hàng, họ và tên, và các thông tin bổ sung như tên viết tắt (biệt danh), địa chỉ, ngày sinh (bao gồm ngày tháng và năm), mã dịch vụ (kiểu số nguyên, ở đây chúng ta không cần quan tâm đến tên cụ thểcủa dich vụ), số lần sử dụng dịch
vụ, chí phí và thời gian (ngày, giờ) mỗi lần sửdụng dịch vụ o Trường hợp khách hàng đại diện cho doanh nghiệp, ngoài thông tin cá nhân cần lưu thêm thông tin vềdoanh nghiệp như: mã sốthuế, tên doanh nghiệp, địa chỉ, điện thoại, fax, email, địa chỉ website doanh nghiệp o Loại thẻcủa khách hàng (thẻ vàng, thẻ bạc, thẻ thông thường) - CRM: quản lý danh sách tất cả khách hàng (nghĩa là chứa một mảng các đối tượng thuộc lớp Customer) Sau đây, sinh viên cần khai báo
các thuộc tính và phương thức của các lớp CRM và Customerbằng ngôn ngữC++ thỏa mãn các yêu cầu sau: a) (1 điểm) Hãy khai báo các thuộc tính cần thiết như đặc tảbên trên của hai lớp CRMvà Customer. Giảsử, chúng ta đã có sẵn đối tượng DateTimenhưsau : class DateTime{int hour, minute, second, day, month, year;} và khai báo kiểu liệt kê Card cho sẵn nhưsau : enum Card {GodenCard, SilverCard, NormalCard } b) (0,5 điểm) Xây dựng những hàm tạo của Customer để có
thể tạo và nạp thông tin chi tiết nhanh chóng: loại khách hàng (cá nhân hay doanh nghiệp, tên, ngày sinh). c) (1 điểm) Trong class CRM, viết một phương thức hỗ trợ thêm một khách hàng mới, hãy dùng vòng lặp do..while đểkiểm tra xem đã có chứa thông tin của khách hàng này chưa; nếu có sẵn thông tin thì không cần thêm vào, trường hợp ngược lại thì thêm vào cuối danh sách. d) (1 điểm) Xây dựng một phương thức trong class CRM, cho phép tìm kiếm một đối tượng theo
tên của khách hàng và trảvề đối tượng Customerlưu trữthông tin tương ứng (trảvề NULLnếu không tìm thấy) o Hãy sửdụng vòng lặp while(){ …} đểhiện thực o Hãy sửdụng kỹthuật gọi đệquy đểhiện thực e) (0,5 điểm) Xây dựng những phương thức trong Customercho phép truy xuất và sửa chữa thông tin của khách hàng: thay đổi (nâng cấp) thẻ của một khách hành (thẻ vàng, thẻ bạc, hay thông thường) và làm thếnào để xác định một khách hàng là thuộc dạng cá nhân hay là doanh nghiệp.
f) (0,5 điểm) Viết một phương thức trong Customertrảvềcùng lúc sốlượng dịch vụsử dụng và tổng sốtiền dịch vụthu được từkhách hàng. g) (0,5 điểm) Xây dựng những phương thức trong CRM, cho phép chỉnh sửa thông tin khách hàng có mã là ‘ID’ nhưlà: họtên, tên viết tắt, địa chỉ, ngày sinh. h) (1 điểm) Viết phương thức void useService(int serviceCode, int servicePrice)cho phép nhập vào thông tin của dịch vụsau mỗi lần sử dụng cho cảhai lớp đối với một khách hàng. Lưu ý
rằng cần nhập thông tin vềthời gian sử dụng dịch vụ, ở đây chúng ta đơn giản hóa bằng cách lưu trữthời điểm lưu trữthông tin. Giả sử trong thưviện, ta có sẵn hàm void time(DateTime &x)sẽgán thời điểm gọi hàm vào biến x. i) (1 điểm) Hãy dùng từ khóa static để khai báo thêm các thuộc tính cần thiết trong lớp Customervà sau đó viết các phương thức hổtrợviệc tính thống kê trong lớp CRMnhư: o số lượng khách riêng lẻ(cá nhân), o số lượng khách là doanh nhân, o
tổng sốlượng khách hàng, o tỷlệkhách doanh nhân trên tổng số, j) (0,5 điểm) Hãy sửdụng kỹthuật gọi đệ quy để xây dựng phương thức trong CRM để hiển thịthông tin khách hàng theo thứ tự trong bảng chữcái. o Giảsửcho sẵn hàm so sánh giữa hai chuỗi compare(char* s1, char* s2): trảvề giá trị“true” nếu như s1 đứng trước s2theo thứtựtrong bảng chữcái, và trảvề “false” trong trường hợp ngược lại. k) (0,5 điểm) Viết hàm main, tạo một lớp CRMvà nhập vào khoảng 5 khách hàng
cá nhân và 5 doanh nhân; sau đó, xuất ra các thông tin thống kê cho sẵn.
Ý tưởng của em là xây dựng 2 lớp cá nhân và doanh nghiệp rồi nạp vào customer nhưng đến chỗ xử lí xây dựng hàm tạo nạp vào cá nhân hay doanh nghiêp em không biết phải làm sao. Có ai biết giúp em với. class canhan { protected: int ID; char name[MAX_NAME_LENGTH]; char phone[MAX_PHONE_LENGTH]; char ngaysinh[10]; public: canhan *nextcanhan; }; class doanhnghiep:protected
canhan { protected: int masothue; char diachi[100]; public: doanhnghiep *nextdoanghiep; }; class customer { private: canhan x; doanhnghiep y; canhan *headca; canhan *tailca; doanhnghiep *headdoanh; doanhnghie *taildoanh; public: customer(int m,char *ten, char *sinh); customer() { headca=NULL; headdoanh=NULL; } };