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

Website bán bánh ngọt ASP NET

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

Nội dung

Cơ sở dữ liệu nâng cao Báo cáo đồ án xây dựng hệ thống website bán bánh ngọt bằng ASP.NET gồm 2 phần: Giao dịch mua bánh ngọt của khách hàng trực tuyến và Mẫu trang giao dịch kiêm quản lý bán bánh ngọt

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 về thiết kế và lập trình WebApp 1 lớp trên nền tảng công nghệASP.NET vào việc phát triển một WebApp đơn giản sử dụng trong thực tiễn là: Hệ thốngWebsites bán bánh ngọt trực tuyến.

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

Căn cứ vào phân tích, thiết kế thành phần CSDL từ mục 3.1 nêu trên, ta có Diagram của CSDL phục vụ cho hoạt động của WebApp Bán Bánh Ngọt Online như Error:

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

Các tables cơ sở dữ liệu được thiết kế thuộc phận hệ và có ảnh hưởng chặt chẽ đến table danh mục sản phẩm và table đơn đặt hàng như sau:

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.

+ Dùng DataList để trưng bày các loại bánh ngọt cho phép khách hàng chọn mua trực tuyến. + Dùng các Label để thông báo câu chào mừng, thông tin 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)

B1: Khai báo đường dẫn thư viện NameSpace using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data;

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.

+ Có button Mua để khách hàng quay lại HomePage.aspx để mua hàng khi giỏ rỗng. + Có bảng GridviewGioHang để chiếu những thông tin sản phẩm mà khách hàng đã chọn bên 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

// Hiển thị thông báo giỏ hàng rỗng lên trang web lbTitle.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; 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() +

"Mặt Hàng, Tổng Tiền = " + cart.Compute("sum(ThanhTien)", "").ToString() + "Đồng"; btnOrder.Visible = true;//Vì có giỏ nên đặt mua được btnOrder.ToolTip = "Bấm vào để đặt hàng, hân hạnh được phục vụ"; btnCancel.Visible = true;

* 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)

* Để thực hiện được trang đặt hàng: FrOrder.aspx thì cần phải “chạy” từ trang chủ (HomePage.aspx: trưng bày hàng hóa), cho phép KH chọn hàng “bỏ vào giỏ” và đã có “giỏ hàng” : Set As Start Page từ 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”: lấy từ Trang “giỏ hàng” sang, để KH xem và kiểm tra các MH đã đặt, tổng tiền, : không Thêm / Xóa /Sửa (việc này thực hiện trên trang “giỏ hàng”).

PHẦN THÔNG TIN KHÁCH 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), được thiết kế như Error: Reference source not found

+ 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

//2.1: Hiển thị nhập Thông tin Kh mới lbNhapKHMoi.Visible = true; lbMSKH.Visible = true; lbTenKH.Visible = true; lbDCKH.Visible = true; lbSdtKH.Visible = true; txtMSKH.Visible = true; txtTenKH.Visible = true; txtDCKH.Visible = true; txtSdtKH.Visible = true;

//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

//4.3.1 hiện thông tin đơn hàng lbTTDH.Visible = true; lbmsdh.Visible = true; lbNgaylap.Visible = true; lbNguoiNhan.Visible = true; lbDiachigiao.Visible = true; lbDTGiao.Visible = true; lbGhichu.Visible = true; lbHangiao.Visible = true; txtGhichu.Visible = true;

CalendarHangiao.Visible = true; txtDCGiao.Visible = true;//Gán DC KH vào đây = mặc định địa chỉ giao hàng là DC khách Hàng txtNguoinhan.Visible = true;//Gán tên KH vào đây = mặc định ngươi nhận là KH txtDTGiao.Visible = true;//Gán sdt KH vào đây = mặc định sdt là KH txtDTGiao.Text = GridViewKH.Rows[0].Cells[4].Text.Trim();

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;

// 2 Ẩn các ô nhập thông tin mới 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 Xóa trông textbox txtTimKH.Text = "";

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

//4.3.1 hiện thông tin đơn hàng lbTTDH.Visible = false; lbmsdh.Visible = false; lbNgaylap.Visible = false; lbNguoiNhan.Visible = false; lbDiachigiao.Visible = false; lbDTGiao.Visible = false; lbGhichu.Visible = false; lbHangiao.Visible = false; txtGhichu.Visible = false;

CalendarHangiao.Visible = false; txtDCGiao.Visible = false;//Gán DC KH vào đây = mặc định địa chỉ giao hàng là DC khách Hàng txtNguoinhan.Visible = false;//Gán tên KH vào đây = mặc định ngươi nhận là KH txtDTGiao.Visible = false;//Gán sdt KH vào đây = mặc định sdt là KH

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:

[1] Ở đây là đăng nhập cho chức năng quản trị của Nhân viên đơn vị kinh doanh: Thêm, xóa, Sửa hàng, Giá, : KHÔNG Đăng ký thành viên (account) mới, mà Account do người quản trị hệ thống (sa= System Administrator) cấp

[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 16

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

QL kho và Tồn kho, QL KH, … Tìm kiếm, thống kê, báo cáo tổng hợp … Kết xuất ra bản in (Report…): =vậy tk trang QL chính (đang nhập nhập thành công vào trang nay, từ đây chọn các chức năng ql để sang các trang ql cụ thể khác)

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

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”)

// Ẩn hoặc hiện cột hình mẫu trong GridView (Ban đầu ẩn -> tránh trang web bị chậm do phải tải quá nhiều hình ảnh) 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 = *]

B2: Properties[Dropdownlist] AppendDataBoundItems = True: các mục chọn trong DDL sẽ bao gồm các mục Edit Items ở B1 ghép (Append) với các mục chọn có trong DB được kết vào DDL này (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;

Ngoài ra, copy codes trên bổ sung vào Page_Load(…) để khi WebPage vừa được tải lên đúng lúc trong Dropdownlist là “Tất cả|” (vì nó là mục đầu tiên) thì GridView bên đưới sẽ liệt kê tả cả các MH: 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

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

.PostBack = True khi chỉ cần 1 lựa chọn (DropDownList || CheckBox) là thực hiện tải lại DB PostBack = False khi chỉ cần Nhiều lựa chọn (DropDownList, CheckBox, ) thì mới tải lại DB

 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

“Tất cả” trong Dropdownlist (mã số bánh *) thì phải Ẩn nút “Thêm mới” (không cho thêm mới trong trường hợp này; cần có ToolTip để nhắc NSD chọn nhóm MH cụ thể trước khi thêm)

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: khóa chính -> ko nên cho tự nhập (hệ thống tự tăng lên theo qui luật nào đó; ko nên tăng dần-> mã càng lớn và ko liên tục do xóa: VD: năm + nhóm + thứ tự trong năm 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:

PA1: Khi nsd bấm nút “Thêm”: thì sẽ thêm 1 dòng trống mới trong Gridview để NSD nhập thông tin MH mới; có 3 phương án: dòng đầu trong Gridview, dòng cuối, tại vị trí đang chọn: thường là dòng cuối Khi nhập: phải chuyển các Field này 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”;

NSD sau khi nhập xong thông tin MH mới, sẽ bấm nút “Lưu” : lưu MH mới vào BD đồng thời ẩn các TextBox và đổi nhãn nhút “Lưu” => “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)

//B1: ẩn hiện các ô textbox để NSD (NV) chuẩn bị thêm thông tin món mới lbMsBanh.Visible = !lbMsBanh.Visible; lblLoaiBanh.Visible = !lblLoaiBanh.Visible; lbTenBanh.Visible = !lbTenBanh.Visible; lbDVT.Visible = !lbDVT.Visible; lbGiaBan.Visible = !lbGiaBan.Visible; lbHinh.Visible = !lbHinh.Visible; txtMaBanh.Visible = !txtMaBanh.Visible; txtTenBanh.Visible = !txtTenBanh.Visible; txtDVT.Visible = !txtDVT.Visible; txtGiaban.Visible = !txtGiaban.Visible; lbThuongHieu.Visible = !lbThuongHieu.Visible;

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

{//Xóa trống các ô textbox để NV cbi nhập thông tin món ăn mới txtMaBanh.Text = ""; txtTenBanh.Text = ""; txtDVT.Text = ""; txtGiaban.Text = ""; txtGiaban.ToolTip = "Nhập giá phải >0"; btnHanSD.Text = "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

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)

//B1: ẩn hiện các ô textbox thêm thông tin món mới lbMsBanh.Visible = false; lblLoaiBanh.Visible = false; lbTenBanh.Visible = false; lbDVT.Visible = false; lbGiaBan.Visible = false; lbHinh.Visible = false; txtMaBanh.Visible = false; txtTenBanh.Visible = 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”: (Table Danh Mục Bánh Ngọt) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 2 bảng: ChiTietDH (Chi tiết đơn đặt hàng) và HANGTON (Hàng tồn), như

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

+ MH cần xóa đang còn Hang tồn: xử lý “Thanh lý” = Xóa Hàng tồn của MH đó: Xóa từng tồn kho OR xóa tất cả tồn kho của MH đó.

+ MH cần xóa đang còn đơn đặt hàng chưa giải quyết (ChiTietDH): xử lý đổi hàng (Xóa ChiTietDH đó và chọn mua MH khác tương đương) HOẶC thuyết phục KH 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 = *]

B2: Properties[Dropdownlist] AppendDataBoundItems = True: các mục chọn trong DDL sẽ bao gồm các mục Edit Items ở B1 ghép (Append) với các mục chọn có trong DB được kết vào DDL này.

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

B4: Không cho phép “Thêm nhân viên” khi NSD chọn “Tất cả” trong DropDownListKV và DropDownListCV ; Vì khi thêm mới, được hiểu là thêm mới vào “khu vực và chuyên môn….” Đã chọn trong DropDownListKV và DropDownListCM

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)

Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng) copy codes trên bổ sung vào Page_Load (…) để khi WebPage vừa được tải lên đúng lúc trong Dropdownlist là “Tất cả|” (vì nó là mục đầu tiên) thì GridView bên đưới sẽ liệt kê 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

B4: Không cho phép “Thêm CuaHang” khi NSD chọn “Tất cả” trong DropDownListKV; Vì khi thêm mới, được hiểu là thêm mới vào “khu vực” Đã chọn trong DropDownListKV B5: Viết mã lệnh (Codes) cho nút lênh “Thêm cửa hàng mới” 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 = *]

B2: Properties[Dropdownlist] AppendDataBoundItems = True: các mục chọn trong DDL sẽ bao gồm các mục Edit Items ở B1 ghép (Append) với các mục chọn có trong DB được kết vào DDL này.

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,

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"; btnNhapkho.Enabled = false; btnNhapkho.ToolTip = "Vui lòng chọn cửa hàng và mã số bánh cụ thể để nhập hàng"; } if (DropDownListCH.SelectedValue == "*" && DropDownListMSBanh.SelectedValue !"*")

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

SqlDataSourceHangTon.SelectCommand = "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.MaSoBanh = @MaSoBanh)"; btnNhapkho.Enabled = false; btnNhapkho.ToolTip = "Vui lòng chọn cửa hàng cụ thể để nhập hàng";

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

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

SqlDataSourceHangTon.SelectCommand = "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)"; btnNhapkho.Enabled = false; btnNhapkho.ToolTip = "Vui lòng chọn mã số bánh cụ thể để nhập hàng";

} 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

B4: Không cho phép “Nhập kho” khi NSD chọn “Tất cả” trong DropDownListCH và DropDownListMSBanh ; Vì khi thêm mới, được hiểu là thêm mới vào “Cửa hàng và Loại Bánh Đã chọn trong DropDownListCH và DropDownListMSBanh

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ó 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"; this.Title = "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 = *]

B2: Properties[Dropdownlist] AppendDataBoundItems = True: các mục chọn trong DDL sẽ bao gồm các mục Edit Items ở B1 ghép (Append) với các mục chọn có trong DB được kết vào DDL này.

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 = "";

// Đơn hàng đã có loại bánh đang chọn => chỉ cho cập nhật số lượng btnThem.Enabled = false; btnThem.ToolTip = "Đơ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, @MaSoBanh,

B3: Thiết kế các textbox cho phép NSD thêm khu vực mới

B4: Không cho phép “Thêm chi tiết” khi NSD chọn “Tất cả” trong DropDownListDH và DropDownListBN ; Vì khi thêm mới, được hiểu là thêm mới vào “Cửa hàng và Loại Bánh Đã chọn trong DropDownListDH và DropDownListBN

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

// Đơn hàng đã có loại bánh đang chọn => chỉ cho cập nhật số lượng btnThem.Enabled = false; btnThem.ToolTip = "Đơn hàng đã có loại bánh đang chọn vui lòng cập nhật số lượng"; } catch (Exception ex)

{ 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ảngCTDDH

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.com Protected local path: d:\DZHosts\LocalUser\gfourntthang\Protected.G4BanBanhOnline.somee.com

KHÔ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: 11/12/2022, 20:50

w