1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo lập trình phát triển website bán bánh ngọt bằng asp.net

132 23 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 đề Lập Trình Phát Triển Webapp Bán Bánh Ngọt Online
Tác giả Ngô Thị Thúy Hằng
Người hướng dẫn ThS. GVC. Võ Xuân Thể
Trường học Trường Đại Học Tài Chính – Marketing
Chuyên ngành Công Nghệ Thông Tin
Thể loại đồ án
Năm xuất bản 2021
Thành phố TP.HCM
Định dạng
Số trang 132
Dung lượng 6,09 MB
File đính kèm bao-cao-website-ban-banh-ngot.zip (6 MB)

Cấu trúc

  • Chương 1: GIỚI THIỆU ĐỒ ÁN CỦA HP 16 1.1. Tổng quan về ĐỒ ÁN HỌC PHẦN (16)
    • 1.2. Nội dung chuyên môn chính của ĐỒ ÁN HỌC PHẦN (16)
    • 1.3. Công cụ và nền tảng kỹ thuật thực hiện ĐỒ ÁN HỌC PHẦN (16)
    • 1.4. Sản phẩm của ĐỒ ÁN HỌC PHẦN (16)
    • 1.5. Bố cục của báo cáo (17)
  • Chương 2: CƠ SỞ LÝ THUYẾT CỦA HỌC PHẦN 18 2.1. Giới thiệu về lập trình WebApp trên ASP.NET (18)
    • 2.2. Phát triển WebApp ASP.NET đơn giản có CSDL dùng ADO.NET (18)
    • 2.3. Master Page = Mẫu trang web (18)
      • 2.3.1. Căn bản về MASTER PAGE (18)
        • 2.3.1.1. Khái niệm Masterpage (mẫu trang web) (18)
        • 2.3.1.2. Các bước thực hiện (18)
        • 2.3.1.3. Xây dựng Mẫu trang (Masterpage) (18)
    • 2.4. Phát triển các chức năng GIAO DỊCH trên WebApp ASP.NET (18)
      • 2.4.1. Trưng bày sản phẩm (dịch vụ) trên DataList (18)
      • 2.4.2. Session và giỏ hàng (18)
      • 2.4.3. Đặt hàng và thanh toán (18)
    • 2.5. Phát triển các chức năng QUẢN LÝ trên WebApp ASP.NET (18)
      • 2.5.1. Quản lý đăng nhập và bảo mật (18)
      • 2.5.2. Quản lý sản phẩm (18)
      • 2.5.3. Các chức năng thao tác dữ liệu: Thêm _ Sửa _ Xóa (18)
    • 2.6. Xử lý Ràng buộc toàn vẹn dữ liệu (RBTV) trên CSDL trong ASP.NET (18)
      • 2.6.1. Giới thiệu về lập trình xử lý RBTV dữ liệu trên CSDL trong ASP.NET (18)
        • 2.6.1.1. Giới thiệu về RBTV (18)
        • 2.6.1.2. Cách thực hiện (18)
        • 2.6.1.3. Các bước thực hiện (18)
      • 2.6.2. Thiết kế hệ thống xử lý RBTV dữ liệu (19)
      • 2.6.3. Lập trình hệ thống xử lý RBTV dữ liệu (19)
    • 2.7. Lập trình thủ tục Chuyển nhóm dữ liệu trong ASP.NET (19)
      • 2.7.1. Giới thiệu về lập trình Chuyển nhóm dữ liệu trên CSDL trong ASP.NET (19)
      • 2.7.2. Thiết kế hệ thống xử lý Chuyển nhóm dữ liệu (19)
      • 2.7.3. Lập trình hệ thống xử lý Chuyển nhóm dữ liệu (19)
    • 2.8. Lập trình thủ tục giao dịch Đặt hàng (Order) (19)
      • 2.8.1. Giới thiệu về lập trình xử lý giao dịch đặt hàng trong ASP.NET (19)
      • 2.8.2. Chức năng khách hàng (19)
      • 2.8.3. Chức năng đơn đặt hàng (19)
      • 2.8.4. Chức năng chi tiết đơn hàng (19)
      • 2.8.5. Xử lý lưu trữ vào DB (19)
    • 2.9. Triển khai phát hành WebApp ASP.NET trên Internet (hoặc Intranet) (19)
    • 2.10. Giới thiệu về lập trình WebApp trên PHP (19)
  • Chương 3: THIẾT KẾ VÀ CẬP NHẬT CSDL PHỤC VỤ WEBAPP 20 3.1. Phân tích và thiết kế DB (20)
    • 3.2. Diagram của DB bán bánh ngọt online (21)
    • 3.3. Thiết kế các Tables dữ liệu (21)
      • 3.3.1. Thiết kế các Table MH (21)
      • 3.3.2. Thiết kế các Table DDH (24)
    • 3.4. Cập nhật dữ liệu DB thực nghiệm cho WebApp bán bánh ngọt online (25)
    • 3.5. Giới thiệu một số SP và Trigger trong DB quản lý bán bánh ngọt online (27)
      • 3.5.1. Phân hệ quản trị mua và bán hàng (27)
  • Chương 4: THIẾT KẾ VÀ LẬP TRÌNH WEBAPP PHẦN GIAO DỊCH 29 4.1. Giới thiệu về WebApp Bán bánh ngọt online (29)
    • 4.2. MasterPage giao dịch : Master.Master (29)
      • 4.2.1. Thiết kế Masterpage giao dịch (29)
      • 4.2.2. Lập trình (Codes) Masterpage giao dịch (30)
    • 4.3. Trang chủ trưng bày các loại bánh ngọt: HomePage.aspx (31)
      • 4.3.1. Thiết kế (Design) WebApp giao dịch bán bánh online (31)
      • 4.3.2. Lập trình (Codes) WebApp giao dịch bán bánh ngọt online: FrHomepage.aspx33 4.4. Trang “Giỏ hàng” của khách hàng: FrCart.aspx (33)
      • 4.4.1. Thiết kế (Design) WebPage “Giỏ hàng” (34)
      • 4.4.2. Mã lệnh (Codes) WebPage “Giỏ hàng” (35)
    • 4.5. Đơn đặt hàng: FrOrder.aspx (36)
      • 4.5.1. Giới thiệu (36)
      • 4.5.2. Thiết kế trang Đặt hàng: FrOrder.aspx (38)
      • 4.5.3. Lập trình mã lệnh (Codes) của trang Đặt hàng: FrOrder.aspx (39)
  • Chương 5: THIẾT KẾ VÀ LẬP TRÌNH WEBAPP PHẦN QUẢN LÝ 46 5.1. Giới thiệu về WebApp quản lý hệ thống bán bánh ngọt online (46)
    • 5.2. Masterpage quản lý hệ thống bán bánh ngọt online (46)
      • 5.2.1. Thiết kế Masterpage quản lý (46)
      • 5.2.2. Lập trình bổ sung Masterpage quản lý (53)
    • 5.3. Trang chính của hệ thống quản lý hệ thống bán bánh ngọt (54)
      • 5.3.1. Thiết kế (Design) trang quản lý chung (chính): Managerment.aspx (54)
      • 5.3.2. Lập trình (Codes) trang quản lý chung (chính): GoodManagerment.aspx (55)
    • 5.4. Trang quản lý danh mục bánh ngọt: FrQLBanhManagements.aspx (55)
      • 5.4.1. Phân tích trang Quản lý danh mục bánh ngọt (55)
      • 5.4.2. Thiết kế (Design) trang quản lý danh mục bánh ngọt: FrQLBanhManagements.aspx (55)
      • 5.4.3. Lập trình (Codes)trang quản lý danh mục quản lý bánh ngọt: GoodManagerment.aspx (62)
      • 5.4.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục bánh ngọt: GoodManagerment.aspx (63)
        • 5.4.4.1. Thêm sản phẩm bánh ngọt (64)
        • 5.4.4.2. Sửa các loại bánh ngọt (68)
        • 5.4.4.3. Xóa các loại bánh ngọt (68)
      • 5.4.5. Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa danh mục sản phẩm bánh ngọt: GoodManagerment.aspx (68)
        • 5.4.5.1. Giới thiệu (68)
        • 5.4.5.2. Thiết kế 2 GridView phụ ngay trên Form quản lý FrGoodsManagements.aspx (69)
        • 5.4.5.3. Xử lý các RBTV trên 2 GridView phụ (70)
    • 5.5. Chuyển Nhóm: Chuyển một mặt hàng từ nhóm này sang nhóm khác (71)
      • 5.5.1. Thiết kế WebForm Chuyển Nhóm (71)
      • 5.5.2. Gọi WebForm Chuyển Nhóm từ WebForm quản lý Managements (72)
      • 5.5.3. Xử lý kết nối và cài đặt DL trên WebForm Chuyển Nhóm (72)
      • 5.5.4. Mã lệnh lập trình (chỉ mang tính gợi ý) trên WebForm Chuyển Nhóm (74)
      • 5.5.5. Các mã lệnh lập trình (chỉ mang tính gợi ý) xứ lý “mờ” các nút không phù hợp trên WebForm Chuyển Nhóm (76)
    • 5.6. Trang quản lý nhân viên (77)
      • 5.6.1. Phân tích trang Quản lý danh mục Nhân Viên (77)
      • 5.6.2. Thiết kế (Design) trang quản lý Nhân viên: FrQLNV.aspx (77)
      • 5.6.3. Lập trình (Codes)trang quản lý danh mục Nhân viên: FrQLNV.aspx (78)
    • 5.7. Trang quản lý cửa hàng (81)
      • 5.7.1. Phân tích trang Quản lý danh mục Cửa Hàng (81)
      • 5.7.2. Thiết kế (Design) trang quản lý Cửa Hàng: FrQLCH.aspx (82)
      • 5.7.3. Lập trình (Codes)trang quản lý danh mục Cửa Hàng: FrQLCH.aspx (83)
      • 5.7.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Cửa Hàng: FrQLCH.aspx (83)
        • 5.7.4.1 Thêm Cửa Hàng (84)
        • 5.7.4.2. Xóa Cửa Hàng (85)
        • 5.7.4.3. Sửa CuaHang (85)
      • 5.7.5. Lập trình Codes xử lý RBTV dữ liệu khi xóa danh mục Cửa Hang: FrQLCH.aspx (85)
        • 5.7.5.1. Giới thiệu (85)
        • 5.7.5.2. Thiết kế các GridView phụ ngay trên Form Quản lý cửa Hàng (86)
        • 5.7.5.3. Xử lí RBTV trên các GridView phụ (87)
    • 5.8. Trang quản lý khu vực (88)
      • 5.8.1. Phân tích trang Quản lý danh mục Khu Vực (88)
      • 5.8.2. Thiết kế (Design) trang quản lý Khu Vực: FrQLKV.aspx (89)
      • 5.8.3. Lập trình (Codes)trang quản lý danh mục Khu Vực: FrQLKV.aspx (89)
      • 5.8.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Khu Vực: FrQLKV.aspx (89)
        • 5.8.4.1. Thêm Khu Vực (89)
        • 5.8.4.2. Xóa Khu Vực (90)
        • 5.8.4.3. Sửa Khu Vực (90)
      • 5.8.5. Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa danh mục Khu vực: Khu vực FrQLKV.aspx (91)
        • 5.8.5.1. Giới thiệu (91)
        • 5.8.5.2. Thiết kế các Gridview phụ ngay trên FrQLKV.aspx (91)
        • 5.8.5.3. Xử lý RBTV trên các GridView phụ (92)
    • 5.9. Trang quản lý chuyên môn (93)
      • 5.9.1. Phân tích trang Quản lý Chuyên Môn (93)
      • 5.9.2. Thiết kế (Design) trang quản lý Chuyên Môn: FrQLCM.aspx (94)
      • 5.9.3. Lập trình (Codes)trang quản lý Chuyên Môn: FrQLCM.aspx (94)
      • 5.9.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Chuyên Môn: FrQLCM.aspx (94)
        • 5.9.4.1. Thêm Chuyên Môn (94)
        • 5.9.4.2. Xóa Chuyên Môn (95)
        • 5.9.4.3. Sửa Chuyên Môn (95)
      • 5.9.5. Lập trình Codes xử lý RBTV dữ liệu khi xóa ChuyenMon: FrQLCM.aspcx (96)
        • 5.9.5.1. Giới thiệu (96)
        • 5.9.5.2. Thiết kế các GridView phụ ngay trên Form quản lý Chuyên Môn: FrQLCM.aspx (96)
        • 5.9.5.3. Xử lý RBTV trên các GridView phụ (97)
    • 5.10. Trang quản lý thương hiệu (97)
      • 5.10.1. Phân tích trang Quản lý Thương Hiệu (97)
      • 5.10.2. Thiết kế (Design) trang quản lý Thương Hiệu: FrQLTH.aspx (98)
      • 5.10.3. Lập trình (Codes)trang quản lý Thương Hiệu: FrQLTH.aspx (98)
      • 5.10.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Thương Hiệu: FrQLTH.aspx (98)
        • 5.10.4.1. Thêm Thương Hiệu (98)
        • 5.10.4.2. Xóa Thương Hiệu (99)
        • 5.10.4.3. Sửa Thương Hiệu (99)
      • 5.10.5. Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa Thương Hiệu: FrQLTH.aspx. .100 1. Giới thiệu (100)
        • 5.10.5.2. Thiết kế các GridView phụ ngay trên Form Quản lý Thương Hiệu (100)
        • 5.10.5.3 Xử lí RBTV trên các GridView phụ (101)
    • 5.11. Trang quản lý nhóm loại bánh (101)
      • 5.11.1. Phân tích trang Quản lý danh mục Nhóm Loại Bánh (101)
      • 5.11.2. Thiết kế (Design) trang quản lý Nhóm Loại Bánh: FrQLNhom.aspx (102)
      • 5.11.3. Lập trình (Codes)trang quản lý Nhóm Loại Bán: FrQLNhom.aspx (102)
      • 5.11.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Nhóm Loại Bánh: FrQLNhóm.aspx (102)
        • 5.11.4.1. Thêm Mã loại bánh (102)
        • 5.11.4.2. Xóa Mã loại bánh (103)
        • 5.11.4.3. Sửa MaLoaiBanh (103)
      • 5.11.5. Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa MaLoaiBanh: FrQLNhom.aspx (104)
        • 5.11.5.1. Giới thiệu (104)
        • 5.11.5.2. Thiết kế các GridView phụ ngay trên FrQLNhom.aspx (104)
    • 5.12. Trang quản lý khách hàng (105)
      • 5.12.1. Phân tích trang Quản lý Khách Hàng (105)
      • 5.12.2. Thiết kế (Design) trang quản lý Khách Hàng: FrQLKH.aspx (105)
      • 5.12.3. Lập trình (Codes)trang quản lý Khách Hàng: FrQLKH.aspx (105)
      • 5.12.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Khách Hàng: FrQLKH.aspx (106)
    • 5.13. Trang quản lý hàng tồn (106)
      • 5.13.1. Phân tích trang Quản lý Hàng Tồn (106)
      • 5.13.2. Thiết kế (Design) trang quản lý Hàng Tồn: FrQLHangTon.aspx (107)
      • 5.13.3. Lập trình (Codes)trang quản lý Hàng Tồn: FrQLHangTon.aspx (108)
      • 5.13.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Hàng Tồn: FrQLHangTon.aspx (110)
      • 5.13.5. Lập trình Codes xử lý RBTV dữ liệu khi xóa Hàng Tồn: FrHangTon.aspx (112)
        • 5.13.5.1. Giới thiệu (112)
        • 5.13.5.2. Thiết kế các GridView phụ ngay trên Form Quản Lý Hàng Tồn: FrQLHangTon.aspx (112)
    • 5.14. Trang quản lý đơn đặt hàng (114)
      • 5.14.1. Phân tích trang Quản lý danh mục Đơn Đặt Hàng (114)
      • 5.14.2. Thiết kế (Design) trang quản lý Đơn Đặt Hàng: FrDDH.aspx (115)
      • 5.14.3. Lập trình (Codes)trang quản lý danh mục Đơn Đặt Hàng: FrDDH.aspx (115)
      • 5.14.4. Lập trình Codes THÊM _ SỬA _ XÓA trang quản lý danh mục DonDatHang (115)
        • 5.14.4.1. Thiết kế (115)
        • 5.14.4.2. Xóa đơn đặt hàng (116)
        • 5.14.4.3. Cập nhật đơn đặt hàng (116)
    • 5.15. Trang quản lý chi tiết đơn đặt hàng (116)
      • 5.15.1. Phân tích trang Quản lý danh mục Chi Tiết Đơn Đặt Hàng (116)
      • 5.15.2. Thiết kế (Design) trang quản lý Chi Tiết Đơn Đặt Hàng: FrCTDDH.aspx (117)
      • 5.15.3. Lập trình (Codes)trang quản lý danh mục Chi Tiết Đơn Đặt Hàng: FrCTDDH.aspx (118)
      • 5.15.4. Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Chi Tiết Đơn Đặt Hàng: FrCTDDH.aspx (119)
        • 5.15.4.1. Thêm CTDDH (120)
        • 5.15.4.2. Xóa CTDDH (121)
      • 5.15.5. Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa ChiTietDonDatHang: FrCTDDH.aspx (0)
        • 5.15.5.1. Giới thiệu (122)
        • 5.15.5.2. Xóa CT đơn đặt hàng (122)
  • Chương 6: TRIỂN KHAI PHÁT HÀNH WEBAPP 124 6.1. Giới thiệu về Host miễn phí somee (124)
    • 6.2. Đăng ký tài khoản somee (125)
    • 6.3. Restore BD lên host somee (126)
    • 6.4. Upload đăng tải Source WebApp lên host somee để phát hành (127)
    • 6.5. Giới thiệu sản phẩm WebApp quản lý bán bánh ngọt online trên somee (128)
    • 7.1. Kết luận (129)
      • 7.1.1. Những kết quả đạt được (129)
      • 7.1.2. Hạn chế (129)
    • 7.2. Hướng phát triển (130)
      • 7.2.1. Hướng khắc phục các hạn chế (130)
      • 7.2.2. Hướng mở rộng ĐỒ ÁN HỌC PHẦN (130)

Nội dung

Hệ thống CSDL của WebApp bán bánh ngọt Online được biểu diễn như sau:+ Các sản phẩm được bán trực tuyến tại cửa hàng bán Bánh Tous Les Jours gồm 2 chức năng:•Bên mua:+ Cho phép khách hàng online có thể chọn hàng từ trang HomePage.aspx sử dụng cart (giỏ hàng) đây là cơ sở để lập ra đơn hàng. Trong mỗi đơn hàng được lập ra sẽ gồm có các thông tin: Mã sản phẩm, ngày lập đơn, các mã số liên quan như: mã khách hàng, mã nhân viên và mã khu vực của mỗi cửa hàng, địa chỉ giao hàng, người nhận, số điện thoại, thời hạn để nhận, tình trạng và ghi chú về đơn hàng đó.+ Mỗi khách hàng có 1 hoặc nhiều đơn hàng và mỗi đơn hàng là của một khách hàng duy nhất.+ Mỗi chuyên môn có nhiều đơn hàng và mỗi đơn hàng chỉ có một chuyên môn do nhân viên đảm nhận nhất định để phục vụ công việc bán hàng hằng ngày.+ Các đơn hàng sẽ có một chi tiết đơn đặt hàng khi giao cho khách hàng•Bên bán:+ Hệ thống cửa hàng bán bánh ngọt gồm nhiều chi nhánh cửa hàng. Mỗi chi nhánh gồm các thông tin như: mã chi nhánh, tên cửa hàng, địa chỉ, sức chứa, số lượng còn trống tại cửa hàng đó, mã khu vực chứa cửa hàng đó. + Sản phẩm tại các cửa hàng được bán rất đa dạng với nhiều mẫu được trang trí xinh đẹp với các loại đồ thực phẩm cao cấp+ Mỗi đơn hàng là do một nhân viên phụ trách, mỗi nhân viên được phân công phụ trách nhiều đơn hàng theo khu vực làm việc của cá nhân với đúng chuyên môn của mình.+ Hệ thống cửa hàng có quy mô nhỏ được phân bố rộng rãi tại các khu vực nội thành (Trung tâm Sài Gòn và khu vực quận Thủ Đức)+ Sản phẩm khi bán ra và chuyển giao cho nhân viên, sẽ được kiểm tra trước lượng tồn tại mỗi cửa hàng và coi chất lượng của sản phẩm trước khi chuyển giao cho người dùng.+Hóa đơn (Invoice): người bán đã chính thức thu tiền, người mua đã chính thức mua hàng (thanh toán cho cửa hàng): hoàn tất thương vụ giữa các bên cơ bản hết trách nhiệm.

GIỚI THIỆU ĐỒ ÁN CỦA HP 16 1.1 Tổng quan về ĐỒ ÁN HỌC PHẦN

Nội dung chuyên môn chính của ĐỒ ÁN HỌC PHẦN

Vận dụng kiến thức thiết kế và lập trình WebApp trên nền tảng ASP.NET để phát triển một ứng dụng web thực tiễn, cụ thể là hệ thống website bán bánh ngọt trực tuyến, mang lại trải nghiệm mua sắm thuận tiện cho người dùng.

Công cụ và nền tảng kỹ thuật thực hiện ĐỒ ÁN HỌC PHẦN

+ ASP.NET 4.7.2 trên MS Visual Studio NET 2019

+ Hệ quản trị CSDL MS SQL Server 2019 trên Local

+ Free Host Web: some.com

Sản phẩm của ĐỒ ÁN HỌC PHẦN

+ Hệ thống WebApp bán bánh ngọt trực tuyến (online) dạng Local trên PC:

+ Hệ thống WebApp bán bánh ngọt trực tuyến (online) dạng Online trên somee: http://G4BanBanhOnline.somee.com http://www.G4BanBanhOnline.somee.com

GIỚI THIỆU CHUNG VỀ HỆ THỐNG

App = Sys [Giao dịch: Transaction || DB/Ms.SQL||Quản lý: Management]: Local + some

(Chương 4: Item/Cart/RAM + Save/DB|| Chương 3: DB|| Chương 5: Login + QLHH:T,S,X,RBTV,CN: Chương 6: Cute.FTP9)

Bố cục của báo cáo

Báo cáo gồm những nội dung như sau:

Chương 1 Giới thiệu đồ án của HP là Hệ thống WebApp bán bánh ngọt Online (trực tuyến Chương 2 Các cơ sở lý thuyết của HP Lập trình Web (4 TC) phục việc thực hiện đề tài HP Chương 3 Thiết kế và cập nhật CSDL phục vụ WebApp bán bánh ngọt online (trực tuyến)

Chương 4 Thiết kế và lập trình WebApp phần giao dịch trực tuyến của khách hàng mua bánh ngọt trực tuyến

Chương 5 Thiết kế và lập trình WebApp phần quản lý trực tuyến của cơ sở bán bánh ngọt

Chương 6 Triển khai và phát hành WebApp bán bánh ngọt online (trực tuyến) trên Host: somee

Chương 7 Tổng kết các kết quả đạt được và còn hạn chế của đồ án, đồng thời đề xuất hướng khắc phục hạn chế và phát triển Đồ án.

CƠ SỞ LÝ THUYẾT CỦA HỌC PHẦN 18 2.1 Giới thiệu về lập trình WebApp trên ASP.NET

Phát triển WebApp ASP.NET đơn giản có CSDL dùng ADO.NET

2.3.1 Căn bản về MASTER PAGE

2.3.1.1 Khái niệm Masterpage (mẫu trang web)

2.3.1.1.2.Số lượng Masterpage trong 1 Websites

2.3.1.1.3.Các thành phần trên Masterpage

2.3.1.3 Xây dựng Mẫu trang (Masterpage)

2.3.1.3.2.VIẾT THỦ TỤC ẨN / HIỆN Login

2.4 Phát triển các chức năng GIAO DỊCH trên WebApp ASP.NET

2.4.1 Trưng bày sản phẩm (dịch vụ) trên DataList

2.4.3 Đặt hàng và thanh toán

2.5 Phát triển các chức năng QUẢN LÝ trên WebApp ASP.NET

2.5.1 Quản lý đăng nhập và bảo mật

2.5.3 Các chức năng thao tác dữ liệu: Thêm _ Sửa _ Xóa

2.6 Xử lý Ràng buộc toàn vẹn dữ liệu (RBTV) trên CSDL trong ASP.NET

2.6.1 Giới thiệu về lập trình xử lý RBTV dữ liệu trên CSDL trong ASP.NET

Master Page = Mẫu trang web

2.3.1 Căn bản về MASTER PAGE

2.3.1.1 Khái niệm Masterpage (mẫu trang web)

2.3.1.1.2.Số lượng Masterpage trong 1 Websites

2.3.1.1.3.Các thành phần trên Masterpage

2.3.1.3 Xây dựng Mẫu trang (Masterpage)

2.3.1.3.2.VIẾT THỦ TỤC ẨN / HIỆN Login

Phát triển các chức năng GIAO DỊCH trên WebApp ASP.NET

2.4.1 Trưng bày sản phẩm (dịch vụ) trên DataList

2.4.3 Đặt hàng và thanh toán

Phát triển các chức năng QUẢN LÝ trên WebApp ASP.NET

2.5.1 Quản lý đăng nhập và bảo mật

2.5.3 Các chức năng thao tác dữ liệu: Thêm _ Sửa _ Xóa

Xử lý Ràng buộc toàn vẹn dữ liệu (RBTV) trên CSDL trong ASP.NET

2.6.1 Giới thiệu về lập trình xử lý RBTV dữ liệu trên CSDL trong ASP.NET

2.6.2 Thiết kế hệ thống xử lý RBTV dữ liệu

2.6.3 Lập trình hệ thống xử lý RBTV dữ liệu

Lập trình thủ tục Chuyển nhóm dữ liệu trong ASP.NET

2.7.1 Giới thiệu về lập trình Chuyển nhóm dữ liệu trên CSDL trong ASP.NET

2.7.2 Thiết kế hệ thống xử lý Chuyển nhóm dữ liệu

2.7.3 Lập trình hệ thống xử lý Chuyển nhóm dữ liệu

Lập trình thủ tục giao dịch Đặt hàng (Order)

2.8.1 Giới thiệu về lập trình xử lý giao dịch đặt hàng trong ASP.NET

2.8.3 Chức năng đơn đặt hàng

2.8.4 Chức năng chi tiết đơn hàng

2.8.5 Xử lý lưu trữ vào DB

THIẾT KẾ VÀ CẬP NHẬT CSDL PHỤC VỤ WEBAPP 20 3.1 Phân tích và thiết kế DB

Diagram của DB bán bánh ngọt online

Dựa trên phân tích và thiết kế thành phần cơ sở dữ liệu từ mục 3.1, chúng tôi đã xây dựng sơ đồ cơ sở dữ liệu phục vụ cho hoạt động của WebApp Bán Bánh Ngọt Online.

Thiết kế các Tables dữ liệu

Các bảng cơ sở dữ liệu được thiết kế trong hệ thống có sự liên kết chặt chẽ với bảng danh mục sản phẩm và bảng đơn đặt hàng.

3.3.1 Thiết kế các Table MH

3.3.2 Thiết kế các Table DDH:

Cập nhật dữ liệu DB thực nghiệm cho WebApp bán bánh ngọt online

Đã nhập dữ liệu thực nghiệm cho các table sau:

Giới thiệu một số SP và Trigger trong DB quản lý bán bánh ngọt online

3.5.1 Phân hệ quản trị mua và bán hàng:

RBTV1: Giá trị thuộc tính MaCH trong quan hệ

Mô tả: Mỗi cửa hàng phải có một mã số riêng biệt

RBTV1: Miền giá trị thuộc tính GioiTinh

Mô tả: [GioiTinh] € {“Nam”, “Nữ”}

+ Giới tính của nhân viên chỉ có thể là Nam hoặc Nữ

RBTV2: Liên bộ dữ liệu trong một quan hệ

+ Mỗi đơn hàng sẽ có nhiều loại bánh khác nhau

+ Mỗi loại bánh sẽ nằm trong nhiều đơn hàng khác nhau

RBTV2: Giá trị thuộc tính slton trong quan hệ

+ Số lượng tồn phải lớn hơn hoặc bằng 0

RBTV1: Miền giá trị thuộc tính MaKH trong quan hệ

Mô tả: Mỗi khách hàng có mỗi mã số khách nhau để phân biệt

THIẾT KẾ VÀ LẬP TRÌNH WEBAPP PHẦN GIAO DỊCH 29 4.1 Giới thiệu về WebApp Bán bánh ngọt online

MasterPage giao dịch : Master.Master

4.2.1 Thiết kế Masterpage giao dịch

THIẾT KẾ MASTERPAGE (Design View)

Trong thiết kế MasterPage như Error: Reference source not found bao gồm:

+ Thiết kế Table có 1 cột và nhiều dòng tạo thuận lợi cho việc kết cấu vị trí các thành phần thiết kế trên các WebPage thừa kế MasterPage này.

+ Banner giới thiệu về cơ sở kinh doanh bánh ngọt trực tuyến

+ Menu ngang (Horizontalization) cho phép khách hàng truy xuất các trang thông tin liên quan đế hệ thống Websites.

4.2.2 Lập trình (Codes) Masterpage giao dịch

MÃ LỆNH LẬP TRÌNH CỦA MASTERPAGE (Code View) public partial class ThuyHang : System.Web.UI.MasterPage

/// Thủ tục tự động chạy khi 1 web page thừa kế masterpage này được tải lên trình duyệt ///

/// protected void Page_Load(object sender, EventArgs e)

LoginQL.Visible = false;//Ngay từ đầu tải webpage lên trình duyệt ẩn loginQL[ có thể bỏ qua designer đã gán visible

/// Khi NSD (NV QL) chọn một mục Menu Items trên Menu Main

/// NSD (NV QL) chọn: Mục thực đơn Quản lý hoặc đăng nhập => hiện lên LoginQL.visible ///

/// protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)

{ if(e.Item.Value == "ql" || e.Item.Value == "dn")// NSD (NV QL) đã chọn mục "Quản Lý" có Values = "ql" or đăng nhập có values

LoginQL.Visible = true; //Hiên login

LoginQL.Visible = false;// Ẩn login

/// Xử lí đăng nhập của nv quản lý

/// Giiuwx giá trị xác thực đăng nhập thành công hay không protected void LoginQL_Authenticate(object sender, AuthenticateEventArgs e)

{//Nếu NSD đăng nhập vs tên admin và ml admin if ((LoginQL.UserName == "Admin" && LoginQL.Password == "admin@vn") ||

(LoginQL.UserName == "Guess" && LoginQL.Password == "guess@vn"))

{ e.Authenticated = true; //Đăng nhạp thành công, tự động chuyển đến trang loginQl.destinationpage url

Session["usern"] = LoginQL.UserName; // Gửi username sang trang quản lý;

{ e.Authenticated = false;// Đăng nhập không thành công

Trang chủ trưng bày các loại bánh ngọt: HomePage.aspx

4.3.1 Thiết kế (Design) WebApp giao dịch bán bánh online

* Hệ Websites hỗ trợ chức năng giao dịch bán bánh trực tuyến thừa kế Masterpage nên trên, gồm các thành phần như sau:

THIẾT KẾ TRANG CHỦ HomePage (Design View)

Trong thiết kế trang chủ HomePage như Error: Reference source not found bao gồm:

+ Thiết kế Table có 1 cột và nhiều dòng tạo thuận lợi cho việc kết cấu vị trí các thành phần thiết kế trên HomepagePage.

Sử dụng DataList để giới thiệu đa dạng các loại bánh ngọt, giúp khách hàng dễ dàng chọn mua trực tuyến Đồng thời, áp dụng các Label để thông báo lời chào mừng và cung cấp thông tin về giỏ hàng cho khách hàng.

+ Dùng button để cho khách hàng tiện vào xem tình trạng giỏ hàng của mình.

4.3.2 Lập trình (Codes) WebApp giao dịch bán bánh ngọt online: FrHomepage.aspx

MÃ LỆNH LẬP TRÌNH CỦA HOMEPAGE (Code View)

To declare the library path in a C# application, include the following namespaces: `using System;`, `using System.Collections.Generic;`, `using System.Linq;`, `using System.Web;`, `using System.Web.UI;`, `using System.Web.UI.WebControls;`, and `using System.Data;` This ensures access to essential classes and functionalities required for web development and data handling.

B2: Khai báo biến toàn cục cart thuộc kiểu DataTable để lưu giữa “giỏ hàng”: static DataTable Cart = new DataTable();

B3: Khởi tạo “giỏ hàng” trong Page_Load()

//Thử tục được chạy mỗi khi trang web được load lên protected void Page_Load(object sender, EventArgs e)

{ if (Session["cart"] != null) // Đã có giỏ hàng

//Lấy giỏ hàng từ Session lưu vào biến cart Cart = Session["Cart"] as DataTable;

} else// Chưa có giỏ hàng => khởi tạo giỏ hàng mới

// Xóa các dòng và cột rác nếu có trong giỏ hàng Cart.Rows.Clear();

// Định nghĩa các cột dữ liệu cần lưu trong giỏ hàng Cart.Columns.Add("MaSoBanh", typeof(string));

Cart.Columns.Add("TenLoaiBanh", typeof(string));

Cart.Columns.Add("DonViTinh", typeof(string));

Cart.Columns.Add("GiaBan", typeof(float));

Cart.Columns.Add("SoLuong", typeof(float));

Cart.Columns.Add("ThanhTien", typeof(float), "SoLuong*GiaBan");//Tự tính = số lượng * đơn giá

4.4 Trang “Giỏ hàng” của khách hàng: FrCart.aspx

4.4.1 Thiết kế (Design) WebPage “Giỏ hàng”

* Webpage “giỏ hàng” của khách hàng trực tuyến thừa kế Masterpage nên trên, gồm các thành phần như sau:

+ Có Label thông báo khi trang giỏ hàng rỗng hoặc có sản phậm đã chọn mua.

Trang web có nút "Mua" cho phép khách hàng quay lại trang HomePage.aspx để thực hiện giao dịch khi giỏ hàng trống Đồng thời, bảng GridviewGioHang hiển thị thông tin về các sản phẩm mà khách hàng đã chọn từ HomePage.aspx.

+ Có lableTongTien để tính tổng tiền cho những sản phẩm đã chọn.

+ Có button đặt mua để khách hàng thanh toán.

+ Có button về trang chủ để khách hàng quay lại trang HomePage.aspx.

+ Có button hủy giỏ hàng để khách hàng bỏ những sản phẩm đã chọn.

4.4.2 Mã lệnh (Codes) WebPage “Giỏ hàng” public partial class Cart : System.Web.UI.Page

{ static DataTable cart = new DataTable();//biến toàn cục cart = sẽ dùng lưu giữ giỏ hàng protected void Page_Load(object sender, EventArgs e)

{ if (Session["cart"] == null) // Giỏ hàng rỗng

Thông báo giỏ hàng rỗng sẽ hiển thị trên trang web với nội dung: "HIỆN TẠI, GIỎ HÀNG CỦA QUÝ KHÁCH ĐANG TRỐNG, XIN MỜI SANG TRANG DANH MỤC HÀNG HÓA ĐỂ CHỌN MUA" Nút "Chọn Mua" sẽ được hiển thị để khuyến khích khách hàng tiếp tục mua sắm.

GridViewCart.DataSource = null; lbSum.Text = "";

// Ẩn 2 nút đặt hàng và xóa giỏ hàng btnOrder.Visible = false; btnCancel.Visible = false;

} else // Đã có giỏ hàng

{ lbTitle.Text = "Giỏ hàng hiện tại của quý vị như sau:"; btnMua.Text = "Chọn mua tiếp!";

//Lấy giỏ hàng từ session xuống cart cart = Session["cart"] as DataTable;

//Gán giỏ hàng cart vào gridviewcart: Quan trọng nhất

//Tải dữ liệu từ tlb lên Gridview

//Tính toán só lượng + món tiền lbSum.Text = "Giỏ hàng hiện có " + cart.Compute("count(MaSoBanh)", "").ToString() +

"Mặt Hàng, Tổng Tiền = " + cart.Compute("sum(ThanhTien)", "").ToString() + "Đồng";

// Hiển thị nút xóa giỏ hàng và đặt hàng btnOrder.Visible = true;//Vì có giỏ nên đặt mua được btnCancel.Visible = true;

// về trang chủ để chọn mua hàng hoặc mua tiếp protected void btnMua_Click(object sender, EventArgs e)

//Mua hàng protected void btnMua_click(object sender, EventArgs e)

//Hủy Đơn Hàng protected void btnCancel_Click(object sender, EventArgs e)

Response.Redirect("~\\HomePage.aspx");// về trang chủ

Đơn đặt hàng: FrOrder.aspx

* Trang này FrOrder.aspx được gọi từ trang “Giỏ hàng” [Cart.aspx] không rổng: protected void Page_Load(object sender, EventArgs e)

{ lblTitle.Text = "HIỆN TẠI, GIỎ HÀNG CỦA QUÝ KHÁCH ĐANG TRỐNG, XIN MỜI SANG TRANG DANH MỤC HÀNG HÓA ĐỂ CHỌN MUA"; btnMua.Text = "Chọn Mua";

GridViewCart.DataSource = null; lblSum.Text = ""; btnOrder.Visible = false; btnCancel.Visible = false;

{ lblTitle.Text = "Giỏ hàng hiện tại của quý vị như sau:"; btnMua.Text = "Chọn mua tiếp!";

//Lấy giỏ hàng từ session xuống cart cart = Session["cart"] as DataTable;

//Gán giỏ hàng cart vào gridviewcart: Quan trọng nhất

//Tải dữ liệu từ tlb lên Gridview

//Tính toán só lượng + món tiền lblSum.Text = "Giỏ hàng hiện có " + cart.Compute("count(MaSoBanh)", "").ToString() +

The total amount for the items in the cart is calculated as "Total Amount = " + cart.Compute("sum(ThanhTien)", "").ToString() + " VND." The order button is visible, indicating that a purchase can be made, with a tooltip stating, "Click to place an order, we are happy to serve." Additionally, the cancel button is also visible.

* Nếu giỏ hàng đã có thì có thể gọi được trang đặt hàng: FrOrder.aspx

//Gọi trang đặt hàng protected void btnOrder_Click(object sender, EventArgs e)

To access the order page (FrOrder.aspx), users must navigate from the homepage (HomePage.aspx), where products are displayed This setup allows customers to select items and add them to their cart, which is established as the starting point from FrHomePage.aspx.

* ĐẶT HÀNG PHẢI XÁC ĐỊNH 3 NỘI DUNG:

+ Thông tin đơn hàng: msddh, ngày lập,… Table [DDH]

+ Đơn này đặt mua những mặt hàng nào Table [CTDDH]

Sau khi đặt hàng => Giao hàng ở đâu, cho ai, số điện thoại người nhận, hạn giao

=> Phương thức thanh toán, số tiền ?

4.5.2 Thiết kế trang Đặt hàng: FrOrder.aspx

Thiết kế FORM “Đặt hàng”: có 3 phần

* Thông tin : Tìm (MSKhachHang, TenKhachHang, Diachi,…); nếu tìm ko có thì cho Thêm mới

* Thông tin (xem table DDH trong DB): MSDDH, NgayLap (ngày giờ hiện tại), MSKhachHang, MSNhanVien, MSKhuVuc, NguoiNhan, DiaChiGiao, SDTNhan, ThoiHan, TinhTrang, GhiChu.

Thông tin giỏ hàng được lấy từ trang giỏ hàng, cho phép khách hàng xem và kiểm tra các mặt hàng đã đặt cùng với tổng số tiền Tuy nhiên, việc thêm, xóa hoặc sửa các mặt hàng phải được thực hiện trực tiếp trên trang giỏ hàng.

Để quản lý thông tin khách hàng hiệu quả, người dùng cần tìm kiếm khách hàng hiện có Nếu chưa có khách hàng nào, hãy thêm mới Nếu đã có, hãy chọn khách hàng từ danh sách, vì có thể tìm thấy nhiều khách hàng khác nhau Giao diện được thiết kế thân thiện và dễ sử dụng.

+ Nếu tìm có KH thì phần thông tin KH mới sẽ bị ẩn; Visible = False

+ Ghi chú: Khi GridView rổng (không có dòng nào) nó sẽ tự ẩn.

+ Bổ sung Nút “Chọn” trên mỗi dòng của GridViewKH

PHẦN THÔNG TIN ĐƠN HÀNG

+ Thông tin đơn hàng được thiết kế theo Table DDH đã có trong DB:

+ Thông tin đơn hàng chỉ hiển thi khi đã có thông tin KH, tức là trong phần thông tin KH đã

“Chọn KH”, vì vậy, ban đầu, các đối tượng thiết kế trong phần thông tin Đơn hàng sẽ có Visible = False.

+ Các nội dung thiết kế cơ bản là Label, TextBox và Calendar, như Error: Reference source not foundError: Reference source not found

PHẦN THÔNG TIN CÁC MẶT HÀNG ĐẶT MUA CỦA ĐƠN HÀNG (GIỎ HÀNG)

4.5.3 Lập trình mã lệnh (Codes) của trang Đặt hàng: FrOrder.aspx

PHẦN THÔNG TIN KHÁC HÀNG

* Tìm khách hàng, nếu chưa có thì thêm mới, nếu đã có thì chọn KH; vì có thể tìm thấy nhiều KH:

SELECT MSKhachHang, TenKhachHang, DiaChi, SDT, Diem

WHERE (MSKhachHang LIKE '%' + @MSKhachHang + '%') OR (TenKhachHang LIKE '%' + @TenKhachHang + '%') OR (DiaChi LIKE '%' + @DiaChi + '%') OR (SDT LIKE '%' + @SDT + '%') OR (Diem LIKE '%' + @Diem + '%')

Với tham số như Error: Reference source not found

+ Lệnh SQL thêm KH mới: Insert KH: SqlDataSourceKH

INSERT INTO KH (mskh, hokh, tenkh, dc, sodt, diem)VALUES (@mskh,@hokh,@tenkh,@dc,@sodt,@diem) Với tham số như Error: Reference source not found

+ MÃ LỆNH NÚT TÌM KH

* Viết lại mã lệnh (codes) “Tìm KH”:

[1] Chỉ cho phép tìm khách hàng khi đã nhập thông tin vào ô Textbox tìm

[2] Tìm khách hàng [thủ tục chính] = Tim KH + Nhập KH mới + Lưu DB + chọn KH

// [1].TÌM KH + [2].NHẬP KH MỚI + [3] LƯU THÔNG TIN KH MỚI VỪA NHẬP +

[4]CHỌN KH TRONG GRIDVIEW TÌM THẤY (TẠI VỊ TRÍ vt ĐÃ CHỌN TRÊN GRIDVIEW)

[3] Hủy kết quả tìm và tìm lại KH khác

// HỦY : TÌM LẠI KH KHÁC

PHẦN THÔNG TIN ĐƠN HÀNG

[1] Hiển thị mã số đơn hàng khi đã chọn KH

PHẦN THÔNG TIN CÁC MẶT HÀNG ĐẶT MUA CỦA ĐƠN HÀNG (GIỎ HÀNG)

//TỰ ĐỘNG CHAY KHI TRANG ĐẶT HÀNG ĐƯỢC TẢI LÊN protected void btnTimKh_Click(object sender, EventArgs e)

{ btnHuyTimKH.Visible = true;//Cho phép hủy tìm lại bất cứ lúc nào if (btnTimKh.Text.Trim() == "Tìm khách hàng")//1 Tìm Khách Hàng

GridViewKH.DataBind();//Tải DL lên theo đk if (GridViewKH.Rows.Count < 1)//Ko tìm thấy KH như v

{ btnTimKh.Text = "Thêm khách hàng mới";

} else//Tìm ít nhất 1 KH

{ btnTimKh.Text = "Chọn KH";//Được chọn sẽ xử lý ở dưới txtMSKH.Text = GridViewKH.Rows[0].Cells[1].Text.Trim();//tạm gán Mã KH đầu tiên tìm thấy Row(0) vào txtMSKH mới

} else if (btnTimKh.Text.Trim() == "Thêm khách hàng mới")//2 Nhâp thông tin khách hàng mới

Để hiển thị thông tin khách hàng mới, các thành phần giao diện như lbNhapKHMoi, lbMSKH, lbTenKH, lbDCKH, lbSdtKH, txtMSKH, txtTenKH, txtDCKH và txtSdtKH đều được thiết lập để hiển thị.

//2.2 Xóa các ô textbox để cbi nhập KH mới txtMSKH.Text = "0000"; txtMSKH.ToolTip = "Không để trống mã KH"; txtTenKH.Text = ""; txtDCKH.Text = ""; txtSdtKH.Text = "";

//2.3 Đổi nhãn nút lệnh Lưu thông tin KH btnTimKh.Text = "Lưu thông tin khách hàng mới";

} else if (btnTimKh.Text.Trim() == "Lưu thông tin khách hàng mới")//3 Lưu thông tin KH mới

{//3.1 Lưu thông tin KH mới try

SqlDataSourceKH.Insert(); txtTimKH.Text = txtMSKH.Text.Trim(); this.Title = "Thêm KH mới";

} catch (System.Exception ex) { this.Title = "Lỗi thêm KH mới = " + ex.Message; } //3.2

//3.3 lbNhapKHMoi.Visible = false; lbMSKH.Visible = false; lbTenKH.Visible = false; lbDCKH.Visible = false; lbSdtKH.Visible = false; txtMSKH.Visible = false; txtTenKH.Visible = false; txtDCKH.Visible = false; txtSdtKH.Visible = false;

//3.4 Đổi nhãn chọn KH btnTimKh.Text = "Chọn KH";

} else if (btnTimKh.Text.Trim() == "Chọn KH")

//4.1 Gán mã KH vào ô textbox txtTimKH.Text = txtMSKH.Text.Trim();

//4.2 Không cho chọn lại btnTimKh.Enabled = false;

//4.3 Xử lý thông tin đơn hàng

Trong phần 4.3.1, các thông tin đơn hàng được hiển thị với các mục như lbTTDH, lbmsdh, lbNgaylap, lbNguoiNhan, lbDiachigiao, lbDTGiao, lbGhichu, lbHangiao và txtGhichu đều được đặt thành hiển thị là true.

Đoạn mã trên thiết lập các trường thông tin giao hàng cho khách hàng CalendarHangiao được hiển thị để chọn ngày giao hàng, trong khi txtDCGiao hiển thị địa chỉ giao hàng mặc định là địa chỉ của khách hàng txtNguoinhan hiển thị tên khách hàng, và txtDTGiao hiển thị số điện thoại của khách hàng, với giá trị mặc định được lấy từ ô thứ tư trong GridViewKH.

Ngaylap.Visible = true; lbNgaylap.Text = t.ToShortDateString().Trim();

MSDH.Visible = true; lbmsdh.Visible = true; lbmsdh.Text = txtTimKH.Text + t.Year.ToString().Substring(2, 2) + t.Month.ToString() + t.Day.ToString() + t.Hour.ToString() + t.Minute.ToString() + t.Second.ToString();

// btnAccept.Visible = true; btnHuyDH.Visible = true;

//4.3.2 thông tin CTDDH lbCTDDH.Visible = true; lbSum.Visible = true;

//Lấy giỏ hàng từ session xuống cart cart = Session["cart"] as DataTable;

//Gán giỏ hàng cart vào gridviewcart: Quan trọng nhất

//Tải dữ liệu từ tlb lên Gridview

//Tính toán só lượng + món tiền lbSum.Text = "Tổng Tiền = " + cart.Compute("sum(ThanhTien)", "").ToString() +

/// protected void btnHuyTimKH_Click(object sender, EventArgs e)

{//1 Cho tìm lại btnTimKh.Text = "Tìm khách hàng"; btnTimKh.Enabled = true;

Để ẩn các ô nhập thông tin mới, bạn cần thiết lập thuộc tính Visible của các thành phần như lbNhapKHMoi, lbMSKH, lbTenKH, lbDCKH, lbSdtKH, txtMSKH, txtTenKH, txtDCKH và txtSdtKH thành false.

//3 Xóa trông textbox txtTimKH.Text = "";

//4.3 Xử lý thông tin đơn hàng

Trong phần 4.3.1, thông tin đơn hàng được ẩn đi bằng cách thiết lập lbTTDH.Visible = false; và các thành phần khác như lbmsdh, lbNgaylap, lbNguoiNhan, lbDiachigiao, lbDTGiao, lbGhichu, lbHangiao, txtGhichu cũng đều được ẩn với giá trị false.

Đoạn mã trên thiết lập các thuộc tính hiển thị của các thành phần giao diện người dùng Cụ thể, lịch giao hàng (CalendarHangiao) và các trường thông tin như địa chỉ giao hàng (txtDCGiao), tên người nhận (txtNguoinhan), và số điện thoại giao hàng (txtDTGiao) đều được thiết lập là không hiển thị Mặc định, địa chỉ giao hàng, tên người nhận và số điện thoại đều được gán giá trị là thông tin của khách hàng.

MSDH.Visible = false; lbmsdh.Visible = false;

// btnAccept.Visible = false; btnHuyDH.Visible = false;

//4.3.2 thông tin CTDDH lbCTDDH.Visible = false; lbSum.Visible = false;

THIẾT KẾ VÀ LẬP TRÌNH WEBAPP PHẦN QUẢN LÝ 46 5.1 Giới thiệu về WebApp quản lý hệ thống bán bánh ngọt online

Masterpage quản lý hệ thống bán bánh ngọt online

5.2.1 Thiết kế Masterpage quản lý

 Sử dung lại Masterpage giao dịch ThuyHang.master bằng cách thiết kế và lập trình bổ sung thực đơn (Menu quản lý) như Error: Reference source not found

THIẾT KẾ: Designing (Master.Master):

[Task]->Edit menu item || Properties: Item …: định nghĩa các mục chọn menu

Item : Text Value NavigateURL : như Error: Reference source not found

Your login attempt was not successful Please try again!”: Quý vị đã đăng nhập không thành công Vui lòng đăng nhập lại!

Remember me next time.: Ghi nhớ cho lần đăng nhập sau.

User Name: Tên đăng nhập

Password is required.: Không để trống mật khẩu

User Name is required.: Không để trống tên đăng nhập

+ [Login.Task]->Convert to template: tự thiết kế lại (bổ sung) những thứ cần thiết cho Login

Login : đăng nhập (bình thường : Ẩn [.Visible = False ]; chỉ khi NSD chọn: thực đơn QUẢN LÝ / ĐĂNG NHẬP => hiện lên: Visible = True)

MÃ LỆNH (CODE): chỉ khi NSD chọn: thực đơn QUẢN LÝ / ĐĂNG NHẬP => hiện lên: Visible = True) public partial class Master : System.Web.UI.MasterPage

{ protected void Page_Load(object sender, EventArgs e)

/// Thủ được thực hiện khi người dùng chọn một mục trên menu

/// protected void MenuMain_MenuItemClick(object sender, MenuEventArgs e)

// Khi người dùng nhấn vào mục "Quản Lý" hoặc "Đăng Nhập" trên thanh menu

// thì sẽ hiển thị form Login cho người dùng nhập thông tin

// để đăng nhập vào trang quản lý if (e.Item.Value == "ql" || e.Item.Value == "dn")

Khi dùng công cụ Login (nêu trên) có thể có lỗi sau:

"WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery' Please add a ScriptResourceMapping named jquery(case-sensitive)." Để khắc phục lỗi này, trong file Web.config chúng ta thêm đoạn mã lệnh sau:

Đăng nhập vào chức năng quản trị dành cho nhân viên đơn vị kinh doanh cho phép thực hiện các thao tác như thêm, xóa, sửa hàng và điều chỉnh giá Lưu ý rằng không có tùy chọn đăng ký thành viên mới; tài khoản sẽ được cấp bởi người quản trị hệ thống.

[2] Khách hàng có thể đăng ký thành viên mới [Sign Up = Create New Account] = Khách hàng thân thiết KHI đặt mua hàng (KHÔNG THUỘC PHẦN NÀY)

Lập Trang : Quản lý và gán vào LoginQL.DestinationPageURL = ~/Managerment.aspx => Chỉ Khi đăng nhập thành công thì mới được phép chuyển đến trang:

~/Managerment.aspx (chỉ có NV QL của đơn vị mới vào được trang này)

Vì vậy: trong Menu / Master.master: Không chọn

CÓ 2 PHƯƠNG ÁN XỬ LÝ ĐĂNG NHẬP:

+ 2 Phương án sau KHÔNG được sử dụng đồng thời,

+ Nếu dùng đồng thời thì PA 1 KHÔNG có tác dụng

PA 1: Sử dụng thư viện ASP.NET có sẵn: có thể dùng Digital ID

[Login.Task]Administer Website {Phải mua bản quyền và cài đặt bổ sung}

PA 2: Code thủ công: Event: Authenticate của Login:

KHÔNG DÙNG Digital ID, có thể dùng DB / MS SQL Server

Accounts quản lý: Admin với password: admin@vn VÀ Guest với password: guest@vn

CODES: public partial class Master : System.Web.UI.MasterPage

{ protected void Page_Load(object sender, EventArgs e)

/// Thủ được thực hiện khi người dùng chọn một mục trên menu

/// protected void MenuMain_MenuItemClick(object sender, MenuEventArgs e)

// Khi người dùng nhấn vào mục "Quản Lý" hoặc "Đăng Nhập" trên thanh menu

// thì sẽ hiển thị form Login cho người dùng nhập thông tin

// để đăng nhập vào trang quản lý if (e.Item.Value == "ql" || e.Item.Value == "dn")

/// protected void LoginQL_Authenticate(object sender, AuthenticateEventArgs e)

{ if ((LoginQL.UserName == "Admin" && LoginQL.Password == "admin@vn") || (LoginQL.UserName == "Guest" && LoginQL.Password == "guest@vn"))

// Đăng nhập thành công e.Authenticated = true;

// Đăng nhập thất bại e.Authenticated = false;

CODES TRÊN Managerment.aspx public partial class Managerment : System.Web.UI.Page

{ static String us; protected void Page_Load(object sender, EventArgs e)

// Người dùng đã đăng nhập us = Session["name"] as String; lblTitle.Text = "Chào mừng " + us + " đến với trang quản lý website bán bánh ngọt"; }

1 Code trên chỉ là tượng trưng; thực tế là Username và Password : lưu trữ và kiểm tra từ một Table trong DB

2 Bảo mật khi NSD nhớ (copy) Link url

5.2.2 Lập trình bổ sung Masterpage quản lý

MÃ LỆNH LẬP TRÌNH: Coding (MasterMaster):

//CHẠY KHI TRANG WEB ĐƯỢC TẢI LÊN TRÌNH DUYỆT

//KIỂM TRA ĐĂNG NHẬP protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)

Chú giải: Code trên chỉ là tượng trưng; trong mở rộng và phát triển sản phẩm đề tài sẽ:

1 Tổ chức Username và Password: lưu trữ và kiểm tra từ một Table trong DB.

2 Xử lý bảo mật khi NSD nhớ (copy) Link url : như trình bày trong Chương 2: trang 18

Trang chính của hệ thống quản lý hệ thống bán bánh ngọt

Thừa kế MasterPage nêu trên, dùng Table để bố cục trang và ít nhất phải thực hiện các yêu cầu sau:

Quản lý có nhiều chức năng; VD: QL HH, Phân công giao hàng, quản lý Nhóm MH, Ql

Quản lý kho và tồn kho là một phần quan trọng trong việc tìm kiếm, thống kê và báo cáo tổng hợp Người dùng có thể dễ dàng truy cập vào trang quản lý chính, nơi họ đã đăng nhập thành công, để chọn các chức năng quản lý khác và chuyển đến các trang quản lý cụ thể Việc kết xuất báo cáo ra bản in giúp cải thiện quy trình làm việc và tối ưu hóa hiệu quả quản lý.

5.3.1 Thiết kế (Design) trang quản lý chung (chính): Managerment.aspx

THIẾT KẾ TRÊN TRANG: Managerment.aspx:

5.3.2 Lập trình (Codes) trang quản lý chung (chính): GoodManagerment.aspx

// Gọi trang quản lý hàng hóa protected void btnQLHH_Click(object sender, EventArgs e)

Trang quản lý danh mục bánh ngọt: FrQLBanhManagements.aspx

5.4.1 Phân tích trang Quản lý danh mục bánh ngọt

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý danh mục bánh từ trang quản lý chung.

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong LoaiBanhNgot + Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.4.2 Thiết kế (Design) trang quản lý danh mục bánh ngọt:

[2] Từ trang Quản lý chung (GoodManagerment.aspx )= gọi == Trang quản lý hàng hóa (GoodManagerment.aspx )

// Gọi trang quản lý hàng hóa protected void btnQLHH_Click(object sender, EventArgs e)

- Dùng DropdownList: liệt kê và cho phép NV QL chọn nhóm mặt hàng cần quản lý (có mục chọn "tất cả")

- Dùng GridView: Liệt kê danh sách các mặt hàng thuộc nhóm đã chọn trong DropDownList (chú ý sử dụng phân trang Paging cho GridView)

Câu lệnh kết nối DB: SELECT * FROM [DMBanhNgot]

Các thiết lập thuộc tính :

[2] GridView: liệt kê các MH thuộc nhóm (dùng Where )

SELECT * FROM [DMBanhNgot] WHERE ([MaLoaiBanh] = @MaLoaiBanh)

Câu lệnh SQL kết nối DataBase:

SELECT DISTINCT * FROM [DMBanhNgot] WHERE ([MaLoaiBanh] @MaLoaiBanh)

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

[Gridview: Task] -> Edit Column // Selected Fields

DataField : cột dữ liệu (trong DB) được dùng

[4] Đối với thuộc tính HÌNH

+ Convert this field to a TemplateField (góc dưới phải của Properties của Field)

+ Đối với các Field là Template (Field tự thiết kế // không dùng mặc định): PHẢI THIẾT

[Gridview: Task] -> Edit Template (chỉ làm khi ít nhất có 1 field Template trong Gridview)

Chú ý: Có thể có nhiều cột TemplateFields: phải chọn từng cột để thiết kế

Một cột có thể phải thiết kế nhiều trạng thái: ItemTeplate : mặc định,…

Field: “Hinh”: Xóa Label =đổi=> Image [Task]->Edit DataBinding

CheckBoxHinh: Cho NSD chọn có/không hiển thị hình ảnh

 GridView (Mặc định “không” = vì tải hình ảnh sẽ làm chậm trang web): Text = Hiển thị hình ảnh

Checked = False (ban đầu “không” chọn)

CheckBoxHinh.Text = Hiển thị hình ảnh

Checked = False (ban đầu “không chọn”)

To optimize website performance and prevent slow loading times due to excessive image downloads, you can hide or display the image column in a GridView This can be achieved by handling the CheckedChanged event of a checkbox control, as shown in the protected method: `protected void cbHA_CheckedChanged(object sender, EventArgs e)`.

GridViewMH.Columns[7].Visible = !GridViewMH.Columns[7].Visible;

Bổ sung mục chọn “Tất cả” trong DropDownList và hiển thị msnhom kế bên

B1:Bổ sung Item mới=Dropdownlist[Task…]->Edit Item: Add [.Text = Tất cả, Value = *]

The B2 dropdown list is configured with the property AppendDataBoundItems set to True, which allows the dropdown to include both the Edit Items from B1 and the selections retrieved from the database (NhomMH).

B3: Viết bổ sung câu lệnh trong thủ tục sự kiện SelectedIndexChanged của DropDownListNhomMH

//THỦ TỤC NÀY CHẠY KHI NSD THAY ĐỔI LỰA CHỌN TRONG DropDownList

/// Tự động chạy mỗi khi người sử dụng (nhân viên) thay đổi lựa chọn nhóm trong

/// protected void DropDownListNhomMH_SelectedIndexChanged(object sender, EventArgs e) {

// 1 Kiểm tra NSD chọn * để liệt kê if (DropDownListNhomMH.SelectedValue.Trim() == "*")// NSD chọn Tất cả, có Value {

SqlDataSourceMH.SelectCommand = "SELECT * FROM [DMBanhNgot]";// Viết lại lệnh Select from Không Where cho sqldtatasourceMH btnThem.Enabled = false;

DropDownListNhomMH.ToolTip = "Chọn một loại thôi, chọn tất cả không thêm đc nha"; } else

{ btnThem.Enabled = true;//cho phép thêm nếu chọn một laoji riêng biệt btnThem.ToolTip = DropDownListNhomMH.ToolTip = " ";//Không nhắc nữa

// 2 hiển thị MSNhom kế bên DropDownList lbLoaiBanh lblLoaiBanh.Text = DropDownListNhomMH.SelectedValue;

In addition, the provided code should be added to the Page_Load(…) method to ensure that when the webpage is loaded, the dropdown list displays "All" as the first item, allowing the GridView below to list all items effectively.

// 1 Lời chào us = Session["name"] as String; lblTitle.Text = "Chào mừng " + us + " đến với trang quản lý hàng hóa";

//2 Gọi thủ tục DropDownListNhomMH_SelectedIndexChanged

 Checkbox cho hiển thị / không hiển thị Hình ảnh của … Trong GridView

B1: Chuyển đổi cột “Hình” GridView sang chế độ Tự thiết kế: Template Field

[GridView]Task->Edit Columns: “Hinh” -> Chọn “Convert to Template Field” B2: Thiết kế lại cột hình ảnh trong GridView: [GridView]Task->Edite Templates

Hình 5 1: Thiết kế lại cột "Hình" trên GridView

Thay thế Label… bởi Image (lấy từ Toolbox):

Image Task->Edit DataBinding: ImageURL = hinh (trong DB)

B3: Codes thay đổi lựa chọn của CheckBox (.Auto Postback = True)

//THAY ĐỔI LỰA CHỌN : HIỂN || HAY KHÔNG HIỂN THỊ HÌNH ẢNH CỦA TRONG GRIDVIEW protected void cbHA_CheckedChanged(object sender, EventArgs e)

GridViewMH.Columns[7].Visible = !GridViewMH.Columns[7].Visible;

In web development, setting PostBack to True allows for a database refresh with a single selection from a DropDownList or CheckBox Conversely, PostBack is set to False when multiple selections from various controls, such as DropDownLists and CheckBoxes, are required to trigger a database reload.

 Paging: Phân trang cho GridView

5.4.3 Lập trình (Codes)trang quản lý danh mục quản lý bánh ngọt:

GoodManagerment.aspx protected void Page_Load(object sender, EventArgs e) protected void Page_Load(object sender, EventArgs e)

// 1 Lời chào us = Session["name"] as String; lblTitle.Text = "Chào mừng " + us + " đến với trang quản lý hàng hóa";

//2 Gọi thủ tục DropDownListNhomMH_SelectedIndexChanged

5.4.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục bánh ngọt:

+ Việc xóa, sửa, chọn … được thực hiện ngay trên Gridview danh mục bánh ngọt

+ Khi thực hiện các thao tác “Thêm”, “Xóa” và “Sửa” …….cần quan tâm các vấn đề:

Không sửa “MaSoBanh”  CHUYỂN nhóm (chuyển MH từ Nhóm này sanh nhóm khác)

=> làm bằng trang web khác [không làm trên trang Quản lý HH này]

Không sửa “Hinh” ; Vì DB lưu đường dẫn đến file hình => Sử dụng chức năng riêng “cập nhật hình”

Không sửa MaLoaiBanh (vì khóa chính) và chú ý một vấn đề tương tự “Thêm mới”

Khi Xóa sẽ liên quan RBTV DL (xử lý trong phần sau)

MaSoBanh ko nhập mà sẽ là MaSoBanh đã chọn trong Dropdownlist =vì vậy=> khi chọn

Khi lựa chọn "Tất cả" trong Dropdownlist (mã số bánh *), nút "Thêm mới" cần được ẩn đi để ngăn chặn việc thêm mới Đồng thời, cần có ToolTip nhắc nhở người sử dụng chọn nhóm mặt hàng cụ thể trước khi thực hiện thao tác thêm mới.

Các RBTV giá >= 0 (=0 : khuyến mãi): dùng Validator (tạm thời chưa làm)

- hình : chọn từ trong PC (ko nhập, vì là path lưu trong DB): FileUpload

MaSoBanh là khóa chính không nên cho phép người dùng tự nhập, vì hệ thống sẽ tự động tăng theo một quy luật nhất định Việc tăng dần mã có thể dẫn đến việc mã ngày càng lớn và không liên tục do có thể xảy ra tình trạng xóa Ví dụ, có thể sử dụng cấu trúc mã gồm năm, nhóm và thứ tự trong năm như 18.

03 12345); tùy nhiên tạm thời bài làm này ta cho nsd (NV) tự nhập, phải xl trùng khóa.

Cách thực hiện thủ tục thêm, có phương án:

Khi người sử dụng nhấn nút “Thêm”, một dòng trống mới sẽ được thêm vào Gridview để người dùng nhập thông tin môn học mới Có ba tùy chọn cho vị trí thêm dòng: ở đầu Gridview, ở cuối hoặc tại vị trí hiện tại, thường là dòng cuối Khi nhập thông tin, cần chuyển các trường thành TemplateField.

PA2: Trong bài làm này tạm dùng các Textbox để nhập thông tin MH mới:

Chỉ khi nsd bấm “thêm mới” thì các Textbox hiện ra cho nsd nhập thông tin MH mới, đổi nhãn “Thêm mới” => “Lưu”;

Sau khi nhập thông tin của mặt hàng mới, NSD cần nhấn nút “Lưu” để lưu mặt hàng vào cơ sở dữ liệu Đồng thời, hành động này sẽ ẩn các ô nhập liệu và thay đổi nhãn nút từ “Lưu” thành “Thêm mới”.

Khi Paging thì thao tác thêm sẽ bị ảnh hưởng

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

+ Available fields: CommandField: Add = Edit (Sửa) Delete (Xóa), Select (Chọn)

5.4.4.1 Thêm sản phẩm bánh ngọt:

B2: Viết lệnh SQL thêm bánh ngọt trrong SqlDataSourceMH tương ứng

INSERT INTO DMBanhNgot(MaLoaiBanh, TenLoaiBanh, Msth, DonViTinh, GiaBan, Hinh, MaSoBanh, HanSD)

VALUES (@MaLoaiBanh, @TenLoaiBanh, @Msth, @DonViTinh, @GiaBan, @Hinh,

B3: Thiết kế các textbox cho phép NSD thêm loại bánh ngọt

B4: Không cho phép “Thêm Mặt hàng mới” khi NSD chọn “Tất cả” trong

DropDownListNhomMH; Vì khi thêm mới, được hiểu là thêm mới vào “nhóm….” Đã chọn trong DropDownListNhomMH protected void DropDownListNhomMH_SelectedIndexChanged(object sender, EventArgs e) {

// 1 Kiểm tra NSD chọn * để liệt kê if (DropDownListNhomMH.SelectedValue.Trim() == "*")// NSD chọn Tất cả, có Value {

SqlDataSourceMH.SelectCommand = "SELECT * FROM [DMBanhNgot]";// Viết lại lệnh Select from Không Where cho sqldtatasourceMH btnThem.Enabled = false;

DropDownListNhomMH.ToolTip = "Chọn một loại thôi, chọn tất cả không thêm đc nha"; } else

{ btnThem.Enabled = true;//cho phép thêm nếu chọn một laoji riêng biệt btnThem.ToolTip = DropDownListNhomMH.ToolTip = " ";//Không nhắc nữa

// 2 hiển thị MSNhom kế bên DropDownList lbLoaiBanh lblLoaiBanh.Text = DropDownListNhomMH.SelectedValue;

} ĐIỀU CHỈNH LẠI THỨ TỰ CỘT CỦA HÌNH MẪU protected void cbHA_CheckedChanged(object sender, EventArgs e)

GridViewMH.Columns[7].Visible = !GridViewMH.Columns[7].Visible;

CHỌN HẠN SỬ DỤNG protected void btnHanSD_Click(object sender, EventArgs e)

} protected void CalendarHanSD_SelectionChanged(object sender, EventArgs e)

{ btnHanSD.Text = CalendarHanSD.SelectedDate.ToShortDateString();

B5: Viết mã lệnh (Codes) cho nút lênh “Thêm Mặt hàng mới”

/// protected void btnThem_Click(object sender, EventArgs e)

Để người dùng (nhân viên) có thể thêm thông tin cho món mới, các ô textbox sẽ được ẩn hoặc hiện theo yêu cầu Cụ thể, các thành phần như lbMsBanh, lblLoaiBanh, lbTenBanh, lbDVT, lbGiaBan, lbHinh, txtMaBanh, txtTenBanh, txtDVT, txtGiaban và lbThuongHieu sẽ thay đổi trạng thái hiển thị của chúng.

FileUploadHinh.Visible = !FileUploadHinh.Visible; btnHanSD.Visible = !btnHanSD.Visible; btnHuy.Visible = !btnHuy.Visible;

//B2 Đổi nhãn button Thêm thành lưu và ngược lại if (btnThem.Text == "Thêm món mới")// Thêm món mới => lưu

Để chuẩn bị cho việc nhập thông tin món ăn mới, hãy xóa trống các ô textbox Cụ thể, đặt giá trị của txtMaBanh, txtTenBanh, txtDVT và txtGiaban thành rỗng Lưu ý rằng txtGiaban.ToolTip sẽ hiển thị thông báo "Nhập giá phải >0" và btnHanSD sẽ được gán chữ "Chọn ngày".

//Thêm thành lưu btnThem.Text = "Lưu món mới";

{//Lưu thông tin món ăn mới vào database try

{// Nếu ko chọn hạn sử dụng = thì hạn sử dụng là ngày hiện tại if (btnHanSD.Text == "Chọn ngày") btnHanSD.Text System.DateTime.Now.ToShortDateString();

} catch (System.Exception ex) { this.Title = "Có lỗi khi thêm món mới =" + ex.Message; } //Xóa các tham số cũ của insert

SqlDataSourceMH.InsertParameters.Add("MaSoBanh", txtMaBanh.Text.Trim());

SqlDataSourceMH.InsertParameters.Add("TenLoaiBanh", txtTenBanh.Text.Trim()); SqlDataSourceMH.InsertParameters.Add("Msth",

SqlDataSourceMH.InsertParameters.Add("DonViTinh", txtDVT.Text.Trim());

SqlDataSourceMH.InsertParameters.Add("GiaBan", System.Data.DbType.Double, txtGiaban.Text.Trim());

SqlDataSourceMH.InsertParameters.Add("HanSD", System.Data.DbType.DateTime, btnHanSD.Text.Trim());

SqlDataSourceMH.InsertParameters.Add("Hinh", "~\\Media\\" +

//Insert vs các tham số nêu trên DB

//System.IO.File.Copy(FileUploadHinh.FileName, "C:\\Users\\NK Hue\\

System.IO.Path.GetFileName(FileUploadHinh.FileName), true);

FileUploadHinh.SaveAs(Server.MapPath("~\\Media\\" + FileUploadHinh.FileName)); GridViewMH.DataBind(); this.Title = "Đã thêm xong!";

//Lưu thành thêm btnThem.Text = "Thêm món mới";

B6: Viết mã lệnh (Codes) cho nút lênh “Hủy”

/// Hủy của thêm món ăn mới

/// protected void btnHuy_Click(object sender, EventArgs e)

Để ẩn các ô textbox và thông tin món mới trong giao diện, các thuộc tính hiển thị của các đối tượng như lbMsBanh, lblLoaiBanh, lbTenBanh, lbDVT, lbGiaBan, lbHinh, txtMaBanh và txtTenBanh đều được đặt thành false.

DropDownListTH.Visible = false; txtDVT.Visible = false; txtGiaban.Visible = false;

FileUploadHinh.Visible = false; btnHanSD.Visible = false; btnHuy.Visible = false;

//B2 Đổi nhãn button Thêm ; btnThem.Text = "Thêm món mới"; // Thêm món mới => lưu

5.4.4.2 Sửa các loại bánh ngọt:

B2: Viết lệnh SQL Sửa (Update) bánh ngọt trong SqlDataSourceMH tương ứng

UPDATE DMBanhNgot SET TenLoaiBanh = @TenLoaiBanh, DonViTinh @DonViTinh, GiaBan = @GiaBan, HanSD = @HanSD, Hinh = @Hinh

5.4.4.3 Xóa các loại bánh ngọt:

B2: Viết lệnh SQL Xóa (Delete) …… trong SqlDataSourceMH tương ứng

DELETE FROM DMBanhNgot WHERE (MaSoBanh = @MaSoBanh)

5.4.5 Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa danh mục sản phẩm bánh ngọt:

Khi xóa "DMBanhNgot" (Danh Mục Bánh Ngọt), dữ liệu của hai bảng ChiTietDH (Chi tiết đơn đặt hàng) và HANGTON (Hàng tồn) sẽ bị ảnh hưởng nghiêm trọng.

Có 2 trường hợp xử lý RBTV dữ liệu:

Để xử lý hàng tồn kho của mặt hàng (MH), cần thực hiện việc thanh lý bằng cách xóa từng sản phẩm tồn kho hoặc xóa toàn bộ hàng tồn của mặt hàng đó.

MH cần xóa các đơn đặt hàng chưa giải quyết (ChiTietDH) bằng cách xử lý đổi hàng, tức là xóa ChiTietDH đó và chọn mua sản phẩm tương đương khác, hoặc thuyết phục khách hàng từ chối mua.

MH đó = Xóa CTDDH: Xóa từng ChiTietDH OR xóa tất cả ChiTietDH của MH đó.

5.4.5.2 Thiết kế 2 GridView phụ ngay trên Form quản lý FrGoodsManagements.aspx

* Thiết kế 2 gridviews phụ Hàng Tồn và Chi Tiết đơn đặt hàng

Caption = BÁNH ĐANG ĐƯỢC CHỌN HÀNG TỒN TRONG CÁC CHI NHÁNH VỚI SỐ LƯỢNG NHƯ SAU:

Caption = BÁNH ĐANG ĐƯỢC CHỌN CÒN ĐẶT MUA TRÊN CÁC ĐƠN HÀNG SAU *

SELECT * FROM [HangTon] WHERE ([MaSoBanh] = @MaSoBanh)

SELECT * FROM [ChiTietDH] WHERE ([MaSoBanh] = @MaSoBanh)

5.4.5.3 Xử lý các RBTV trên 2 GridView phụ

Thanh lý[Delete]: Chính là câu lệnh Delete … được viết trong SqlDataSourceTONKHO

DELETE FROM HangTon WHERE (MSCuaHang = @MSCuaHang) AND (MaSoBanh

KH từ chối[Delete]: Chính là câu lệnh Delete … được viết trong SqlDataSourceCTDDH

DELETE FROM ChiTietDH WHERE (MSDDH = @MSDDH) AND (MaSoBanh @MaSoBanh)

MaSoBanh = GridViewCTDDH.SelectedValue[2] Đổi hàng[Update]:

Mã đơn hàng.ReadOnly = True

Mã hàng.ReadOnly = False (được phép đổi hàng)

Số lượng.ReadOnly = False (được phép thay đổi số lượng)

Viết câu lệnh Update … trong SqlDataSourceCTDDH

SET MaSoBanh = @MaSoBanh, SL = @SL

WHERE (MaSoBanh = @MaSoBanh) AND (SL = @SL)

Chuyển Nhóm: Chuyển một mặt hàng từ nhóm này sang nhóm khác

NỘI DUNG CHÍNH: WEBFORM CHUYỂN MH TỪ NHÓM NÀY SANG NHÓM KHÁC 5.5.1 Thiết kế WebForm Chuyển Nhóm

Bổ sung trang mới: ChuyenNhom.aspx và : THIẾT KẾ

- Thiết kế trang chuyển nhóm mặt hàng:

- Dùng DropDownList: liệt kê và cho phép Nhân Viên Quản Lý chọn hãng sản xuất cần quản lý (có mục chọn "tất cả")

- Dùng ListBox: Liệt kê danh sách các mặt hàng thuộc nhóm đã chọn trong DropDownList (chú ý sử dụng phân trang Paging cho GridView)

- Dùng các Button để chuyển mặt hàng từ nhóm hãng này qua nhóm hãng kia

ListBox Nguồn ListBox Đích x Enable AutoPosBack

5.5.2 Gọi WebForm Chuyển Nhóm từ WebForm quản lý Managements

Management.aspx : Gọi ChuyenNhom.aspx từ tran Quản lý: Management.aspx protected void Button4_Click(object sender, EventArgs e)//Chuyển Nhóm

5.5.3 Xử lý kết nối và cài đặt DL trên WebForm Chuyển Nhóm

5.5.4 Mã lệnh lập trình (chỉ mang tính gợi ý) trên WebForm Chuyển Nhóm

Mã lệnh ChuyenNhom.aspx protected void btnChuyenNhom_Click(object sender, EventArgs e)

// CHUYỂN 1 MH TỪ NHÓM "NGUỒN" SANG NHÓM "ĐÍCH": LEFT to RIGHT protected void btnLR_Click(object sender, EventArgs e)

// gọi Update() bên Nguồn (S) đề chuyển

//Tải DL sau Update lên Source

//Tải DL sau Update lên Destination

// CHUYỂN 1 MH TỪ NHÓM "ĐÍCH" SANG NHÓM "NGUỒN": RIGHT to LEFT protected void btnRL_Click(object sender, EventArgs e)

// gọi Update() bên Nguồn (D) đề chuyển

//Tải DL sau Update lên Source

//Tải DL sau Update lên Destination

TỰ LÀM CHO 2 NÚT CHUYỂN TẤT CẢ

// >>: CHUYỂN ALL MH TỪ BÊN SOURCE => DESTINATION (L -> R) protected void btnLAR_Click(object sender, EventArgs e)

// Viết lại lệnh Update không Where

SqlDataSourceMH_S.UpdateCommand = "UPDATE DMBanhNgot SET MaLoaiBanh @MaLoaiBanhS WHERE (MaLoaiBanh = @MaLoaiBanhD)";

// Xóa các tham số cũ

// Khai báo lại tham số cho Update

// gọi Update() bên Nguồn (S) đề chuyển

//Tải DL sau Update lên Source

//Tải DL sau Update lên Destination

// >>: CHUYỂN ALL MH TỪ BÊN DESTINATION => SOURCE (R -> L) protected void btnRAL_Click(object sender, EventArgs e)

// Viết lại lệnh Update không Where

SqlDataSourceMH_D.UpdateCommand = "UPDATE DMBanhNgot SET MaLoaiBanh @MaLoaiBanhS WHERE (MaLoaiBanh = @MaLoaiBanhD)";

// Xóa các tham số cũ

// Khai báo lại tham số cho Update

// gọi Update() bên Nguồn (D) đề chuyển

//Tải DL sau Update lên Source

//Tải DL sau Update lên Destination

5.5.5 Các mã lệnh lập trình (chỉ mang tính gợi ý) xứ lý “mờ” các nút không phù hợp trên WebForm Chuyển Nhóm:

Xử lý “Mờ” các nút không phù hợp: Enable = False FrChuyenNhom.aspx

TRƯỜNG HỢP 1: 2 BÊN DROPDOWNLIST ĐÃ CHỌN GIỐNG NHAU protected void DropDownListNhomMH_S_SelectedIndexChanged(object sender, EventArgs e)

// KIỂM TRA: NẾU 2 BÊN Dropdownlist CỦA S VÀ D GIỐNG NHAU => KHÔNG CHO CHUYỂN [MỞ CÁC NÚT LỆNH] if (DropDownListNhomMH_S.SelectedValue =DropDownListNhomMH_D.SelectedValue)

// 2 Bên đã chọn giống nhau btnLR.Enabled = false; btnRL.Enabled = false; btnLAR.Enabled = false; btnRAL.Enabled = false;

DropDownListNhomMH_S.ToolTip = DropDownListNhomMH_D.ToolTip = "Vui lòng chọn nhóm nguồn khác với nhóm đích thì mới chuyển được";

// 2 bên đã chọn khác nhau btnLR.Enabled = true; btnRL.Enabled = true; btnLAR.Enabled = true; btnRAL.Enabled = true;

TRƯỜNG HỢP 2: NẾU CHƯA CHỌN ITEM NÀO TRONG LISTBOX THÌ KHÔNGCHUYỂN > HOẶC Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

Bổ sung mục chọn “Tất cả” trong 2 DropDownList và hiển thị MaKV và MaCV kế bên B1:Bổ sung Item mới=Dropdownlist[Task…]->Edit Item: Add [.Text = Tất cả, Value = *]

In B2, by setting the property AppendDataBoundItems to True, the dropdown list (DDL) will include both the Edit Items from B1 and the items retrieved from the database, effectively appending these selections into the DDL.

B3: Viết bổ sung câu lệnh trong thủ tục sự kiện SelectedIndexChanged của DropDownListKV

5.6.3 Lập trình (Codes)trang quản lý danh mục Nhân viên: FrQLNV.aspx

{ if(DropDownListKV.SelectedValue == "*" && DropDownListCM.SelectedValue == "*") {

SqlDataSourceNV.SelectCommand = "SELECT * FROM [NhanVien]"; btnThem.Enabled = false; btnThem.ToolTip = "Vui lòng chọn khu vực và chuyên môn cụ thể để thêm nhân viên mới";

SqlDataSourceNV.SelectCommand = "SELECT * FROM [NhanVien] WHERE

([MSChuyenMon] = @MSChuyenMon)"; btnThem.Enabled = false; btnThem.ToolTip = "Vui lòng chọn khu vực cụ thể để thêm nhân viên mới";

SqlDataSourceNV.SelectCommand = "SELECT * FROM [NhanVien] WHERE ([MSKhuVuc] = @MSKhuVuc)"; btnThem.Enabled = false; btnThem.ToolTip = "Vui lòng chọn chuyên môn cụ thể để thêm nhân viên mới"; } else

{ btnThem.Enabled = true; btnThem.ToolTip = "";

} lbmskv.Text = DropDownListKV.SelectedValue; lbmscm.Text = DropDownListCM.SelectedValue;

* Gán sự kiện DropDownListKV_SelectedIndexChanged DropdownlistCM

5.6.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Nhân viên:

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm sản phẩm trrong SqlDataSourceNV tương ứng

INSERT INTO NhanVien(MSNhanVien, TenNhanVien, GioiTinh, SDT, MSKhuVuc, MSChuyenMon)

VALUES (@MSNhanVien, @TenNhanVien, @GioiTinh, @SDT, @MSKhuVuc,

B3: Thiết kế các textbox, calendar, fileupload cho phép NSD thêm sản phẩm mới

Không cho phép thêm nhân viên khi người sử dụng chọn "Tất cả" trong DropDownListKV và DropDownListCV Việc thêm mới được hiểu là bổ sung vào các khu vực và chuyên môn đã được chọn trong các danh sách này.

B5: Viết mã lệnh (Codes) cho nút lênh “Thêm nhân viên mới” protected void btnThem_Click(object sender, EventArgs e)

{ if(btnThem.Text == "Thêm nhân viên")

{ pnThem.Visible = true; btnHuy.Visible = true; btnThem.Text = "Lưu nhân viên";

SqlDataSourceNV.InsertParameters.Add("MSNhanVien", txtMaNV.Text);

SqlDataSourceNV.InsertParameters.Add("TenNhanVien", txtTenNV.Text);

SqlDataSourceNV.InsertParameters.Add("GioiTinh", txtGT.Text);

SqlDataSourceNV.InsertParameters.Add("SDT", txtDT.Text);

SqlDataSourceNV.Insert(); pnThem.Visible = false; btnHuy.Visible = false; btnThem.Text = "Thêm nhân viên";

B6: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ pnThem.Visible = false; btnHuy.Visible = false; btnThem.Text = "Thêm nhân viên";

Trang quản lý cửa hàng

5.7.1 Phân tích trang Quản lý danh mục Cửa Hàng

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Cửa Hàng từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong CuaHang + Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.7.2 Thiết kế (Design) trang quản lý Cửa Hàng: FrQLCH.aspx

Câu lệnh kết nối DB: SELECT * FROM [KhuVuc]

Các thiết lập thuộc tính :

Câu lệnh SQL kết nối DataBase:

SELECT MSCuaHang, TenCuaHang, DiaChi, SDT, SucChua, ConTrong, MSKhuVuc FROM CuaHang WHERE (MSKhuVuc = @MSKhuVuc)

Để chỉnh sửa cột trong GridView, hãy tự động gán cột dữ liệu tương ứng bằng cách thêm mã vào sự kiện Page_Load Khi trang web được tải lên, Dropdownlist sẽ hiển thị mục "Tất cả" đầu tiên, giúp GridView bên dưới liệt kê tất cả các sản phẩm.

5.7.3 Lập trình (Codes)trang quản lý danh mục Cửa Hàng: FrQLCH.aspx protected void Page_Load(object sender, EventArgs e)

} protected void DropDownListKV_SelectedIndexChanged(object sender, EventArgs e) {

// Nếu người dùng chọn tất cả if (DropDownListKV.SelectedValue == "*")

SqlDataSourceCH.SelectCommand = "SELECT * FROM [CuaHang]"; btnThem.Enabled = false; btnThem.ToolTip = "Vui lòng chọn mã khu vực cụ thể để thêm cửa hàng mới";

{ btnThem.Enabled = true; btnThem.ToolTip = "";

// Hiển thị mã hãng sản xuất lbMaKV.Text = DropDownListKV.SelectedValue;

5.7.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Cửa Hàng: FrQLCH.aspx

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm sản phẩm trrong SqlDataSourceCH tương ứng

INSERT INTO CuaHang(MSCuaHang, TenCuaHang, DiaChi, SDT, SucChua, ConTrong, MSKhuVuc)

VALUES (@MSCuaHang, @TenCuaHang, @DiaChi, @SDT, @SucChua, @ConTrong,

B3: Thiết kế các textbox, button, label cho phép NSD thêm cửa hàng mới

Khi người dùng chọn “Tất cả” trong DropDownListKV, hệ thống không cho phép thêm cửa hàng mới, vì việc thêm mới được hiểu là chỉ áp dụng cho khu vực đã chọn Để thực hiện chức năng này, cần viết mã lệnh cho nút lệnh “Thêm cửa hàng mới” với cú pháp protected void btnThem_Click(object sender, EventArgs e).

{ if (btnThem.Text == "Thêm cửa hàng")

{ txtMaCH.Text = ""; txtTenCH.Text = ""; txtDiaChi.Text = ""; txtSDT.Text = ""; txtSC.Text = ""; txtCT.Text = ""; txtMKVuc.Text = ""; btnThem.Visible = true; btnHuy.Visible = true; btnThem.Text = "Lưu cửa hàng";

SqlDataSourceCH.Insert(); btnThem.Visible = false; btnHuy.Visible = false; btnThem.Text = "Thêm cửa hàng";

B6: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ btnThem.Visible = false; btnHuy.Visible = false; btnThem.Text = "Thêm cửa hàng";

+Viết lệnh SQL Xóa (delete) CuaHang trong SqlDataSourceCH tương ứng

DELETE FROM CuaHang WHERE (MSCuaHang = @MSCuaHang)

+Viết lệnh SQL sửa (Update) CuaHang trong SqlDataSourceCH tương ứng

UPDATE CuaHang SET TenCuaHang = @TenCuaHang, DiaChi = @DiaChi, SDT @SDT, SucChua = @SucChua, ConTrong = @ConTrong, MSKhuVuc = @MSKhuVuc WHERE (MSCuaHang = @MSCuaHang)

5.7.5 Lập trình Codes xử lý RBTV dữ liệu khi xóa danh mục Cửa Hang: FrQLCH.aspx 5.7.5.1 Giới thiệu

Khi xóa CuaHang (Table CuaHang) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với bảng

5.7.5.2 Thiết kế các GridView phụ ngay trên Form Quản lý cửa Hàng

SELECT MSCuaHang, TenCuaHang, DiaChi, SDT, SucChua, ConTrong, MSKhuVuc FROM CuaHang

SELECT HangTon.MSCuaHang, HangTon.MaSoBanh, HangTon.SLTon,

DMBanhNgot.TenLoaiBanh, CuaHang.TenCuaHang FROM HangTon INNER JOIN DMBanhNgot ON HangTon.MaSoBanh = DMBanhNgot.MaSoBanh INNER JOIN CuaHang ON HangTon.MSCuaHang = CuaHang.MSCuaHang

WHERE (HangTon.MSCuaHang = @MSCuaHang) AND (HangTon.MaSoBanh @MaSoBanh)

5.7.5.3 Xử lí RBTV trên các GridView phụ

Xóa đó chính là câu lệnh trong SQLDataSourceCH

DELETE FROM CuaHang WHERE (MSCuaHang = @MSCuaHang)

Update(Chuyển CuaHang) thay vì xóa đơn hàng ta chuyển sang CuaHang

UPDATE CuaHang SET TenCuaHang = @TenCuaHang, DiaChi = @DiaChi, SDT @SDT, SucChua = @SucChua, ConTrong = @ConTrong, MSKhuVuc = @MSKhuVuc WHERE (MSCuaHang = @MSCuaHang)

Xóa đó chính là câu lệnh trong SQLDataSourceHangTon

WHERE (MaSoBanh = @MaSoBanh) AND (MSCuaHang = @MSCuaHang)

Trang quản lý khu vực

5.8.1 Phân tích trang Quản lý danh mục Khu Vực

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Khu Vực từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong KhuVuc

+ Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.8.2 Thiết kế (Design) trang quản lý Khu Vực: FrQLKV.aspx

Câu lệnh SQL kết nối DataBase:

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

5.8.3 Lập trình (Codes)trang quản lý danh mục Khu Vực: FrQLKV.aspx protected void Page_Load(object sender, EventArgs e)

5.8.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Khu Vực: FrQLKV.aspx

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm sản phẩm trrong SqlDataSourceKVtương ứng

INSERT INTO KhuVuc(MSKhuVuc, TenKhuVuc)

B3: Thiết kế các textbox, button, label cho phép NSD thêm cửa hàng mới

B4: Viết mã lệnh (Codes) cho nút lênh “Thêm khu vực mới” protected void btnThemKV_Click(object sender, EventArgs e)

{ if (btnThemKV.Text == "Thêm khu vực")

{ txtMaKV.Text = ""; txtTenKV.Text = ""; btnThemKV.Visible = true; btnHuy.Visible = true; btnThemKV.Text = "Lưu khu vực";

SqlDataSourceKV.Insert(); btnThemKV.Visible = false; btnHuy.Visible = false; btnThemKV.Text = "Thêm khu vực";

B5: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ btnThemKV.Visible = false; btnHuy.Visible = false; btnThemKV.Text = "Thêm khu vực";

Viết lệnh SQL xóa (Delete) Khu Vực trong SqlDataSourceKV tương ứng DELETE FROM KhuVuc WHERE (MSKhuVuc = @MSKhuVuc)

Viết lệnh SQL Sửa (Update) Khu vực trong SqlDataSourceKV tương ứng

UPDATE KhuVuc SET TenKhuVuc = @TenKhuVuc WHERE (MSKhuVuc @MSKhuVuc)

5.8.5 Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa danh mục Khu vực: Khu vực

Khi xóa Khu Vực (table) sẽ bị ảnh hưởng RBTV dữ liệu đối với bảng KhuVuc

5.8.5.2 Thiết kế các Gridview phụ ngay trên FrQLKV.aspx

Các GridView xử lý RBTV dữ liêu khi xóa khu vực

SELECT MSCuaHang, TenCuaHang, DiaChi, SDT, SucChua, ConTrong, MSKhuVuc FROM CuaHang WHERE (MSKhuVuc = @MSKhuVuc)

SELECT * FROM [NhanVien] WHERE (([MSKhuVuc] = @MSKhuVuc) AND ([MSChuyenMon] = @MSChuyenMon))

5.8.5.3 Xử lý RBTV trên các GridView phụ.

*Xóa câu lệnh trong SQLDataSourceKV

DELETE FROM KhuVuc WHERE (MSKhuVuc = @MSKhuVuc)

*Xóa câu lệnh trong SQLDataSourceCH

DELETE FROM CuaHang WHERE (MSCuaHang = @MSCuaHang)

*Xóa câu lệnh trong SQLDataSourceNV

DELETE FROM NhanVien WHERE (MSNhanVien = @MSNhanVien)

*Xóa câu lệnh trong SQLDataSourceDDH

DELETE FROM DDH WHERE (MSDDH = @MSDDH)

Trang quản lý chuyên môn

5.9.1 Phân tích trang Quản lý Chuyên Môn

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Chuyên Môn từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong ChuyenMon+ Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.9.2 Thiết kế (Design) trang quản lý Chuyên Môn: FrQLCM.aspx

Câu lệnh SQL kết nối DataBase:

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

5.9.3 Lập trình (Codes)trang quản lý Chuyên Môn: FrQLCM.aspx protected void Page_Load(object sender, EventArgs e)

5.9.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Chuyên Môn: FrQLCM.aspx

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm sản phẩm trrong SqlDataSourceKVtương ứng

INSERT INTO ChuyenMon(MSChuyenMon, TenChuyenMon)

B3: Thiết kế các textbox, button, label cho phép NSD thêm cửa hàng mới

B4: Viết mã lệnh (Codes) cho nút lênh “Thêm chuyên môn mới” protected void btnThemCM_Click(object sender, EventArgs e)

{ if (btnThemCM.Text == "Thêm chuyên môn")

{ txtMaCM.Text = ""; txtTenCM.Text = ""; btnThemCM.Visible = true; btnHuy.Visible = true; btnThemCM.Text = "Lưu chuyên môn";

SqlDataSourceCM.Insert(); btnThemCM.Visible = false; btnHuy.Visible = false; btnThemCM.Text = "Thêm chuyên môn";

B5: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ btnThemCM.Visible = false; btnHuy.Visible = false; btnThemCM.Text = "Thêm chuyên môn";

B2: Viết lệnh SQL Xóa (Delete) Chuyen môn trong SqlDataSourceCM tương ứng DELETE FROM ChuyenMon WHERE (MSChuyenMon = @MSChuyenMon)

Viết lệnh SQL Sửa (Update) ChuyenMon trong SqlDataSourceCM tương ứng

UPDATE ChuyenMon SET MSChuyenMon =, TenChuyenMon = @TenChuyenMon WHERE (MSChuyenMon = @MSChuyenMon)

5.9.5 Lập trình Codes xử lý RBTV dữ liệu khi xóa ChuyenMon: FrQLCM.aspcx

+ Khi xóa Khu vực (Table KhuVuc) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với bảng KhuVuc

5.9.5.2 Thiết kế các GridView phụ ngay trên Form quản lý Chuyên Môn: FrQLCM.aspx

Các Gridview xử lý RBTV dữ liệu khi xóa CM

WHERE (([MSKhuVuc] = @MSKhuVuc) AND ([MSChuyenMon] = @MSChuyenMon))

5.9.5.3 Xử lý RBTV trên các GridView phụ

Xóa đó chính là câu lệnh trong SQLDataSourceCM

DELETE FROM ChuyenMon WHERE (MSChuyenMon = @MSChuyenMon)

Update (ChuyenMon) thay vì xóa ChuyenMon

UPDATE ChuyenMon SET MSChuyenMon =, TenChuyenMon = @TenChuyenMon WHERE (MSChuyenMon = @MSChuyenMon)

Xóa đó chính là câu lệnh trong SQLDataSourceNV

DELETE FROM NhanVien WHERE (MSNhanVien = @MSNhanVien)

Trang quản lý thương hiệu

5.10.1 Phân tích trang Quản lý Thương Hiệu

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Thương Hiệu từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong ThuongHieu

+ Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.10.2 Thiết kế (Design) trang quản lý Thương Hiệu: FrQLTH.aspx

Câu lệnh SQL kết nối DataBase:

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

5.10.3 Lập trình (Codes)trang quản lý Thương Hiệu: FrQLTH.aspx protected void Page_Load(object sender, EventArgs e)

5.10.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Thương Hiệu:

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm sản phẩm trrong SqlDataSourceTH tương ứng

INSERT INTO ThuongHieu(Msth, Tenth)

B3: Thiết kế các textbox, button, label cho phép NSD thêm thương hiệu mới

B4: Viết mã lệnh (Codes) cho nút lênh “Thêm thương hiệu” protected void btnThemTH_Click(object sender, EventArgs e)

{ if (btnThemTH.Text == "Thêm thương hiệu")

{ txtMaTH.Text = ""; txtTenTH.Text = ""; btnThemTH.Visible = true; btnHuy.Visible = true; btnThemTH.Text = "Lưu thương hiệu";

SqlDataSourceTH.Visible = false; btnHuy.Visible = false; btnThemTH.Text = "Thêm thương hiệu";

B5: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ btnThemTH.Visible = false; btnHuy.Visible = false; btnThemTH.Text = "Thêm thương hiệu";

B2: Viết lệnh SQL Xóa (Delete) Thương Hiệu trong SqlDataSourceTH tương ứng DELETE FROM ThuongHieu WHERE (Msth = @Msth)

B3: Viết lệnh SQL Sửa (Update) Thương Hiệu trong SqlDataSourceTH tương ứngUPDATE ThuongHieu SET Tenth = @Tenth WHERE (Msth = @Msth)

5.10.5 Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa Thương Hiệu: FrQLTH.aspx 5.10.5.1 Giới thiệu

Khi xóa ThuongHieu (Table ThuongHieu) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với bảng ThuongHieu

5.10.5.2 Thiết kế các GridView phụ ngay trên Form Quản lý Thương Hiệu

Các GridView xử lý RBTV dữ liệu khi xóa Thương Hiệu

SELECT * FROM [DMBanhNgot] WHERE ([MaLoaiBanh] = @MaLoaiBanh)

5.10.5.3 Xử lí RBTV trên các GridView phụ

DELETE FROM ThuongHieu WHERE (Msth = @Msth)

UPDATE ThuongHieu SET Tenth = @Tenth WHERE (Msth = @Msth)

DELETE FROM ThuongHieu WHERE (Msth = @Msth)

Trang quản lý nhóm loại bánh

5.11.1 Phân tích trang Quản lý danh mục Nhóm Loại Bánh

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Loại Bánh ngọt từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong LoaiBanhNgot+ Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.11.2 Thiết kế (Design) trang quản lý Nhóm Loại Bánh: FrQLNhom.aspx

Câu lệnh SQL kết nối DataBase:

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

5.11.3 Lập trình (Codes)trang quản lý Nhóm Loại Bán: FrQLNhom.aspx protected void Page_Load(object sender, EventArgs e)

5.11.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Nhóm Loại Bánh:

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm sản phẩm trrong SqlDataSourceNhom tương ứng

INSERT INTO LoaiBanhNgot(MaLoaiBanh, TenLoaiBanh, MoTa)

B3: Thiết kế các textbox, button, label cho phép NSD thêm cửa hàng mới

B4: Viết mã lệnh (Codes) cho nút lênh “Thêm loại bánh” protected void btnThemLoai_Click(object sender, EventArgs e)

{ if (btnThemLoai.Text == "Thêm loại bánh")

{ txtMLBanh.Text = ""; txtTLBanh.Text = ""; txtMoTa.Text = ""; btnThemLoai.Visible = true; btnHuy.Visible = true; btnThemLoai.Text = "Lưu loại bánh";

SqlDataSourceNhom.Insert(); btnThemLoai.Visible = false; btnHuy.Visible = false; btnThemLoai.Text = "Thêm loại bánh";

B5: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ btnThemLoai.Visible = false; btnHuy.Visible = false; btnThemLoai.Text = "Thêm loại bánh";

B2: Viết lệnh SQL Xóa (Delete) MaLoaiBanh trong SqlDataSourceNhom tương ứng

DELETE FROM KhuVuc WHERE (mskv = @mskv)

B3: Viết lệnh SQL Sửa (Update) MaLoaiBanh trong SqlDataSourceNhom tương ứng UPDATE LoaiBanhNgot SET TenLoaiBanh = @TenLoaiBanh, MoTa = @MoTa WHERE (MaLoaiBanh = @MaLoaiBanh)

5.11.5 Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa MaLoaiBanh:

Khi xóa Khu vực (Table KhuVuc) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với bảng KhuVuc

Trích DB liên quan xử lý RBTV dữ liệu khi xóa

5.11.5.2 Thiết kế các GridView phụ ngay trên FrQLNhom.aspx

UPDATE LoaiBanhNgot SET TenLoaiBanh = @TenLoaiBanh, MoTa = @MoTa WHERE (MaLoaiBanh = @MaLoaiBanh)

DELETE FROM LoaiBanhNgot WHERE (MaLoaiBanh = @MaLoaiBanh)

SELECT * FROM [DMBanhNgot] WHERE ([MaLoaiBanh] = @MaLoaiBanh)

Trang quản lý khách hàng

5.12.1 Phân tích trang Quản lý Khách Hàng

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Khách Hàng từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong KhachHang

+ Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.12.2 Thiết kế (Design) trang quản lý Khách Hàng: FrQLKH.aspx

Câu lệnh SQL kết nối DataBase:

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

5.12.3 Lập trình (Codes)trang quản lý Khách Hàng: FrQLKH.aspx protected void Page_Load(object sender, EventArgs e)

5.12.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Khách Hàng:

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm khách hàng trong SqlDataSourceKH tương ứng

INSERT INTO KhachHang(MSKhachHang, TenKhachHang, DiaChi, SDT, Diem)

VALUES (@MSKhachHang, @TenKhachHang, @DiaChi, @SDT, @Diem)

B3: Viết lệnh SQL xóa khách hàng trong SqlDataSourceKH tương ứng\

DELETE FROM KhachHang WHERE (MSKhachHang = @MSKhachHang)

B4: Viết lệnh SQL Cập nhật trong SqlDataSourceKH tương ứng

UPDATE KhachHang SET TenKhachHang = @TenKhachHang, DiaChi = @DiaChi, SDT

= @SDT, Diem = @Diem WHERE (MSKhachHang = MSKhachHang)

Trang quản lý hàng tồn

5.13.1 Phân tích trang Quản lý Hàng Tồn

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Hàng Tồn từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong HangTon + Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.13.2 Thiết kế (Design) trang quản lý Hàng Tồn: FrQLHangTon.aspx

Câu lệnh kết nối DB: SELECT * FROM [CuaHang]

Các thiết lập thuộc tính :

Câu lệnh kết nối DB: SELECT * FROM [DMBanhNgot]

Các thiết lập thuộc tính :

Câu lệnh SQL kết nối DataBase:

SELECT HangTon.MSCuaHang, HangTon.MaSoBanh, HangTon.SLTon,

FROM HangTon INNER JOIN DMBanhNgot ON HangTon.MaSoBanh DMBanhNgot.MaSoBanh INNER JOIN CuaHang ON HangTon.MSCuaHang CuaHang.MSCuaHang

WHERE (HangTon.MSCuaHang = @MSCuaHang) AND (HangTon.MaSoBanh

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

Bổ sung mục chọn “Tất cả” trong 2 DropDownList và hiển thị MaCH và MaSoBanh kế bên B1:Bổ sung Item mới=Dropdownlist[Task…]->Edit Item: Add [.Text = Tất cả, Value = *]

The B2 dropdown list properties, with AppendDataBoundItems set to True, will combine the Edit Items from B1 with the options retrieved from the database, ensuring a comprehensive selection in the dropdown.

5.13.3 Lập trình (Codes)trang quản lý Hàng Tồn: FrQLHangTon.aspx protected void Page_Load(object sender, EventArgs e)

} protected void DropDownListCH_SelectedIndexChanged(object sender, EventArgs e)

{ if (DropDownListCH.SelectedValue == "*" && DropDownListMSBanh.SelectedValue ="*")

// Cửa hàng và mã số bánh chọn tất cả

SqlDataSourceHangTon.SelectCommand = "SELECT HangTon.MSCuaHang,

The SQL query retrieves data from the HangTon, DMBanhNgot, and CuaHang tables, specifically selecting columns such as HangTon.MaSoBanh, HangTon.SLTon, DMBanhNgot.TenLoaiBanh, and CuaHang.TenCuaHang The query establishes relationships between the tables using INNER JOIN based on the corresponding keys Additionally, the button for stock entry is disabled, with a tooltip prompting users to select a specific store and cake code for stock input If the selected store is set to all stores and a specific cake code is chosen, the system will proceed accordingly.

// Cửa hàng chọn tất cả

SqlDataSourceHangTon.SelectCommand = "SELECT HangTon.MSCuaHang,

The SQL query retrieves data from the HangTon, DMBanhNgot, and CuaHang tables by joining them based on specific identifiers It selects the columns HangTon.MaSoBanh, HangTon.SLTon, DMBanhNgot.TenLoaiBanh, and CuaHang.TenCuaHang, filtering results where HangTon.MaSoBanh matches a specified parameter Additionally, the button for inventory input is disabled, with a tooltip prompting users to select a specific store before proceeding with stock entry.

} if (DropDownListCH.SelectedValue != "*" && DropDownListMSBanh.SelectedValue ="*")

// Mã số bánh chọn tất cả

SqlDataSourceHangTon.SelectCommand = "SELECT HangTon.MSCuaHang,

The SQL query retrieves specific data from the HangTon, DMBanhNgot, and CuaHang tables, linking them through their respective identifiers The query filters results based on a particular store ID, denoted as @MSCuaHang Additionally, the "Enter Stock" button is disabled and displays a tooltip prompting users to select a specific cake code for stock entry.

} if (DropDownListCH.SelectedValue != "*" && DropDownListMSBanh.SelectedValue !"*")

GridViewHT.DataBind(); if (GridViewHT.Rows.Count == 0)

// Hàng chưa có trong kho => cho phép nhập btnNhapkho.Enabled = true; btnNhapkho.ToolTip = "";

// Hàng đã có trong kho => chỉ cho phép cập nhật số lượng btnNhapkho.Enabled = false; btnNhapkho.ToolTip = "Hàng đã có sẵn trong kho Vui lòng cập nhật số lượng"; }

} lbMaCH.Text = DropDownListCH.SelectedValue; lbMSBanh.Text = DropDownListMSBanh.SelectedValue;

5.13.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý Hàng Tồn:

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm sản phẩm trrong SqlDataSourceHangTon tương ứng

INSERT INTO HangTon(MSCuaHang, MaSoBanh, SLTon)

B3: Thiết kế các textbox, button, label cho phép NSD thêm sản phẩm tồn mới

Không cho phép thực hiện chức năng “Nhập kho” khi người sử dụng chọn “Tất cả” trong danh sách DropDownListCH và DropDownListMSBanh Điều này bởi vì khi thêm mới, hệ thống sẽ hiểu là thêm vào “Cửa hàng và Loại Bánh” đã được chọn trong các danh sách này.

B5: Viết mã lệnh (Codes) cho nút lênh “Nhập kho” protected void btnNhapKho_Click(object sender, EventArgs e)

{ if (btnNhapkho.Text == "Nhập kho")

// Xóa dữ liệu ô textbox nhập số lượng txtSLT.Text = "";

// Hiển thị textbox để nhập số lượng lbSLT.Visible = true; txtSLT.Visible = true; btnHuy.Visible = true; btnNhapkho.Text = "Lưu";

Hàng đã có sẵn trong kho, vì vậy chỉ cho phép cập nhật số lượng Nút "Nhập kho" sẽ bị vô hiệu hóa và hiển thị thông điệp "Hàng đã có sẵn trong kho Vui lòng cập nhật số lượng" Tiêu đề sẽ được cập nhật thành "Lưu thành công".

{ this.Title = "Lưu thất bại";

} lbSLT.Visible = false; txtSLT.Visible = false; btnHuy.Visible = false; btnNhapkho.Text = "Nhập kho";

B6: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ lbSLT.Visible = false; txtSLT.Visible = false; btnHuy.Visible = false; btnNhapkho.Text = "Nhập kho";

5.13.5 Lập trình Codes xử lý RBTV dữ liệu khi xóa Hàng Tồn: FrHangTon.aspx 5.13.5.1 Giới thiệu

Khi xóa HangTon (Table HangTon) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với bảng HangTon

Trích DB liên quan xử lý RBTV dữ liệu khi xóa

5.13.5.2 Thiết kế các GridView phụ ngay trên Form Quản Lý Hàng Tồn:

Các GridView xử lý RBTV dữ liệu khi xóa Khu Vực

SELECT MSCuaHang, TenCuaHang, DiaChi, SDT, SucChua, ConTrong, MSKhuVuc FROM CuaHang WHERE (MSKhuVuc = @MSKhuVuc)

SELECT * FROM [DMBanhNgot] WHERE ([MaLoaiBanh] = @MaLoaiBanh)

SELECT HangTon.MSCuaHang, HangTon.MaSoBanh, HangTon.SLTon,

DMBanhNgot.TenLoaiBanh, CuaHang.TenCuaHang FROM HangTon INNER JOIN DMBanhNgot ON HangTon.MaSoBanh = DMBanhNgot.MaSoBanh INNER JOIN CuaHang ON HangTon.MSCuaHang = CuaHang.MSCuaHang

WHERE (HangTon.MSCuaHang = @MSCuaHang) AND (HangTon.MaSoBanh @MaSoBanh)

UPDATE HangTon SET SLTon = @SLTon WHERE (MSCuaHang = @MSCuaHang) AND (MaSoBanh = @MaSoBanh)

DELETE FROM HangTon WHERE (MaSoBanh = @MaSoBanh) AND (MSCuaHang @MSCuaHang)

Trang quản lý đơn đặt hàng

5.14.1 Phân tích trang Quản lý danh mục Đơn Đặt Hàng

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý Đơn đặt hàng từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa MH … trong Đơn đặt hàng

+ Chuỗi kết nối DB: 1G406NTTHangBanhOnlineConnectionString

5.14.2 Thiết kế (Design) trang quản lý Đơn Đặt Hàng: FrDDH.aspx

Câu lệnh SQL kết nối DataBase:

Câu lệnh SQL kết nối DataBase:

SELECT * FROM [ChiTietDH] WHERE ([MSDDH] = @MSDDH)

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

5.14.3 Lập trình (Codes)trang quản lý danh mục Đơn Đặt Hàng: FrDDH.aspx protected void Page_Load(object sender, EventArgs e)

5.14.4 Lập trình Codes THÊM _ SỬA _ XÓA trang quản lý danh mục DonDatHang:

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B3: Viết lệnh Delete SQL xóa đơn đặt hàng trong SqlDataSourceDDH

DELETE FROM DDH WHERE (MSDDH = @MSDDH)

5.14.4.3 Cập nhật đơn đặt hàng

B4; Viết lệnh Update SQL cập nhật đơn đặt hàng trong SqlDataSourceDDH

UPDATE DDH SET NgayLap = @NgayLap, MSKhachHang = @MSKhachHang, MSNhanVien = @MSNhanVien, MSKhuVuc = @MSKhuVuc, NguoiNhan @NguoiNhan, DiaChiGiao = @DiaChiGiao, SDTNhan = @SDTNhan, ThoiHan @ThoiHan, TinhTrang = @TinhTrang, GhiChu = @GhiChu

Trang quản lý chi tiết đơn đặt hàng

5.15.1 Phân tích trang Quản lý danh mục Chi Tiết Đơn Đặt Hàng

+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý CT Đơn đặt hàng từ trang quản lý chung

+ Chủ yếu: thực hiện các chức năng: Thêm _ Sửa _ Xóa các khu vực liên quan trong Khu vực

5.15.2 Thiết kế (Design) trang quản lý Chi Tiết Đơn Đặt Hàng: FrCTDDH.aspx

Câu lệnh kết nối DB: SELECT * FROM DDH

Các thiết lập thuộc tính :

Câu lệnh kết nối DB: SELECT * FROM DMBanhNgot

Các thiết lập thuộc tính :

Câu lệnh SQL kết nối DataBase:

SELECT SL, MSDDH, MaSoBanh FROM ChiTietDH WHERE (MSDDH @MSDDH) AND (MaSoBanh = @MaSoBanh)

WHERE (HangTon.MSCuaHang = @MSCuaHang) AND (HangTon.MaSoBanh

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)

Bổ sung mục chọn “Tất cả” trong 2 DropDownList và hiển thị MSDDH và MaSoBanh kế bên

B1:Bổ sung Item mới=Dropdownlist[Task…]->Edit Item: Add [.Text = Tất cả, Value = *]

The B2 properties for the dropdown list (DDL) include the setting AppendDataBoundItems = True, which allows the selected items in the DDL to combine (append) the edit items from B1 with the options retrieved from the database.

5.15.3 Lập trình (Codes)trang quản lý danh mục Chi Tiết Đơn Đặt Hàng:

FrCTDDH.aspx protected void Page_Load(object sender, EventArgs e)

} protected void DropDownListDH_SelectedIndexChanged(object sender, EventArgs e)

{ if (DropDownListDH.SelectedValue == "*" && DropDownListBN.SelectedValue == "*") {

SqlDataSourceCTDH.SelectCommand = "SELECT SL, MSDDH, MaSoBanh FROM ChiTietDH"; btnThem.Enabled = false; btnThem.ToolTip = "Vui lòng chọn đơn hàng và loại bánh cụ thể để thêm chi tiết";

} if (DropDownListDH.SelectedValue != "*" && DropDownListBN.SelectedValue == "*") {

SqlDataSourceCTDH.SelectCommand = "SELECT SL, MSDDH, MaSoBanh FROM ChiTietDH WHERE (MSDDH = @MSDDH)"; btnThem.Enabled = false; btnThem.ToolTip = "Vui lòng chọn loại bánh cụ thể để thêm chi tiết";

} if (DropDownListDH.SelectedValue == "*" && DropDownListBN.SelectedValue != "*") {

SqlDataSourceCTDH.SelectCommand = "SELECT SL, MSDDH, MaSoBanh FROM ChiTietDH WHERE (MaSoBanh = @MaSoBanh)"; btnThem.Enabled = false; btnThem.ToolTip = "Vui lòng chọn đơn hàng cụ thể để thêm chi tiết";

} if (DropDownListDH.SelectedValue != "*" && DropDownListBN.SelectedValue != "*") {

GridViewCTDH.DataBind(); if (GridViewCTDH.Rows.Count == 0)

// Đơn hàng chưa có loại bánh đang chọn => cho phép thêm btnThem.Enabled = true; btnThem.ToolTip = "";

Khi đơn hàng đã có loại bánh đang chọn, nút "Thêm" sẽ bị vô hiệu hóa và không cho phép cập nhật số lượng Thông báo hiển thị trên nút cho biết: "Đơn hàng đã có loại bánh đang chọn, vui lòng cập nhật số lượng."

} lbmsddh.Text = DropDownListDH.SelectedValue; lbMaBanh.Text = DropDownListBN.SelectedValue;

5.15.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý danh mục Chi Tiết Đơn Đặt Hàng: FrCTDDH.aspx

B1: Thiết kế nút lệnh [Thêm | Xóa || Sửa || Chọn] trên các dòng của Gridview

B2: Viết lệnh SQL thêm khu vực trrong SqlDataSourceCTDH tương ứng

INSERT INTO ChiTietDH(MSDDH, MaSoBanh, SL) VALUES (@MSDDH,

B3: Thiết kế các textbox cho phép NSD thêm khu vực mới

Không cho phép người sử dụng thêm chi tiết khi chọn "Tất cả" trong DropDownListDH và DropDownListBN Hành động thêm mới được hiểu là thêm vào "Cửa hàng và Loại Bánh" đã được chọn trong hai danh sách này.

B5: Viết mã lệnh (Codes) cho nút lênh “Thêm chi tiết đơn hàng” protected void btnThem_Click(object sender, EventArgs e)

{ if (btnThem.Text == "Thêm chi tiết")

// Xóa thông tin các ô textbox txtSL.Text = "";

// Hiển thị các textbox để nhập thông tin lbSL.Visible = true; txtSL.Visible = true; btnHuy.Visible = true; btnThem.Text = "Lưu chi tiết";

SqlDataSourceCTDH.Insert(); this.Title = "Lưu thành công";

The order already includes the selected type of cake, so the "Add" button is disabled, and a tooltip advises users to update the quantity instead.

{ this.Title = "Lưu thất bại: " + ex.Message;

} lbSL.Visible = false; txtSL.Visible = false; btnHuy.Visible = false; btnThem.Text = "Thêm chi tiết";

B6: Viết mã lệnh (Codes) cho nút lênh “Hủy” protected void btnHuy_Click(object sender, EventArgs e)

{ lbSL.Visible = false; txtSL.Visible = false; btnHuy.Visible = false; btnThem.Text = "Thêm chi tiết";

B2: Viết lệnh SQL Xóa (Delete) ChiTietDonDatHang trong SqlDataSourceKV tương ứng

DELETE FROM ChiTietDH WHERE (MaSoBanh = @MaSoBanh) AND (MSDDH @MSDDH)

Viết lệnh SQL Sửa (Update) ChiTietDonDatHang trong SqlDataSourceCTDH tương ứng

UPDATE ChiTietDH SET SL = @SL WHERE (MSDDH = @MSDDH) AND (MaSoBanh

5.15.5 Lập trình (Codes) xử lý RBTV dữ liệu khi Xóa ChiTietDonDatHang :

Khi xóa ChiTietDH (Table CTDDH) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với bảng CTDDH

5.15.5.2 Xóa CT đơn đặt hàng

B3: Viết lệnh Delete SQL xóa CT đơn đặt hàng trong SqlDataSourceCTDH

DELETE FROM ChiTietDH WHERE (MaSoBanh = @MaSoBanh) AND (MSDDH @MSDDH)

5.14.4.3 Cập nhật đơn đặt hàng

B4; Viết lệnh Update SQL cập nhật đơn đặt hàng trong SqlDataSourceDDH UPDATE ChiTietDH SET SL = @SL

WHERE (MSDDH = @MSDDH) AND (MaSoBanh = @MaSoBanh)

TRIỂN KHAI PHÁT HÀNH WEBAPP 124 6.1 Giới thiệu về Host miễn phí somee

Đăng ký tài khoản somee

BƯỚC 1: Đăng ký tài khoản host somee & Đăng nhập vào host đó

First name: G4 Last name: ntthang

User ID: gfourntthang Pass: 1234@abcd

URL http://G4BanBanhOnline.somee.com http://www.G4BanBanhOnline.somee.com

Email address: ngothithuyhang276gmail.com

Addresses ftp://G4BanBanhOnline.somee.com/www.G4BanBanhOnline.somee.com ftp://198.37.116.29/www.G4BanBanhOnline.somee.com

Thông tin địa chỉ vật lý lưu trữ Web trên Host

Website local path: d:\DZHosts\LocalUser\gfourntthang\www.G4BanBanhOnline.somee.comProtected local path: d:\DZHosts\LocalUser\gfourntthang\Protected.G4BanBanhOnline.somee.comKHÔNG GIAN HOST ĐĂNG KÝ ĐƯỢC:

Hình 6 2: Trang thông tin Host somee đã đăng ký

Restore BD lên host somee

BƯỚC 2: Tạo mới database trùng tên với DataBase của Web; Restore hoặc Attach DB

THÔNG TIN KẾT NỐI DB

MS SQL Server version: MS SQL 2019 Express

MS SQL Server address: 1G406NTTHangBanhOnline.mssql.somee.com

Connection string: workstation id=1G406NTTHangBanhOnline.mssql.somee.com;packet size@96;user id=gfourntthang_SQLLogin_1;pwdjqb1tr8b4;data source=1G406NTTHangBanhOnline.mssql.somee.com;persist security infose;initial catalog=1G406NTTHangBanhOnline

Address: ftp://1G406NTTHangBanhOnline.backup.somee.com/1G406NTTHangBanhOnline_MSSql _Database_Backup

Password: * Use the password from this control panel * 1234@abcd

Hosting plan: MS SQL Plan "Novice"

Data file: Size, Max/Used/Usage: 30MB / 8.00MB / 26.67%

Log file: Size, Max/Used/Usage: 30MB / 8.00MB / 26.67%

Browse for local backup (50MB max): chọn file bak từ PC : 1G406NTTHangBanBanhOnline.bak chọn : Upload and Restore

Upload đăng tải Source WebApp lên host somee để phát hành

BƯỚC 3: Điều chỉnh nội dung Web.Config: TRONG Web.config

BƯỚC 4: Điều chỉnh Web.Config: TRONG Web.config

Connection string: connectionString="workstation id=1G406NTTHangBanhOnline.mssql.somee.com;packet size@96;user id=gfourntthang_SQLLogin_1;pwdjqb1tr8b4;data source=1G406NTTHangBanhOnline.mssql.somee.com;persist security infose;initial catalog=1G406NTTHangBanhOnline"

BƯỚC 5: Upload và đăng tải phát hành WebApp bán bánh ngọtrực tuyến trên somee

1 nén các file trong thư mục Web thành file zip

Trong Host: Manage Product->Websites->http://g4banbanhonline.somee.com ->File Manager

Upload // chọn file zip nêu trên // Upload and unzip

Giới thiệu sản phẩm WebApp quản lý bán bánh ngọt online trên somee

Url: http://G4BanBanhOnline.somee.com http://www.G4BanBanhOnline.somee.com

Trang chủ HomePage: HomePage.aspx

Hình 6 3: Trang chủ Giỏ hàng: Cart.aspx

Chương 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỒ ÁN

Kết luận

7.1.1 Những kết quả đạt được

Vận dụng các cơ sở lý thuyết lập trình Web, thiết kết và lập trình được:

+ Giao dịch mua bán trà sữa trên hệ thống cửa hàng bán bánh ngọt trực tuyến

Master.master: Mẫu trang giao dịch kiêm quản lý của hệ thống cửa hàng bán bánh ngọt trực tuyến

HomePage.aspx: Trang chủ, trưng bày các loại bánh ngọt đang bán tại cửa hàng;

Cart.aspx: Giỏ hàng các sản phẩm bánh ngọt mà khách hàng đang chọn mua Đối tượng

“giỏ hàng” ở trên bộ nhớ trong (RAM) của máy tính = NSD đang chọn mua (chưa mua).

FrOrder.aspx: Đặt mua các loại bánh ngọt đang có trong giỏ hàng NSD điền thông tin đơn hàng và xác nhận đặt hàng.

Managerment.aspx: xủ lý đăng nhập Login và quản lý chung các danh mục của bên mua và bên bán.

Quản lý các danh mục “Chi nhánh”, “Tồn kho”, “Sản phẩm”, “Nhân viên”, “Khu vực”,

“Công việc” với các chức năng Thêm, Xóa, Sửa, RBTV;

ChuyenNhom.aspx: Chuyển các sản phẩm từ loại này sang loại khác

+ Phát hành WebApp lên Host miễm phí: somee.com

Do hạn chế thời gian, một sô chức năng sau chưa thực hiện hoặc thực hiện chưa đầy đủ:+ Chuyển nhóm

+ Trang đặt hàng: chưa thực hiện đầy đủ phần thông tin đơn hàng, chi tiết đơn hàng và lưu trữ vào DB.

Hướng phát triển

7.2.1 Hướng khắc phục các hạn chế

+ Sẽ tiếp tục hoàn thiện trang đặt hàng với chức năng đơn hàng và chi tiết đơn để lưu vào DB.

+ Thực hiện trang chuyển nhóm: cho phép chuyển đồng hồ từ Thương hiệu này sang Thương hiệu khác.

+ Tiếp tục hoàn thiện sản phẩm minh họa (Demo) và báo cáo đề tài.

7.2.2 Hướng mở rộng ĐỒ ÁN HỌC PHẦN

+ Tiếp tục phát triển sản phẩm với các công nghệ mới, như: MVC, SP,

DANH MỤC TÀI LIỆU THAM KHẢO

[1] Võ Xuân Thể (2021), Bài giảng học phần Lập trình Web (4 Tín chỉ), Trường Đại học Tài chính – Marketing (lưu hành nội bộ).

[2] htpp://……… : Trang thông tin điện tử của ……, được sử dụng để tham khảo chuyên môn thực hiện đề tài này.

Ngày đăng: 24/10/2022, 17:14

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w