1 LỜI CẢM ƠN Lời đầu tiên, em xin gửi lời cảm ơn chân thành tới Học viện Công nghệ Bưu chính Viễn thông, Khoa Công nghệ Đa phương tiện đã tận tình chỉ bảo, góp ý và tạo điều kiện cho em có thời gian h.
Trang 11
LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn chân thành tới Học viện Công nghệ Bưuchính Viễn thông, Khoa Công nghệ Đa phương tiện đã tận tình chỉ bảo, góp ý vàtạo điều kiện cho em có thời gian hoàn thiện bộ môn Lập trình hướng đối tượngC++ một cách tốt nhất Em xin cảm ơn Thầy Tạ Chí Hiếu đã nhiệt tình hướng dẫn,chỉ bảo tận tình trong quá trình nghiên cứu và hoàn thiện tốt bài báo cáo cuối kìcủa bộ môn
Trong quá trình hoàn thiện bài, em đã cố gắng nỗ lực, tuy nhiên không tránhkhỏi sai sót, rất mong các thầy, cô bỏ qua Bên cạnh đó, với kinh nghiệm và kiếnthức còn có nhiều hạn chế, em rất mong nhận được sự đóng góp ý kiến của thầy, cô
để bài báo cáo và sản phẩm của em được hoàn thiện hơn
Em xin chân thành cảm ơn!
2
Trang 2MỤC LỤC
LỜI CẢM ƠN
2 MỤC LỤC 3
PHẦN MỞ ĐẦU
5 CHƯƠNG 1: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
6 1 Tổng quan chung .6
1.1 Đặc trưng 6
1.2 Ưu điểm 6
2 Một số khái niệm cơ bản 7
2.1 Đối tượng (Object) 7
2.2 Lớp (Class) 7
2.3 Đóng gói dữ liệu (Encapsulation) 7
2.4 Kế thừa (Inheritance) 8
2.5 Đa hình (Polymorphsim) 8
CHƯƠNG 2: PHẦN MỀM QUẢN LÝ NHẬP HÀNG 9
1 Class HangHoa 9
1.1 Thuộc tính 9
1.2 Các phương thức: 9
1.2.1 Hàm khởi tạo 9
1.2.2 Hàm xuất HH 9
1.2.3 Hàm khởi tạo có tham số 10
1.2.4 Các hàm getter các thuộc tính 10 1.2.5 Các hàm setter các thuộc tính 11
2 class NhapHang 11
2.1 Thuộc tính 11
2.2 Phương thức
11 3 Class NhapChiTiet 13
3.1 Các thuộc tính 13
3.2 Các phương thức .
13 4 Hàm main .15 4.1 Hàm checkMAHANG 15 4.2 Hàm checkMAHANG_1 16 4.3 Hàm checkMADONNHAP 17 4.4 Hàm checkMANCC 17
4.5 Hàm checkNGAY 18
Trang 34.6 Hàm themMoiHH 18
4.7 Hàm nhapHang .
19 4.8 Hàm THONGKESOTONCUACACMATHANG
21 3 4.9 TONGTIENTRACHO1NCC 23
4.10 Hàm tinhsoluongnhapcuamotmahang .
23 4.11 Hàm readFileHH
25 4.12 Hàm ReadFileNhap
26 4.13 Hàm ReadFileNhapChiTiet
27 4.14 Hàm saveFileHH 27 4.15 Hàm saveFileNhap 28 4.17 Hàm menu 28 4.18 Hàm main 29
5 Kết quả khi chạy chương trình 31
5.1 Menu chính của chương trình 31
5.2 Chức năng thoát chương trình 32
5.3 Chức năng 1 Thêm mới hàng hóa 32
5.4 Chức năng 2 thêm mới lần nhập hàng .
33 5.5 Chức năng 3 Thống kê số tồn của các mặt hàng 34 5.6 Chức năng 4 Tổng tiền đã chi cho 1 nhà cung cấp 35 5.7 Chức năng 5 Tính số lượng nhập của một mã hàng 35 5.8 Chức năng hiển thị 36 5.9 File source code và các file txt 38
6 Tính kế thừa .38 7 Tính trừu tượng .38 8 Tính đóng gói 39 9 Tính đa hình 40
Trang 44
Trang 5PHẦN MỞ ĐẦU
Trong thời đại CNTT phát triển như hiện nay, thì các nhà lập trình luôn phảisuy nghĩ xem làm thế nào để tạo ra những chương trình hay, tiện ích Và một trongnhững thứ hỗ trợ người lập trình là ngôn ngữ lập trình Có một số phương pháp lậptrình truyền thống như lập trình tuyến tính, lập trình cấu trúc Với lập trình tuyếntính thì một số ứng dụng phức tạp không thể thực hiện được Trong khi đó với lậptrình cấu trúc, chúng ta không quản lý được sự thay đổi dữ liệu khi có nhiều chươngtrình cùng sử dụng một biến chung, không tiết kiệm được tài nguyên Để khắc phụcmột số hạn chế trên, người ta xây dựng một số mô hình lập trình tiên tiến hơn như:Lập trình hàm, lập trình logic, lập trình trực quan, lập trình tương tranh, lập trìnhphân tán, lập trình hướng đôi tượng Trong bài báo cáo này, em đi vào nghiên cứu
mô hình lập trình hướng đổi tượng trong đó có các nội dung cơ bản gồm: Tổngquan về lập trình hướng đổi tượng; một số tính chất đặc trưng của lập trình hướngđổi tượng
Với thời lượng quy định của một báo cáo môn học, lượng nội dung kiến thức
sẽ không đủ truyền tải hết trong báo cáo Các nội dung được nêu trong báo cáo chỉ
là các nội dung trọng tâm nhất của lập trình hướng đối tượng
5
Trang 6CHƯƠNG 1: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
1 Tổng quan chung
Trong lập trình hướng đối tượng:
- Người ta coi các thực thể trong chương trình là các đối tượng và sau đó, người
ta trừu tượng hoá đối tượng thành lớp đối tượng
- Dữ liệu được tổ chức thành các thuộc tính của lớp Nguời ta ngăn chặn việcthay đổi tuỳ tiện dữ liệu trong chương trình bằng các cách giới hạn truy nhập, chỉcho phép truy nhập dữ liệu thông qua đối tượng, thông qua các phương thức mà đốitượng được cung cấp
- Quan hệ giữa các đối tượng là quan hệ ngang hàng hoặc quan hệ kế thừa: Nếu lớp B kế thừa từ lớp A thì A được gọi là lớp cơ sở và B được gọi là lớp dẫn xuất Ngôn ngữ lập trình hướng đối tượng phổ biến hiện nay là Java và C++ Tuy nhiên, C++ mặc dù cũng có những đặc trưng cơ bản của lập trình hướng đối tượng nhưng vẫn không phải là ngôn ngữ lập trình thuần hướng đối tượng
1.1 Đặc trưng
Lập trình hướng đối tượng có hai đặc trưng cơ bản:
- Đóng gói dữ liệu: dữ liệu luôn được tổ chức thành các thuộc tính của lớp
đối tượng Việc truy nhập đến dữ liệu phải thông qua các phương thức của đối tượng lớp
- Sử dụng lại mã nguồn: việc sử dụng lại mã nguồn được thể hiện thông qua
cơ chế kế thừa Cơ chế này cho phép các lớp đối tượng có thể kế thừa từ các lớp đối tượng khác Khi đó, trong các lớp dẫn xuất, có thể sử dụng các phương thức
(mã nguồn) của các lớp cơ sở mà không cần phải định nghĩa lại 1.2 Ưu điểm
Lập trình hướng đối tượng có một số ưu điểm nổi bật:
6
- Không còn nguy cơ dữ liệu bị thay đổi tự do trong chương trình Vì dữ
Trang 7liệu đã được đóng gói vào các đối tượng Nếu muốn truy nhập vào dữ liệu phải thông qua các phương thức được cho phép của đối tượng
- Khi thay đổi cấu trúc dữ liệu của một đối tượng, không cần thay đổi mã nguồn của các đối tượng khác, mà chỉ cần thay đổi một số thành phần của đối tượng dẫn xuất Điều này hạn chế sự ảnh hưởng xấu của việc thay đổi dữ liệu đếncác đối tượng khác trong chương trình
- Có thể sử dụng lại mã nguồn, tiết kiệm tài nguyên, chi phí thời gian Vì nguyêntắc kế thừa cho phép các lớp dẫn xuất sử dụng các phương thức từ lớp cơ sở như
những phương thức của chính nó, mà không cần thiết phải định nghĩa lại 2 Một số khái niệm cơ bản
2.1 Đối tượng (Object)
- Trong lập trình hướng đối tượng, đối tượng được coi là đơn vị cơ bản nhỏ nhất Các dữ diệu và cách xử lí chỉ là thành phần của đối tượng mà không được coi
là thực thể Một đối tượng chứa các dữ liệu của riêng nó, đồng thời có các phương thức (hành động) thao tác trên các dữ liệu đó:
Đối tượng = dữ liệu + phương thức
2.2 Lớp (Class)
- Khi có nhiều đối tượng giống nhau về mặt dữ liệu và phương thức, chúng được nhóm lại với nhau và gọi chung là lớp: Lớp là sự trừu tượng hoá của đối tượng Đối tượng là một thể hiện của lớp
2.3 Đóng gói dữ liệu (Encapsulation)
- Các dữ liệu được đóng gói vào trong đối tượng Mỗi dữ liệu có một phạm vi truy nhập riêng
- Không thể truy nhập đến dữ liệu một cách tự do như lập trình cấu trúc
7
- Muốn truy nhập đến dữ liệu, phải thông qua các đối tượng, nghĩa là phải sử
Trang 8dụng các phương thức mà đối tượng cung cấp mới có thể truy nhập đến dữ liệu củađối tượng đó
2.4 Kế thừa (Inheritance)
- Tính kế thừa của lập trình hướng đối tượng cho phép một lớp có thể kế thừa
từ một số lớp đã tồn tại Khi đó, lớp mới có thể sử dụng dữ liệu và phương thức của các lớp cơ sở như là của mình Ngoài ra, lớp dẫn xuất còn có thể bổ sung thêmmột số dữ liệu và phương thức
- Ưu điểm của kế thừa là khi thay đổi dữ liệu của một lớp, chỉ cần thay đổi các phương thức trong phạm vi lớp cơ sở, mà không cần thay đổi trong các lớp dẫn xuất
2.5 Đa hình (Polymorphsim)
- Đa hình là khái niệm luôn đi kèm với kế thừa Do tính kế thừa, một lớp có thể sử dụng lại các phương thức của lớp khác Tuy nhiên, nếu cần thiết, lớp dẫn xuất cũng có thể định nghĩa lại một số phương thức của lớp cơ sở Đó là sự nạp chồng phương thức trong kế thừa
- Nhờ sự nạp chồng phương thức này, ta chỉ cần gọi tên phương thức bị nạpchồng từ đối tượng mà không cần quan tâm đó là đối tượng của lớp nào Chươngtrình sẽ tự động kiểm tra xem đối tượng là thuộc kiểu lớpởc sở hay thuộc lớp dẫnxuất, sau đó sẽ gọi phương thức tương ứng với lớp đó Đó là tính đa hình
8
CHƯƠNG 2: PHẦN MỀM QUẢN LÝ NHẬP HÀNG
1 Class HangHoa
Trang 91.1 Thuộc tính
MAHANG: là chuỗi có độ dài 10 kí tự
TEN: tên hàng hóa
SOLG: số lượng hàng hóa có độ dài 3
DONGIABAN: đơn giá bán có độ dài 5 kí tự
TRANGTHAI: trạng thái có một trong các giá trị sau:
Trang 10Hàm khởi tạo có các tham số là mã hàng hóa, tên hàng hóa, số lượng, đơn giá,trạng thái
1.2.4 Các hàm getter các thuộc tính
Các hàm này trả về thông tin các thuộc tính
10
1.2.5 Các hàm setter các thuộc tính
Trang 11Các hàm này sẽ đặt các giá trị cho các thuộc tính
2 class NhapHang
2.1 Thuộc tính
2.2 Phương thức
2.2.1 Hàm khởi tạo có tham số
2.2.2 Hàm khởi tạo không có tham số
11
2.2.3 Hàm ngày nhập
Trang 12Hàm này trả về định dạng dd/mm/yyyy từ chuỗi có định dạng yyyyMMdd Ví dụ chuỗi vào: 20220103 hàm này sẽ trả về là 03/01/2022
Trang 13Được kế thừa từ class NhapHang bao gồm các thuộc tính và các hàm phươngthức như sau:
3.1 Các thuộc tính
MÃ HÀNG: mã hàng hóa có độ dài 10 kí tự
SOLGNHAP: Số lượng nhập có 3 kí tự
DONGIANHAP: Đơn giá nhập
THANHTIEN: thành tiền = Số lượng nhập x đơn giá nhập
Trang 15- Đầu ra là kiểu true hoặc false:
+ Nếu mã hàng không phải 10 kí tự thì trả vê false
+ Nếu mã hàng đã có trong danh sách bằng cách so sánh tuần tự mã hàng cần tìmvới các mã hàng trong danh sách thì trả về false
+ Nếu thỏa mãn điều kiện thì trả về true
Trang 16- Đầu ra là kiểu true hoặc false:
+ Nếu mã đơn nhập không phải 10 kí tự thì trả vê false
+ Nếu mã đơn nhập đã có trong danh sách bằng cách so sánh tuần tự mã hàng cầntìm với các mã đơn nhập trong danh sách thì trả về false
+ Nếu thỏa mãn điều kiện thì trả về true
Trang 174.4 Hàm checkMANCC
Hàm này check mã nhà cung cấp có đủ 10 kí tự không, nếu đủ 10 kí tự thì trả về
true ngược lại trả về false
Trang 1818
Hàm này sẽ nhập mới một hàng hóa vào danh sách
+ Nhập vào mã hàng và kiểm tra nhập mã hàng
Trang 19vị 4.7 Hàm nhapHang
19
Trang 20Hàm này sẽ tiến hành thêm mới lần nhập hàng bao gồm thêm mới đơn nhập hàng
và chi tiết của đơn nhập, trong quá trình thêm thì cũng update số lượng hàng hóa trong file hh.txt đối với mỗi hàng hóa được nhập trong chi tiết đơn nhập
Trang 21Chú ý: trong 1 đơn nhập thì có nhiều chi tiết và các chi tiết này cùng 1 mã đơn nhập và các mặt hàng khác nhau nghĩa là cùng 1 đơn nhập thì có thể nhập nhiều mặt hàng và tổng tiền của mã đơn nhập sẽ được tính theo các chi tiết nhập này
4.8 Hàm THONGKESOTONCUACACMATHANG
21
Hàm này sẽ thống kê số tồn của các mặt hàng, số lượng tồn = SOLG trong file hàng hóa và thông tin số lượng tồn sẽ được hiển thị ra đưới dạng bảng
Trang 2222
4.9 TONGTIENTRACHO1NCC
Dựa vào thông tin trong file nhap.txt sẽ có các mã nhà cung cấp hàm này sẽ tính tổng tiền cho từng nhà cung cấp và hiển thị thông tin dưới dạng bảng tổng tiền của từng nhà cung cấp
4.10 Hàm tinhsoluongnhapcuamotmahang
23
Trang 23- Đầu vào là danh sách chi tiết nhập, số lượng chi tiết nhập
- Trong hàm này sẽ tiến hành nhập vào mã hàng và sau đó dựa vào chi tiết nhập
sẽ tiến hàng kiểm tra và đếm số lượng của mã hàng được nhập vào sau đó tiến hành thông báo ra màn hình tổng số lượng của mã hàng đó nhập được bao nhiêu
24
4.11 Hàm readFileHH
Trang 24- Hàm này sẽ đọc file hh.txt
25
File hh.txt có định dạng như yêu cầu là
Sau khi đọc các thông tin từng dòng sẽ là một hàng hóa và được lưu trữ vào trong danh sách hàng hóa, đồng thời biến n cũng được gán cho số lượng hàng hóa
4.12 Hàm ReadFileNhap
Trang 26Hàm này sẽ tiến hành đọc file Nhapchitiet.txt có định dạng
Sau khi đọc xong sẽ được lưu trữ trong danh sách nhapchitiet
Trang 27Hàm này lưu danh sách NhapHang ra file Nhap.txt
Trang 2829
Trang 2930
Trang 305 Kết quả khi chạy chương trình
5.1 Menu chính của chương trình
31
5.2 Chức năng thoát chương trình
Khi người dùng nhân thoát thì sẽ có thông báo là “Ban chon thoat” và tiến hành thoát chương trình
Trang 315.3 Chức năng 1 Thêm mới hàng hóa
Nhập vào mã hàng đã tồn tại trong danh sách thì sẽ thông báo là 1 mã hàng đa tồn tại và bắt người dùng nhập mới
32
Khi nhập thành công thì sẽ thông báo là thêm mới hàng hóa thành công
5.4 Chức năng 2 thêm mới lần nhập hàng
Trang 335.5 Chức năng 3 Thống kê số tồn của các mặt hàng
Khi nhấn chọn 3 từ menu chính
34
Chương trình sẽ hiển thị bảng thông tin về số lượng tồn của các mặt hàng cho người dùng
5.6 Chức năng 4 Tổng tiền đã chi cho 1 nhà cung cấp
5.7 Chức năng 5 Tính số lượng nhập của một mã hàng
Trang 3435
5.8 Chức năng hiển thị
Hiển thị danh sách hàng hóa
Trang 36Trong project thì đã trừu tượng các đối tượng thành 3 lớp dữ liệu 1 hàng hóa
sẽ có các thông tin như mã hàng hóa, tên hàng hóa, số lượng, đơn giá bán, trạng
Trang 37thái…
8 Tính đóng gói
Trong lớp HangHoa tính đóng gói được thể hiện qua các thuộc tính MAHANG, SOLG, DONGIABAN, TRANGTHAI, TEN và các phương thức
getter, setter Bạn không thể truy cập đến các private data hoặc gọi đến private
methods của class từ bên ngoài class đó
Có thể nói tính đóng gói (Encapsulation) là cơ chế của che giấu dữ liệu (Data Hiding) bởi chúng được lớp (class) che giấu đi (ở dạng private) một số dữ
liệu, hàm và phương thức để đảm bảo rằng các dữ liệu đó sẽ được truy cập và sử
dụng đúng mục đích, đúng cách thông qua các hàm và phương thức ở dạng public
mà class cung cấp Đó là lý do bạn không thể truy cập đến các thuộc tính private
hoặc gọi đến phương thức private của class từ bên ngoài class đó
39
9 Tính đa hình
Đa hình (polymorphism) nghĩa là có nhiều hình thái khác nhau Tiêu biểu là, đa hình xuất hiện khi có một cấu trúc cấp bậc của các lớp và chúng liên quan với nhau bởi tính kế thừa
Trang 38Trong lớp NhapHang Có định nghĩa hàm Xuat()
Lớp NhapChiTiet được kế thừa từ lớp nhập hàng và định nghĩa lại hàm Xuat này như sau:
Hay trong class HangHoa có các phương thức khởi tạo có tham số và không có tham số đây cũng
là một dạng của đa hình:
40