# data[].attributes.body
Để hoàn thành bài tập cuối kỳ này, em xin tỏ lòng biết ơn sâu sắc đến cô Hoàng Thị Mỹ Lệ, đã tận tình hướng dẫn, truyền đạt những kiến thức thiết yếu trong suốt quá trình chúng em đến lớp.

Em kính chúc cô dồi dào sức khỏe và thành công trong sự nghiệp .

# data[].attributes.headline
Bước 1: Tạo cơ sở dữ liệu Quản lý thư viện gồm các bảng. 

# data[].attributes.subject
Bước 1: Tạo cơ sở dữ liệu Quản lý thư viện gồm các bảng. 

# data[].attributes.body
Bảng SACH : Masach(char,5), Tensach (nvarchar,50), Namxb(int), Nhaxb (nvarchar, 50)

Bảng SINHVIEN : Masv (char, 5), Hoten (nvarchar,50), Lop(char,7), Gioitinh (char,3), Diachi(nvarchar, 50)

Bảng MUONSACH: Masach (char,5), Masv (char, 5),

Ngaymuon (date), Ngaytra (date), Quanlythuvien (nvarchar,50)

# data[].attributes.headline
Bước 2:Tạo liên kết giữa các bảng (Diagrams)

# data[].attributes.subject
Bước 2:Tạo liên kết giữa các bảng (Diagrams)

# data[].attributes.headline
Bước 3:Nhập dữ liệu cho từng bảng như sau: 

# data[].attributes.subject
Bước 3:Nhập dữ liệu cho từng bảng như sau: 

# data[].attributes.body
Bảng SACH

# data[].attributes.body
Bảng SINHVIEN

# data[].attributes.body
Bảng MUONSACH

# data[].attributes.headline
Bước 4: Mở Microsoft Visual Studio và tạo giao diện chính 

# data[].attributes.subject
Bước 4: Mở Microsoft Visual Studio và tạo giao diện chính 

# data[].attributes.body
Microsoft Visual Studio 2019(.NET Framework 4.7.2)

# data[].attributes.body
Sử dụng Server Explorer để thiết lập kết nối đến CSDL

- View/Server Explorer (Ctrl Alt S)
- Xuất hiện cửa sổ Server Explorer + Chọn nút Connect DataBase để kết nối CSDL
+ Xuất hiện hộp hội thoại Choose Data Source, ấn Change để thay đổi, hiện hộp thoại Change Data Source, dòng Data source chọn <other>, dòng Data provider chọn .Net Framework Data provider for SQL Server. Ấn OK

# data[].attributes.body
+ Xuất hiện hộp hội thoại Add Connection
+ Chọn tập tin CSDL cần kết nối
+ Nhấn OK để thêm kết nối vào Server Explorer

# data[].attributes.headline
Kết quả sau khi tiết lập kết nối CSDL thành công

# data[].attributes.subject
Kết quả sau khi tiết lập kết nối CSDL thành công

# data[].attributes.body
Chuột phải vào WindownsApp1 --> Add --> New Item.

# data[].attributes.body
Xuất hiện cửa sổ Add New Item, chọn Dataset, đặt tên cho Dataset là QLTV.xsd nhấn Add để tạo Dataset.

# data[].attributes.body
-Sử dụng Server Explorer để thêm các bảng vào DataSet(View/Server Explorer (Ctrl Alt S))
-Kéo các table từ ServerExplorer vào vùng dữ liệu DataSet, ấn Ctrl-S để lưu Dataset.

# data[].attributes.headline
Bước 7: Tạo một module để kết nối dữ liệu từ SQL Server

# data[].attributes.subject
Bước 7: Tạo một module để kết nối dữ liệu từ SQL Server

# data[].attributes.body
-Chuột phải vào WindownsApp1 --> Add --> New Item.
-Xuất hiện cửa sổ Add New Item, chọn Module, đặt tên cho Module là ConnectDB.vb nhấn Add để tạo Module.

# data[].attributes.headline
Bước 9: Tạo CrystalReport để có thể viết code cho Button “In sách”

# data[].attributes.subject
Bước 9: Tạo CrystalReport để có thể viết code cho Button “In sách”

# data[].attributes.body
-Nhấn tổ hợp phím Ctrl-Shift-A  để mở cửa sổ Add New Item, chọn Crystal Reports,đặt tên là rptSach.rpt

# data[].attributes.body
-Khi nhấn nút Add để thêm Crystal Report sẽ xuất hiện hộp thoại Crystal Report Gallery như sau:

# data[].attributes.body
Nhấp OK sẽ xuất hiện hộp thoại và chúng ta sẽ chọn Project Data > ADO.NET DataSets > WindowsApp1.QLTV > SACH như hình sau:

# data[].attributes.body
Nhấn vào nút > để thêm bảng SACH vào khung Selected Tables bên phải:

# data[].attributes.body
Nhấn Finish sẽ xuất hiện màn hình như sau:
-Các vùng trong một báo cáo:

o    Section1 (Report Header): các trường (hay cột) đặt trong vùng này được in một lần ở ngay đầu báo cáo.

o    Section2 (Page Header): các trường (hay cột) đặt trong vùng này được in tại đầu của mỗi trang mới.

o    Section3 (Details) : các trường (hay cột) đặt trong vùng này được in với mỗi hàng (hay bản ghi) mới.

o    Section4 (Report Footer)): các trường (hay cột) đặt trong vùng này được in một lần ở ngay cuối báo cáo.

o    Section5 (Page Footer) : các trường (hay cột) đặt trong vùng này được in ở ngay cuối mỗi trang mới.

# data[].attributes.body
Trong cửa sổ Field Explorer tìm đến Database Fields và mở rộng sẽ thấy SACH và các cột vừa tạo:

# data[].attributes.body
Chọn và kéo lần lượt từng cột trong SACH đặt sang vùng Section3 (Details) của report:

# data[].attributes.body
Để tạo thêm 1 cột STT không có trong cơ sở dữ liệu, ở vùng Field Exploer ta bấm chọn dấu “ + “ ở mục Special Fields, kéo Record Number vào bên trái trường Masach ở Section3(Details),

# data[].attributes.body
Chỉnh lại kích thước và đặt lại tên ta được giao diện thiết kế như trong hình:
Như vậy report đã được thiết kế xong.

# data[].attributes.headline
Bước 10: Tạo form DSSach chứa CrystalReportView

# data[].attributes.subject
Bước 10: Tạo form DSSach chứa CrystalReportView

# data[].attributes.headline
Bước 13: Tạo CrystalReport để có thể viết code cho Button "In danh sách sinh viên"

# data[].attributes.subject
Bước 13: Tạo CrystalReport để có thể viết code cho Button "In danh sách sinh viên"

# data[].attributes.body
Cách làm tương tự như Bước 9. Sau khi thiết kế xong ta được như trong hình:
Như vậy Report đã được thiết kế xong.

# data[].attributes.headline
Bước 14 : Tạo form DSSinhVien chứa CrystalReportView

# data[].attributes.subject
Bước 14 : Tạo form DSSinhVien chứa CrystalReportView

# data[].attributes.body
Tạo form DSSinhVien chứa CrystalReportView

# data[].attributes.headline
Bước 17 :Tạo CrystalReport để có thể viết code cho Button "In danh sách quản lý sách mượn"

# data[].attributes.subject
Bước 17 :Tạo CrystalReport để có thể viết code cho Button "In danh sách quản lý sách mượn"

# data[].attributes.body
Cách làm tương tự như Bước 9. Sau khi thiết kế xong ta được như trong hình:
Như vậy report đã được thiết kế xong.

# data[].attributes.headline
Bước 18 : Tạo form QuanLiMuonSach chứa CrystalReportView

# data[].attributes.subject
Bước 18 : Tạo form QuanLiMuonSach chứa CrystalReportView

# data[].attributes.body
Khi bấm vào thanh Menu Quản lý danh mục

# data[].attributes.body
*Bấm quản lý danh mục --> QL Sách hiển thị giao diện QL Sách:

# data[].attributes.body
Khi ấn button Thêm:

# data[].attributes.body
Nhập dữ liệu và ấn Button Lưu

# data[].attributes.body
Sửa dữ liệu Thông tin sách của mã sách 08, ấn Button Sửa:
+Trước khi ấn Button Sửa:

# data[].attributes.body
Sửa dữ liệu Thông tin sách của mã sách 08, ấn Button Sửa:
+Sau khi ấn Button Sửa:

# data[].attributes.body
Xóa dữ liệu Thông tin sách của mã sách 09,ấn Button Xóa:
+Trước khi Xóa:

# data[].attributes.body
Xóa dữ liệu Thông tin sách của mã sách 09,ấn Button Xóa:
+Saukhi Xóa:

# data[].attributes.body
Tìm kiếm sách:
+Khi chưa ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:
+Khi chưa ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:

+Khi ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:

+Khi ấn RadioButton:

# data[].attributes.body
Ấn Button In sách:

# data[].attributes.body
*Về lại giao diện chính,  bấm quản lý danh mục --> QL Sinh viên hiển thị giao diện QL Sinh viên:

# data[].attributes.body
-Khi ấn button Thêm:

# data[].attributes.body
-Nhập dữ liệu và ấn Button Lưu:

# data[].attributes.body
Lưu thành công

# data[].attributes.body
-Sửa dữ liệu Thông tin sách của mã sinh viên 08, ấn Button Sửa:

+Trước khi ấn Button Sửa:

# data[].attributes.body
-Sửa dữ liệu Thông tin sách của mã sinh viên 08, ấn Button Sửa:

+Sau khi ấn Button Sửa:

# data[].attributes.body
Xóa dữ liệu Thông tin sách của sinh viên 09,ấn Button Xóa:
+Trước khi Xóa:

# data[].attributes.body
Xóa dữ liệu Thông tin sách của sinh viên 09,ấn Button Xóa:
+Sau khi Xóa:

# data[].attributes.body
Tìm kiếm sách:
+Khi chưa ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:
+Khi chưa ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:
+Khi ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:
+Khi ấn RadioButton:

# data[].attributes.body
Ấn Button In danh sách sinh viên:

# data[].attributes.body
Về lại giao diện chính,  bấm quản lý danh mục --> QL Mượn sách hiển thị giao diện QL Mượn sách:

# data[].attributes.body
Khi ấn button Thêm:
Nhập dữ liệu và ấn Button Lưu:

# data[].attributes.body
Lưu thành công

# data[].attributes.body
Sửa dữ liệu Thông tin sách của mã sách 01 và mã sinh viên 02, ấn Button Sửa:
+Trước khi ấn Button Sửa:

# data[].attributes.body
Sửa dữ liệu Thông tin sách của mã sách 01 và mã sinh viên 02, ấn Button Sửa:
+Sau khi ấn Button Sửa:

# data[].attributes.body
Xóa dữ liệu Thông tin sách của mã sách 03 và sinh viên 02,ấn Button Xóa:
+Trước khi Xóa:

# data[].attributes.body
Xóa dữ liệu Thông tin sách của mã sách 03 và sinh viên 02,ấn Button Xóa:
+Sau khi Xóa:

# data[].attributes.body
Tìm kiếm sách:

+Khi chưa ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:
	+Khi chưa ấn RadioButton: 

# data[].attributes.body
Tìm kiếm sách:
+Khi ấn RadioButton:

# data[].attributes.body
Tìm kiếm sách:

+Khi ấn RadioButton:

# data[].attributes.body
Ấn Button In danh sách quản lý sách mượn: