TỔNG QUAN VỀ ĐỀ TÀI
Đặt vấn đề
Mong muốn áp dụng công nghệ thông tin vào mọi lĩnh vực nhằm nâng cao năng suất và cải thiện quy trình vận hành, công tác quản lý kho trở nên thiết yếu đối với các tổ chức kinh tế và nhà nước Hiện nay, quy trình quản lý kho vẫn chủ yếu thực hiện thủ công, với việc nhân viên nhập kho bằng tay và kiểm kê hàng hóa trên giấy tờ, dẫn đến khó khăn trong việc cập nhật số lượng hàng tồn và quản lý sản phẩm lỗi Để khắc phục vấn đề này, giám đốc kho hàng yêu cầu phát triển phần mềm quản lý kho, giúp tin học hóa các công việc như quản lý nhà cung cấp, nhập kho, kiểm kê và xuất kho, đồng thời cho phép tra cứu số lượng hàng tồn tại mọi thời điểm Phần mềm cũng cần cung cấp báo cáo hàng tháng về số lượng hàng tồn, hàng nhập và xuất kho.
Giải pháp
Nhằm đáp ứng nhu cầu quản lý hiệu quả, nhóm đã quyết định phát triển một phần mềm cho phép nhà quản lý theo dõi và quản lý nhà cung cấp, kiểm soát số lượng hàng nhập kho và xuất kho, đồng thời nắm bắt được tình hình hàng tồn kho.
Phạm vi
Xây dựng phần mềm hỗ trợ quản lý kho đáp ứng những yêu cầu sau:
- Quản lý thông tin nhà cung cấp sản phẩm
- Quản lý số lượng hàng nhập kho
- Quản lý số lượng hàng tồn kho đồng thời có thể xuất ra báo cáo đáng tin cậy và tự động
- Quản lý số lượng hàng xuất
- Thông tin được lưu trữ trong cơ sở dữ liệu, giúp truy xuất, sao lưu và phục hồi dễ dàng, đồng bộ, nhanh chóng và đáng tin cậy
- Thông báo số lượng hàng dưới mức quy định, hoặc gần hết hạn sử dụng.
Công cụ xây dựng
Trong quá trình thực hiền đồ án, nhóm đã sử dụng một số công cụ để phục vụ cho việc tìm hiểu và xây dựng đề tài như sau:
- Front-end: WPF – library Material Design XAML
- Back-end: ADO.NET Entity Framework
- Lập trình bằng ngôn ngữ: C#
- Sử dụng hệ cơ sở dữ liệu SQLSERVER
- Sử dụng github trong quá trình làm việc nhóm
WPF (Windows Presentation Foundation) là thư viện lập trình giao diện đồ họa có trong Microsoft.NET Framework từ phiên bản 3.0, được xây dựng trên nền tảng Direct3D WPF tối ưu hóa sức mạnh xử lý của card đồ họa và hỗ trợ các cải tiến giao diện trên Windows Vista và Windows 7, đồng thời độc lập với mọi độ phân giải màn hình Thư viện này kế thừa và mở rộng nhiều tính năng phát triển ứng dụng như XAML (ngôn ngữ đánh dấu ứng dụng mở rộng), các điều khiển, tác hợp dữ liệu, bố cục, đồ họa 2D và 3D, hoạt hình, kiểu dáng, mẫu, tài liệu, đa phương tiện, văn bản và in ấn Ứng dụng WPF có thể biên dịch để chạy trên desktop hoặc thông qua các trình duyệt web phổ biến như IE, Firefox, và Safari, cho phép phát triển cả ứng dụng desktop và web.
WPF (Windows Presentation Foundation) hỗ trợ phát triển ứng dụng Rich Internet Application (RIA) và cung cấp một mô hình lập trình nhất quán Nó tạo ra sự tách biệt rõ ràng giữa giao diện người dùng và logic nghiệp vụ, giúp tối ưu hóa quá trình phát triển ứng dụng.
Windows Presentation Framework là một giao diện người dùng khung thế hệ tiếp theo để tạo ra các ứng dụng với một trải nghiệm người dùng phong phú
WPF là một phần của NET framework từ phiên bản 3.0 trở lên, với kiến trúc lớp được quản lý Nó bao gồm các lớp API không quản lý và các thành phần cốt lõi, như thể hiện trong hình minh họa.
❖ Lớp quản lý (Managed Layer)
Lớp quản lý có hai thành phần chính – Presentation Framework và
Presentation Core Presentation Framework cung cấp các chức năng cần thiết
Để xây dựng các ứng dụng WPF hiệu quả, chúng ta cần tập trung vào việc phát triển các thành phần như điều khiển, liên kết dữ liệu, kiểu dáng, hình dạng, tài liệu, chú thích và hình ảnh động Tất cả những yếu tố này đều được hỗ trợ bởi PresentationFramework.dll, đóng vai trò quan trọng trong quá trình phát triển ứng dụng.
Presentation Core functions as a management wrapper around MILCore, offering a public interface for the Media Integration Layer (MIL) It serves as a foundation for Windows Presentation Foundation (WPF) and provides classes for constructing the visual tree of applications The Visual System is responsible for generating this visual tree, with PresentationCore.dll playing a crucial role in this process.
❖ Lớp không được quản lý (Unmanaged Layer)
Lớp MilCore, hay còn gọi là Media tích hợp Thư viện Core, được phát triển bằng mã không quản lý để tích hợp chặt chẽ với DirectX Công nghệ DirectX là nền tảng cho WPF, giúp hiển thị đồ họa một cách hiệu quả nhờ vào sự hỗ trợ của phần cứng và phần mềm Hệ thống MIL tiếp nhận hướng dẫn vẽ từ Visual System và chuyển đổi thành dữ liệu mà DirectX có thể hiểu, từ đó tạo ra giao diện người dùng.
❖ Lớp API Lõi (Core API Layer)
Lớp này bao gồm các thành phần cốt lõi của hệ điều hành như hạt nhân, user32, GDI, và các điều khiển thiết bị, cũng như card đồ họa Những thành phần này cho phép các ứng dụng truy cập vào các API ở mức thấp Đặc biệt, user32 đảm nhiệm việc quản lý bộ nhớ và quá trình tách.
1.4.1.3 Ngôn ngữ XAML – thiết kế giao diện
XAML, một ngôn ngữ đánh dấu tương tự như XML, được sử dụng trong các mẫu lập trình của NET nhằm đơn giản hóa quá trình tạo giao diện người dùng.
Bạn có thể thiết kế các yếu tố giao diện người dùng cho ứng dụng và tách riêng phần logic runtime trong file cs, cho phép kết nối với các khai báo XAML thông qua lớp partial XAML đại diện cho một tập hợp các đối tượng được định nghĩa đặc biệt từ assembly.
XAML cho phép tách biệt rõ ràng giữa thiết kế giao diện và lập trình logic, nhờ vào công cụ hỗ trợ đánh dấu độc đáo mà ít ngôn ngữ đánh dấu nào có thể cung cấp.
File XAML, khi được hiển thị dưới định dạng văn bản, là các tệp XML có đuôi mở rộng xaml Những tệp này có thể được mã hóa tương tự như XML, chẳng hạn như mã hóa UTF-8.
ADO.NET và Entity Framework là hai công nghệ quan trọng giúp các ứng dụng NET kết nối với cơ sở dữ liệu, một yếu tố thiết yếu trong mọi ứng dụng Việc lập trình cơ sở dữ liệu thông qua Entity Framework và ADO.NET là điều cần thiết cho bất kỳ ai học về phát triển ứng dụng trên nền tảng NET Framework.
ADO.NET và Entity Framework là hai công nghệ quan trọng giúp ứng dụng NET kết nối và tương tác với cơ sở dữ liệu, một thành phần thiết yếu cho mọi ứng dụng.
XÁC ĐỊNH VÀ PHÂN TÍCH YÊU CẦU
Khảo sát hiện trạng
2.1.2 Các quy trình nghiệp vụ của quản lý kho
Nhà cung cấp sẽ chuyển hàng hóa đến kho, với mỗi lô sản phẩm bao gồm nhiều loại và số lượng khác nhau Nhân viên nhập kho sẽ kiểm tra và đối chiếu số lượng hàng hóa nhập với hóa đơn để đảm bảo tính chính xác.
Khi sản phẩm được nhập kho, nhân viên sẽ tiến hành kiểm kê và phân loại sản phẩm thành các nhóm như mỹ phẩm, đồ gia dụng, quần áo, sách… Mỗi loại sản phẩm sẽ được đặt ở khu vực riêng biệt trong kho để bảo quản chất lượng tốt nhất và thuận tiện cho việc vận chuyển Định kỳ hàng tháng hoặc hàng quý, nhân viên sẽ thực hiện kiểm kê số lượng hàng tồn kho để đảm bảo quản lý hiệu quả.
Ban Giám đốc Phòng quản lý kho
Phòng nhân sự Phòng Kế toán - Tài chính
Các sản phẩm bị lỗi, gần hết hạn sử dụng hoặc có số lượng dưới mức quy định cần được ghi nhận rõ ràng Khi nhập hoặc xuất hàng, nhân viên phải lập hóa đơn ghi lại thời gian nhập hàng và người chịu trách nhiệm lập hóa đơn.
Phân tích yêu cầu
Tính năng lưu trữ là yếu tố quan trọng nhất trong hệ thống, đóng vai trò nền tảng cho việc triển khai hầu hết các chức năng của nó Để đảm bảo quản lý kho hiệu quả, hệ thống cần lưu trữ các thông tin thiết yếu.
- Thông tin về nhà cung cấp: tên nhà cung cấp, địa chỉ, số điện thoại, người đại diện…
- Thông tin về hóa đơn
- Thông tin số lượng hàng nhập, hàng xuất, hàng tồn kho cùng với hóa đơn tương ứng.
2.2.1.2 Yêu cầu về tính năng
Ngoài chức năng lưu trữ, hệ thống còn phải đáp ứng các yêu cầu sau:
Hệ thống cần cung cấp chức năng tra cứu hiệu quả, cho phép người dùng dễ dàng truy cập thông tin về hàng tồn kho, hóa đơn nhập và hóa đơn xuất tại bất kỳ thời điểm nào.
- Chức năng báo cáo: hàng tháng, kho hàng yêu cầu nhân viên nhập kho phải báo cáo về số lượng hàng tồn, hàng xuất và nhập kho
- Các chức năng tự động: tự động tính toán hàng tồn kho, tự động xuất báo cáo
- Chức năng cập nhât: hệ thống phải đảm bảo chức năng cập nhật được thuận tiện và tránh tối đa lỗi do sơ xuất của người sử dụng
2.2.2 Yêu cầu phi chức năng
- Yêu cầu về giao diện: giao diện quản lý đơn giản, dễ học cách sử d
- Yêu cầu về chất lượng
+ Tính tiến hóa: Dễ dàng trong lúc nâng cấp hoặc tăng các module tiện ích + Tính tiện dụng:
• Hệ thống có giao diện trực quan, thân thiện và dễ sử dụng
• Các đặc tả và hướng dẫn sử dụng rõ ràng
• Phần mềm đáp ứng đầy đủ các chức năng
• Hoạt động ổn định và đáng tin cậy
• Hoạt động tốt trên windows 7, 8, 10
THIẾT KẾ HỆ THỐNG
Sơ đồ Usecase
Quản lý kho Xuất kho
Quản lý nhà cung cấp
Quản lý lô sản phẩm Kiểm kê
Quản lý phiếu xuất kho
Quản lý phiếu trả kho
Quản lý phiếu nhập kho
Quản lý tài khoản Đăng nhập
Quản lý phiếu trả nhà cung cấp
Quản lý thông tin nhân viên
Danh sách các tác nhân của hệ thống
STT Tác nhân của hệ thống Ý nghĩa
1 NV_Quản lý kho Người quản trị hệ thống
2 NV_Xuất kho Quản lý việc xuất kho
3 NV_Nhập kho Quản lý việc nhập kho
Danh sách các Use-case
STT Tên Use-case Ý nghĩa/Ghi chú
1 QL_Nhà CC Thêm, sửa, xóa thông tin nhà cung cấp
2 QL_Lô SP Thêm, sửa, xóa thông tin lô sản phẩm
3 Báo cáo hàng tồn Báo cáo số lượng hàng tồn trong sản phẩm theo thời gian cụ thể
4 In phiếu xuất In phiếu xuất kho theo yêu cầu
5 Đăng nhập Cho phép người dùng đăng nhập vào hệ thống
6 QL_Phiếu nhập kho Thêm, sửa, xóa phiếu nhập kho
7 QL_phiếu xuất kho Thêm, sửa, xóa phiếu xuất kho
8 Xuất file excel Xuất file báo cáo excel theo yêu cầu
9 Thay đổi mật khẩu Cho phép người dùng thay đổi mật khẩu đăng nhập vào hệ thống
10 QL Tài khoản Thêm, xóa, sửa phân quyền cho người sử dụng
Đặc tả use-case và sơ đồ hoạt động (Activity Diagram)
- Tóm tắt: cho phép người dùng đăng nhập vào hệ thống
Người dùng Hệ thống CSDL
Nhập tên đăng nhập và mật khẩu
Thông báo đăng nhập không thành công
Hiển thị trang tương ứng
- Các yêu cầu đặc biệt: Không có
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: không có
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị màn hình chính tùy vào tài khoản đăng nhập đã được phân quyền
- Điểm mở rộng: Không có
- Tóm tắt: cho phép người dùng thay đổi mật khẩu đăng nhập vào hệ thống
Người dùng Hệ thống Cơ sở dữ liệu
Nhấn vào nút thay đổi mật khẩu
Hệ thống gửi bảng thông tin đăng nhập
Người dùng nhập thông tin cần thiết
Kiểm tra trường thông tin
Thông báo không hợp lệ
Cập nhật lại thông tin cho tài khoản
Thông báo cập nhật thành công cho tài khoản
Hợp lệ Không hợp lệ
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Bắt buộc phải đăng nhập vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị thông báo thay đổi mật khẩu thành công
- Các yêu cầu đặc biệt: Không có
- Điểm mở rộng: Không có
3.4.3 Quản lý phiếu nhập kho
- Tóm tắt: Use-case quản lý phiếu nhập kho mô tả quá trình thêm, xóa, sửa và tìm kiếm thông tin
- Các yêu cầu đặc biệt: Không có
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Bắt buộc phải đăng nhập vào hệ thống
- Điểm mở rộng: Không có
Người dùng Hệ thống CSDL
Thông báo xác nhận hủy
Hiển thị khung nhập thông tin
Nhập thông tin cần thiết
Thông báo thành công Thêm/Sửa
Hiển thị khung tìm kiếm
Nhập từ khóa Lấy dữ liệu
Thông báo không tìm thấy thông tin
Hiển thị kết quả tìm kiếm
Chọn thông tin cần hủy Đồng ý Không đồng ý
Hợp lệKhông hợp lệ
3.4.4 Quản lý phiếu xuất kho
- Tóm tắt: Use-case quản lý phiếu xuất kho mô tả quá trình thêm, xóa, sửa và tìm kiếm thông tin
- Các yêu cầu đặc biệt: Không có
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Bắt buộc phải đăng nhập vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị thông báo thành công
- Điểm mở rộng: Không có
Người dùng Hệ thống CSDL
Thông báo xác nhận hủy
Hiển thị khung nhập thông tin
Nhập thông tin cần thiết
Thông báo thành công Thêm/Sửa
Hiển thị khung tìm kiếm
Nhập từ khóa Lấy dữ liệu
Thông báo không tìm thấy thông tin
Hiển thị kết quả tìm kiếm
Chọn thông tin cần hủy Đồng ý Không đồng ý
Hợp lệKhông hợp lệ
3.4.5 Quản lý nhà cung cấp
- Tóm tắt: Use-case quản lý nhà cung cấp mô tả quá trình thêm, xóa, sửa và tìm kiếm thông tin
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người sử dụng phải đăng nhập thành công
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị thông báo thành công sau khi thêm/sửa thông tin nhà cung cấp mới vào hệ thống
Người dùng Hệ thống CSDL
Thông báo xác nhận hủy
Hiển thị khung nhập thông tin
Nhập thông tin cần thiết
Thông báo thành công Thêm/Sửa
Hiển thị khung tìm kiếm
Nhập từ khóa Lấy dữ liệu
Thông báo không tìm thấy thông tin
Hiển thị kết quả tìm kiếm
Chọn thông tin cần hủy Đồng ý Không đồng ý
Hợp lệKhông hợp lệ
3.4.6 Quản lý lô sản phẩm
- Tóm tắt: Use-case quản lý lô sản phẩm mô tả quá trình thêm, xóa, sửa và tìm kiếm thông tin
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Yêu cầu người dùng phải đăng nhập thành công vào hệ thống
Người dùng Hệ thống CSDL
Thông báo xác nhận hủy
Hiển thị khung nhập thông tin
Nhập thông tin cần thiết
Thông báo thành công Thêm/Sửa
Hiển thị khung tìm kiếm
Nhập từ khóa Lấy dữ liệu
Thông báo không tìm thấy thông tin
Hiển thị kết quả tìm kiếm
Chọn thông tin cần hủy Đồng ý Không đồng ý
Hợp lệKhông hợp lệ
- Tóm tắt: Use case báo cáo tồn kho mô tả quy trình xuất ra báo cáo tự động theo yêu cầu từ người sử dụng
- Các yêu cầu đặc biệt: Phải có thông tin sẵn trong hệ thống về sản phẩm, nhà cung cấp hay hóa đơn nhập…
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người dùng phải đăng nhập thành công vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị màn hình báo cáo
- Điểm mở rộng: Không có
Người dùng Hệ thống CSDL
Chọn chức năng báo cáo
Hiển thị màn hình báo cáo
Chọn loại báo cáo Lấy dữ liệu
- Tóm tắt: Use case kiểm kê hàng tồn mô tả quy trình kiểm kế số lượng hàng trong kho trên hệ thống
- Các yêu cầu đặc biệt: Phải có thông tin sẵn trong hệ thống về sản phẩm, nhà cung cấp hay hóa đơn nhập…
Người dùng Hệ thống CSDL
Chọn chức năng kiểm kê
Hiển thị danh sách kiểm kê và khung thông tin
Nhập các thông tin cần thiết Cập nhật dữ liệu
Xuất ra số lượng hàng tồn
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người dùng phải đăng nhập thành công vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị màn hình báo cáo
- Tóm tắt: Use case xuất file excel mô tả quy trình xuất file excel trong hệ thống theo yêu cầu của người dùng
Người dùng Hệ thống CSDL
Chọn chức năng xuất file excel
- Các yêu cầu đặc biệt: Phải có thông tin sẵn trong hệ thống về sản phẩm, nhà cung cấp hay hóa đơn nhập…
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người dùng phải đăng nhập thành công vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị màn hình báo cáo
- Tóm tắt: Use case in báo cáo mô tả quy trình xuất file báo cáo do yêu cầu của người dùng
Người dùng Hệ thống CSDL
Chọn chức năng in báo cáol
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người dùng phải đăng nhập thành công vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị màn hình báo cáo
- Các yêu cầu đặc biệt: Phải có thông tin sẵn trong hệ thống về sản phẩm, nhà cung cấp hay hóa đơn nhập…
- Tóm tắt: Use case in phiếu xuất mô tả quy trình in phiếu xuất kho do yêu cầu của người dùng
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người dùng phải đăng nhập thành công vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị màn hình báo cáo
- Các yêu cầu đặc biệt: Phải có thông tin sẵn trong hệ thống về sản phẩm, nhà cung cấp hay hóa đơn nhập…
Người dùng Hệ thống CSDL
Xuất file phiếu xuất kho
- Tóm tắt: Use case quản lý tài khoản cho phép người dùng thêm, hủy, tìm kiếm hoặc sửa tài khoản
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người dùng phải đăng nhập thành công vào hệ thống
- Trạng thái hệ thống sau khi thực hiện Use-case: Hiển thị thông báo thành công
- Các yêu cầu đặc biệt: Phải có thông tin sẵn trong hệ thống về sản phẩm, nhà cung cấp hay hóa đơn nhập…
Người dùng Hệ thống CSDL
Thông báo xác nhận hủy
Hiển thị khung nhập thông tin
Nhập thông tin cần thiết
Thông báo thành công Thêm/Sửa
Hiển thị khung tìm kiếm
Nhập từ khóa Lấy dữ liệu
Thông báo không tìm thấy thông tin
Hiển thị kết quả tìm kiếm
Chọn thông tin cần hủy Đồng ý Không đồng ý
Hợp lệKhông hợp lệ
3.5.13 Quản lý thông tin nhân viên
- Tóm tắt: Use case quản lý thông tin nhân viên cho phép người dùng thêm, sửa, hủy hoặc tìm kiếm thông tin nhân viên
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case: Người dùng phải đăng nhập thành công vào hệ thống
- Các yêu cầu đặc biệt: Không có
QL_thông tin nhân viên
Người dùng Hệ thống CSDL
Thông báo xác nhận hủy
Hiển thị khung nhập thông tin
Nhập thông tin cần thiết
Chọn thông tin cần hủy Đồng ý Không đồng ý
Hợp lệKhông hợp lệ
Sơ đồ trình tự (Sequence diagram)
3.5.1 Quản lý nhà cung cấp
- Tìm kiếm nhà cung cấp
Người dùng Màn hình đăng nhập
1 Nhập tên đăng nhập và mật khẩu
2 Yêu cầu đăng nhập và thông tin đăng nhập
[Hợp lệ] Đăng nhập thành công 6.Chuyển sang trang tương ứng
4 Kiểm tra thông tin đăng nhập
5 Yêu cầu người dùng nhập lại thông tin [Không hợp lệ] Trả về lỗi
- Chọn thông tin sản phẩm
- Chọn thông tin nhà cung cấp
Class diagram
3.6.1 Quản lý nhà cung cấp
3.6.7 Quản lý lô sản phẩm
3.6.9 Quản lý thông tin nhân viên
+id_mat_hang: int Id mặt hàng
+so_luong: int Số lượng mặt hàng
+id_nha_cc: int Id nhà cung cấp
+id_hoa_don_nhap: int Id hóa đơn nhập nhập
+ChiTietPhieuNhap( id_mat_hang: int, id_hoa_don_nhap: int, so_luong: int, id_nha_cc: int )
Phương thức khởi tạo có tham số
+id_kho: int Id kho
+ten_kho string Tên kho
+dia_chi string Địa chỉ kho
+tong_gia_tri string Tổng giá trị hàng trong kho
+Kho( id_kho: int, ten_kho: string, dia_chi: string,
Phương thức khởi tạo có tham số
+id_lo_sp: int Id lô sản phẩm
+hsd: String Hạn sử dụng
+nsx: String Ngày sản xuất
+id_exist: int Id tồn tại
+id_ton_kho: int Id tồn kho
+tong_gia_tri: string Id phiếu nhập
+id_loai_sp: int Id loại sản phẩm
+ten_loai_sp: String Tên loại sản phẩm
+id_exist: int Id tồn tại
+LoaiSanPham( id_loai_sp: int ten_loai_sp: String id_exist: int)
Phương thức khởi tạo có tham số
+id_nha_cc: int Id nhà cung cấp
+ten_nha_cc: String Tên nhà cung cấp
+ten_dai_dien: String Tên đại diện
+sdt: String Số điện thoại
+dia_chi: String Địa chỉ
+id_exist: int Id tồn tại
+hinh_anh: byte[] Hình ảnh
+NguonCungCap( id_nguon_cc: int ten_nha_cc: String ten_dai_dien: String sdt: String dia_chi: String email: String id_exist: int hinh_anh: byte[]
Phương thức khởi tạo có tham số
+id_nv: int Id nhân viên
+ten_nv: String Tên nhân viên
+sdt: String Số điện thoại
+cmnd: String Chứng minh nhân dân
+ngay_sinh: String Ngày sinh
+hinh_anh: byte[] Hình ảnh
+id_exist: int Id tồn tại
+NhanVien( id_nv: int, ten_nv: String, sdt: String, cmnd: String, ngay_sinh: String, hinh_anh: byte[], id_exist: int )
Phương thức khởi tạo có tham số
+id_kk_kho: int Id kiểm kê kho
+sl_hao_mon: int Số lượng hao mòn
+thoi_gian: String Thời gian
+id_kho: int Id kho
+id_nv: int Id nhân viên
+PhieuKiemKeKho( id_kk_kho: int, sl_hao_mon: int,
Phương thức khởi tạo có tham số
74 thoi_gian: String, id_kho: int, id_nv: int )
+id_phieu_nhap: int Id phiếu nhập
+thoi_gian: String Thời gian
+ghi_chu: String Ghi chú
+id_exist: int Id tồn tại
+id_nv: int Id nhân viên
+PhieuNhap( id_phieu_nhap: int, thoi_gian: String, ghi_chu: String, id_exist: int, id_nv: int )
Phương thức khởi tạo có tham số
+id_sp: int Id sản phẩm
+ten_sp: Stirng Tên sản phẩm
+hinh_anh: byte[] Hình ảnh
+id_exist: int Id tồn tại
+id_loai_sp: int Id loại sản phẩm
+SanPham( id_sp: int, ten_sp: Stirng, hinh_anh: byte[], id_exist: int, id_loai_sp: int )
Phương thức khởi tạo có tham số
+id_tk: int Id tài khoản
+ten_tai_khoan: String Tên tài khoản
+mat_khau: String Mật khẩu
+id_exist: int Id tồn tại
+id_nv: int Id nhân viên
+loai: int Loại tài khoản
+TaiKhoan( id_tk: int ten_tai_khoan: String mat_khau: String id_exist: int
Phương thức khởi tạo có tham số
76 id_nv: int loai: int )
+id_ton: int Id tồn kho
+id_lo: int Id lô
+sl_sp: int Số lượng sản phẩm
+id_khu_vuc: int Id khu vực
+TonKho( id_ton: int, id_lo: int, ngay: String, sl_sp: int, id_khu_vuc: int )
Phương thức khởi tạo có tham số
+id_xuat_kho: int Id xuất kho
+sl_sp: int Số lượng sản phẩm
+thoi_gian_xuat: String Thời gian xuất
+id_lo: int Id lô
+id_nv: int Id nhân viên
+XuatKho( id_xuat_kho: int, sl_sp: int , thoi_gian_xuat: String, id_lo: int , id_nv: int )
Phương thức khởi tạo có tham số
-url: String Link của database
-user: String Tên đăng nhập
-conn: Connection Là một Connection
-intance: DataProvider Thực thể DateProvider
+close(): void Đóng kết nối CSDL
+displayError(): void Hiển thị lỗi của SQL
Chạy câu lệnh sql (select)
Chạy câu lệnh sql (select)
+excuteQuery(sql: String): void Chạy câu lệnh sql (insert, update)
Chạy câu lệnh sql (insert, update)
+getConnect(): Connection Trả về đối tượng conn
+getIntance(): DataProvider Trả về đối tượng
+open(): void Mở kết nối CSDL
-instance: NhapKho Thực thể NhapKho
+thoi_gian: String Thời gian
+so_tien_sp: String Số tiền sản phẩm
+so_tien_lo: String Số tiền lô
+so_luong_sp: String Số lượng sản phẩm
+so_luong_lo: String Số lượng lô
+nsx: String Ngày sản xuất
+id_sp: int Id sản phẩm
+id_nv: int Id nhân viên
+id_nguon_cc: int Id nguồn cung cấp
+hsd: String Hạn sử dụng
+ghi_chu: String Ghi chú
+Run(): void Thêm thông tin nhập kho
+getInstance() Trả về thực thể instance
Lấy danh sách thông tin nhập
+getThongTinNhap(id: int): ThongTinNhap Lấy thông tin nhập từ id
Lấy ra 1 thông tin nhập từ thời gian cụ thể
Lấy ra 1 thông tin nhập từ thời gian cụ thể daoBaoCao
-instance: daoBaoCao Thực thể daoBaoCao
+SoLuongLotrongKhoHienTai(): Long Lấy số lượng lô trong kho
+SoLuongTonKhoTheoNgay(date: String): Long Lấy số lượng lô tồn kho theo ngày
Lấy số lượng lô tồn kho theo tháng
Tạo biểu đồ tròn loại sản phẩm
+createbarChartPanelTheoNam(): JPanel Tạo biểu đồ cột tồn kho theo năm
+createbarChartPanelTheoQui(): JPanel Tạo biểu đồ cột tồn kho theo quí
+createbarChartPanelTheoThang(): JPanel Tạo biểu đồ cột tồn kho theo tháng
+createlineChartTonKhoTheoNgay(): JPanel Tạo biểu đồ đường tồn kho theo ngày
+createlineChartTonKhoTheoThang(): JPanel Tạo biểu đồ đường tồn kho theo tháng
+getInstance() Trả về thực thể instance daoChiTietPhieuNhap
-instance: daoChiTietPhieuNhap Thực thể daoChiTietPhieuNhap
Lấy chi tiết phiếu nhập bằng id
+getInstance() Trả về thực thể Instance
Lấy danh sách chi tiết phiếu nhập
+InsertChiTietPhieuNhap( so_tien_lo: int, so_luong_lo: int, id_nguon_cc: int, id_phieu_nhap: int)
Thêm chi tiết phiếu nhập mới daoKho
-instance: daoKho Thực thể daoKho
Tìm kiếm thông tin kho hiện tại
Lấy danh sách sản phẩm tồn kho sắp hết hạn sử dụng
Lấy danh sách sản phẩm tồn kho sắp hết số lượng
ArrayList, trang: long): ArrayList
Lấy ra 20 thông tin kho
+getLoKho(id_lo: int): Kho Lấy thông tin kho bằng id lo
+getThongTinKhoHienTai(id_lo: int) : ThongTinKhoHienTai
Lấy thông tin kho hiện tại bằng id_lo
+insertKho(sl_sp: int, id_lo: int, id_khu_vuc: int): boolean
+updateSoLuongKhotheo_ID_KHO( sl_sp: int, id_kho: int): boolean
Thay đổi số lượng sản phẩm trong kho bằng id kho
+updateSoLuongKhotheo_ID_LO( sl_sp: int, id_lo: int): boolean
Thay đổi số lượng sản phẩm trong kho bằng id lô daoKiemKe
-instance: daoKiemKe Thực thể daoKiemKe
+getInstance(): daoKiemKe Trả về thực thể instance
+getListSanPham(): ArrayList Lấy danh sách sản phẩm
Lấy danh sách thông tin kiểm kê daoLoSanPham
-instance: daoLoSanPham Thực thể daoLoSanPham
Tìm kiếm thông tin lô sản phẩm
Lấy danh sách lô sản phẩm
+getInstance(): daoLoSanPham Trả về thực thể instance +getListThongTinLo():
Lấy danh sách thông tin lô
+getLoSanPham(hsd: String, nsx: String, id_phieu_nhap: int): LoSanPham
Để quản lý lô sản phẩm, chúng ta có thể lấy thông tin lô bằng ngày sản xuất, hạn sử dụng và ID phiếu nhập Hàm `getThongTinLo(id: int): ThongTinLo` cho phép lấy thông tin lô dựa trên ID, trong khi hàm `getLoSanPham(id_lo: int): ThongTinLo` cũng thực hiện chức năng tương tự bằng cách sử dụng ID lô sản phẩm Để thêm một lô sản phẩm mới, chúng ta sử dụng hàm `insertLoSanPham(hsd: String, nsx: String, id_exist: int, id_ton_kho: int, id_phieu_nhap: int): boolean`, với các tham số bao gồm hạn sử dụng, ngày sản xuất, và các ID liên quan khác.
Thêm lô sản phẩm daoLoaiSanPham
-instance: daoLoaiSanPham Thực thể daoLoaiSanPham
+ThemLoaiSanPham( ten: String, dvt: String, khuvuc: String,
Thêm loại sản phẩm mới
Lấy id loại sản phẩm
+getInstance() Trả về thực thể instance
Lấy danh sách loại sản phẩm
+getLoaiSanPham( id_loai_sp: int):
Lấy loại sản phẩm daoNguonCungCap
Xuất file excel thông tin nguồn cung cấp
Tìm kiếm nguồn cung cấp
+GetSoLanNhapKho(id_ncc: int): int Lấy số lần nhập kho của nguồn cung cấp
+GetSoLanXuatKho(id_ncc: int): int Lấy số lần xuất kho của nguồn cung cấp
+GetSoLuongNhapKho(id_ncc: int): int Lấy số lượng nhập kho của nguồn cung cấp
+GetSoLuongXuatKho(id_ncc: int): int Lấy số lượng xuất kho của nguồn cung cấp +UpdateNguonCungCap(
Update thông tin của nguồn cung cấp
TenNhaCungCap: String, TenDaiDien: String, Sdt: String,
DiaChi: String, Email: String, IdNhanVien: int): boolean
+getInstance(): daoNguonCungCap Trả về thực thể instance +getListNguonCungCap():
Lấy danh sách nguồn cung cấp
Lấy nguồn cung cấp bằng id
IdNguonCungCap: int, TenNhaCungCap: String, TenDaiDien: String, Sdt: String,
DiaChi: String, Email: String, IdNhanVien: int): boolean
Thêm nguồn cung cấp daoNhanVien
-instance: daoNhanVien Thực thể daoNhanVien
+ExcelNhanVien(arr: ArrayList Xuất file excel danh sách nhân viên
+getInstance(): daoNhanVien Trả về thực thể instance +getListNhanVien():
Lấy danh sách nhân viên daoPhieuKiemKeKho
+getInstance() Trả về thực thể instance
Lấy danh sách phiếu kiểm kê kho
Lấy phiếu kiểm kê kho bằng id
+insertPhieuKiemKeKho( sl_hao_mon: int, thoi_gian: String, id_kho: int, id_nv: int): boolean
Thêm phiếu kiểm kê kho
-instance: daoPhieuNhap Thực thể daoPhieuNhap
Lấy số lần nhập kho trong ngày
Lấy danh sách 20 thông tin nhập kho
+getInstance(): daoPhieuNhap Trả về thực thể instance
Lấy danh sách thông tin phiếu nhập
+getPhieuNhap(thoi_gian: String, id_nv: int): PhieuNhap
Lấy phiếu nhập bằng thời gian và id nhân viên
+getPhieuNhap(id_pn: int): PhieuNhap Lấy phiếu nhập bằng id phiếu nhập +getListPhieuNhap():
Lấy danh sách phiếu nhập
+insertPhieuNhap( thoi_gian: String, ghi_chu: String, id_exist: int, id_nv: int): boolean
-instance: daoSanPham Thực thể daoSanPham
+getInstance(): daoSanPham Trả về thực thể instance +getListSanPham():
Lấy danh sách thông tin sản phẩm
Lấy danh sách sản phẩm theo id
Lấy danh sách sản phẩm theo loại
+getSanPham(id_sp: int): int Lấy sản phẩm +insertSanPham( ten_sp: String, hinh_anh: String, id_exist: int, id_loai_sp: int, id_nv: int): boolean
+updateSanPham( ten_sp: String, hinh_anh: String, id_exist: int, id_loai_sp: int, id_nv: int): boolean
Update thông tin sản phẩm
-instance: daoTaiKhoan Thực thể daoTaiKhoan
User: String, Pass: String, Mkmoi: String, MK: String, Id_nv: int): int
Kiểm tra tài khoản khi đổi mật khẩu
+getInstance(): daoTaiKhoan Trả về thực thể instance
+getNhanVien(id_nv: int): NhanVien Lấy nhân viên từ id nhân viên
+getTaiKhoan(User: String, Pass: String):
Lấy tài khoản từ tên đăng nhập và mật khẩu
Lấy tài khoản bằng id nhân viên daoTonKho
-instance: daoTonKho Thực thể daoTonKho Operation +CapNhatTonKho(): void Cập nhật tồn kho
+get20TonKho(arr: ArrayList, trang: long): ArrayList
Lấy danh sách 20 tồn kho
+getInstance(): daoTonKho Trả về thực thể instance
+getListCheckOverWriteTonKho(id_lo: int, ngay: String): ArrayList
Lấy ra danh sách tồn kho có id lô và ngày tương ứng
+getListCheckOverWriteTonKhoUpdate(id_lo: int, ngay: String): ArrayList
Lấy ra danh sách thông tin kho từ id lô, số lượng lô và ngày tương ứng
Lấy danh sách thông tin tồn
+getListTonKho(): ArrayList Lấy ra danh sách tồn kho
Lấy danh sách tồn kho theo ngày
Lấy danh sách tồn kho theo tháng +insertTonKho( id_lo: int, ngay: String, sl_sp: int, id_khu_vuc: int): boolean
+updateSoLuongTonKho( id_lo: int, ngay: String, sl_sp: int): boolean
Update thông tin tồn kho
-instance: daoXuatKho Thực thể daoXuatKho
Tìm kiếm phiếu xuất kho
+KiemTraXuatKho( id_lo: String, slton: String, slxuat: String, ngay: String, id_nv: int ):boolean
Kiểm tra phiếu xuất kho trước khi thêm
+RunXuatKho( id_lo: int, sl_xuat: int, thoi_gian: String, id_nv: int
Kiểm tra nếu phù hợp với số lượng tồn thì xuất, không thì cho qua hổ trợ cho DataSeeder
Lấy số lần xuất kho theo thời gian
+getInstance(): daoXuatKho Trả về thực thể instance
Lấy danh sách thông tin xuất kho
Lấy danh sách thông tin xuất kho theo id lô
+getListXuatKho(): ArrayList Lấy danh sách thông tin xuất kho
+getXuatKho(id_px: int): XuatKho
Sơ đồ trạng thái (State diagram)
Thiết kế giao diện
3.9.1 Danh sách các trang chính của chương trình
2 Trang xem thông tin sản phẩm
3 Trang quản lý nhập kho
4 Trang tạo phiếu nhập kho
5 Trang quản lý xuất kho
6 Trang tạo phiếu xuất kho
7 Trang thông tin sản phẩm trong kho
8 Trang kiểm kê sản phẩm
10 Trang quản lý thông tin nhân viên
11 Trang kiểm tra tồn kho
12 Trang quản lý nhà cung cấp
13 Trang đăng nhập hệ thống
14 Trang thay đổi mật khẩu
3.9.2.1 Trang đăng nhập hệ thống
3.9.2.2 Trang thay đổi mật khẩu
3.9.2.4 Trang quản lý sản phẩm
3.9.2.5 Trang xem thông tin sản phẩm
3.9.2.6 Trang quản lý nhập kho
3.9.2.7 Trang tạo phiếu nhập kho
Khi click vào button chọn kho -> hiện danh sách kho hàng
100 Khi click vào button chọn nhà cung cấp -> hiện danh sách nhà cung cấp
Khi click vào button chọn sản phẩm -> hiện danh sách sản phẩm
101 Khi đã chọn kho nhập, nhà cung cấp, sản phẩm
3.9.2.8 Trang quản lý xuất kho
3.9.2.9 Trang tạo phiếu xuất kho
3.9.2.10 Trang thông tin sản phẩm trong kho
3.9.2.13 Trang kiểm tra tồn kho
CHƯƠNG 4: KẾT LUẬN 4.1 Bảng phân chia công việc
Nguyễn Đức Phúc Bùi Đoàn Quang Tân Đăng nhập X
Quản lý nhà cung cấp
Thiết kế cơ sở dữ liệu
Môi trường phát triển và môi trường triển khai ứng dụng
- Hệ quản trị CSDL: SQLSERVER
- Công cụ xây dựng ứng dụng: Visual Studio
- Mô hình tổ chức code: MVVM
4.2.2 Môi trường triển khai ứng dụng
Kết quả
Phần mềm quản lý kho đã hoàn thành một số chức năng như sau:
- Quản lý nhà cung cấp
- Giảng viên hướng dẫn tận tình, hỗ trợ, định hướng nhóm nghiên cứu và thực hiện đề tài
- Các tài liệu về ngôn ngữ, công cụ thực hiện được chia sẻ nhiều trên mạng
- Vận dụng được các kiến thức, quy trình phát triển đã được học
- Tài liệu về đề tài phong phú
- Tìm hiểu về công tác vận hành kho hang mất nhiều thời gian vì tài liệu khá dài và khó hiểu.