Môn học này cung cấp những kiến thức cơ bản và nâng cao về các cấu trúc dữliệu và giải thuật, đồng thời đào tạo sinh viên cách sử dụng chúng một cách hiệu quả.Bằng cách nghiên cứu môn nà
Trang 1BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC ĐẠI NAM
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
TÊN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
CẤP SẢN PHẨM
Ngành: Công nghệ thông tin
Sinh viên thực hiện:
Đặng Văn Tuấn Anh– CNTT 16-03
Mã sinh viên: 1671020011
Giảng viên giảng dạy:
ThS Nguyễn Đình Tuệ
HÀ NỘI, 2023
Trang 2BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC ĐẠI NAM
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
TÊN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
CẤP SẢN PHẨM
Bằng số
Bằng chữ
02 1671020011 Đặng Văn Tuấn Anh 12/10/2004
Cán bộ chấm thi:
ThS Nguyễn Đình Tuệ
HÀ NỘI, 2023
Trang 3LỜI NÓI ĐẦU
Cấu trúc dữ liệu và giải thuật là một trong những môn học cơ bản của sinh viênngành Công nghệ thông tin Các cấu trúc dữ liệu và các giải thuật được xem như là 2 yếu
tố quan trọng nhất trong lập trình, đúng như câu nói nổi tiếng của Niklaus Wirth: Chươngtrình = Cấu trúc dữ liệu + Giải thuật (Programs = Data Structures + Algorithms) Nắmvững các cấu trúc dữ liệu và các giải thuật là cơ sở để sinh viên tiếp cận với việc thiết kế
và xây dựng phần mềm cũng như sử dụng các công cụ lập trình hiện đại
Môn học cấu trúc dữ liệu và giải thuật đóng vai trò quan trọng trong việc xâydựng nền tảng cho các kỹ sư phần mềm và những người làm việc trong lĩnh vực côngnghệ thông tin, giúp họ trở thành những người phát triển phần mềm có kỹ năng và hiểubiết sâu rộng về tối ưu hóa và quản lý dữ liệu
Môn học này cung cấp những kiến thức cơ bản và nâng cao về các cấu trúc dữliệu và giải thuật, đồng thời đào tạo sinh viên cách sử dụng chúng một cách hiệu quả.Bằng cách nghiên cứu môn này, sinh viên sẽ: hiểu rõ hơn về cách hoạt động của cáccấu trúc dữ liệu, nắm vững về giải thuật và thuật toán, phát triển kỹ năng giải quyếtvấn đề, tối ưu hóa hiệu suất chương trình.Để giải quyết các vấn đề nêu trên, cấu trúc dữliệu ra đời để giải cứu Dữ liệu có thể được tổ chức theo cấu trúc dữ liệu theo cách mà tất
cả các mục có thể không được yêu cầu tìm kiếm và dữ liệu cần thiết có thể được tìm kiếmgần như ngay lập tức
Hầu hết các chương trình, ứng dụng hiện nay đều phải có dữ liệu và xử lý chúng, vì vậy Cấu trúc dữ liệu và giải thuật rất quan trọng trong cả học tập và đi làm
Trang 4có thể vững bước sau này.
Với bài tập lớn có đề tài là: Bài toán quản lí nhà cung cấp sản phẩm của em chắcchắn đã không hoàn thiện một cách tốt nhất nếu không có thầy Nguyễn Đình Tuệ- người
đã giảng dạy rất nhiệt tình, năng nổ, hăng say, và đã trực tiếp hướng dẫn em cùng các bạntrong lớp thực hiện làm bài tập lớn một cách hoản chỉnh nhất Bài tập lớn của em chắcchắn sẽ khó thể tránh được những sai sót Em rất mong nhận được những nhận xét và góp
ý từ thầy giúp bài tập lớn của em được hoàn thiện hơn Một lần nữa em xin gửi cảm ơn
và e xin chúc sức khỏe đến thầy Hồ và các thầy, cô trong khoa Công Nghệ Thông Tintrường Đại học Đại Nam
Em xin chân thành cảm ơn!
Trang 5
mục luc
Trang 6MỤC LỤC HÌNH ẢNH
Trang 7CHƯƠNG I GIỚI THIỆU ĐỀ TÀI QUẢN LÝ NHÀ CUNG CẤP SẢN PHẨM
1.1 Giới thiệu đề tài quản lý nhà cung cấp sản phẩm
Quản lý nhà cung cấp sản phẩm là một đề tài quan trọng trong lĩnh vực kinh tế Nóđóng vai trò quan trọng trong việc tổ chức, theo dõi và hỗ trợ khách hàng trong quá trìnhmua bán trao đổi hàng hoá của khách hàng Quản lí nhà cung cấp sản phẩm không chỉđơn thuần là việc lưu trữ thông tin cá nhân của người bán , mà còn liên quan đến việc tạođiều kiện thuận lợi cho của hàng để họ đạt được tiềm năng tối đa
Công nghệ thông tin đóng vai trò quan trọng trong việc quản lí nhà cung cấp sảnphẩm hiệu quả Hệ thống quản lý nhà cung cấp sản phẩm thông minh giúp tự động hóaquá trình thu thập, xử lí và báo cáo thông tin sản phẩm Bằng cách sử dụng các phầnmềm và ứng dụng phù hợp, quản lý sản phẩm được thực hiện một cách nhanh chóng vàchính xác, giúp tiết kiệm thời gian và công sức cho các cơ quan , nhà cung cấp sản phẩm.Tóm lại, quản lí nhà cung cấp sản phẩm là một đề tài quan trọng trong lĩnh vực kinh
tế Nó đóng vai trò quan trọng trong việc quản lý các sản phẩm đảm bảo được sự an toàn,chính xác Qua việc quản lí các nhà cung cấp sản phẩm, theo dõi tiến trình cung cấp cácdịch vụ hỗ trợ , quản lý nhà cung cấp sản phẩm đóng góp vào việc xây dựng một môitrường làm việc và an toàn , số lượng hàng một cách chính xác nhất
1.2 Quản lý thông tin sản phẩm
Quản lý hàng tồn tại: Phần mềm cho phép nhập thông tin về các loại sản phẩm mànhà cung cấp có , bao gồm bao thông tin về tên sản phẩm, danh sách sản phẩm, số lượng,giá cả và nhà cung cấp Nó cũng cung cấp các công cụ để kiểm soát và theo dõi số lượnghàng tồn tại, cảnh báo khi hàng tồn tại ở mức tối thiểu và tạo báo cáo thống kê số lượnghàng tồn tại
1.3 Quản lý thông tin
Hệ thống quản lý thuốc có thể lưu trữ và quản lí thông tin cá nhân của khách hàngnhư tên , địa chỉ, thông tin sản phẩm còn tồn kho
1.4.Tương tác với khách hàng
Hệ thống cung cấp giao diện để khách hàng đăng ký, hủy đăng ký, cập nhật thông tin,
và thanh toán online Nó cũng có thể tích hợp các chức năng hỗ trợ tự động hoặc tròchuyện tự nhiên để giúp khách hàng giải quyết các vấn đề kỹ thuật hoặc yêu cầu hỗ trợ
1.5 Định hướng và cấu trúc dữ liệu, giải thuật
1.5.1 Cấu trúc dữ liệu Stack
Trang 8Stack, được hiểu theo nghĩa Tiếng Việt là ngăn xếp, xếp chồng Đây là cấu trúc dữ liệuhoạt động theo nguyên tắc: vào sau ra trước (Last in first out - LIFO) Để trực quan, cácbạn có thể hiểu nó là một chồng bát, bạn chồng các chiếc bát lên cao thì chiếc bạn chồngvào sau cùng sẽ là chiếc bạn lấy ra đầu tiên và ngược lại, chiếc bát đầu tiên, ở dưới cùng
sẽ là chiếc bạn lấy ra sau cùng
Các thao tác với cấu trúc dữ liệu kiểu stack là:
push: thêm bản ghi, tương tự với việc bạn thêm một chiếc bát vào chồng
pop: lấy bản ghi, tương tự lấy bát ra khỏi chồng
length: trả về số lượng bản ghi, tương ứng với chiều cao chồng bát
peak: trở về bản ghi đầu tiên, tương ứng với việc bạn chạm tay vào chiếc bát trên cùng
Ứng dụng của stack:
Chuyển đổi số thập phân sang nhị phân: Khi chuyển đổi số thập phân sang nhị phân, chúng ta sẽ thưc hiện thao tác chia số thập phân này cho 2 và viết phần dư ngược lại thứ tự mà nó được sinh ra Sử dụng stack, ta lưu lần lượt phần dư sau mỗi lần chia và sau khi kết thúc thao tác chia, đọc stack vừa rồi sẽ cho ra biểu diễnnhị phân cần tìm
Tính giá trị biểu thức đại số hậu tố: Biểu thức đại số hậu tố là biểu thức có toán tử nằm sau 2 toán hạng của nó, cũng không có dấu ngoặc Ví dụ như biểu thức hậu tốcủa ((4 + 2) / 3) + 5 sẽ là 4 2 + 3 / 5 + Đầu tiên, duyệt biểu thức theo thứ tự từ tráisang phải, khi gặp toán hạng thì đẩy vào stack Sau đó, khi gặp toán tử, ta lấy 2 toán hạng trên cùng trong stack ra và thực hiện phép toán rồi lại đẩy kết quả vào stack Đối với ví dụ này, các thao tác được thực hiện là:
Trang 9Đầu vào Thao tác Stack
Kết quả cuối cùng là 7
Một stack sẽ hỗ trợ các thao tác cơ bản sau:
Thêm phần tử vào cuối stack
Loại bỏ phần tử cuối ra khỏi stack
Lấy giá trị cuối trong stack
Lấy kích thước stack
Các phương thức cơ bản trong stack của C++:
push: Thêm phần tử vào cuối stack
pop: Loại bỏ phần tử cuối stack
top: Trả về giá trị là phần tử cuối trong stack
size: Trả về giá trị nguyên là số phần tử đang có trong stack
empty: Trả về một giá trị bool, true nếu stack rỗng, false nếu stack không rỗng
1.5.2 Giải thuật
Giải thuật cũng đóng vai trò quan trọng trong quản lý nhà cung cấp sản phẩm Các giảithuật được áp dụng để thực hiện các chức năng như thêm sản phẩm, cập nhật thông tin,xóa sản phẩm, tìm kiếm thông tin, tính số lượng tồn kho và thông tin nhà cung cấp
Tóm lại, quản lí nhà cung cấp sản phẩm là một đề tài quan trọng trong lĩnh vực kinh
tế Nó đóng vai trò quan trọng trong việc quản lý các sản phẩm đảm bảo được sự an toàn,chính xác Qua việc quản lí các nhà cung cấp sản phẩm, theo dõi tiến trình cung cấp cácdịch vụ hỗ trợ , quản lý nhà cung cấp sản phẩm đóng góp vào việc xây dựng một môitrường an toàn , tiện ích , nhanh chóng một cách chính xác nhất
Trang 10CHƯƠNG 2 PHÂN TÍCH ĐỀ TÀI QUẢN LÝ NHÀ CUNG CẤP SẢN
PHẨM 2.1 các dữ liệu lưu trữ
2.1.1 Dữ liệu cần quản lý và lưu trữ sản phẩm gồm
Sản phẩm: (char),
Nhà cung cấp: (char),
Đơn giá : (float),
2.2.2 Bộ dữ liệu lưu trữ trong tệp văn bản
In ra số lượng danh sách mà bạn đã điền lúc đó
2.3.3 Thêm vào đầu danh sách
Cho người dung thêm nhập vào:Tên sản phẩm,nhà cung cấp,đơn giá
2.3.4 Thêm vào cuối danh sách
Cho người dùng nhập thêm vào:Tên sản phẩm,nhà cung cấp,đơn giá
2.3.5 Thêm phần tử vào vị trí bất kì trong danh sách
Nhập vị trí muốn chèn them vào danh sách bạn đã ghi ra trước đó
2.3.6 Xóa phần tử theo tên sản phẩm
Chọn phần tử theo tên sản phẩm muốn xoá đã xóa hoặc không tìm thấy tên sảnphẩm muốn xóa
2.3.7 Xóa phần tử theo nhà cung cấp
Trang 11Chọn phần tử theo nhà cung cấp muốn xoá đã xóa hoặc không tìm thấynhà cung cấp muốn xóa.
2.3.8 Xóa phần tử theo vị trí được chỉ định
Nhập vị trí của sản phẩm xóa đã xóa hoặc không tìm thấy vị trí của sảnmuốn xóa
2.3.9 Tìm kiếm phần tử theo tên sản phẩm
Nhập tên sản phẩm để tìm kiếm
Nếu tìm thấy: Hiện thông tin như Đã tìm thấy:tên sản phẩm, nhà cung cấp , đơn:
giá
Nếu không tìm thấy: Hiện: Không tìm thấy tên sản phẩm đã nhập.
2.3.10 Tìm kiếm phần tử theo tên của nhà cung cấp
Nhập tên nhà cung cấp để tìm kiếm
Nếu tìm thấy: tim thay tên nhà cung cấp: tên sản phẩm , nhà cung cấp , đơn giá Nếu không tìm thấy: khong tim thay nhà cung cấp.
2.3.11 Xuất file sách vào file
Nhập tên file đã lưu
2.3.12 Thoát chương trình
Cho phép bạn thoát chương trình
2.3.13 Thiết kế menu
Trang 12CHƯƠNG 3 PHÂN TÍCH CHƯƠNG TRÌNH QUẢN LÍ NHÀ CUNG CẤP
SẢN PHẨM 3.1 Cấu trúc dữ liệu và khai báo thư viện:
Bắt đầu bằng việc khai báo các thư viện cần thiết của ngôn ngữ lập trình C++.Điều này bao gồm những thư viện hỗ trợ cho các cấu trúc dữ liệu và các chức năng xử lý
Chức năng này cho phép hiển thị danh sách tên sản phẩm,nhà cung cấp, đơn giá
3.5 Thêm vào đầu danh sách và chèn vào cuối danh sách:
Đây là hai chức năng để thêm điện thoại mới vào danh sách Thêm vào đầu danhsách có thể yêu cầu di chuyển con trỏ hoặc cập nhật tham chiếu, trong khi chèn vào cuốidanh sách đơn giản hơn
3.6 Xóa điện thoại theo tên sản phẩm :
Cung cấp khả năng xóa tên sản phẩm khỏi danh sách dựa trên mã hoặc tên sảnphẩm Điều này có thể yêu cầu duyệt qua danh sách để tìm và xóa phần tử
3.7 Xóa điện thoại theo nhà cung cấp :
Cung cấp khả năng xóa nhà cung cấp khỏi danh sách dựa trên mã hoặc tên sảnphẩm Điều này có thể yêu cầu duyệt qua danh sách để tìm và xóa phần tử
3.8 Tìm kiếm theo tên sản phẩm, tìm kiếm theo nhà cung cấp:
Cung cấp khả năng tìm kiếm điện thoại dựa trên mã hoặc hãng sản xuất Yêu cầutìm kiếm trong danh sách và trả về kết quả phù hợp
3.9 Xuất danh sách sản phẩm vào tệp:
Chức năng này cho phép lưu danh sách sản phẩm hiện tại vào một tệp văn bảnhoặc một loại tệp khác để lưu trữ thông tin
3.10 Thoát khỏi chương trình:
Kết thúc chương trình và thoát khỏi giao diện người dùng Chương trình này cungcấp một loạt các chức năng quản lý danh sách điện thoại thuận tiện cho người dùng vàyêu cầu sử dụng các cấu trúc dữ liệu và thuật toán cơ bản để thực hiện chúng
Trang 13CHƯƠNG 4 MÃ NGUỒN VÀ KẾT QUẢ CỦA BÀI TOÁN XÂY DỰNG QUẢN LÍ NHÀ CUNG CẤP SẢN PHẨM
4.1 Mã nguồn
Các thư viện để xây dựng bài toán
Hình 4.1 Các thư viện của bài toán.
4.1.1 Mã nguồn về cấu trúc dữ liệu
Hình 4.2 Mã nguồn về cấu trúc dữ liệu.
4.1.2 Mã nguồn về khởi tạo và nhập dữ liệu với n phần tử
Hình 4.3 Mã nguồn về khởi tạo và nhập dữ liệu với n phần tử.
Trang 144.1.3 Mã nguồn về hem phần tử vào đầu danh sách
Hình 4.4 Mã nguồn về thêm phần tử vào đầu danh sách 4.1.4 Mã nguồn về hiển thị danh sách n phần tử ra màn hình
Hình 4.5 Mã nguồn về hiển thị danh sách n phần tử ra màn hình 4.1.5 Mã nguồn về thêm phần tử vào cuối danh sách
Hình 4.6 Mã nguồn về thêm phần tử vào cuối danh sách.
Trang 154.1.6 Mã nguồn về them phần tử vào vị trí bất kì
Hình 4.7 Mã nguồn về thêm phần tử vào vị trí bất kì 4.1.7 Mã nguồn về xóa phần tử theo tên sản phẩm
Hình 4.8 Mã nguồn về xóa phần tử theo tên sản phẩm.
Trang 164.1.8 Mã nguồn về xóa phần tử theo nhà cung cấp
Hình 4.9 Mã nguồn về xóa phần tử theo tên 4.1.9 Mã nguồn về xóa phần tử tại vị trí bất kì
Hình 4.10 Mã nguồn về xóa phần tử tại vị trí bất kì.
Trang 174.1.11 Mã nguồn về tìm kiếm phần tử theo tên sản phẩm
Hình 4.12 Mã nguồn về tìm kiếm phần tử theo tên sản phẩm 4.1.13 Mã nguồn về tìm kiếm phần tử theo nhà cung cấp
Hình 4.14 Mã nguồn về tìm kiếm phần tử theo nhà cung cấp 4.1.14 Mã nguồn về ghi danh sách dữ liệu vào file
Hình 4.15 Mã nguồn về ghi danh sách dữ liệu vào file.
Trang 184.1.17 Mã nguồn về hàm main
Trong hàm main này sẽ có cấu trúc Swich- case.
Trước hết tạo menu để hiển thị các chức năng của bài toán quản lý số điện thoại thuê bao.
Hình 4.18 Menu để hiển thị các chức năng của bài toán quản lý số điện thoại thuê bao.
Trong menu để có thể liên kết được cần có các Case
Case 1:
Hình 4.19 Mã nguồn về lựa chọn 1 trong menu.
Kết quả:
Trang 19Hình 4.20 Kết quả của lựa chọn 1.
Trang 20Kiểm tra lại danh sách:
Hình 4.25 Kết quả của lựa chọn 3(tiếp).
Phần tử đã được thêm vào đầu danh sách
Case 4:
Hình 4.26 Mã nguồn về lựa chọn 4 trong menu.
Kết quả:
Hình 4.27 Kết quả của lựa chọn 4.
Kiểm tra lại danh sách:
Hình 4.28 Kết quả của lựa chọn 4(tiếp).
Case 5:
Trang 21Hình 4.29 Mã nguồn về lựa chọn 5 trong menu.
Kết quả:
Hình 4.30 Kết quả của lựa chọn 5.
Kiểm tra lại danh sách:
Hình 4.31 Kết quả của lựa chọn 5(tiếp).
Case 6:
Hình 4.32 Mã nguồn về lựa chọn 6 trong menu.
Trang 22Kết quả:
Hình 4.33 Kết quả của lựa chọn 6.
Kiểm tra lại danh sách:
Hình 4.34 Kết quả của lựa chọn 6( tiếp).
Case 7:
Hình 4.35 Mã nguồn về lựa chọn 7 trong menu.
Kết quả:
Hình 4.36 Kết quả của lựa chọn 7.
Kiểm tra lại danh sách:
Hình 4.37 Kết quả của lựa chọn 7(tiếp).
Case 8:
Trang 23Hình 4.38 Mã nguồn về lựa chọn 8 trong menu.
Kết quả :
Hình 4.39 Kết quả của lựa chọn 8.
Kiểm tra lại danh sách:
Hình 4.40 Kết quả của lựa chọn 8(tiếp).
Trang 24Hình 4.43 Kết quả của lựa chọn 9(tiếp).
Trang 25Hình 4.48 Mã nguồn về lựa chọn 12 trong menu.
Hình 4.51 Kết quả của lựa chọn 13.
Khi đó file đã lưu trên sẽ được lưu vào cùng file chạy BTL
Hình 4.52 Kết quả của lựa chọn 13(tiếp).
Case 14:
Trang 26Hình 4.53 Mã nguồn về lựa chọn 14 trong menu.
Kết quả:
Hình 4.54 Kết quả của lựa chọn 14.
Kiểm tra lại danh sách sau khi đã sắp xếp:
Hình 4.55 Kết quả của lựa chọn 14( tiếp).
Xếp theo chiều giảm dần:
Hình 4.56 Kết quả của lựa chọn 14(tiếp).
Kiểm tra lại danh sách:
Hình 4.57 Kết quả của lựa chọn 14(tiếp).
Case 15:
Hình 4.58 Mã nguồn về lựa chọn 15 trong menu.
Trang 27Kết quả:
Hình 4.59 Kết quả của lựa chọn 15.
Case 0:
Hình 4.60 Mã nguồn về lựa chọn 0 trong menu.
Cuối cùng mã nguồn kết thúc hàm main
Hình 4.61 Mã nguồn về hàm main
Trang 28TÀI LIỆU THAM KHẢO
1 Barry Boone , Java Essentials for C and C++ Programmers, Wesley 1996
Addition-2 Đoàn Văn Ban, phân tích, thiết kế, lập trình hướng đối tượng, nhà xuấtbản Thống Kê, 1997
3 S.Horstman, G.Cornell, Java Volume I,II,Sun Java Series, Pretice Hall,2000
4 James Gosling, Frank Yellin, The Java Application ProgrammingInterface, volume I,II, Addition-Wesley, 1996
5 Dennis Kafura, Object-Oriented Software Design and Construction withJava, Prentice Hall, 2000