1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Môn công nghệ phần mềm đề tài xây dựng phần mềm quản lý tiệm bánh sinh nhật

78 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây dựng phần mềm quản lý tiệm bánh sinh nhật
Tác giả Trần Bảo Khánh, Đặng Đình Quỳnh, Phạm Văn Đức
Người hướng dẫn Nguyễn Đức Giang
Trường học Trường Đại Học Điện Lực
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo cáo chuyên đề học phần
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 78
Dung lượng 2,01 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • 1.1. Khảo sát hệ thống (9)
  • 1.2. Xác định bài toán cần giải quyết (11)
    • 1.2.1 Với nhân viên (11)
    • 1.2.2 Với khách hàng (11)
    • 1.2.3 Với sản phẩm (11)
    • 1.2.4 Với kho hàng (11)
  • 1.3 Phân tích và đặc tả các nghiệp vụ của hệ thống (12)
    • 1.3.1 Sản phẩm (12)
    • 1.3.2. Nhân viên (12)
    • 1.3.3. Khách hàng (12)
    • 1.3.4. Kho hàng (12)
  • 1.4 Xác định các yêu cầu của hệ thống (13)
    • 1.4.1 Yêu cầu chức năng (13)
    • 1.4.2 Yêu cầu phi chức năng (13)
  • CHƯƠNG 2: QUẢN LÝ DỰ ÁN (14)
    • 2.1. Ước lượng dự án (14)
      • 2.1.1. Ước lượng chi phí (14)
      • 2.1.2 Ước lượng thời gian (0)
      • 2.1.2. Ước lượng về số lượng người tham gia (16)
    • 2.2 Lập lịch và theo dõi dự án (17)
  • CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG (18)
    • 3.1 Xác định các Actor và Use Case tổng quát hệ thống (18)
      • 3.1.1. Các Actor (18)
      • 3.1.2. Các Use Case tổng quát hệ thống (19)
    • 3.2. Phân tích chức năng của hệ thống (20)
      • 3.2.1 Chức năng đăng nhập, đăng xuất (20)
      • 3.2.2. Chức năng quản lý sản phẩm (24)
      • 3.3.3. Chức năng quản lí nhân viên (29)
      • 3.3.4. Chức năng quản lý khách hàng (33)
      • 3.3.5. Chức năng quản lý kho (37)
  • CHƯƠNG 4: THIẾT KẾ (41)
    • 4.1. Thiết kế giao diện (41)
      • 4.1.1. Giao diện đăng nhập, đăng xuất (41)
      • 4.1.2 Giao diện quản lý sản phẩm (41)
      • 4.1.3 Giao diện quản lý nhân viên (42)
      • 4.1.4 Giao diện quản lý khách hàng (42)
      • 4.1.5 Giao diện thống kê hóa đơn bán hàng (43)
      • 4.1.6 Giao diện thống kê phiếu nhập sản phẩm (43)
    • 4.2. Thiết kế lưu trữ (44)
      • 4.2.1. Bảng user (44)
      • 4.2.2. Bảng sản phẩm (44)
      • 4.2.3. Bảng nhân viên (45)
      • 4.2.4. Bảng khách hàng (45)
      • 4.2.5. Bảng thống kê hóa đơn (45)
      • 4.2.6. Bảng thống kê phiếu nhập (46)
  • CHƯƠNG 5. LẬP TRÌNH (47)
    • 5.1 Code chức năng đăng nhập (47)
    • 5.2. Code Chức năng đăng xuất (49)
    • 5.3. Code chức năng quản lý sản phẩm (49)
    • 5.4. Code Chức năng quản lý khách hàng (54)
    • 5.5. Code Chức năng quản lý nhân viên (59)
    • 5.6. Code chức năng thống kê hóa đơn (65)
    • 5.7. Code chức năng thống kê phiếu nhập (70)
  • CHƯƠNG 6. KIỂM THỬ PHẦN MỀM (73)
    • 6.1 Kiểm thử chức năng: đăng nhập (73)
  • CHƯƠNG 7: ĐÓNG GÓI VÀ BẢO TRÌ PHẦN MỀM (76)
    • 7.1 Các bước đóng gói phần mềm (76)
    • 7.2 Khái niệm về bảo trì phần mềm (77)
    • 7.3. Lý do cần bảo trì phần mềm (78)

Nội dung

Phần mềm quản lí cửa hàng xây dựng và có các công dụng như sau: 1.2.1 Với nhân viên - 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 1.2.4 Với kho hà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 lâu đời tại Hà Nội, nổi tiếng với những sản phẩm bánh ngọt chất lượng Những người yêu thích bánh ngọt, đặc biệt là bánh được làm theo phong cách Á Âu, chắc chắn sẽ tìm thấy sự hài lòng khi đến với cửa hàng này.

Tiệm Bánh Ngọt Thu Hường Bakery nổi bật với 9 cách làm bánh Á Âu độc đáo, luôn đáp ứng yêu cầu và sở thích riêng của khách hàng Chúng tôi không ngừng sáng tạo, cho ra đời những mẫu bánh mới, kết hợp hài hòa giữa nét đẹp hiện đại và truyền thống, mang đến nhiều kiểu bánh với vẻ đẹp khác nhau.

Ngoài bánh sinh nhật, quán còn cung cấp nhiều loại bánh đa dạng với chất lượng được khẳng định, bao gồm bánh kem, bánh nướng và socola tươi ngon mắt Bánh kem sinh nhật cốt gato hiện nay có nhiều phong cách trang trí phong phú, từ kiểu cổ điển Pháp đến những chiếc bánh vẽ chibi dễ thương và bánh hình 3D độc đáo.

Tiệm bánh 30m2 nằm ở trung tâm thành phố, phục vụ đông đảo khách hàng hàng ngày với đội ngũ 5 nhân viên, bao gồm 1 thu ngân, 2 nhân viên bán hàng và 2 nhân viên kho Cửa hàng hoạt động từ 7h30 đến 21h mỗi ngày, đảm bảo bán hàng liên tục Để nâng cao hiệu quả kinh doanh, tiệm đã đầu tư vào các trang thiết bị cần thiết 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 cũ kỹ, 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 này nhằm tối ưu hóa hiệu quả hoạt động và đáp ứng các yêu cầu cơ bản của hệ thống quản lý.

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ã sản phẩm riêng để dễ dàng quản lý Khách hàng sẽ sử dụng menu để đặt hàng, nhưng việc nhân viên kiểm tra số lượng sản phẩm theo tuần và thống kê lại khiến việc kiểm soát sản phẩm trở nên khó khăn.

Nhân viên

Lưu trữ thông tin nhân viên cửa hàng bao gồm mã nhân viên, tên, lương, địa chỉ và số điện thoại Nhân viên thu ngân chịu trách nhiệm quản lý thanh toán và xử lý đơn hàng cho khách Nhân viên bán hàng có nhiệm vụ 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 làm việc theo ca khác nhau và thường được phân công theo tuần để 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 sau Ngày sinh của khách hàng cũng sẽ được ghi lại, và vào dịp sinh nhật hoặc ngày lễ, 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, 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 chế tác bánh được cung cấp bởi các nhà cung cấp và nhập vào kho, nơi nhân viên kiểm tra số lượng và chất lượng trước khi lưu trữ Mỗi nguyên liệu có mã sản phẩm riê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 được thực hiện 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 Chi phí

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 cho dự án 100.000 VNĐ, cần lập kế hoạch phạm vi dự án và chi tiết cho phạm vi làm việc với ngân sách 100.000 VNĐ.

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 100.000VNĐ

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 500.000VNĐ

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 100.000VNĐ

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Đ

Thiết kế các module 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

Tích hợp các module đã thiết kế và lắp ghép chúng lại với nhau hoàn chỉnh với giá 100.000 VNĐ Sau đó, tiến hành kiểm thử phần mềm để đảm bảo toàn bộ hệ thống đã xây dựng hoạt động hiệu quả với chi phí 150.000 VNĐ.

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 cho dự án trong 1 ngày, cần lập kế hoạch phạm vi dự án và chi tiết cho công việc trong thời gian nà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 1 ngày

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

15 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

Thiết kế các module Xây dựng chức năng cùng các sự kiện 3 ngày

Xây dựng code Xử lý các tính năng khi thao tác 5 ngày

Cài đặt các module Demo module khi xây dựng xong 1 ngày

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 1 ngày

Tích hợp và hoàn thành sản phẩm

Tích hợp các module đã thiết kế và lắp ghép chúng lại với nhau để hoàn thiện hệ thống trong 1 ngày Sau đó, tiến hành kiểm thử phần mềm để đảm bảo toàn bộ hệ thống hoạt động chính xác trong 1 ngày.

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 1 ngày

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 1 ngày

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

đoạn Giai Hoạt động Tên hoạt động

Hoạtđộng thừa kế gian bắtThời đầu gian kếtThời thúc thành Hoàn

1.1 Khảo sát thực tế, phân tích các yêu cầu 15/08/21 18/08/21 ✓

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 ✓ phầnkế mềm 2.3 Xậy dựng sơ đồ trình tự cho hệ thống 2.2 24/08/21 26/08/21 ✓ 2.4 Thống nhất các sơ đồ 2.3 27/08/21 28/08/21 ✓ dựng Xây cơ sở liệu dự

3.1 Phân tích các đối tượng

2.3, 2.3, 2.4 29/08/21 30/08/21 ✓ 3.2 Xây dựng các thuộc tính cho từng đối tượng 3.1 1 ngày ✓

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 ✓

17 chứcnă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 ✓

7.1 Lên kế hoạch bảo trì phần mềm 5.3,

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.

- 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 tác nhân quản lý sản phẩm chọn mục Sản phẩm trên hệ thống, bộ phận quản lý và nhân viên có thể dễ dàng tìm kiếm và thêm sản phẩm mới.

24 sửa , xóa sản phẩm trên hệ thống.Còn khách hàng có thể vào phần mềm để tìm kiếm sản phẩm mà muốn tìm

-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ênform 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

Sửa nhân viên Xóa nhân viên

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 sẽ truy cập vào mục khách hàng trên hệ thống, nơi họ có thể thực hiện các thao tác như tìm kiếm, thêm, sửa đổi và xóa sản phẩm.

-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

Sửa khách hàng Xóa khách hàng

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 kiểm soát 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 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ống kê nhập hóa đơn cho phép hiển thị thông tin trên hệ thống, tuy nhiên, có vấn đề khi không cập nhật được dữ liệu Bên cạnh đó, chức năng thống kê số lượng nhập xuất nguyên liệu cũng cần được cải thiện để đảm bảo hiệu quả trong quản lý.

- 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

{ public partial class frmlogin : Form

} string chuoiketnoi = @"Data Source=NHATLONG;Initial

ID=sa;Password3456"; string sql;

SqlDataReader docdulieu; private void frmlogin_Load(object sender, EventArgs e)

{ if (String.IsNullOrEmpty(txtuser.Text))

MessageBox.Show(" Bạn chưa nhập username ", "Thông báo", MessageBoxButtons.OK,

MessageBoxIcon.Information); txtuser.Focus(); return false;

} if (String.IsNullOrEmpty(txtpass.Text))

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); if (h

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

{ public partial class frmsanpham : Form

} 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++; }

} 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;

{ if (String.IsNullOrEmpty(txtID.Text))

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;

} if (String.IsNullOrEmpty(txttensp.Text))

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;

} if (String.IsNullOrEmpty(txtGia.Text))

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;

{ if (String.IsNullOrEmpty(txtID.Text))

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",

} 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 + @"'

52 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) }

The code snippet demonstrates how to delete a product from the database using a SQL command It begins by clearing the item list and opening a connection to the database A SQL DELETE statement is constructed to remove the product identified by the ID entered in the text box After executing the command, the connection is closed, and the display is updated A message box confirms 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)

53 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; if(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++; } else

MessageBox.Show("Không có sản phẩm trong cửa hàng", "Thông báo",

} 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

{ public partial class frmkhachhang : Form

} 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())

{ listViewKH.Items.Add(docdulieu[0].ToString()); listViewKH.Items[i].SubItems.Add(docdulieu[1].ToString()); listViewKH.Items[i].SubItems.Add(Convert.ToDateTime(docdulieu[2]).ToSho rtDateString()); listViewKH.Items[i].SubItems.Add(docdulieu[3].ToString());

55 listViewKH.Items[i].SubItems.Add(docdulieu[4].ToString()); listViewKH.Items[i].SubItems.Add(docdulieu[5].ToString()); i++; } ketnoi.Close();

} private void button4_Click(object sender, EventArgs e)

} private void listViewKH_Click(object sender, EventArgs e)

The selected customer's details are retrieved from the list view, including their name, ID, date of birth, address, VIP status, and email The name is assigned to the text box `txttenkh`, the ID to `txtmakh`, and the date of birth is converted to a DateTime format and set in `dateTimePicker1` The address is stored in `txtdc`, the VIP status is set in `cbVIP`, and the email is entered into `txtEmail`.

{ if (String.IsNullOrEmpty(txttenkh.Text))

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;

} if (String.IsNullOrEmpty(txtmakh.Text))

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;

} if (String.IsNullOrEmpty(txtdc.Text))

MessageBox.Show(" Bạn chưa nhập địa chỉ khách hàng ", "Thông báo",

MessageBoxIcon.Information); txtdc.Focus(); return false;

} if (String.IsNullOrEmpty(txtEmail.Text))

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;

} if (String.IsNullOrEmpty(dateTimePicker1.Text))

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;

} if (String.IsNullOrEmpty(cbVIP.Text))

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

57 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",

{ if(String.IsNullOrEmpty(txttenkh.Text))

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'"

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",

} 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",

} 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

{ public partial class frmnhanvien : Form

} 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();

60 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 adds items to a ListView control by iterating through a data source Each item is created from the first element of the data, while additional sub-items are populated with subsequent elements The process continues until all relevant data is added, after which the connection is closed.

} private void listViewNV_Click(object sender, EventArgs e)

The selected employee's ID is retrieved and displayed in the text box, followed by their name, address, gender, position, and salary, all extracted from the selected item's sub-items in the list view.

{ if (String.IsNullOrEmpty(txtidnv.Text))

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;

} if (String.IsNullOrEmpty(txttennv.Text))

MessageBox.Show(" Bạn chưa nhập tên nhân viên", "Thông báo",

MessageBoxIcon.Information); txttennv.Focus(); return false;

} if (String.IsNullOrEmpty(txtdc.Text))

MessageBox.Show(" Bạn chưa nhập địa chỉ nhân viên ! ", "Thông báo",

MessageBoxIcon.Information); txtdc.Focus(); return false;

} if (String.IsNullOrEmpty(cbGT.Text))

{ 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;

} if (String.IsNullOrEmpty(txtcalam.Text))

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;

} if (String.IsNullOrEmpty(txthsluong.Text))

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;

{ if (String.IsNullOrEmpty(txtidnv.Text))

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",

} 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",

MessageBox.Show("Đã có lỗi xin thử lại !", "Thông báo lỗi",

} private void btnnhapmoi_Click(object sender, EventArgs e)

64 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

{ public partial class frmhoadon : Form

} private void button4_Click(object sender, EventArgs e)

} string chuoiketnoi = @"Data Source=NHATLONG;Initial

Security Info=True;User ID=sa;Password3456";

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(); public void 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 add items to a ListView control in a Windows Forms application It retrieves data from an array called `docdulieu`, converting specific elements to strings and formatting dates appropriately Each item in the ListView is populated with multiple sub-items, including a formatted date, before incrementing the index and closing the database connection.

} private void listViewhd_Click(object sender, EventArgs e)

The selected item's text from the list view is assigned to various controls: the main text is set to `txtid`, the second sub-item to `cbsp`, the third to `cbidnv`, and the fourth to `cbkh` Additionally, the date picker value is updated by converting the text of the fifth sub-item into a DateTime format.

; txttien.Text listViewhd.SelectedItems[0].SubItems[5].Text;

{ if (String.IsNullOrEmpty(txtid.Text))

MessageBox.Show(" Bạn chưa chọn ID hóa đơn ", "Thông báo", MessageBoxButtons.OK,

MessageBoxIcon.Information); txtid.Focus(); return false;

} if (String.IsNullOrEmpty(txttien.Text))

MessageBox.Show(" Bạn chưa nhập giá hóa đơn ", "Thông báo", MessageBoxButtons.OK,

MessageBoxIcon.Information); txttien.Focus(); return false;

} if (String.IsNullOrEmpty(cbsp.Text))

MessageBox.Show(" Bạn chưa chọn ID sản phẩm ", "Thông báo",

MessageBoxIcon.Information); cbsp.Focus(); return false;

} if (String.IsNullOrEmpty(cbidnv.Text))

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;

} if (String.IsNullOrEmpty(cbkh.Text))

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;

} if (String.IsNullOrEmpty(dateTimePicker1.Text))

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; if (docdulieu.Read())

The code snippet demonstrates how to add items to a ListView control in a user interface It initializes a new item with the first element of the data array and subsequently adds sub-items for additional data points The date is formatted to a short date string for better readability The 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",

} 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();

69 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",

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)

71 textBox1.Text = listViewPN.SelectedItems[0].SubItems[0].Text;

{ if (String.IsNullOrEmpty(textBox1.Text))

MessageBox.Show(" Bạn chưa nhập ID phiếu ", "Thông báo",

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; if (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++; } else

MessageBox.Show("Không có phiếu trong cửa hàng", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

} 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

D Small function Pre_conditio n Test operation Expected result Actual

CSM Hiển thị giao diện đăng nhập Thành công

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 Thành công

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 Thành cô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 thành công”

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

“Tài khoản hoặc mật khẩu sai” Thành 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_16 Kiểm tra button Nhấn nút Đăng xuất Hiển thị form login Thành công

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 Application Folder 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 xây dựng và nâng cấp tính năng để đảm bảo an toàn vận hành Việc bảo trì định kỳ chiếm từ 65-75% công sức trong 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ì có nhiệm vụ giữ cho phần mềm luôn cập nhật theo sự thay đổi của môi trường và yêu cầu người sử dụng.

Thích ứng là quá trình điều chỉnh phần mềm để phù hợp với môi trường sản phẩm đã thay đổi Môi trường này bao gồm tất cả 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, tập trung vào việc nâng cao chức năng, cải thiện hiệu năng và giao diện Khi phần mềm đã thành công, người dùng thường khám phá thêm những yêu cầu mới ngoài những gì đã đề 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.

Ngày đăng: 14/05/2023, 09:09

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w