➢ Quản lí nhân viên -Lưu trữ các thông tin nhân viên cùng những chức năng thêm ,sửa ,xóa thông tin nhân viên ➢ Quản lí khách hàng Lưu trữ các thông tin khách hàng cùng những chức năng
Khảo sát hệ thống
Đề tài : “Quản lý tiệm bánh sinh nhật Thu Hường”
Thu Hường Bakery là một trong những thương hiệu bánh sinh nhật Á Âu nổi tiếng tại Hà Nội, được yêu thích bởi những tín đồ đam mê bánh ngọt Tiệm không ngừng sáng tạo và đáp ứng nhu cầu của khách hàng với những mẫu bánh độc đáo, kết hợp hài hòa giữa phong cách hiện đại và truyền thống Bên cạnh bánh sinh nhật, tiệm còn cung cấp nhiều loại bánh đa dạng, từ bánh kem, bánh nướng đến socola tươi, tất cả đều được trang trí bắt mắt và chất lượng đảm bảo Bánh kem sinh nhật tại đây có nhiều phong cách trang trí khác nhau, từ cổ điển kiểu Pháp đến các mẫu bánh vẽ chibi dễ thương và bánh hình 3D độc đáo.
Tiệm bánh 30m2 nằm tại trung tâm thành phố, phục vụ đông đảo khách hàng mỗi ngày với đội ngũ 5 nhân viên: 1 thu ngân, 2 bán hàng và 2 thủ kho Cửa hàng hoạt động từ 7h30 đến 21h hàng ngày, đảm bảo dịch vụ bán hàng liên tục Để nâng cao hiệu quả kinh doanh, tiệm được trang bị các thiết bị thiết yếu như máy POS mã vạch, máy in hóa đơn, camera an ninh và máy làm bánh.
Cửa hàng hiện đang sử dụng phần mềm quản lý để thay thế phương pháp quản lý thủ công lạc hậu, giúp tiết kiệm thời gian trong việc quản lý nhân viên, sản phẩm và khách hàng Việc áp dụng một hệ thống quản lý hiệu quả là cần thiết để đáp ứng các yêu cầu cơ bản và tối ưu hóa quy trình hoạt động.
Tên tiệm bánh : Tiệm Bánh Ngọt Thu Hường Bakery
• Địa chỉ: 11A, phố Dịch Vọng, Cầu Giấy, Hà Nội
Hình 1 1 Ảnh giới thiệu tiệm bánh
Xác định bài toán cần giải quyết
Với nhân viên
- Thuận tiện , dễ sử dụng phần mềm
- Nhân viên có thể đăng nhập kiểm tra được thông tin của mình như lương , ca làm, phụ cấp hoặc thực hiện nhiều nhiệm vụ khác
Với khách hàng
- Kiểm tra, tìm kiếm được thông tin của cá nhân hoặc sản phẩm , hóa đơn dễ dàng
Với sản phẩm
- Quản lí được sản phẩm trên cửa hàng
- Quản lí được số lượng, tìm kiếm sản phẩm
Với kho hàng
- Thống kê doanh thu, tìm kiếm dễ dàng được hóa đơn đơn hàng của cửa hàng
- Thống kê được phiếu nhập xuất cho cửa hàng
Phân tích và đặc tả các nghiệp vụ của hệ thống
Sản phẩm
Lưu trữ thông tin sản phẩm như mẫu mã, số lượng và giá cả ưu đãi trên menu cửa hàng là rất quan trọng Mỗi sản phẩm cần có mã riêng để dễ dàng quản lý Khách hàng sẽ sử dụng menu để đặt hàng, trong khi nhân viên kiểm tra số lượng sản phẩm hàng tuần và thống kê Tuy nhiên, việc kiểm soát toàn bộ sản phẩm vẫn gặp khó khăn.
Nhân viên
Lưu trữ thông tin nhân viên cửa hàng như mã nhân viên, tên, lương, địa chỉ và số điện thoại là rất quan trọng Nhân viên thu ngân có trách nhiệm quản lý thanh toán và xử lý đơn hàng cho khách Trong khi đó, nhân viên bán hàng giới thiệu và hướng dẫn khách hàng mua sản phẩm, đồng thời trưng bày hàng hóa một cách hợp lý để thu hút khách Nhân viên thủ kho quản lý việc nhập xuất hàng hóa và số lượng sản phẩm trong cửa hàng Các nhân viên có ca làm việc khác nhau và thường được phân công theo tuần để đảm bảo quản lý công việc hiệu quả.
Khách hàng
Cửa hàng sẽ lưu trữ thông tin khách hàng để tích điểm thành viên, giúp khách hàng nâng cấp lên VIP và nhận những phần thưởng giá trị cho các lần mua sắm tiếp theo Ngày sinh của khách hàng cũng sẽ được ghi nhận, và vào dịp sinh nhật hoặc lễ tết, cửa hàng sẽ gửi tin nhắn SMS với ưu đãi cá nhân và lời chúc ý nghĩa để thu hút khách hàng Khi đặt hàng hoặc mua sản phẩm, khách hàng sẽ nhận được hóa đơn kèm theo sản phẩm để nắm rõ thông tin về sản phẩm đã mua.
Kho hàng
Các nguyên liệu làm bánh sẽ được các nhà cung cấp giao hàng và nhập vào kho Nhân viên sẽ kiểm tra số lượng và chất lượng hàng hóa trước khi nhập kho Mỗi nguyên liệu sẽ có mã sản phẩm riêng và số lượng để dễ dàng quản lý Kho cũng lưu trữ thông tin hóa đơn của khách hàng để thống kê doanh số theo tuần, tháng và năm Thống kê doanh thu của cửa hàng sẽ dựa trên hóa đơn bán hàng theo ngày, tuần và tháng.
Xác định các yêu cầu của hệ thống
Yêu cầu chức năng
-Chức năng này cho phép người dùng có thể đăng nhập, đăng xuất vào để sử dụng phần mềm
-Lưu trữ các thông tin sản phẩm cùng những chức năng thêm ,sửa ,xóa , tìm kiếm thông tin sản phẩm
-Hiển thị được toàn bộ sản phẩm cửa hàng trên phầm mềm
-Lưu trữ các thông tin nhân viên cùng những chức năng thêm ,sửa ,xóa thông tin nhân viên
Lưu trữ các thông tin khách hàng cùng những chức năng thêm ,sửa ,xóa thông tin khách hàng
-Thống kê được số hóa đơn của cửa hảng
-Thống kê được phiếu nhập xuất sản phẩm của cửa hàng
Yêu cầu phi chức năng
• Yêu cầu bảo mật: Toàn vẹn, bảo mật, xác thực
• Yêu cầu sao lưu : Tự động sao lưu lên máy chủ
• Yêu cầu về tính năng sử dụng: Tối ưu, hiệu quả và dễ sử dụng
• Yêu cầu về phần cứng:Win 7/8/10
• Yêu cầu khi sử dụng phần mềm:
QUẢN LÝ DỰ ÁN
Ước lượng dự án
Giai đoạn Công việc chính Mô tả công việc
Khảo sát yêu cầu dự án
Thu thập cá dự liệu cần thiết về dự án 0VNĐ
Bắt đầu dự án Triển khai và thiết lập project cho dự án 100.000VNĐ Lập kế hoạch phạm vi dự án
Lập kế hoạch chi tiết cho phạm vi làm việc 100.000VNĐ
Viết báo cáo tổng kết dự án
Tổng kết lại toàn bộ quá trình quản lý dự án 0VNĐ
Phân tích và thiết kế hệ thống Đặc tả chi tiết yêu cầu của khách hàng
Mô tả chi tiết những yêu cầu, chức năng cần có của phần mềm
Mô tả hệ thống thông qua sơ đồ usecase và trình tự
Xây dựng sơ đồ usecase và trình tự bằng phần mềm draw.io 100.000VNĐ
Thiết kế cơ cở dự liệu Xây dựng các trường dữ liệu cần thiết cho phần mềm 300.000VNĐ
Thiết kế giao diện cho phần mềm
Xây dựng các chức năng chính cho phần mềm bán hàng
Viết bài phân tích chi tiết về hệ thống
Viết báo cáo trình bày phân tích và thiết kế ra hệ thống phần mềm
Module thống kê sản phẩm
Phân tích yêu cầu cụ thể cho từng module
Xây dựng chi tiết nhiệm vụ chính của hệ thống 100.000VNĐ
Xây dựng chức năng cùng các sự kiện 150.000VNĐ
Xây dựng code Xử lý các tính năng khi thao tác 600.000VNĐ
Cài đặt các module Demo module khi xây dựng xong 200.000VNĐ
Kiểm tra giao diện, độ chính xác và tìm các lỗi trong hệ thống 100.000VNĐ
Viết báo cáo hoàn thiện Trình bày báo cáo chi tiết khi thiết kế module 50.000VNĐ Tích hợp và hoàn thành sản phẩm
Lắp ghép các module lại với nhau cho hoàn chỉnh 100.000VNĐ Kiểm thử phần mềm
Test lại toàn bộ hệ thống đã xây dựng 150.000VNĐ
Fix code Tìm kiếm các lỗi phát sinh trong quá trình thực thi 200.000VNĐ Đóng gói phần mềm
Viết báo cáo hướng dẫn sử dụng Viết bản hướng dẫn sử dụng phần mềm 0VNĐ
Lên kế hoạch bảo trì phần mềm Đề ra kế hoạch bảo trì 0VNĐ Kết thúc dự án Tổng kết lại quá trình là ra dự án 0VNĐ
Bảng 2 1 Bảng ước lượng về chi phí
Giai đoạn Công việc chính Mô tả công việc Thời gian
Khảo sát yêu cầu dự án Thu thập cá dự liệu cần thiết về dự án 1 ngày
Bắt đầu dự án Triển khai và thiết lập project cho dự án 1 ngày
Lập kế hoạch phạm vi dự án Lập kế hoạch chi tiết cho phạm vi làm việc 1 ngày
Viết báo cáo tổng kết dự án
Tổng kết lại toàn bộ quá trình quản lý dự án
Phân tích và thiết kế hệ thống Đặc tả chi tiết yêu cầu của khách hàng
Mô tả chi tiết những yêu cầu, chức năng cần có của phần mềm
Mô tả hệ thống thông qua sơ đồ usecase và trình tự
Xây dựng sơ đồ usecase và trình tự bằng phần mềm draw.io
Thiết kế cơ cở dự Xây dựng các trường dữ 1 ngày liệu liệu cần thiết cho phần mềm
Thiết kế giao diện cho phần mềm
Xây dựng các chức năng chính cho phần mềm bán hàng
Viết bài phân tích chi tiết về hệ thống
Viết báo cáo trình bày phân tích và thiết kế ra hệ thống phần mềm
Module thống kê sản phẩm
Phân tích yêu cầu cụ thể cho từng module
Xây dựng chi tiết nhiệm vụ chính của hệ thống
Xây dựng chức năng cùng các sự kiện
Xây dựng code Xử lý các tính năng khi thao tác
Cài đặt các module Demo module khi xây dựng xong
Kiểm tra giao diện, độ chính xác và tìm các lỗi trong hệ thống
Viết báo cáo hoàn thiện
Trình bày báo cáo chi tiết khi thiết kế module
Tích hợp và hoàn thành sản phẩm
Lắp ghép các module lại với nhau cho hoàn chỉnh 1 ngày Kiểm thử phần mềm
Test lại toàn bộ hệ thống đã xây dựng
Fix code Tìm kiếm các lỗi phát sinh trong quá trình thực thi
2 ngày Đóng gói phần mềm
Viết báo cáo hướng dẫn sử dụng
Viết bản hướng dẫn sử dụng phần mềm
Lên kế hoạch bảo trì phần mềm Đề ra kế hoạch bảo trì 1 ngày Kết thúc dự án Tổng kết lại quá trình là ra dự án
Bảng 2 2 2Bảng ước lượng về thời gian
2.1.2 Ước lượng về số lượng người tham gia
Số lượng người tham gia vào dự án này là 1 người.
Lập lịch và theo dõi dự án
Hoạt động Tên hoạt động
Khảo sát thực tế, phân tích các yêu cầu
1.2 Báo cáo triển khai dự án 1.1 ✓
1.3 Lập kế hoạch cho dự án 1.2 19/08/21
2.1 Phân tích quy trình nghiệp vụ 1.2 20/08/21 21/08/21 ✓
2.2 Xây dựng use case cho hệ thống 2.1 21/08/21 23/08/21 ✓ kế phần mềm
Xậy dựng sơ đồ trình tự cho hệ thống
2.4 Thống nhất các sơ đồ 2.3 27/08/21 28/08/21 ✓
Xây dựng cơ sở dự liệu
3.1 Phân tích các đối tượng
Xây dựng các thuộc tính cho từng đối tượng
3.3 Thiết kế cơ sở dự liệu và nhập dữ liệu
4.1 Xây dựng các form đã được phân tích 3.3 3 ngày ✓
4.2 Xử lý sự kiện 4.1 4 ngày ✓ chức năng chính 4.3
Demo các module đã hoàn thành 4.1 1 ngày ✓
5.1 Kiểm tra các giao diện 4.3 1 ngày ✓
5.2 Kiểm tra lại dự liệu 5.1 1 ngày ✓
5.3 Fix code nếu gặp lỗi 5.2 1 ngày ✓
6.1 Viết báo cáo về module 5.1 1 ngày ✓
6.2 Viết báo cáo hướng dẫn sử dụng phần mềm 6.1 1 ngày ✓
Tích hợp và bảo trì
7.1 Lên kế hoạch bảo trì phần mềm
Bảng 2 3 Bảng lập lịch và theo dõi
PHÂN TÍCH V THIẾT KẾ HỆ THỐNG
Xác định các Actor và Use Case tổng quát hệ thống
1 Bộ phận quản lí -Đăng nhập
-Quản lí nhân viên -Quản lí khách hàng -Quản lí kho hàng
- Quản lí khách hàng -Tìm kiếm sản phẩm
3 Nhân viên -Quản lí sản phẩm
3.1.2 Các Use Case tổng quát hệ thống
Hình 3 1 Use Case tổng quát
Phân tích chức năng của hệ thống
3.2.1 Chức năng đăng nhập, đăng xuất
Hình 3 2 Biểu đồ chức năng quản lý đăng nhập, đăng xuất
➢ Đặc tả use case đăng nhập, đăng xuất
• Tác nhân :Bộ phận quản lí, Nhân viên , khách hàng
Khi người dùng muốn truy cập vào hệ thống, họ cần thực hiện chức năng đăng nhập Sau khi hoàn tất công việc, việc đăng xuất là cần thiết để thoát khỏi hệ thống an toàn.
- Tác nhân yêu cầu giao diện đăng nhập vào hệ thống
- Hệ thống hiện thị giao diện đăng nhập cho tác nhân -
Tác nhân sẽ: cập nhật tên đăng nhập (usename) và mật khẩu (password)
- Hệ thống kiểm tra dữ liệu và xác nhận thông tin từ tác nhân gửi vào hệ thống
- Thông tin đúng thì hệ thống gửi thông báo và đưa tác nhân vào hệ thống chính
- Kết thúc use case đăng nhập
-Sự kiện 1: Nếu tác nhân đăng nhập sai hệ thống thông báo đăng nhập lại hoặc thoát Sau khi tác nhân chọn thoát kết thúc use case
• Các yêu cầu đặc biệt: không có
• Trạng thái hệ thống trước khi sử dụng use case: không có • Trạng thái hệ thống sau khi sử dụng use case:
-Nếu đăng nhập thành công:Hệ thống sẽ đưa bạn vào hệ thống để sử dụng
-Nếu đăng nhập sai: Hệ thống sẽ thông báo “Đăng nhập thất bại !” và quay lại chức năng đăng nhập cho bạn
Hình 3 3 Biểu đồ hoạt động chức năng đăng nhập
-Bộ phận quản lí, nhân viên, khách hàng
-Bộ phân quản lý ,nhân viên đặng nhập vào chức năng quản lý sự kiện của hệ thống
C:Sơ đồ luồng nghiệp vụ cơ bản
D : Mô tả các bước trong luồng nghiệp vụ cơ bản
➢ Bước1 :Bộ phận quản lí, nhân viên , khách hàng yêu cầu chức năng đăng nhập
➢ Bước 2: Người thực hiện nhập dữ liệu:
➢ Bước 3: Kiểm tra dữ liệu nhập:
✓ Tài khoản, Mật khẩu chỉ được chứa các ký tự chữ cái ,số và một vài ký tự đặc biệt khác được cho phép
✓ Hợp lệ : chuyển sang bước 4
✓ Không hợp lệ : chuyển sang bước 2
➢ Bước 4: Kiểm tra đăng nhập
✓ Hợp lệ : chuyển sang bước 5
✓ Không hợp lệ: chuyển sang bước 2
➢ Bước 5: Đăng nhập tương ứng
Hình 3 4 Biểu đồ hoạt động chức năng đăng xuất
- Bộ phận quản lí, nhân viên , khách hàng
- Người thực hiện yêu cầu chức năng đăng xuất hệ thống C: Sơ đồ luồng nghiệp vụ:
D Mô tả các bước trong luồn nghiệp vụ cơ bản
- Bước 1: Bộ phân quản lý ,nhân viên hoặc các đơn vị thành viên yêu cầu chức năng đăng xuất
- Bước 2: Hệ thống kiểm tra đăng nhập :
✓ Đã đăng nhập : chuyển sang bước 3 Chưa đăng nhập : ✓ chuyển sang bước 5 - Bước 3: Xác nhận yêu cầu:
✓ Xác nhận : chuyển về bước 4
✓ Không xác nhận : Tiếp tục sử dụng hệ thông và chuyển sang bước 5
✓ Ngắt kết nối với hệ thống
Hình 3 5 Biểu đồ trình tự chức năng đăng nhập
Hình 3 6 Biểu đồ trình tự chức năng đăng xuất
3.2.2.Chức năng quản lý sản phẩm
Hình 3 7 Biểu đồ use case chức năng quản lý sản phẩm
➢ Đặc tả use case chức năng quản lí sản phẩm
• Tác nhân: Bộ phận quản lí,nhân viên , khách hàng
Mỗi khi nhân viên quản lý sản phẩm truy cập vào mục Sản phẩm trên hệ thống, họ có thể dễ dàng tìm kiếm, thêm, sửa hoặc xóa thông tin sản phẩm Đồng thời, khách hàng cũng có thể sử dụng phần mềm để tìm kiếm các sản phẩm mà họ mong muốn.
-Tác nhân nhấn vào danh mục “sản phẩm” để quản lí
-Hệ thống hiển thị giao diện sản phẩm cho tác nhân
- Tác nhân thực hiện yêu cầu quản lí
- Hệ thống kiểm tra và cập nhật thông tin lên giao diện
-Kết thúc use case sản phẩm
➢ Sự kiện 1: Nếu tác nhân nhập thiếu dữ liệu hệ thống sẽ gửi thông báo chưa nhập và yêu cầu nhập đầy đủ
• Các yêu cầu đặc biệt :Không có
• Trạng thái hệ thống trước khi sử dụng hệ thống: không có
• Trạng thái hệ thống sau khi sử dụng hệ thống:
Chức năng Thành công Thất bại
Thêm sản phẩm Hệ thống sẽ thông báo “thêm, sửa, xóa” sản phẩm thành công và cập nhật sản phẩm lên form hiển thị
Hệ thống thông báo thất bại và yêu cầu nhập lại lại thông tin sản phẩm
Tìm kiếm sản phẩm Hiện thị sản phẩm muốn tìn lên form
Hình 3 8 Biểu đồ hoạt động chức năng quản lí sản phẩm
- Bộ phận quản lí, nhân viên ,khách hàng B:Điều kiện kích hoạt
- Người thực hiện yêu cầu chức năng quản lí sản phẩm
C:Sơ đồ luồng nghiệp vụ cơ bản
D:Mô tả các bước trong luồng nghiệp vụ
- Bước 1:Người dùng nhấn vào chức năng sản phẩm
- Bước 2:Người dùng thực hiện các chức năng (thêm , sửa , xóa, tìm kiếm) sản phẩm
- Bước 3 :Thêm dữ liệu , sửa dữ liệu, xóa dữ liệu, tìm kiếm dữ liệu theo nhu cầu
- Bước 4:Kiểm tra dư liêu người dùng Dữ liệu đúng : Thực hiện ✓ bước 5
✓ Dữ liệu sai : Quay lại bước 3
- Bước 5: Hiển thị dữ liệu lên hệ thống
Hình 3 9 Biểu đồ trình tự chức năng thêm sản phẩm
Hình 3 10 Biểu đồ trình tự chức năng sửa sản phẩm
Hình 3 11 Biểu đồ trình tự chức năng xóa sản phẩm
Hình 3 12 Biểu đồ trình tự chức năng tìm kiếm sản phẩm
3.3.3.Chức năng quản lí nhân viên
Hình 3 13 Use case chức năng quản lí nhân viên
➢ Đặc tả use case chức năng quản lí nhân viên
• Mô tả: Tác nhân chọn mục nhân viên trên hệ thống Ở đây tác nhân có thể tìm kiếm , thêm , sửa , xóa sản phẩm trên hệ thống
-Tác nhân vào giao diện nhân viên
- Hệ thống hiển thị giao diện nhân viên cho tác nhân
- Tác nhân thực hiện yêu cầu quản lí
- Hệ thống kiểm tra và cập nhật thông tin lên giao diện
- Kết thúc use case nhân viên
- Sự kiện 1: Nếu tác nhân nhập thiếu dữ liệu hệ thống sẽ gửi thông báo chưa nhập và yêu cầu nhập đầy đủ
• Các yêu cầu đặc biệt :Không có
• Trạng thái hệ thống trước khi sử dụng hệ thống: không có
• Trạng thái hệ thống sau khi sử dụng hệ thống:
Chức năng Thành công Thất bại
Thêm nhân viên Hệ thống sẽ thông báo “thêm, sửa, xóa” sản phẩm thành công và cập nhật sản phẩm lên form hiển thị
Hệ thống thông báo thất bại và yêu cầu nhập lại lại thông tin sản phẩm
Hình 3 14 biểu đồ hoạt động chức năng quản lý nhân viên
- Người thực hiện yêu cầu chức năng quản lí nhân viên C:Sơ đồ luồng nghiệp vụ cơ bản
D:Mô tả các bước trong luồng nghiệp vụ
- Bước 1:Người dùng nhấn vào chức năng nhân viên
- Bước 2:Người dùng thực hiện các chức năng (thêm , sửa , xóa) nhân viên
- Bước 3 :Thêm dữ liệu , sửa dữ liệu, xóa dữ liệu theo nhu cầu
- Bước 4:Kiểm tra dư liêu người dùng Dữ liệu đúng : Thực hiện ✓ bước 5
✓ Dữ liệu sai : Quay lại bước 3
- Bước 5: Hiển thị dữ liệu lên hệ thống
Hình 3 15 Biểu đồ trình tự chức năng thêm nhân viên
Hình 3 16 Biểu đồ trình tự chức năng sửa nhân viên
Hình 3 17 Biểu đồ trình tự chức năng xóa nhân viên
3.3.4.Chức năng quản lý khách hàng
Hình 3 18 Biểu đồ Use case quản lý khách hàng
➢ Đặc tả use case chức năng quản lí khách hàng
• Tác nhân :bộ phận quản lí, nhân viên , khách hàng
Tác nhân quản lý khách hàng có thể truy cập mục khách hàng trên hệ thống để thực hiện các thao tác như tìm kiếm, thêm, sửa và xóa sản phẩm một cách dễ dàng.
-Tác nhân vào giao diện khách hàng
- Hệ thống hiển thị giao diện khách hàng cho tác nhân - Tác nhân thực hiện yêu cầu quản lí
- Hệ thống kiểm tra và cập nhật thông tin lên giao diện
- Kết thúc use case khách hàng
- Sự kiện 1: Nếu tác nhân nhập thiếu dữ liệu hệ thống sẽ gửi thông báo chưa nhập và yêu cầu nhập đầy đủ
• Các yêu cầu đặc biệt :Không có
• Trạng thái hệ thống trước khi sử dụng hệ thống: không có
• Trạng thái hệ thống sau khi sử dụng hệ thống:
Chức năng Thành công Thất bại
Thêm khách hàng Hệ thống sẽ thông báo “thêm, sửa, xóa” sản phẩm thành công và cập nhật sản phẩm lên form hiển thị
Hệ thống thông báo thất bại và yêu cầu nhập lại lại thông tin sản phẩm
Hình 3 19 biểu đồ hoạt động chức năng quản lý khách hàng
- Bộ phận quản lí, nhân viên , khách hàng
- Người thực hiện yêu cầu chức năng khách hàng C: Sơ đồ luồng nghiệp vụ:
D:Mô tả các bước trong luồng nghiệp vụ
- Bước 1:Người dùng nhấn vào chức năng khách hàng
- Bước 2:Người dùng thực hiện các chức năng (thêm , sửa , xóa) khách hàng
- Bước 3 :Thêm dữ liệu , sửa dữ liệu, xóa dữ liệu theo nhu cầu
- Bước 4:Kiểm tra dư liêu người dùng Dữ liệu đúng : Thực hiện ✓ bước 5
✓ Dữ liệu sai : Quay lại bước 3
- Bước 5: Hiển thị dữ liệu lên hệ thống
Hình 3 20 Biểu đồ trình tự chức năng thêm khách hàng
Hình 3 21 Biểu đồ trình tự chức năng sửa khách hàng
Hình 3 22 Biểu đồ trình tự chức năng xóa khách hàng
3.3.5 Chức năng quản lý kho
Hình 3 23 Biểu đồ use case chức năng quản lý kho
➢ Đặc tả use case chức năng quản lí kho
• Tác nhân: Bộ phận quản lí
Khi kho nhập nguyên liệu từ nhà cung cấp, thông tin sẽ được lưu trữ trên hệ thống để giúp tác nhân dễ dàng quản lý Tác nhân có khả năng kiểm tra số lượng nguyên liệu cũng như hóa đơn bán hàng của cửa tiệm một cách thuận tiện.
-Tác nhân vào giao diện kho hàng
- Hệ thống hiển thị giao diện kho hàng cho tác nhân
- Tác nhân thực hiện yêu cầu quản lí
- Hệ thống kiểm tra và cập nhật thông tin lên giao diện
- Kết thúc use case kho
- Sự kiện 1: Nếu tác nhân nhập thiếu dữ liệu hệ thống sẽ gửi thông báo chưa nhập và yêu cầu nhập đầy đủ
• Các yêu cầu đặc biệt :Không có
• Trạng thái hệ thống trước khi sử dụng hệ thống: không có
• Trạng thái hệ thống sau khi sử dụng hệ thống:
Chức năng Thành công Thất bại
Thống kê nhập hóa đơn
Hiển thị được thông tin trên hệ thống
Ko cập nhật dc dữ liệu
Thống kê số lượng nhập xuất nguyên liệu
- Người thực hiện yêu cầu chức năng quản lí kho C: Sơ đồ luồng nghiệp vụ:
Hình 3 24 biểu đồ hoạt động chức năng quản lý thống kê kho
D: Mô tả các bước trong luồng nghiệp vụ
- Bước 1:Người dùng nhấn vào chức năng quản lí kho
- Bước 2:Người dùng chọn chức năng cần thống kê
- Bước 3:Kiểm tra dư liêu thống kê hệ thống
✓ Có dữ liệu: Thực hiện bước 4
✓ Không dữ liệu: Quay lại bước 2
- Bước 4: Show dữ liệu lên hệ thống
Hình 3 25 Biểu đồ trình tự chức năng thống kê hóa đơn
Hình 3 26 Biểu đồ trình tự chức năng tổng doanh thu hóa đơn
Hình 3 27 Biểu đồ trình tự thống kê phiếu nhập sản phẩm
THIẾT KẾ
Thiết kế giao diện
4.1.1 Giao diện đăng nhập, đăng xuất
Hình 4 1 Giao diện đăng nhập,đăng xuất
4.1.2 Giao diện quản lý sản phẩm
Hình 4 2 Giao diện quản lý sản phẩm
4.1.3 Giao diện quản lý nhân viên
Hình 4 3 Giao diện quản lý nhân viên
4.1.4 Giao diện quản lý khách hàng
Hình 4 4 Giao diện quản lý khách hàng
4.1.5 Giao diện thống kê hóa đơn bán hàng
Hình 4 5 Giao diện thống kê hóa đơn bán hàng
4.1.6 Giao diện thống kê phiếu nhập sản phẩm
Hình 4 6 Giao diện thống kê phiếu nhập
Thiết kế lưu trữ
4.2.5 Bảng thống kê hóa đơn
Bảng 4 6 Bảng thống kê hóa đơn bán hàng
4.2.6 Bảng thống kê phiếu nhập
Bảng 4 7 Bảng thống kê phiếu nhập sản phẩm
LẬP TRÌNH
Code chức năng đăng nhập
System.ComponentModel; using System.Data; using
System.Data.SqlClient; namespace btaplonCNPM
} string chuoiketnoi = @"Data Source=NHATLONG;Initial
ID=sa;Password3456"; string sql;
SqlDataReader docdulieu; private void frmlogin_Load(object sender, EventArgs e)
(String.IsNullOrEmpty(txtuser.Text)) if
MessageBox.Show(" Bạn chưa nhập username " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtuser.Focus(); return false;
(String.IsNullOrEmpty(txtpass.Text)) if
MessageBox.Show(" Bạn chưa nhập password " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtpass.Focus(); return false;
} private void btnlogin_Click(object sender, EventArgs e)
{ sql = @" SELECT * FROM [TIEMBANH].[dbo].[USER] WHERE USERNAME = '" + txtuser.Text + "' and PASSWORD ='" + txtpass.Text+ ; ketnoi.Open(); "'" thuchien = new SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); if
{ frmMain main = new frmMain(); main.Show(); this.Hide();
MessageBox.Show(" Tài khoản hoặc mật khẩu ko chính xác !!"); } ketnoi.Close();
} private void btnexit_Click(object sender, EventArgs e)
("Bạn có chắc muốn thoát không?" "Thông , báo ", MessageBoxButtons.OKCancel); (h if
Code Chức năng đăng xuất
private void đăngXuấtToolStripMenuItem_Click(object sender, EventArgs e)
{ frmlogin login = new frmlogin(); login.ShowDialog();
Code chức năng quản lý sản phẩm
System.ComponentModel; using System.Data; using
System.Data.SqlClient; namespace btaplonCNPM
} string chuoiketnoi = @"Data Source=NHATLONG;Initial
Security Info=True;User ID=sa;Password3456"; string sql;
SqlDataReader docdulieu; int i = 0; private void frmsanpham_Load(object sender, EventArgs e)
{ ketnoi = new SqlConnection(chuoiketnoi); hienthi();
{ listViewsp.Items.Clear(); ketnoi.Open(); sql = @"Select IDSANPHAM, TENSANPHAM, GIABAN,
KHUYENMAI FROM SANPHAM"; thuchien = new
SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); i = 0; while (docdulieu.Read())
{ listViewsp.Items.Add(docdulieu[0].ToString()); listViewsp.Items[i].SubItems.Add(docdulieu[1].ToString()); listViewsp.Items[i].SubItems.Add(docdulieu[2].ToString()); listViewsp.Items[i].SubItems.Add(docdulieu[3].ToString()); i++; } ketnoi.Close();
} private void listViewsp_Click(object sender, EventArgs e)
{ txtID.Text = listViewsp.SelectedItems[0].SubItems[0].Text; txttensp.Text = listViewsp.SelectedItems[0].SubItems[1].Text; txtGia.Text = listViewsp.SelectedItems[0].SubItems[2].Text; cbKM.Text = listViewsp.SelectedItems[0].SubItems[3].Text;
(String.IsNullOrEmpty(txtID.Text)) if
MessageBox.Show(" Bạn chưa nhập ID sản phẩm " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtID.Focus(); return false;
(String.IsNullOrEmpty(txttensp.Text)) if
MessageBox.Show(" Bạn chưa nhập tên sản phẩm" "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txttensp.Focus(); return false;
(String.IsNullOrEmpty(txtGia.Text)) if
MessageBox.Show(" Bạn chưa nhập giá sản phẩm" "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtGia.Focus(); return false;
(String.IsNullOrEmpty(txtID.Text)) if
MessageBox.Show(" Bạn chưa chọn ID sản phẩm" "Thông báo", ,
MessageBoxIcon.Information); txtID.Focus(); return false;
} private void btnthem_Click(object sender, EventArgs e)
{ listViewsp.Items.Clear(); ketnoi.Open(); sql = @"INSERT INTO SANPHAM(IDSANPHAM,
TENSANPHAM, GIABAN, KHUYENMAI) VALUES (N'" + txtID.Text + @"' ,N'" + txttensp.Text + @"' , N'" + (txtGia.Text) + @"'
,N'" + cbKM.Text + @"')"; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Thêm sản phẩm thành công !" "Thông báo", ); } else
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", , MessageBoxButtons.OK, MessageBoxIcon.Stop);
} private void btnsua_Click(object sender, EventArgs e)
{ listViewsp.Items.Clear(); ketnoi.Open(); sql = @"UPDATE SANPHAM SET IDSANPHAM = N'" + txtID.Text + @"' ,TENSANPHAM = N'" + txttensp.Text + @"', GIABAN = N'" + txtGia.Text + @"' , KHUYENMAI = N'" + cbKM.Text + @"'
+ @"') "; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Sản phẩm đã được cập nhật thành công !" "Thông , báo");
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", ,
} private void btnXoa_Click(object sender, EventArgs e)
To delete a product from the database, first clear the list view items and open the database connection Then, execute a SQL command to remove the product using its ID from the "SANPHAM" table After executing the command, close the connection and refresh the display Finally, show a message box confirming the successful deletion of the product.
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", ,
} private void btnnhap_Click(object sender, EventArgs e)
{ txtID.Clear(); txttensp.Clear(); txtGia.Clear(); cbKM.Text = string.Empty; hienthi();
} private void btnTim_Click_1(object sender, EventArgs e)
{ listViewsp.Items.Clear(); sql = @"Select IDSANPHAM, TENSANPHAM, GIABAN, KHUYENMAI FROM SANPHAM where IDSANPHAM = '" + txtID.Text + ; ketnoi.Open(); "'" thuchien = new SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); i = 0;
{ listViewsp.Items.Add(docdulieu[0].ToString()); listViewsp.Items[i].SubItems.Add(docdulieu[1].ToString()); listViewsp.Items[i].SubItems.Add(docdulieu[2].ToString()); listViewsp.Items[i].SubItems.Add(docdulieu[3].ToString()); i++; } else
MessageBox.Show("Không có sản phẩm trong cửa hàng" "Thông , báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question); } ketnoi.Close();
} private void btnThoat_Click(object sender, EventArgs e)
Code Chức năng quản lý khách hàng
System.ComponentModel; using System.Data; using
System.Data.SqlClient; namespace btaplonCNPM
} string chuoiketnoi = @"Data Source=NHATLONG;Initial
ID=sa;Password3456"; string sql;
SqlDataReader docdulieu; int i = 0; private void frmkhachhang_Load(object sender, EventArgs e)
{ ketnoi = new SqlConnection(chuoiketnoi); hienthi();
{ listViewKH.Items.Clear(); ketnoi.Open(); sql = @"Select TENKHACHHANG, MAKHACHHANG, NGAYSINH, DIACHI, VIP, EMAIL FROM KHACHHANG"; thuchien = new SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); i = 0; while (docdulieu.Read())
The code snippet demonstrates how to add items to a ListView control in a C# application It retrieves data from an array called `docdulieu` and populates each ListView item with various sub-items, including a formatted date The loop continues until all relevant data is added, and finally, the database connection is closed with `ketnoi.Close()` This efficient data handling ensures that the ListView displays comprehensive information in an organized manner.
} private void button4_Click(object sender, EventArgs e)
} private void listViewKH_Click(object sender, EventArgs e)
The selected customer's details can be retrieved from the list view, where the customer's name is assigned to `txttenkh`, the customer ID to `txtmakh`, and the selected date is converted to a DateTime format using `dateTimePicker1.Value` Additionally, the address is stored in `txtdc`, the VIP status is set in `cbVIP`, and the email address is populated in `txtEmail`.
(String.IsNullOrEmpty(txttenkh.Text)) if
MessageBox.Show(" Bạn chưa nhập tên khách hàng " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txttenkh.Focus(); return false;
(String.IsNullOrEmpty(txtmakh.Text)) if
MessageBox.Show(" Bạn chưa nhập mã khách hàng " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtmakh.Focus(); return false;
(String.IsNullOrEmpty(txtdc.Text)) if
MessageBox.Show(" Bạn chưa nhập địa chỉ khách hàng " "Thông , báo",
MessageBoxIcon.Information); txtdc.Focus(); return false;
(String.IsNullOrEmpty(txtEmail.Text)) if
MessageBox.Show(" Bạn chưa nhập email khách hàng " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtEmail.Focus(); return false;
(String.IsNullOrEmpty(dateTimePicker1.Text)) if
MessageBox.Show(" Bạn chưa nhập ngày sinh khách hàng " "Thông , báo",
MessageBoxIcon.Information); dateTimePicker1.Focus(); return false;
(String.IsNullOrEmpty(cbVIP.Text)) if
MessageBox.Show(" Bạn chưa chọn VIP cho khách hàng " "Thông , báo",
MessageBoxIcon.Information); cbVIP.Focus(); return false;
} private void btnthemkh_Click(object sender, EventArgs e)
{ listViewKH.Items.Clear(); ketnoi.Open(); sql = "INSERT INTO KHACHHANG(TENKHACHHANG,
VIP, EMAIL) VALUES (N'"+txttenkh.Text+@"' ,N'"+txtmakh.Text+@"',N'" +dateTimePicker1.Value.ToString("yyyy - MM - dd" "',N'" + txtdc.Text)++ @"' ,N'" + cbVIP.Text + @"', N'" + txtEmail.Text + @"' ) "; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Thêm khách hàng thành công !" "Thông báo", ); } else
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", , MessageBoxButtons.OK, MessageBoxIcon.Stop);
(String.IsNullOrEmpty(txttenkh.Text)) if
MessageBox.Show(" Bạn chưa nhập tên khách hàng " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txttenkh.Focus(); return false;
} private void btnSuaKH_Click(object sender, EventArgs e)
{ listViewKH.Items.Clear(); ketnoi.Open(); sql = @"UPDATE KHACHHANG SET TENKHACHHANG = N'" + txttenkh.Text + @"'
,MAKHACHHANG = N'" + txtmakh.Text + @"', NGAYSINH = N'" + dateTimePicker1.Value.ToString("yyyy - MM - dd") + "', DIACHI = N'" +txtdc.Text + @"',
VIP= N'" + cbVIP.Text + @"', EMAIL= N'" + txtEmail.Text + @"'
"; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Khách hàng đã được cập nhật thành công !" "Thông báo", ); } else
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", , MessageBoxButtons.OK, MessageBoxIcon.Stop);
} private void btnXoa_Click(object sender, EventArgs e)
{ listViewKH.Items.Clear(); ketnoi.Open(); sql = @"DELETE FROM KHACHHANG WHERE
@"')"; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Xóa khách hàng thành công ",
"Thông báo", MessageBoxButtons.OK); } else
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", , MessageBoxButtons.OK, MessageBoxIcon.Stop);
} private void button1_Click(object sender, EventArgs e)
{ txttenkh.Clear(); txtmakh.Clear(); txtdc.Clear(); cbVIP.Text = string.Empty; txtEmail.Clear(); hienthi();
Code Chức năng quản lý nhân viên
System.ComponentModel; using System.Data; using
System.Data.SqlClient; namespace btaplonCNPM
} string chuoiketnoi = @"Data Source=NHATLONG;Initial
Security Info=True;User ID=sa;Password3456"; string sql;
SqlDataReader docdulieu; int i = 0; private void button4_Click(object sender, EventArgs e)
} private void frmnhanvien_Load(object sender, EventArgs e)
{ ketnoi = new SqlConnection(chuoiketnoi); hienthi();
{ listViewNV.Items.Clear(); ketnoi.Open(); sql = @"Select IDNHANVIEN, TENNHANVIEN, DIACHI,
GIOITINH, CALAM, HSLUONG FROM NHANVIEN"; thuchien = new SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); i = 0; while (docdulieu.Read())
The code snippet demonstrates how to add items to a ListView control in a programming environment It initializes a new item in the ListView and populates it with data from an array called `docdulieu` Each item is supplemented with multiple sub-items, corresponding to the elements of the array, ensuring a structured display of information After populating the ListView, the connection is closed with `ketnoi.Close()`, indicating the completion of data handling.
} private void listViewNV_Click(object sender, EventArgs e)
The selected employee's ID is retrieved and displayed in the txtidnv field, while their name is shown in the txttennv field The address is populated in the txtdc field, and the gender is set in the cbGT dropdown Additionally, the txtcalam field reflects the employee's position, and the txthsluong field displays their salary information.
(String.IsNullOrEmpty(txtidnv.Text)) if
MessageBox.Show(" Bạn chưa nhập ID nhân viên " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtidnv.Focus(); return false;
(String.IsNullOrEmpty(txttennv.Text)) if
MessageBox.Show(" Bạn chưa nhập tên nhân viên" "Thông báo", ,
MessageBoxIcon.Information); txttennv.Focus(); return false;
(String.IsNullOrEmpty(txtdc.Text)) if
MessageBox.Show(" Bạn chưa nhập địa chỉ nhân viên ! " "Thông , báo",
MessageBoxIcon.Information); txtdc.Focus(); return false;
(String.IsNullOrEmpty(cbGT.Text)) if
{ MessageBox.Show(" Bạn chưa nhập giới tính nhân viên ! " "Thông báo", ,
MessageBoxIcon.Information); cbGT.Focus(); return false;
(String.IsNullOrEmpty(txtcalam.Text)) if
MessageBox.Show(" Bạn chưa nhập ca làm của nhân viên ! " "Thông , báo",
MessageBoxButtons.OK, MessageBoxIcon.Information); txtcalam.Focus(); return false;
(String.IsNullOrEmpty(txthsluong.Text)) if
MessageBox.Show(" Bạn chưa nhập hệ số lương của nhân viên !
", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); txthsluong.Focus(); return false;
(String.IsNullOrEmpty(txtidnv.Text)) if
MessageBox.Show(" Bạn chưa chọn ID sản phẩm" "Thông báo", ,
MessageBoxIcon.Information); txtidnv.Focus(); return false;
} private void button1_Click(object sender, EventArgs e)
{ listViewNV.Items.Clear(); ketnoi.Open(); sql = @"INSERT INTO NHANVIEN(IDNHANVIEN,
CALAM, HSLUONG ) VALUES (N'" + txtidnv.Text + @"' ,N'" + txttennv.Text + @"' , N'" +
(txtdc.Text) + @"' ,N'" + cbGT.Text + @"' , N'" + txtcalam.Text + @"' , N'" + (txthsluong.Text) + @"')"; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Thêm nhân viên thành công !" "Thông báo", ); } else
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", , MessageBoxButtons.OK, MessageBoxIcon.Stop);
} private void btnSua_Click(object sender, EventArgs e)
{ listViewNV.Items.Clear(); ketnoi.Open(); sql = @"UPDATE NHANVIEN SET IDNHANVIEN = N'" + txtidnv.Text + @"' , TENNHANVIEN = N'" + txttennv.Text + @"', DIACHI N'" + txtdc.Text + @"' ,GIOITINH = N'"
+ cbGT.Text + @"' , CALAM = N'" + txtcalam.Text + @"', HSLUONG = N'"+ txthsluong.Text +
WHERE (IDNHANVIEN = N'" + txtidnv.Text + @"') "; thuchien = new
SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Nhân viên đã được cập nhật thành công !" "Thông, báo");
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", ,
} private void btnxoa_Click(object sender, EventArgs e)
{ listViewNV.Items.Clear(); ketnoi.Open(); sql = @"DELETE FROM NHANVIEN WHERE (IDNHANVIEN N'" + txtidnv.Text +
@"')"; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Xóa nhân viên thành công " "Thông báo", , MessageBoxButt ons.OK);
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", ,
} private void btnnhapmoi_Click(object sender, EventArgs e)
{ txtidnv.Clear(); txttennv.Clear(); txtdc.Clear(); cbGT.Text = string.Empty; txtcalam.Clear(); txthsluong.Clear(); hienthi();
Code chức năng thống kê hóa đơn
System.ComponentModel; using System.Data; using
System.Linq; using System.Text; using
System.Data.SqlClient; namespace btaplonCNPM
} private void button4_Click(object sender, EventArgs e)
} string chuoiketnoi = @"Data Source=NHATLONG;Initial
Security Info=True;User ID=sa;Password3456"; string sql;
SqlDataReader docdulieu; int i = 0; private void frmhoadon_Load(object sender, EventArgs e)
// TODO: This line of code loads data into the
'tIEMBANHDataSet4.SANPHAM' table You can move, or remove it, as needed this.sANPHAMTableAdapter.Fill(this.tIEMBANHDataSet4.SANPHAM); // TODO: This line of code loads data into the
'tIEMBANHDataSet3.KHACHHANG' table You can move, or remove it, as needed this.kHACHHANGTableAdapter.Fill(this.tIEMBANHDataSet3.KHACHHA NG); // TODO: This line of code loads data into the
'tIEMBANHDataSet2.NHANVIEN' table You can move, or remove it, as needed this.nHANVIENTableAdapter.Fill(this.tIEMBANHDataSet2.NHANVIEN); // TODO: This line of code loads data into the
'tIEMBANHDataSet1.HOADON' table You can move, or remove it, as needed this.hOADONTableAdapter1.Fill(this.tIEMBANHDataSet1.HOADON); // TODO: This line of code loads data into the
'tIEMBANHDataSet.HOADON' table You can move, or remove it, as needed this.hOADONTableAdapter.Fill(this.tIEMBANHDataSet.HO
ADON); ketnoi = new SqlConnection(chuoiketnoi); hienthi();
{ listViewhd.Items.Clear(); ketnoi.Open(); sql = @"Select * from HOADON"; thuchien = new SqlCommand(sql, ketnoi); docdulieu = thuchien.ExecuteReader(); i = 0; while (docdulieu.Read())
The code snippet demonstrates how to populate a ListView control by adding items and their corresponding subitems from an array called `docdulieu` Each item is created by converting the data from the array into strings, including a formatted date string for the fifth element After adding all the necessary subitems for each ListView item, the connection is closed.
} private void listViewhd_Click(object sender, EventArgs e)
To retrieve data from the selected item in the list view, the code assigns the text of various sub-items to corresponding controls: `txtid` receives the text from the first sub-item, `cbsp` gets the second sub-item's text, `cbidnv` is populated with the third sub-item's text, and `cbkh` is filled with the fourth sub-item's text Additionally, the date picker control, `dateTimePicker1`, is set to the date value converted from the text of the fifth sub-item.
; txttien.Text listViewhd.SelectedItems[0].SubItems[5].Text;
(String.IsNullOrEmpty(txtid.Text)) if
MessageBox.Show(" Bạn chưa chọn ID hóa đơn " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txtid.Focus(); return false;
(String.IsNullOrEmpty(txttien.Text)) if
MessageBox.Show(" Bạn chưa nhập giá hóa đơn " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); txttien.Focus(); return false;
(String.IsNullOrEmpty(cbsp.Text)) if
MessageBox.Show(" Bạn chưa chọn ID sản phẩm " "Thông báo", ,
MessageBoxIcon.Information); cbsp.Focus(); return false;
(String.IsNullOrEmpty(cbidnv.Text)) if
MessageBox.Show(" Bạn chưa chọn ID nhân viên " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); cbidnv.Focus(); return false;
(String.IsNullOrEmpty(cbkh.Text)) if
MessageBox.Show(" Bạn chưa chọn tên khách hàng " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); cbkh.Focus(); return false;
(String.IsNullOrEmpty(dateTimePicker1.Text)) if
MessageBox.Show(" Bạn chưa chọn ngày " "Thông báo", ,
MessageBoxIcon.Information); dateTimePicker1.Focus(); return false;
} private void btntk_Click(object sender, EventArgs e)
{ listViewhd.Items.Clear(); sql = @"Select * from HOADON where IDHOADON = '" + txtid.Text + ; ketnoi.Open(); "'" thuchien = new SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); i = 0;
The code snippet demonstrates how to add items to a ListView control in a C# application Each item is populated with data from an array, where the first element is added as the main item, followed by several sub-items that include additional information The date is formatted to a short date string for better readability This process continues in a loop, incrementing the index for each new item added.
MessageBox.Show("Không có hóa đơn trong cửa hàng" "Thông , báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question); } ketnoi.Close();
} private void button1_Click(object sender, EventArgs e)
} private void btntinh_Click(object sender, EventArgs e)
{ ketnoi.Open(); sql = @"SELECT SUM(SOTIEN) AS tong
SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); while
{ txtBox.Text = docdulieu["tong"].ToString();
} private void btnthem_Click(object sender, EventArgs e)
{ listViewhd.Items.Clear(); ketnoi.Open(); sql = "INSERT INTO HOADON(IDHOADON,IDSANPHAM, IDNHANVIEN, TENKHACHHANG, NGAY, SOTIEN) VALUES (N'" + txtid.Text + @"' ,N'" + cbsp.Text + @"',N'" + cbidnv.Text +
@"',N'" + cbkh.Text + @"',N'" + dateTimePicker1.Value.ToString("yyyy - MM
+ txttien.Text + @"' ) "; thuchien = new SqlCommand(sql, ketnoi); thuchien.ExecuteNonQuery(); ketnoi.Close(); hienthi();
MessageBox.Show("Thêm hóa đơn thành công !" "Thông báo", ); } else
MessageBox.Show("Đã có lỗi xin thử lại !" "Thông báo lỗi", , MessageBoxButtons.OK, MessageBoxIcon.Stop);
Code chức năng thống kê phiếu nhập
System.ComponentModel; using System.Data; using
System.Data.SqlClient; namespace btaplonCNPM
} string chuoiketnoi = @"Data Source=NHATLONG;Initial
ID=sa;Password3456"; string sql;
SqlDataReader docdulieu; int i = 0; private void button2_Click(object sender, EventArgs e)
} private void frmphieu_Load(object sender, EventArgs e)
{ ketnoi = new SqlConnection(chuoiketnoi); hienthi();
{ listViewPN.Items.Clear(); ketnoi.Open(); sql = @"Select * from
= thuchien.ExecuteReader(); i = 0; while (docdulieu.Read())
{ listViewPN.Items.Add(docdulieu[0].ToString()); listViewPN.Items[i].SubItems.Add(docdulieu[1].ToString()); listViewPN.Items[i].SubItems.Add(docdulieu[2].ToString()); listViewPN.Items[i].SubItems.Add(Convert.ToDateTime(docdulieu[3]).ToSh ortDateString()); i++; } ketnoi.Close();
} private void listViewPN_Click(object sender, EventArgs e)
{ textBox1.Text = listViewPN.SelectedItems[0].SubItems[0].Text; } public bool CHECKID()
(String.IsNullOrEmpty(textBox1.Text)) if
MessageBox.Show(" Bạn chưa nhập ID phiếu " "Thông báo", , MessageBoxButtons.OK,
MessageBoxIcon.Information); textBox1.Focus(); return false;
} private void button1_Click(object sender, EventArgs e)
{ listViewPN.Items.Clear(); sql = @"Select * from PHIEUNHAP where IDPHIEUNHAP = '" +textBox1.Text+
"'"; ketnoi.Open(); thuchien = new SqlCommand(sql, ketnoi); docdulieu thuchien.ExecuteReader(); i = 0;
{ listViewPN.Items.Add(docdulieu[0].ToString()); listViewPN.Items[i].SubItems.Add(docdulieu[1].ToString()); listViewPN.Items[i].SubItems.Add(docdulieu[2].ToString()); listViewPN.Items[i].SubItems.Add(Convert.ToDateTime(docdulieu[3]).ToSh ortDateString()); i++; } else
MessageBox.Show("Không có phiếu trong cửa hàng" "Thông báo", , MessageBoxButtons.OKCancel, MessageBoxIcon.Question); } ketnoi.Close();
} private void button3_Click(object sender, EventArgs e)
KIỂM THỬ PHẦN MỀM
Kiểm thử chức năng: đăng nhập
Hiển thị giao diện đăng nhập
Login_2 Kiểm tra giao diện đăng nhập Ấn nút Tab Thứ tự tab từ trên xuống dưới từ trái qua phải
Login_3 Vị trí của biểu mẫu
Biểu mẫu được hiển thị giữa màn hình
Login_4 Thay đổi kích thước biểu mẫu Không thể thay đổi kích thước biểu mẫu
Login_5 Di chuyển biểu mẫu
Biểu mẫu có thể được di chuyển
Login_6 Xem trạng thái của nút đăng nhập và nút đóng
Trạng thái của các nút đang hoạt động
Login_7 Xem tất cả fields trong biểu mẫu đăng nhập
Labels và Button : -Tên đăng nhập -Mật khẩu -2 nút: Đăng nhập,Thoát
Login_8 Kiểm tra dữ liệu hiển thị trong field mật khẩu
Phải hiển thị ‘*’ thay vì dữ liệu được đưa vào
Login_9 Xem textbox mặc định
Textbox Tên đăng nhập:sẵn sàng và trống Textbox Mật khẩu: sẵn sàng và trống
Login_10 Kiểm tra field Tên đăng nhập
1.Nhập dữ liệu chính xác 2.Nhập dữ liệu chính xác cho tất cả field 3.Nhấp đăng nhập hoặc ấn enter
Login_11 1.Không nhập dữ liệu
2 Nhấp đăng nhập hoặc ấn enter
“Hãy nhập tài khoản và mật khẩu”
Login_12 1.Nhập dữ liệu sai
2 Nhấp đăng nhập hoặc ấn enter mật khẩu sai” công
Login_13 Kiểm tra field Mật khẩu
1.Nhập dữ liệu chính xác 2.Nhấp đăng nhập hoặc ấn enter
Login_14 1.Không nhập dữ liệu
2 Nhấp đăng nhập hoặc ấn enter
Login_15 1.Nhập dữ liệu sai
2 Nhấp đăng nhập hoặc ấn enter
“Tài khoản hoặc mật khẩu sai”
Login_18 Mất kết nối Ngắt kết nối với máy chủ
“Không kết nối được với máy chủ”
ĐÓNG GÓI V BẢO TRÌ PHẦN MỀM
Các bước đóng gói phần mềm
+Bước 1: Tải và download gói Setup Projects về
+ Bước 2: Mở Project của mình lên nhấn phải chuột chọn vào Solution => Add => New Project
+ Bước 3: Nhấn chọn vào Visual Studio Installer => Setup Project Sau đó đặt tên rồi chọn vị trí lưu cho File Exe sau này
+ Bước 4: Nhấn phải chuột vào Application Folder => Add => Project Outout + Bước 5: Chọn tên Project của sau đó nhấn chọn Primary ouput và nhấn OK
+ Bước 6: Tiếp tục nhấn phải chuột vào Primary output mới tạo và chọn Create Shortcut to Primary output
+ Bước 7: Tiếp theo hãy di chuyển Shortcut vừa tạo ở thư mục ApplicationFolder vào thư mục User’s Desktop
+ Bước 8: Bước này là bước thiết lập icon cho File Exe Nhấn phải chuột vào Shortcut chọn Properties Window
+ Bước 9: Nhấp chọn vào thư mục User’s Programs Menu Nhấn phải chuột vào khoảng trắng bên phải chọn Create New Shortcut
+ Bước 10: Tương tự hãy thiết lập icon cho Shortcut như ở trên
+ Bước 11: Vào mục Properties => Author để chỉnh tên tác giả và mục Manufacturer để chỉnh tên nhà sản xuất
+ Bước 12: Tiến hành Rebuild lại File Setup.
Khái niệm về bảo trì phần mềm
Bảo trì phần mềm là quá trình điều chỉnh các lỗi chưa được phát hiện trong giai đoạn phát triển hoặc trong quá trình sử dụng, đồng thời nâng cấp tính năng và đảm bảo an toàn vận hành Việc bảo trì định kỳ đóng góp tới 65-75% công sức trong toàn bộ chu kỳ sống của phần mềm.
Quá trình phát triển phần mềm bao gồm nhiều giai đoạn như thu thập yêu cầu, phân tích, thiết kế, xây dựng, kiểm tra, triển khai và bảo trì Giai đoạn bảo trì phần mềm có nhiệm vụ quan trọng là đảm bảo phần mềm luôn được cập nhật để thích ứng với những thay đổi trong môi trường và yêu cầu của người sử dụng.
Thích ứng (adaptative) là quá trình điều chỉnh phần mềm để phù hợp với những thay đổi trong môi trường sản phẩm Môi trường này bao gồm các yếu tố bên ngoài như quy tắc kinh doanh, luật pháp và phương thức làm việc.
Hoàn thiện phần mềm là quá trình chỉnh sửa để đáp ứng các yêu cầu mới hoặc thay đổi từ người sử dụng, nhằm nâng cao chức năng, cải thiện hiệu suất và giao diện Khi một phần mềm trở nên thành công, người dùng thường khám phá thêm nhiều yêu cầu mới ngoài những gì đã được đề ra ban đầu, do đó việc cải tiến các chức năng là cần thiết.
Bảo vệ (preventive): mục đích là làm hệ thống dễ dàng bảo trì hơn trong những lần tiếp theo.