Chương trình “Quản Lý Hàng Hóa” của nhóm chúng tôi lấy ý tưởng từ nhu cầu quản lý của các cửa hàng, siêu thị,…hiện nay. Nó được viết theo ngôn ngữ C++.Chương trình này có thể áp dụng quản lý nhiều mặt hàng khác nhau và quản lý cửa hàng điện thoại mà nhóm tôi đang thực hiện là một trong những mặt hàng có thể sử dụng chương trình này.Chương trình áp dụng các thuật toán tìm trong mảng không sắp xếp.Ngoài ra còn áp dụng xuất nhập file tạo thuận lợi cho việc in, ấn thông tin ra giấy.
Trang 1NHÓM 6 - Lớp: 14SPT
Đà Nẵng, ngày 31 tháng 5 năm 2016
Trang 2LỜI MỞ ĐẦU
Trong những năm cuối thế kỷ 20 đầu thế kỷ 21, công nghệ thông tin là ngành có tốc độ phát triển nhanh nhất Công nghệ thông tin ở nước ta còn mới, song tốc độ phát triển của nó rất nhanh và mạnh, chiếm một vị trí quan trọng trong các ngành khoa học công nghệ Một trong những lĩnh vực đang được ứng dụng tin học hóa rất phổ biến ở nước ta là lĩnh vực quản lý Tin học hóa trong quản lý đã giúp cho các nhà quản lý điều hành công việc một cách khoa học, chính xác và hiệu quả
Bên cạnh sự phát triển mạnh mẽ của công nghệ thông tin là sự phát triển của các ngành khoa học kĩ thuật Ngành khoa học kĩ thuật đem lại những sản phẩm đáp ứng nhu cầu của con người, trong đó phải kể đến nhu cầu sử dụng điện thoại ngày càng được tăng cao chính vì lẽ đó mà hàng loạt các siêu thị, cửa hàng bán điện thoại di động xuất hiện trên thị trường như hiện nay Việc kinh doanh của các cửa hàng, siêu thị ngày càng phát triển, kéo theo việc đòi hỏi ra đời các hệ thống để trợ giúp họ trong việc quản lý bán hàng đơn giản, nhanh chóng và thuận tiện hơn Xuất phát từ nhu cầu thực tế đó mà chúng em
đã thực hiện đồ án “Quản lý bán hàng điện thoại bằng ngôn ngữ lập trình C++”
Chúng em xin tỏ lòng biết ơn chân thành tới cô giáo TRẦN UYÊN TRANG – người trực tiếp giảng dạy bộ môn ngôn ngữ lập trình C++ đã truyền đạt cho em những kiến thức quý báu để hoàn thành bài viết này!
Trang 3ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
- -
NHIỆM VỤ ĐỒ ÁN MÔN HỌC Chuyên ngành:……SƯ PHẠM TIN HỌC Khóa: ………….2014-2018
Giảng viên hướng dẫn: ………… Th.s TRẦN UYÊN TRANG
Sinh viên thực hiện: 1/… TRẦN THỊ LÀNH MSSV: ……312011141121
2/ ….NGUYỄN THỊ TRANG MSSV: ……312011141143
3/ … NGUYỄN THỊ YẾN MSSV:…….312011141150…………
4/ … NGUYỄN THỊ NGUYỆT MSSV: ……312011141128
5/ … TÔ THỊ TRINH MSSV: ……312011141146
6/ … HOÀNG THỊ MINH TÚ MSSV: …….312011141148
7/ … NGUYỄN THỊ KIỀU NƯƠNG MSSV: ……312011141131
Tên đồ án:
……… Quản Lý Bán Hàng Bằng Ngôn Ngữ Lập Trình C++
Trang 4
Nội dung đồ án: Nhập dữ liệu file vào, xuất dữ liệu file ra, thêm dữ liệu vào file, thống kê
số lượng và lợi nhuận theo ngày, tháng, quý trong năm
Kết quả đạt được: tương đối hoàn thành mục tiêu đề ra
Ngày bắt đầu: ……20/4/2016 Ngày kết thúc:….19/5/2016
Đà Nẵng, ngày tháng năm 20… Giảng viên hướng dẫn
Trang 5ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
- -
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN SV:
Nhận xét:
Điểm quá trình Điểm thực hiện Điểm tổng kết [(1)+(2)]/2 Kiến thức (40%) Kỹ năng (60%) TỔNG CỘNG (1) Bản báo cáo (40%) Chương trình (60%) TỔNG CỘNG (2) Điểm số Điểm chữ SV:
Nhận xét:
[(1)+(2)]/2 Kiến
thức
(40%)
Kỹ năng
(60%)
TỔNG CỘNG (1)
Bản báo cáo (40%)
Chương trình (60%)
TỔNG CỘNG (2)
Điểm số Điểm chữ
Đà Nẵng, ngày … tháng … năm 20…
Trang 6ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
- -
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN SV:
Nhận xét:
Điểm quá trình Điểm thực hiện Điểm tổng kết [(1)+(2)]/2 Kiến thức (40%) Kỹ năng (60%) TỔNG CỘNG (1) Bản báo cáo (40%) Chương trình (60%) TỔNG CỘNG (2) Điểm số Điểm chữ SV:
Nhận xét:
[(1)+(2)]/2 Kiến
thức
(40%)
Kỹ năng
(60%)
TỔNG CỘNG (1)
Bản báo cáo (40%)
Chương trình (60%)
TỔNG CỘNG (2)
Điểm số Điểm chữ
Đà Nẵng, ngày … tháng … năm 20…
Trang 7ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
- -
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN SV:
Nhận xét:
Điểm quá trình Điểm thực hiện Điểm tổng kết [(1)+(2)]/2 Kiến thức (40%) Kỹ năng (60%) TỔNG CỘNG (1) Bản báo cáo (40%) Chương trình (60%) TỔNG CỘNG (2) Điểm số Điểm chữ SV:
Nhận xét:
[(1)+(2)]/2 Kiến
thức
(40%)
Kỹ năng
(60%)
TỔNG CỘNG (1)
Bản báo cáo (40%)
Chương trình (60%)
TỔNG CỘNG (2)
Điểm số Điểm chữ
Đà Nẵng, ngày … tháng … năm 20…
Trang 8ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
- -
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN SV:
Nhận xét:
Điểm quá trình Điểm thực hiện Điểm tổng kết [(1)+(2)]/2 Kiến thức (40%) Kỹ năng (60%) TỔNG CỘNG (1) Bản báo cáo (40%) Chương trình (60%) TỔNG CỘNG (2) Điểm số Điểm chữ SV:
Nhận xét:
[(1)+(2)]/2 Kiến
thức
(40%)
Kỹ năng
(60%)
TỔNG CỘNG (1)
Bản báo cáo (40%)
Chương trình (60%)
TỔNG CỘNG (2)
Điểm số Điểm chữ
Đà Nẵng, ngày … tháng … năm 20…
Trang 9MỤC LỤC
LỜI MỞ
ĐẦU………Error! Bookmark not defined
NHIỆM VỤ ĐỒ ÁN MÔN HỌC Error! Bookmark not defined NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Error! Bookmark not defined CHƯƠNG I:TỔNG QUAN VỀ ĐỒ ÁN Error! Bookmark not defined.1 I.1 Giới thiệu chung Error! Bookmark not defined.1 I.1.1 Giới thiệu về chương trình xây dựng đồ án quản lý Error! Bookmark not defined.1 I.1.2 Hướng dẫn sử dụng Error! Bookmark not defined.1 I.2 Mục đích và mục tiêu Error! Bookmark not defined.2 I.2.1 Mục đích: Error! Bookmark not defined.2 I.2.2 Mục tiêu: Error! Bookmark not defined.2 I.3 Dữ liệu được sử dụng trong chương trình: Error! Bookmark not defined.2 CHƯƠNG II: TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C++ Error! Bookmark not defined.6 II.1 Lập trình hướng đối tượng (Object Oriented Programming) Error! Bookmark not defined.6 II.1.1 Sơ lược về lập trình hướng đối tượng (1)
Error! Bookmark not defined.6 II.1.2 Cấu trúc của một chương trình C++ Error! Bookmark not defined.6 II.2 Những thuật ngữ của lập trình hướng đối tượng Error! Bookmark not defined.7 II.2.1 Lớp (class) Error! Bookmark not defined.7 II.2.1.1 Khái niệm về lớp: Error! Bookmark not defined.7 II.2.1.2 Định nghĩa về lớp: Error! Bookmark not defined.7 II.2.2 Thuộc tính của lớp: Error! Bookmark not defined.7 II.2.3 Phương thức của lớp: Error! Bookmark not defined.8 CHƯƠNG III: KIẾN THỨC CƠ SỞ NGÔN NGỮ LẬP TRÌNH C++ Error! Bookmark not defined.9 III.1 Các thư viện sử dụng: Error! Bookmark not defined.9 III.2 Thao tác với file: Error! Bookmark not defined.9 III.3 Các kiểu dữ liệu: 20 III.3.1 Kiểu struct: 20 III.3.2 Các kiểu dữ liệu chuẩn, không chuẩn: Error! Bookmark not defined.1 III.3.3 Danh sách mảng 1 chiều: Error! Bookmark not defined.1 III.3.3.1 Khái niệm mảng 1 chiều: Error! Bookmark not defined.1 III.3.3.2 Ưu và nhược điểm của mảng một chiều: Error! Bookmark not defined.2 III.3.4 Mảng đối tượng Error! Bookmark not defined.3 III.3.4.1 Khai báo Error! Bookmark not defined.3 III.3.4.2 Các vấn đề liên quan đến mảng đối tượng Error! Bookmark not defined.3
Trang 10III.4 Các lệnh và vòng lặp Error! Bookmark not defined.4 III.4.1 Lệnh If Error! Bookmark not defined.4 III.4.2 Lệnh break: Error! Bookmark not defined.5 III.4.3 Lệnh switch: Error! Bookmark not defined.6 III.4.4 Vòng lặp For Error! Bookmark not defined.6 III.4.5 Vòng lặp while Error! Bookmark not defined.7 III.4.6 Vòng lặp do…while Error! Bookmark not defined.8 CHƯƠNG IV: PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH Error! Bookmark not defined.9 IV.1 GIỚI THIỆU BÀI TOÁN Error! Bookmark not defined.9 IV1.1 Mô tả các bước thực hiện để quản lý hàng hóa: Error! Bookmark not defined.9
IV.1.2 Sơ đồ các chức năng chính: 30
IV.2 CÁC MODULE CHƯƠNG TRÌNH: 30
IV.2.1 Nhập vào thông tin ban đầu: 30
IV.2.2 Xuất thông tin ban đầu: Error! Bookmark not defined.1 IV.2.4 Thêm hóa đơn nhập:……….35
IV.2.4 Thêm hóa đơn xuất: Error! Bookmark not defined.8 IV.2.5 Thống kê sản phẩm: 40
IV.2.5.1.Thống kê hàng hóa bán ra theo ngày : 40
IV.2.5.2 Thống kê hàng hóa bán ra theo tháng: 41
IV.2.5.3 Thống kê hàng hóa bán ra theo quý : 41
CHƯƠNG V: CÀI ĐẶT CHƯƠNG TRÌNH VÀ CHẠY THỬ NGHIỆM 42
V.1 GIỚI THIỆU CHƯƠNG TRÌNH Error! Bookmark not defined.2 V.2 THỰC HIỆN CHƯƠNG TRÌNH Error! Bookmark not defined.2 1 Nhập dữ liệu ban đầu Error! Bookmark not defined.3 2 Xuất dữ liệu Error! Bookmark not defined.3 3 Thêm hóa đơn nhập Error! Bookmark not defined.6 4 Thêm hóa đơn xuất Error! Bookmark not defined.8 5 Thống kê Error! Bookmark not defined.1 V.3 Bộ Kiểm Thử Error! Bookmark not defined.8 V.3.1 Bộ I Error! Bookmark not defined.9 V.3.1 Bộ II 60
V.3.1 Bộ IIII 60
Chương 6 : tổng kết 62
Tài liệu tham khảo 63
Bảng phân công công việc 64
Trang 11CHƯƠNG I:
TỔNG QUAN VỀ ĐỒ ÁN
I.1 Giới thiệu chung
I.1.1 Giới thiệu về chương trình xây dựng đồ án quản lý
- Chương trình “Quản Lý Hàng Hóa” của nhóm chúng tôi lấy ý tưởng từ nhu cầu quản lý của các cửa hàng, siêu thị,…hiện nay Nó được viết theo ngôn ngữ C++
- Chương trình này có thể áp dụng quản lý nhiều mặt hàng khác nhau và quản lý cửa hàng điện thoại mà nhóm tôi đang thực hiện là một trong những mặt hàng có thể sử dụng chương trình này
- Chương trình áp dụng các thuật toán tìm trong mảng không sắp xếp
- Ngoài ra còn áp dụng xuất nhập file tạo thuận lợi cho việc in, ấn thông tin ra giấy
I.1.2 Hướng dẫn sử dụng
- Các nhân viên chỉ cần đọc thông tin trên màn hình DEV C++ và nhập số tương ứng theo nhu cầu cần thực hiện của mình Menu gồm có:
1 Nhập thông tin ban đầu
2 Xuất thông tin theo yêu cầu
3 Thêm hóa đơn nhập
4 Thêm hóa đơn xuất
BẠN CẦN HIỂN THỊ THÔNG TIN NÀO:
1 Thông tin hàng hóa
2 Thông tin nhân viên
3 Thông tin khách hàng
Trang 124 Thông tin nhà cung cấp
5 Thông tin hóa đơn nhập
6 Thông tin hóa đơn xuất
- Bạn muốn thông tin nào hiện ra thì sẽ nhập số tương ứng như trên, nhập số vào không tồn tại ở menu thì nó sẽ hiển thị “STOP EXIT THE PROGRAM!!!” và trở
về menu ban đầu Tương tự như vậy cho những menu tiếp theo
- Thiết kế một chương trình quản lý dễ sử dụng để có thể chạy tốt trên máy tính
- Áp dụng quản lý trong các cửa hàng điện thoại
I.3 Dữ liệu được sử dụng trong chương trình:
3 KH03 TÔ THỊ TRINH TOTRINH290996
12 NGUYỄN ĐỨC TRUNG ĐÀ NẴNG 29/9/1996
Trang 13STT ID TÊN HÀNG HÓA ĐƠN VỊ TÍNH SỐ LƢỢNG ĐƠN GIÁ
1 NOKIA1 LUMIA 650 DUAL SIM SAN PHAM 500 3990000
2 NOKIA2 LUMIA 550 SAN PHAM 320 2990000
3 NOKIA3 NOLIA 320 SAN PHAM 200 1390000
4 NOKIA4 NOKIA 305 DUAL SIM SAN PHAM 380 429000
5 IPHONE1 IPHONE SE 16GB ROSE GOLD SAN PHAM 600 20000000
6 SAMSUNG SAMSUNG GALAXY S7 EGDE SAN PHAM 240 18490000
7 OPPO1 OPP1 S1 SAN PHAM 455 5990000
8 HTC1 HTC DESIRE 826 DUAL SIM SAN PHAM 215 2400000
Trang 14Bảng NHÂN VIÊN
ST
T ID HỌ VÀ TÊN
NGÀY SINH
NGÀY LÀM VIỆC ĐỊA CHỈ
1 NV01-005 PHẠM DUY
PHƯƠNG 15/3/1986 13/7/2000 BỐ TRẠCH QUẢNG BÌNH
2 NV02-002 MAI THỊ KIỀU 03/02/1983 01/06/2005 ĐIỆN BÀN QUẢNG NAM
3 NV02-001 NGUYỄN NHƯ VŨ 25/7/1986 03/02/2003 HẢI CHÂU ĐÀ NẴNG
4 NV01-001 TRẦN TUẤN ANH 01/01/1983 25/02/2013 MỘ ĐỨC QUẢNG NGÃI
5 NV01-003 ĐÀO THỊ CÚC 11/01/1987 02/03/2008 SƠN TỊNH QUẢNG NGÃI
6 NV02-007 NGUYỄN THỊ ĐÀO 26/3/1984 23/3/2009 PHÖ THƯỢNG HUẾ
7 QL01-001 NGUYỄN VĂN
NGHĨA 23/8/1985 14/4/2010 ĐIỆN BÀN QUẢNG NAM
8 QL01-002 NGÔ PHƯƠNG
THẢO 12/11/1986 13/4/2015 VĨNH LINH QUẢNG TRỊ
9 MM01-010 LÊ VĂN BẰNG 02/7/1984 20/5/2005 KỲ ANH HÀ TĨNH
Bảng HÓA ĐƠN XUẤT
STT IDHDX IDNV IDHH IDKH NGÀY XUẤT SỐ LƯỢNG LÃI
Trang 16CHƯƠNG II:
TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C++
II.1 Lập trình hướng đối tượng (Object Oriented Programming)
II.1.1 Sơ lược về lập trình hướng đối tượng (1)
- Lập trình hướng đối tượng là ngôn ngữ được xây dựng trên nền tảng của lập trình
có cấu trúc với sự trừu tượng hóa dữ liệu
- Sự trừu tượng dữ liệu tác động trên các dữ liệu cũng như sự trừu tượng hóa chức năng đã làm trên chức năng Khi sự trừu tượng hóa dữ liệu xảy ra, các cấu trúc dữ liệu và các phần tử có thể được sử dụng mà không cần được chú ý đến các chi tiết
- Lập trình hướng đối tượng cho phép sử dụng các quá trình suy nghĩ về thế giới quan vào dữ liệu
II.1.2 Cấu trúc của một chương trình C++
(1): [Khai báo thư viện]
(2): [Khai báo các nguyên mẫu hàm của người dùng]
Trang 17II.2 Những thuật ngữ của lập trình hướng đối tượng
II.2.1 Lớp (2)
(class)
II.2.1.1 Khái niệm về lớp:
- Lớp (class) là khái niệm trung tâm của lập trình hướng đối tượng
- Lớp là sự mở rộng khái niệm cấu trúc (struct) của C và bản ghi (record) của pascal
- Ngoài ra các thành phần dữ liệu như cấu trúc, lớp còn chứa các thành phần hàm, còn gọi là phương thức (method) hay hàm thành viên (member function)
- Lớp là một kiểu đối tượng và nó được dùng để khai báo kiểu đối tượng khác
//Khai báo các thuộc tính gồm các biến thành phần, dữ //liệu các biến Và
nó không truy xuất ra bên ngoài lớp
Public:
//khai báo các phương thức gồm các hàm //nó truy xuất trong và ngoài lớp
}
II.2.2 Thuộc tính (3) của lớp:
- Thuộc tính thường được khai báo private để đảm bảo tính giấu kín, bảo vệ an toàn
dữ liệu của lớp, không cho các hàm hay phương thức bên ngoài xâm nhập vào dữ liệu của lớp
Trang 18- Thuộc tính của lớp có thể là các biến, mảng, con trỏ kiểu chuẩn (int, float, char,…) hoặc kiểu ngoài chuẩn đã được định nghĩa trước Thuộc tính của lớp không thể là kiểu của chính lớp đó nhưng có thể là con trỏ của lớp này
Ví dụ: class A{
int x,y; // khai báo hai thuộc tính kiểu số nguyên
float z;// khai báo z có kiểu số thực
A p;// không được phép
A *p;// khai báo con trỏ p kiểu A.}
II.2.3 Phương thức (4) của lớp:
- Phương thức thường được khai báo public để chúng có thể được gọi tới từ các hàm khác trong chương trình
- Phương thức có thể được định nghĩa bên ngoài hay bên trong lớp Thông thường phương thức ngắn sẽ được định nghiã bên trong lớp, phương thức dài sẽ được định nghĩa bên ngoài lớp Khi định nghĩa bên ngoài lớp người ta sử dụng toán tử phạm vi(::)
Trang 19CHƯƠNG III:
KIẾN THỨC CƠ SỞ NGÔN NGỮ LẬP TRÌNH C++
III.1 Các thư viện sử dụng:
- #include<iostream>: thư viện của các hàm tiêu chuẩn để đọc và viết ra các dòng
chuẩn (standard stream) hay xuất và nhập (dữ liệu) từ C++.
- #include<bits/stdc++.h>
- #include<fstream>: Định nghĩa các hàm hỗ trợ các phép toán cho dòng xuất nhập
(iostream) trên các chuỗi chứa trong các tập tin bên ngoài.
- using namespace std;
III.2 Thao tác với file (5) :
Mở file để ghi dữ liệu:
ofstream <fileVar> (FileName);
Ví dụ: ofstream fo1("NHANVIEN.OUT"), fo2("HANGHOA.OUT"), …
Mở file để đọc dữ liệu:
ifstream <fileVar> (FileName);
Ví dụ: ifstream fi1("NHANVIEN.INP"), fi2("HANGHOA.TXT"), …
Trang 20 Đọc dữ liệu từ file:
fileVar>>Var1>>Var2>> >>VarN;
Ví dụ: getline(fi2,ID); getline(fi2,tenhh); fi2>>sl>>giahang;…
III.3 Các kiểu dữ liệu:
III.3.1 Kiểu struct (6) :
- Đối với danh sách mảng, chỉ có thể lưu nhiều thông tin có cùng kiểu dữ liệu nhất
định Nhưng với struct ta có thể lưu thông tin có nhiều kiểu dữ liệu khác nhau
string ID; } f[i];
- Truy cập đến các thành phần của cấu trúc:
Để truy nhập đến thành phần của cấu trúc ta sử dụng toán tử chấm (.)
Tên_cấu_trúc tên_thành_phần;
Như ví dụ trên ta truy cập như sau:
Trang 21f[i].ID; f[i].lai; f[i].soluong; // truy xuất đến mảng có kiểu struct
III.3.2 Các kiểu dữ liệu chuẩn, không chuẩn:
- Các kiểu dữ liệu chuẩn là:
string: kiểu kí tự
int: kiểu số nguyên có miền giá trị -215 -> 215 -1
long long – 231 -> 231 -1
- Kiểu không chuẩn: DATE và typef ( định nghĩa theo struct)
III.3.3 Danh sách mảng 1 chiều:
III.3.3.1 Khái niệm mảng 1 chiều (7) :
- Mảng là kiểu dữ liệu có cấu trúc bao gồm nhiều phần tử cùng kiểu và được bố trí vùng nhớ liên tục Một mảng số nguyên gồm các phần tử là các biến số nguyên Một mảng số thực bao gồm các phần tử là các biến thực
- Kích thước của mảng chính là số các phần tử trong mảng Kích thước này phải được khai báo tường minh trong phần khai báo mảng vì nó xác định vị trí và kích thước của vùng nhớ trong bộ nhớ được cấp phát cho mảng
III.3.3.2 Ưu và nhược điểm của mảng một chiều:
2.1 Ưu điểm:
Trang 22- giúp ta tiết kiệm tài nguyên hệ thống Ta có thể sử dụng một mảng có kích thước lớn trong một thời gian nào đó rồi xóa bỏ để trả lại vùng nhớ cho hệ thống
- Dễ cài đặt và truy nhập các phần tử dữ liệu
- Tốc độ truy nhập đến một vị trí bất kì nhanh và hiệu quả
2.2 Nhược điểm:
- Cần phải xác định trước số phần tử mảng trước khi sử dụng => không phù hợp với các bài toán chưa biết số lượng phần tử
- Khó khăn trong các thao tác chèn và xóa một phần tử bất kì trong mảng
- Nếu bài toán mà việc chèn phần tử xóa phần tử diễn ra liên tục thì tốc độ xử lí sẽ diễn ra rất chậm
2.3 Các thao tác cơ bản trên mảng một chiều:
Trang 23III.3.4 Mảng đối tượng (8)
III.3.4.1 Khai báo
- Tương tự như khai báo mảng int, char, float… Mảng đối tượng dùng tên lớp để khai báo theo mẫu: tên_lớp tên_mảng[kích cở];
Ví dụ: NhanVien NV[1000]; HangHoa HH[1000]; NhaCungCap NCC[1000]; KhachHang KH[1000]; HoaDonNhap HDN[1000]; HoaDonXuat HDX[1000];
III.3.4.2 Các vấn đề liên quan đến mảng đối tượng
Khởi gán
- Khởi gán giá trị cho các phần tử của mảng đối tượng, có thể dùng hàm tạo hay các phương thức nhập như sau:
Tên_lớp tên_mảng[kích cở] ={ Tên_lớp( các tham số),…};
Ví dụ : HangHoa HH[1000] = HangHoa(); //khởi gán bởi cấu tử không đối
Biểu thị thành phần của phần tử mảng
- Để biểu thị thuộc tính của phần tử mảng đối tượng, ta viết như sau:
Tên_mảng[ chỉ số].Tên_thuộc_tính;
Ví dụ: HH[1].ID; HH[2].tenhh;
- Để thực hiện phương thức đối với phần tử mảng ta có thể viết như sau:
Tên_mảng[ chỉ số].Tên_phương_thức(danh sách tham số);
Trang 24- Cú pháp: if(biểu thức điều kiện)
fo6<<"dia chi khach hang: "<<KH[i].getadd()<<endl;
Ví dụ:
while(i<=n4) {
Trang 25if(HDX[j].getIDKH()==KH[i].getID()) {
fo6<<"ho va ten khach hang: "<<KH[i].gethoten()<<endl;
fo6<<"dia chi khach hang: "<<KH[i].getadd()<<endl;
break;
} else i++;
}
III.4.3 Lệnh switch:
- Cũng giống cấu trúc “if else”, nhƣng nó mềm dẻo hơn và linh động hơn nhiều so với sử dụng if Tuy nhiên, nó cũng có mặt hạn chế là kết quả của biểu thức phải là giá trị hằng nguyên (có giá trị cụ thể) Một bài toán sử dụng lệnh switch thì cũng
có thể sử dụng if, nhƣng ngƣợc lại còn tùy thuộc vào giải thuật của bài toán
Trang 26{
case 1:tk_ngay();break; // nếu ch=1 thì hàm tk_ngay() được thực hiện case 2:tk_thang();break;// nếu ch=2 thì hàm tk_thang() được thực hiện case 3:tk_quy();break; // nếu ch=3 thì hàm tk_quy() được thực hiện default: cout<<"STOP EXIT THE PROGRAM!!!\n"; break;// nếu khác trên
Biểu thức 1: khởi tạo giá trị ban đầu cho biến điều khiển
Biểu thức 2: là quan hệ logic thể hiện điều kiện tiếp tục vòng lặp
Biểu thức 3: phép gán dùng thay đổi giá trịbiến điều khiển
- Cách hoạt động:
Bước 1: Xác định giá trị của biểu thức 1
Bước 2: Xác định giá trị của biểu thức 2 (kiểm tra điều kiện đúng hay sai tức
1 hoặc 0) Tùy vào giá trị của biểu thức 2 mà thực hiện theo 2 hướng:
+ Nếu sai (0) sẽ thoát khỏi vòng lặp
+ Nếu đúng (1) sẽ thực hiện khối lệnh trong vòng for đến khi gặp dấu } ở cuối vòng for hoặc lệnh continue thì sẽ tưới bước 3
Bước 3: Tính giá trị biểu thức 3, sau đó quay lại bước 2
Trang 27Ví dụ: for( int j = 1; j < n; j++){
if( f[j].ID == id){
kiemTra = true; //tim thay => da co trong f
chimuc = j;//Lay chi muc cua SanPham thu j
} }
III.4.5 Vòng lặp while
- Cú pháp: while( biểu thức ) [lệnh];
- Trong khi biểu thức còn đúng thì thực hiện lệnh, khi sai thì thoát khỏi while
- Biểu thức: có thể là một biểu thức hoặc nhiều biểu thức con Nếu là nhiều biểu thức con thì cách nhau bởi dấu phẩy (,) và tính đúng sai của biểu thức đƣợc quyết
định bởi biểu thức con cuối cùng
Trong thân while (khối lệnh) có thể chứa một hoặc nhiều cấu trúc điều khiển khác
Trong thân while có thể sử dụng lệnh continue để chuyển đến đầu vòng lặp (bỏ qua các câu lệnh còn lại trong thân)
Nếu biểu thức là một hằng khác không thì nó luôn đúng và vòng lặp diễn ra vô hạn Muốn thoát khỏi vòng lặp while tùy ý có thể dùng các lệnh break, goto, return nhƣ với lệnh for
Ví dụ: //nhap tong tin hang hoa
while(!fi2.eof()){ //khi chưa kết thúc file
HH[i++].nhap();
} fi2.close();
Trang 29CHƯƠNG IV
PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH
IV.1 GIỚI THIỆU BÀI TOÁN
IV1.1 Mô tả các bước thực hiện để quản lý hàng hóa:
- Để thực hiện quản lý việc nhập, xuất hàng hóa chúng ta cần xây dựng các mảng chứa dữ liệu xử lý cho các đối tượng : nhân viên, hàng hóa, nhà cung cấp, khách hàng, hóa đơn xuất, hóa đơn nhập Cụ thể công việc như sau:
- Tạo 6 mảng, mỗi mảng chứa 1000 phần tử Các lớp dược định nghĩa như kiểu dữ liệu cho các mảng Mỗi mảng sẽ chứa nhiều đối tượng
- Nhập dữ liệu vào mảng từ các file INP,.TXT
- Hiển thị thông tin vừa nhập vào các file OUT
- Thực hiện thêm hóa đơn nhập: thêm mới một hóa đơn nhập, nếu mã hàng hóa đã tồn tại chỉ cần tăng lên số lượng với giá trị mỗi mặt hàng là không thay đổi Ngược lại, thêm mới một mặt hàng vào trong bảng HANG HOA; kiểm tra nhân viên thực hiện hóa đơn đã tồn tại chưa, nếu chưa thì thêm vào bảng NHÂN VIÊN; tương tự kiểm tra NHÀ CUNG CẤP
- Thực hiện thêm hóa đơn xuất: thêm mới một hóa đơn xuất, kiểm tra hàng hóa mới hay cũ, nếu là mặt hàng cũ ta thực hiện giảm số lượng hàng hóa trong kho, nếu không tồn tại trong bảng HÀNG HÓA thì thông báo lỗi hàng hóa không tồn tại; Sau đó, tiếp tục kiểm tra NHÂN VIÊN, KHÁCH HÀNG như thuật toán trong HÓA ĐƠN NHẬP
- Thống kê theo các yêu cầu sau:
Ngày tháng năm hóa đơn xuất
Tháng năm hóa đơn xuất
Các quý trong năm (mỗi quý là 3 tháng kế tiếp)
- Thuật toán: nhập vào các giá trị cần thống kê, sau đó thực hiện kiểm thử, so sánh với các giá trị cùng thuộc tính và thực hiện thống kê
Trang 30IV.1.2 Sơ đồ các chức năng chính:
IV.2 CÁC MODULE CHƯƠNG TRÌNH:
IV.2.1 Nhập vào thông tin ban đầu:
- Thuật toán này áp dụng với mọi mảng
i: địa chỉ truy xuất đến các thành phần mảng
n: số lượng thành phần mảng
fi: file dữ liệu chứa thông tin cần nhập
Trang 31Đ
S
IV.2.2 Xuất thông tin ban đầu:
- Thực hiện xuất thông tin theo yêu cầu sau:
cout<<"BAN CAN XEM THONG TIN NAO??? "<<endl;
cout<<"1.thong tin nhan vien "<<endl;
cout<<"2.thong tin hang hoa."<<endl;
cout<<"3.thong tin nha cung cap."<<endl;
cout<<"4.thong tin khach hang."<<endl;
cout<<"5.thong tin hoa don nhap."<<endl;
cout<<"6.thong tin hoa don xuat."<<endl;
cout<<"MOI BAN CHON CONG VIEC CAN THUC HIEN: ";cin>>chon;
Begin
i:=1
!fi.eof () Nhập thông tin đối
tượng
i++
n:=i-2
fi.close() //đóng file
End
Trang 32- Thuật toán sau minh họa cho các chức năng 1; 2; 3; 4; 5
Đ
S
Thuật toán sau áp dụng cho công việc hiên thị các mặt hàng xuất , các khách hàng cùng chung một hóa đơn
Chương trình con xuất thông tin hóa đơn xuất theo mã hóa đơn xuất
Chương trình con xuất thông tin một mặt hàng trong hóa đơn xuất
Các chương trình sau sẽ được thiết kế như sau: