CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI1.Giới thiệu Trong thời đại số hóa ngày nay, việc quản lý thông tin sản phẩm một cách hiệu quả là yếu tố quan trọng hàng đầu đối với các doanh nghiệp.. Với
Trang 1NGÂN HÀNG NHÀ NƯỚC VIỆT NAM
TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP HỒ CHÍ MINH KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
ĐỀ TÀI BÁO CÁO MÔN HỌC
ĐỀ TÀI 2 Nhóm: Nhóm 12 Lớp học phần: ITS318_241_1_D05 Giáo viên giảng dạy: Bùi Hữu Đông
Trang 2STT HỌ TÊN MSSV CÔNG
VIỆC
MỨC ĐỘ HOÀN THÀNH
CÔNG VIỆC
Trang 3Mục Lục
LỜI MỞ ĐẦU 1
LỜI CẢM ƠN 1
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 2
1.Giới thiệu 2
2 Mục tiêu và phạm vi của dự án: 2
3.Các chức năng chính của chương trình 3
CHƯƠNG 2: Phân tích thiết kế 4
2.1 Cấu trúc dữ liệu: 4
2.2 Giải thuật: 4
Ưu điểm và nhược điểm của Bubble Sort: 5
2.3 Mô tả các chức năng: 5
Nhập sản phẩm: 5
CHƯƠNG 3: TRIỂN KHAI 9
3.1 Ngôn ngữ lập trình: C/C++ 9
3.2 Mô tả code: 10
Cách thức hoạt động 11
Cải tiến 12
3.3 Ví dụ code 12
CHƯƠNG 4 Kết quả và đánh giá 13
4.1 Kết quả: 13
4.2 Đánh giá: 15
CHƯƠNG 5 Kết luận 17
Trang 4LỜI MỞ ĐẦU
Trong thời đại số, việc quản lý thông tin sản phẩm một cách hiệu quả là vô cùng quan trọng Để đáp ứng nhu cầu này, Nhóm đã xây dựng một ứng dụng quản lý thông tin sản phẩm bằng ngôn ngữ C++ Ứng dụng này không chỉ hỗ trợ các chức năng cơ bản như nhập, xuất, sắp xếp dữ liệu mà còn cung cấp các tính năng nâng cao như tìm kiếm
và lưu trữ thông tin
Qua ứng dụng này, chúng em mong muốn cung cấp một giải pháp đơn giản và hiệu quả cho việc quản lý thông tin sản phẩm, giúp các doanh nghiệp tiết kiệm thời gian và nâng cao hiệu quả công việc
LỜI CẢM ƠN
Không có sự thành công nào mà không gắn liền với những sự hỗ trợ, sự giúp đỡ dù ít hay nhiều, dù là trực tiếp hay gián tiếp của người khác Trong suốt thời gian từ khi bắt đầu học tập ở giảng đường Đại học đến nay, nhóm em đã nhận được rất nhiều sự quan tâm, giúp đỡ của thầy cô và mọi người xung quanh
Và đặc biệt, trong kỳ này, em được tiếp cận với môn học rất
hữu ích đối với sinh viên ngành Hệ Thống Thông Tin Quản Lý Đó là môn: “Cơ sở lập trình”
Nhóm xin chân thành cảm ơn thầy Bùi Hữu Đông đã tận tâm hướng dẫn
chúng em qua từng buổi học trên lớp cũng như những buổi nói chuyện, thảo
luận về môn học Trong thời gian được học tập và thực hành dưới sự hướng dẫn
của Thầy, không những tiếp thu được rất nhiều kiến thức bổ ích, mà còn được
truyền sự say mê và thích thú đối với bộ môn “Cơ sở lập trình” Nếu
không có những lời hướng dẫn của Thầy thì báo cáo này rất khó có thể hoàn thành được Tuy nhiên do chưa có nhiều kinh nghiệm và còn nhiều sự hạn chế về sự hiểu biết về kiến thức chuyên ngành vì vậy bài báo cáo không thể tránh khỏi những sai sót về bố cục cũng như nội dung Nhóm em rất mong nhận được lời nhận xét, ý kiến đóng góp từ phía Thầy
để bài báo cáo được hoàn thiện hơn
Nhóm em xin chân thành cảm ơn Thầy
Trang 5CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.Giới thiệu
Trong thời đại số hóa ngày nay, việc quản lý thông tin sản phẩm một cách hiệu quả là yếu tố quan trọng hàng đầu đối với các doanh nghiệp Để đáp ứng nhu cầu này, chúng
em đã xây dựng một phần mềm quản lý sản phẩm thông minh, thông qua việc sử dụng ngôn ngữ lập trình C/C++
Đây không chỉ đơn thuần là một công cụ nhập liệu và lưu trữ dữ liệu, mà còn là một trợ
lý đắc lực cho các nhà quản lý trong việc đưa ra quyết định kinh doanh Với giao diện trực quan và dễ sử dụng, phần mềm cho phép người dùng nhanh chóng nhập thông tin chi tiết về từng sản phẩm, từ mã sản phẩm, tên sản phẩm, giá cả cho đến ngày sản xuất
và mô tả sản phẩm
Nhưng điều gì khiến phần mềm này trở nên đặc biệt?
Sắp xếp thông minh: Phần mềm sử dụng thuật toán sắp xếp nổi tiếng Bubble
Sort để tự động sắp xếp danh sách sản phẩm theo giá cả, giúp người dùng dễ dàng tìm kiếm và so sánh sản phẩm
Tìm kiếm nhanh chóng: Chỉ với vài cú click chuột, bạn có thể tìm thấy sản
phẩm mình cần, kể cả khi bạn chỉ nhớ một phần tên sản phẩm hoặc một khoảng giá nhất định
Báo cáo chi tiết: Phần mềm cung cấp các báo cáo thống kê về tình hình tồn kho,
doanh thu, giúp bạn nắm bắt được tình hình kinh doanh của cửa hàng một cách tổng quan
Lưu trữ dữ liệu an toàn: Tất cả dữ liệu sản phẩm đều được lưu trữ một cách an
toàn và bảo mật, giúp bạn yên tâm về tính chính xác và bảo mật của thông tin
2 Mục tiêu và phạm vi của dự án:
Mục tiêu của đề tài là xây dựng một phần mềm quản lý thông tin sản phẩm đơn giản, giúp người dùng dễ dàng quản lý và theo dõi thông tin các sản phẩm
Các mục tiêu cụ thể:
Trang 6 Nâng cao hiệu quả quản lý: Giúp doanh nghiệp tối ưu hóa quy trình quản lý sản
phẩm, giảm thiểu sai sót và tiết kiệm thời gian
Hỗ trợ ra quyết định: Cung cấp các thông tin cần thiết để giúp doanh nghiệp đưa
ra các quyết định kinh doanh sáng suốt hơn
Tăng tính cạnh tranh: Giúp doanh nghiệp quản lý sản phẩm một cách chuyên
nghiệp, nâng cao hình ảnh và uy tín của doanh nghiệp trên thị trường
Ngoài ra, thông qua việc áp dụng thuật toán sắp xếp Bubble Sort, sinh viên sẽ hiểu rõ hơn về cách hoạt động của thuật toán và rèn luyện kỹ năng lập trình Đồng thời, đề tài cũng giúp làm quen với các thao tác cơ bản khi làm việc với dữ liệu, như đọc, ghi dữ liệu vào file Đề tài này không chỉ giúp sinh viên nâng cao kiến thức chuyên môn mà còn trang bị thêm những kỹ năng cần thiết để giải quyết các bài toán thực tế liên quan đến quản lý dữ liệu
Phạm vi của bài toán bao gồm việc thiết kế và triển khai một chương trình C/C++ để quản lý thông tin của các sản phẩm, với các thuộc tính cơ bản như mã sản phẩm, tên sản phẩm, giá, ngày sản xuất và mô tả sản phẩm Chương trình cần thực hiện các chức năng nhập liệu, xuất dữ liệu, sắp xếp dữ liệu theo giá tăng dần và lưu trữ dữ liệu vào file Mặc
dù tập trung vào các chức năng cơ bản, bài toán này đã đặt nền tảng cho việc xây dựng các hệ thống quản lý thông tin sản phẩm phức tạp hơn trong tương lai
3.Các chức năng chính của chương trình.
Các chức năng chính của chương trình bao gồm:
Nhập liệu: Cho phép người dùng nhập thông tin chi tiết của từng sản phẩm, bao
gồm mã sản phẩm, tên sản phẩm, giá, ngày sản xuất và mô tả
Xuất dữ liệu: Hiển thị toàn bộ danh sách các sản phẩm đã được nhập, hoặc danh
sách các sản phẩm đáp ứng các tiêu chí tìm kiếm cụ thể
Sắp xếp dữ liệu: Sắp xếp danh sách sản phẩm theo thứ tự tăng dần của giá, giúp
người dùng dễ dàng so sánh và phân loại sản phẩm Thuật toán sắp xếp Bubble Sort được sử dụng để thực hiện công việc này
Tìm kiếm dữ liệu: Cho phép người dùng tìm kiếm các sản phẩm dựa trên các tiêu
chí như giá, tên sản phẩm hoặc các tiêu chí khác
Trang 7 Lưu trữ dữ liệu: Lưu trữ toàn bộ thông tin về các sản phẩm vào một file dữ liệu,
đảm bảo tính bảo mật và khả năng truy xuất dữ liệu khi cần thiết
CHƯƠNG 2: Phân tích thiết kế
2.1 Cấu trúc dữ liệu:
Mô tả cấu trúc dữ liệu được sử dụng để lưu trữ thông tin sản phẩm (ví dụ: struct, class) Giải thích tại sao lại chọn cấu trúc dữ liệu đó
CẤU TRÚC DỮ LIỆU, MẢNG, VÒNG LẶP, ĐIỀU KIỆN, HÀM, FILE, THUẬT TOÁN BUBBLE SORT
Cấu trúc dữ liệu chính:
Mảng (array) của các đối tượng SanPham: Đây là cấu trúc dữ liệu được sử dụng
để lưu trữ danh sách các sản phẩm Mỗi phần tử trong mảng là một đối tượng SanPham chứa đầy đủ thông tin về một sản phẩm Mảng được lựa chọn do nó có tính đơn giản với cấu trúc dữ liệu cơ bản và dễ hiểu, có thể truy cập trực tiếp đến bất kỳ phần tử nào trong mảng bằng chỉ số
Các cấu trúc dữ liệu khác (gián tiếp):
Đối tượng SanPham: Mặc dù không phải là một cấu trúc dữ liệu độc lập, nhưng
đối tượng SanPham đóng vai trò quan trọng trong việc tổ chức dữ liệu Nó định nghĩa một kiểu dữ liệu mới, đại diện cho một sản phẩm và chứa các thuộc tính như mã, tên, giá, ngày sản xuất, mô tả
2.2 Giải thuật:
Trang 8Thuật toán Bubble Sort hoạt động bằng cách so sánh từng cặp phần tử liền kề trong
danh sách và đổi chỗ chúng nếu chúng ở thứ tự sai Quá trình này được lặp đi lặp lại cho đến khi danh sách được sắp xếp hoàn toàn
1 So sánh và đổi chỗ:
1 Thuật toán bắt đầu từ phần tử đầu tiên của danh sách sản phẩm.
2 So sánh giá của hai sản phẩm liền kề.
3 Nếu giá của sản phẩm thứ hai nhỏ hơn giá của sản phẩm thứ nhất (trong
trường hợp sắp xếp tăng dần), thì đổi chỗ hai sản phẩm này
4 Tiếp tục quá trình so sánh và đổi chỗ cho các cặp phần tử còn lại trong danh
sách
2 Lặp lại quá trình:
1 Sau khi hoàn thành một vòng lặp, phần tử lớn nhất sẽ được "nổi bọt" lên cuối danh sách
2 Lặp lại quá trình trên cho đến khi không có cặp phần tử nào cần đổi chỗ nữa, tức là danh sách đã được sắp xếp hoàn toàn
Ưu điểm và nhược điểm của Bubble Sort:
Ưu điểm:
o Dễ hiểu và dễ triển khai
Nhược điểm:
o Hiệu suất thấp với các danh sách lớn, đặc biệt là khi danh sách đã được sắp xếp gần như hoàn toàn
o Số lượng so sánh và đổi chỗ không tối ưu
2.3 Mô tả các chức năng:
Nh ập sận phậm:
Khai báo mảng:
Một mảng các đối tượng SanPham với kích thước tối đa MAX_PRODUCTS được khai báo để lưu trữ thông tin của các sản phẩm
Trang 9Hàm nhapSanPham:
Nhập số lượng sản phẩm: Người dùng được yêu cầu nhập vào số lượng sản
phẩm cần nhập thông tin
Vòng lặp nhập từng sản phẩm: Một vòng lặp for được sử dụng để lặp qua
từng sản phẩm Trong mỗi lần lặp:
o Gọi phương thức nhap() của đối tượng SanPham hiện tại để nhập thông tin chi tiết cho sản phẩm đó
o Phương thức nhap() sẽ yêu cầu người dùng nhập lần lượt các thông tin: mã sản phẩm, tên sản phẩm, giá, ngày sản xuất và mô tả
o Thông tin nhập được sẽ được gán vào các thuộc tính tương ứng của đối tượng SanPham
Lưu trữ thông tin:
Sau khi nhập xong thông tin của một sản phẩm, thông tin đó sẽ được lưu vào một phần tử của
Xuất sản phẩm:
Nhận đầu vào: Hàm xuatSanPham nhận hai tham số:
SanPham sanPham[]: Mảng các đối tượng SanPham chứa thông tin về các sản phẩm
int count: Số lượng sản phẩm trong mảng
Duyệt qua mảng: Hàm sử dụng một vòng lặp for để duyệt qua từng phần tử
trong mảng sanPham
Hiển thị thông tin: Trong mỗi lần lặp, hàm gọi phương thức xuat() của đối
tượng SanPham hiện tại Phương thức xuat() in ra các thông tin của sản phẩm như sau:
Mã sản phẩm
Tên sản phẩm
Giá sản phẩm
Ngày sản xuất
Trang 10 Mô tả sản phẩm
Một đường kẻ ngang để phân cách các sản phẩm
Kết thúc: Sau khi duyệt xong toàn bộ mảng, hàm xuatSanPham kết thúc.
Sắp xếp sản phẩm:
Hàm bubble_sort:
Nhận đầu vào: Hàm này nhận vào mảng các đối tượng SanPham và số lượng
sản phẩm trong mảng
Vòng lặp ngoài: Vòng lặp này lặp qua từng phần tử của mảng, trừ phần tử
cuối cùng, vì phần tử cuối cùng luôn đã được sắp xếp ở các lần lặp trước
Vòng lặp trong: Vòng lặp này so sánh từng cặp phần tử liền kề trong đoạn
chưa sắp xếp Nếu giá trị của phần tử trước lớn hơn phần tử sau, thì hai phần tử này sẽ được đổi chỗ cho nhau
Quá trình lặp lại: Các vòng lặp trên được lặp đi lặp lại cho đến khi không còn
cặp phần tử nào cần đổi chỗ, tức là mảng đã được sắp xếp hoàn toàn
Nguyên lý hoạt động của bubble sort:
Thuật toán này hoạt động giống như việc các bọt khí nhẹ hơn dần dần nổi lên trên trong một cốc nước
Trong mỗi lần lặp, phần tử lớn nhất sẽ "chìm" xuống cuối danh sách
Quá trình này được lặp lại cho đến khi không còn phần tử nào cần đổi chỗ nữa
Lọc sản phẩm có giá không trùng:
Hàm sanPhamCoGiaKhacNhau:
Có chức năng tìm kiếm và hiện thị các sản phẩm nhập từ bàn phím với những mức giá không bị trùng lặp Trong trường hợp xuất hiện các sản phẩm với cùng
Trang 11mức giá thì hàm sẽ chỉ hiển thị ra màn hình sản phẩm sau khi nhập mức giá đầu tiên và đồng thời thực hiện việc bỏ qua các sản phẩm đồng giá còn lại
Cách thức hoạt động của hàm:
1 Đầu tiên thực hiện bước duyệt từng sản phẩm: Bằng cách sử dụng vòng lặp for để kiểm tra các sản phẩm trong mảng sanPham
2 Tiếp đến thực hiện việc kiểm tra sự trùng lặp giá:
Các sản phẩm từ vị trí i sẽ được chương trình tạo cho mọt biến check magn giá trị true để kiểm tra giá sản phẩm hiện tại từ (sanPham[i].giaSanPham) có mang giá trị trùng lặp với bất kì giá cả của các loại sản phẩm trước đó không
Tiếp tục sử dụng vòng lặp for bên trong để kiểm tra các sản phẩm từ
0 đến i – 1 Nếu trong quá trình này phát hiện ra sản phẩm đồng giá (sanPham[j].giaSanPham == sanPham[i].giaSanPham) đứng trước thì
sẽ ngay lập tức chuyển thành giá trị false, với mục đích báo cáo giá trị này đã được in ra từ trước
3 Cuối cùng, in sản phẩm ra màn hình:
Sau khi thực hiện check tất cả các sản phẩm vẫn trả vể true, có thể hiểu được rằng giá trị i hiện tại không bị trùng lặp Sau đó, hàm sanPham[i].xuat() sẽ được gọi ra thực hiện bước in thông tin sản phẩm
Trường hợp vẫn xuất hiện giá trị false sẽ lập tức bác bỏ
Hiển thị top 10 sản phẩm có giá lớn nhất:
Mục đích của top10SanPhamGiaCaoNhat:
Lấy ra và hiển thị danh sách 10 sản phẩm có giá cao nhất trong danh sách tổng Trường hợp danh sách không đủ 10 sản phẩm thì hàm thực hiện việc in ra danh sách các sản phẩm theo thứ tự giá giảm dần từ giá cao đến giá thấp nhất
Cách thức hoạt động của hàm top10SanPhamGiaCaoNhat:
1 Sắp xếp sản phẩm theo giá:
Việc thực hiện các sản phẩm theo giá đã được hoàn thành bởi hàm bubble_sort Các sản phẩm có giá trị cao nhất sẽ được xếp cuối bảng khi in ra
2 Xác định số lượng các sản phẩm in ra:
Trang 12 Biến top10SanPham sẽ được xác định thông qua (dem < 10) ? dem : 10 Mục đích kiểm tra xem nếu số lượng (dem) của sản phẩm nhỏ hơn 10 thì top10SanPham sẽ bằng dem, ngược lại sẽ hiển thị giá trị 10
2 Thực hiện việc duyệt toàn bộ và hiển thị 10 sản phẩm trong danh sách:
Sau khi có kết quả top10SanPham từ bước 2 sẽ thực hiện vòng lặp for chạy từ dem – top10SanPham đến dem – 1, hiển thị top10SanPham cuối cùng trong mảng cũng là 10 sản phẩm có giá trị cao nhất khi sắp xếp
3 In thông tin sản phẩm: in toàn bộ top 10 sau khi đã được sắp xếp qua xuat()
Lưu sản phẩm vào file:
Cách thức hoạt động:
1 Đầu tiên ta tạo một biến check mang giá trị true
2 Tiếp tục việc thực hiện chạy vòng lặp for, với giá trị i = 0
3 Nếu giá ở cả 2 sản phẩm từ vị tri i và j đều bằng nhau thì hàm luuDanhSach trả ra giá trị false, ngược lại nếu giá trị ở hai vị trí này khác nhau thì sẽ thực hiện việc trả ra các sản phẩm với giá trị khác nhau
CHƯƠNG 3: TRIỂN KHAI
3.1 Ngôn ngữ lập trình: C/C++
Lập trình hướng đối tượng (OOP):
· Lớp (class): Đoạn code đã định nghĩa lớp SanPham để mô hình hóa một sản
phẩm Lớp này đóng vai trò như một bản thiết kế, chứa các thuộc tính (mã, tên, giá ) và các hành vi (nhập liệu, xuất liệu) của một sản phẩm
Đối tượng (object): Khi bạn khai báo một mảng các đối tượng SanPham, bạn
thực sự đang tạo ra các sản phẩm cụ thể dựa trên bản thiết kế của lớp
Các kiểu dữ liệu:
Kiểu số: int (số nguyên), double (số thực) được sử dụng để lưu trữ mã sản phẩm,
giá
Trang 13 Kiểu chuỗi: string được sử dụng để lưu trữ tên sản phẩm, mô tả, ngày sản xuất.
Các câu lệnh điều khiển:
Câu lệnh rẽ nhánh: if-else được sử dụng để đưa ra các quyết định dựa trên điều
kiện Ví dụ: kiểm tra xem có nên thực hiện sắp xếp hay không
Vòng lặp: for được sử dụng để lặp qua các phần tử trong mảng, thực hiện các tác
vụ như nhập liệu, xuất liệu, sắp xếp
Hàm:
Hàm chính main(): Là điểm bắt đầu của chương trình.
Các hàm con: nhapSanPham(), xuatSanPham(), bubble_sort(), thực hiện các
nhiệm vụ cụ thể
Mảng:
Dùng để lưu trữ nhiều đối tượng SanPham, tạo thành một danh sách các sản phẩm
File:
Thư viện fstream được sử dụng để đọc và ghi dữ liệu vào file, lưu trữ thông tin sản phẩm một cách lâu dài
Các thư viện chuẩn:
iostream: Để thực hiện các thao tác nhập xuất dữ liệu
string: Để xử lý các chuỗi ký tự
fstream: Để làm việc với các file
3.2 Mô tả code:
Lớp SanPham:
o Đại diện cho một sản phẩm cụ thể
o Các thuộc tính: maSanPham, tenSanPham, giaSanPham, ngaySanXuat, moTa