Khóa luận Sử dụng Nhibernate (OQl - Object query language) để hiện thực chương trình quản lý việc mua bán sách cho một cửa hiệu sách

pdf 80 trang yendo 4510
Bạn đang xem 20 trang mẫu của tài liệu "Khóa luận Sử dụng Nhibernate (OQl - Object query language) để hiện thực chương trình quản lý việc mua bán sách cho một cửa hiệu sách", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfkhoa_luan_su_dung_nhibernate_oql_object_query_language_de_hi.pdf

Nội dung text: Khóa luận Sử dụng Nhibernate (OQl - Object query language) để hiện thực chương trình quản lý việc mua bán sách cho một cửa hiệu sách

  1. TRƯỜNG CAO ĐẲNG NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THÔNG TIN GIANG BỘI LINH SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN SÁCH CHO MỘT CỬA HIỆU SÁCH KHOÁ LUẬN TỐT NGHIỆP TPHCM 7 - 2009 Trang 1
  2. TRƯỜNG CAO ĐẲNG NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THÔNG TIN GIANG BỘI LINH - 206205325 SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN SÁCH CHO MỘT CỬA HIỆU SÁCH KHOÁ LUẬN TỐT NGHIỆP GIÁO VIÊN HƯỚNG DẪN: Ths.NGUYỄN DUY THÁI KHOÁ 2006 – 2009 Trang 2
  3. NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Tp.HCM, Ngày Tháng Năm Giáo viên hướng dẫn Trang 3
  4. NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Tp.HCM, Ngày Tháng Năm Giáo viên phản biện Trang 4
  5. MỤC LỤC  LỜI CẢM ƠN 8 ĐỀ CƯƠNG CHI TIẾT 9 LỜI NÓI ĐẦU 13 TÓM TẮT KHÓA LUẬN 14 CHƯƠNG 1TÓM LƯỢC NHIBERNATE 16 1.1-Khái niệm Persistence: 17 1.2-Khái niệm Nhibernate: 17 1.3-Lịch sử phát triển Nhibernate: 18 1.4-Các đặc tính 19 1.5-Kiến trúc Nhibernate: 20 1.6-Các bước xây dựng ứng dụng NHibernate: 21 1.7-Các khái niệm: 24 CHƯƠNG 2PHÂN TÍCH ỨNG DỤNG WEBSITE BÁN SÁCH 42 2.1.Nhận diện tác nhân, mục tiêu của từng tác nhân (actor): 43 2.2.Sơ đồ Use Case: 45 2.3.Mô tả các Use Case: 47 2.3.1.Đăng nhập: 47 2.3.2.Đăng ký: 48 2.3.3.Quản lý chủ đề: 48 2.3.4.Quản lý loại sách: 50 2.3.5.Quản lý nhà xuất bản: 51 2.3.6.Thêm sách: 53 2.3.7.Cập nhật sách: 53 2.3.8.Xem thông tin phiếu nhập: 54 2.3.9.Lập phiếu nhập: 55 2.3.10.Xem thông tin hóa đơn: 56 2.4.Sơ đồ Domain Model: 57 Trang 5
  6. 2.5.Mô tả các lớp trong Domain – Model: 57 2.5.1.Lớp Sach: 57 2.5.2.Lớp NhaXuatBan: 58 2.5.3.Lớp Nguoi_Dung: 58 2.5.4.Lớp Phan_Quyen: 59 2.5.5.Lớp Phieu_Thu: 59 2.5.6.Lớp ChuDe: 59 2.5.7.Lớp LoaiSach: 59 2.5.8.Lớp PhieuNhap: 60 2.5.9.Lớp ChiTietPhieuNhap: 60 2.5.10.Lớp TinhTrang: 60 2.5.11.Lớp QuyDinh: 60 2.5.12.Lớp HoaDon: 60 2.5.13.Lớp ChiTietHoaDon: 61 2.5.14.Lớp KhuyenMai: 61 2.5.15.Lớp DonGia: 61 2.5.16.Lớp Tac_Gia: 62 2.5.17.Lớp Sach_TacGia: 62 CHƯƠNG 3THIẾT KẾ 63 3.1.Sơ đồ cơ sở dữ liệu quan hệ: 64 3.2.Mô tả sơ đồ: 64 3.2.1.Bảng Sach: 64 3.2.2.Bảng Nha_Xuat_Ban: 66 3.2.3.Bảng Phan_Quyen: 66 3.2.4.Bảng Nguoi_Dung: 66 3.2.5.Bảng Loai_Sach: 67 3.2.6.Bảng Chi_Tiet_Phieu_Nhap: 68 3.2.7.Bảng Phieu_Nhap: 68 3.2.8.Bảng Tinh_Trang: 69 Trang 6
  7. 3.2.9.Bảng Qui_Dinh: 69 3.2.10.Bảng Hoa_Don: 69 3.2.11.Bảng Chi_Tiet_Hoa_Don: 70 3.2.12.Bảng Khuyen_Mai: 71 3.2.13.Bảng Don_Gia: 71 3.2.14.Bảng Chu_De: 72 3.2.15.Bảng Phieu_Thu: 72 3.2.16.Bảng Tac_Gia: 73 3.2.17.Bảng Sach_TacGia: 73 3.3.Giao diện một số màn hình: 74 CHƯƠNG 4CÀI ĐẶT, ĐÁNH GIÁ KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 76 4.1.Môi trường cài đặt: 77 4.2.Đánh giá kết quả: 77 4.2.1.Kết quả đạt được: 77 4.2.2.Việc chưa làm được: 78 4.3.Hướng phát triển: 78 DANH MỤC TÀI LIỆU THAM KHẢO 79 Trang 7
  8. LỜI CẢM ƠN Em xin chân thành cảm ơn Khoa Công Nghệ Thông Tin Trường Cao Đẳng Nguyễn Tất Thành, đã tạo điều kiện tốt cho chúng thực hiện tốt đề tài tốt nghiệp này. Em xin chân thành cảm ơn thầy Nguyễn Duy Thái đã tận tình hướng dẫn, chỉ bảo em trong suốt thời gian thực hiện đề tài. Mong thầy nhận ở em lời cảm ơn sâu sắc. Chúng em xin chân thành cảm ơn quý thầy cô trong khoa đã tận tình giảng dạy, trang bị cho chúng em những kiến thức quý báu trong những năm học vừa qua. Chúng tôi xin chân thành cảm ơn các bạn bè, người đồng hành tốt đã chân thành đóng góp ý kiến để chúng tôi hoàn chỉnh khóa luận này. Chúng con xin gởi lời cảm ơn sâu sắc đến ba mẹ, ông bà đã sinh thành, nuôi dưỡng, giáo dục chúng con thành người. Chúng con nghĩ hàng triệu lời cảm ơn cũng không bù đắp được công lao ấy. Chúng con hứa sẽ cố gắng hết sức để luôn là niềm tự hào của ba mẹ. Mặc dù chúng em đã cố gắng hoàn thành khóa luận trong phạm vi và khả năng cho phép nhưng chắc chắn sẽ không tránh khỏi những thiếu xót, kính mong sự cảm thông và tận tình chỉ bảo của quý thầy cô và các bạn. Tp.HCM, ngày 25 tháng 07 năm 2009 Sinh viên thực hiện Giang Bội Linh Trang 8
  9. ĐỀ CƯƠNG CHI TIẾT Tên đề tài: SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN SÁCH CHO MỘT CỬA HIỆU SÁCH (ỨNG DỤNG WEB) Giáo viên hướng dẫn: Thầy Nguyễn Duy Thái Thời gian thực hiện: từ 09/03/2008 đến cuối 21/06/2008 Sinh viên thực hiện: Giang Bội Linh MSSV : 206205325 Loại đề tài: Ứng dụng Web Nội Dung Đề Tài: SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN SÁCH CHO MỘT CỬA HIỆU SÁCH (ỨNG DỤNG WEB) Phương pháp thực hiện:  Hệ thống lại kiến thức về ngôn ngữ lập trình C#, ASP.NET, SQL Server 2005 và phương pháp lập trình hướng đối tượng theo kiến trúc 3 tầng.  Tìm hiểu ngôn ngữ truy vấn NHIBERNATE.  Khảo sát hiện trạng, xác định các yêu cầu của đề tài: . Yêu cầu chức năng . Yêu cầu phi chức năng  Phân tích các yêu cầu  Thiết kế chương trình  Hiện thực chương trình  Chạy thử ( demo )  Viết báo cáo Yêu cầu:  Nắm vững ngôn ngữ lập trình C#,ASP.NET và cơ sở dữ liệu SQL Server 2005 Trang 9
  10.  Hiểu phương pháp lập trình hướng đối tượng theo kiến trúc 3 tầng.  Hiểu được cách thức truy vấn trên nền NHIBERNATE. Kết quả đạt được:  Viết báo cáo  Trình bày kết quả đạt được  Trình bày chương trình thực tế. Kế hoạch thực hiện: Tuần Nội Dung Sinh Viên Thực Hiện 1 (23/3 – 28/3) 1. Nhận mô tả đề tài. GIANG BỘI 2. Tìm hiểu các trang web bán sách. LINH 3. Tìm hiểu NHIBERNATE. 4. Xây dựng đề cương chi tiết. 2 (29/3 – 4/4) 1. Điều chỉnh lại kết quả tuần 1. GIANG BỘI 2. Xác định các actor, mục tiêu của LINH từng actor. 3. Xác định các use case trong hệ thống. 4. Vẽ sơ đồ use case. 5. Mô tả cho các use case quan trọng. 6. Xây dựng sườn khóa luận. 3 (5/4 – 11/4) 1. Điều chỉnh lại kết quả tuần 2. GIANG BỘI 2. Tìm hiểu Domain model. LINH 3. Xây dựng domain model(sơ đồ lớp quan niệm). 4. Bắt đầu viết quyển báo cáo. 4 (12/4– 18/4) 1. Điều chỉnh lại kết quả tuần 3. GIANG BỘI Trang 10
  11. 2. Điều chỉnh lại Domain Model và LINH use case. 3. Viết quyển báo cáo 5 (19/4– 25/4) 1. Điều chỉnh lại kết quả tuần 4. GIANG BỘI 2. Thiết kế cơ sở dữ liệu. LINH 3. Viết quyển báo cáo. 6 (26/4– 2/5) 1. Điều chỉnh lại kết quả tuần 5. GIANG BỘI LINH 2. Thiết kế giao diện. 3. Viết quyển báo cáo. 7 (3/5–9/5) 1. Điều chỉnh lại kết quả tuần 6. GIANG BỘI LINH 1. Hoàn chỉnh các thiết kế. 2. Bổ sung vào quyển báo cáo. 8(10/5 – 16/5) 1. Cài đặt cơ sở dữ liệu. GIANG BỘI LINH 2. Lập trình. 9 (17/5 – 23/5) 1. Điều chỉnh lại kết quả tuần 8. GIANG BỘI LINH 2. Lập trình. 3. Bổ sung kết quả vào quyển báo cáo. 10(24/5– 30/5) 1. Điều chỉnh lại kết quả tuần 9. GIANG BỘI 2. Lập trình. LINH 3. Bổ sung kết quả vào quyển báo cáo 11(31/5-6/6) 1. Điều chỉnh lại kết quả tuần 10. GIANG BỘI 2. Lập trình. LINH 3. Bổ sung kết quả vào quyển báo cáo 12(7/6-13/6) 1. Điều chỉnh kết quả tuần 11. GIANG BỘI 2. Lập trình. LINH 3. Bổ sung vào quyển báo cáo. Trang 11
  12. 13(14/6 – 1. Điều chỉnh lại kết quả tuần 12. GIANG BỘI 20/6) 2. Lập trình. LINH 3. Bổ sung kết quả vào quyển báo cáo. 14(21/6- 27/6) 1. Cài đặt thử nghiệm, chỉnh sửa GIANG BỘI LINH 15(28/6- 4/7) 1. Nộp báo cáo cho Khoa. GIANG BỘI 2. Báo cáo PowerPoint LINH 3. Chuẩn bị bảo vệ. Xác nhận của GVHD Ngày tháng năm SV Thực hiện GIANG BỘI LINH  Trang 12
  13. LỜI NÓI ĐẦU Trên thị trường kinh tế cạnh tranh, quảng cáo, thời gian và hiệu quả kinh doanh là các vấn đề mà doanh nghiệp cần quan tâm.Việc ứng dụng thương mại điện tử để xậy dựng website bán sách là hình thức khá phổ biến hiện nay.Làm sao để quảng cáo sản phẩm một cách bắt mắt, rộng rãi mà không cần mất nhiều chi phí ? Làm sao để khách hàng có thể tham gia mua sản phẩm ở bất cứ nơi nào mà không cần phải đến trực tiếp cửa hàng ? Làm sao để doanh nghiệp có thể đáp ứng các yêu cầu đặt hàng của khách hàng một cách nhanh chóng và chính xác đó là các mục tiêu của ứng dụng : WEBSITE QUẢN LÝ CỬA HÀNG BÁN SÁCH.Bên cạnh đó, trang web còn trợ một số chức năng sau:  Quản lý nhà xuất bản.  Quản lý loại sách.  Quản lý chủ đề sách.  Quản lý sách.  Quản lý phiếu nhập, chi tiết phiếu nhập.  Quản lý người dùng.  Quản lý hóa đơn, chi tiết hóa đơn.  Quản lý thông tin khuyến mãi (tiền mặt).  Thống kê. Trang 13
  14. TÓM TẮT KHÓA LUẬN I-HƯỚNG GIẢI QUYẾT -Xây dựng ứng dụng theo kiến trúc 3 tầng. -Khảo sát các website bán sách. -Xây dựng sơ đồ Use Case và đặc tả Use Case -Xây dựng Domain Model. -Cài đặt cơ sở dữ liệu và ứng dụng. II- YÊU CẦU CHỨC NĂNG VÀ PHI CHỨC NĂNG 1.Yêu cầu chức năng:  Đăng nhập.  Tìm kiếm sách: chi tiết,đơn giản.  Đặt mua hàng.  Thay đổi thông tin cá nhân, mật khẩu.  Đăng ký tài khoản.  Xem lịch sử mua hàng.  Quản lý nhà xuất bản.  Quản lý loại sách.  Quản lý chủ đề sách.  Quản lý sách.  Quản lý phiếu nhập, chi tiết phiếu nhập.  Quản lý người dùng.  Quản lý hóa đơn, chi tiết hóa đơn.  Thống kê. Trang 14
  15. 2.Yêu cầu phi chức năng: Chương trình phải đảm bảo đáp ứng các yêu cầu: lưu trữ và khai thác dữ liệu. Thông tin được cung cấp chính xác. Giao diện hài hòa. Trang 15
  16. CHƯƠNG 1 TÓM LƯỢC NHIBERNATE Nội dung: 1.1.Khái niệm Persistence 1.2.Khái niệm NHibernate 1.3.Lịch sử phát triển NHibernate 1.4.Các đặc tính 1.5.Kiến trúc NHibernate 1.6.Các bước xây dựng ứng dụng NHibernate 1.7.Các khái niệm Trang 16
  17. 1.1-Khái niệm Persistence: Persistence là nói đến khả năng một đối tượng duy trì sự tồn tại sau thời gian sống của chương trình tạo ra nó. Nếu không có khả năng này, dữ liệu chỉ tồn tại trong bộ nhớ và sẽ mất đi khi bộ nhớ tắt hoặc máy tính shutdown. Có một vài loại persistence, ví dụ: khi bạn hiệu chỉnh một file source thì file đó sẽ được persist xuống đĩa để lần sau rút trích và sử dụng. Các file được lưu trên đĩa là hình thức phổ biến nhất của persistence. Trong ứng dụng, ví dụ như shopping cart thì persist dữ liệu trong một CSDL quan hệ. CSDL quan hệ là một sự chọn lựa phổ biến để lưu dữ liệu vì dữ liệu dễ dàng được tạo và truy cập bằng SQL. Mô hình được sử dụng bởi CSDL quan hệ được gọi là mô hình quan hệ, biểu diễn dữ liệu dưới dạng bảng hai chiều. Các table có thể liên quan nhau thông qua việc sử dụng khóa chính và khóa ngoại. Khóa chính đảm bảo không có hai record trong bảng có cùng giá trị. Khóa ngoại tham chiếu đến khóa chính được lưu trong một bảng khác. CSDL quan hệ được thiết kế để quản lý dữ liệu theo mô hình quan hệ. Tuy nhiên khi làm việc với các ứng dụng hướng đối tượng, bạn có thể gặp một số vấn đề khi bạn cố gắng persist các đối tượng vào trong mô hình quan hệ. Với sự khác biệt của hai mô hình, làm thế nào để chúng làm việc được với nhau. Để giải quyết vấn đề này object/relational mapping (ORM) ra đời. 1.2-Khái niệm Nhibernate: Nhibernate là một giải pháp Object-relational mapping (ORM) cho nền .NET, được hiểu như là kỹ thuật ánh xạ từ mô hình đối tượng với các table trong cơ sở dữ liệu quan hệ. Trong đó các đối tượng ánh xạ với các bảng và quan hệ trong database sẽ được ánh xạ với sự ràng buộc liên quan trong đối tượng và làm giảm công việc lập trình của người lập trình viên, cho phép người lập trình thao tác với database một cách hoàn toàn tự nhiên thông qua các đối tượng. Trang 17
  18. Chức năng chính của Nhibernate là ánh xạ những lớp đối tượng xuống cơ sở dữ liệu quan hệ. Ngoài ra Nhibernate còn cho phép người sử dụng có thể thực hiện những câu truy vấn xuống cơ sở dữ liệu thông qua các đối tượng. Hình 1 - Ứng dụng .NET với ADO.NET Hình 2 - Ứng dụng .NET với NHibernate 1.3-Lịch sử phát triển Nhibernate: Nhibernate là biến thể từ Hibernate bên Java, được bắt đầu bởi Tom Barrett và hiện nay là một thư viện mã nguồn mở. Phiên bản 1.0 gồm các tính năng của Hibernate 2.1 và một số tính năng của Hibernate 3.0. Nhibernate 1.2.1 phát hành vào tháng 11-2007, được giới thiệu với nhiều tính năng của Hibernate 3.0 hỗ trợ cho .NET 2.0. Nhibernate 2.0 được phát hành vào 8-2008. Nó tương đương với các tính năng của phiên bản Hibernate 3.2. Với phiên bản này, Nhibernate không hỗ trợ cho .NET 1.1 Trang 18
  19. Nhibernate 2.1 hiện đang được phát triển và sẽ được phát hành vào giữa năm 2009. Nhibernate 3.0 sẽ là phiên bản đầu tiên hỗ trợ .NET 3.5. 1.4-Các đặc tính Hỗ trợ trên nhiều hệ quản trị cơ sở dữ liệu khác nhau. Ánh xạ các đối tượng quan hệ xuống cơ sở dữ liệu : Sử dụng file xml để mô tả cách thức mapping trực tiếp từ đối tượng tương ứng với các bảng trong cơ sở dữ liệu. Hỗ trợ tốt các kiểu quan hệ như one-to-many, many-to-many giữa các đối tượng, quản lý các mối kết hợp, kế thừa giữa các đối tượng. Ngoài ra, Nhibernate còn hỗ trợ các kiểu dữ liệu người dùng, truy xuất dữ liệu theo nhóm(Collection), danh sách(List) . Hỗ trợ ngôn ngữ truy vấn đối tượng (HQL - Hibernate Query Language) cho phép người dùng thực hiện các câu truy vấn tương tự SQL.Ngoài ra, Nhibernate còn hỗ trợ Criteria API thực hiện truy vấn theo cách của người lập trình hướng đối tượng. Trang 19
  20. 1.5-Kiến trúc Nhibernate: Hình 3 – Sơ đồ kiến trúc Nhibernate. ISession Đây là giao diện chính được sử dụng trong hầu hết các ứng dụng Nhibernate, nó hỗ trợ các phương thức như thêm, xóa, cập nhật và tìm kiếm các đối tượng. ISessionFactory Cung cấp các thể hiện Isession trong ứng dụng. Configuration Được dùng để cấu hình Nhibernate, các ứng dụng sử dụng đối tượng Configuration để chỉ rõ vị trí của các tài liệu ánh xạ. ITransaction Trang 20
  21. Có tác dụng nhóm nhiều thao tác vào trong một đơn vị làm việc. Nếu bất kỳ thao tác nào thất bại thì tất cả các thao tác trước đều bị roll back và đơn vị làm việc đó sẽ dừng lại. IQuery và ICriteria Hỗ trợ đa dạng hình thức truy vấn dữ liệu khác nhau. Các câu truy vấn được viết bằng HQL hoặc SQL. Ngoài ra, chúng còn cho phép xây dựng các câu truy vấn động, điều khiển tham số đầu vào, giới hạn số lượng kết quả trả về. 1.6-Các bước xây dựng ứng dụng NHibernate: Tạo bảng trong cơ sở dữ liệu. Tạo các lớp đối tượng cần persist. Tạo file ánh xạ có đuôi là hbm.xml cung cấp các thông tin để NHibernate persist các thuộc tính trong đối tượng với các trường trong bảng dữ liệu tương ứng, đồng thời chọn thuộc tính Build Action của file là EmBedded Resource. Tạo file cấu hình có đuôi là config để Nhibernate kết nối với database. Xây dựng các câu truy vấn và sử dụng các phương thức Nhibernate hỗ trợ để truy vấn trên các đối tượng. Bước 1 : Tạo bảng Bước 2: Tạo đối tượng .net namespace DTO { public class ChuDe { Trang 21
  22. private string _machude; private string _tenchude; private bool _xoa; public string Id { get { return _machude; } set { _machude = value; } } public string TenChuDe { get { return _tenchude; } set { _tenchude = value; } } public bool Xoa { get { return _xoa; } set { _xoa = value; } } } } Bước 3: Tạo file ánh xạ Bước 4: Tạo file cấu hình database NHibernate.Dialect.MsSql2005Dialect Trang 22
  23. NHibernate.Connection.DriverConnectionProvider NHibernate.Driver.SqlClientDriver Data Source=GIANGBOILINH\SQLEXPRESS;Initial Catalog=BookDB;Integrated Security=True ReadCommitted BookDB.dbo Bước 5 : Truy vấn với Nhibernate Using namepace Nhibernate using NHibernate; using NHibernate.Cfg; Tạo đối tượng Configuration Configuration cfg= newConfiguration(); cfg. AddAssembly ("NHibernate.Examples");  Đối tượng Configuration sẽ tìm kiếm các file .hbm.xml trong assembly. Tạo đối tượng session Cho phép persist các đối tượng, truy vấn các đối tượng persistent. ITransaction quản lý các Transaction trong Nhibernate Sử dụng SessionFactory để tạo thể hiện của Session: ISessionFactory factory = fg.BuildSessionFactory(); ISession session = factory.OpenSession(); ITransaction transaction = session.BeginTransaction(); Thêm đối tượng ChuDe vào database ChuDe chude = new ChuDe(); Trang 23
  24. chude.Id = "1"; chude.TenChuDe = “abc"; session.Save(chude); transaction.Commit(); session.Close(); Select đối tượng ChuDe khi biết ID session = factory.OpenSession(); ChuDe chude = (ChuDe) session.Load(typeof(ChuDe),"1"); Cập nhật ChuDe chude.TenChuDe = “def"; session.Flush(); 1.7-Các khái niệm: File định nghĩa ánh xạ Các định nghĩa ánh xạ được gọi là mapping document, được sử dụng để cung cấp cho Nhibernate các thông tin để lưu trữ các đối tượng đến CSDL quan hệ. Các file ánh xạ cung cấp các đặc tính như tạo lược đồ CSDL từ tập hợp các file ánh xạ. Các định nghĩa ánh xạ cho các đối tượng persistent có thể được lưu chung trong cùng một file hoặc mỗi đối tựơng lưu riêng một file và được đặt trong cùng thư mục với các lớp đối tượng,đồng thời cho thuộc tính Build Action là Embedded Resource. Qui ước đặt tên cho các file ánh xạ là sử dụng tên của persistent class với phần mở rộng hbm.xml Ví dụ: File ánh xạ cho lớp Event có tên là Event.hbm.xml. Trang 24
  25. File ánh xạ được bắt đầu bằng thẻ hibernate-mapping. Thuộc tính set khai báo tên của các lớp persistent như: Speaker và Attendee. Thẻ class định nghĩa ánh xạ cho lớp persistent xác định. Thuộc tính table là tên của quan hệ (relational) được sử dụng để lưu các đối tượng. Element mô tả khóa chính của persistent class - tự động được phát sinh. Thuộc tính name định nghĩa các thuộc tính của persistent class . Element được sử dụng để xác định tên của lớp phát sinh khóa chính cho record mới khi lưu nó. Ở đây chúng ta sử dụng lớp native. Sau đây là danh sách các generator phổ biến được sử dụng trong Nhibernate: Trang 25
  26. increment - phát sinh id (loại long, short hoặc int) là duy nhất chỉ khi không có tiến trình khác chèn dữ liệu vào cùng bảng. identity - nó hỗ trợ cột id trong DB2, MySQL, MS SQL Server, Sybase và HypersonicSQL. Id được trả về có loại long, short hoặc int. sequence - phát sinh sequence sử dụng một sequence trong DB2, PostgreSQL, Oracle, SAP DB, McKoi hoặc Interbase. Id được trả về có loại long, short hoặc int. hilo - Bộ phát sinh hilo sử dụng thuật toán hilo để phát sinh id. native - Nó sẽ chọn id, sequence hoặc hilo phụ thuộc vào khả năng CSDL phía dưới. Thuộc tính unsaved-value mô tả giá trị của thuộc tính id cho các thể hiện transient của lớp đó. Thẻ property Mỗi thẻ property này tương ứng với một thuộc tính trong đối tượng Event. Thuộc tính name là tên thuộc tính. Thuộc tính type xác định kiểu dữ liệu của thuộc tính. Column là tên cột tương ứng trong database. Thẻ many-to-one: Định nghĩa mối quan hệ với lớp Location. Mối quan hệ nhiều - một sử dụng khóa ngoại để duy trì mối quan hệ giữa hai lớp persistent. Chúng ta sẽ biểu diễn file ánh xạ của lớp Location như sau: Trang 26
  27. Đối với Event, element many-to-one định nghĩa tham chiếu giữa các đối tượng persistent. Ánh xạ mối quan hệ many-to-one như sau: Thuộc tính name cung cấp tên của thuộc tính trong đối tượng và thuộc tính column xác định column được sử dụng để lưu khóa ngoại đến bảng location. Thuộc tính class cung cấp tên của lớp persistent cần quan hệ. Một câu hỏi phổ biến được đặt ra là: làm thế nào để tạo mối quan hệ many-to-one lazy - nghĩa là đối tượng được kết hợp với nó sẽ không được rút trích khi đối tượng cha được rút trích. Các giải quyết là sử dụng proxied objects. Proxy: Object proxy là cách tránh rút trích một đối tượng cho đến khi cần đến nó. Định nghĩa nó bằng 2 cách: 1. Thêm thuộc tính proxy vào thẻ class: Trang 27
  28. 2.Sử dụng thuộc tính lazy = "true" là cách ngắn nhất để định nghĩa lớp persistent như proxy: Cách sử dụng thể hiện proxied Location: Session session = factory.openSession(); Event ev = (Event) session.load(Event.class, myEventId); Location loc = ev.getLocation(); String name = loc.getName(); session.close(); Trả về thể hiện của Location là proxy. Nhibernate lấy thể hiện Location khi getName() được gọi. Collections: File ánh xạ định nghĩa các collection của Speakers và Attendees. Định nghĩa này khai báo rằng lớp Event có một thuộc tính tên là speakers và nó là một Set chứa các thể hiện của lớp Speaker. Lớp Event có thuộc tính tương ứng như sau: Trang 28
  29. public class Event { private Set speakers; public void setSpeakers(Set speakers) { This.speakers = speakers; } public Set getSpeakers() { return this.speakers; } } Element key định nghĩa khóa ngoại từ bảng collection đến bảng cha. Trong trường hợp này, bảng speakers có một column event_id tham chiếu đến column id trong bảng events. Element one-to-many định nghĩa mối quan hệ với lớp Speaker. Cascade: Các thao tác lan truyền theo tầng trên một bảng (như delete) đến các bảng kết hợp. Giả sử, khi delete Event, bạn cũng muốn delete các thể hiện Speaker kết hợp với Event. Thay vì code trong ứng dụng sẽ thực hiện, Nhibernate có thể quản lý nó thay cho bạn. Các loại cascade: all, save-update, delete, delete-orphan. Element cascade được thêm vào many-to-one hoặc element collection. Ví dụ cấu hình sau sẽ hướng dẫn Hibernate delete các Speaker con khi Event cha bị delete: Trang 29
  30. Duyệt các đối tượng kết hợp: Bạn có thể rút trích các đối tượng kết hợp sử dụng outer join hoặc bằng câu lệnh SELECT. Thuộc tính fetch cho phép bạn xác định các phương thức để sử dụng: Khi thể hiện Event được load thì đối tượng Location kết hợp cũng sẽ được load bằng outer join. Nếu muốn sử dụng câu lệnh select thì sẽ cài đặt như sau: Association: Giả sử trong ứng dụng của bạn, mỗi Event được tổ chức ở chỉ một Location. Cách mà biểu diễn điều này trong .net là đối tượng Event có một trường Location. Khi bạn rút trích Event, bạn muốn cả Location nữa. Vì thế bạn phải liên kết Event và Location với nhau sử dụng quan hệ many-to-one. Định nghĩa các lớp Event và Location như sau: public class Event { private Long id; private int duration; private String name; private DateTime startDate; private Location location; Trang 30
  31. public Event() { } public Event(String name) { this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public DateTime getStartDate() { return startDate; } public void setStartDate(DateTime startDate) { this.startDate = startDate; } public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; } public Location getLocation() { return location; } public void setLocation(Location location) { this.location = location; Trang 31
  32. } } public class Location { private Long id; private String name; private String address; public Location() { } public Location(String name) { this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } Ghi chú là lớp Event có một trường location để liên kết nó với đối tượng Location. Trang 32
  33. Mỗi lớp này sẽ cần một file ánh xạ tương ứng, trong trường hợp này là Event.hbm.xml và Location.hbm.xml để định nghĩa các trường persistent và mối quan hệ giữa hai file này. Đặt các file này cùng thư mục với Event.cs và Location.cs. Sau đây là hai file ánh xạ này: Location.hbm.xml Event.hbm.xml Trang 33
  34. Component: Component không phải là một thực thể, nó giống như một đối tượng được chứa trong một đối tượng cha khác,không có id và chỉ tồn tại khi thực thể cha tồn tại.Component cho phép bạn nhóm một vài cột vào trong một đối tượng. Ví dụ: Chúng ta có một trường address trong Location. Do thiết kế không tốt nên chúng ta sẽ chia nhỏ địa chỉ thành 4 cột: street, city, state và zip code. Và khi đó đối tượng Location sẽ như thế này: public class Location{ private Long id; private String name; private String streetAddress; private String city; private String state; private String zipCode; // getters and setter omitted } Cách thiết kế này không được tốt cho lắm, chúng ta sẽ rút trích một vài trường cho vào một đối tượng Address và để Nhibernate điều khiển nó như một component: public class Location{ Trang 34
  35. private Long id; private String name; private Address address = new Address(); // Other getter/setters omitted public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } } Và điều cuối cùng cần làm là ánh xạ một số cột từ bảng location cho đối tượng Address: Trang 35
  36. Bây giờ bạn có thể chèn dữ liệu vào đối tượng Location như sau: Location location = new Location(); location.setName("Hilton Convention Center"); location.getAddress().setStreetAddress("950 North Stafford St."); location.getAddress().setCity("Arlington"); location.getAddress().setState("VA"); location.getAddress().setZipCode("22204"); Quan hệ 1 - nhiều: Quan hệ này tạo liên kết giữa một thể hiện của lớp cha với nhiều thể hiện của lớp con. Ví dụ: Chúng ta sẽ định nghĩa một set attendees tương tự one-to-many - nghĩa là một thể hiện Event sẽ kết hợp với nhiều thể hiện Attendee. Trang 36
  37. Lớp Event tương ứng như sau: public class Event { private Set speakers; private Set attendees; public void setSpeakers(Set speakers) { this.speakers = speakers; } public Set getSpeakers() { return this.speakers; } public void setAttendees(Set attendees) { this.attendees = attendees; } public Set getAttendees () { return this.attendees; } } => element với thuộc tính column - tên của cột lưu khóa ngoại của lớp đang chứa. Trang 37
  38. Quan hệ nhiều-nhiều: Quan hệ nhiều-nhiều yêu cầu một bảng collection lưu tập hợp các đối tượng tham chiếu. Giả sử Attendees có thể tham dự nhiều hơn một Event. Ánh xạ many-to- many cho tập hợp các Attendees như sau: Lazy collection: Lazy collection sẽ được rút trích theo yêu cầu. Theo yêu cầu nghĩa là tập hợp các thực thể hoặc các giá trị được rút trích chỉ khi ứng dụng truy cập collection. Tại sao có lazy collection: Một collection các đối tượng có thể chứa hàng trăm hoặc hàng ngàn các đối tượng và ứng dụng có thể không cần truy cập collection ngay lập tức hoặc tất cả. Load hàng trăm đối tượng không có lý do sẽ làm giảm tốc độ của ứng dụng. Tốt hơn nên rút trích các persistent collection chỉ khi nó cần dùng. Rút trích lazy collection (cụ thể là attendees) như sau: Session session = factory.openSession(); Event event = session.get(Event.class, eventId); Set attendees = event.getAttendees(); session.close(); Persistent collection được lazy mặc định bởi Hibernate 3. Để làm cho collection không lazy, bạn phải khai báo rõ ràng như sau: lazy="false" trong mapping file: Trang 38
  39. Ánh xạ quan hệ hai chiều: Lớp Event cho phép bạn định vị từ thể hiện Event cha đến thể hiện Attendee con. Tuy nhiên giả sử bạn muốn tại mối quan hệ hai chiều, cho phép một Attendee định vị đến Event cha của nó. Để thực hiện được điều này, đầu tiên bạn phải xác định thuộc tính Event trong lớp Attendee và cung cấp định nghĩa many-to-one trong file ánh xạ Attendee. Kế tiếp định nghĩa inverse trong Event - thiết lập thuộc tính inverse="true" để thông báo cho Nhibernate runtime mối quan hệ hai chiều này. Các bước được thực hiện như sau: public class Attendee { private Event event; public void setEvent(Event event) { this.event = event; } public Event getEvent() { return this.event; } } File ánh xạ của Attendee: Trang 39
  40. Thêm thuộc tính inverse="true" trong file ánh xạ của Event như sau: Show SQL: Khi debug, bạn cần xem SQL được phát sinh. Thiết lập thuộc tính show_sql là true để phát sinh ra SQL trên console. Thiết lập thuộc tính trong file config true Joins: Có 4 loại: left join: lấy tất cả các thể hiện bên trái của mệnh đề join. right join: tất cả các thể hiện bên phải của mệnh đề join. full join: trả về các đối tượng hai bên của mệnh đề join Trang 40
  41. inner join fetch: rút trích các đối tượng có quan hệ hoặc collection các đối tượng của outer-join hoặc thuộc tính lazy trong mối quan hệ. Ví dụ: from Event e inner join fetch e.speakers => trả về các đối tượng của Event với collection các speaker. Các hàm: avg(expression) - tính giá trị trung bình của biểu thức. count(expression) - đếm số dòng được trả về bởi biểu thức. max(expression) - trả về giá trị lớn nhất trong biểu thức. min(expression) - trả về giá trị nhỏ nhất trong biểu thức. sum(expression) - trả về tổng các giá trị trong biểu thức. Trang 41
  42. CHƯƠNG 2 PHÂN TÍCH ỨNG DỤNG WEBSITE BÁN SÁCH Nội dung: 2.1.Nhận diện tác nhân, mục tiêu của từng tác nhân (actor) 2.2.Sơ đồ Use Case 2.3.Mô tả các Use Case 2.4.Sơ đồDomain Model 2.5.Mô tả các lớp trong Domain – Model Trang 42
  43. 2.1.Nhận diện tác nhân, mục tiêu của từng tác nhân (actor): Nhân viên quản lý sách: Quản lý nhà xuất bản Cho phép thêm,cập nhật, xóa thông tin một nhà xuất bản. Quản lý loại sách Cho phép thêm,cập nhật, xóa thông tin một loại sách. Quản lý chủ đề sách Cho phép thêm,cập nhật, xóa thông tin một chủ đề sách. Quản lý sách Cho phép thêm, cập nhật, xóa thông tin một đầu sách. Quản lý phiếu nhập, chi tiết phiếu nhập Cho phép thêm một phiếu nhập, chi tiết phiếu nhập . Thống kê sản phẩm. Nhân viên quản lý đơn đặt hàng: Xem thông tin khách hàng Quản lý hóa đơn, chi tiết hóa đơn Cho phép cập nhật thông tin hóa đơn, chi tiết hóa đơn chưa thanh toán. Thống kê. Lập phiếu thu. Admin: có tất cả chức năng của nhân viên Quản lý người dùng Cho phép thêm,cập nhật thông tin người dùng. Quản lý thông tin khuyến mãi (tiền mặt) Cho phép thêm, cập nhật, xóa khuyến mãi. Cập nhật các qui định Trang 43
  44. Khách hàng : Đăng ký. Đăng nhập. Đặt mua hang. Xem sách theo danh mục. Xem lịch sử mua hang. Thay đổi thông tin cá nhân, mật khẩu. Tìm kiếm sách: đơn giản, chi tiết. Cập nhật đơn hang. Trang 44
  45. 2.2.Sơ đồ Use Case: DangXuat KhachHang NguoiDung DangNhap NhanVien Hình 4 – Sơ đồ Use Case người dùng Xem chi tiet sach Xem lich su mua hang Dang ky Cap nhat thong tin ca nhan Dat mua hang KhachHang Cap nhat don hang da dat Doi mat khau Tim kiem don gian Xem sach theo danh muc Tim kiem chi tiet Hình 5 – Sơ đồ Use Case khách hàng. Trang 45
  46. Quan ly chu de sach Quan ly phieu nhap Quan ly loai sach Nhan vien quan ly sach Quan ly nha xuat ban Thong Ke Quan ly sach Hình 6 – Sơ đồ Use Case nhân viên quản lý sách. Xem thong tin khach hang Quan ly hoa don Thong ke Lap phieu thu Nhan vien quan ly don dat hang Hình 7 – Sơ đồ Use Case nhân viên quản lý đơn đặt hàng. Trang 46
  47. Quan ly nguoi dung Cap nhat cac qui dinh admin Quan ly khuyen mai NhanVien Hình 8 – Sơ đồ Use Case admin. 2.3.Mô tả các Use Case: 2.3.1.Đăng nhập:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Đăng nhập.  Tác nhân (actor): Người dùng.  Điều kiện tiên quyết (pre-conditions): không.  Điều kiện hoàn thành (post-conditions): Người dùng được hệ thống nhận diện và ủy quyền sử dụng hệ thống.  Dòng sự kiện chính (main flow): 1.Người dùng nhập tên đăng nhập, mật khẩu và click nút đăng nhập 2.Hệ thống hiện thông báo ‘Xin chào’ + tên đăng nhập và link thông tin cá nhân, link đổi mật khẩu, đăng xuất và thông tin số lượng sản phẩm hiện có trong giỏ hàng.  Dòng sự kiện phụ (extensions): Trang 47
  48. 1.1.Nếu người dùng nhập liệu sai hoặc để trống, hệ thống thông báo ‘Tài khoản đăng nhập không đúng. Vui lòng kiểm tra lại tên đăng nhập và mật khầu.’ 2.3.2.Đăng ký:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Đăng ký.  Tác nhân (actor): Người dùng.  Điều kiện tiên quyết (pre-conditions): không  Điều kiện hoàn thành (post-conditions): Hệ thống hiển thị thông báo ‘Tài khoản đăng ký thành công’.  Dòng sự kiện chính (main flow): 1.Người dùng chọn chức năng đăng ký. 2.Hệ thông link đến trang đăng ký. 3.Người dùng nhập đầy đủ thông tin yêu cầu và nhấn nút đăng ký. 4.Hệ thống lưu thông tin đăng ký vào database và thông báo đăng ký tài khoản thành công.  Dòng sự kiện phụ (extensions): 3.1.1.Nếu người dùng nhập liệu không đúng định dạng hoặc để trống hệ thống hiện thông báo nhắc nhở. 3.1.2.Nếu người dùng nhấn vào link thoát, hệ thống sẽ quay lại trang chủ. 2.3.3.Quản lý chủ đề:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Quản lý chủ đề.  Tác nhân (actor): Nhân viên quản lý sách, admin. Trang 48
  49.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống.  Điều kiện hoàn thành (post-conditions): Hệ thống cho phép người dùng thêm, cập nhật, xóa chủ đề.  Dòng sự kiện chính (main flow): 1.Người dùng chọn chức năng quản lý chủ đề. 2.Hệ thống link đến trang quản lý chủ đề và hiển thị danh sách các chủ đề.  Dòng sự kiện phụ (extensions): 2.1.Thêm chủ đề: 2.1.1.Người dùng chọn chức năng thêm chủ đề. 2.1.2.Hệ thống hiện form thêm chủ đề. 2.1.3.Người dùng nhập thông tin chủ đề và nhấn nút thêm. 2.1.4.Hệ thống lưu thông tin chủ đề mới vào database và đóng form thêm chủ đề. 2.1.3.1.Nếu người dùng nhập liệu không đúng, hệ thống sẽ thông báo nhắc nhở. 2.1.3.2.Nếu người dùng nhấn nút thoát, hệ thống đóng form thêm chủ đề. 2.2.Cập nhật chủ đề: 2.2.1.Người dùng chọn chức năng cập nhật chủ đề. 2.2.2.Hệ thống hiện form cập nhật chủ đề cùng các thông tin chủ đề vừa chọn. 2.2.3.Người dung thay đổi thong tin và nhấn vào nút cập nhật. 2.2.4.Hệ thống cập nhật thông tin chủ đề vào database và đóng form cập nhật. 2.2.3.1.Nếu người dùng nhập liệu không đúng, hệ thống thông báo nhắc nhở. Trang 49
  50. 2.2.3.2.Nếu người dùng nhấn nút thoát, hệ thống đóng lại form cập nhật. 2.3.Xóa chủ đề: 2.3.1.Người dùng chọn chức năng xóa. 2.3.2.Hệ thống confirm người dùng có chắc chắn xóa chủ đề không. 2.3.3.Nếu người dùng đồng ý, hệ thống xóa chủ đề vừa chọn và ngược lại là không xóa. 2.3.4.Quản lý loại sách:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Quản lý loại sách.  Tác nhân (actor): Nhân viên quản lý sách, admin.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống.  Điều kiện hoàn thành (post-conditions): Hệ thống cho phép người dùng thêm, cập nhật và xóa loại sách.  Dòng sự kiện chính (main flow): 1.Người dùng chọn chức năng quản lý loại sách. 2.Hệ thống link đến trang quản lý loại sách và hiển thị danh sách loại sách.  Dòng sự kiện phụ (extensions): 2.1.Thêm loại sách: 2.1.1.Người dùng chọn chức năng thêm loại sách. 2.1.2.Hệ thống hiện form thêm loại sách. 2.1.3.Người dùng nhập thông tin loại sách và nhấn nút thêm. 2.1.4.Hệ thống lưu thông tin loại sách mới vào database và đóng form thêm loại sách. Trang 50
  51. 2.1.3.1.Nếu người dùng nhập liệu không đúng, hệ thống sẽ thông báo nhắc nhở. 2.1.3.2.Nếu người dùng nhấn nút thoát, hệ thống đóng form thêm loại sách. 2.2.Cập nhật loại sách: 2.2.1.Người dùng chọn chức năng cập nhật loại sách. 2.2.2.Hệ thống hiện form cập nhật loại sách cùng các thông tin loại sách vừa chọn. 2.2.3.Người dung thay đổi thông tin và nhấn vào nút cập nhật. 2.2.4.Hệ thống cập nhật thông tin loại sách vào database và đóng form cập nhật. 2.2.3.1.Nếu người dùng nhập liệu không đúng, hệ thống thông báo nhắc nhở. 2.2.3.2.Nếu người dùng nhấn nút thoát, hệ thống đóng lại form cập nhật. 2.3.Xóa loại sách: 2.3.1.Người dùng chọn chức năng xóa. 2.3.2.Hệ thống confirm người dùng có chắc chắn xóa loại sách không. 2.3.3.Nếu người dùng đồng ý, hệ thống xóa loại sách vừa chọn và ngược lại là không xóa. 2.3.5.Quản lý nhà xuất bản:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Quản lý nhà xuất bản.  Tác nhân (actor): Nhân viên quản lý sách, admin.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống.  Điều kiện hoàn thành (post-conditions): Trang 51
  52. Hệ thống cho phép người dùng thêm, cập nhật và xóa nhà xuất bản.  Dòng sự kiện chính (main flow): 1.Người dùng chọn chức năng quản lý nhà xuất bản. 2.Hệ thống link đến trang quản lý nhà xuất bản và hiển thị danh sách nhà xuất bản.  Dòng sự kiện phụ (extensions): 2.1.Thêm nhà xuất bản: 2.1.1.Người dùng chọn chức năng thêm nhà xuất bản. 2.1.2.Hệ thống hiện form thêm nhà xuất bản. 2.1.3.Người dùng nhập thông tin nhà xuất bản và nhấn nút thêm. 2.1.4.Hệ thống lưu thông tin nhà xuất bản mới vào database và đóng form thêm nhà xuất bản. 2.1.3.1.Nếu người dùng nhập liệu không đúng, hệ thống sẽ thông báo nhắc nhở. 2.1.3.2.Nếu người dùng nhấn nút thoát, hệ thống đóng form thêm nhà xuất bản. 2.2.Cập nhật nhà xuất bản: 2.2.1.Người dùng chọn chức năng cập nhật nhà xuất bản. 2.2.2.Hệ thống hiện form cập nhật nhà xuất bản cùng các thông tin nhà xuất bản vừa chọn. 2.2.3.Người dung thay đổi thông tin và nhấn vào nút cập nhật. 2.2.4.Hệ thống cập nhật thông tin nhà xuất bản vào database và đóng form cập nhật. 2.2.3.1.Nếu người dùng nhập liệu không đúng, hệ thống thông báo nhắc nhở. 2.2.3.2.Nếu người dùng nhấn nút thoát, hệ thống đóng lại form cập nhật. 2.3.Xóa nhà xuất bản: 2.3.1.Người dùng chọn chức năng xóa. Trang 52
  53. 2.3.2.Hệ thống confirm người dùng có chắc chắn xóa nhà xuất bản không. 2.3.3.Nếu người dùng đồng ý, hệ thống xóa nhà xuất bản vừa chọn và ngược lại là không xóa. 2.3.6.Thêm sách:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Thêm sách.  Tác nhân (actor): Nhân viên quản lý sách, admin.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống.  Điều kiện hoàn thành (post-conditions): Hệ thống cho phép người dùng thêm sách.  Dòng sự kiện chính (main flow): 1.Người dùng chọn chức năng thêm sách. 2.Hệ thống link đến trang thêm sách. 3.Người dùng nhập đầy đù các thông tin và nhấn nút thêm. 4.Hệ thống lưu thông tin đầu sách vào database.  Dòng sự kiện phụ (extensions): 3.1.Nếu người dùng nhập liệu sai, hệ thống sẽ thông báo nhắc nhở. 2.3.7.Cập nhật sách:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Cập nhật sách.  Tác nhân (actor): Nhân viên quản lý sách, admin.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống. Trang 53
  54.  Điều kiện hoàn thành (post-conditions): Hệ thống cho phép người dùng cập nhật, xóa sách.  Dòng sự kiện chính (main flow): 1.Người dùng link đến trang chi tiết sách và chọn chức năng cập nhật. 2.Hệ thống link đến trang cập nhật sách cùng các thông tin đầu sách cần cập nhật. 3.Người dùng thay đổi thông tin và nhấn nút cập nhật. 4.Hệ thống cập nhật các thông tin thay đổi vào database và link đến trang chi tiết sách.  Dòng sự kiện phụ (extensions): 1.1.Nếu người dùng chọn chức năng xóa, hệ thống sẽ confirm người dùng có chắc chắn xóa đầu sách này không. Nếu người dùng đồng ý, hệ thống sẽ xóa đầu sách và ngược lại là không xóa. 3.1.Nếu người nhập liệu sai hệ thống thông báo nhắc nhở. 2.3.8.Xem thông tin phiếu nhập:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Xem thông tin phiếu nhập.  Tác nhân (actor): Nhân viên quản lý sách, admin.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống.  Điều kiện hoàn thành (post-conditions): Hệ thống cho phép người dùng thêm, cập nhật và xem thông tin phiếu nhập.  Dòng sự kiện chính (main flow): 1.Người dùng chọn chức năng phiếu nhập. 2.Hệ thống hiển thị tất cả phiếu nhập trong tháng, ngoài ra người dùng có thể chọn hiển thị phiếu nhập theo ngày hoặc tháng hoặc năm. Trang 54
  55. 3.Người dùng nhấn vào link chi tiết. 4.Hệ thống hiển thị các chi tiết phiếu nhập.  Dòng sự kiện phụ (extensions): 2.1.1.Đối với các phiếu nhập trong ngày, người dùng chọn chức năng cập nhật. 2.1.2.Hệ thống link đến trang cập nhật chi tiết phiếu nhập cùng các thông tin chi tiết phiếu nhập cần cập nhật. 2.1.3.Người dùng thay đổi thông tin chi tiết phiếu nhập và nhấn cập nhật. 2.1.4.Hệ thống cập nhật lại thông tin chi tiết phiếu nhập và cập nhật lại số lượng sách trong database. 2.1.3.1.Nếu người dùng nhấn nút thoát, hệ thống link lại trang thông tin phiếu nhập. 2.3.9.Lập phiếu nhập:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Xem thông tin phiếu nhập.  Tác nhân (actor): Nhân viên quản lý sách, admin.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống.  Điều kiện hoàn thành (post-conditions): Hệ thống cho phép người dùng lập phiếu nhập.  Dòng sự kiện chính (main flow): 1.Người dùng chọn chức năng nhập sách. 2.Hệ thống link đến trang nhập sách. 3.Người dùng nhập chi tiết phiếu nhập và nhấn nút nhập. 4.Hệ thống hiển thị lại chi tiết phiếu nhập. 5.Người dùng nhấn vào nút kết thúc nhập. Trang 55
  56. 6.Hệ thống confirm người dùng có chắc chắn kết thúc nhập hay không. 7.Nếu người dùng đồng ý, hệ thống lưu thông tin phiếu nhập vào database.  Dòng sự kiện phụ (extensions): 4.1.Nếu người dùng nhấn vào nút hủy, hệ thống xóa tất cả chi tiết vừa nhập. 2.3.10.Xem thông tin hóa đơn:  Scope: Xây dựng website quản lý nhà sách.  Level: User goal.  Tên Use case: Xem thông tin hóa đơn.  Tác nhân (actor): Nhân viên quản lý khách hàng đặt hàng, admin.  Điều kiện tiên quyết (pre-conditions): người dùng đăng nhập vào hệ thống.  Điều kiện hoàn thành (post-conditions): Hệ thống cho phép người dùng xem và cập nhật hóa đơn.  Dòng sự kiện chính (main flow): 1.Hệ thống hiển thị tất cả các hóa đơn chưa duyệt trong ngày.Ngoài ra, người dùng có thể cho hiển thị hóa đơn theo tình trạng hoặc ngày, tháng, năm.  Dòng sự kiện phụ (extensions): 1.1.Đối với hóa đơn chưa duyệt, sau khi xác định lại các thông tin đặt hàng, nhân viên nhấn vào nút duyệt để cập nhật tình trạng hóa đơn hoặc nhấn nút hủy để hủy bỏ hóa đơn. 1.2.Đối với hóa đơn đã duyệt, nhân viên nhấn vào nút giao hàng nếu muốn giao hàng hệ thống giảm số lượng hàng trong database đồng thời cập nhật tình trạng đơn hàng hoặc nhấn nút hủy để hủy đơn hang. Trang 56
  57. 1.3.Đối với hóa đơn đang giao hàng, nhân viên nhấn vào nút đã giao hàng xong nếu giao được hàng hoặc nhấn nút hủy để hủy đơn hàng, hệ thống sẽ cập nhật lại số lượng sách trong database đồng thời cập nhật tình trạng đơn hang. 2.4.Sơ đồ Domain Model: KhuyenMai -MaKhuyenMai DonGia -NgayBatDau -NgayKetThuc -MaDonGia ChiTietPhieuNhap -PhanTramGiam -NgayThayDoi PhieuNhap Nguoi_Dung Phan_Quyen -MaChiTietPhieuNhap -DonGia 1 * 0 1 -MaPhieuNhap -TenDangNhap -MaPhanQuyen -DonGiaNhap 0 1 1 -SoLuongNhap gom -NgayNhap -TenNguoiDung -TenPhanQuyen 1 -NgaySinh 0 1 duoc nhap boi -DiaChi thuoc 1 0 1 -Email -DienThoai 0 1 1 -MatKhau -HoatDong co ChuDe co -TienNo co duoc tra boi 0 * -MaChuDe 1 Phieu_Thu -TenChuDe 1 -Xoa Sach -MaPhieuThu duoc dat boi -NgayThu thuoc -MaSach 1 1 1 * -SoTienThu -TenSach 1 * LoaiSach 0 1 -NoiDungNho HoaDon -MaLoai -NoiDungLon 1 -HinhAnhNho ChiTietHoaDon -TenLoai duoc thanh toan boi thuoc -HinhAnhLon -SoHoaDon 1 -Xoa -MaChiTietHoaDon -HinhThucBia -NgayHoaDon 1 1 0 1 -SoLuong 1 * -SoTrang 0 1 -NgayGiaoHang 0 1 -DonGia -KichThuoc -NguoiNhan co -KhuyenMai -SoLanXem gom -DiaChiGiaoHang -ThanhTien -TienNo 0 1 -NgayXuatBan QuiDinh thuoc -TrongLuong -TongThanhTien -SoLuong -DienThoai -MaQuiDinh NhaXuatBan -HTTT -TenQuiDinh -Xoa -NoiDung -MaNXB -NgayApDung -TenNXB 1 -DienThoaiNXB 0 1 -DiaChiNXB thuoc -EmailNXB 0 1 1 -Xoa sang tac boi TinhTrang 1 * -MaTinhTrang -TinhTrang Sach_TacGia Tac_Gia 1 * 0 1 -MaSachTacGia -MaTacGia sang tac -TenTacGia -Xoa Hình 9- Sơ đồ Domain Model. 2.5.Mô tả các lớp trong Domain – Model: 2.5.1.Lớp Sach: STT Thuộc tính Mô tả 1 MaSach Mã sách. 2 TenSach Tên sách. 3 SoLuong Số lượng sách trong kho. 4 HinhAnhNho Hình ảnh sách ở trang chủ. 5 HinhAnhLon Hình ảnh sách ở trang chi tiết sách. Trang 57
  58. 6 NoiDungNho Nội dung tóm tắt. 7 NoiDungLon Nội dung chi tiết. 8 SoLanXem Số lượt xem chi tiết sách. 9 SoTrang Số trang quyển sách. 10 KichThuoc Kích thước quyển sách. 11 NgayXuatBan Ngày xuất bản. 12 TrongLuong Trọng lượng quyển sách. 13 HinhThucBia Hình thức bìa. 14 Xoa Tình trạng xóa. 2.5.2.Lớp NhaXuatBan: STT Thuộc tính Mô tả 1 MaNXB Mã nhà xuất bản. 2 TenNXB Tên nhà xuất bản. 3 DiaChiNXB Địa chỉ. 4 DienThoaiNXB Điện thoại bàn. 5 Xoa Tình trạng xóa. 6 EmailNXB Email. 2.5.3.Lớp Nguoi_Dung: STT Thuộc tính Mô tả 1 TenDangNhap Tên đăng nhập người dùng. 2 TenNguoiDung Họ tên người dùng. 3 MatKhau Mật khẩu. 4 DiaChi Địa chỉ. 5 DienThoai Điện thoại. 6 NgaySinh Ngày sinh. 7 Email Email. Trang 58
  59. 8 HoatDong Tình trạng hoạt động. 9 TienNo Tổng số tiền mà khách hàng còn nợ ở các hóa đơn. 2.5.4.Lớp Phan_Quyen: STT Thuộc tính Mô tả 1 MaPhanQuyen Mã phân quyền. 2 TenPhanQuyen Tên phân quyền. 2.5.5.Lớp Phieu_Thu: STT Thuộc tính Mô tả 1 MaPhieuThu Mã phiếu thu. 2 NgayThu Ngày lập phiếu thu. 3 SoTienThu Số tiền thu. 2.5.6.Lớp ChuDe: STT Thuộc tính Mô tả 1 MaChuDe Mã chủ đề. 2 TenChuDe Tên chủ đề. 3 Xoa Tình trạng xóa. 2.5.7.Lớp LoaiSach: STT Thuộc tính Mô tả 1 MaLoai Mã loại sách. 2 TenLoai Tên loại sách. 3 Xoa Tình trạng xóa. Trang 59
  60. 2.5.8.Lớp PhieuNhap: STT Thuộc tính Mô tả 1 MaPhieuNhap Mã phiếu nhập. 2 NgayNhap Ngày lập phiếu nhập. 2.5.9.Lớp ChiTietPhieuNhap: STT Thuộc tính Mô tả 1 MaChiTietPhieuNhap Mã chi tiết phiếu nhập. 2 SoLuongNhap Số lượng nhập. 3 DonGiaNhap Đơn giá nhập. 2.5.10.Lớp TinhTrang: STT Thuộc tính Mô tả 1 MaTinhTrang Mã tình trạng. 2 TenTinhTrang Tên tình trạng. 2.5.11.Lớp QuyDinh: STT Thuộc tính Mô tả 1 MaQuyDinh Mã quy định. 2 TenQuyDinh Tên quy định. 3 NoiDung Nội dung. 4 NgayApDung Ngày áp dụng. 2.5.12.Lớp HoaDon: STT Thuộc tính Mô tả 1 SoHoaDon Mã đơn đặt hàng. 2 NgayHoaDon Ngày đặt hàng. 3 NgayGiaoHang Ngày giao hàng. Trang 60
  61. 4 NguoiNhan Tên người nhận. 5 DiaChiGiaoHang Địa chỉ giao hàng. 6 TienNo Tiền nợ. 7 TongThanhTien Tổng tiền. 8 DienThoai Điện thoại. 9 HTTT Hình thức thanh toán. 2.5.13.Lớp ChiTietHoaDon: STT Thuộc tính Mô tả 1 MaChiTietHoaDon Mã chi tiết hóa đơn. 2 SoLuong Số lượng. 3 DonGia Đơn giá. 4 KhuyenMai Khuyến mãi. 5 ThanhTien Thành tiền. 2.5.14.Lớp KhuyenMai: STT Thuộc tính Mô tả 1 MaKhuyenMai Mã khuyến mãi. 2 NgayBatDau Ngày bắt đầu. 3 NgayKetThuc Ngày kết thúc. 4 PhanTramKhuyenMai Phần trăm khuyến mãi. 2.5.15.Lớp DonGia: STT Thuộc tính Mô tả 1 MaDonGia Mã đơn giá. 2 NgayThayDoi Ngày thay đổi. 3 DonGia Đơn giá. Trang 61
  62. 2.5.16.Lớp Tac_Gia: STT Thuộc tính Mô tả 1 MaTacGia Mã tác giả. 2 TenTacGia Tên tác giả. 3 Xóa Tình trạng xóa. 2.5.17.Lớp Sach_TacGia: STT Thuộc tính Mô tả 1 MaSachTacGia Mã sách tác giả Trang 62
  63. CHƯƠNG 3 THIẾT KẾ Nội dung: 3.1.Sơ đồ cơ sở dữ liệu quan hệ 3.2.Mô tả sơ đồ 3.3.Giao diện một số màn hình. Trang 63
  64. 3.1.Sơ đồ cơ sở dữ liệu quan hệ: Khuyen_Mai MaKhuyenMai MaSach NgayBatDau NgayKetThuc PhanTramGiam Chi_Tiet_Phieu_Nhap Phieu_Nhap MaChiTietPhieuNhap MaPhieuNhap Don_Gia MaPhieuNhap NgayNhap MaDonGia Sach MaSach TenDangNhap MaSach MaSach SoLuongNhap NgayThayDoi TenSach DonGiaNhap DonGia MaLoai NoiDungNho NoiDungLon HinhAnhNho HinhAnhLon Chu_De Nguoi_Dung Loai_Sach HinhThucBia MaChuDe TenDangNhap MaLoai SoTrang TenChuDe TenNguoiDung Phan_Quyen TenLoai KichThuoc DiaChi MaPhanQuyen Xoa Xoa SoLanXem Email TenPhanQuyen MaChuDe NgayXuatBan DienThoai TrongLuong MatKhau SoLuong HoatDong MaNXB MaPhanQuyen Nha_Xuat_Ban Xoa TienNo Phieu_Thu Qui_Dinh MaNXB MaPhieuThu MaQuiDinh TenNXB NgayThu TenQuiDinh DienThoaiNXB SoHoaDon NoiDung DiaChiNXB Chi_Tiet_Hoa_Don TenDangNhap NgayApDung EmailNXB MaChiTietHoaDon SoTienThu Xoa SoHoaDon Hoa_Don MaSach SoHoaDon SoLuong NgayHoaDon DonGia NgayGiaoHang KhuyenMai TenDangNhap Sach_TacGia ThanhTien NguoiNhan MaSachTacGia DiaChiGiaoHang MaSach DienThoai MaTacGia TienNo TongThanhTien Tinh_Trang HTTT MaTinhTrang MaTinhTrang TinhTrang Tac_Gia MaTacGia TenTacGia Xoa Hình 10 – Sơ đồ cơ sở dữ liệu quan hệ 3.2.Mô tả sơ đồ: 3.2.1.Bảng Sach: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaSach varchar(15) Mã sách. Khóa chính 2 TenSach nvarchar(100) Tên sách. Not null 3 NoiDungNho ntext Nội dung tóm Not null tắt. 4 NoiDungLon ntext Nội dung chi Not null tiết. 5 HinhAnhNho nvarchar(50) Hình ảnh sách ở Not null trang chủ. 6 HinhAnhLon nvarchar(50) Hình ảnh sách ở Not null Trang 64
  65. trang chi tiết. 7 HinhThucBia nvarchar(50) Loại bìa, ví dụ: Not null bìa mềm 8 SoTrang Int Số trang của Not null quyển sách. 9 KichThuoc char(10) Kích thước Not null quyển sách, tính bằng cm. 10 SoLanXem Int Số lần quyển sách được xem chi tiết. 11 TrongLuong Int Trọng lượng Not null quyển sách, tính bằng gram. 12 NgayXuatBan Datetime Ngày xuất bản Not null quyển sách. 13 SoLuong Int Số lượt sách có Not null trong kho. 14 MaNXB Int Mã nhà xuất Khóa ngoại tham bản. chiếu đến bảng Nha_Xuat_Ban( MaNXB) 15 MaLoai Varchar(15) Mã loại sách. Khóa ngoại tham chiếu đến bảng Loai_Sach(MaLo ai) 16 Xoa Bit Tình trạng xóa Not null quyển sách. Trang 65
  66. 3.2.2.Bảng Nha_Xuat_Ban: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaNXB Int Mã nhà xuất bản. Khóa chính 2 TenNXB nvarchar(50) Tên nhà xuất Not null bản. 3 DienThoaiNXB varchar(20) Điện thoại nhà Not null xuất bản. 4 DiaChiNXB nvarchar(50) Địa chỉ nhà xuất Not null bản. 5 EmailNXB varchar(30) Email nhà xuất Not null bản. 6 Xoa Bit Tình trạng xóa. Not null 3.2.3.Bảng Phan_Quyen: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaPhanQuyen Int Mã phân Khóa chính quyền. 2 TenPhanQuyen Nvarchar(50) Tên phân Not null quyền. 3.2.4.Bảng Nguoi_Dung: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 TenDangNhap varchar(20) Tên đăng nhập Khóa chính người dùng. 2 MatKhau varchar(20) Mật khẩu. Not null 3 TenNguoiDung nvarchar(50) Họ tên người Not null Trang 66
  67. dùng. 4 Email varchar(50) Email. 5 DiaChi nvarchar(50) Địa chỉ. Not null 6 DienThoai varchar(15) Điện thoại. Not null 7 MaPhanQuyen Int Mã phân Khóa ngoại tham quyền. chiếu đến bảng Phan_Quyen(MaP hanQuyen) 8 HoatDong Bit Tình trạng hoạt Not null động. 9 TienNo Float Tổng tiền nợ của khách hang đã nợ trong các hóa đơn. 3.2.5.Bảng Loai_Sach: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaLoai Varchar(15) Mã loại sách. Khóa chính 2 TenLoai nvarchar(50) Tên loại Not null sách. 3 MaChuDe Varchar(15) Mã chủ đề. Khóa ngoại tham chiếu đến bảng Chu_De (MaChuDe) 4 Xoa Bit Tình trạng Not null xóa loại sách. Trang 67
  68. 3.2.6.Bảng Chi_Tiet_Phieu_Nhap: STT Thuộc tính Kiểu dữ Mô tả Ràng buộc liệu 1 MaChiTietPhieuNha Int Mã chi tiết Khóa chính p phiếu nhập. 2 SoLuongNhap Int Số lượng Not null nhập. 3 DonGiaNhap Float Đơn giá nhập. Not null 4 MaPhieuNhap Varchar(1 Mã phiếu Khóa ngoại tham 0) nhập. chiếu đến bảng Phieu_Nhap (MaPhieuNhap) 5 MaSach Varchar(1 Mã sách. Khóa ngoại tham 5) chiếu đến bảng Sach (MaSach) 3.2.7.Bảng Phieu_Nhap: STT Thuộc tính Kiểu dữ Mô tả Ràng buộc liệu 1 MaPhieuNhap Varchar(10) Mã phiếu Khóa chính nhập. 2 NgayNhap datetime Ngày nhập. Not null 3 TenDangNhap varchar(20) Tên đăng Khóa ngoại nhập người tham chiếu đến dùng. bảng Nguoi_Dung ( TenDangNhap ). Trang 68
  69. 3.2.8.Bảng Tinh_Trang: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaTinhTrang Int Mã tình Khóa chính trạng. 2 TinhTrang nvarchar(50) Tên tình Not null trạng. 3.2.9.Bảng Qui_Dinh: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaQuyDinh Int Mã quy định. Khóa chính 2 TenQuyDinh nvarchar(50) Tên quy định. Not null 3 NoiDung Int Nội dung. Not null 4 NgayApDung datetime Ngày áp dụng. Not null 3.2.10.Bảng Hoa_Don: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 SoHoaDon Varchar(20) Số hóa đơn. Khóa chính 2 NgayHoaDon datetime Ngày đặt hàng. Not null 3 NgayGiaoHang datetime Ngày giao hàng. 4 TenDangNhap varchar(20) Tên đăng nhập Khóa ngoại người dùng. tham chiếu đến bảng Nguoi_Dung( TenDangNhap ) 5 NguoiNhan nvarchar(50) Họ tên người Not null Trang 69
  70. nhận hàng. 6 DiaChiGiaoHang nvarchar(50) Địa chỉ giao Not null hàng. 7 TienNo float Tiền nợ hóa Not null đơn. 8 TongThanhTien float Tổng thành Not null tiền của hóa đơn. 9 MaTinhTrang Int Tình trạng hóa Khóa ngoại đơn. tham chiếu đến bảng Tinh_Trang(M aTinhTrang) 10 HTTT Nvarchar(50) Hình thức not null thanh toán. 11 DienThoai Varchar(15) Điện thoại bên not null người nhận. 3.2.11.Bảng Chi_Tiet_Hoa_Don: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaChiTietHoaDon Int Mã chi tiết Khóa chính hóa đơn. 2 SoHoaDon Varchar(20) Số hóa đơn. Khóa ngoại tham chiếu đến bảng Hoa_Don(SoH oaDon) 3 MaSach varchar(15) Mã sách. Khóa ngoại tham chiếu Trang 70
  71. đến bảng Sach(MaSach) 4 SoLuong Int Số lượng. Not null 5 DonGia Float Đơn giá. Not null 6 KhuyenMai Int Khuyến mãi. Not null 7 ThanhTien Float Thành tiền. Not null 3.2.12.Bảng Khuyen_Mai: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaKhuyenMai Int Mã khuyến Khóa chính mãi. 2 NgayBatDau datetime Ngày bắt đầu. Not null 3 NgayKetThuc datetime Ngày kết thúc. Not null 4 PhanTramGiam Int Phần trăm Not null khuyến mãi. 5 MaSach Varchar(15) Mã sách. Khóa ngoại tham chiếu đến bảng Sach(MaSach) 3.2.13.Bảng Don_Gia: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaDonGia Int Mã đơn giá. Khóa chính 2 MaSach varchar(15) Mã sách. Khóa ngoại tham chiếu đến bảng Sach(MaSach) 3 NgayThayDoi datetime Ngày thay Not null Trang 71
  72. đổi. 4 DonGia Float Đơn giá sách. Not null 3.2.14.Bảng Chu_De: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaChuDe Varchar(15) Mã chủ đề. Khóa chính 2 TenChuDe nvarchar(50) Tên chủ đề. Not null 3 Xoa bit Tình trạng xóa. Not null 3.2.15.Bảng Phieu_Thu: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaPhieuThu Int Mã phiếu thu. Khóa chính 2 NgayThu datetime Ngày lập phiếu Not null thu. 3 SoTienThu float Số tiền thu. Not null 4 SoHoaDon Varchar(20) Số hóa đơn. Khóa ngoại tham chiếu đến bảng Hoa_Don(SoH oaDon) 5 TenDangNhap Varchar(20) Tên đăng nhập Khóa ngoại người dùng. tham chiếu đến bảng Nguoi_Dung( TenDangNhap ) Trang 72
  73. 3.2.16.Bảng Tac_Gia: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaTacGia int Mã tác giả. Khóa chính 2 TenTacGia nvarchar(50) Tên tác giả. Not null 3 Xoa bit Tình trạng xóa. Not null 3.2.17.Bảng Sach_TacGia: STT Thuộc tính Kiểu dữ liệu Mô tả Ràng buộc 1 MaSachTacGia Int Mã sách tác Khóa chính giả. 2 MaSach varchar(15) Mã sách. Khóa ngoại tham chiếu đến bảng Sach(MaSach) 3 MaTacGia Int Mã tác giả. Khóa ngoại tham chiếu đến bảng Tac_Gia(MaTacG ia) Trang 73
  74. 3.3.Giao diện một số màn hình: Hình 11 – Màn hình trang chủ Hình 12 – Màn hình trang quản lý chủ đề Trang 74
  75. Hình 13 – Màn hình trang thêm sách Hình 14 – Màn hình trang đăng ký Trang 75
  76. CHƯƠNG 4 CÀI ĐẶT, ĐÁNH GIÁ KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN Nội dung: 4.1.Môi trường cài đặt. 4.2.Đánh giá kết quả. 4.3.Hướng phát triển. Trang 76
  77. 4.1.Môi trường cài đặt: Việc lựa chọn công nghệ sao cho phù hợp với ứng dụng muốn phát triển là điều quan trọng. Với sự phát triển của công nghệ thông tin như hiện nay, nhiều công nghệ mới, xuất hiện nhiều ngôn ngữ mới để đáp ứng cho nhiều nhu cầu khác nhau thuộc lĩnh vực khác nhau. Đề tài : “SỬ DỤNG NHIBERNATE (OQL -OBJECT QUERY LANGUAGE) ĐỂ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ VIỆC MUA BÁN SÁCH CHO MỘT CỬA HIỆU SÁCH (ỨNG DỤNG WEB)” được xây dựng dựa vào các kiến thức cơ bản về nghiệp vụ quản lý kết hợp với các công nghệ hiện nay. Công nghệ sử dụng : Net Framework 3.5, NHibernate. Ngôn ngữ lập trình : c#, asp.net. Hệ quản trị cơ sở dữ liệu: MSSQL2005. 4.2.Đánh giá kết quả: 4.2.1.Kết quả đạt được: Xây dựng website quản lý việc bán sách Trong đề tài này, vận dụng các kiến thức căn bản đã học cùng các nghiệp vụ cơ bản của việc quản lý chúng em đã xây dựng được chương trình đáp ứng các yêu cầu cơ bản: Đăng nhập. Tìm kiếm sách. Đặt hàng. Thay đổi thông tin cá nhân. Đăng ký tài khoản. Xem lịch sử mua hàng. Quản lý nhà xuất bản. Quản lý loại sách. Quản lý chủ đề sách. Trang 77
  78. Quản lý sách. Quản lý phiếu nhập, chi tiết phiếu nhập. Quản lý người dùng. Lập phiếu thu. Quản lý hóa đơn, chi tiết hóa đơn. Thống kê. 4.2.2.Việc chưa làm được: Do kiến thức còn hạn hẹp nên luận văn không tránh khỏi những thiếu sót như: Chưa hỗ trợ việc người dùng nhận xét sách. Chưa hỗ trợ người dùng liên hệ trực tuyến với nhà sách. Chưa hỗ trợ đa dạng các hình thức thanh toán. 4.3.Hướng phát triển: Trong thời gian sắp tới, chúng em sẽ cố gắng khắc phục những hạn chế trên Hỗ trợ việc người dùng nhận xét sách. Hỗ trợ người dùng liên hệ trực tuyến với nhà sách. Hỗ trợ đa dạng các hình thức thanh toán. Trang 78
  79. DANH MỤC TÀI LIỆU THAM KHẢO [1].NHibernate in action, Tobin Harris - Gavin King – Christian Bauer. [2]. [3]. [4]. Trang 79
  80. Trang 80