LỜI NÓI ĐẦU
VB.NET là một ngôn ngữ lập trình trực quan, hƣớng đối tƣợng và hƣớng sự
kiện. Hơn nữa, nó có một bộ công cụ CASE giúp dễ dàng phát triển các ứng dụng trên
môi trƣờng Win Form và Web Form.
Cuốn tài liệu này các tác giả biên soạn theo hƣớng tiếp cận kỹ năng nhằm giúp
cho sinh viên nhanh chóng tiếp thu và sử dụng đƣợc các công cụ của VB.NET cũng
nhƣ lập trình đƣợc để phát triển các ứng dụng trong thực tế.
Cuốn tài liệu gồm 4 bài:
Bài 1: Sử dụng VB.NET lập trình trên Form để cập nhật cơ sở dữ liệu
Mục đích của bài này giúp các sinh viên có kỹ năng sử dụng VB.NET để lập
trình cập nhật cơ sở dữ liệu của một ứng dụng.
Bài 2: Sử dụng VB.NET lập trình tìm kiếm thông tin và hiển thị kết quả trên
form
Mục đích của bài này giúp các sinh viên có kỹ năng sử dụng VB.NET để lập
trình tìm kiếm thông tin và hiển thị kết quả tìm kiếm trên Form
Bài 3: Lập trình và in ấn báo cáo
Mục đích của bài này giúp các sinh viên có kỹ năng sử dụng Crystal Report để
thiết kế các báo cáo và sử dụng VB.NET để lập trình các form điều khiển việc xem, in
báo cáo.
Bài 4: Lập trình menu và phân phối ứng dụng
Mục đích của bài này giúp các sinh viên có kỹ năng sử dụng VB.NET để tạo và
lập trình menu cho ứng dụng. Đồng thời, giúp sinh viên có kỹ năng tạo bộ cài đặt,
đóng gói và phân phối các ứng dung.
Cuốn tài liệu không tránh khỏi còn có những sai sót, mong nhận đƣợc sự đóng
góp của các thầy cô giáo và các em sinh viên để cuốn tài liệu ngày một hoàn thiện hơn.
Xin trân trọng cảm ơn
Các tác giả
i
MỤC LỤC
BÀI 1. SỬ DỤNG VB.NET LẬP TRÌNH TRÊN FORM ............................................ 10
ĐỂ CẬP NHẬT CƠ SỞ DỮ LIỆU ............................................................................... 10
1.1. Tóm tắt kiến thức cần nhớ .................................................................................. 10
1.2. Hƣớng dẫn thực hành ............................................................................................ 5
1.2.1. Bài tập mẫu ..................................................................................................... 5
1.2.2. Hƣớng dẫn thực hiện: ................................................................................... 11
1.2.3. Bài tập thực hành .......................................................................................... 44
1.3. Bài tập về nhà ...................................................................................................... 62
BÀI 2. SỬ DỤNG VB.NET LẬP TRÌNH TÌM KIẾM THÔNG TIN .......................... 65
VÀ HIỂN THỊ KẾT QUẢ TRÊN FORM ..................................................................... 65
2.1 Tóm tắt kiến thức cần nhớ ................................................................................... 65
2.1.1. Câu lệnh SQL để tìm kiếm thông tin trong cơ sở dữ liệu ............................ 65
2.1.2. Sử dụng Form để hiển thị thông tin tìm kiếm. ............................................. 66
2.2. Hƣớng dẫn thực hành .......................................................................................... 68
2.2.1. Bài tập mẫu ................................................................................................... 68
2.1.2 Hƣớng dẫn thực hiện ..................................................................................... 80
2.2.3. Bài tập thực hành ........................................................................................ 120
2.3. Bài tập về nhà .................................................................................................... 145
BÀI 3. LẬP TRÌNH VÀ IN ẤN BÁO CÁO .............................................................. 147
3.1. Tóm tắt kiến thức cần nhớ ................................................................................ 147
3.2. Hƣớng dẫn thực hành ........................................................................................ 154
3.2.1. Bài tập mẫu ................................................................................................. 154
3.2.2 Hƣớng dẫn thực hiện ................................................................................... 168
3.3. Bài tập áp dụng ................................................................................................. 234
3.3. Bài tập về nhà .................................................................................................... 258
BÀI 4. LẬP TRÌNH MENU VÀ PHÂN PHỐI ỨNG DỤNG .................................... 259
4.1. Tóm tắt kiến thức cần nhớ ................................................................................ 259
4.1.1. Menu ........................................................................................................... 259
4.1.2. Phân phối ứng dụng .................................................................................... 261
4.2. Hƣớng dẫn thực hành ........................................................................................ 263
4.2.1. Bài tập mẫu ................................................................................................. 263
ii
4.2.2. Hƣớng dẫn thực hiện .................................................................................. 266
4.2.3. Bài tập thực hành ........................................................................................ 285
4.3. Bài tập về nhà .................................................................................................... 296
BÀI TẬP NHÓM. ....................................................................................................... 297
DANH MỤC TÀI LIỆU THAM KHẢO .................................................................... 299
iii
DANH MỤC HÌNH
Hình 1. Form dạng bản ghi .............................................................................................. 2
Hình 2. Form dạng danh sách .......................................................................................... 2
Hình 3. Form dạng một nhiều ......................................................................................... 3
Hình 4. Fom cập nhật thông tin khách hàng ................................................................... 8
Hình 5. Form hiển thị và cập nhậtdanh sách mặt hàng ................................................... 9
Hình 6. Form cập nhật thông tin bán hàng .................................................................... 10
Hình 7. Cửa sổ Add New Item ...................................................................................... 12
Hình 8. Cửa sổ Data Source Configuration Wizard ...................................................... 12
Hình 9. Cửa sổ Change Data Source ............................................................................. 13
Hình 10. Cửa sổ Add Connection ................................................................................. 14
Hình 11. Cửa sổ Data Source Configuration Wizard .................................................... 15
Hình 12. Hoàn thành việc kết nối với cơ sở dữ liệu ...................................................... 15
Hình 13. Kết quả sau khi kéo bảng khách hàng vào form ............................................ 16
Hình 14. Kết quả thiết kế form thông tin khách hàng ................................................... 22
Hình 15. Kết quả thực thi form thông tin khách hàng .................................................. 23
Hình 16. Form danh sách mặt hàng ............................................................................... 24
Hình 17. Cửa sổ Edit Columns ...................................................................................... 25
Hình 18. Kết quả thiết kế form danh sách mặt hàng ..................................................... 32
Hình 19. Kết quả thực thi form danh sách mặt hàng .................................................... 32
Hình 20. Form chi tiết bán hàng .................................................................................... 33
Hình 21. Cửa sổ Edit Columns ...................................................................................... 34
Hình 22. Kết quả thiết kế form chi tiết bán hàng .......................................................... 43
Hình 23. Kết quả thực thi form chi tiết bán hàng .......................................................... 44
Hình 24. Form thông tin giáo viên ................................................................................ 45
Hình 25. Form danh sách môn học ............................................................................... 47
Hình 26. Form phân công giảng dạy ............................................................................. 48
Hình 27. Form thông tin tài sản ..................................................................................... 51
Hình 28. Form danh sách đơn vị sử dụng ..................................................................... 52
Hình 29. Form quản lý tài sản ....................................................................................... 53
Hình 30. Form thông tin sinh viên ................................................................................ 56
Hình 31. Form danh sách khoa ...................................................................................... 58 iv
Hình 32. Form danh sách môn học ................................................................................ 60
Hình 33. Form quản lý điểm sinh viên .......................................................................... 61
Hình 34. Form tìm kiếm thông tin đơn giản .................................................................. 67
Hình 35. Form tìm kiếm thông tin theo nhiều điều kiện ............................................... 67
Hình 36. Form tìm kiếm thông tin khách hàng ............................................................. 69
Hình 37. Form tìm kiếm thông tin bán hàng ................................................................. 72
Hình 38. Form tìm kiếm thông tin bán hàng ................................................................. 74
Hình 39. Form tìm kiếm thông tin ................................................................................. 76
Hình 40. Form tìm kiếm thông tin khách hàng mua mặt hàng ...................................... 78
Hình 41. Form tìm kiếm thông tin khách hàng ............................................................. 80
Hình 42. Cửa sổ Add New Item .................................................................................... 81
Hình 43. Kết quả thiết kế form tìm kiếm khách hàng ................................................... 87
Hình 44. Kết quả thực thi form tìm kiếm khách hàng ................................................... 87
Hình 45. Kết quả tìm kiếm khách hàng theo tên ........................................................... 88
Hình 46. Kết quả tìm kiếm tất cả các khách hàng ......................................................... 88
Hình 47. Kết quả thiết kế form tìm kiếm mặt hàng ....................................................... 93
Hình 48. Kết quả tìm kiếm mặt hàng theo mã ............................................................... 93
Hình 49. Kết quả tìm kiếm mặt hàng theo tên mặt hàng ............................................... 94
Hình 50. Kết quả tìm kiếm tất cả mặt hàng ................................................................... 94
Hình 51. Form tìm kiếm thông tin bán hàng ................................................................. 95
Hình 52. Kết quả thiết kế form tìm kiếm thông tin bán hàng...................................... 102
Hình 53. Kết quả thực thi form tìm kiếm thông tin bán hàng ..................................... 103
Hình 54. Form tìm kiếm thông tin bán hàng ............................................................... 103
Hình 55. Kết quả thiết kế form tìm kiếm thông tin bán hàng...................................... 111
Hình 56. Kết quả thực thi form tìm kiếm thông tin bán hàng ..................................... 111
Hình 57. Form tìm kiếm thông tin các mặt hàng mà khách hàng đã mua ................... 112
Hình 58. Kết quả thiết kế form tìm kiếm thông tin mặt hàng khách hàng đã mua ..... 115
Hình 59. Kết quả thực thi form tìm kiếm thông tin mặt hàng khách hàng đã mua ..... 115
Hình 60. Form tìm kiếm thông tin số lần một mặt hàng đã mua bời khách hàng ....... 116
Hình 61. Kết quả thiết kế form tìm kiếm số lần mặt hàng khách hàng đã mua .......... 119
Hình 62. Kết quả thực thi form tìm kiếm số lần mặt hàng khách hàng đã mua .......... 120
Hình 63. Form tìm kiếm thông tin giáo viên ............................................................... 121
Hình 64. Form tìm kiếm môn học ............................................................................... 123
Hình 65. Tìm kiếm phân công giáo viên ..................................................................... 125
v
Hình 66. Tìm kiếm phân công giáo viên theo môn học .............................................. 127
Hình 67. Form tìm kiếm đơn vị ................................................................................... 129
Hình 68. Fom tìm kiếm tài sản .................................................................................... 131
Hình 69. Fom tìm kiếm tài sản thuộc đơn vị ............................................................... 133
Hình 70. Form tìm kiếm tài sản theo tình trạng .......................................................... 135
Hình 71. Form tìm kiếm môn học ............................................................................... 137
Hình 72. Form tìm kiếm thông tin về khoa ................................................................. 139
Hình 73.Form tìm kiếm sinh viên ............................................................................... 140
Hình 74. Form tìm kiếm điểm của sinh viên theo học kỳ ........................................... 142
Hình 75. Form tìm kiếm điểm sinh viên theo môn học .............................................. 144
Hình 76. Báo cáo dạng label in nhiều label trên một trang ......................................... 148
Hình 77. Báo cáo dạng label in trên một trang ........................................................... 149
Hình 78. Báo cáo dạng 1 bản ghi trên một trang ........................................................ 149
Hình 79. Cửa sổ Add New Item .................................................................................. 150
Hình 80. Cửa sổ Crystal Reports Gallery .................................................................... 151
Hình 81. Form điều khiển việc in giấy mời khách hàng ............................................. 153
Hình 82. Form điều khiển việc in hóa đơn bán hàng .................................................. 154
Hình 83. Giấy mời tham dự hội nghị khách hàng ....................................................... 155
Hình 84. Form điều khiển việc in giấy mời khách hàng ............................................. 156
Hình 85. Mẫu bảng kê bán hàng ................................................................................. 158
Hình 86. Hóa đơn bán hàng ......................................................................................... 158
Hình 87. Form điều khiển việc in hóa đơn .................................................................. 160
Hình 88. Form xem trƣớc khi in hóa đơn bán hàng .................................................... 162
Hình 89. Form điều khiển việc in báo cáo bán hàng ................................................... 166
Hình 90. Mẫu giấy mời khách hàng ............................................................................ 169
Hình 91. Cửa sổ Add New Item .................................................................................. 170
Hình 92. Cửa sổ Crystal Reports Gallery .................................................................... 171
Hình 93. Giao diện thiết kế báo cáo bằng Crystal Report ........................................... 171
Hình 94. Cửa sổ Format Editor ................................................................................... 174
Hình 95. Cửa sổ Databse Expert ................................................................................. 175
Hình 96. Cửa sổ Format Editor ................................................................................... 176
Hình 97. Cửa sổ Custom Style .................................................................................... 176
Hình 98. Kết quả thiết kế giấy mời khách hàng hoàn chỉnh ....................................... 177
vi
Hình 99. Kết quả thực thi in giấy mời khách hàng...................................................... 178
Hình 100. Form điều khiển việc in giấy mời khách hàng ........................................... 178
Hình 101. Kết quả thiết kế form in giấy mời khách hàng ........................................... 186
Hình 102. Kết quả sau khi thực hiện chức năng in giấy mời khách hàng. .................. 186
Hình 103. Cửa sổ Formula Name ................................................................................ 189
Hình 104. Cửa sổ Formula Workshop ......................................................................... 189
Hình 105. Kết quả thiết kế hóa đơn bán hàng bằng Crystal Report ............................ 192
Hình 106. Kết quả xem trƣớc hóa đơn bán hàng ......................................................... 192
Hình 107. Form in hóa đơn bảng kê bán hàng ............................................................ 193
Hình 108. Kết quả thiết kế form in hóa đơn, bảng kê bán hàng .................................. 205
Hình 109. Form điều khiển việc in ấn hóa đơn bán hàng ............................................ 205
Hình 110. Nội dung hóa đơn bán hàng sau khi đƣợc in ra máy in .............................. 206
Hình 111. Cửa sổ Select Resource. ............................................................................. 208
Hình 112. Kết quả thiết kế form xem trƣớc hóa đơn .................................................. 212
Hình 113. Kết quả thực thi form xem trƣớc hóa đơn .................................................. 213
Hình 114. Cửa sổ Formula Name ................................................................................ 215
Hình 115. Cửa sổ Formula Workshop ......................................................................... 215
Hình 116. Cửa sổ Insert Group .................................................................................... 218
Hình 117. Cửa sổ Create Running Total Field ............................................................ 219
Bảng 7. Các hàm để tính toán với nhóm của Crystal Report ...................................... 220
Hình 118. Cửa sổ Create Running Total Field ............................................................ 221
Hình 119. Cửa sổ Custom Style .................................................................................. 222
Hình 120. Kết quả thiết kế báo cáo thống kê bán hàng bằng Crystal Report ............. 223
Hình 121. Kết quả thực thi báo cáo bán hàng ............................................................. 224
Hình 122. Form điều khiển in báo cáo bán hàng ......................................................... 225
Hình 123. Cửa sổ thiết kế form xem trƣớc báo cáo. ................................................... 231
Hình 124. Kết quả thiết kế form điều khiển in báo cáo bán hàng ............................... 233
Hình 125. Kết quả thiết kế form xem trƣớc báo cáo bán hàng ................................... 233
Hình 126. Kết quả thực thi form in báo cáo bán hàng ................................................ 234
Hình 127. Kết quả thực thi form xem trƣớc báo cáo bán hàng. .................................. 234
Hình 128. Mẫu bảng phân công giảng dạy .................................................................. 235
Hình 129. Form in phân công giảng dạy ..................................................................... 236
Hình 130. Mẫu bảng phân công giảng dạy theo bộ môn ............................................ 238
Hình 131. Form in phân công giảng dạy ..................................................................... 239
vii
Hình 132. Mẫu bảng phân công giảng dạy theo môn học ........................................... 242
Hình 133. Form in phân công giảng dạy ..................................................................... 243
Hình 134. Mẫu bảng danh mục tài sản ........................................................................ 245
Hình 135. Form in danh mục tài sản ........................................................................... 246
Hình 136. Mẫu bảng danh mục tài sản theo đơn vị sử dụng ....................................... 248
Hình 137. Form điều khiển việc bảng danh mục tài sản ............................................. 249
Hình 138. Mẫu bảng điểm sinh viên ........................................................................... 252
Hình 139. Form điều khiển in bảng điểm sinh viên .................................................... 253
Hình 140. Mẫu bảng điểm sinh viên theo môn ........................................................... 255
Hình 141. Form điều khiển in bảng điểm sinh viên .................................................... 256
Hình 142. Menu kiểu các nút lệnh .............................................................................. 260
Hình 143. Menu dạng phân cấp .................................................................................. 260
Bảng 8. Bảng danh sách các loại dự án tạo bộ cài đặt ................................................ 262
Hình 144. Form quản lý bán hàng đã gắn menu ......................................................... 264
Hình 145. Cửa sổ Add New Item ................................................................................ 267
Hình 146. Kết quả thiết kế form quản lý ..................................................................... 267
Hình 147. Kết quả thực thi form quản lý .................................................................... 268
Hình 148. Cửa sổ Items Collection Editor .................................................................. 269
Hình 149. Kết quả thiết kế menu ................................................................................. 270
Hình 150. Kết quả thực thì form quản lý có menu ...................................................... 270
Hình 151. Cửa sổ Add New Project ............................................................................ 279
Hình 152. Cửa sổ File System ..................................................................................... 280
Hình 153. Cửa sổ Add Project Output Group ............................................................. 280
Hình 154. Cửa sổ Icon ................................................................................................. 281
Hình 155. Cửa sổ Select Item in Project ..................................................................... 281
Hình 156. Cửa sổ Add Files cho phép thêm các file cần thiết vào bộ cài đặt ............. 282
Hình 157. Cửa sổ Property Pages ................................................................................ 283
Hình 158. Cửa sổ Prerequisites ................................................................................... 284
Hình 159. Kết quả thiết kế bộ cài đặt .......................................................................... 285
Hình 160. Kết quả thực thi bộ cài đặt ......................................................................... 285
Hình 161. Form quản lý phân công giảng dạy đã gắn menu....................................... 286
Hình 162. Form quản lý tài sản đã gắn menu ............................................................. 289
Hình 163. Form quản lý điểm đã gắn menu ................................................................ 293
viii
DANH MỤC BẢNG
Bảng 1. Bảng dữ liệu khách hàng .................................................................................... 6
Bảng 2. Bảng dữ liệu mặt hàng ....................................................................................... 7
Bảng 3. Bảng chi tiết bán hàng ........................................................................................ 7
Bảng 4. Các hình thức tạo báo cáo bằng Crystal Report. ............................................ 151
Bảng 5. Các phần chính trên một báo cáo. .................................................................. 152
Bảng 6. Danh sách các trƣờng đặc biệt trong Crystal Report. .................................... 190
ix
BÀI 1. SỬ DỤNG VB.NET LẬP TRÌNH TRÊN FORM
ĐỂ CẬP NHẬT CƠ SỞ DỮ LIỆU
Mục tiêu
Sau bài học, sinh viên có khả năng:
- Kiến thức: Biết thiết kế Form và sử dụng VB.NET lập trình trên form để thực hiện
các thao tác cập nhật cơ sở dữ liệu: Nhập mới, thêm, xóa, sửa dữ liệu.
- Kỹ năng: Vận dụng đƣợc kiến thức thiết kế và lập trình trên form thực hiện cập nhật
cơ sở dữ liệu vào giải quyết các bài toán thực tế.
- Thái độ:
+ Nghiêm túc, sáng tạo
+ Tích cực tập luyện
Chuẩn bị dụng cụ, vật tư, thiết bị
Chuẩn bị máy tính có hệ điều hành Windows XP hoặc cao hơn, phần mềm
Microsoft Office, bộ gõ Tiếng Việt,phần mềm SQL Server 2000 hoặc cao hơn,phần
mềm Visual Studio 2008 hoặc cao hơn.
1.1. Tóm tắt kiến thức cần nhớ
Form là một đối tƣợng đƣợc sử dụng làm giao diện để thực hiện các tƣơng tác
với cơ sở dữ liệu trong đó có các thao tác cập nhật dữ liệu.
Form để cập nhật dữ liệu có nhiều dạng trong đó có một số dạng thông dụng.
Chẳng hạn nhƣ:
- Dạng bản ghi
x
Hình 1. Form dạng bản ghi
- Dạng lƣới hiển thị danh sách
Hình 2. Form dạng danh sách
- Dạng form một - nhiều
2
Hình 3. Form dạng một nhiều
Đôi khi còn phối hợp các dạng này với nhau để tạo thành một dạng mới.
Trên các form này thƣờng có có các đối tƣợng:
Lable (Nhãn): là điều khiển cho phép ngƣời sử dụng hiển thị chuỗi ký tự trên
biểu mẫu nhƣng không thể thay đổi chuỗi ký tự đó một cách trực tiếp.
Textbox (Ô nhập liệu) là một điều khiển cho phép nhận thông tin do ngƣời sử
dụng nhập vào. Đối với ô nhập liệu ta cũng có thể dùng để hiển thị thông tin, thông tin
này đƣợc đƣa vào tại thời điểm thiết kế hay thậm chí ở thời điểm thực thi ứng dụng.
Button: Nút lệnh là một điều khiển dùng để bắt đầu, ngắt hoặc kết thúc một quá
trình.Ngƣời sử dụng luôn có thể chọn một nút lệnh nào đó bằng cách nhấn chuột trên
nútlệnh đó. Hoặc có thể nhấn Enter để chọn nút lệnh khi nút đó đang có Focus.
Checkbox: Hộp kiểm hay còn gọi là hộp đánh dấu (Checkbox) là một điều
khiển đƣợc hiểnthị dƣới dạng một ô vuông. Ô vuông này hiển thị dấu lựa chọn nếu
nhƣ đƣợc chọn và đểtrắng nếu ô không đƣợc chọn. Điều khiển Check box đƣợc dùng
khi muốn nhận thôngtin từ ngƣời sử dụng theo kiểu Yes/No hoặc True/False. Ta cũng
có thể gom nhiềuđiều khiển lại một nhóm (dùng công cụ Group box) để hiển thị nhiều
khả năng lựachọn. Khi một check box đƣợc chọn thì giá trị của nó là 1; ngƣợc lại là 0.
3
Radio button: Công dụng của Radio button cũng tƣơng tự nhƣ Checkbox. Điểm
khác nhau chủ yếu giữa hai loại điều khiển này đó là trong cùng một nhóm (đƣợc tạo
bởi group boxhay picture box) tại mỗi thời điểm ta chỉ có thể chọn một radio button
nhƣng có thểđánh dấu chọn nhiều checkbox.
Listbox: Điều khiển này hiển thị một danh sách các đề mục mà ở đó ngƣời sử
dụng có thể chọn lựa một hoặc nhiều đề mục. List Box giới thiệu với ngƣời sử dụng
một danh sách các lựa chọn. Một cách mặc định các lựa chọn hiển thị theo chiều dọc
trên một cột vàbạn có thể thiết lập là hiển thị theo nhiều cột. Nếu số lƣợng các lựa
chọn nhiều vàkhông thể hiển thị hết trong danh sách thì một thanh trƣợt sẽ tự động
xuất hiện trênđiều khiển.
Combobox: Điều khiển Combobox có thể đƣợc xem là tích hợp giữa hai điều
khiển Textboxvà ListBox. Ngƣời sử dụng có thể chọn một đề mục bằng cách đánh
chuỗi văn bản vàoCombobox hoặc chọn một đề mục trong danh sách.
DataGridView: DataGridView là điều khiển chuyên dùng cho việc hiển thị dữ
liệu dƣới dạng bảng với rất nhiều chức năng nhƣ:
Có thể biểu diễn dữ liệu trên bảng trong Textbox, CheckBox hoặc
DropDownList.
Có khả năng sử dụng DataSource để kết nối với bất kì cơ sở dữ liệu nào,
với bất kì bảng nào.
Dữ liệu trên điều khiển đƣợc lƣu sẵn trong bộ nhớ cache nên tăng tốc độ
xử lý mà vẫn đảm bảo khả năng xử lý hàng trăm bản ghi một lúc.
DataGridView hoàn toàn có thể sử dụng với Data Binding giúp đơn giản hóa
công việc kết nối dữ liệu
DataGridView là điều khiển dùng để hiển thị dữ liệu, do đó nó phải đƣợc kết
nối với một nguồn dữ liệu. Nguồn dữ liệu đó có thể đƣợc gán thông qua thuộc tính
DataSource của DataGridView hoặc thông qua viết mã.
Ngoài ra có thể còn có nhiều điều khiển khác cũng hay đƣợc sử dụng.
Các điều khiền này dần dần đƣợc đề cập đến trong quá trình thực hành.
Muốn điều khiển đƣợc các đối tƣợng trên form để thực hiện việc cập nhật dữ
liệu, ngƣời sử dụng phải viết các đoạn mã lệnh nhằm thực hiện các thao tác tƣơng ứng
mong muốn. Ví dụ muốn thực hiện thao tác thêm mới một bản ghi vào cơ sở dữ liệu
4
thì phải viết đoạn mã thực hiện thao tác này, tƣơng tự nhƣ thế ngƣời sử dụng sẽ viết
các đoạn mã lệnh thực hiện các công việc cụ thể khác và gắn vào các sự kiện cho từng
đối tƣợng cụ thể.
Để xây dựng một form dùng để cập nhật dữ liệu cho một cơ sở dữ liệu bằng
VB.NET, thực hiện các bƣớc sau:
1. Thiết kế một form mới.
2. Kết nối form với cơ sở dữ liệu
3. Đƣa các điều khiển vào form.
4. Đặt thuộc tính cho form và các điều khiển trên form.
5. Lập trình cho các sự kiện thực thi các nhiệm vụ.
6. Chạy thử.
7. Hiệu chỉnh form để đạt yêu cầu.
8. Ghi kết quả.
1.2. Hướng dẫn thực hành
1.2.1. Bài tập mẫu
Để quản lý việc bán hàng của một cửa hàng, chủ cửa hàng thuê một ngƣời lập
trình xây dựng một chƣơng trình quản lý bán hàng.
Yêu cầu chƣơng trình phải:
- Quản lý đƣợc các thông tin về khách hàng, mặt hàng và các giao dịch bán
hàng trong mỗi lần mua bán.
- Tìm kiếm đƣợc các thông tin về khách hàng, mặt hàng, giao dịch bán hàng
theo yêu cầu.
- Xem in đƣợc báo cáo theo yêu cầu.
- Tạo đƣợc hệ thống menu trên form để thực thi các yêu cầu trên.
- Tạo bộ cài đặt cho ứng dụng để có thể cài đặt trên các máy tính.
Để thực hiện yêu cầu của chủ cửa hàng, ngƣời lập trình đã thiết kế một cơ sở
dƣ̃ liê ̣u quan hệ có lƣợc đồ nhƣ sau:
tblKhachHang(MaKH, HoTen, GioiTinh, DiaChi, DienThoai)
tblMatHang(MaMH, TenMatHang, DVT)
tblBanHang(SoHieuHD, MaKH, NgayMuaBan, NguoiBan)
tblChiTietBanHang(SoHieuHD, MaMH, SoLuong, DonGia)
5
Trong đó:
MaKH: Mã khách hàng;
HoTen: Họ tên khách hàng;
Gioitinh: Giới tính;
Diachi: Địa chỉ;
DienThoai: Điện thoại;
MaMH: Mã mặt hàng;
TenMatHang: Tên mặt hàng;
DVT: Đơn vị tính;
SoHieuHD: Số hiệu hóa đơn;
SoLuong: Số lƣợng;
DonGia: Đơn giá;
NgayMuaBan: Ngày mua bán.
NguoiBanHang: Ngƣời bán hàng
Ngƣời lập trình đã sử dụng hệ quản trị cơ sở dữ liệu SQL Server để tạo ra cơ sở
dữ là QLYBH.MDF đặt tại liệu Quản lý bán hàng có tên
D:\VB.NET\QuanLyBanHang\Data\QLYBH.MDF và có cấu trúc nhƣ sau:
Bảng tblKhachHang
Bảng 1. Bảng dữ liệu khách hàng
TT Tên trƣờng Kiểu dữ liệu Cho phép Null
MaKH Int Không 1
Hoten Nvarchar(50) Không 2
Gioitinh Nvarchar(3) Không 5
Diachi Nvarchar(150) Không 6
DienThoai Varchar(20) Có 7
6
Bảng tblMatHang
Bảng 2. Bảng dữ liệu mặt hàng
TT Tên trƣờng Kiểu dữ liệu Cho phép Null
MaMH Int Không 1
TenMatHang Nvarchar(50) Không 2
DVT Nvarchar(10) Không 3
Bảng tblBanHang
TT Tên trƣờng Kiểu dữ liệu Cho phép Null
SoHieuHD Int Không 1
MaKH Nvarchar(50) Không 2
NgayMuaBan DateTime Không 3
NguoiBanHang Nvarchar(50) Không 4
Bảng tblChiTietBanHang
Bảng 3. Bảng chi tiết bán hàng
TT Tên trƣờng Kiểu dữ liệu Cho phép Null
SoHieuHD Không 1 Int
MaMH Không 2 Int
SoLuong Không 3 Int
DonGia Nvarchar(50) Không 4
Công việc 1: Do công việc phải thƣờng xuyên làm việc với khách hàng và quản
lý các khách hàng của mình chủ cửa hàng yêu cầu nhà lập trình thiết kế một form dạng
7
bản ghi có tên frmThongTinKhachHang thực hiện việc cập nhật dữ liệu cho bảng
tblKhachHang theo mẫu sau:
Hình 4. Fom cập nhật thông tin khách hàng
Yêu cầu:
- Nhãn cập nhật khách hàng: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 18,
căn giữa form
- Các nhãn Mã khách hàng, Họ và tên, Giới tính, Địa chỉ, Điện thoại là các label
có font: Microsoft Sans Serif, chữ thƣờng, cỡ 9, các nhãn này có lề trái giống nhau.
- Các điều khiển để nhập mã khách hàng, họ và tên, giới tính, địa chỉ, điện thoại
là các textbox, điều khiển lựa chọn giới tính là một combobox có 2 giá trị để lựa chọn
là Nam và Nữ, mặc định là Nam
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút tìm kiếm: cho phép tìm kiếm theo mã khách hàng.
8
+ Nút thoát: cho phép đóng form hiện thời.
Công việc 2: Do công việc phải thƣờng xuyên làm việc với mặt hàng và quản lý
các mặt hàng trong cửa hàng của mình chủ cửa hàng yêu cầu nhà lập trình thiết kế một
form dạng lƣới có tên frmDanhSachMatHang để nhập dữ liệu cho bảng tblMatHang
theo mẫu:
Hình 5. Form hiển thị và cập nhậtdanh sách mặt hàng
Yêu cầu:
- Nhãn danh sách mặt hàng: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 18,
căn giữa form
- Sử dụng đối tƣợng DataGridView để hiển thị danh sách mặt hàng. Chế độ lựa
chọn dòng trên lƣới là FullRowSelect và không cho phép chọn nhiều bản ghi cùng lúc.
Có thể thao tác trực tiếp với dữ liệu ngay trên lƣới.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới vào lƣới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
9
+ Nút lƣu: cho phép cập nhật các thông tin trên lƣới vào cơ sở dữ liệu
+ Nút thoát: cho phép đóng form hiện thời.
Công việc 3: Để thực hiện việc bán hàng cho khách của mình chủ cửa hàng yêu
cầu nhà lập trình thiết kế một form dạng kết hợp bản ghi và lƣới có tên frmBanHang
để nhập và hiển thị dữ liệu cho bảng tblBanHang theo mẫu:
Hình 6. Form cập nhật thông tin bán hàng
Yêu cầu:
- Nhãn chi tiết bán hàng: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 18, căn
giữa form
- Các nhãn Mã khách hàng, Số hiệu hóa đơn, Ngày mua bánlà các label có font:
Microsoft Sans Serif, chữ thƣờng, cỡ 9, các nhãn này có lề trái giống nhau.
- Các điều khiển để nhập mã khách hàng, số hiệu hóa đơn là các textbox, điều
khiển lựa chọn ngày mua bán là một DateTimePickercho phép ngƣời sử dụng lựa chọn
ngày bán hàng, mặc định ngày mua bán là ngày hiện tại theo đồng hồ hệ thống.
- Các điều khiển:
10
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời khi ngƣời sử dụng xác nhận xóa từ
hộp thoại.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu khi
ngƣời sử dụng xác nhận xóa từ hộp thoại.
+ Nút tìm kiếm: cho phép tìm kiếm theo số hiệu hóa đơn.
+ Nút tìm: cho phép tìm theo mã khách hàng.
+ Nút thêm khách hàng: cho phép mở cửa sổ chi tiết thông tin khách hàng.
+ Nút thoát: cho phép đóng form hiện thời.
1.2.2. Hướng dẫn thực hiện:
Công việc 1: Thiết kế form dạng bản ghi theo mẫu
1. Phân tích yêu cầu:
Theo yêu cầu trên thì phải có một form chứa:
- Các đối tƣợng có nội dung “THÔNG TIN KHÁCH HÀNG”, “Mã khách
hàng”, “Họ và tên”, “Giới tính”, “Địa chỉ”, “Điện thoại” là các Label.
- Các đối tƣợng ô nhập mã khách hàng, họ và tên, địa chỉ, điện thoại là các
Textbox.
- Đối tƣợng giới tính là một Combobox với 2 giá trị là Nam, Nữ.
- Các nút “Thêm” “Xóa”, “Sửa”, “Lƣu”, “Tìm kiếm”, “Thoát” là các Button
- Đối tƣợng để di chuyển trên các bản ghi là đối tƣợng BindingNavigator.
2. Hướng dẫn thao tác
Nhƣ vậy, để thực hiện công việc thiết kế form dạng bản ghi có tên
frmThongTinKhachHang theo yêu cầu, ngƣời lập trình thực các bƣớc nhƣ sau:
1. Mở VB.NET
2. Tạo form mới
Trên thanh menu, chọn Project/Add New Item.
Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên
frmThongTinKhachHang vào ô Name rồi nhấn nút Add.
11
Hình 7. Cửa sổ Add New Item
3. Thiết lập kết nối với cơ sở dữ liệu QLYBH.MDF
Để tạo một kết nối với cơ sở dữ liệu QLYBH.MDF thì vào thực đơn Data chọn
Add New Data Source cửa sổ Data Source Configuration Wizard xuất hiện
Hình 8. Cửa sổ Data Source Configuration Wizard
12
Chọn biểu tƣợng Database và nhấn nút Next, cửa sổ Choose Data Source xuất
hiện, yêu cầu chọn kết nối cơ sở dữ liệu, nếu trƣớc đó chƣa tạo kết nối thì nhấn vào
New Connectionsau đó lựa chọn loại dữ liệu cần kết nối.
Hình 9. Cửa sổ Change Data Source
13
Hình 10. Cửa sổ Add Connection
Sau khi nhập các thông số kết nối và lựa chọn cơ sở dữ liệu cho báo cáo nhấn
vào OK để xác nhận thông tin kết nối và chuyển qua cửa sổ Data Source Configuration
Wizard.
14
Hình 11. Cửa sổ Data Source Configuration Wizard
Nhấn Next và để chuyển qua cửa sổ tiếp theo. Lựa chọ loại đối tƣợng cơ sở dữ
liệu nhƣ: Tables, Views, Store Procedures và Functions. Nhập tên cho DataSet cần tạo.
Hình 12. Hoàn thành việc kết nối với cơ sở dữ liệu
4. Thiết kế form theo mẫu và gắn các điều khiển với nguồn dữ liệu đã kết nối
a) Để tạo điều khiển label Thông tin khách hàng theo yêu cầu thực hiện:
15
Kéo điều khiển Label từ của sồ Toolbox vào form. Nháy phải chuột vào Label
chọn Properties và thiết lập các thuộc tính cho Label này:
Text: THÔNG TIN KHÁCH HÀNG
Font name: Microsoft Sans Serif
Font size: 18
Font bold: True
Trên menu chọn Format/Center in form/Horizontally để căn giữa.
Tiếp theo, trên thanh menu chọn Data / Show Data Source hoặc ấn tổ hợp phím
Shift + Alt + D để bật cửa sổ Data Source.
Từ cửa sổ Data Source chọn bảng tblKhachHang trong danh sách. Nhấn vào
mũi tên quay xuống bên phải của bảng tblKhachHang chọn Details để chuyển chế độ
hiển thị bảng tblKhachHang sang dạng chi tiết từng bản ghi. Nhấn vào mũi tên quay
xuống bên phải của cột GioiTinh của bảng tblKhachHang và chọn dạng hiển thị là
ComboBox.
Nhấn chuột và kéo bảng tblKhachHang này vào form.
Hình 13. Kết quả sau khi kéo bảng khách hàng vào form
Nháy phải chuột vào nhãn “Ma KH” chọn Properties và thiết lập các thuộc tính
cho nhãn này:
Font name: Microsoft Sans Serif
Font size: 9.
Các thuộc tính khác để mặc định.
16
Thực hiện tƣơng tự để hoàn thành yêu cầu với các label nhƣ: Họ và tên, Giới
tính, Địa chỉ, Điện thoại để thiết lập các thuộc tính về font name và font size.
Nháy phải chuột vào textbox MaKHTextbox chọn Properties và thiết lập các
thuộc tính cho textbox này:
Name: MaKHTextbox
Font name: Microsoft Sans Serif
Font size: 9
Thực hiện các thao tác tƣơng tự với các textbox khác nhƣ: HoTenTextbox,
DiaChiTextbox, DienThoaiTextbox
Nháy phải chuột vào GioiTinhCombobox chọn Properties và thiết lập các thuộc
tính cho Combobox này:
Name: GioiTinhCombobox
Font name: Microsoft Sans Serif
Font size: 9
Items: Collection (Nam/Nữ)
Kéo điều khiển Button từ cửa sổ Toolbox vào form. Nháy phải chuột vào
Button chọn Properties và thiết lập các thuộc tính cho Button này:
Name: ButtonThem
Font name: Microsoft Sans Serif
Font size: 9
Viết đoạn mã lệnh VB.NET trong sự kiện ButtonThem_Click nhƣ sau:
Private Sub ButtonThem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonThem.Click
MaKHTextBox.Text = ""
HotenTextBox.Text = ""
DiachiTextBox.Text = ""
DienThoaiTextBox.Text = ""
HotenTextBox.Enabled = True
DiachiTextBox.Enabled = True
17
DienThoaiTextBox.Enabled = True
GioitinhComboBox.Enabled = True
MaKHTextBox.Enabled = False
ButtonLuu.Enabled = True
ButtonThem.Enabled = False
HotenTextBox.Focus()
End Sub
Thực hiện các thao tác tƣơng tự với các nút lệnh khác nhƣ: ButtonSua,
ButtonXoa, ButtonTimKiem, ButtonThoat
Trong sự kiện ButtonXoa_Click viết mã lệnh nhƣ sau:
Private Sub ButtonXoa_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButtonXoa.Click
If MessageBox.Show("Bạn có chắc chắn muốn xóa khách hàng này?",
"Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) =
DialogResult.Yes Then
Dim oldRegionRow As QLYBHDataSet.tblKhachHangRow
oldRegionRow =
QLYBHDataSet.tblKhachHang.FindByMaKH(Convert.ToInt32(MaKHTextBox.
Text))
TblKhachHangTableAdapter.Delete(Convert.ToInt32(MaKHTextBox.Text))
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
18
End If
End Sub
Trong sự kiện ButtonSua_Click viết đoạn mã lệnh sau:
Private Sub ButtonSua_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ButtonSua.Click
If Not String.IsNullOrEmpty(MaKHTextBox.Text) Then
HotenTextBox.Enabled = True
DiachiTextBox.Enabled = True
DienThoaiTextBox.Enabled = True
GioitinhComboBox.Enabled = True
MaKHTextBox.Enabled = False
ButtonLuu.Enabled = True
ButtonSua.Enabled = False
HotenTextBox.Focus()
End If
End Sub
Trong sự kiện ButtonTimKiem _Click viết đoạn mã lệnh sau:
Private Sub ButtonTimKiem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonTimKiem.Click
If Not String.IsNullOrEmpty(MaKHTextBox.Text) Then
TblKhachHangBindingSource.Filter = "MaKH='" &
MaKHTextBox.Text & "'"
19
Me.TableAdapterManager.UpdateAll(Me.QLYBHDataSet)
Else
MessageBox.Show("Chưa nhập mã khách hàng để tìm
kiếm", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Error)
MaKHTextBox.Focus()
End If
End Sub
Trong sự kiện ButtonLuu_Click viết đoạn mã lệnh sau:
Private Sub ButtonLuu_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ButtonLuu.Click
'Đoạn mã này thực hiện việc kiểm tra dữ liệu ở ô mã khách hàng để quyết
định thực hiện việc thêm mới một bản ghi hay cập nhật thông tin của bản
ghi đã có.
If MaKHTextBox.Text = "" Then
Dim kh As QLYBHDataSet.tblKhachHangRow
kh = Me.QLYBHDataSet.tblKhachHang.NewtblKhachHangRow()
kh.Diachi = DiachiTextBox.Text
kh.DienThoai = DienThoaiTextBox.Text
kh.Hoten = HotenTextBox.Text
kh.Gioitinh = GioitinhComboBox.SelectedItem.ToString()
Me.QLYBHDataSet.tblKhachHang.Rows.Add(kh)
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
20
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
Else
TblKhachHangTableAdapter.UpdateKhachHang(HotenTextBox.Text,
GioitinhComboBox.SelectedItem.ToString(), DiachiTextBox.Text,
DienThoaiTextBox.Text, Convert.ToInt32(MaKHTextBox.Text))
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
End If
HotenTextBox.Enabled = False
DiachiTextBox.Enabled = False
DienThoaiTextBox.Enabled = False
GioitinhComboBox.Enabled = False
MaKHTextBox.Enabled = True
ButtonLuu.Enabled = False
If MaKHTextBox.Text = "" Then
ButtonThem.Enabled = False
Else
ButtonSua.Enabled = False
End If
End Sub
21
Trong sự kiện ButtonThoat_Click viết đoạn mã lệnh sau:
Private Sub ButtonThoat_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonThoat.Click
'Câu lệnh này để đóng form hiện tại.
Me.Close()
End Sub
Điều khiển TblKhachHangBindingNavigator để thực hiện việc di chuyển trên
các bản ghi của bảng tblKhachHang đƣợc VB.NET cung cấp sẵn, mặc định khi kéo
bảng tblKhachHang từ cửa sổ Data Source vào form thì đối tƣợng
TblKhachHangBindingNavigator cũng đƣợc thêm vào form chỉ việc kéo điều khiển
này đặt vào vị trí theo yêu cầu.
Chạy thử form để kiểm tra kết quả bằng cách nhấn vào phím F5 trên bàn phím
hoặc vào Build chọn Run.
3. Kết quả thiết kế
Hình 14. Kết quả thiết kế form thông tin khách hàng
22
4. Kết quả thực thi
Hình 15. Kết quả thực thi form thông tin khách hàng
Công việc 2: Thiết kế form cập nhật thông tin mặt hàng
23
Hình 16. Form danh sách mặt hàng
1. Phân tích yêu cầu:
Theo mẫu trên thì phải có một form chứa:
- Các đối tƣợng có nội dung “THÔNG TIN KHÁCH HÀNG” là các Label.
- Đối tƣợng hiển thị danh sách mặt hàng là DataGridView
- Các nút “Thêm” “Xóa”, “Sửa”, “Lƣu”, “Tìm kiếm”, “Thoát” là các Button
- Đối tƣợng để di chuyển trên các bản ghi là đối tƣợng BindingNavigator.
2. Hướng dẫn thao tác:
Để thực hiện việc thiết kế form dạng lƣới có tên frmDanhSachMatHang để
nhập dữ liệu cho bảng tblMatHang ngƣời lập trình đã thực hiện các bƣớc sau:
1. Tạo form mới với tên frmDanhSachMatHang bằng cách thực hiện các thao
tác: Trên thanh menu, chọn Project/Add New Item.
Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên
frmDanhSachMatHang vào ô Name rồi nhấn nút Add.
2. Thiết kế các điều khiển: Nhãn “Danh sách mặt hàng”, các nút lệnh Thêm,
Sửa, Xóa, Tìm kiếm, Thoát trên form dạng lƣới tƣơng tự nhƣ với các điều khiển tƣơng
ứng của công việc 1 đã thao tác trên form frmThongTinKhachHang.
24
3. Chọn bảng tblMatHang từ cửa sổ Data Source và kéo vào form. Điều chỉnh
kích thƣớc và vị trí của lƣới cho phù hợp.
Nháy phải chuột vào lƣới, chọn Properties để thiết lập các thuộc tính cho lƣới
nhƣ sau:
Name: TblMatHangDataGridView
Selection Mode: FullRowSelect
MultiSelect: False.
Các thuộc tính khác để mặc định.
Nhấn vào nút ở thuộc tính Columns trong cửa sổ Properties của lƣới. Xuất
hiện cửa sổ Edit Columns.
Hình 17. Cửa sổ Edit Columns
Nhấn vào các cột ở khung Selected Columns bên trái và thay đổi giá trị
HeaderText ở khung Bound Column Properties bên phải cho phù hợp với yêu cầu.
Nhấn OK để áp dụng tiêu đề cho các cột của lƣới danh sách mặt hàng.
Điều khiển TblMatHangBindingNavigator để thực hiện việc di chuyển trên các
bản ghi của bảng tblMatHang đƣợc VB.NET cung cấp sẵn, mặc định khi kéo bảng
tblMatHang từ cửa sổ Data Source vào form thì đối tƣợng
TblMatHangBindingNavigator cũng đƣợc thêm vào form chỉ việc kéo điều khiển này
đặt vào vị trí theo yêu cầu.
Viết mã lệnh cho các điều khiển nhƣ sau:
25
Mặc định khi kéo lƣới vào form sẽ phát sinh mã trong sự kiện Load của form
frmDanhSachMatHang nhƣ sau:
Private Sub frmDanhSachMatHang_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
'TODO: This line of code loads data into the
'QLYBHDataSet.tblMatHang' table. You can move, or remove it, as
needed.
Me.TblMatHangTableAdapter.Fill(Me.QLYBHDataSet.tblMatHang)
End Sub
Nút lệnh Thêm:
Private Sub ButtonThem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButtonThem.Click
'Đoạn mã này thực hiện việc kiểm tra dữ liệu ở ô mã khách hàng để quyết
định thực hiện việc thêm mới một bản ghi hay cập nhật thông tin của bản ghi
đã có.
MaKHTextBox.Text = ""
HotenTextBox.Text = ""
DiachiTextBox.Text = ""
DienThoaiTextBox.Text = ""
HotenTextBox.Enabled = True
DiachiTextBox.Enabled = True
DienThoaiTextBox.Enabled = True
GioitinhComboBox.Enabled = True
26
MaKHTextBox.Enabled = False
ButtonLuu.Enabled = True
ButtonThem.Enabled = False
HotenTextBox.Focus()
If MaKHTextBox.Text = "" Then
Dim kh As QLYBHDataSet.tblKhachHangRow
kh = Me.QLYBHDataSet.tblKhachHang.NewtblKhachHangRow()
kh.Diachi = DiachiTextBox.Text
kh.DienThoai = DienThoaiTextBox.Text
kh.Hoten = HotenTextBox.Text
kh.Gioitinh = GioitinhComboBox.SelectedItem.ToString()
Me.QLYBHDataSet.tblKhachHang.Rows.Add(kh)
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
End If
End Sub
Nút lệnh Xóa
Private Sub ButtonXoa_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButtonXoa.Click
'Đoạn mã này sẽ xác nhận việc xóa dữ liệu của người sử dụng bằng cách
xuất hiện một hộp thoại xác nhận xóa. Khi người dùng chọn Yes thì hệ thống
sẽ xóa bản ghi được lựa chọn.
27
If MessageBox.Show("Bạn có chắc chắn muốn xóa khách hàng này?",
"Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) =
DialogResult.Yes Then
Dim oldRegionRow As QLYBHDataSet.tblKhachHangRow
oldRegionRow =
QLYBHDataSet.tblKhachHang.FindByMaKH(Convert.ToInt32(MaKHTextBox.
Text))
TblKhachHangTableAdapter.Delete(Convert.ToInt32(MaKHTextBox.Text))
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
End If
End Sub
Nút lệnh Sửa:
Private Sub ButtonSua_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ButtonSua.Click
If Not String.IsNullOrEmpty(MaKHTextBox.Text) Then
HotenTextBox.Enabled = True
DiachiTextBox.Enabled = True
DienThoaiTextBox.Enabled = True
GioitinhComboBox.Enabled = True
MaKHTextBox.Enabled = False
28
ButtonLuu.Enabled = True
ButtonSua.Enabled = False
HotenTextBox.Focus()
End If
End Sub
Nút lệnh Tìm kiếm:
Private Sub ButtonTimKiem_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles ButtonTimKiem.Click
'Đoạn mã này thực hiện việc tìm kiếm khách hàng dựa theo mã khách hàng.
If Not String.IsNullOrEmpty(MaKHTextBox.Text) Then
TblKhachHangBindingSource.Filter = "MaKH='" & MaKHTextBox.Text
& "'"
Me.TableAdapterManager.UpdateAll(Me.QLYBHDataSet)
Else
MessageBox.Show("Chưa nhập mã khách hàng để tìm kiếm", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
MaKHTextBox.Focus()
End If
End Sub
Nút lệnh Lƣu:
Private Sub ButtonLuu_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ButtonLuu.Click
If MaKHTextBox.Text = "" Then
29
Dim kh As QLYBHDataSet.tblKhachHangRow
kh = Me.QLYBHDataSet.tblKhachHang.NewtblKhachHangRow()
kh.Diachi = DiachiTextBox.Text
kh.DienThoai = DienThoaiTextBox.Text
kh.Hoten = HotenTextBox.Text
kh.Gioitinh = GioitinhComboBox.SelectedItem.ToString()
Me.QLYBHDataSet.tblKhachHang.Rows.Add(kh)
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
Else
'TblKhachHangTableAdapter.UpdateKhachHang(HotenTextBox.Text,
GioitinhComboBox.SelectedItem.ToString(), DiachiTextBox.Text,
DienThoaiTextBox.Text, Convert.ToInt32(MaKHTextBox.Text))
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
End If
HotenTextBox.Enabled = False
DiachiTextBox.Enabled = False
DienThoaiTextBox.Enabled = False
30
GioitinhComboBox.Enabled = False
MaKHTextBox.Enabled = True
ButtonLuu.Enabled = False
If MaKHTextBox.Text = "" Then
ButtonThem.Enabled = False
Else
ButtonSua.Enabled = False
End If
End Sub
Nút lệnh Thoát:
Private Sub ButtonThoat_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButtonThoat.Click
Me.Close()
End Sub
31
3. Kết quả thiết kế
Hình 18. Kết quả thiết kế form danh sách mặt hàng
4. Kết quả thực thi
Hình 19. Kết quả thực thi form danh sách mặt hàng
Công việc 3: Thiết kế form dạng kết hợp bản ghi và lƣới có tên frmBanHang
32
Hình 20. Form chi tiết bán hàng
1. Phân tích yêu cầu
Theo yêu cầu trên thì phải có một form chứa:
- Các đối tƣợng có nội dung “CHI TIẾT BÁN HÀNG”, “Số hiệu hóa đơn”,
“Mã khách hàng”, “Ngày mua bán”, là các Label.
- Các đối tƣợng ô nhập mã khách hàng, số hiệu hóa đơn, ngƣời bán hàng là các
Textbox.
- Đối tƣợng lựa chọn ngày tháng là điều khiển DateTimePicker.
- Các nút “Thêm khách hàng”, Thêm, Sửa, Xóa, Lƣu, “Tìm kiếm”, “Kết thúc”
là các điều khiển Button
- Danh sách các mặt hàng trong một hóa đơn là một điều khiển DataGridView.
- Điều khiển cho phép di chuyển qua lại giữa các hóa đơn là BindingNavigator.
2. Hướng dẫn thao tác.
Để hoàn thành việc thiết kế form dạng kết hợp bản ghi và lƣới có tên
frmBanHang ngƣời lập trình đã tiến hành các công việc sau:
1. Tạo form mới với tên frmBanHang bằng cách thực hiện các thao tác: Trên
thanh menu, chọn Project/Add New Item.
Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên
frmBanHang vào ô Name rồi nhấn nút Add. 33
2. Từ cửa sổ Data Source chọn bảng tblBanHang. Nhấn vào mũi tên quay
xuống bên phải của bảng tblBanHang chọn kiểu hiển thị là Details.
3. Kéo bảng tblBanHang và tblChiTietHoaDon từ cửa sổ Data Source vào form.
Điều chỉnh vị trí và kích thƣớc cho phù hợp với yêu cầu.
4. Sửa nhãn cho các label cho đúng yêu cầu.
5. Nháy chuột phải vào lƣới hiển thị chi tiết hóa đơn chọn Properties để thiết
lập các thuộc tính cho lƣới:
RowHeadersVisible: False.
MultiSelect: False.
SelectionMode: FullRowSelect.
6. Nhấn vào nút ở thuộc tính Columns trong cửa sổ Properties của lƣới. Xuất
hiện cửa sổ Edit Columns.
Hình 21. Cửa sổ Edit Columns
Thay đổi thuộc tính HeaderText các cột cho phù hợp với yêu cầu. Thiết lập
thuộc tính AutoSizeMode cho các cột “Số hóa đơn”, “Số lƣợng”, “Đơn giá” là
ColumnHeader, cột “Mặt hàng” là DisplayedCells.
Để thay đổi kiểu hiển thị cho cột mặt hàng thành dạng ComboBox cần thiết lập
các thuộc tính cho cột MaMH nhƣ sau:
DataPropertyName: MaMH.
34
DataSource: TblMatHangBindingSource.
DisplayMember: TenMatHang.
ValueMember: MaMH.
ColumnType: DataGridViewComboBoxColumn.
DisplayStyle: DropDownButton.
Các thuộc tính còn lại để giá trị mặc định.
Nhấn OK để cập nhật lƣới hiển thị chi tiết hóa đơn.
Điều khiển TblBanHangBindingNavigator để thực hiện việc di chuyển trên các
bản ghi của bảng tblBanHang đƣợc VB.NET cung cấp sẵn, mặc định khi kéo bảng
tblBanHang từ cửa sổ Data Source vào form thì đối tƣợng
TblBanHangBindingNavigator cũng đƣợc thêm vào form chỉ việc kéo điều khiển này
đặt vào vị trí theo yêu cầu.
Kéo điều khiển Button từ cửa sổ Toolbox vào form và thay đổi thuộc tính cho
Button tƣơng tự nhƣ phần trên.
Viết mã lệnh cho các điều khiển trên form nhƣ sau:
Sự kiện form load.
Private Sub frmBanHang_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'QLYBHDataSet.tblMatHang'
table. You can move, or remove it, as needed.
Me.TblMatHangTableAdapter.Fill(Me.QLYBHDataSet.tblMatHang)
'TODO: This line of code loads data into the
'QLYBHDataSet.tblChiTietHoaDon' table. You can move, or remove it, as
needed.
Me.TblChiTietHoaDonTableAdapter.Fill(Me.QLYBHDataSet.tblChiTietHoaDon
)
'TODO: This line of code loads data into the 'QLYBHDataSet.tblBanHang'
table. You can move, or remove it, as needed.
Me.TblBanHangTableAdapter.Fill(Me.QLYBHDataSet.tblBanHang)
35
End Sub
Sự kiện Click của nút Kết thúc:
Private Sub ButtonThemKH_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonThemKH.Click
'Khai báo đối tượng kiểu form thông tin khách hàng
Dim frm As frmThongTinKhachHang
'Hiển thị form ở trên cùng
frm.ShowDialog()
End Sub
Sự kiện TextChange của ô nhập mã khách hàng.
Private Sub MaKHTextBox_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
MaKHTextBox.TextChanged
'Nếu mã khách hàng là số và khác 0
If MaKHTextBox.Text <> "0" And
IsNumeric(MaKHTextBox.Text) Then
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Thiết lập câu lệnh tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT * FROM tblKhachHang WHERE
MaKH=" & MaKHTextBox.Text
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
36
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
'Nếu tồn tại mã khách hàng
If ds.Tables(0).Rows.Count > 0 Then
TextBoxTenKH.Text =
ds.Tables(0).Rows(0).Item("HoTen").ToString()
Else
'Thông báo
MessageBox.Show("Mã khách hàng không đúng",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
MaKHTextBox.Focus()
End If
cn.Close()
End Using
End Using
End If
End Sub
Sự kiện Click của nút Kết thúc:
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
Me.Close()
End Sub
Sự kiện Click của nút Tìm kiếm:
Private Sub ButtonTimKiem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
37
ButtonTimKiem.Click
If Not String.IsNullOrEmpty(SoHieuHDTextBox.Text) Then
If IsNumeric(SoHieuHDTextBox.Text) Then
'Lọc dữ liệu nguồn với giá trị nhập vào ô số hóa đơn
TblBanHangBindingSource.Filter = "SoHieuHD = '" &
SoHieuHDTextBox.Text & "'"
Me.TableAdapterManager.UpdateAll(Me.QLYBHDataSet)
If TblBanHangBindingSource.Count <= 0 Then
MessageBox.Show("Số hóa đơn không đúng", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
MaKHTextBox.Text = "0"
TextBoxTenKH.Text = Nothing
SoHieuHDTextBox.Focus()
End If
Else
'Thông báo
MessageBox.Show("Số hóa đơn phải là giá trị số.",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
SoHieuHDTextBox.Focus()
End If
Else
'Thông báo
MessageBox.Show("Chưa nhập số hóa đơn", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error)
SoHieuHDTextBox.Focus()
End If
End Sub
Sự kiện Click của nút Lƣu:
38
Private Sub ButtonLuu_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ButtonLuu.Click
If MaKHTextBox.Text = "" Then
Dim kh As QLYBHDataSet.tblKhachHangRow
kh = Me.QLYBHDataSet.tblKhachHang.NewtblKhachHangRow()
kh.Diachi = DiachiTextBox.Text
kh.DienThoai = DienThoaiTextBox.Text
kh.Hoten = HotenTextBox.Text
kh.Gioitinh = GioitinhComboBox.SelectedItem.ToString()
Me.QLYBHDataSet.tblKhachHang.Rows.Add(kh)
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
Else
'TblKhachHangTableAdapter.UpdateKhachHang(HotenTextBox.Text,
GioitinhComboBox.SelectedItem.ToString(), DiachiTextBox.Text,
DienThoaiTextBox.Text, Convert.ToInt32(MaKHTextBox.Text))
Me.TblKhachHangTableAdapter.Update(Me.QLYBHDataSet.tblKhachHang)
Me.TblKhachHangTableAdapter.Fill(Me.QLYBHDataSet.tblKhachHang)
End If
39
HotenTextBox.Enabled = False
DiachiTextBox.Enabled = False
DienThoaiTextBox.Enabled = False
GioitinhComboBox.Enabled = False
MaKHTextBox.Enabled = True
ButtonLuu.Enabled = False
If MaKHTextBox.Text = "" Then
ButtonThem.Enabled = False
Else
ButtonSua.Enabled = False
End If
End Sub
Sự kiện Click của nút Sửa:
Private Sub ButtonSua_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonSua.Click
MaKHTextBox.Enabled = False
NguoiBanHangTextBox.Enabled = False
SoHieuHDTextBox.Enabled = False
ButtonThem.Enabled = True
ButtonSua.Enabled = False
ButtonXoa.Enabled = False
ButtonLuu.Enabled = True
End Sub
Sự kiện Click của nút Xóa:
40
Private Sub ButtonXoa_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButtonXoa.Click
If MessageBox.Show("Bạn có chắc chắn muốn xóa hóa đơn này?", "Xác
nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) =
Windows.Forms.DialogResult.Yes Then
'Kiểm tra nếu số hóa đơn để trống
If Not String.IsNullOrEmpty(SoHieuHDTextBox.Text) Then
'Kiểm tra số hóa đơn có phải là giá trị số
If IsNumeric(SoHieuHDTextBox.Text) Then
'Lọc dữ liệu nguồn với giá trị nhập vào ô số hóa đơn
TblBanHangBindingSource.Filter = "SoHieuHD = '" &
SoHieuHDTextBox.Text & "'"
Me.TableAdapterManager.UpdateAll(Me.QLYBHDataSet)
If TblBanHangBindingSource.Count <= 0 Then
MessageBox.Show("Số hóa đơn không đúng", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error)
MaKHTextBox.Text = "0"
TextBoxTenKH.Text = Nothing
SoHieuHDTextBox.Focus()
Else
'Thực hiện xóa
TblBanHangTableAdapter.Delete(Convert.ToInt32(SoHieuHDTextBox.Text))
'Thông báo
MessageBox.Show("Xóa hóa đơn thành công.", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information)
SoHieuHDTextBox.Focus()
Me.TblBanHangTableAdapter.Update(Me.QLYBHDataSet.tblBanHang)
'Lọc bảng theo điều kiện luôn đúng để hiển thị danh sách hóa
đơn bán hàng còn lại
41
TblBanHangBindingSource.Filter = "SoHieuHD <> 0"
'Cập nhật thông tin hiển thị
Me.TblMatHangTableAdapter.Fill(Me.QLYBHDataSet.tblMatHang)
'TODO: This line of code loads data into the
'QLYBHDataSet.tblChiTietHoaDon' table. You can move, or remove it, as
needed.
Me.TblChiTietHoaDonTableAdapter.Fill(Me.QLYBHDataSet.tblChiTietHoaDon
)
'TODO: This line of code loads data into the
'QLYBHDataSet.tblBanHang' table. You can move, or remove it, as needed.
Me.TblBanHangTableAdapter.Fill(Me.QLYBHDataSet.tblBanHang)
End If
Else
'Thông báo
MessageBox.Show("Số hóa đơn phải là giá trị số.", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error)
SoHieuHDTextBox.Focus()
End If
Else
'Thông báo
MessageBox.Show("Chưa nhập số hóa đơn", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error)
SoHieuHDTextBox.Focus()
End If
End If
End Sub
Sự kiện Click của nút Thêm:
Private Sub ButtonThem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonThem.Click
42
MaKHTextBox.Text = 0
TextBoxTenKH.Text = Nothing
NguoiBanHangTextBox.Enabled = True
NguoiBanHangTextBox. Text = Nothing
SoHieuHDTextBox.Text = 0
'Xóa dữ liệu nguồn của lưới chi tiết hóa đơn
TblChiTietHoaDonDataGridView.DataSource = Nothing
'Thêm mới một dòng cho lưới
TblChiTietHoaDonDataGridView.Rows.Add()
ButtonThem.Enabled = False
ButtonSua.Enabled = False
ButtonXoa.Enabled = False
ButtonLuu.Enabled = True
End Sub
3. Kết quả thiết kế
Hình 22. Kết quả thiết kế form chi tiết bán hàng
43
4. Kết quả thực thi
Hình 23. Kết quả thực thi form chi tiết bán hàng
1.2.3. Bài tập thực hành
Bài tập số 1. Để quản lý việc phân công giảng dạy trong một học kỳ cho giáo
viên của khoa CNTT, khoa yêu cầu thiết kế một cơ sở dữ liệu quan hệ có tên
QLYGD.MDF trong đó có các bảng và có lƣợc đồ nhƣ sau:
tblGiaoVien(MaGV, HoTen, BoMon, DMGD)
tblMonHoc(Mamon, Tenmon, SoTinChi)
tblPhanCong(MaGV, MaMon, LHP, SSO)
Trong đó:
MaGV: Mã giáo viên;
Hoten: Họ tên giáo viên;
BoMon: Tên bộ môn;
DMGD: Định mức giảng dạy;
Mamon: Mã môn học;
Tenmon: Tên môn học;
SoTinChi: Số tín chỉ;
MaGV: Mã giáo viên;
44
LHP: Tên lớp học phần;
SSO: Sĩ số lớp học phần.
Công việc 1: Sƣ̉ du ̣ng m ột hệ quản trị cơ sở dữ liệu SQL Server thƣ̣c hiê ̣n các
công việc sau:
a) Tạo cơ s ở dữ liệu QLYGD.MDF và cấu trúc các bảng trên v ới kiểu dữ liệu
tùy chọn cho phù hợp.
Yêu cầu:
- Chọn kiểu dữ liệu cho các trƣờng phù hợp giúp dễ dàng xử lý dữ liệu
- Mỗi bảng phải chỉ ra đƣợc khóa chính và các ràng buộc dữ liệu nếu có thể.
b) Tạo mối quan hệ giữa các bảng dữ liệu
Công việc 2: Thiết kế các form để thực hiện cập nhật dữ liệu cho các bảng trên:
Yêu cầu:
1. Thiết kế form dạng bản ghi thực hiện việc cập nhật dữ liệu cho bảng
tblGiaoVien theo mẫu sau:
Hình 24. Form thông tin giáo viên
Yêu cầu:
45
- Nhãn thông tin giáo viên: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14,
mầu xanh lá, căn giữa form
- Các nhãn Mã giáo viên, Họ và tên, Bộ môn, Định mức GD có font: Microsoft
Sans Serif, chữ thƣờng, cỡ 9, các nhãn này có lề trái giống nhau.
- Các điều khiển để nhập Mã giáo viên, Họ và tên, Bộ môn, Định mức GD là
các textbox đƣợc gắn kết với cơ sở dữ liệu.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút tìm: cho phép tìm kiếm theo mã giáo viên.
+ Nút đóng: cho phép đóng form hiện thời.
- Form thông tin giáo viên có kiểu FixedSingle, không có các nút phóng to, thu
nhỏ trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
2. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu cho bảng tblMonHoc
theo mẫu sau:
46
Hình 25. Form danh sách môn học
Yêu cầu:
- Nhãn danh sách môn học: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14,
mầu xanh thẫm, căn giữa form
- Lƣới hiển thị danh sách môn học:
+ Gồm 3 cột có tiêu đề là Mã môn, Tên môn, Số tín chỉ.
+ Độ rộng của cột Mã môn, Số tín chỉ vừa đủ để hiển thị nội dung tiêu đề cột.
+ Độ rộng của cột Tên môn tự động thay đổi để phù hợp với nội dung dữ liệu
hiển thị.
+ Chế độ chọn dữ liệu trên lƣới là toàn bộ dòng.
+ Không hiển thị phần tiêu đề của dòng.
+ Không cho phép chọn nhiều dòng đồng thời trên lƣới.
+ Cho phép cập nhật dữ liệu trực tiếp trên lƣới.
47
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút đóng: cho phép đóng form hiện thời.
- Form danh sách môn học có kiểu FixedSingle, không có các nút phóng to, thu
nhỏ trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
3. Thiết kế form dạng một nhiều thực hiện việc cập nhật dữ liệu cho bảng
tblPhanCong theo mẫu sau:
Hình 26. Form phân công giảng dạy
Yêu cầu:
- Nhãn danh sách môn học: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14,
mầu xanh thẫm, căn giữa form
- Lƣới hiển thị danh sách phân công giảng dạy:
+ Gồm 4 cột có tiêu đề là Mã giáo viên, Môn học, Lớp học phần, Sĩ số.
48
+ Độ rộng của cột Mã giáo viên, Lớp học phần, Sĩ số vừa đủ để hiển thị nội
dung tiêu đề cột.
+ Độ rộng của cột Môn học tự động thay đổi để phù hợp với nội dung dữ liệu
hiển thị.
+ Dữ liệu môn học hiển thị ở mỗi dòng trên lƣới phân công giảng dạy là dạng
ComboBox. Dữ liệu nguồn lấy từ bảng tblMonHoc, thông tin hiển thị là cột Tên môn,
thông tin lƣu trữ là cột mã môn.
+ Chế độ chọn dữ liệu trên lƣới là toàn bộ dòng.
+ Không hiển thị phần tiêu đề của dòng.
+ Không cho phép chọn nhiều dòng đồng thời trên lƣới.
+ Cho phép cập nhật dữ liệu trực tiếp trên lƣới.
+ Dữ liệu phân công giảng dạy liên kết trực tiếp với phần thông tin giáo viên ở
phía trên. Khi di chuyển qua danh sách các giáo viên trong khoa thì lƣới dữ liệu phân
công cũng thay đổi tƣơng ứng.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời trong danh sách giáo viên.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút đóng: cho phép đóng form hiện thời.
- Form danh sách môn học có kiểu FixedSingle, không có các nút phóng to, thu
nhỏ trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
Bài tập số 2. Để xây dựng một chƣơng trình quản lý tài sản của các đơn vị
trong một cơ quan. Thủ trƣởng cơ quan yêu cầu đơn vị thiết kế tổ chức một cơ sở dữ
liệu QLTAISAN.MDF có các bảng và lƣợc đồ quan hệ nhƣ sau:
tblDonVi(MaDV, TenDV, ViTri, SoNhanVien)
tblTaiSan(MaTS, TenTS, DVT, HSD)
tblQuanLy(MaDV, MaTS, SoLuong, NgayCap, TinhTrang)
Trong đó:
49
MaDV: Mã đơn vị;
TenDV: Tên đơn vị
ViTri: Vị trí;
SoNhanVien: Số nhân viên;
MaTS: Mã tài sản;
TenTS: Tên tài sản;
DVT: Đơn vị tính;
HSD: Hạn sử dụng;
SoLuong: Số lƣợng;
NgayCap: Ngày cấp;
TinhTrang: Tình trạng.
Công việc 1. Là một ngƣời lập trình, hãy sử dụng một hệ quản trị cơ sở dữ liệu
SQL Server thƣ̣c hiê ̣n các công việc sau:
a) Tạo cơ s ở dữ liệu QLTAISAN.MDF và cấu trúc các bảng trên v ới kiểu dữ
liệu tùy chọn cho phù hợp.
Yêu cầu:
- Chọn kiểu dữ liệu cho các trƣờng phù hợp giúp dễ dàng xử lý dữ liệu
- Mỗi bảng phải chỉ ra đƣợc khóa chính và các ràng buộc dữ liệu nếu có thể.
b) Tạo mối quan hệ giữa các bảng dữ liệu
Công việc 2. Là một ngƣời lập trình, hãy thiết kế các form để thực hiện cập nhật
dữ liệu cho các bảng trên:
1. Thiết kế form dạng bản ghi thực hiện việc cập nhật dữ liệu tài sản theo mẫu
sau.
50
Hình 27. Form thông tin tài sản
Yêu cầu:
- Nhãn thông tin tài sản: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14, mầu
xanh thẫm, căn giữa form
- Các nhãn Mã tài sản, Tên tài sản, Đơn vị tính, Hạn sử dụng có font: Microsoft
Sans Serif, chữ thƣờng, cỡ 9, các nhãn này có lề trái giống nhau.
- Các điều khiển để nhập Mã tài sản, Tên tài sản, Đơn vị tính, Hạn sử dụng là
các textbox đƣợc gắn kết với cơ sở dữ liệu.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút tìm: cho phép tìm kiếm theo mã tài sản.
+ Nút đóng: cho phép đóng form hiện thời.
51
- Form thông tin tài sản có kiểu FixedSingle, không có các nút phóng to, thu
nhỏ trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
2. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu đơn vị sử dụng theo
mẫu sau.
Hình 28. Form danh sách đơn vị sử dụng
Yêu cầu:
- Nhãn danh sách đơn vị sử dụng: Font Microsoft Sans Serif, chữ hoa, in đậm
cỡ 14, mầu xanh thẫm, căn giữa form
- Lƣới hiển thị danh sách đơn vị sử dụng:
+ Gồm 4 cột có tiêu đề là Mã đơn vị, Tên đơn vị, Vị trí, Số nhân viên.
+ Độ rộng của cột Mã đơn vị, Vị trí, Số nhân viên vừa đủ để hiển thị nội dung
tiêu đề cột.
+ Độ rộng của cột Tên đơn vị tự động thay đổi để phù hợp với nội dung dữ liệu
hiển thị.
+ Chế độ chọn dữ liệu trên lƣới là toàn bộ dòng.
52
+ Không hiển thị phần tiêu đề của dòng.
+ Không cho phép chọn nhiều dòng đồng thời trên lƣới.
+ Cho phép cập nhật dữ liệu trực tiếp trên lƣới.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút đóng: cho phép đóng form hiện thời.
- Form danh sách đơn vị sử dụng có kiểu FixedSingle, không có các nút phóng
to, thu nhỏ trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn
hình.
3. Thiết kế form dạng một nhiều thực hiện việc cập nhật dữ liệu cho bảng
tblQuanLy.
Hình 29. Form quản lý tài sản
53
Yêu cầu:
- Nhãn quản lý tài sản: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14, mầu
xanh lá, căn giữa form
- Lƣới hiển thị danh sách tài sản tại đơn vị:
+ Gồm 4 cột có tiêu đề là Tài sản, Số lƣợng, Ngày cấp, Tình trạng.
+ Độ rộng của cột Số lƣợng vừa đủ để hiển thị nội dung tiêu đề cột.
+ Độ rộng của cột Tài sản, Ngày cấp, Tình trạng tự động thay đổi để phù hợp
với nội dung dữ liệu hiển thị.
+ Dữ liệu tài sản hiển thị ở mỗi dòng trên lƣới tài sản là dạng ComboBox. Dữ
liệu nguồn lấy từ bảng tblTaiSan, thông tin hiển thị là cột Tên tài sản, thông tin lƣu trữ
là cột mã tài sản.
+ Chế độ chọn dữ liệu trên lƣới là toàn bộ dòng.
+ Không hiển thị phần tiêu đề của dòng.
+ Không cho phép chọn nhiều dòng đồng thời trên lƣới.
+ Cho phép cập nhật dữ liệu trực tiếp trên lƣới.
+ Dữ liệu tài sản của đơn vị liên kết trực tiếp với phần thông tin đơn vị ở phía
trên. Khi di chuyển qua danh sách các đơn vị thì lƣới dữ liệu tài sản quản lý cũng thay
đổi tƣơng ứng.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời trong danh sách giáo viên.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút đóng: cho phép đóng form hiện thời.
- Form quản lý tài sản có kiểu FixedSingle, không có các nút phóng to, thu nhỏ
trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
54
Bài tập số 3. Cho cơ sở dƣ̃ liê ̣u Quản lý đi ểm có tên QLDIEM .MDF gồm các
bảng:
tblSinhVien(MaSV, Hoten, Ngaysinh, Noisinh, Gioitinh, Diachi, Makhoa,
LopNC)
tblKhoa(Makhoa, Tenkhoa)
tblLopHP(MaLopHP, TenLopHP, MaSV, MaMon)
tblMonHoc(Mamon, Tenmon, Sohocphan, Giaovien)
tblDiem(MaLopHP, MaSV, Diem, HocKy)
Trong đó:
MaSV: Mã sinh viên;
Hoten: Họ tên sinh viên;
Ngaysinh: Ngày sinh;
Noisinh: Nơi sinh;
Gioitinh: Giới tính;
Diachi: Địa chỉ;
Makhoa: Mã khoa;
LopNC: Tên lớp niên chế;
Tenkhoa: Tên khoa;
MaLopHP: Mã lớp học phần.
TenLopHP: Tên lớp học phần.
Mamon: Mã môn học;
Tenmon: Tên môn học;
Sohocphan: Số học phần;
Giaovien: Họ tên giáo viên giảng dạy;
Diem: Điểm của môn học tƣơng ứng với từng sinh viên;
HocKy: Học kỳ có giá trị là số nguyên bắt đầu từ 1.
Công việc 1. Sƣ̉ du ̣ng m ột hệ quản trị cơ sở dữ liệu SQL Server thƣ̣c hiê ̣n các
công việc sau:
a) Tạo cơ s ở dữ liệu QLDIEM.MDF và cấu trúc các bảng trên v ới kiểu dữ liệu
tùy chọn cho phù hợp.
Yêu cầu:
- Chọn kiểu dữ liệu cho các trƣờng phù hợp giúp dễ dàng xử lý dữ liệu
55
- Mỗi bảng phải chỉ ra đƣợc khóa chính và các ràng buộc dữ liệu nếu có thể.
b) Tạo mối quan hệ giữa các bảng dữ liệu
Công việc 2. Thiết kế các form để thực hiện cập nhật dữ liệu cho các bảng trên:
1. Thiết kế form dạng bản ghi thực hiện việc cập nhật dữ liệu cho bảng
tblSinhVien.
Hình 30. Form thông tin sinh viên
Yêu cầu:
- Nhãn thông tin sinh viên: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14,
mầu đỏ, căn giữa form
- Các nhãn Mã sinh viên, Họ và tên, Ngày sinh, Nơi sinh, Giới tính, Địa chỉ,
Khoa, Lớp niên chế có font: Microsoft Sans Serif, chữ thƣờng, cỡ 9, mầu xanh lá, các
nhãn này có lề trái giống nhau.
- Các điều khiển để nhập Mã sinh viên, Họ và tên, Nơi sinh, Địa chỉ, Lớp niên
chế là các textbox đƣợc gắn kết với cơ sở dữ liệu.
- Điều khiển để nhập Ngày sinh là DateTimePicker đƣợc gắn kết với cơ sở dữ
liệu.
56
- Các điều khiển để nhập Giới tính, Khoa là các ComboBox đƣợc gắn kết với
cơ sở dữ liệu. Trong đó điều khiển Khoa chứa dữ liệu lấy từ bảng tblKhoa. Giá trị lựa
chọn tƣơng ứng với mã khoa của từng sinh viên trong bảng tblSinhVien.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút tìm: cho phép tìm kiếm theo mã sinh viên.
+ Nút đóng: cho phép đóng form hiện thời.
- Form thông tin sinh viên có kiểu FixedSingle, không có các nút phóng to, thu
nhỏ trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
2. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu cho bảng tblKhoa.
57
Hình 31. Form danh sách khoa
58
Yêu cầu:
- Nhãn danh sách khoa: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14, mầu
xanh lá, căn giữa form
- Lƣới hiển thị danh sách khoa:
+ Gồm 2 cột có tiêu đề là Mã khoa, Tên khoa.
+ Độ rộng của cột Mã khoa vừa đủ để hiển thị nội dung tiêu đề cột.
+ Độ rộng của cột Tên khoa đƣợc tính toán bằng độ rộng của lƣới trừ đi độ rộng
của cột mã khoa.
+ Chế độ chọn dữ liệu trên lƣới là toàn bộ dòng.
+ Không hiển thị phần tiêu đề của dòng.
+ Không cho phép chọn nhiều dòng đồng thời trên lƣới.
+ Cho phép cập nhật dữ liệu trực tiếp trên lƣới.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút đóng: cho phép đóng form hiện thời.
- Form danh sách khoa có kiểu FixedSingle, không có các nút phóng to, thu nhỏ
trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
3. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu cho bảng tblMonHoc.
59
Hình 32. Form danh sách môn học
Yêu cầu:
- Nhãn danh sách môn học: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14,
mầu xanh lá, căn giữa form
- Lƣới hiển thị danh sách môn học:
+ Gồm 4 cột có tiêu đề là Mã môn, Tên môn, Số học phần, Giáo viên.
+ Độ rộng của cột Mã môn, Số học phần vừa đủ để hiển thị nội dung tiêu đề
cột.
+ Độ rộng của cột Tên môn, Giáo viên đƣợc tự động điều chỉnh để hiển thị đủ
dữ liệu ở các cột này.
+ Chế độ chọn dữ liệu trên lƣới là toàn bộ dòng.
+ Không hiển thị phần tiêu đề của dòng.
+ Không cho phép chọn nhiều dòng đồng thời trên lƣới.
+ Cho phép cập nhật dữ liệu trực tiếp trên lƣới.
- Các điều khiển:
60
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút đóng: cho phép đóng form hiện thời.
- Form danh sách môn học có kiểu FixedSingle, không có các nút phóng to, thu
nhỏ trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
4. Thiết kế form dạng một nhiều thực hiện việc cập nhật dữ liệu cho bảng
tblDiem.
Hình 33. Form quản lý điểm sinh viên
Yêu cầu:
- Nhãn quản lý điểm: Font Microsoft Sans Serif, chữ hoa, in đậm cỡ 14, mầu
cam, căn giữa form.
61
- Nhãn mã sinh viên, họ tên, ngày sinh, khoa, lớp niên chế font Microsoft Sans
Serif, chữ thƣờng, cỡ 9, mầu đen, có lề trái giống nhau.
- Lƣới hiển thị danh sách điểm của sinh viên:
+ Gồm 3 cột có tiêu đề là Lớp học phần, Điểm, Học ky.
+ Độ rộng của cột Điểm, Học kỳ vừa đủ để hiển thị nội dung tiêu đề cột.
+ Độ rộng của cột Lớp học phần tự động thay đổi để phù hợp với nội dung dữ
liệu hiển thị.
+ Dữ liệu lớp học phần hiển thị trên lƣới điểm của sinh viên là dạng
ComboBox. Dữ liệu nguồn lấy từ bảng tblLopHP, thông tin hiển thị là cột Tên lớp học
phần, thông tin lƣu trữ là cột mã lớp học phần.
+ Chế độ chọn dữ liệu trên lƣới là toàn bộ dòng.
+ Không hiển thị phần tiêu đề của dòng.
+ Không cho phép chọn nhiều dòng đồng thời trên lƣới.
+ Cho phép cập nhật dữ liệu trực tiếp trên lƣới.
+ Dữ liệu điểm của sinh viên liên kết trực tiếp với phần thông tin sinh viên ở
phía trên. Khi di chuyển qua danh sách các sinh viên thì lƣới dữ liệu điểm của sinh
viên cũng thay đổi tƣơng ứng.
- Các điều khiển:
+ Các nút điều hƣớng: cho phép chuyển tới bản ghi đầu tiên, bản ghi cuối cùng,
bản ghi liền sau hoặc liền trƣớc bản ghi hiện thời trong danh sách giáo viên.
+ Nút thêm: cho phép thêm một bản ghi mới
+ Nút xóa: cho phép xóa bản ghi hiện thời nếu ngƣời dùng đồng ý.
+ Nút sửa: cho phép sửa thông tin của bản ghi hiện thời
+ Nút lƣu: cho phép cập nhật các thông tin trên form vào cơ sở dữ liệu
+ Nút đóng: cho phép đóng form hiện thời.
- Form quản lý điểm có kiểu FixedSingle, không có các nút phóng to, thu nhỏ
trên thanh tiêu đề của form, khi hiển thị form xuất hiện chính giữa màn hình.
1.3. Bài tập về nhà
Bài tập số 4. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc cập
nhật thông tin xuất nhập kho tại công ty BCD.
Yêu cầu:
62
- Tạo các form dạng bản ghi để cập nhật thông tin nhân viên, mặt hàng, nhà cung
cấp.
- Tạo form dạng kết hợp bản ghi và lƣới để quản lý thông tin xuất nhập kho tại
công ty.
Bài tập số 5. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc cập
nhật thông tin tại trƣờng XYZ
Bài tập số 6. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc cập
nhật thông tin ký túc xá.
Yêu cầu:
- Tạo các form dạng bản ghi để cập nhật thông tin phòng ở, sinh viên.
- Tạo form dạng kết hợp bản ghi và lƣới để quản lý sinh viên tại các phòng trong
ký túc xá.
Bài tập số 7. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc cập
nhật thông tin các đề tài khoa học tại trƣờng đại học SPK.
Yêu cầu:
- Tạo các form dạng bản ghi để cập nhật thông tin đề tài, ngƣời thực hiện, cấp đề
tài, loại đề tài.
- Tạo form dạng kết hợp bản ghi và lƣới để quản lý thông tin đề tài khoa học của
từng cá nhân.
Bài tập số 8. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc cập
nhật thông tin giải bóng đá vô địch quốc gia.
Yêu cầu:
- Tạo các form dạng bản ghi để cập nhật thông tin đội bóng, lịch thi đấu.
- Tạo form dạng kết hợp bản ghi và lƣới để quản lý thông tin kết quả của từng
trận đấu.
Bài tập số 9. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc cập
nhật thông tin nhân sự tại công ty ABC.
Yêu cầu:
- Tạo các form dạng bản ghi để cập nhật thông tin ngƣời lao động, phòng ban.
- Tạo form dạng kết hợp bản ghi và lƣới để quản lý thông tin về lƣơng, khen
thƣởng, kỷ luật của từng ngƣời lao động trong công ty.
63
Bài tập số 10. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc cập
nhật thông tin thi đua khen thƣởng tại công ty ABC.
64
BÀI 2. SỬ DỤNG VB.NET LẬP TRÌNH TÌM KIẾM THÔNG TIN
VÀ HIỂN THỊ KẾT QUẢ TRÊN FORM
Mục tiêu
Sau bài học, sinh viên có khả năng:
- Kiến thức: Biết thiết kế Form và sử dụng VB.NET lập trình trên form để thực hiện
việc tìm kiếm và hiển thị thông tin trên form.
- Kỹ năng: Vận dụng đƣợc kiến thức để thiết kế và lập trình trên form thực hiện việc
tìm kiếm và hiển thị thông tin trên form vào giải quyết các bài toán thực tế.
- Thái độ:
+ Nghiêm túc, sáng tạo
+ Tích cực tập luyện
Chuẩn bị dụng cụ, vật tư, thiết bị
Chuẩn bị máy tính có hệ điều hành Windows XP hoặc cao hơn, phần mềm
Microsoft Office, bộ gõ Tiếng Việt,phần mềm SQL Server 2000 hoặc cao hơn,phần
mềm Visual Studio 2008 hoặc cao hơn.
2.1 Tóm tắt kiến thức cần nhớ
2.1.1. Câu lệnh SQL để tìm kiếm thông tin trong cơ sở dữ liệu
Tìm kiếm thông tin trong cơ sở dữ liệu là đƣa ra các thông tin thỏa mãn điều
kiện tìm kiếm từ cơ sở dữ liệu theo yêu cầu.
Khi thao tác với cơ sở dữ liệu để tìm kiếm thông tin, thƣờng sử dụng câu lệnh
SELECT … FROM … WHERE...
Cú pháp:
SELECT distinct [
FROM
WHERE
GROUPE BY
HAVING
65
ORDER BY < tên_trƣờng số_thứ_tự_trƣờng biểu_thức>, [ASC/
DESC ]
1) Mệnh đề Select: Đƣợc sử dụng để chỉ định các trƣờng, các biểu thức cần
đƣa ra
2) Mệnh đề FROM: Đƣợc sử dụng nhằm chỉ định các bảng, view chứa
thông tin cần tìm kiếm.
3) Mệnh đề WHERE: Đƣợc sử dụng nhằm xác định các điều kiện của các
bản ghi phải thỏa mãn yêu cầu tìm kiếm.
4) Mệnh đề GROUP BY: Đƣợc sử dụng để gộp một nhóm các bản ghi
thành một bản ghi theo yêu cầu gộp nhóm.
5) Mệnh đề HAVING: Đƣợc sử dụng để đƣa ra điều kiện của nhóm và chỉ
sử dụng khi có mệnh đề GROUP BY.
6) Mệnh đề ORDER BY: Đƣợc sử dụng để sắp xếp kết quả tìm kiếm.
2.1.2. Sử dụng Form để hiển thị thông tin tìm kiếm.
Form không những đƣợc dùng làm giao diện để thực hiện các thao tác cập nhật
dữ liệu mà còn đƣợc sử dụng làm giao diện để tìm kiếm và hiển thị dữ liệu kết quả trên
Form. Trong trƣờng hợp này form thƣờng có dạng.
Chẳng hạn nhƣ:
66
Hình 34. Form tìm kiếm thông tin đơn giản
Ngoài ra trong một số trƣờng hợp để tìm kiếm dữ liệu theo nhiều tiêu chí form
thƣờng đƣợc thiết kế có dạng:
Hình 35. Form tìm kiếm thông tin theo nhiều điều kiện
67
Ngoải ra, tùy theo yêu cầu thực tế của ứng dụng có thể thiết kế các form tìm
kiếm với các giao diện khác nhau.
Để xây dựng một form dùng để tìm kiếm thông tin trong một cơ sở dữ liệu và
hiển thị kết quả tìm kiếm trên form bằng VB.NET, thực hiện các bƣớc sau:
1. Xây dựng một form để tìm kiếm thông tin mới.
2. Đƣa các điều khiển vào form chứa các thông tin cần tìm kiếm và thông tin
điều kiện .
3. Đặt thuộc tính cho form và các điều khiển trên form.
4. Kết nối form với cơ sở dữ liệu
5. Lập trình cho các sự kiện thực thi các nhiệm vụ.
6. Chạy thử.
7. Hiệu chỉnh form để đạt yêu cầu.
8. Ghi kết quả.
2.2. Hướng dẫn thực hành
2.2.1. Bài tập mẫu
Trở lại bài tập mẫu trong bài 1 và thực hiện tiếp các công việc sau:
Công việc 1: Thiết kế một form để tìm kiếm thông tin và hiển thị kết quả trên
form theo các mẫu sau:
1. Tìm kiếm theo điều kiện đơn giản
a) Tìm kiếm khách hàng
68
Hình 36. Form tìm kiếm thông tin khách hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm thông tin:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Đỏ
- Các nhãn Tìm theo, Nội dung tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Các radio button Mã khách hàng, tên khách hàng, tất cả
Font: Microsoft Sans Serif, Bold, 9
69
Căn giữa theo chiều dọc
Mầu chữ: Đen
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào giá trị lựa chọn ở
các radio button trong phần Tìm theo và điều kiện tìm kiếm trong ô nội dung tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các khách hàng gồm các thông tin: Mã khách
hàng, Họ tên khách hàng, Giới tính, Địa chỉ, Điện thoại và hiển thị ở trên
DataGridView phía dƣới.
Tìm theo mã khách hàng: Yêu cầu tìm chính xác theo mã khách hàng đƣợc
nhập từ bàn phím vào ô textbox nội dung tìm kiếm.
Tìm theo tên khách hàng: Yêu cầu tìm gần đúng theo tên khách hàng đƣợc nhập
từ bàn phím vào ô textbox nội dung tìm kiếm (ví dụ: nhập “an” ở ô nội dung tìm kiếm
sẽ trả về các kết quả Nguyễn Văn An, Trần Văn Anh, Mai Thế Cang, …)
Tìm theo tất cả: Sẽ hiển thị tất cả các khách hàng. Danh sách kết quả sắp xếp
theo thứ tự từ điển.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
b) Tìm kiếm mặt hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
70
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm thông tin:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Đỏ
- Các nhãn Tìm theo, Nội dung tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Các radio button Mã khách hàng, tên khách hàng, tất cả
Font: Microsoft Sans Serif, Bold, 9
Căn giữa theo chiều dọc
Mầu chữ: Đen
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào giá trị lựa chọn ở
các radio button trong phần Tìm theo và điều kiện tìm kiếm trong ô nội dung tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các mặt hàng gồm các thông tin: Mã mặt
hàng, Tên mặt hàng, Đơn vị tính và hiển thị ở trên DataGridView phía dƣới.
Tìm theo mã mặt hàng: Yêu cầu tìm chính xác theo mã mặt hàng đƣợc nhập từ
bàn phím vào ô textbox nội dung tìm kiếm.
Tìm theo tên mặt hàng: Yêu cầu tìm gần đúng theo tên mặt hàng đƣợc nhập từ
bàn phím vào ô textbox nội dung tìm kiếm (ví dụ: nhập “ti vi” ở ô nội dung tìm kiếm
sẽ trả về các kết quả Ti vi Sony, LCD Ti vi, ti vi LG, …)
Tìm theo tất cả: Sẽ hiển thị tất cả các mặt hàng. Danh sách kết quả sắp xếp theo
thứ tự từ điển.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
71
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 2: Thiết kế form để thực hiện việc tìm kiếm thông tin phức tạp
1. Thiết kế form để tìm kiếm các mặt hàng mà cửa hàng đã bán cho khách hàng
Hình 37. Form tìm kiếm thông tin bán hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm thông tin:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh lam
72
- Các nhãn Mã khách hàng, Tên khách hàng
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Ô nhập mã khách hàng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Khi nhập giá trị mã và ấn Enter sẽ tự động tìm kiếm và hiển thị họ tên khách
hàng tƣơng ứng ở ô Tên khách hàng.
- Ô hiển thị tên khách hàng bị mờ và không cho phép ngƣời sử dụng nhập thông
tin vào ô này.
- Các radio button Mã khách hàng, tên khách hàng, tất cả
Font: Microsoft Sans Serif, Bold, 9.
Căn giữa theo chiều dọc.
Mầu chữ: Đen.
- Lƣới hiển thị kết quả tìm kiếm:
Gồm các cột: Mã khách hàng, Tên khách hàng, Giới tính, Địa chỉ, Điện thoại.
Độ rộng các cột tự động căn vừa nội dung chứa trong mỗi cột.
Chế độ lựa chọn mỗi bản ghi là: Tất cả dòng.
Không cho phép thêm, sửa, xóa trực tiếp trên danh sách kết quả này.
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh sẽ căn cứ vào lựa chọn ở các giá trị mã khách hàng và
phép toán, số lƣợng mặt hàng sẽ tìm kiếm trong cơ sở dữ liệu các hóa đơn thỏa mãn
điều kiện và hiển thị ở danh sách lƣới.
- Nút lệnh Kết thúc:
73
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 3. Thiết kế form để thực hiện việc tìm kiếm thông tin các mặt hàng
đã mua có số lƣợng lớn hơn, nhỏ hơn hoặc bằng một giá trị nhập vào theo mẫu sau
Hình 38. Form tìm kiếm thông tin bán hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm thông tin:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh lam
- Các nhãn Mã khách hàng, Tên khách hàng, Số lƣợng
74
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Lựa chọn phép toán
Là một combobox có chứa các giá trị: >, >=, <, <=, =, <>
Chế độ hiển thị là DropDownList
Giá trị lựa chọn mặc định là >
- Giá trị số lƣợng cho phép tăng giảm giá trị với bƣớc nhảy là 1, giá trị bắt đầu
là 10.
- Ô nhập mã khách hàng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Khi nhập giá trị mã sẽ tự động tìm kiếm và hiển thị họ tên khách hàng tƣơng
ứng ở ô Tên khách hàng.
- Ô hiển thị tên khách hàng bị mờ và không cho phép ngƣời sử dụng nhập thông
tin vào ô này.
- Lƣới hiển thị kết quả tìm kiếm:
Gồm các cột: STT, Tên mặt hàng, ĐVT, Ngày mua hàng, Số lƣợng, Đơn giá,
Thành Tiền.
Độ rộng các cột tự động căn vừa nội dung chứa trong mỗi cột.
Chế độ lựa chọn mỗi bản ghi là: Tất cả dòng.
Không cho phép thêm, sửa, xóa trực tiếp trên danh sách kết quả này.
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
75
Khi nhấn vào nút lệnh sẽ căn cứ vào lựa chọn ở các giá trị mã khách hàng và
phép toán, số lƣợng mặt hàng sẽ tìm kiếm trong cơ sở dữ liệu các hóa đơn thỏa mãn
điều kiện và hiển thị ở danh sách lƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 4. Thiết kế một form để tìm kiếm thông tin về các mặt hàng đã bán
của một nhân viên bán hàng và hiển thị kết quả trên form theo mẫu sau.
Hình 39. Form tìm kiếm thông tin
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
76
- Nhãn Tìm kiếm thông tin:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Cam
- Nhãn Họ tên ngƣời bán hàng
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Ô nhập họ tên ngƣời bán hàng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Lƣới hiển thị kết quả tìm kiếm:
Gồm các cột: Số HĐ, Tên mặt hàng, ĐVT, Số lƣợng, Đơn giá, Thành Tiền.
Độ rộng các cột tự động căn vừa nội dung chứa trong mỗi cột.
Chế độ lựa chọn mỗi bản ghi là: Tất cả dòng.
Không cho phép thêm, sửa, xóa trực tiếp trên danh sách kết quả này.
- Nút lệnh Tìm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh sẽ căn cứ vào giá trị ở ô họ tên ngƣời bán hàng tìm kiếm
trong bảng chi tiết hóa đơn lựa chọn ở các bản ghi có số hiệu hóa đơn nằm trong bảng
bán hàng và có tên ngƣời bán hàng gần giống với nội dung ở ô họ tên ngƣời bán hàng.
Kết quả tìm đƣợc hiển thị ở danh sách lƣới.
- Nút lệnh Đóng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
77
Phím nóng là: N
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 5. Thiết kế một form để tìm kiếm thông tin về các lần bán một mặt
hàng của một nhân viên bán hàng và hiển thị kết quả trên form theo mẫu sau.
Hình 40. Form tìm kiếm thông tin khách hàng mua mặt hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm thông tin:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Cam
- Nhãn Họ tên ngƣời bán hàng, Mặt hàng
Font: Microsoft Sans Serif, Bold, 9
78
Mầu chữ: Đen
- Ô nhập họ tên ngƣời bán hàng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Danh sách lựa chọn mặt hàng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Dữ liệu nguồn lấy từ bảng tblMatHang, dữ liệu hiển thị là trƣờng
tên mặt hàng, dữ liệu lƣu trữ là mã mặt hàng.
- Lƣới hiển thị kết quả tìm kiếm:
Gồm các cột: Số HĐ, Tên mặt hàng, ĐVT, Số lƣợng, Đơn giá, Thành Tiền.
Độ rộng các cột tự động căn vừa nội dung chứa trong mỗi cột.
Chế độ lựa chọn mỗi bản ghi là: Tất cả dòng.
Không cho phép thêm, sửa, xóa trực tiếp trên danh sách kết quả này.
- Nút lệnh Tìm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh sẽ căn cứ vào giá trị ở ô họ tên ngƣời bán hàng và lựa
chọn mặt hàng trong danh sách hệ thống sẽ tìm kiếm trong bảng chi tiết hóa đơn lựa
chọn ở các bản ghi có số hiệu hóa đơn nằm trong bảng bán hàng và có tên ngƣời bán
hàng gần giống với nội dung ở ô họ tên ngƣời bán hàng. Kết quả tìm đƣợc hiển thị ở
danh sách lƣới.
- Nút lệnh Đóng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: N
79
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
2.1.2 Hướng dẫn thực hiện
Công việc 1. Thiết kế một form để tìm kiếm thông tin và hiển thị kết quả trên
form theo các mẫu sau:
1. Tạo form tìm kiếm khách hàng, mặt hàng theo mẫu
a) Tạo form tìm kiếm khách hàng
Hình 41. Form tìm kiếm thông tin khách hàng
a) Tạo form tìm kiếm khách hàng
1. Phân tích yêu cầu:
Theo yêu cầu trên thì phải có một form chứa:
- Các đối tƣợng có nội dung “TÌM KIẾM THÔNG TIN”, “Tìm theo”, “Nội
dung tìm kiếm” là các Label.
80
- Các đối tƣợng lựa chọn Mã khách hàng, Tên khách hàng, Tất cả là các điều
khiển radio button.
- Ô nhập nội dung tìm kiếm là một textbox
- Các nút Tìm kiếm, Kết thúc là các đối tƣợng Button
- Lƣới hiển thị kết quả tìm kiếm là một DataGridView.
2. Hướng dẫn thao tác:
Để thực hiện yêu cầu trên phải:
Tạo form mới với tên frmTimKiemKhachHang bằng cách thực hiện các thao
tác: Trên thanh menu, chọn Project/Add New Item.
Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên
frmTimKiemKhachHang vào ô Name rồi nhấn nút Add.
Hình 42. Cửa sổ Add New Item
Để tạo điều khiển label Tìm kiếm thông tin theo yêu cầu thực hiện:
Kéo điều khiển Label từ của sồ Toolbox vào form. Nháy phải chuột vào Label
chọn Properties và thiết lập các thuộc tính cho Label này:
Text: TÌM KIẾM THÔNG TIN
Font name: Microsoft Sans Serif
Font size: 18
Font bold: True
Fore color: Red
Trên menu chọn Format/Center in form/Horizontally để căn giữa.
81
Kéo điều khiển Groupbox từ cửa sổ Toolbox vào form và điều chỉnh kích
thƣớc, vị trí phù hợp. Thiết lập các thuộc tính cho điều khiển này tại cửa sổ Properties
nhƣ sau:
Name: GroupBox1
Text: Nội dung tìm kiếm
Kéo các điều khiển label, radio button, textbox, button vào trong Groupbox vừa
tạo và thiết lập các thông số cho các điều khiển lần lƣợt nhƣ sau:
Label Tìm theo, Nội dung tìm kiếm thiết lập font chữ, mầu sắc, cỡ chữ tƣơng tự
nhƣ đối với label Tìm kiếm thông tin bên trên
Kéo điều khiển radio button từ cửa sổ Toolbox vào form và điều chỉnh vị trí
phù hợp. Thiết lập các thuộc tính cho điều khiển này tại cửa sổ Properties nhƣ sau:
Name: RadioButtonMa
Text: Mã khách hàng
Font name: Microsoft Sans Serif
Font size: 9
Các thuộc tính khác giữ nguyên mặc định
Làm tƣơng tự với 2 điều khiển radio button còn lại
Kéo điều khiển textbox từ cửa sổ Toolbox vào form và điều chỉnh kích thƣớc,
vị trí phù hợp. Thiết lập các thuộc tính cho điều khiển này tại cửa sổ Properties nhƣ
sau:
Name: TextBoxNoiDung
Font name: Microsoft Sans Serif
Font size: 9
Các thuộc tính khác giữ nguyên mặc định
Kéo điều khiển button từ cửa sổ Toolbox vào form và điều chỉnh kích thƣớc, vị
trí phù hợp. Thiết lập thuộc tính cho điều khiển này tại cửa sổ Properties nhƣ sau:
Name: ButtonTimKiem
Font name: Microsoft Sans Serif
Font size: 9
Text: &Tìm kiếm
Các thuộc tính khác giữ nguyên mặc định
82
Làm tƣơng tự với nút lệnh còn lại.
Kéo điều khiển Groupbox từ cửa sổ Toolbox vào form và điều chỉnh kích
thƣớc, vị trí phù hợp. Thiết lập các thuộc tính cho điều khiển này tại cửa sổ Properties
nhƣ sau:
Name: GroupBox2
Text: Kết quả tìm kiếm
Kéo điều khiển DataGridView từ cửa sổ Toolbox vào form và thiết lập các
thuộc tính cho điều khiển này tại cửa sổ Properties nhƣ sau:
Name: DataGridView1
Dock: Fill
AllowUserToAddRows: False
AllowUserToDeleteRows: False
SelectionMode: FullRowSelect
Các thuộc tính khác giữ nguyên mặc định
Tiến hành viết mã lệnh cho các điều khiển nhƣ sau:
Mã lệnh của điều khiển radiobutton Mã khách hàng
Private Sub RadioButtonMa_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
RadioButtonMa.CheckedChanged
TextBoxNoiDung.Text = Nothing
TextBoxNoiDung.Enabled = RadioButtonMa.Checked
End Sub
Mã lệnh của điều khiển radiobutton Họ tên khách hàng
Private Sub RadioButtonHoTen_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
RadioButtonHoTen.CheckedChanged
TextBoxNoiDung.Text = Nothing
83
TextBoxNoiDung.Enabled = RadioButtonHoTen.Checked
End Sub
Mã lệnh của điều khiển radiobutton Tất cả
Private Sub RadioButtonTatCa_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
RadioButtonTatCa.CheckedChanged
TextBoxNoiDung.Text = Nothing
TextBoxNoiDung.Enabled = Not RadioButtonTatCa.Checked
End Sub
Mã lệnh của điều khiển button Tìm kiếm
Private Sub ButtonTimKiem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonTimKiem.Click
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của người sử dụng
If RadioButtonMa.Checked Then
'Tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT * FROM tblKhachHang WHERE
[MaKH]=" & TextBoxNoiDung.Text
End If
If RadioButtonHoTen.Checked Then
'Tìm kiếm tương đối theo tên khách hàng
84
sqlTimKiem = "SELECT * FROM tblKhachHang WHERE HoTen
LIKE '%" & TextBoxNoiDung.Text & "%' ORDER BY HoTen, MaKH"
End If
If RadioButtonTatCa.Checked Then
'Hiển thị tất cả khách hàng
sqlTimKiem = "SELECT * FROM tblKhachHang ORDER BY
HoTen, MaKH"
End If
'Kết nối CSDL
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
Me.DataGridView1.DataSource = ds.Tables(0).DefaultView
Me.DataGridView1.Columns(0).HeaderText = "Mã khách
hàng"
Me.DataGridView1.Columns(1).HeaderText = "Họ tên khách
85
hàng"
Me.DataGridView1.Columns(2).HeaderText = "Giới tính"
Me.DataGridView1.Columns(3).HeaderText = "Địa chỉ"
Me.DataGridView1.Columns(4).HeaderText = "Điện thoại"
GroupBox2.Text = "Kết quả tìm kiếm (" +
Me.DataGridView1.RowCount.ToString() + " kết quả)"
cn.Close()
End Using
End Using
End Sub
Mã lệnh của điều khiển button Kết thúc
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
Me.Close()
End Sub
86
3. Kết quả thiết kế:
Hình 43. Kết quả thiết kế form tìm kiếm khách hàng
4. Kết quả thực thi:
Hình 44. Kết quả thực thi form tìm kiếm khách hàng 87
Hình 45. Kết quả tìm kiếm khách hàng theo tên
Hình 46. Kết quả tìm kiếm tất cả các khách hàng
88
b) Tạo form tìm kiếm mặt hàng
1. Phân tích yêu cầu:
Tƣơng tự nhƣ form tìm kiếm khách hàng. Trên form frmTimKiemMatHang
phải có các đối tƣợng:
- Các đối tƣợng có nội dung “TÌM KIẾM THÔNG TIN”, “Tìm theo”, “Nội
dung tìm kiếm” là các Label.
- Các đối tƣợng lựa chọn Mã mặt hàng, Tên mặt hàng, Tất cả là các điều khiển
radio button.
- Ô nhập nội dung tìm kiếm là một textbox
- Các nút Tìm kiếm, Kết thúc là các đối tƣợng Button
- Lƣới hiển thị kết quả tìm kiếm là một DataGridView.
2. Hướng dẫn thao tác:
Thực hiện các thao tác tƣơng tự để tạo form frmTimKiemMatHang và thiết lập
thuộc tính cho các đối tƣợng trên form frmTimKiemMatHang.
Viết đoạn mã lệnh cho các điều khiển trên form frmTimKiemMatHang nhƣ sau:
Lƣu ý: Để thao tác với cơ sở dữ liệu SQL Server phải thêm vào
thƣ viện System.Data.SqlClient bằng đoạn mã
Imports System.Data.SqlClient
Mã lệnh của điều khiển radiobutton Mã khách hàng
Private Sub RadioButtonMa_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
RadioButtonMa.CheckedChanged
TextBoxNoiDung.Text = Nothing
TextBoxNoiDung.Enabled = RadioButtonMa.Checked
End Sub
Mã lệnh của điều khiển radiobutton Họ tên khách hàng
Private Sub RadioButtonTenHang_CheckedChanged(ByVal
89
sender As System.Object, ByVal e As System.EventArgs) Handles
RadioButtonHoTen.CheckedChanged
TextBoxNoiDung.Text = Nothing
TextBoxNoiDung.Enabled = RadioButtonTenHang.Checked
End Sub
Mã lệnh của điều khiển radiobutton Tất cả
Private Sub RadioButtonTatCa_CheckedChanged(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
RadioButtonTatCa.CheckedChanged
TextBoxNoiDung.Text = Nothing
TextBoxNoiDung.Enabled = Not RadioButtonTatCa.Checked
End Sub
Mã lệnh của điều khiển button Tìm kiếm
Private Sub ButtonTimKiem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonTimKiem.Click
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của người sử
dụng
If RadioButtonMa.Checked Then
'Tìm kiếm theo mã mặt hàng
90
sqlTimKiem = "SELECT * FROM tblMatHang WHERE
MaMH=" & TextBoxNoiDung.Text
End If
If RadioButtonTenHang.Checked Then
'Tìm kiếm tương đối theo tên mặt hàng
sqlTimKiem = "SELECT * FROM tblMatHang WHERE
TenMatHang LIKE '%" & TextBoxNoiDung.Text & "%' ORDER BY
TenMatHang, MaMH"
End If
If RadioButtonTatCa.Checked Then
'Hiển thị tất cả mặt hàng
sqlTimKiem = "SELECT * FROM tblMatHang ORDER BY
TenMatHang, MaMH"
End If
'Kết nối CSDL
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
91
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
Me.DataGridView1.DataSource =
ds.Tables(0).DefaultView
Me.DataGridView1.Columns(0).HeaderText = "Mã mặt
hàng"
Me.DataGridView1.Columns(1).HeaderText = "Tên mặt
hàng"
Me.DataGridView1.Columns(2).HeaderText = "Đơn vị
tính"
GroupBox2.Text = "Kết quả tìm kiếm (" +
Me.DataGridView1.RowCount.ToString() + " kết quả)"
cn.Close()
End Using
End Using
End Sub
Mã lệnh của điều khiển button Kết thúc
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
Me.Close()
End Sub
92
3. Kết quả thiết kế
Hình 47. Kết quả thiết kế form tìm kiếm mặt hàng
4. Kết quả thực thi
Hình 48. Kết quả tìm kiếm mặt hàng theo mã
93
Hình 49. Kết quả tìm kiếm mặt hàng theo tên mặt hàng
Hình 50. Kết quả tìm kiếm tất cả mặt hàng
Công việc 2. Tạo form tìm kiếm thông tin bán hàng theo mẫu
94
Hình 51. Form tìm kiếm thông tin bán hàng
1. Phân tích yêu cầu
Theo yêu cầu trên thì phải có một form chứa:
- Các đối tƣợng có nội dung “TÌM KIẾM THÔNG TIN BÁN HÀNG”, “Mã
khách hàng”, “Tên khách hàng” là các Label.
- Các đối tƣợng thông tin tìm kiếm, kết quả tìm kiếm là các groupbox.
- Ô nhập mã khách hàng, ô hiển thị tên khách hàng là các textbox. Ô hiển thị
tên khách hàng bị khóa không cho ngƣời dùng nhập vào.
- Các nút Tìm kiếm, Kết thúc là các đối tƣợng Button
- Lƣới hiển thị kết quả tìm kiếm là một DataGridView.
2. Hướng dẫn thao tác
Thực hiện các thao tác tƣơng tự ở phần trên để tạo mới form
frmTimKiemThongTinBanHang. Tạo và thiết lập thuộc tính các điều khiển trên form
frmTimKiemThongTinBanHang nhƣ sau:
+ Groupbox thông tin tìm kiếm:
Kéo điều khiển GroupBox từ cửa sổ Toolbox vào form. Nháy phải chuột vào
GroupBox chọn Properties và thiết lập các thuộc tính cho GroupBox này:
95
Text: Thông tin tìm kiếm
Các thuộc tính khác để mặt định.
Điều chỉnh vị trí và kích thƣớc của GroupBox cho phù hợp
+ Thao tác tƣơng tự để tạo Groupbox kết quả tìm kiếm.
+ Label tìm kiếm thông tin bán hàng:
Kéo điều khiển Label từ của sồ Toolbox vào form. Nháy phải chuột vào Label
chọn Properties và thiết lập các thuộc tính cho Label này:
Text: TÌM KIẾM THÔNG TIN BÁN HÀNG
Font name: Microsoft Sans Serif
Font size: 18
Font bold: True
Fore color: Blue
Trên menu chọn Format/Center in form/Horizontally để căn giữa.
+ Thực hiện thao tác tƣơng tự cho các label mã khách hàng, tên khách hàng
+ Ô nhập mã khách hàng
Kéo điều khiển TextBox từ cửa sổ Toolbox vào form. Điều chỉnh vị trí và kích
thƣớc phù hợp. Nháy phải chuột vào điều khiển chọn Properties để thiết lập thuộc tính
cho điều khiển này nhƣ sau:
Name: TextBoxMaKH
Font name: Microsoft Sans Serif
Font size: 9
Fore color: Black
Các thuộc tính khác để mặc định
+ Ô nhập tên khách hàng
Kéo điều khiển TextBox từ cửa sổ Toolbox vào form. Điều chỉnh vị trí và kích
thƣớc phù hợp. Nháy phải chuột vào điều khiển chọn Properties để thiết lập thuộc tính
cho điều khiển này nhƣ sau:
Name: TextBoxTenKhachHang
Font name: Microsoft Sans Serif
Font size: 9
Fore color: Black
96
Enabled: False
Các thuộc tính khác để mặc định
+ Các nút lệnh
Kéo các nút lệnh vào form từ cửa sổ Toolbox và thiết lập thuộc tính giống nhƣ
ở phần trên.
+ Lƣới hiển thị kết quả
Kéo điều khiển DataGridView từ cửa sổ Toolbox vào trong Groupbox kết quả
tìm kiếm. Thiết lập các thuộc tính của nó tƣơng tự nhƣ phần trên.
Viết mã lệnh cho các đối tƣợng trên form tìm kiếm nhƣ sau:
Lƣu ý: Để thao tác với cơ sở dữ liệu SQL Server phải thêm vào
thƣ viện System.Data.SqlClient bằng đoạn mã
Imports System.Data.SqlClient
Mã lệnh của điều khiển button Kết thúc
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
Me.Close()
End Sub
Mã lệnh sự kiện TextChanged của điều khiển textbox Mã khách hàng
Private Sub TextBoxMaKH_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
TextBoxMaKH.TextChanged
'Kiểm tra giá trị ở ô mã khách hàng
If Not String.IsNullOrEmpty(TextBoxMaKH.Text) Then
'Kiểm tra xem mã khách hàng có phải là số không
If IsNumeric(TextBoxMaKH.Text) Then
'Tìm kiếm khách hàng tương ứng với mã
'Khai báo đối tượng và biến cần sử dụng
97
Dim sqlTimKiem As String
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của
người sử dụng
'Tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT * FROM tblKhachHang
WHERE [MaKH]=" & TextBoxMaKH.Text
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
'Hiển thị tên khách hàng ra ô họ tên
TextBoxTenKhachHang.Text =
ds.Tables(0).Rows(0).Item("HoTen").ToString()
Else
'Thông báo cho người sử dụng
MessageBox.Show("Mã khách hàng không tồn
tại", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Error)
'Đưa con trỏ về ô mã khách hàng
TextBoxMaKH.Focus()
End If
cn.Close()
End Using
End Using
98
Else
MessageBox.Show("Mã khách hàng phải là số",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
Else
MessageBox.Show("Chưa nhập mã khách hàng",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
End Sub
+ Mã lệnh của điều khiển button Tìm kiếm
Private Sub ButtonTimKiem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonTimKiem.Click
If Not String.IsNullOrEmpty(TextBoxMaKH.Text) Then
'Kiểm tra xem mã khách hàng có phải là số không
If IsNumeric(TextBoxMaKH.Text) Then
'Kiểm tra xem combobox đã chọn giá trị so sánh chưa
If ComboBoxSoSanh.SelectedIndex <> -1 Then
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
99
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của
người sử dụng
sqlTimKiem = "SELECT tblBanHang.SoHieuHD,
tblBanHang.NgayMuaBan, tblMatHang.TenMatHang,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.SoLuong*tblChiTietHoaDon.DonGia AS
ThanhTien FROM tblBanHang, tblChiTietHoaDon, tblMatHang
WHERE tblMatHang.MaMH = tblChiTietHoaDon.MaMH AND
tblBanHang.SoHieuHD = tblChiTietHoaDon.SoHieuHD AND
tblBanHang.SoHieuHD =" & TextBoxSoHieuHD.Text
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
Me.DataGridView1.DataSource =
ds.Tables(0).DefaultView
Me.DataGridView1.Columns(0).HeaderText =
"Số hóa đơn"
100
Me.DataGridView1.Columns(1).HeaderText =
"Ngày mua hàng"
Me.DataGridView1.Columns(2).HeaderText =
"Tên mặt hàng"
Me.DataGridView1.Columns(3).HeaderText =
"Số lượng"
Me.DataGridView1.Columns(4).HeaderText =
"Đơn giá"
Me.DataGridView1.Columns(5).HeaderText =
"Thành tiền"
GroupBox2.Text = "Kết quả tìm kiếm (" +
Me.DataGridView1.RowCount.ToString() + " kết quả)"
cn.Close()
End Using
End Using
End If
Else
MessageBox.Show("Mã khách hàng phải là số", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
Else
MessageBox.Show("Chưa nhập mã khách hàng", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
101
TextBoxMaKH.Focus()
End If
End Sub
3. Kết quả thiết kế
Hình 52. Kết quả thiết kế form tìm kiếm thông tin bán hàng
102
4. Kết quả thực thi:
Hình 53. Kết quả thực thi form tìm kiếm thông tin bán hàng
Công việc 3. Tạo form tìm kiếm thông tin bán hàng theo mẫu
Hình 54. Form tìm kiếm thông tin bán hàng
1. Phân tích yêu cầu:
Ngoài các đối tƣợng có trên form tìm kiếm ở phần trƣớc, ở form tìm kiếm này
đƣợc bổ xung thêm yêu cầu tìm kiếm với các điều kiện kết hợp nên trên form cần phải
103
bổ xung thêm đối tƣợng Combobox chứa các phép toán so sánh, một điều khiển
NumericUpDown để thay đổi giá trị so sánh.
2. Hướng dẫn thao tác:
Thực hiện các thao tác tƣơng tự mục 1 của công việc 4 để tạo mới form
frmTimKiemThongTinBanHang. Tạo và thiết lập thuộc tính các điều khiển trên form
frmTimKiemThongTinBanHang nhƣ sau:
+ Label tìm kiếm thông tin bán hàng:
Kéo điều khiển Label từ của sồ Toolbox vào form. Nháy phải chuột vào Label
chọn Properties và thiết lập các thuộc tính cho Label này:
Text: TÌM KIẾM THÔNG TIN BÁN HÀNG
Font name: Microsoft Sans Serif
Font size: 18
Font bold: True
Fore color: Blue
Trên menu chọn Format/Center in form/Horizontally để căn giữa.
+ Thực hiện thao tác tƣơng tự cho các label mã khách hàng, tên khách hàng, số
lƣợng.
+ Combobox so sánh số lƣợng:
Kéo điều khiển combobox từ cửa sổ Toolbox vào form. Điều chỉnh vị trí và
kích thƣớc phù hợp. Nháy phải chuột vào combobox và thiết lập thuộc tính cho
combobox này nhƣ sau:
Name: ComboBoxSoSanh
DropDownStyle: DropDownList
Items: (Collection) Nháy chuột vào nút ở phần Collection và nhập các
giá trị >, >=, <, <=, =, <>. Mỗi giá trị trên một dòng. Nhấn OK để hoàn
thành việc nhập giá trị cho Combobox
+ NumericUpDown số lƣợng
Kéo điều khiển NumericUpDown từ cửa sổ Toolbox vào form. Điều chỉnh vị trí
và kích thƣớc phù hợp. Nháy phải chuột vào điều khiển chọn Properties để thiết lập
thuộc tính cho điều khiển này nhƣ sau:
Name: NumericUpDown1
104
Value: 10
Maximum: 10000
Font name: Microsoft Sans Serif
Font size: 9
Fore color: Black
Các thuộc tính khác để mặc định
+ Ô nhập mã khách hàng
Kéo điều khiển TextBox từ cửa sổ Toolbox vào form. Điều chỉnh vị trí và kích
thƣớc phù hợp. Nháy phải chuột vào điều khiển chọn Properties để thiết lập thuộc tính
cho điều khiển này nhƣ sau:
Name: TextBoxMaKH
Font name: Microsoft Sans Serif
Font size: 9
Fore color: Black
Các thuộc tính khác để mặc định
+ Ô nhập tên khách hàng
Kéo điều khiển TextBox từ cửa sổ Toolbox vào form. Điều chỉnh vị trí và kích
thƣớc phù hợp. Nháy phải chuột vào điều khiển chọn Properties để thiết lập thuộc tính
cho điều khiển này nhƣ sau:
Name: TextBoxTenKhachHang
Font name: Microsoft Sans Serif
Font size: 9
Fore color: Black
Enabled: False
Các thuộc tính khác để mặc định
+ Các nút lệnh
Kéo các nút lệnh vào form từ cửa sổ Toolbox và thiết lập thuộc tính giống nhƣ
ở phần trên.
+ Lƣới hiển thị kết quả
Thao tác giống phần trên.
Viết mã lệnh cho các đối tƣợng trên form tìm kiếm nhƣ sau:
105
Lƣu ý: Để thao tác với cơ sở dữ liệu SQL Server phải thêm vào
thƣ viện System.Data.SqlClient bằng đoạn mã
Imports System.Data.SqlClient
Mã lệnh của điều khiển button Kết thúc
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
Me.Close()
End Sub
Mã lệnh của điều khiển textbox Mã khách hàng
Private Sub TextBoxMaKH_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
TextBoxMaKH.TextChanged
'Kiểm tra giá trị ở ô mã khách hàng
If Not String.IsNullOrEmpty(TextBoxMaKH.Text) Then
'Kiểm tra xem mã khách hàng có phải là số không
If IsNumeric(TextBoxMaKH.Text) Then
'Tìm kiếm khách hàng tương ứng với mã
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của
người sử dụng
'Tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT * FROM tblKhachHang WHERE
[MaKH]=" & TextBoxMaKH.Text
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
106
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
'Hiển thị tên khách hàng ra ô họ tên
TextBoxTenKhachHang.Text =
ds.Tables(0).Rows(0).Item("HoTen").ToString()
Else
'Thông báo cho người sử dụng
MessageBox.Show("Mã khách hàng không tồn
tại", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Error)
'Đưa con trỏ về ô mã khách hàng
TextBoxMaKH.Focus()
End If
cn.Close()
End Using
End Using
Else
MessageBox.Show("Mã khách hàng phải là số", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
Else
MessageBox.Show("Chưa nhập mã khách hàng", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
107
TextBoxMaKH.Focus()
End If
End Sub
+ Mã lệnh của điều khiển button Tìm kiếm
Private Sub ButtonTimKiem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonTimKiem.Click
If Not String.IsNullOrEmpty(TextBoxMaKH.Text) Then
'Kiểm tra xem mã khách hàng có phải là số không
If IsNumeric(TextBoxMaKH.Text) Then
'Kiểm tra xem combobox đã chọn giá trị so sánh chưa
If ComboBoxSoSanh.SelectedIndex <> -1 Then
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của
người sử dụng
sqlTimKiem = "SELECT tblBanHang.SoHieuHD,
tblBanHang.NgayMuaBan, tblMatHang.TenMatHang,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.SoLuong*tblChiTietHoaDon.DonGia AS
108
ThanhTien FROM tblBanHang, tblChiTietHoaDon, tblMatHang
WHERE tblMatHang.MaMH = tblChiTietHoaDon.MaMH AND
tblBanHang.SoHieuHD = tblChiTietHoaDon.SoHieuHD AND
tblChiTietHoaDon.SoLuong " &
ComboBoxSoSanh.SelectedItem.ToString() & " " &
NumericUpDown1.Value.ToString() & " AND tblBanHang.MaKH ="
& TextBoxMaKH.Text
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
Me.DataGridView1.DataSource =
ds.Tables(0).DefaultView
Me.DataGridView1.Columns(0).HeaderText =
"Số hóa đơn"
Me.DataGridView1.Columns(1).HeaderText =
"Ngày mua hàng"
Me.DataGridView1.Columns(2).HeaderText =
"Tên mặt hàng"
109
Me.DataGridView1.Columns(3).HeaderText =
"Số lượng"
Me.DataGridView1.Columns(4).HeaderText =
"Đơn giá"
Me.DataGridView1.Columns(5).HeaderText =
"Thành tiền"
GroupBox2.Text = "Kết quả tìm kiếm (" +
Me.DataGridView1.RowCount.ToString() + " kết quả)"
cn.Close()
End Using
End Using
End If
Else
MessageBox.Show("Mã khách hàng phải là số", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
Else
MessageBox.Show("Chưa nhập mã khách hàng", "Thông
báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
End Sub
110
3. Kết quả thiết kế
Hình 55. Kết quả thiết kế form tìm kiếm thông tin bán hàng
4. Kết quả thực thi
Hình 56. Kết quả thực thi form tìm kiếm thông tin bán hàng
Công việc 4. Thiết kế một form để tìm kiếm thông tin về các mặt hàng đã bán
của một nhân viên bán hàng và hiển thị kết quả trên form theo mẫu sau.
111
Hình 57. Form tìm kiếm thông tin các mặt hàng mà khách hàng đã mua
1. Phân tích yêu cầu
Theo yêu cầu trên thì phải thiết kế một form có chứa:
- Các đối tƣợng có nội dung “TÌM KIẾM THÔNG TIN”, “Họ tên ngƣời bán
hàng” là các Label.
- Các đối tƣợng thông tin tìm kiếm, kết quả tìm kiếm là các GroupBox.
- Ô nhập họ tên ngƣời bán hàng là một textbox
- Các nút Tìm, Đóng là các đối tƣợng Button
- Lƣới hiển thị kết quả tìm kiếm là một DataGridView
2. Hướng dẫn thao tác
Thực hiện các thao tác tƣơng tự để tạo form frmTimKiemNguoiBanHang và
thiết lập thuộc tính cho các đối tƣợng trên form frmTimKiemNguoiBanHang phù hợp
yêu cầu.
Viết đoạn mã lệnh cho các điều khiển trên form frmTimKiemNguoiBanHang
nhƣ sau:
Lƣu ý: Để thao tác với cơ sở dữ liệu SQL Server phải thêm vào
thƣ viện System.Data.SqlClient bằng đoạn mã
Imports System.Data.SqlClient
112
Mã lệnh khi nhấn vào nút Đóng
Private Sub ButtonDong_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonDong.Click
'Đóng form
Me.Close()
End Sub
Mã lệnh khi nhấn vào nút Tìm
Private Sub ButtonTim_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonTim.Click
If String.IsNullOrEmpty(TextBoxNguoiBanHang.Text) Then
'Thông báo
MessageBox.Show("Chưa nhập họ tên người bán hàng.",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TextBoxNguoiBanHang.Focus()
Else
'Thực hiện tìm kiếm và hiển thị kết quả trên lưới
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của người sử
dụng
'Tìm kiếm tương đối theo tên khách hàng
sqlTimKiem = "SELECT tblChiTietHoaDon.SoHieuHD,
tblMatHang.TenMatHang, tblMatHang.DVT,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.DonGia * tblChiTietHoaDon.SoLuong AS
ThanhTien FROM tblChiTietHoaDon, tblMatHang WHERE
tblMatHang.MaMH = tblChiTietHoaDon.MaMH AND
113
tblChiTietHoaDon.SoHieuHD IN (SELECT SoHieuHD FROM
tblBanHang WHERE NguoiBanHang LIKE '%" &
TextBoxNguoiBanHang.Text & "%')"
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
Me.DataGridView1.DataSource =
ds.Tables(0).DefaultView
Me.DataGridView1.Columns(0).HeaderText = "Số HĐ"
Me.DataGridView1.Columns(1).HeaderText = "Tên
mặt hàng"
Me.DataGridView1.Columns(2).HeaderText = "ĐVT"
Me.DataGridView1.Columns(3).HeaderText = "Số
lượng"
Me.DataGridView1.Columns(4).HeaderText = "Đơn
giá"
Me.DataGridView1.Columns(5).HeaderText = "Thành
tiền"
GroupBox2.Text = "Kết quả tìm kiếm (" +
Me.DataGridView1.RowCount.ToString() + " kết quả)"
cn.Close()
End Using
114
End Using
End If
End Sub
3. Kết quả thiết kế
Hình 58. Kết quả thiết kế form tìm kiếm thông tin mặt hàng khách hàng đã mua
4. Kết quả thực thi
Hình 59. Kết quả thực thi form tìm kiếm thông tin mặt hàng khách hàng đã mua
Công việc 5. Thiết kế một form để tìm kiếm thông tin về các lần bán một mặt
hàng của một nhân viên bán hàng và hiển thị kết quả trên form theo mẫu sau.
115
Hình 60. Form tìm kiếm thông tin số lần một mặt hàng đã mua bời khách hàng
1. Phân tích yêu cầu
Theo yêu cầu trên thì phải thiết kế một form có chứa:
- Các đối tƣợng có nội dung “TÌM KIẾM THÔNG TIN”, “Họ tên ngƣời bán
hàng”, “Mặt hàng” là các Label.
- Các đối tƣợng thông tin tìm kiếm, kết quả tìm kiếm là các GroupBox.
- Ô nhập họ tên ngƣời bán hàng là một textbox
- Danh sách lựa chọn mặt hàng là một Combobox.
- Các nút Tìm, Đóng là các đối tƣợng Button
- Lƣới hiển thị kết quả tìm kiếm là một DataGridView
2. Hướng dẫn thao tác
Thực hiện các thao tác tƣơng tự phần trên để tạo form
frmTimKiemNguoiBanHangMatHang và thiết lập thuộc tính cho các đối tƣợng trên
form frmTimKiemNguoiBanHangMatHang phù hợp yêu cầu.
Viết đoạn mã lệnh cho các điều khiển trên form
frmTimKiemNguoiBanHangMatHang nhƣ sau:
Lƣu ý: Để thao tác với cơ sở dữ liệu SQL Server phải thêm vào
thƣ viện System.Data.SqlClient bằng đoạn mã
Imports System.Data.SqlClient
116
Mã lệnh khi form xuất hiện
Private Sub frmTimKiemNguoiBanHangMatHang_Load(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
'TODO: This line of code loads data into the
'QLYBHDataSet.tblMatHang' table. You can move, or remove it, as
needed.
Me.TblMatHangTableAdapter.Fill(Me.QLYBHDataSet.tblMatHang)
Me.ComboBoxMatHang.DataSource =
Me.QLYBHDataSet.tblMatHang
Me.ComboBoxMatHang.DisplayMember = "TenMatHang"
Me.ComboBoxMatHang.ValueMember = "MaMH"
End Sub
Mã lệnh khi nhấn vào nút Đóng
Private Sub ButtonDong_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonDong.Click
'Đóng form
Me.Close()
End Sub
Mã lệnh khi nhấn vào nút Tìm
Private Sub ButtonTim_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonTim.Click
If String.IsNullOrEmpty(TextBoxNguoiBanHang.Text) Then
'Thông báo
MessageBox.Show("Chưa nhập họ tên người bán hàng.",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
117
Me.TextBoxNguoiBanHang.Focus()
Else
'Thực hiện tìm kiếm và hiển thị kết quả trên lưới
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Tạo câu lệnh truy vấn tương ứng với lựa chọn của người
sử dụng
'Tìm kiếm tương đối theo tên khách hàng
sqlTimKiem = "SELECT tblChiTietHoaDon.SoHieuHD,
tblMatHang.TenMatHang, tblMatHang.DVT,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.DonGia * tblChiTietHoaDon.SoLuong AS
ThanhTien FROM tblChiTietHoaDon, tblMatHang WHERE
tblMatHang.MaMH = tblChiTietHoaDon.MaMH AND
tblChiTietHoaDon.SoHieuHD IN (SELECT SoHieuHD FROM
tblBanHang WHERE NguoiBanHang LIKE '%" &
TextBoxNguoiBanHang.Text & "%') AND tblChiTietHoaDon.MaMH
= " & ComboBoxMatHang.SelectedValue
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
Me.DataGridView1.DataSource =
118
ds.Tables(0).DefaultView
Me.DataGridView1.Columns(0).HeaderText = "Số HĐ"
Me.DataGridView1.Columns(1).HeaderText = "Tên
mặt hàng"
Me.DataGridView1.Columns(2).HeaderText = "ĐVT"
Me.DataGridView1.Columns(3).HeaderText = "Số
lượng"
Me.DataGridView1.Columns(4).HeaderText = "Đơn
giá"
Me.DataGridView1.Columns(5).HeaderText = "Thành
tiền"
GroupBox2.Text = "Kết quả tìm kiếm (" +
Me.DataGridView1.RowCount.ToString() + " kết quả)"
cn.Close()
End Using
End Using
End If
End Sub
3. Kết quả thiết kế
Hình 61. Kết quả thiết kế form tìm kiếm số lần mặt hàng khách hàng đã mua
119
4. Kết quả thực thi
Hình 62. Kết quả thực thi form tìm kiếm số lần mặt hàng khách hàng đã mua
2.2.3. Bài tập thực hành
Bài tập số 1. Để quản lý việc phân công giảng dạy trong một học kỳ cho giáo
viên của khoa CNTT, khoa có một cơ sở dữ liệu QLYGD.MDF trong đó có các bảng:
tblGiaoVien(MaGV, HoTen, BoMon, DMGD)
tblMonHoc(Mamon, Tenmon, SoTinChi)
tblPhanCong(MaGV, MaMon, LHP, SSO)
Tiếp tục với bài tập số 1 đã thực hiện trong phần bài tập thực hành của bài 1 thực hiện
các công việc sau:
Công việc 1:
Thiết kế một form để tìm kiếm thông tin về giáo viên và hiển thị kết quả trên
form theo mẫu sau:
120
Hình 63. Form tìm kiếm thông tin giáo viên
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm thông tin:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Đỏ
- Các nhãn Tìm theo, Nội dung tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
121
Mầu chữ: Đen
- Các radio button Mã giáo viên, tên giáo viên, tất cả
Font: Microsoft Sans Serif, Bold, 9
Căn giữa theo chiều dọc
Mầu chữ: Đen
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào giá trị lựa chọn ở
các radio button trong phần Tìm theo và điều kiện tìm kiếm trong ô nội dung tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các giáo viên gồm các thông tin: Mã giáo
viên, Họ tên giáo viên, Bộ môn, Định mức giảng dạy và hiển thị ở trên DataGridView
phía dƣới.
Tìm theo mã giáo viên: Yêu cầu tìm chính xác theo mã giáo viên đƣợc nhập từ
bàn phím vào ô textbox nội dung tìm kiếm.
Tìm theo tên giáo viên: Yêu cầu tìm gần đúng theo tên giáo viên đƣợc nhập từ
bàn phím vào ô textbox nội dung tìm kiếm (ví dụ: nhập “an” ở ô nội dung tìm kiếm sẽ
trả về các kết quả Nguyễn Văn An, Trần Văn Anh, Mai Thế Cang, …)
Tìm theo tất cả: Sẽ hiển thị tất cả các giáo viên. Danh sách kết quả sắp xếp theo
thứ tự từ điển.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
122
Công việc 2: Thiết kế một form để tìm kiếm thông tin về môn học và hiển thị kết quả
trên form theo mẫu sau:
Hình 64. Form tìm kiếm môn học
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm môn học:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Tìm theo, Nội dung tìm kiếm
123
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Các radio button Mã giáo viên, tên giáo viên, tất cả
Font: Microsoft Sans Serif, Bold, 9
Căn giữa theo chiều dọc
Mầu chữ: Đen
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các môn học gồm các thông tin: Mã môn học,
Tên môn học, Số tín chỉ và hiển thị ở trên DataGridView phía dƣới.
Tìm theo mã môn học: Yêu cầu tìm chính xác theo mã môn học đƣợc nhập từ
bàn phím vào ô textbox nội dung tìm kiếm.
Tìm theo tên môn học: Yêu cầu tìm gần đúng theo tên môn học đƣợc nhập từ
bàn phím vào ô textbox nội dung tìm kiếm (ví dụ: nhập “cơ sở” ở ô nội dung tìm kiếm
sẽ trả về các kết quả Hệ quản trị cơ sở dữ liệu, Cơ sở dữ liệu phân tán, Cơ sở dữ liệu
SQL Server, …)
Tìm theo tất cả: Sẽ hiển thị tất cả các môn học. Danh sách kết quả sắp xếp theo
thứ tự từ điển.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 3. Thiết kế form tìm kiếm phân công của giáo viên theo mẫu sau
124
Hình 65. Tìm kiếm phân công giáo viên
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm phân công:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã giáo viên, Họ tên giáo viên
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
125
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các môn học gồm các thông tin: Môn học, lớp
học phần, sĩ số và hiển thị ở trên DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 4. Thiết kế form tìm kiếm phân công của giáo viên theo môn học theo mẫu
sau
126
Hình 66. Tìm kiếm phân công giáo viên theo môn học
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm phân công:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã giáo viên, Chọn môn học
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
127
- Danh sách lựa chọn môn học:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Nguồn dữ liệu lấy từ bảng môn học
Dữ liệu hiển thị là tên môn học
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các môn học gồm các thông tin: Môn học, lớp
học phần, sĩ số và hiển thị ở trên DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Bài tập số 2. Để quản lý tài sản của các đơn vị trong một trƣờng ngƣời ta tổ
chức một cơ sở dữ liệu QLTAISAN.MDF có các bảng nhƣ sau:
tblDonVi(MaDV, TenDV, ViTri, SoNhanVien)
tblTaiSan(MaTS, TenTS, DVT, HSD)
tblQuanLy(MaDV, MaTS, SoLuong, NgayCap, TinhTrang)
Tiếp tục với bài tập số 2 đã thực hiện trong phần bài tập thực hành của bài 1 thực hiện
các công việc sau:
Công việc 1: Thiết kế form tìm kiếm thông tin về đơn vị theo mẫu
128
Hình 67. Form tìm kiếm đơn vị
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm đơn vị:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Tìm theo, Nội dung tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
129
- Các radio button Mã giáo viên, tên giáo viên, tất cả
Font: Microsoft Sans Serif, Bold, 9
Căn giữa theo chiều dọc
Mầu chữ: Đen
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các đơn vị gồm các thông tin: Mã đơn vị, Tên
đơn vị, Số tín chỉ và hiển thị ở trên DataGridView phía dƣới.
Tìm theo mã đơn vị: Yêu cầu tìm chính xác theo mã đơn vị đƣợc nhập từ bàn
phím vào ô textbox nội dung tìm kiếm.
Tìm theo tên đơn vị: Yêu cầu tìm gần đúng theo tên đơn vị đƣợc nhập từ bàn
phím vào ô textbox nội dung tìm kiếm (ví dụ: nhập “phòng” ở ô nội dung tìm kiếm sẽ
trả về các kết quả phòng KH & HTQT, phòng đào tạo, …)
Tìm theo tất cả: Sẽ hiển thị tất cả các đơn vị. Danh sách kết quả sắp xếp theo
thứ tự từ điển.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 2. Thiết kế form tìm kiếm thông tin về tài sản
130
Hình 68. Fom tìm kiếm tài sản
Yêu cầu
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm tài sản:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Tìm theo, Nội dung tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
131
- Các radio button Mã tài sản, tên tài sản, tất cả
Font: Microsoft Sans Serif, Bold, 9
Căn giữa theo chiều dọc
Mầu chữ: Đen
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các tài sản gồm các thông tin: Mã tài sản, Tên
tài sản, Số tín chỉ và hiển thị ở trên DataGridView phía dƣới.
Tìm theo mã tài sản: Yêu cầu tìm chính xác theo mã tài sản đƣợc nhập từ bàn
phím vào ô textbox nội dung tìm kiếm.
Tìm theo tên tài sản: Yêu cầu tìm gần đúng theo tên tài sản đƣợc nhập từ bàn
phím vào ô textbox nội dung tìm kiếm (ví dụ: nhập “máy” ở ô nội dung tìm kiếm sẽ trả
về các kết quả máy vi tính, máy tiện vạn năng, thang máy, …)
Tìm theo tất cả: Sẽ hiển thị tất cả các tài sản. Danh sách kết quả sắp xếp theo
thứ tự từ điển.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 3: Thiết kế form tìm kiếm thông tin về tài sản thuộc đơn vị theo mẫu sau:
132
Hình 69. Fom tìm kiếm tài sản thuộc đơn vị
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm phân công:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã giáo viên, Chọn đơn vị
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
133
- Danh sách lựa chọn đơn vị:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Nguồn dữ liệu lấy từ bảng đơn vị
Dữ liệu hiển thị là tên đơn vị
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các đơn vị gồm các thông tin: Tài sản, số
lƣợng, ngày cấp, tình trạng và hiển thị ở trên DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 4. Thiết kế form tìm kiếm thông tin về tài sản có tình trạng theo mẫu sau:
134
Hình 70. Form tìm kiếm tài sản theo tình trạng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm phân công:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã giáo viên, Chọn đơn vị
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
135
- Danh sách lựa chọn tình trạng:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Nguồn dữ liệu lấy từ danh sách các tình trạng ở đƣợc lọc từ bảng
tblQuanLy, các tình trạng này là hiển thị duy nhất.
Dữ liệu hiển thị là tên tình trạng.
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các đơn vị gồm các thông tin: Tên đơn vị, Tên
tài sản, số lƣợng, ngày cấp và hiển thị ở trên DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Bài tập số 3. Cho cơ sở dƣ̃ liê ̣u Quản lý đi ểm có tên QLDIEM .MDF gồm các
bảng:
tblSinhVien(MaSV, Hoten, Ngaysinh, Noisinh, Gioitinh, Diachi, Makhoa,
LopNC)
tblKhoa(Makhoa, Tenkhoa)
tblMonHoc(Mamon, Tenmon, Sohocphan, Giaovien)
tblDiem(Mamon, MaSV, Diem, HocKy)
Công việc 1: Thiết kế form tìm kiếm thông tin môn học
136
Hình 71. Form tìm kiếm môn học
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm môn học:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã môn học, Tên môn học
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
137
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các môn học gồm các thông tin: Mã môn học,
Tên môn học, Số học phần và hiển thị ở trên DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 2: Thiết kế form tìm kiếm thông tin về khoa
138
Hình 72. Form tìm kiếm thông tin về khoa
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm khoa:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã khoa, Tên khoa
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
139
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các khoa gồm các thông tin: Mã khoa, Tên
khoa và hiển thị ở trên DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 3: Thiết kế form tìm kiếm thông tin sinh viên theo mẫu sau:
Hình 73.Form tìm kiếm sinh viên
140
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm sinh viên:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã sinh viên, Họ tên sinh viên
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các sinh viên gồm các thông tin: Mã sinh
viên, Họ tên sinh viên, Ngày sinh, Nơi sinh, Giới tính, Địa chỉ và hiển thị ở trên
DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 3: Thiết kế form tìm kiếm điểm của sinh viên trong học kỳ
141
Hình 74. Form tìm kiếm điểm của sinh viên theo học kỳ
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm điểm sinh viên:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã sinh viên, Chọn học kỳ
Font: Microsoft Sans Serif, Bold, 9
142
Mầu chữ: Đen
- Danh sách học kỳ:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Giá trị học kỳ từ 1 đến 9.
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các đơn vị gồm các thông tin: Tên môn học,
Số học phần, Điểm, Giáo viên và hiển thị ở trên DataGridView phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
Công việc 4: Thiết kế form tìm kiếm điểm của các sinh viên theo môn học trong học
kỳ
143
Hình 75. Form tìm kiếm điểm sinh viên theo môn học
Yêu cầu
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn Tìm kiếm điểm sinh viên:
Font: Microsoft Sans Serif, Bold, 18
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Xanh
- Các nhãn Mã sinh viên, Chọn môn học
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Danh sách môn học:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
144
Nguồn dữ liệu danh sách môn học lấy từ bảng tblMonHoc
Nội dung hiển thị là tên môn học
- Nút lệnh Tìm kiếm
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: T
Khi nhấn vào nút lệnh tìm kiếm, chƣơng trình sẽ căn cứ vào điều kiện tìm kiếm
chƣơng trình sẽ đƣa ra kết quả tìm kiếm các đơn vị gồm các thông tin: Họ tên sinh
viên, Tên môn học, Số học phần, Điểm, Giáo viên và hiển thị ở trên DataGridView
phía dƣới.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc tìm kiếm không. Nếu
chọn Yes sẽ đóng form tìm kiếm. Nếu chọn No sẽ trở lại form.
2.3. Bài tập về nhà
Bài tập số 4. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin tại xuất nhập kho công ty BCD
Bài tập số 5. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin thƣ viện tại trƣờng XYZ
Bài tập số 6. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin ký túc xá
Bài tập số 7. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin các đề tài khoa học tại trƣờng đại học SPK
Bài tập số 8. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin giải bóng đá vô địch quốc gia
Bài tập số 9. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin nhân sự tại công ty ABC
145
Bài tập số 10. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin thi đua khen thƣởng tại công ty ABC
146
BÀI 3. LẬP TRÌNH VÀ IN ẤN BÁO CÁO
Mục tiêu
Sau bài học, sinh viên có khả năng:
- Kiến thức: Biết sử dụng Crystal Report để thiết kế báo cáo. Lập trình trên Form để
thực hiện việc xem và in báo cáo.
- Kỹ năng: Vận dụng đƣợc kiến thức thiết kế báo cáo và lập trình trên Form để thực
hiện việc xem và in báo cáo vào giải quyết các bài toán thực tế.
- Thái độ:
+ Nghiêm túc, sáng tạo
+ Tích cực tập luyện
Chuẩn bị dụng cụ, vật tư, thiết bị
Chuẩn bị máy tính có hệ điều hành Windows XP hoặc cao hơn, phần mềm
Microsoft Office, bộ gõ Tiếng Việt, phần mềm SQL Server 2000 hoặc cao hơn, phần
mềm Visual Studio 2008 có cài đặt Crystal Report hoặc cao hơn.
3.1. Tóm tắt kiến thức cần nhớ
Reports là công cụ để trình bày và tóm tắt dữ liệu trong một văn bản để in ra
giấy. Report có hai thành phần cơ bản cấu thành: dữ liệu nguồn (source data) và hình
thức trình bày (Layout) là dạng thức của Report sẽ định dạng cách kết xuất dữ liệu.
Mỗi Report yêu cầu chỉ rõ trƣờng nào muốn thể hiện trên Report, tiêu đề và các
thông tin đó đặt ở đâu trên trang giấy. Report không lƣu trữ dữ liệu mỗi Field của
bảng dữ liệu. Nó chỉ lƣu trữ kết nối và định dạng kết xuất của các trƣờng trên Report
Layout. Giá trị của các Field đó có thể thay đổi mỗi khi chạy Report, nó tuỳ thuộc vào
việc thay đổi các giá trị của các Field trong các bảng dữ liệu nguồn.
1. Các bƣớc chính để thiết kế một Report:
- Xác định loại Report cần tạo
- Tạo Report LayOut.
- Chạy thử Report.
147
- Chỉnh sửa LayOut của Report để đạt yêu cầu.
- Ghi Report.
Nhƣ vậy, thiết kế một Report chẳng qua là thiết kế cách trình bày báo cáo
(Report Layout).
Báo cáo có thể trình bày ở nhiều dạng khác nhau. Ở đây ta chỉ quan tâm tới 2
dạng:
Dạng 1 là Label thƣờng đƣợc sử dụng để trình bày thông tin trong một bản ghi
của cơ sở dữ liệu ví dụ nhƣ giấy mời họp, hoặc giấy báo kết quả thi tuyển sinh, nhãn
của một nhóm sản phẩm nào đó, …Có thể in một Label hoặc nhiều Label trên một
trang giấy in.
Hình 76. Báo cáo dạng label in nhiều label trên một trang
148
Hình 77. Báo cáo dạng label in trên một trang
Dạng 2 là Report thƣờng dùng để trình bày thông tin của nhiều bản ghi trong cơ
sở dữ liệu, trong loại này có thể trình bày theo kiểu bảng không phân nhóm, phân
nhóm theo một hoặc nhiều tiêu chí, loại một – nhiều, … Có thể in một hoặc nhiều
Report trên một hoặc nhiều trang giấy in.
Hình 78. Báo cáo dạng 1 bản ghi trên một trang
Nhƣ vậy, tạo một Report chẳng qua là tạo một Report Layout.
2. Để xây dựng một form dùng để cập nhật dữ liệu cho một cơ sở dữ liệu bằng
VB.NET, thực hiện các bƣớc sau:
149
1. Xây dựng một form mới để điều khiển việc xem in báo cáo.
2. Đƣa các điều khiển vào form xem, in báo cáo.
3. Đặt thuộc tính cho form và các điều khiển trên form xem, in báo cáo.
4. Kết nối form xem in báo cáo với báo cáo.
5. Lập trình cho các sự kiện thực thi các nhiệm vụ.
6. Chạy thử.
7. Hiệu chỉnh form.
8. Ghi kết quả.
Crystal Report là một phần mềm công cụ mạnh hỗ trợ ngƣời lập trình thiết kế
các báo cáo. Khi thiết kế báo cáo bằng Crystal Report, trƣớc tiên phải chọn loại báo
cáo bằng cách:
1. Chọn Project đang xây dựng từ cửa sổ Solution Explorer.
2. Trên thanh menu chọn Project / Add New Item. Xuất hiện cửa sổ Add New Item.
Hình 79. Cửa sổ Add New Item
3. Chọn Reporting ở khung bên trái của cửa sổ / chọn Crystal Reports / nhập tên giấy
mời vào ô textbox Name là GiayMoiKhachHang.rpt. Sau đó nhấn nút Add. Xuất hiện
cửa sổ Crystal Reports Gallery.
150
Hình 80. Cửa sổ Crystal Reports Gallery
Bảng 4. Các hình thức tạo báo cáo bằng Crystal Report.
Lựa chọn Mô tả
Using the Report Expert Sử dụng trợ giúp của Crystal Report để tạo
báo cáo.
As a Blank Report Tạo báo cáo một các thủ công từ một báo cáo
trắng.
From an Existing Report Tạo báo cáo từ một báo cáo khác đã có sẵn.
151
Chọn As a Blank Report / nhấn nút OK. Xuất hiện cửa sổ thiết kế báo cáo gồm 5
section:
Bảng 5. Các phần chính trên một báo cáo.
Phần thể hiện Mô tả
Section 1 (Report Dùng để trình bày tiêu đề đầu của mỗi báo
Header) cáo. Tiêu đề này chỉ xuất hiện một lần ở đầu
báo cáo
Section 2 (Page Header) Dùng để trình bày tiêu đề đầu của mỗi trang in
báo cáo. Tiêu đề này xuất hiện ở đầu mỗi
trang giấy in
Section 3 (Details) Dùng để trình bày dữ liệu của các bản ghi
trong cơ sở dữ liệu cần hiển thị trên báo cáo.
Section 4 (Report Dùng để trình bày tiêu đề cuối của mỗi báo
Footer) cáo. Tiêu đề này chỉ xuất hiện một lần ở cuối
báo cáo.
Section 5 (Page Footer) Dùng để trình bày tiêu đề cuối của mỗi trang
in báo cáo. Tiêu đề này xuất hiện ở cuối mỗi
trang giấy in.
152
Ngoài các section này, Crystal Report còn cung cấp thêm một số section nữa
nhƣ: Group Header, Group Footer để sử dụng khi thiết kế báo cáo có phân nhóm.
Trong các section này ngƣời thiết kế báo cáo có thể bố trí các điều khiển để
điều khiển việc hiển thị dữ liệu trên báo cáo.
Trong phần thực hành sẽ sử dụng các section và các điều khiển này vào các
công việc cụ thể.
Để điều khiển việc xem in báo cáo trong ứng dụng, ngƣời ta thƣờng thiết kế
một form, trong đó có các điều khiển việc xem in báo cáo và lập trình cho các sự kiện
của các điều khiển này.
Chẳng hạn:
Hình 81. Form điều khiển việc in giấy mời khách hàng
Hay:
153
Hình 82. Form điều khiển việc in hóa đơn bán hàng
Lƣu ý: Để thao tác với Crystal Report ngƣời lập trình phải đƣa
vào các thƣ viện bằng đoạn mã sau:
Imports CrystalDecisions.CrystalReports.Engine
3.2. Hướng dẫn thực hành
3.2.1. Bài tập mẫu
Tiếp tục với bài tập mẫu đã thực hiện ở bài 2 thực hiện các công việc sau:
Công việc 1: Thiết kế giấy mời hội nghị khách hàng hàng năm
1. Sử dụng Crystal Report thiết kế giấy mời khách hàng theo mẫu sau
154
Hình 83. Giấy mời tham dự hội nghị khách hàng
Yêu cầu:
Font: Times New Roman, 13.
Cỡ giấy: A5.
Hƣớng giấy: Ngang
Lề trên: 2 cm
Lề dƣới: 2 cm.
Lề trái: 2 cm
Lề phải: 2 cm.
Dữ liệu báo cáo: Lấy từ nội dung bảng khách hàng trong cơ sở dữ liệu.
Ngày in giấy mời sẽ lấy từ đồng hồ hệ thống.
2. Thiết kế form điều khiển việc in giấy mời khách hàng theo mẫu sau
155
Hình 84. Form điều khiển việc in giấy mời khách hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in giấy mời khách hàng:
Font: Microsoft Sans Serif, Bold, 16
Căn giữa màn hình form tìm kiếm theo chiều ngang
Mầu chữ: Đen
- Các nhãn In theo, mã khách hàng
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Lựa chọn tất cả khách hàng, từng khách hàng:
Là dạng radio button.
Mặc định lựa chọn tất cả khách hàng
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
156
Khi lựa chọn tất cả khách hàng thì tự động giá trị ô nhập mã khách hàng
bị xóa và đồng thời khóa ô nhập mã khách hàng
Khi lựa chọn từng khách hàng thì mở khóa ô nhập mã khách hàng cho
phép ngƣời sử dụng nhập giá trị vào.
- Ô nhập mã khách hàng
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Mặc định bị khóa không cho nhập dữ liệu. Chỉ khi lựa chọn từng khách
hàng đƣợc chọn thì mới mở khóa cho ngƣời dùng nhập.
Khi nhập vào một mã khách hàng sẽ tự động hiện ra họ tên khách hàng ở
textbox bên dƣới.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng ở phần in theo để hiển thị tất cả danh sách giấy mời hay chỉ một giấy
mời của khách hàng tƣơng ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng ở phần in theo để in danh sách tất cả các giấy mời hay chỉ một giấy mời của
khách hàng tƣơng ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
157
Công việc 2:
1. Sử dụng Crystal Report thiết kế
a) Bảng kê bán hàng hàng ngày theo mẫu sau
Hình 85. Mẫu bảng kê bán hàng
b) Hóa đơn bán hàng theo mẫu sau
Hình 86. Hóa đơn bán hàng
Yêu cầu:
Font: Times New Roman, 13.
Cỡ giấy: A5.
Hƣớng giấy: Dọc
Lề trên: 1 cm
158
Lề dƣới: 1 cm.
Lề trái: 1 cm
Lề phải: 1 cm.
Dữ liệu báo cáo: Lấy từ nội dung các bảng bán hàng, chi tiết bán hàng,
khách hàng, mặt hàng trong cơ sở dữ liệu.
Tạo mới một trƣờng thành tiền để tính tiền thành tiền của mỗi mặt hàng
trên hóa đơn
Tạo mới một công thức để tính tổng tiền của hóa đơn bán hàng
Các dữ liệu số trên hóa đơn: Dùng dấu . để phân cách phần nghìn, sử
dụng tới 2 số sau phần thập phân.
Cột số thứ tự lấy giá trị tự động từ danh sách dữ liệu của hóa đơn bán
hàng. Không sử dụng dấu . để phân cách phần nghìn. Giá trị số thứ tự
căn giữa cột.
Kẻ khung cho phần danh sách các mặt hàng đã mua.
159
2. Thiết kế form điều khiển việc in ấn hóa đơn bán hàng theo mẫu sau:
Hình 87. Form điều khiển việc in hóa đơn
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in hóa đơn bảng kê bán hàng:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Đen
- Các nhãn Lựa chọn in, từ ngày, đến ngày, in theo, số hiệu hóa đơn
160
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách lựa chọn in
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có 2 giá trị: Hóa đơn bán hàng, bảng kê bán hàng
- Lựa chọn tất cả hóa đơn, từng hóa đơn:
Là dạng radio button.
Mặc định lựa chọn tất cả hóa đơn
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Khi lựa chọn tất cả hóa đơn thì tự động giá trị ô nhập số hiệu hóa đơn bị
xóa và đồng thời khóa ô nhập số hiệu hóa đơn
Khi lựa chọn từng hóa đơn thì mở khóa ô nhập số hiệu hóa đơn cho phép
ngƣời sử dụng nhập giá trị vào.
- Ô nhập số hiệu hóa đơn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Mặc định bị khóa không cho nhập dữ liệu. Chỉ khi lựa chọn từng hóa
đơn đƣợc chọn thì mới mở khóa cho ngƣời dùng nhập.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị tất cả hóa đơn bán hàng, một hóa đơn bán hàng hoặc một
bảng kê bán hàng từ ngày đến ngày tƣơng ứng tại một form mới.
- Nút lệnh In ấn
161
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in tất cả hóa đơn bán hàng, một hóa đơn bán hàng hoặc một bảng kê bán hàng
từ ngày đến ngày tƣơng ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
b) Thiết kế form xem trước hóa đơn bán hàng theo mẫu sau:
Hình 88. Form xem trước khi in hóa đơn bán hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
162
- Form xuất hiện chính giữa màn hình
- Nhãn xem trƣớc hóa đơn:
Font: Microsoft Sans Serif, 18pt.
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Đen
- Khung hiển thị báo cáo:
Không có phần có thanh công cụ.
Không có thanh trạng thái.
Giao diện hiển thị không có phần cây thƣ mục ở bên trái.
- Ô nhập số hiệu hóa đơn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
- Nút lệnh <<
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Khi nhấn vào nút lệnh << sẽ chuyển về hóa đơn đầu tiên và hiển thị ở khung
bên trên.
- Nút lệnh <
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Khi nhấn vào nút lệnh < sẽ chuyển về trƣớc đó một hóa đơn.
- Nút lệnh >
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Khi nhấn vào nút lệnh > sẽ chuyển về sau đó một hóa đơn.
- Nút lệnh >>
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
163
Khi nhấn vào nút lệnh >> sẽ chuyển về hóa đơn đầu tiên và hiển thị ở khung
bên trên.
- Nút lệnh Tìm kiếm:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Có ảnh gợi nhớ nhƣ hình.
Khi nhấn vào nút lệnh sẽ tìm trong cơ sở dữ liệu hóa đơn bán hàng phù hợp và
hiển thị lên khung bên trên hoặc thông báo không tìm thấy.
- Nút lệnh In ấn:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Có ảnh gợi nhớ nhƣ hình.
Khi nhấn vào nút lệnh sẽ tìm trong cơ sở dữ liệu hóa đơn bán hàng phù hợp và
in hóa đơn ra máy in mặc định hoặc thông báo không tìm thấy.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Có ảnh gợi nhớ nhƣ hình.
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
164
Công việc 3. Thiết kế báo cáo thống kê bán hàng theo ngƣời bán.
a) Sử dụng Crystal Report thiết kế báo cáo thống kê các hóa đơn bán phân nhóm theo
từng người bán theo mẫu sau
Yêu cầu:
+ Báo cáo đƣợc thiết kế in trên khổ giấy: A4
+ Lề trên: 2cm.
+ Lề dƣới: 2cm.
+ Lề trái: 3cm.
165
+ Lề phải: 2cm
+ Nội dung trên báo cáo đƣợc lấy dữ liệu từ các bảng trong cơ sở dữ liệu
QLYBH.MDF
+ Báo cáo đƣợc phân nhóm theo ngƣời bán hàng. Phải đánh số thứ tự trƣớc mỗi
nhóm và đánh số thứ tự trƣớc mỗi dòng của nhóm, số thứ tự của mỗi dòng sẽ bắt đầu
từ 1 khi bắt đầu một nhóm mới (Đánh lại số thứ tự của dòng theo mỗi nhóm).
+ Ngày tháng năm lấy theo đồng hồ hệ thống.
+ Số trang đánh bắt đầu từ 1 / tổng số trang.
+ Cỡ chữ của các phần trên báo cáo là 13
+ Font chữ: Times New Roman
+ Các nhãn có nội dung là CỬA HÀNG THƢƠNG MẠI ABC, BÁO CÁO
BÁN HÀNG kiểu in đậm.
b) Thiết kế form điều khiển việc xem in báo cáo thống kê bán hàng theo mẫu sau:
Hình 89. Form điều khiển việc in báo cáo bán hàng
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in báo cáo bán hàng:
166
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Đen
- Các nhãn in theo, ngƣời bán hàng:
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách ngƣời bán hàng
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị đƣợc lọc từ những ngƣời bán hàng trong bảng bán hàng.
Mặc định lựa chọn này bị khóa không cho ngƣời sử dụng lựa chọn. Chỉ
khi ngƣời sử dụng lựa chọn in theo từng ngƣời bán hàng thì lựa chọn này
mới đƣợc bật lên.
- Lựa chọn tất cả ngƣời bán hàng, từng ngƣời bán hàng:
Là dạng radio button.
Mặc định lựa chọn tất cả ngƣời bán hàng.
Font: Microsoft Sans Serif, 9pt.
Mầu chữ: Đen
Khi lựa chọn tất cả hóa đơn thì tự động giá trị ô nhập số hiệu hóa đơn bị
xóa và đồng thời khóa ô nhập số hiệu hóa đơn
Khi lựa chọn từng hóa đơn thì mở khóa ô nhập số hiệu hóa đơn cho phép
ngƣời sử dụng nhập giá trị vào.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
167
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị báo cáo bán hàng của tất cả các ngƣời bán hàng hoặc từng
ngƣời bán hàng tƣơng ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in báo cáo bán hàng của tất cả các ngƣời bán hàng hoặc từng ngƣời bán hàng
tƣơng ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
3.2.2 Hướng dẫn thực hiện
Công việc 1. Sử dụng Crystal Report thiết kế giấy mời khách hàng theo mẫu
a) Thiết kế giấy mời bằng Crystal Report
1. Phân tích công việc
Theo yêu cầu trên thì toàn bộ phần nội dung giấy mời phải đƣợc thiết kế trong
phần Details. Trong đó, mẫu của giấy mời là:
168
Hình 90. Mẫu giấy mời khách hàng
Trong đó:
- CỬA HÀNG THƢƠNG MẠI ABC;
- GIẤY MỜI;
- Họ tên khách hàng:
- Địa chỉ:;
- Điện thoại:;
- Trân trọng kính mời quý khách tới tham dự hội nghị khách hàng hàng năm
của cửa hàng thƣơng mại ABC
Thời gian: vào hồi ......giờ, ngày ...... tháng ........ năm ..........................
Địa điểm: Tại......................................................................,
Sự hiện diện của quý khách là niềm vinh hạnh của cửa hàng chúng tôi.
Xin trân trọng cảm ơn !;
- Nam Đinh, ngày;
- GIÁM ĐỐC CÔNG TY.
Mỗi nội dung này là một đối tƣợng văn bản của giấy mời.
Còn phần thể hiện của họ tên, địa chỉ, điện thoại cụ thể của mỗi khách hàng nhƣ
Phan Đức Thiện, Nam Định, 0918875005 đƣợc lấy từ nội dung của các bản ghi trong
bảng khách hàng. Ngày in giấy mời là ngày hiện thời lấy theo đồng hồ máy.
169
2. Hướng dẫn thao tác
Để thiết kế giấy mời khách hàng theo mẫu bằng Crystal Report thực hiện các
bƣớc sau:
1. Chọn Project đang xây dựng từ cửa sổ Solution Explorer.
2. Trên thanh menu chọn Project / Add New Item. Xuất hiện cửa sổ Add New Item.
Hình 91. Cửa sổ Add New Item
3. Chọn Reporting ở khung bên trái của cửa sổ / chọn Crystal Reports / nhập tên giấy
mời vào ô textbox Name là GiayMoiKhachHang.rpt. Sau đó nhấn nút Add. Xuất hiện
cửa sổ Crystal Reports Gallery.
170
Hình 92. Cửa sổ Crystal Reports Gallery
Chọn As a Blank Report / nhấn nút OK. Xuất hiện cửa sổ thiết kế báo cáo gồm 5
section:
Hình 93. Giao diện thiết kế báo cáo bằng Crystal Report
Do đó, để thiết kế cách trình bày giấy mời này thực hiện:
- Kéo đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details (đối tƣợng
này dùng để trình bày văn bản sẽ hiển thị trên báo cáo). Kích chuột vào đối tƣợng và
nhập nội dung CÔNG TY TNHH THƢƠNG MẠI ABC. Nháy phải chuột vào đối
tƣợng Text Object rồi chọn Properties để thiết lập các thuộc tính cho đối tƣợng Text
Object nhƣ sau:
171
+ Font: Times New Roman, 11,25pt, style=Bold.
+ Text align: Center.
+ Điều chỉnh đối tƣợng vào vị trí mong muốn.
- Kéo tiếp đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details vào vị trí
theo yêu cầu. Kích chuột vào đối tƣợng và nhập nội dung là GIẤY MỜI. Nháy phải
chuột vào đối tƣợng Text Object rồi chọn Properties để thiết lập các thuộc tính cho đối
tƣợng Text Object nhƣ sau:
+ Font: Times New Roman, 14pt, style=Bold.
+ Text align: Center.
- Kéo tiếp đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details vào vị trí
theo yêu cầu. Kích chuột vào đối tƣợng và nhập nội dung là Họ tên khách hàng. Nháy
phải chuột vào đối tƣợng Text Object rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Text Object nhƣ sau:
+ Font: Times New Roman, 14pt.
+ Text align: Left.
- Kéo tiếp đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details vào vị trí
theo yêu cầu. Kích chuột vào đối tƣợng và nhập nội dung là Địa chỉ. Nháy phải chuột
vào đối tƣợng Text Object rồi chọn Properties để thiết lập các thuộc tính cho đối tƣợng
Text Object nhƣ sau:
+ Font: Times New Roman, 14pt.
+ Text align: Left.
- Kéo tiếp đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details vào vị trí
theo yêu cầu. Kích chuột vào đối tƣợng và nhập nội dung là Điện thoại. Nháy phải
chuột vào đối tƣợng Text Object rồi chọn Properties để thiết lập các thuộc tính cho đối
tƣợng Text Object nhƣ sau:
+ Font: Times New Roman, 14pt.
+ Text align: Left.
- Kéo tiếp đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details vào vị trí
theo yêu cầu. Kích chuột vào đối tƣợng và nhập nội dung là Trân trọng kính mời …
cảm ơn! nhƣ mẫu. Nháy phải chuột vào đối tƣợng Text Object rồi chọn Properties để
thiết lập các thuộc tính cho đối tƣợng Text Object nhƣ sau:
172
+ Font: Times New Roman, 14pt.
+ Text align: Left.
- Kéo tiếp đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details vào vị trí
theo yêu cầu. Kích chuột vào đối tƣợng và nhập nội dung “Nam Định, ngày ”. Nháy
phải chuột vào đối tƣợng Text Object rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Text Object nhƣ sau:
+ Font: Times New Roman, 14pt, style Italic.
+ Text align: Right.
- Kéo tiếp đối tƣợng Text Object từ cửa sổ Toolbox vào phần Details vào vị trí
theo yêu cầu. Kích chuột vào đối tƣợng và nhập nội dung là QUẢN LÝ CỬA HÀNG.
Nháy phải chuột vào đối tƣợng Text Object rồi chọn Properties để thiết lập các thuộc
tính cho đối tƣợng Text Object nhƣ sau:
+ Font: Times New Roman, 14pt.
+ Text align: Center
Chú ý: Để thực hiện việc giãn dòng văn bản trong đối tƣợng Text Object phải
thực hiện các thao tác sau:
Nháy phải chuột vào đối tƣợng Text Object cần giãn dòng. Chọn Format
Object. Xuất hiện cửa sổ Format Editor
173
Hình 94. Cửa sổ Format Editor
Chọn tab Paragraph. Trong lựa chọn Spacing chọn chế độ giãn dòng trong
combobox của mục Line Spacing và thay đổi giá trị theo mong muốn và nhấn nút OK.
Bây giờ, tiếp tục tiến hành kết nối với cơ sở dữ liệu nguồn là bảng
tblKhachHang để lấy các thông tin họ tên, điện thoại, địa chỉ bằng các thao tác sau:
Từ cửa sổ Field Explorer ở khung bên trái của màn hình thiết kế, nháy phải
chuột vào Database Fields / Database Expert. Xuất hiện cửa sổ Database Expert.
174
Hình 95. Cửa sổ Databse Expert
Trong khung Available Data Soures/ Chọn My Connections / Chọn kết
nối đã tạo lập ở bài 1 / Chọn tiếp đối tƣợng QLYBH / Chọn dbo / Chọn bảng
tblKhachHang và nhấn vào nút mũi tên sang phải để đƣa dữ liệu của bảng sang khung
Selected Tables / Nhấn nút OK.
Kéo trƣờng HoTen vào vị trí mong muốn bên cạnh đối tƣợng có nội dung
“Kính gửi:”
Thực hiện thao tác tƣơng tự kéo trƣờng DiaChi, DienThoai vào vị trí mong
muốn bên cạnh đối tƣợng có nội dung “Địa chỉ: ”, “Điện thoại: ”.
Nháy phải chuột vào màn hình thiết kế báo cáo. Chọn Inserts / Special Fields /
Print Date và kéo vào vị trí mong muốn bên cạnh đối tƣợng có nội dung “Nam Định,
ngày ”.
Để thiết lập dạng hiển thị ngày dạng DD/MM/YYYY thực hiện thao tác sau:
Nháy phải chuột vào đối tƣợng Print Date, chọn Format Object xuất hiện cửa sổ
Format Editor.
175
Hình 96. Cửa sổ Format Editor
Chọn tab Date / chọn Customize, xuất hiện cửa sổ Customize Style
Hình 97. Cửa sổ Custom Style
Và chọn kiểu hiển thị mong muốn rồi nhấn nút OK.
176
Chú ý: Để xem thử báo cáo vừa tạo, nhấn chuột vào nút Main Report Preview
để xem
Chỉnh sửa lại Report nếu cần. Kết thúc việc thiết kế báo cáo phải lƣu lại kết
quả.
3. Kết quả thiết kế:
Hình 98. Kết quả thiết kế giấy mời khách hàng hoàn chỉnh
177
4. Kết quả thực thi
Hình 99. Kết quả thực thi in giấy mời khách hàng
b) Thiết kế form điều khiển việc in giấy mời khách hàng theo mẫu
Hình 100. Form điều khiển việc in giấy mời khách hàng
1. Phân tích yêu cầu.
Theo mẫu trên thì phải có một form chứa:
- Các đối tƣợng có nội dung “IN GIẤY MỜI KHÁCH HÀNG”, “In theo”, Mã
khách hàng” là các Label.
- Các đối tƣợng “Tất cả khách hàng”, “Từng khách hàng” là các Radio Button
- Ô nhập mã khách hàng là một Textbox
178
- Các nút “Xem trƣớc”, “In ấn”, “Kết thúc” là các Button
2. Hướng dẫn thao tác
Để thiết kế form theo mẫu trên cần tiến hành các thao tác sau:
Trên thanh menu, chọn Project/Add New Item.
Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên
frmInGiayMoiKhachHang vào ô Name rồi nhấn nút Add.
- Kéo điều khiển Label từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Label rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Label nhƣ sau:
+ Text: THÔNG TIN KHÁCH HÀNG
+ Font name: Microsoft Sans Serif
+ Font size: 18
+ Font bold: True
+ Các giá trị khác để mặc định
+ Trên menu chọn Format/Center in form/Horizontally để căn giữa.
- Kéo điều khiển Label từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Label rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Label nhƣ sau:
+ Font name: Microsoft Sans Serif
+ Font size: 9
+ Text: In theo
Thực hiện thao tác tƣơng tự để tạo đối tƣợng có nội dung “Mã khách hàng”
- Kéo điều khiển Textbox từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Textbox rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Textbox nhƣ sau:
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Enable: False.
- Kéo điều khiển Radio Button từ cửa sổ Toolbox vào form vào vị trí theo yêu
cầu. Nháy phải chuột vào đối tƣợng Radio Button rồi chọn Properties để thiết lập các
thuộc tính cho đối tƣợng Radio Button nhƣ sau:
+ Name: RadioButtonTatCaKH.
179
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Text: Tất cả khách hàng.
+ Checked: True.
- Kéo điều khiển Radio Button từ cửa sổ Toolbox vào form vào vị trí theo yêu
cầu. Nháy phải chuột vào đối tƣợng Radio Button rồi chọn Properties để thiết lập các
thuộc tính cho đối tƣợng Radio Button nhƣ sau:
+ Name: RadioButtonTungKH.
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Text: Từng khách hàng.
+ Checked: True.
- Kéo điều khiển Button từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Button rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Button nhƣ sau:
+ Name: ButtonXemTruoc.
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Text: Xem trƣớc.
- Kéo điều khiển Button từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Button rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Button nhƣ sau:
+ Name: ButtonInAn.
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Text: In ấn.
- Kéo điều khiển Button từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Button rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Button nhƣ sau:
+ Name: ButtonKetThuc.
+ Font name: Microsoft Sans Serif.
180
+ Font size: 9.
+ Text: Kết thúc.
Viết mã lệnh cho các điều khiển nhƣ sau:
Lƣu ý: Để thao tác với Crystal Report ngƣời lập trình phải đƣa
vào các thƣ viện bằng đoạn mã sau:
Imports CrystalDecisions.CrystalReports.Engine
Mã lệnh khi click vào điều khiển RadioButtonTatCaKH
Private Sub RadioButtonTatCaKH_CheckedChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles
RadioButtonTatCaKH.CheckedChanged
'Bật tắt ô nhập mã khách hàng
TextBoxMaKH.Enabled = Not RadioButtonTatCaKH.Checked
End Sub
Mã lệnh khi click vào điều khiển RadioButtonTatCaKH
Private Sub RadioButtonTungKH_CheckedChanged(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
RadioButtonTungKH.CheckedChanged
'Bật tắt ô nhập mã khách hàng
TextBoxMaKH.Enabled = RadioButtonTungKH.Checked
End Sub
Mã lệnh để hiển thị họ tên khách hàng khi nhập giá trị mã khách hàng vào
textbox mã khách hàng
Private Sub TextBoxMaKH_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
TextBoxMaKH.TextChanged
'Khai báo đối tượng và biến cần sử dụng
181
Dim sqlTimKiem As String
'Thiết lập câu lệnh tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT * FROM tblKhachHang WHERE
[MaKH]=" & TextBoxMaKH.Text
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
'Nếu tồn tại mã khách hàng
If ds.Tables(0).Rows.Count > 0 Then
TextBoxTenKH.Text =
ds.Tables(0).Rows(0).Item("HoTen").ToString()
Else
'Thông báo
MessageBox.Show("Mã khách hàng không đúng",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
cn.Close()
End Using
End Using
End Sub
Mã lệnh khi click vào nút “Kết thúc”
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object,
182
ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
'Đóng form
Me.Close()
End Sub
Mã lệnh khi click vào nút “Xem trƣớc”
Private Sub ButtonXemTruoc_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonXemTruoc.Click
'Khai báo một form kiểu frmXemTruocGiayMoiKhachHang
Dim frm As New frmXemTruocGiayMoiKhachHang
'Hiển thị form frmXemTruocGiayMoiKhachHang ở trên cùng
các cửa sổ khác
frm.ShowDialog()
End Sub
Mã lệnh khi click vào nút “In ấn”
Private Sub ButtonInAn_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonInAn.Click
If RadioButtonTatCaKH.Checked Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
'Tạm khóa nút In ấn
ButtonInAn.Enabled = False
'In tất cả các khách hàng
'Khai báo một đối tượng Crystal Report
Dim myReport As New ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString() &
"\GiayMoiKhachHang.rpt")
183
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName = "Foxit Reader PDF
Printer"
'In giấy mời ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
ButtonInAn.Enabled = True
Else
If RadioButtonTungKH.Checked Then
'Kiểm tra mã khách hàng có tồn tại không
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Thiết lập câu lệnh tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT * FROM tblKhachHang WHERE
[MaKH]=" & TextBoxMaKH.Text
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
'Nếu tồn tại mã khách hàng
If ds.Tables(0).Rows.Count > 0 Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
'Tạm khóa nút In ấn
184
ButtonInAn.Enabled = False
'In giấy mời ra máy in
'Khai báo một đối tượng Crystal Report
Dim myReport As New ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString() &
"\GiayMoiKhachHang.rpt")
'Thiết lập nguồn dữ liêu mới cho giấy mời
myReport.SetDataSource(ds.Tables(0).DefaultView)
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName = "Foxit
Reader PDF Printer"
'In giấy mời ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
ButtonInAn.Enabled = True
Else
'Thông báo
MessageBox.Show("Mã khách hàng không
đúng", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Error)
TextBoxMaKH.Focus()
End If
cn.Close()
End Using
End Using
End If
185
End If
End Sub
3. Kết quả thiết kế:
Hình 101. Kết quả thiết kế form in giấy mời khách hàng
4. Kết quả thực thi:
Sau khi nhấn vào nút “In ấn” với lựa chọn theo từng khách hàng.
Hình 102. Kết quả sau khi thực hiện chức năng in giấy mời khách hàng.
186
Công việc 2. Thiết kế hóa đơn bán hàng
a) Thiết kế hóa đơn bán hàng theo mẫu
1. Phân tích công việc:
Theo yêu cầu trên ta nhận thấy:
Phần thể hiện thông tin về khách hàng, số hóa đơn và các tiêu đề chỉ xuất hiện
một lần ở đầu báo cáo nên phần này đƣa vào phần
Phần thông tin về các mặt hàng đã mua xuất hiện nhiều lần nên phần này sẽ
phải thiết kế trong phần Details
2. Thao tác thực hiện:
Thực hiện các thao tác tƣơng tự nhƣ trong phần hƣớng dẫn thao tác ở công việc
1 để tạo mới một báo cáo có tên HoaDonBanHang.rpt
Nhấn phải chuột vào phần Report Header chọn Insert / Text Object và nhập giá
trị “CỬA HÀNG THƢƠNG MẠI ABC” cho điều khiển này. Thao tác tƣơng tự để tạo
đối tƣợng Text Object có nội dung “HÓA ĐƠN BÁN HÀNG”. Điều chỉnh vị trí và
font chữ của đối tƣợng Text Object này cho phù hợp.
Nhấn phải chuột vào phần Page Footer chọn Insert / Text Object và nhập nội
dung “Trang / ” để tạo phần thống kê số trang cho báo cáo. Sau đó, nhấn phải chuột
vào phần Page Footer của báo cáo chọn Insert / Special Field / Page Number và kéo
vào trƣớc dấu / để hiển thị giá trị trang hiện tại. Nhấn phải chuột vào phần Page Footer
của báo cáo chọn Insert / Special Field / Total Page Count và kéo vào sau dấu / để hiển
thị giá trị tổng số trang của báo cáo.
Thực hiện kết nối dữ liệu cho báo cáo.
Tại cửa sổ Field Explorer, nhấn phải chuột vào Database Fields / Chọn
Database Expert. Xuất hiện cửa sổ Database Expert, tiến hành kết nối tới nguồn dữ
liệu và chọn thủ tục hiển thị dữ liệu cho báo cáo (thủ tục này viết trong phần store
procedure của cơ sở dữ liệu SQL Server) giống nhƣ phần hƣớng dẫn ở trên.
Mã lệnh thủ tục HoaDonBanHang viết trong SQL SERVER
USE [QLYBH]
GO
/****** Object: StoredProcedure [dbo].[HoaDonBanHang]
187
Script Date: 12/07/2014 22:35:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--
=============================================
-- Author:
-- Create date:
-- Description:
--
=============================================
CREATE PROCEDURE [dbo].[HoaDonBanHang]
-- Add the parameters for the stored procedure here
@SoHieuHD int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result
sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT tblBanHang.*, tblKhachHang.HoTen,
tblKhachHang.DienThoai, tblKhachHang.DiaChi,
tblMatHang.TenMatHang, tblMatHang.DVT,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia
AS ThanhTien FROM tblBanHang, tblKhachHang,
tblMatHang, tblChiTietHoaDon WHERE tblBanHang.MaKH
= tblKhachHang.MaKH AND tblBanHang.SoHieuHD =
188
tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH =
tblChiTietHoaDon.MaMH AND tblBanHang.SoHieuHD =
@SoHieuHD
RETURN
END
Trong phần cuối của hóa đơn bán hàng có hiển thị tổng tiền khách hàng phải
trả. Để tính toán và hiển thị đƣợc giá trị tổng tiền này thực hiện nhƣ sau:
Nhấn phải chuột vào Formula Fields ở cửa sổ Field Explorer chọn New. Xuất
hiện cửa sổ Formula Name. Nhập “tongtien” vào ô Name và nhấn OK.
Hình 103. Cửa sổ Formula Name
Xuất hiện cửa sổ Formula Workshop.
Hình 104. Cửa sổ Formula Workshop
Nhập công thức tính tổng tiền vào khung soạn thảo công thức:
189
Sum ({HoaDonBanHang;1.ThanhTien})
Nhấn “Save and close” để lƣu biến hiển thị tổng tiền của hóa đơn.
Tiếp theo, tạo các đối tƣợng Text Object có nội dung “Khách hàng, Địa chỉ,
Điện thoại, Số hóa đơn” ở phần Report Header. Điều chỉnh kích thƣớc, font chữ, mầu
chữ và vị trí các đối tƣợng này cho phù hợp với yêu cầu của báo cáo.
Từ cửa sổ Field Explorer kéo các trƣờng TenMatHang, DVT, SoLuong,
DonGia, ThanhTien vào phần Details.
Nháy phải chuột vào phần Details chọn Insert / Special Field / Record Number
và kéo vào vị trí trƣớc trƣờng TenMatHang ở phần Details để hiển thị số thứ tự. Trong
Crystal Report có nhiều trƣờng đặc biệt, đƣợc xây dựng sẵn nhằm hiển thị các thông
tin liên quan đến báo cáo đƣợc trình bày ở bảng bên dƣới.
Bảng 6. Danh sách các trường đặc biệt trong Crystal Report.
Special Field Mô tả
DataDate Ngày báo cáo đƣợc sửa lần cuối.
DataTime Giờ báo cáo đƣợc sửa lần cuối.
FileAuthor Các tệp tin tác giả đƣợc lƣu trữ cùng với báo cáo
FileCreationDate Ngày tạo báo cáo.
Filename Tên báo cáo
GroupNumber Số thứ tự của nhóm trong báo cáo
Công thức lựa chọn nhóm trong báo cáo.
GroupSelection
ModificationDate Ngày báo cáo đƣợc sửa gần nhất.
ModificationTime Giờ báo cáo đƣợc sửa gần nhất.
PageNofM Hiển thị giá trị “Page số thứ tự của trang of tổng số
190
trang”
PageNumber Số thứ tự trang hiện tại.
PrintDate Ngày in báo cáo.
PrintTime Giờ in báo cáo.
RecordNumber Số thứ tự bản ghi.
RecordSelection Công thức lựa chọn bản ghi.
ReportComments Các chú thích đƣợc lƣu trữ cùng với báo cáo.
ReportTitle Tiêu đề của báo cáo.
TotalPageCount Tổng số trang của báo cáo.
Sau khi chèn trƣờng RecordNumber vào báo cáo, tiến hành thay đổi nội dung
tiêu đề các trƣờng cần hiển thị cho phù hợp với yêu cầu của báo cáo.
Nháy phải chuột vào biến tongtien ở phần Fomula Field chọn Insert to Report
và kéo vào phần Report Footer.
Tạo một đối tƣợng Text Object tại phần Page Footer. Nhập nội dung cho đối
tƣợng Text Object này là “Trang ”. Nháy phải chuột vào phần Page Footer chọn Insert
/ Special Field / Page Number, kéo vào trong nội dung của đối tƣợng Text Object vừa
tạo.
Nháy phải chuột vào phần Report Header chọn Insert / Box để kẻ khung, Insert
/ Line để tạo phân cách cho các trƣờng và các bản ghi của phần chi tiết hóa đơn.
Chuyển sang cửa sổ Main Report Preview để xem kết quả và hiệu chỉnh nếu
cần.
191
3. Kết quả thiết kế:
Hình 105. Kết quả thiết kế hóa đơn bán hàng bằng Crystal Report
4. Kết quả thực thi báo cáo:
Hình 106. Kết quả xem trước hóa đơn bán hàng
192
b) Thiết kế form điều khiển việc in ấn hóa đơn bán hàng theo mẫu
Hình 107. Form in hóa đơn bảng kê bán hàng
1. Phân tích yêu cầu:
Theo mẫu trên thì phải có một form chứa:
- Các đối tƣợng có nội dung “IN HÓA ĐƠN BẢNG KÊ BÁN HÀNG”, “Lựa
chọn in”, “Từ ngày”, “Đến ngày”, “In theo”, “Số hiệu hóa đơn” là các Label.
- Các đối tƣợng “Lựa chọn thời gian cho bảng kê”, “Lựa chọn hóa đơn” là các
GroupBox
- Ô nhập số hiệu hóa đơn là một Textbox
- Các lựa chọn “Tất cả hóa đơn”, “Từng hóa đơn” là các Radio Button
- Các lựa chọn ngày tháng là điều khiển DateTimePicker
- Lựa chọn in là một điều khiển ComboBox
- Các nút “Xem trƣớc”, “In ấn”, “Kết thúc” là các Button
2. Hướng dẫn thao tác
Để thiết kế form theo mẫu trên cần tiến hành các thao tác sau:
Trên thanh menu, chọn Project/Add New Item.
193
Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên
frmInGiayHoaDonBanHang vào ô Name rồi nhấn nút Add.
- Kéo điều khiển Label từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Label rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Label nhƣ sau:
+ Text: IN HÓA ĐƠN BẢNG KÊ BÁN HÀNG
+ Font name: Microsoft Sans Serif
+ Font size: 18
+ Font bold: True
+ Các giá trị khác để mặc định
+ Trên menu chọn Format/Center in form/Horizontally để căn giữa.
- Kéo điều khiển Label từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Label rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Label nhƣ sau:
+ Font name: Microsoft Sans Serif
+ Font size: 9
+ Text: Lựa chọn in
Thực hiện thao tác tƣơng tự để tạo các label còn lại
- Kéo điều khiển ComboBox từ cửa sổ Toolbox vào form vào vị trí theo yêu
cầu. Nháy phải chuột vào đối tƣợng ComboBox rồi chọn Properties để thiết lập các
thuộc tính cho đối tƣợng ComboBox nhƣ sau:
+ Font name: Microsoft Sans Serif
+ Font size: 9
+ Items: (Collection), nhập thêm các giá trị “Bảng kê bán hàng”, “Hóa đơn bán
hàng” cho điều khiển này.
+ DropDownStyle: DropDownList
- Kéo điều khiển GroupBox từ cửa sổ Toolbox vào form vào vị trí theo yêu
cầu. Nháy phải chuột vào đối tƣợng GroupBox rồi chọn Properties để thiết lập các
thuộc tính cho đối tƣợng GroupBox nhƣ sau:
+ Name: GroupBoxChonThoiGian
+ Font name: Microsoft Sans Serif.
194
+ Font size: 9.
+ Text: Lựa chọn thời gian cho bảng kê.
+ Các giá trị khác để mặc định.
+ Enable: False
Thực hiện tƣơng tự với GroupBox lựa chọn hóa đơn.
- Kéo điều khiển DateTimePicker từ cửa sổ Toolbox vào form vào vị trí theo
yêu cầu. Nháy phải chuột vào đối tƣợng DateTimePicker rồi chọn Properties để thiết
lập các thuộc tính cho đối tƣợng DateTimePicker nhƣ sau:
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Name: DateTimePickerTuNgay.
+ Các giá trị khác để mặc định.
Thực hiện tƣơng tự với đối tƣợng DateTimePickerDenNgay.
- Kéo điều khiển Radio Button từ cửa sổ Toolbox vào form vào vị trí theo yêu
cầu. Nháy phải chuột vào đối tƣợng Radio Button rồi chọn Properties để thiết lập các
thuộc tính cho đối tƣợng Radio Button nhƣ sau:
+ Name: RadioButtonTungHD.
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Các giá trị khác để mặc định.
Thực hiện tƣơng tự với đối tƣợng RadioButtonTatCaHD. Đối tƣợng
RadioButtonTatCaHD bổ xung thêm thuộc tính Checked là True.
- Kéo điều khiển TextBox từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng TextBox rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng TextBox nhƣ sau:
+ Name: TextBoxSoHieuHD.
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Enable: False.
+ Các giá trị khác để mặc định.
195
- Kéo điều khiển Button từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Button rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Button nhƣ sau:
+ Name: ButtonXemTruoc.
+ Font name: Microsoft Sans Serif.
+ Font size: 9.
+ Các giá trị khác để mặc định.
Thực hiện tƣơng tự với đối tƣợng ButtonInAn, ButtonKetThuc.
Viết mã lệnh cho các điều khiển trên form để thực hiện thao tác xem in hóa đơn
bán hàng nhƣ sau:
Mã lệnh khi thay đổi lựa chọn in:
Private Sub ComboBoxLuaChonIn_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles
ComboBoxLuaChonIn.SelectedIndexChanged
If ComboBoxLuaChonIn.SelectedIndex = 0 Then
'Cho phép thao tác với GroupBox chọn thời gian
GroupBoxChonThoiGian.Enabled = True
GroupBoxLuaChonHoaDon.Enabled = False
End If
If ComboBoxLuaChonIn.SelectedIndex = 1 Then
'Khóa thao tác với GroupBox chọn thời gian
GroupBoxChonThoiGian.Enabled = False
GroupBoxLuaChonHoaDon.Enabled = True
End If
End Sub
Mã lệnh khi thay đổi lựa chọn tại RadioButtonTatCa:
Private Sub RadioButtonTatCa_CheckedChanged(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
RadioButtonTatCa.CheckedChanged
196
Me.TextBoxSoHoaDon.Enabled = Not
RadioButtonTatCa.Checked
End Sub
Mã lệnh khi thay đổi lựa chọn tại RadioButtonTungHD:
Private Sub RadioButtonTungHD_CheckedChanged(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
RadioButtonTungHD.CheckedChanged
Me.TextBoxSoHoaDon.Enabled =
RadioButtonTungHD.Checked
End Sub
Mã lệnh khi nhấn vào nút “Xem trƣớc”:
Private Sub ButtonXemTruoc_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonXemTruoc.Click
Dim frm As frmXemTruocHoaDon
frm.ShowDialog()
End Sub
Mã lệnh khi nhấn vào nút “Kết thúc”:
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
Me.Close()
End Sub
Mã lệnh khi nhấn vào nút “In ấn”:
Private Sub ButtonInAn_Click(ByVal sender As System.Object,
197
ByVal e As System.EventArgs) Handles ButtonInAn.Click
If ComboBoxLuaChonIn.SelectedIndex = 1 Then
'Lựa chọn in hóa đơn bán hàng
If RadioButtonTatCa.Checked Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
'Tạm khóa nút In ấn
ButtonInAn.Enabled = False
'In tất cả các khách hàng
'Khai báo một đối tượng Crystal Report
Dim myReport As New ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString() &
"\HoaDonBanHang.rpt")
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Duyệt qua tất cả các số hóa đơn
sqlTimKiem = "SELECT SoHieuHD FROM tblBanHang"
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
'Nếu tồn tại số hiệu hóa đơn
If ds.Tables(0).Rows.Count > 0 Then
'Duyệt lần lượt qua các bản ghi
For i As Integer = 0 To ds.Tables(0).Rows.Count
198
- 1
'Thiết lập câu lệnh tìm kiếm theo mã khác
hàng
sqlTimKiem = "SELECT tblBanHang.*,
tblKhachHang.HoTen, tblKhachHang.DienThoai,
tblKhachHang.DiaChi, tblMatHang.TenMatHang, tblMatHang.DVT,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia AS
ThanhTien FROM tblBanHang, tblKhachHang, tblMatHang,
tblChiTietHoaDon WHERE tblBanHang.MaKH =
tblKhachHang.MaKH AND tblBanHang.SoHieuHD =
tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH =
tblChiTietHoaDon.MaMH AND tblBanHang.SoHieuHD = " &
ds.Tables(0).Rows(i).Item("SoHieuHD")
Using cn1 As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd1 As New
SqlCommand(sqlTimKiem, cn)
cmd1.CommandType =
CommandType.Text
If cn.State = ConnectionState.Closed
Then cn.Open()
Dim ds1 As New DataSet()
Dim da1 As New SqlDataAdapter(cmd1)
da1.Fill(ds1)
'Nếu tồn tại số hiệu hóa đơn
If ds1.Tables(0).Rows.Count > 0 Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
'Tạm khóa nút In ấn
199
ButtonInAn.Enabled = False
'Thiết lập nguồn dữ liêu mới cho giấy
mời
myReport.SetDataSource(ds1.Tables(0).DefaultView)
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName =
"Foxit Reader PDF Printer"
'In bảng kê bán hàng ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
ButtonInAn.Enabled = True
End If
cn.Close()
End Using
End Using
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName = "Foxit
Reader PDF Printer"
'In giấy mời ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
Next
End If
End Using
End Using
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
200
ButtonInAn.Enabled = True
Else
If RadioButtonTungHD.Checked Then
'Kiểm tra số hiệu hóa đơn có tồn tại không
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Thiết lập câu lệnh tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT tblBanHang.*,
tblKhachHang.HoTen, tblKhachHang.DienThoai,
tblKhachHang.DiaChi, tblMatHang.TenMatHang, tblMatHang.DVT,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia AS
ThanhTien FROM tblBanHang, tblKhachHang, tblMatHang,
tblChiTietHoaDon WHERE tblBanHang.MaKH =
tblKhachHang.MaKH AND tblBanHang.SoHieuHD =
tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH =
tblChiTietHoaDon.MaMH AND tblBanHang.SoHieuHD = " &
TextBoxSoHoaDon.Text
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
'Nếu tồn tại số hiệu hóa đơn
If ds.Tables(0).Rows.Count > 0 Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
201
'Tạm khóa nút In ấn
ButtonInAn.Enabled = False
'In giấy mời ra máy in
'Khai báo một đối tượng Crystal Report
Dim myReport As New ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString() &
"\HoaDonBanHang.rpt")
'Thiết lập nguồn dữ liêu mới cho giấy mời
myReport.SetDataSource(ds.Tables(0).DefaultView)
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName = "Foxit
Reader PDF Printer"
'In giấy mời ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
ButtonInAn.Enabled = True
Else
'Thông báo
MessageBox.Show("Số hiệu hóa đơn không
đúng", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Error)
TextBoxSoHoaDon.Focus()
End If
cn.Close()
End Using
End Using
202
End If
End If
End If
If ComboBoxLuaChonIn.SelectedIndex = 0 Then
'Lựa chọn bảng kê bán hàng
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Thiết lập câu lệnh tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT * FROM tblBanHang WHERE
DateDiff(Day, " & DateTimePickerTuNgay.Text & ", NgayMuaBan)
>= 0 AND DateDiff(Day, NgayMuaBan, " &
DateTimePickerDenNgay.Text & ") >= 0"
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
'Nếu tồn tại số hiệu hóa đơn
If ds.Tables(0).Rows.Count > 0 Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
'Tạm khóa nút In ấn
ButtonInAn.Enabled = False
'In giấy mời ra máy in
'Khai báo một đối tượng Crystal Report
Dim myReport As New ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
203
myReport.Load(Application.StartupPath.ToString()
& "\BangKeBanHang.rpt")
'Thiết lập nguồn dữ liêu mới cho giấy mời
myReport.SetDataSource(ds.Tables(0).DefaultView)
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName = "Foxit
Reader PDF Printer"
'In giấy mời ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
ButtonInAn.Enabled = True
End If
cn.Close()
End Using
End Using
End If
End Sub
204
3. Kết quả thiết kế:
Hình 108. Kết quả thiết kế form in hóa đơn, bảng kê bán hàng
4. Kết quả thực thi:
Kết quả sau khi nhấn vào nút in ấn với lựa chọn in từng hóa đơn.
Hình 109. Form điều khiển việc in ấn hóa đơn bán hàng
205
Hình 110. Nội dung hóa đơn bán hàng sau khi được in ra máy in
c) Thiết kế form xem trước hóa đơn theo mẫu
1. Phân tích yêu cầu:
Theo yêu cầu trên cần có một form chứa các điều khiển:
Các nhãn (Label) hiển thị nội dung “Số hóa đơn”, “Xem trƣớc hóa đơn”.
Một đối tƣợng Crytal Report Viewer để hiển thị báo cáo trên form.
Các nút lệnh “Tìm kiếm”, “In ấn”, “Kết thúc” có thêm hình ảnh minh họa.
2. Hướng dẫn thao tác:
Thực hiện các thao tác giống nhƣ phần trên để tạo mới một form có tên
frmXemTruocHoaDonBanHang.
- Kéo điều khiển Label từ cửa sổ Toolbox vào form vào vị trí theo yêu cầu.
Nháy phải chuột vào đối tƣợng Label rồi chọn Properties để thiết lập các thuộc tính
cho đối tƣợng Label nhƣ sau:
+ Text: XEM TRƢỚC HÓA ĐƠN BÁN HÀNG
+ Font name: Microsoft Sans Serif
+ Font size: 18
+ Các giá trị khác để mặc định
+ Trên menu chọn Format/Center in form/Horizontally để căn giữa.
206
- Kéo điều khiển Crystal Report từ cửa sổ Toolbox vào form vào vị trí phù hợp.
Nháp phải chuột vào đối tƣợng chọn Properties để thiết lập các thuộc tính cho đối
tƣợng nhƣ sau:
+ Name: CrystalReportViewer1.
+ Anchor: Top, Bottom, Left, Right.
+ BorderStyle: FixedSingle.
+ DisplayStatusBar: False.
+ DisplayToolbar: False.
+ ToolPanelView: None.
+ Các giá trị khác để mặc định.
- Kéo điều khiển Button từ cửa sổ Toolbox vào form ở vị trí phù hợp. Nháy
phải chuột vào đối tƣợng chọn Properties để thiết lập các thuộc tính cho đối tƣợng nhƣ
sau:
+ Name: ButtonDauTien.
+ Font name: Microsoft Sans Serif
+ Font size: 9pt
+ Các giá trị khác để mặc định.
Làm thao tác tƣơng tự để tạo các nút <, >, >>.
- Tiếp tục, kéo điều khiển Button từ cửa sổ Toolbox vào form ở vị trí phù hợp.
Nháy phải chuột vào đối tƣợng chọn Properties để thiết lập các thuộc tính cho đối
tƣợng nhƣ sau:
+ Name: ButtonTimKiem.
+ Font name: Microsoft Sans Serif
+ Font size: 9pt.
+ ImageAlign: MiddleLeft.
+ Text: &Tìm kiếm.
+ TextAlign: MiddleRight.
+ Nhấn biểu tƣợng bên phải thuộc tính Image để lựa chọn hình ảnh cho nút
lệnh. Xuất hiện cửa sổ Select Resource.
207
Hình 111. Cửa sổ Select Resource.
Nhấn vào nút Import để lựa chọn hình ành phù hợp cho nút lệnh. Nhấn OK để
thêm ảnh vào nút lệnh.
+ Các giá trị khác để mặc định.
Thao tác tƣơng tự với các nút lệnh “In ấn”, “Kết thúc”.
Tiến hành viết mã lệnh cho các nút nhƣ sau:
Mã lệnh khi nhấn vào nút “<<”:
Private Sub ButtonDauTien_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDauTien.Click 'Chuyển đến trang đầu tiên của hóa đơn. CrystalReportViewer1.ShowFirstPage() End Sub
Mã lệnh khi nhấn vào nút “<”:
Private Sub ButtonTruoc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTruoc.Click 'Chuyển về phía trước 1 trang. CrystalReportViewer1.ShowPreviousPage() End Sub
Mã lệnh khi nhấn vào nút “>”:
Private Sub ButtonSau_Click(ByVal sender As System.Object,
208
ByVal e As System.EventArgs) Handles ButtonSau.Click 'Chuyển về sau một trang. CrystalReportViewer1.ShowNextPage() End Sub
Mã lệnh khi nhấn vào nút “>>”:
Private Sub ButtonCuoiCung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCuoiCung.Click 'Chuyển đến trang cuối cùng của hóa đơn CrystalReportViewer1.ShowLastPage() End Sub
Mã lệnh khi nhấn vào nút “Kết thúc”:
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonKetThuc.Click If MessageBox.Show("Bạn có chắc chắn muốn đóng form hiện tại.", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then Me.Close() End If End Sub
Mã lệnh khi nhấn vào nút “Tìm kiếm”:
Private Sub ButtonTimKiem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTimKiem.Click If String.IsNullOrEmpty(TextBoxSoHoaDon.Text) Then MessageBox.Show("Số hóa đơn không được để trống và phải là số", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error) Me.TextBoxSoHoaDon.Focus() Else 'Khai báo đối tượng và biến cần sử dụng Dim sqlTimKiem As String 'Thiết lập câu lệnh tìm kiếm theo mã khác hàng sqlTimKiem = "SELECT tblBanHang.*, tblKhachHang.HoTen, tblKhachHang.DienThoai, tblKhachHang.DiaChi, tblMatHang.TenMatHang, tblMatHang.DVT, tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia, tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia AS
209
ThanhTien FROM tblBanHang, tblKhachHang, tblMatHang, tblChiTietHoaDon WHERE tblBanHang.MaKH = tblKhachHang.MaKH AND tblBanHang.SoHieuHD = tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH = tblChiTietHoaDon.MaMH AND tblBanHang.SoHieuHD = " & TextBoxSoHoaDon.Text Using cn As New SqlConnection("Data Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User ID=sa;Password=admin123@") Using cmd As New SqlCommand(sqlTimKiem, cn) cmd.CommandType = CommandType.Text cn.Open() Dim ds As New DataSet() Dim da As New SqlDataAdapter(cmd) da.Fill(ds) 'Nếu tồn tại số hiệu hóa đơn If ds.Tables(0).Rows.Count > 0 Then 'Chuyển trạng thái con trỏ Me.Cursor = Cursors.WaitCursor 'Tạm khóa nút In ấn ButtonInAn.Enabled = False ButtonTimKiem.Enabled = False 'In giấy mời ra máy in 'Khai báo một đối tượng Crystal Report Dim myReport As New ReportDocument() 'Tải báo cáo từ đường dẫn chỉ định myReport.Load(Application.StartupPath.ToString() & "\HoaDonBanHang.rpt") 'Thiết lập nguồn dữ liêu mới cho giấy mời myReport.SetDataSource(ds.Tables(0).DefaultView) 'Hiển thị báo cáo CrystalReportViewer1.ReportSource = myReport 'Trả trạng thái con trỏ về mặc định Me.Cursor = Cursors.Default 'Tạm khóa nút In ấn ButtonInAn.Enabled = True ButtonTimKiem.Enabled = True Else 'Thông báo MessageBox.Show("Số hiệu hóa đơn không đúng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error) TextBoxSoHoaDon.Focus() End If cn.Close() End Using
210
End Using End If End Sub
Mã lệnh khi nhấn vào nút “In ấn”:
Private Sub ButtonInAn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonInAn.Click If String.IsNullOrEmpty(TextBoxSoHoaDon.Text) Then MessageBox.Show("Số hóa đơn không được để trống và phải là số", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error) Me.TextBoxSoHoaDon.Focus() Else 'Khai báo đối tượng và biến cần sử dụng Dim sqlTimKiem As String 'Thiết lập câu lệnh tìm kiếm theo mã khác hàng sqlTimKiem = "SELECT tblBanHang.*, tblKhachHang.HoTen, tblKhachHang.DienThoai, tblKhachHang.DiaChi, tblMatHang.TenMatHang, tblMatHang.DVT, tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia, tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia AS ThanhTien FROM tblBanHang, tblKhachHang, tblMatHang, tblChiTietHoaDon WHERE tblBanHang.MaKH = tblKhachHang.MaKH AND tblBanHang.SoHieuHD = tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH = tblChiTietHoaDon.MaMH AND tblBanHang.SoHieuHD = " & TextBoxSoHoaDon.Text Using cn As New SqlConnection("Data Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User ID=sa;Password=admin123@") Using cmd As New SqlCommand(sqlTimKiem, cn) cmd.CommandType = CommandType.Text cn.Open() Dim ds As New DataSet() Dim da As New SqlDataAdapter(cmd) da.Fill(ds) 'Nếu tồn tại số hiệu hóa đơn If ds.Tables(0).Rows.Count > 0 Then 'Chuyển trạng thái con trỏ Me.Cursor = Cursors.WaitCursor 'Tạm khóa nút In ấn ButtonInAn.Enabled = False 'In giấy mời ra máy in 'Khai báo một đối tượng Crystal Report Dim myReport As New ReportDocument()
211
'Tải báo cáo từ đường dẫn chỉ định myReport.Load(Application.StartupPath.ToString() & "\HoaDonBanHang.rpt") 'Thiết lập nguồn dữ liêu mới cho giấy mời myReport.SetDataSource(ds.Tables(0).DefaultView) 'Thiết lập tên máy in cần in (nếu cần) myReport.PrintOptions.PrinterName = "Foxit Reader PDF Printer" 'In giấy mời ra máy in chỉ định myReport.PrintToPrinter(1, True, 0, 0) 'Trả trạng thái con trỏ về mặc định Me.Cursor = Cursors.Default 'Tạm khóa nút In ấn ButtonInAn.Enabled = True Else 'Thông báo MessageBox.Show("Số hiệu hóa đơn không đúng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error) TextBoxSoHoaDon.Focus() End If cn.Close() End Using End Using End If End Sub
3. Kết quả thiết kế
Hình 112. Kết quả thiết kế form xem trước hóa đơn
212
4. Kết quả thực thi:
Hình 113. Kết quả thực thi form xem trước hóa đơn
213
Công việc 3. Thiết kế báo cáo thống kê bán hàng theo ngƣời bán.
a) Sử dụng Crystal Report thiết kế báo cáo thống kê các hóa đơn bán phân nhóm theo
từng người bán theo mẫu sau
1. Phân tích yêu cầu
Theo yêu cầu trên ta thấy rằng phần thông tin hiển thị trên báo cáo đƣợc chia
thành các nhóm có đánh số thứ tự và tiêu đề mỗi nhóm chính là tên của ngƣời bán
hàng.
Phần danh sách các đơn hàng của mỗi ngƣời bán hàng hiển thị các thông tin về
hóa đơn mỗi lƣợt bán hàng trong đó có một cột hiển thị thành tiền không có trong bảng
cơ sở dữ liệu. Số thứ tự của các dòng đƣợc đánh lần lƣợt từ 1 đến hết. Khi bắt đầu một
nhóm mới sẽ đƣợc đặt lại là 1.
Cuối trang hiển thị phần thông tin về trang hiện tại trên tổng số trang báo cáo.
Các thông tin về ngày tháng năm đƣợc lấy từ đồng hồ hệ thống.
2. Hướng dẫn thao tác
Để thực hiện yêu cầu trên:
Thực hiện các thao tác tƣơng tự nhƣ trong phần hƣớng dẫn thao tác ở công việc
2 để tạo mới một báo cáo có tên BaoCaoBanHangTheoNguoiBanHang.rpt
Nhấn phải chuột vào phần Report Header chọn Insert / Text Object và nhập giá
trị “CỬA HÀNG THƢƠNG MẠI ABC” cho điều khiển này. Thao tác tƣơng tự để tạo
đối tƣợng Text Object có nội dung “BÁO CÁO THỐNG KÊ BÁN HÀNG”. Điều
chỉnh vị trí và font chữ của đối tƣợng Text Object này cho phù hợp.
Nhấn phải chuột vào phần Report Footer chọn Insert / Text Object và nhập nội
dung “Ngày tháng năm” để tạo phần hiển thị ngày in báo cáo. Mặc dù trong Crystal
Report có sẵn một đối tƣợng đặc biệt để hiển thị ngày hiện tại của hệ thống, tuy nhiên
đối tƣợng này hiển thị cả chuỗi ngày tháng năm không đúng yêu cầu của chủ cửa hàng.
Để chèn thêm các giá trị ngày tháng năm đƣợc lấy từ đồng hồ hệ thống phải tạo ra các
biến lƣu các giá trị này và chèn vào vị trí thích hợp trên báo cáo.
Để tạo ra các biến chứa ngày, tháng, năm thực hiện các thao tác sau:
214
Nhấn phải chuột vào Formula Fields ở cửa sổ Field Explorer chọn New. Xuất
hiện cửa sổ Formula Name. Nhập “ngay” vào ô Name và nhấn OK.
Hình 114. Cửa sổ Formula Name
Xuất hiện cửa sổ Formula Workshop.
Hình 115. Cửa sổ Formula Workshop
Day (CurrentDate)
Nhập công thức tính ngày hiện tại vào khung soạn thảo công thức:
Nhấn “Save and close” để lƣu biến hiển thị ngày hiện tại.
Thực hiện thao tác tƣơng tự để tạo các biến “thang” chứa giá trị tháng hiện tại,
“năm” chứa giá trị năm hiện tại.
Month (CurrentDate)
Công thức tính tháng hiện tại
215
Year (CurrentDate)
Công thức tính năm hiện tại
Nhấn phải chuột vào biến “ngay” vừa tạo chọn Insert to Report và kéo nó vào
vị trí sau chữ ngày. Làm tƣơng tự với các biến “thang” và “nam”.
Nhấn phải chuột vào phần Page Footer chọn Insert / Text Object và nhập nội
dung “Trang / ” để tạo phần thống kê số trang cho báo cáo. Sau đó, nhấn phải chuột
vào phần Page Footer của báo cáo chọn Insert / Special Field / Page Number và kéo
vào trƣớc dấu / để hiển thị giá trị trang hiện tại. Nhấn phải chuột vào phần Page Footer
của báo cáo chọn Insert / Special Field / Total Page Count và kéo vào sau dấu / để hiển
thị giá trị tổng số trang của báo cáo.
Thực hiện kết nối dữ liệu cho báo cáo.
Tại cửa sổ Field Explorer, nhấn phải chuột vào Database Fields / Chọn
Database Expert. Xuất hiện cửa sổ Database Expert, tiến hành kết nối tới nguồn dữ
liệu và chọn thủ tục hiển thị dữ liệu cho báo cáo (thủ tục này viết trong phần store
procedure của cơ sở dữ liệu SQL Server) giống nhƣ phần hƣớng dẫn ở trên.
Mã lệnh thủ tục TatCaHoaDonBanHang viết trong SQL SERVER
USE [QLYBH]
GO
/****** Object: StoredProcedure
[dbo].[TatCaHoaDonBanHang] Script Date: 12/07/2014
18:43:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--
=============================================
-- Author:
-- Create date:
216
-- Description:
--
=============================================
CREATE PROCEDURE [dbo].[TatCaHoaDonBanHang]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result
sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT tblBanHang.*, tblKhachHang.HoTen,
tblKhachHang.DienThoai, tblKhachHang.DiaChi,
tblMatHang.TenMatHang, tblMatHang.DVT,
tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia,
tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia
AS ThanhTien FROM tblBanHang, tblKhachHang,
tblMatHang, tblChiTietHoaDon WHERE tblBanHang.MaKH
= tblKhachHang.MaKH AND tblBanHang.SoHieuHD =
tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH =
tblChiTietHoaDon.MaMH
RETURN
END
Vì yêu cầu của báo cáo phải phân nhóm theo ngƣời bán hàng nên phải thêm vào
báo cáo một Group bằng cách: Nhấn phải chuột vào phần Details của báo cáo chọn
Insert / Group. Xuất hiện cửa sổ Insert Group.
217
Hình 116. Cửa sổ Insert Group
Trong tab Common, chọn trƣờng NguoiBanHang từ danh sách các trƣờng có
trong báo cáo. Nhấn OK để thêm Group vào báo cáo.
Nhấn phải chuột vào phần Group Header Section1 chọn Insert / Special Field /
Group Number và kéo vào phía trƣớc của phần Group Name để thêm số thứ tự của
nhóm cho báo cáo.
Để hiển thị chi tiết các đơn hàng mà mỗi ngƣời bán hàng đã bán thực hiện nhƣ
sau:
Tăng chiều cao cho phần Group Header Section1 bằng cách đƣa chuột tới phần
giao giữa Group Header Section1 và Details và kéo lùi xuống phía dƣới.
Từ cửa sổ Field Explorer lần lƣợt kéo các trƣờng HoTen, TenMatHang, DVT,
SoLuong, DonGia, ThanhTien vào phần Details của báo cáo. Điều chỉnh kích thƣớc, vị
trí của các trƣờng cho phù hợp với việc thể hiện của báo cáo.
Mặc định khi kéo các trƣờng từ cửa sổ Field Explorer vào phần Details của báo
cáo thì Crystal Report sẽ thêm vào phần Page Header các tiêu đề của các trƣờng này
để mỗi khi chuyển sang trang mới nó sẽ xuất hiện ở đầu mỗi trang. Trong yêu cầu của
báo cáo này thì khi hiển thị phía dƣới tên mỗi ngƣời bán hàng sẽ là tên các trƣờng cần
218
hiển thị và dữ liệu bán hàng sẽ lặp lại nhiều lần ở phía dƣới. Do đó, cần phải kéo các
tiêu đề này từ phần Page Header xuống phần Group Header Section1 và đặt chúng bên
dƣới của Group Name.
Nhấp đúp vào các tiêu đề này để sửa lại nội dung thành Khách hàng, Mặt hàng,
ĐVT, Số lƣợng, Đơn giá, Thành tiền. Thiết lập định dạng và căn chỉnh các tiêu đề này
phù hợp với yêu cầu của báo cáo.
Thêm số thứ tự vào phần danh sách các hóa đơn bán hàng của mỗi ngƣời bán
hàng:
Mặc định trong Crystal Report có trƣờng Record Number để hiển thị thứ tự của
các bản ghi trong báo cáo. Tuy nhiên, trƣờng này đƣợc thiết kế để tăng tự động nên
khi sang Group mới thì nó không tự reset về 1. Vì vậy, để chèn cột số thứ tự vào đầu
mỗi dòng trong danh sách các hóa đơn bán hàng của từng ngƣời bán phải thực hiện
nhƣ sau:
Nháy phải chuột vào Running Total Field ở cửa sổ Field Explorer / chọn New.
Xuất hiện cửa sổ Create Running Total Field.
Hình 117. Cửa sổ Create Running Total Field
Chọn trƣờng HoTen ở phần khung Available Tables and Fields, nhấn vào nút
mũi tên quay sang phải để cung cấp thông số cho việc tính toán của biến này. Nhập
stt_hoadon vào ô Running Total Name để đặt tên cho biến. Chọn hàm count ở mục
219
Type of summary. Chọn On change of group ở phần Reset. Nhấn OK để hoàn thành
việc tạo biến đếm.
Bảng 7. Các hàm để tính toán với nhóm của Crystal Report
Hàm Ý nghĩa
Sum Tính tổng tất cả các mặt hàng.
Average Tính trung bình trọng số tiêu chuẩn cho tất cả các mặt hàng.
Maximum Trả về giá trị lớn nhất.
Minimum Trả về giá trị nhỏ nhất.
Count Đếm tất cả các mặt hàng.
Sample Variance Tính phƣơng sai mẫu thống kê của một ví sam cụ thể của các mặt hàng.
Sample Standard Deviation Tính độ lệch tiêu chuẩn thống kê của một mẫu cụ thể của các mặt hàng.
Population Variance Tính phƣơng sai thống kê của toàn bộ dân số các mặt hàng.
Tính độ lệch tiêu chuẩn thống kê của toàn bộ dân số của các mặt hàng. Population Standard Deviation
Distinct Count
Tính số mặt hàng riêng biệt. Ví dụ, nếu hai trƣờng hợp khác nhau của "David" xuất hiện trong danh sách, họ sẽ chỉ đƣợc tính một lần.
Correlation Tính số đo của mối quan hệ giữa hai hoặc nhiều mục
Covariance Tính một biện pháp của phƣơng sai giữa hai hoặc nhiều mục.
Tính trung bình, trọng bởi số lần một item xuất hiện. Weighted Average
Median Tính trung bình thống kê của tất cả các mặt hàng.
Nth Percentile Tính percentile thứ N, trong đó N đƣợc xác định trƣớc số.
Nth Largest Trả về Nth mục lớn nhất, trong đó N đƣợc xác định
220
trƣớc số.
Nth Smallest Trả về các mục nhỏ nhất thứ N, trong đó N đƣợc xác định trƣớc số.
Mode Tính chế độ thống kê của tất cả các mặt hàng.
Nth Most Frequent Trả về Nth mục thƣờng xuyên nhất, trong đó N là một số prede phạt.
Nhấn phải chuột vào biến stt_hoadon ở phần Running Total Field chọn Insert to
Report và kéo vào phía trƣớc của trƣờng HoTen trong phần Details.
Để tạo biến chứa tổng tiền của mỗi ngƣời bán hàng thực hiện nhƣ sau: Nháy
phải chuột vào Running Total Field ở cửa sổ Field Explorer / chọn New. Xuất hiện cửa
sổ Create Running Total Field.
Hình 118. Cửa sổ Create Running Total Field
Chọn trƣờng ThanhTien ở phần khung Available Tables and Fields, nhấn vào
nút mũi tên quay sang phải để cung cấp thông số cho việc tính toán của biến này. Nhập
tongtientheonhom vào ô Running Total Name để đặt tên cho biến. Chọn hàm sum ở
mục Type of summary. Chọn On change of group ở phần Reset. Nhấn OK để hoàn
thành việc tạo biến đếm.
Nhấn phải chuột vào biến tongtientheonhom ở phần Running Total Field chọn
Insert to Report và kéo vào GroupFooterSection1 sau nhãn “Tổng tiền”.
221
Chuyển sang cửa sổ Main Report Preview để xem thử kết quả của báo cáo. Ta
nhận thấy rằng các biến ngay, thang, nam khi hiển thị đều có thêm 2 số 0 đằng sau dấu
phẩy. Đây là tùy chọn hiển thị mặc định của các trƣờng có giá trị số. Để bỏ các số 0
này khi hiển thị báo cáo thực hiện nhƣ sau:
Nháy phải chuột vào biến ngay ở phần Report Footer, chọn Format Embedded
Field. Xuất hiện cửa sổ Format Editor / chọn Customize. Xuất hiện cửa sổ Custom
Style.
Hình 119. Cửa sổ Custom Style
Thay đổi ở phần Decimals, Rounding về giá trị 1, bỏ dấu chọn ở mục
Thousands Separator. Nhấn OK hai lần để áp dụng.
Thực hiện tƣơng tự với các biến thang, nam.
222
3. Kết quả thiết kế
Hình 120. Kết quả thiết kế báo cáo thống kê bán hàng bằng Crystal Report
223
4. Kết quả thực thi
Hình 121. Kết quả thực thi báo cáo bán hàng
224
b) Thiết kế form điều khiển việc xem in báo cáo thống kê bán hàng theo mẫu sau:
Hình 122. Form điều khiển in báo cáo bán hàng
1. Phân tích yêu cầu
Theo yêu cầu trên thì cần một form chứa các điều khiển:
Điều khiển có nội dung “In báo cáo bán hàng”, “In theo”, “Ngƣời bán hàng” là
các Label
Điều khiển chọn lựa “Tất cả ngƣời bán hàng”, “Từng ngƣời bán hàng” là các
Radio Button.
Các nút lệnh “Xem trƣớc, In ấn, Kết thúc” là các điều khiển Button.
Ngoài ra cần phải thiết kế một form cho phép xem thử báo cáo trƣớc khi in.
2. Hướng dẫn thao tác
Để thực hiện yêu cầu trên, thực hiện các thao tác tƣơng tự nhƣ ở phần công việc
2 để tạo form frmInBaoCaoBanHang với các điều khiển và nội dung nhƣ yêu cầu.
Viết mã lệnh cho các điều khiển này nhƣ sau:
Lưu ý: Để thao tác với Crystal Report người
lập trình phải đưa vào các thư viện bằng
đoạn mã sau:
Imports CrystalDecisions.CrystalReports.Engine
Mã lệnh khi lựa chọn vào RadioButtonTatCa
Private Sub RadioButtonTatCa_CheckedChanged(ByVal
225
sender As System.Object, ByVal e As System.EventArgs)
Handles RadioButtonTatCa.CheckedChanged
ComboBoxNguoiBanHang.DataSource = Nothing
ComboBoxNguoiBanHang.Enabled = False
End Sub
Mã lệnh khi lựa chọn vào RadioButtonTungHD
Private Sub
RadioButtonTungHD_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
RadioButtonTungHD.CheckedChanged
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Tìm kiếm tất cả các người bán hàng có trong bảng
bán hàng.
sqlTimKiem = "SELECT DISTINCT NguoiBanHang
FROM tblBanHang GROUP BY NguoiBanHang"
'Thực hiện tìm kiếm và đưa kết quả ra lưới
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
ComboBoxNguoiBanHang.DataSource =
ds.Tables(0).DefaultView
ComboBoxNguoiBanHang.DisplayMember =
226
"NguoiBanHang"
ComboBoxNguoiBanHang.ValueMember =
"NguoiBanHang"
cn.Close()
End Using
End Using
ComboBoxNguoiBanHang.Enabled = True
End Sub
Mã lệnh khi nhấn vào nút Kết thúc
Private Sub ButtonKetThuc_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonKetThuc.Click
'Đóng form
Me.Close()
End Sub
Mã lệnh khi nhấn vào nút Xem trƣớc
Private Sub ButtonXemTruoc_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonXemTruoc.Click
'Khai báo một form kiểu
frmXemTruocBaoCaoBanHang
Dim frm As New frmXemTruocBaoCaoBanHang()
'Hiển thị form ở trên cùng
frm.ShowDialog()
End Sub
Mã lệnh khi nhấn vào nút In ấn
227
Private Sub ButtonInAn_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ButtonInAn.Click
If RadioButtonTatCa.Checked Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
'Tạm khóa nút In ấn
ButtonInAn.Enabled = False
'In tất cả các khách hàng
'Khai báo một đối tượng Crystal Report
Dim myReport As New ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString()
& "\BaoCaoBanHangTheoNguoiBanHang.rpt")
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName = "Foxit
Reader PDF Printer"
'In giấy mời ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
ButtonInAn.Enabled = True
Else
If RadioButtonTungHD.Checked Then
'Kiểm tra mã khách hàng có tồn tại không
'Khai báo đối tượng và biến cần sử dụng
Dim sqlTimKiem As String
'Thiết lập câu lệnh tìm kiếm theo mã khác hàng
sqlTimKiem = "SELECT tblBanHang.*,
tblKhachHang.HoTen, tblKhachHang.DienThoai,
228
tblKhachHang.DiaChi, tblMatHang.TenMatHang,
tblMatHang.DVT, tblChiTietHoaDon.SoLuong,
tblChiTietHoaDon.DonGia, tblChiTietHoaDon.SoLuong *
tblChiTietHoaDon.DonGia AS ThanhTien FROM
tblBanHang, tblKhachHang, tblMatHang,
tblChiTietHoaDon WHERE tblBanHang.MaKH =
tblKhachHang.MaKH AND tblBanHang.SoHieuHD =
tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH =
tblChiTietHoaDon.MaMH AND
tblBanHang.NguoiBanHang LIKE '%" &
ComboBoxNguoiBanHang.SelectedValue.ToString() &
"%'"
Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New
SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text
cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd)
da.Fill(ds)
'Nếu tồn tại đơn hàng phù hợp
If ds.Tables(0).Rows.Count > 0 Then
'Chuyển trạng thái con trỏ
Me.Cursor = Cursors.WaitCursor
'Tạm khóa nút In ấn
ButtonInAn.Enabled = False
'In giấy mời ra máy in
'Khai báo một đối tượng Crystal Report
Dim myReport As New
229
ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString() &
"\BaoCaoBanHangTheoNguoiBanHang.rpt")
'Thiết lập nguồn dữ liêu mới cho giấy
mời
myReport.SetDataSource(ds.Tables(0).DefaultView)
'Thiết lập tên máy in cần in (nếu cần)
myReport.PrintOptions.PrinterName =
"Foxit Reader PDF Printer"
'In giấy mời ra máy in chỉ định
myReport.PrintToPrinter(1, True, 0, 0)
'Trả trạng thái con trỏ về mặc định
Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn
ButtonInAn.Enabled = True
Else
'Thông báo
MessageBox.Show("Không tìm thấy",
"Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Error)
End If
cn.Close()
End Using
End Using
End If
End If
End Sub
230
Để thiết kế form xem thử báo cáo thực hiện nhƣ sau:
Tạo mới một form giống các phần trên. Thiết lập các thuộc tính về tiêu đề, nút
phóng to, thu nhỏ, chế độ hiển thị, vị trí khi hiển thị của form ở cửa sổ Properties.
Từ cửa sổ Toolbox kéo điều khiển Crystal Report Viewer vào form vừa tạo.
Thiết lập thuộc tính các thuộc tính cho điều khiển này nhƣ sau:
Name: CrystalReportViewer1.
BorderStyle: FixedSingle.
Dock: Fill.
Các thuộc tính khác đặt mặc định.
Tiếp theo, tiến hành thiết lập nguồn cho điều khiển Crystal Report Viewer nhƣ
sau: Nhấn vào mũi tên quay xuống ở thuộc tính ReportSource và chọn báo cáo vừa
xây dựng để thiết lập nó hiển thị ở trong Crystal Report Viewer.
Hình 123. Cửa sổ thiết kế form xem trước báo cáo.
Có thể chọn nhiều Report cho thuộc tính ReportSource. Tuy nhiên, tại một thời
điểm Crystal Report Viewer chỉ có thể hiển thị đƣợc duy nhất nội dung của một
Report. Để lựa chọn báo cáo nào sẽ hiển thị ngƣời lập trình sẽ viết mã lệnh trong sự
kiện tải form hoặc trong sự kiện nhấp vào một nút lệnh nào đó trên form.
Lƣu ý: Cần phải thêm các thƣ viện bên dƣới để thao tác với báo
cáo xây dựng bằng Crystal Report.
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
231
Imports CrystalDecisions.Windows.Forms
Imports CrystalDecisions.ReportSource
Mã lệnh khi form xem trƣớc đƣợc tải:
Private Sub frmXemTruocBaoCaoBanHang_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cr As New ReportDocument Dim strReportName As String strReportName = "BaoCaoBanHangTheoNguoiBanHang.rpt" Dim strReportPath As String = Application.StartupPath & "\" & strReportName If Not IO.File.Exists(strReportPath) Then Throw (New Exception("Không thể tải báo cáo:" & _ vbCrLf & strReportPath)) End If Dim sqlTimKiem As String 'Thiết lập câu lệnh tìm kiếm theo mã khác hàng sqlTimKiem = "SELECT tblBanHang.*, tblKhachHang.HoTen, tblKhachHang.DienThoai, tblKhachHang.DiaChi, tblMatHang.TenMatHang, tblMatHang.DVT, tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia, tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia AS ThanhTien FROM tblBanHang, tblKhachHang, tblMatHang, tblChiTietHoaDon WHERE tblBanHang.MaKH = tblKhachHang.MaKH AND tblBanHang.SoHieuHD = tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH = tblChiTietHoaDon.MaMH" Using cn As New SqlConnection("Data Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User ID=sa;Password=admin123@") Using cmd As New SqlCommand(sqlTimKiem, cn) cmd.CommandType = CommandType.Text cn.Open() Dim ds As New DataSet() Dim da As New SqlDataAdapter(cmd) da.Fill(ds) cr.Load(strReportPath) cr.SetDataSource(ds.Tables(0).DefaultView)
232
CrystalReportViewer1.ReportSource = cr End Using End Using End Sub
3. Kết quả thiết kế
Kết quả thiết kế form in báo cáo
Hình 124. Kết quả thiết kế form điều khiển in báo cáo bán hàng
Kết quả thiết kế form xem trƣớc báo cáo.
Hình 125. Kết quả thiết kế form xem trước báo cáo bán hàng
4. Kết quả thực thi
Kết quả khi thực thi form
233
Hình 126. Kết quả thực thi form in báo cáo bán hàng
Kết quả khi nhấn vào nút Xem trƣớc
Hình 127. Kết quả thực thi form xem trước báo cáo bán hàng.
3.3. Bài tập áp dụng
Bài tập số 1. Để quản lý việc phân công giảng dạy trong một học kỳ cho giáo
viên của khoa CNTT, khoa có một cơ sở dữ liệu QLYGD.MDF trong đó có các bảng:
tblGiaoVien(MaGV, HoTen, BoMon, DMGD)
tblMonHoc(Mamon, Tenmon, SoTinChi)
tblPhanCong(MaGV, MaMon, LHP, SSO, HocKy)
Tiếp tục với bài tập số 1 đã thực hiện trong phần bài tập thực hành của bài 2
thực hiện các công việc sau:
234
Công việc 1:
1. Sử dụng Crystal Report thiết kế bảng phân công giảng dạy theo mẫu sau:
Hình 128. Mẫu bảng phân công giảng dạy
Yêu cầu:
+ Báo cáo đƣợc thiết kế in trên khổ giấy: A4
+ Lề trên: 2cm.
+ Lề dƣới: 2cm.
+ Lề trái: 3cm.
235
+ Lề phải: 2cm
+ Nội dung trên báo cáo đƣợc lấy dữ liệu từ các bảng trong cơ sở dữ liệu
QLYGD.MDF
+ Ngày tháng năm lấy theo đồng hồ hệ thống.
+ Số trang đánh bắt đầu từ 1 / tổng số trang.
+ Cỡ chữ của các phần trên báo cáo là 13
+ Font chữ: Times New Roman
+ Các nhãn có nội dung là TRƢỜNG ĐẠI HỌC ABC, KHOA CNTT, PHÂN
CÔNG GIẢNG DẠY, NGƢỜI LẬP BIỂU kiểu in đậm.
2. Thiết kế form để điều khiển việc xem và in báo cáo theo mẫu sau:
Hình 129. Form in phân công giảng dạy
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in báo cáo bán hàng:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Xanh lá
- Các nhãn in theo, họ tên giáo viên:
236
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách giáo viên
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị đƣợc lấy từ bảng giáo viên.
Mặc định lựa chọn này bị khóa không cho ngƣời sử dụng lựa chọn. Chỉ
khi ngƣời sử dụng lựa chọn in theo từng ngƣời bán hàng thì lựa chọn này
mới đƣợc bật lên.
- Lựa chọn tất cả giáo viên, từng giáo viên:
Là dạng radio button.
Mặc định lựa chọn tất cả giáo viên.
Font: Microsoft Sans Serif, 9pt.
Mầu chữ: Đen
Khi lựa chọn tất cả giáo viên thì tự động khóa danh sách giáo viên.
Khi lựa chọn từng giáo viên thì mở khóa danh sách lựa chọn giáo viên
cho phép ngƣời sử dụng lựa chọn.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị bảng phân công giảng dạy của tất cả giáo viên hoặc từng
giáo viên tƣơng ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
237
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in bảng phân công giảng dạy của tất cả giáo viên hoặc từng giáo viên tƣơng
ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
Công việc 2:
1. Thiết kế báo cáo phân nhóm theo môn
Hình 130. Mẫu bảng phân công giảng dạy theo bộ môn
Yêu cầu:
+ Báo cáo đƣợc thiết kế in trên khổ giấy: A4
+ Lề trên: 2cm.
+ Lề dƣới: 2cm.
+ Lề trái: 3cm.
+ Lề phải: 2cm
238
+ Nội dung trên báo cáo đƣợc lấy dữ liệu từ các bảng trong cơ sở dữ liệu
QLYGD.MDF
+ Ngày tháng năm lấy theo đồng hồ hệ thống.
+ Số trang đánh bắt đầu từ 1 / tổng số trang.
+ Cỡ chữ của các phần trên báo cáo là 13
+ Font chữ: Times New Roman
+ Các nhãn có nội dung là TRƢỜNG ĐẠI HỌC ABC, KHOA CNTT, PHÂN CÔNG
GIẢNG DẠY, NGƢỜI LẬP BIỂU kiểu in đậm.
2. Thiết kế form để xem in báo cáo phân nhóm theo bộ môn
Hình 131. Form in phân công giảng dạy
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in báo cáo bán hàng:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Xanh lá
- Các nhãn in theo, tên bộ môn:
Font: Microsoft Sans Serif, 9
239
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách bộ môn
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị đƣợc lấy từ bảng bộ môn.
Mặc định lựa chọn này bị khóa không cho ngƣời sử dụng lựa chọn. Chỉ
khi ngƣời sử dụng lựa chọn in theo từng bộ môn thì lựa chọn này mới
đƣợc bật lên.
- Lựa chọn tất cả giáo viên, từng bộ môn:
Là dạng radio button.
Mặc định lựa chọn tất cả giáo viên.
Font: Microsoft Sans Serif, 9pt.
Mầu chữ: Đen
Khi lựa chọn tất cả giáo viên thì tự động khóa danh sách bộ môn.
Khi lựa chọn từng bộ môn thì mở khóa danh sách lựa chọn bộ môn cho
phép ngƣời sử dụng lựa chọn.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị bảng phân công giảng dạy của tất cả giáo viên hoặc từng bộ
môn tƣơng ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
240
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in bảng phân công giảng dạy của tất cả giáo viên hoặc từng bộ môn tƣơng ứng
ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
241
Công việc 3. Thiết kế bảng phân công giảng dạy theo môn học
1. Thiết kế bảng phân công giảng dạy theo môn học theo mẫu sau:
Hình 132. Mẫu bảng phân công giảng dạy theo môn học
Yêu cầu:
+ Báo cáo đƣợc thiết kế in trên khổ giấy: A4
+ Lề trên: 2cm.
+ Lề dƣới: 2cm.
242
+ Lề trái: 3cm.
+ Lề phải: 2,5cm
+ Nội dung trên báo cáo đƣợc lấy dữ liệu từ các bảng trong cơ sở dữ liệu
QLYGD.MDF
+ Báo cáo đƣợc phân theo nhóm môn học. Phải đánh số thứ tự trƣớc mỗi nhóm
và đánh số thứ tự trƣớc mỗi dòng của nhóm, số thứ tự của mỗi dòng sẽ bắt đầu từ 1 khi
bắt đầu một nhóm mới (Đánh lại số thứ tự của dòng theo mỗi nhóm).
+ Ngày tháng năm lấy theo đồng hồ hệ thống.
+ Số trang đánh bắt đầu từ 1 / tổng số trang.
+ Cỡ chữ của các phần trên báo cáo là 13
+ Font chữ: Times New Roman
+ Các nhãn có nội dung là TRƢỜNG ĐẠI HỌC ABC, KHOA CNTT, PHÂN
CÔNG GIẢNG DẠY, NGƢỜI LẬP BIỂU kiểu in đậm.
2. Thiết kế form để xem in báo cáo phân nhóm theo môn học theo mẫu sau:
Hình 133. Form in phân công giảng dạy
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in báo cáo bán hàng:
Font: Microsoft Sans Serif, Bold, 14
243
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Xanh lá
- Các nhãn in theo, tên môn học:
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách môn học
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị đƣợc lấy từ bảng môn học.
Mặc định lựa chọn này bị khóa không cho ngƣời sử dụng lựa chọn. Chỉ
khi ngƣời sử dụng lựa chọn in theo từng môn học thì lựa chọn này mới
đƣợc bật lên.
- Lựa chọn tất cả môn học, từng môn học:
Là dạng radio button.
Mặc định lựa chọn tất cả môn học.
Font: Microsoft Sans Serif, 9pt.
Mầu chữ: Đen
Khi lựa chọn tất cả môn học thì tự động khóa danh sách môn học.
Khi lựa chọn từng môn học thì mở khóa danh sách lựa chọn môn học
cho phép ngƣời sử dụng lựa chọn.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị bảng phân công giảng dạy của tất cả môn học hoặc từng
môn học tƣơng ứng tại một form mới.
- Nút lệnh In ấn
244
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in bảng phân công giảng dạy của tất cả môn học hoặc từng môn học tƣơng
ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form
Bài tập số 2. Để quản lý tài sản của các đơn vị trong một trƣờng ngƣời ta tổ
chức một cơ sở dữ liệu QLTAISAN.MDF có các bảng nhƣ sau:
tblDonVi(MaDV, TenDV, ViTri, SoNhanVien)
tblTaiSan(MaTS, TenTS, DVT, HSD)
tblQuanLy(MaDV, MaTS, SoLuong, NgayCap, TinhTrang)
Tiếp tục với bài tập số 2 đã thực hiện trong phần bài tập thực hành của bài 2 thực hiện
các công việc sau:
Công việc 1: Thiết kế báo cáo tài sản
a) Sử dụng Crystal Report thiết kế bảng danh mục tài sản theo mẫu sau:
Hình 134. Mẫu bảng danh mục tài sản
245
b) Thiết kế form để xem và in bảng danh mục tài sản theo mẫu sau:
Hình 135. Form in danh mục tài sản
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in danh mục tài sản:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Đen
- Các nhãn chọn đơn vị, chọn tình trạng
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách đơn vị
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị lấy từ bảng tblDonVi với dữ liệu hiển thị là tên đơn vị
246
- Lựa chọn tất cả đơn vị, từng đơn vị:
Là dạng radio button.
Mặc định lựa chọn tất cả đơn vị
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Khi lựa chọn tất cả đơn vị thì tự động khóa điều khiển danh sách đơn vị
Khi lựa chọn từng đơn vị thì mở khóa điều khiển danh sách đơn vị cho
ngƣời sử dụng lựa chọn.
- Lựa chọn danh sách tình trạng
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Kiểu: DropDown.
Giá trị gồm: Tất cả tình trạng, Bình thƣờng, Hỏng.
Lựa chọn mặc định: Tất cả tình trạng.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị tất cả tài sản của đơn vị tƣơng ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in danh mục tài sản tƣơng ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
247
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
Công việc 2: Thiết kế báo cáo thống kê tài sản
a) Sử dụng Crystal Report thiết kế báo cáo thống kê tài sản theo nhóm (đơn vị, mã tài
sản)
Hình 136. Mẫu bảng danh mục tài sản theo đơn vị sử dụng
Yêu cầu:
+ Báo cáo đƣợc thiết kế in trên khổ giấy: A4
248
+ Lề trên: 2cm.
+ Lề dƣới: 2cm.
+ Lề trái: 3cm.
+ Lề phải: 2,5cm
+ Nội dung trên báo cáo đƣợc lấy dữ liệu từ các bảng trong cơ sở dữ liệu
QLYTAISAN.MDF
+ Báo cáo đƣợc phân theo nhóm đơn vị sử dụng. Phải đánh số thứ tự trƣớc mỗi
nhóm và đánh số thứ tự trƣớc mỗi dòng của nhóm, số thứ tự của mỗi dòng sẽ bắt đầu
từ 1 khi bắt đầu một nhóm mới (Đánh lại số thứ tự của dòng theo mỗi nhóm).
+ Ngày tháng năm lấy theo đồng hồ hệ thống.
+ Số trang đánh bắt đầu từ 1 / tổng số trang.
+ Cỡ chữ của các phần trên báo cáo là 13
+ Font chữ: Times New Roman
+ Các nhãn có nội dung là TRƢỜNG ĐẠI HỌC ABC, DANH MỤC TÀI SẢN,
NGƢỜI LẬP BIỂU kiểu in đậm.
b) Thiết kế form điều khiển việc in ấn và xem báo cáo thống kê tài sản theo nhóm theo
mẫu sau:
Hình 137. Form điều khiển việc bảng danh mục tài sản
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
249
- Form xuất hiện chính giữa màn hình
- Nhãn in danh mục tài sản:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Đen
- Các nhãn chọn đơn vị, chọn tình trạng
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách đơn vị
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị lấy từ bảng tblDonVi với dữ liệu hiển thị là tên đơn vị
- Lựa chọn tất cả đơn vị, từng đơn vị:
Là dạng radio button.
Mặc định lựa chọn tất cả đơn vị
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Khi lựa chọn tất cả đơn vị thì tự động khóa điều khiển danh sách đơn vị
Khi lựa chọn từng đơn vị thì mở khóa điều khiển danh sách đơn vị cho
ngƣời sử dụng lựa chọn.
- Lựa chọn danh sách tình trạng
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Kiểu: DropDown.
Giá trị gồm: Tất cả tình trạng, Bình thƣờng, Hỏng.
Lựa chọn mặc định: Tất cả tình trạng.
- Nút lệnh Xem trƣớc
250
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị tất cả tài sản của đơn vị tƣơng ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in danh mục tài sản tƣơng ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
Bài tập số 3. Cho cơ sở dƣ̃ liê ̣u Quản lý đi ểm có tên QLDIEM .MDF gồm các
bảng:
tblSinhVien(MaSV, Hoten, Ngaysinh, Noisinh, Gioitinh, Diachi, Makhoa,
LopNC)
tblKhoa(Makhoa, Tenkhoa)
tblLopHP(MaLopHP, TenLopHP, MaSV, MaMon)
tblMonHoc(Mamon, Tenmon, Sohocphan, Giaovien)
tblDiem(MaLopHP, MaSV, Diem, HocKy)
Tiếp tục với bài tập số 3 đã thực hiện trong phần bài tập thực hành của bài 2
thực hiện các công việc sau:
Công việc 1: Thiết kế bảng điểm của sinh viên
251
a) Sử dụng Crystal Report thiết kế bảng điểm của sinh viên theo mẫu sau:
Hình 138. Mẫu bảng điểm sinh viên
Yêu cầu:
+ Báo cáo đƣợc thiết kế in trên khổ giấy: A4
+ Lề trên: 2cm.
+ Lề dƣới: 2cm.
+ Lề trái: 3cm.
+ Lề phải: 2,5cm
252
+ Nội dung trên báo cáo đƣợc lấy dữ liệu từ các bảng trong cơ sở dữ liệu
QLYDIEM.MDF
+ Báo cáo đƣợc phân theo học kỳ. Phải đánh số thứ tự trƣớc mỗi nhóm và đánh
số thứ tự trƣớc mỗi dòng của nhóm, số thứ tự của mỗi dòng sẽ bắt đầu từ 1 khi bắt đầu
một nhóm mới (Đánh lại số thứ tự của dòng theo mỗi nhóm).
+ Ngày tháng năm lấy theo đồng hồ hệ thống.
+ Số trang đánh bắt đầu từ 1 / tổng số trang.
+ Cỡ chữ của các phần trên báo cáo là 13
+ Font chữ: Times New Roman
+ Các nhãn có nội dung là TRƢỜNG ĐẠI HỌC ABC, BẢNG ĐIỂM SINH
VIÊN, NGƢỜI LẬP và các thông tin của sinh viên kiểu in đậm.
b) Tạo form điều khiển việc xem và in ấn bảng điểm của sinh viên theo mẫu sau:
Hình 139. Form điều khiển in bảng điểm sinh viên
Yêu cầu:
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in bảng điểm sinh viên:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Xanh lá
253
- Các nhãn In theo, Họ tên sinh viên
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách sinh viên
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị lấy từ bảng sinh viên với dữ liệu hiển thị là tên sinh viên
- Lựa chọn tất cả sinh viên, từng sinh viên:
Là dạng radio button.
Mặc định lựa chọn tất cả đơn vị
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Khi lựa chọn tất cả sinh viên thì tự động khóa điều khiển danh sách sinh
viên.
Khi lựa chọn từng sinh viên thì mở khóa điều khiển danh sách sinh viên
cho ngƣời sử dụng lựa chọn.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị tất cả bảng điểm của sinh viên hoặc từng sinh viên tƣơng
ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
254
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in bảng điểm tƣơng ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
c) Thiết kế form điều khiển việc xem và in ấn bảng điểm của sinh viên theo mẫu sau:
Hình 140. Mẫu bảng điểm sinh viên theo môn
255
Yêu cầu:
+ Báo cáo đƣợc thiết kế in trên khổ giấy: A4
+ Lề trên: 2cm.
+ Lề dƣới: 2cm.
+ Lề trái: 3cm.
+ Lề phải: 2,5cm
+ Nội dung trên báo cáo đƣợc lấy dữ liệu từ các bảng trong cơ sở dữ liệu
QLYDIEM.MDF
+ Báo cáo đƣợc phân theo môn học. Phải đánh số thứ tự trƣớc mỗi nhóm và
đánh số thứ tự trƣớc mỗi dòng của nhóm, số thứ tự của mỗi dòng sẽ bắt đầu từ 1 khi
bắt đầu một nhóm mới (Đánh lại số thứ tự của dòng theo mỗi nhóm).
+ Ngày tháng năm lấy theo đồng hồ hệ thống.
+ Số trang đánh bắt đầu từ 1 / tổng số trang.
+ Cỡ chữ của các phần trên báo cáo là 13
+ Font chữ: Times New Roman
+ Các nhãn có nội dung là TRƢỜNG ĐẠI HỌC ABC, BẢNG ĐIỂM SINH
VIÊN, NGƢỜI LẬP và các thông tin môn học kiểu in đậm.
2. Thiết kế form điều khiển việc xem in bảng điểm theo mẫu sau
Hình 141. Form điều khiển in bảng điểm sinh viên
Yêu cầu:
256
- Form có kiểu: FixedSingle
- Các nút thu nhỏ và phóng to của form bị ẩn
- Form xuất hiện chính giữa màn hình
- Nhãn in bảng điểm sinh viên:
Font: Microsoft Sans Serif, Bold, 14
Căn giữa màn hình form theo chiều ngang
Mầu chữ: Xanh lá
- Các nhãn In theo, Họ tên sinh viên
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Có lề trái bằng nhau
- Danh sách sinh viên
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Kiểu: DropDown
Có giá trị lấy từ bảng sinh viên với dữ liệu hiển thị là tên sinh viên
- Lựa chọn tất cả sinh viên, từng sinh viên:
Là dạng radio button.
Mặc định lựa chọn tất cả đơn vị
Font: Microsoft Sans Serif, 9
Mầu chữ: Đen
Khi lựa chọn tất cả sinh viên thì tự động khóa điều khiển danh sách sinh
viên.
Khi lựa chọn từng sinh viên thì mở khóa điều khiển danh sách sinh viên
cho ngƣời sử dụng lựa chọn.
- Nút lệnh Xem trƣớc
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: X
257
Khi nhấn vào nút lệnh xem trƣớc, chƣơng trình sẽ căn cứ vào lựa chọn của
ngƣời sử dụng để hiển thị tất cả bảng điểm của sinh viên hoặc từng sinh viên tƣơng
ứng tại một form mới.
- Nút lệnh In ấn
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: I
Khi nhấn vào nút lệnh in ấn, chƣơng trình sẽ căn cứ vào lựa chọn của ngƣời sử
dụng để in bảng điểm tƣơng ứng ra máy in mặc định.
- Nút lệnh Kết thúc:
Font: Microsoft Sans Serif, Bold, 9
Mầu chữ: Đen
Phím nóng là: K
Khi nhấn vào nút lệnh hỏi ngƣời dùng có muốn kết thúc điều khiển việc in ấn
không. Nếu chọn Yes sẽ đóng form. Nếu chọn No sẽ trở lại form.
3.3. Bài tập về nhà
Bài tập số 4. Hãy thiết kế các báo cáo và form điều khiển việc in báo cáo cần thiết cho
việc quản lý xuất - nhập kho tại công ty BCD
Bài tập số 5. Hãy thiết kế các báo cáo và form điều khiển việc in báo cáo cần thiết cho
việc quản lý thƣ viện tại trƣờng XYZ
Bài tập số 6. Hãy thiết kế các báo cáo và form điều khiển việc in báo cáo cần thiết cho
việc quản lý ký túc xá
Bài tập số 7. Hãy thiết kế các báo cáo và form điều khiển việc in báo cáo cần thiết cho
việc quản lý các đề tài khoa học tại trƣờng đại học SPK
Bài tập số 8. Hãy thiết kế các báo cáo và form điều khiển việc in báo cáo cần thiết cho
việc quản lý giải bóng đá vô địch quốc gia
Bài tập số 9. Hãy thiết kế các báo cáo và form điều khiển việc in báo cáo cần thiết cho
việc quản lý nhân sự tại công ty ABC
Bài tập số 10. Hãy thiết kế các báo cáo và form điều khiển việc in báo cáo cần thiết
cho việc quản lý thi đua khen thƣởng tại công ty ABC.
258
BÀI 4. LẬP TRÌNH MENU VÀ PHÂN PHỐI ỨNG DỤNG
Mục tiêu
Sau bài học, sinh viên có khả năng:
- Kiến thức: Biết thiết kế hệ thống menu trên form và gắn các chức năng của ứng dụng
vào các mục chọn của hệ thống menu. Biết tạo bộ cài đặt và phân phối ứng dụng.
- Kỹ năng: Vận dụng đƣợc kiến thức thiết kế hệ thống menu trên form và gắn các chức
năng của ứng dụng vào các mục chọn của hệ thống menu. Biết tạo bộ cài đặt và phân
phối ứng dụng vào giải quyết các bài toán thực tế.
- Thái độ:
+ Nghiêm túc, sáng tạo
+ Tích cực tập luyện
Chuẩn bị dụng cụ, vật tư, thiết bị
Chuẩn bị máy tính có hệ điều hành Windows XP hoặc cao hơn, phần mềm
Microsoft Office, bộ gõ Tiếng Việt, phần mềm SQL Server 2000 hoặc cao hơn,phần
mềm Visual Studio 2008 hoặc cao hơn.
4.1. Tóm tắt kiến thức cần nhớ
4.1.1. Menu
Menu là một cách tổ chức để lựa chọn các chức năng nào đó cần thực hiện của
một ứng dụng. Có thể trình bày menu dƣới dạng đồ họa kiểu các button hoặc trình bày
dƣới dạng thanh menu có phân cấp.
259
Hình 142. Menu kiểu các nút lệnh
Hình 143. Menu dạng phân cấp
Trong tài liệu này ta chỉ đề cập tới dạng menu có phân cấp. Với dạng menu có
phân cấp thì cấp đầu tiên là menu bar nó gồm một số mục chọn chính gọi là menu pad.
Khi một menu pad đƣợc chọn thì hoặc thực thi công việc đƣợc gắn với sự kiện của nó
hoặc sẽ thả xuống một menu con gồm nhiều mục chọn cấp thấp hơn gọi là menu
pulldown hoặc menu popup. Khi một mục của menu này đƣợc chọn thì nó thực thi một
công việc gắn với mục chọn này hoặc tiếp tục mở ra một menu con cấp thấp hơn nữa
…
260
Ngƣời ta thƣờng tổ chức menu trên một form quản lý chung của ứng dụng.
1. Để xây dựng một menu cho một ứng dụng cần thực hiện các bƣớc sau:
1. Thiết kế menu
2. Gắn các mục chọn trên menu với các module chƣơng trình.
3. Chạy thử menu để kiểm tra
4. Hiệu chỉnh menu để đạt yêu cầu
5. Lƣu menu
2. Để xây dựng một form chính chứa menu dùng để quản lý ứng dụng bằng
VB.NET, thực hiện các bƣớc sau:
1. Xây dựng một form mới dạng MDI Parent.
2. Gắn menu vừa tạo vào form.
3. Đƣa các điều khiển vào form.
4. Đặt thuộc tính cho form và các điều khiển trên form
5. Chạy thử để kiểm tra.
6. Hiệu chỉnh form để đạt yêu cầu.
7. Lƣu form.
4.1.2. Phân phối ứng dụng
Sau khi chỉnh sửa, nâng cấp và thử nghiệm các tính năng của ứng dụng đã hoàn
thành thi một trong những bƣớc cuối cùng trong vòng đời phát triển phần mềm là việc
triển khai thực tế của ứng dụng cho ngƣời sử dụng.
Visual Studio .NET hỗ trợ ngƣời sử dụng dễ dàng tạo ra một bộ đĩa cài đặt chạy
trên môi trƣờng Window Form hoặc trên môi trƣờng Web Form bằng các thao tác
đơn giản. Sau khi hoàn thành việc tạo bộ cài đặt chạy trên môi trƣờng Window Form,
ngƣời sử dụng có thể cài đặt, triển khai nó trên hầu hết các máy tính có cài đặt phiên
bản hệ điều hành Windows hiện hành. Riêng các bộ cài đặt ứng dụng trên môi trƣờng
Web Form thì ngƣời sử dụng phải cài đặt nó trên các máy tính có cài đặt hệ điều hành
máy chủ (Window Server 2000 hoặc cao hơn) và có cài đặt dịch vụ IIS.
261
Bảng 8. Bảng danh sách các loại dự án tạo bộ cài đặt
Kiểu dự án cài đặt Mô tả
Setup Project Tạo bộ đóng gói cho ứng dụng Windows (hay còn gói là
ứng dụng chạy trên Desktop)
Merge Module Tạo ra file .msm, đóng gói các components cho phép ngƣời
Project sử dụng chia sẻ các components đó giữa nhiều Project hoặc
nhiều ứng dụng
CAB Project Cho phép ngƣời sử dụng tạo 1 file .cab để nén ActiveX
controls chứ không phải những ứng dụng, tuy nhiên có thể
đƣợc download từ Web server tới trình duyệt web
Web Setup Project Cho phép ngƣời sử dụng triển khai 1 ứng dụng Web tới web
server. Ngƣời sử dụng tạo 1 Web Setup project, build nó tạo
ra file đóng gói, copy file đó tới Web Server, và chạy file đó
để cài đặt ứng dụng này trên server, sử dụng những Setting
định nghĩa Web Setup project của ngƣời sử dụng
Smart Device CAB Tạo Cab project để cài đặt trên ứng dụng trên thiết bị di
Project động
Setup Wizard Nếu ngƣời sử dụng không rõ mình dùng loại đóng gói nào
thì dùng lựa chọn này để dùng trình thuật sỹ Wizard sẽ
hƣớng dẫn chúng ta đi từng bƣớc trong suốt quá trình tạo
file đóng gói. Áp dụng cho mọi loại ứng dụng, kể cả ứng
dụng Web.
Để tạo bộ cài đặt cho ứng dụng (Setup Project) trên môi trƣờng Window Form,
thực hiện các thao tác sau:
- Tạo mới một dự án kiểu Setup Project.
- Thêm các tệp tin thực thi của ứng dụng.
262
- Thêm các biểu tƣợng cho ứng dụng.
- Thêm các tệp tin thƣ viện cần thiết cho ứng dụng.
- Thiết lập thông số cho bộ cài đặt (thƣ mục cài đặt, môi trƣờng chạy ứng
dụng,…)
- Biên dịch thƣ mục cài đặt.
4.2. Hướng dẫn thực hành
4.2.1. Bài tập mẫu
Bài tập số 1: Tiếp tục bài tập số 1 đã thực hiện ở bài 3, thực hiện các công việc
sau:
Công việc 1: Thiết kế form quản lý chung cho ứng dụng vừa xây dựng
Yêu cầu:
Loại form: MDIForm
Tiêu đề: Quản lý bán hàng
Chế độ hiển thị: Lớn nhất
Thanh trạng thái: Có
Hỗ trợ xem trƣớc khi nhấn phím: Có
Công việc 2: Thiết kế menu trên form có sử dụng phím nóng để truy cập vào
mục chọn trên menu theo mẫu sau:
263
Hình 144. Form quản lý bán hàng đã gắn menu
Yêu cầu:
- Cấu trúc của menu nhƣ sau:
Cập nhật dữ liệu
Thông tin khách hàng
Danh sách mặt hàng
Bán hàng cho khách
----------
Thoát ra
Tìm kiếm
Tìm kiếm đơn giản
Tìm kiếm phức tạp
Báo cáo
Giấy mời hội nghị khách hàng
264
Bảng kê chi tiết bán hàng
Hóa đơn bán hàng
Báo cáo theo nhóm
Trợ giúp
Hƣớng dẫn sử dụng
Giới thiệu phần mềm
Công việc 3: Gắn các chức năng tƣơng ứng vào các mục chọn cho menu vừa
tạo trên form
Yêu cầu:
- Khi nhấn vào mục chọn Thông tin khách hàng sẽ hiển thị form
frmThongTinKhachHang là form con của form quản lý
- Khi nhấn vào mục chọn Danh sách mặt hàng sẽ hiển thị form
frmDanhSachMatHang là form con của form quản lý
- Khi nhấn vào mục chọn Bán hàng cho khách sẽ hiển thị form
frmChiTietBanHang là form con của form quản lý
- Khi nhấn vào mục chọn Thoát ra sẽ đóng form quản lý và kết thúc ứng dụng
- Khi nhấn vào mục chọn Giấy mời hội nghị khách hàng sẽ hiển thị form
frmInGiayMoi là form con của form quản lý
- Khi nhấn vào mục chọn Báo cáo doanh thu sẽ hiển thị form
frmInBaoCaoDoanhThu là form con của form quản lý
- Khi nhấn vào mục chọn Hướng dẫn sử dụng sẽ mở tệp tin
HuongDanSuDung.doc nằm tại thƣ mục cùng với tệp chạy của ứng dụng
- Khi nhấn vào mục chọn Giới thiệu phần mềm sẽ hiển thị form frmGioiThieu
là form con của form quản lý và căn form frmGioiThieu ở chính giữa form quản lý.
Công việc 4. Tạo bộ cài đặt cho ứng dụng QLYBH
Yêu cầu:
265
- Tích hợp đầy đủ các tập tin cần thiết để chạy ứng dụng trên nền tảng Windows
Desktop;
- Kiểu tệp tin cài đặt: Setup Project;
- Phiên bản đóng gói: Net Framework 4.0;
- Sử dụng trình hỗ trợ cài đặt: Windows Installer 3.1;
- Tạo shortcut của ứng dụng trên màn hình Desktop
Công việc 5. Cài đặt thử nghiệm bộ cài đặt vừa tạo ở công việc 4 và chạy thử
ứng dụng QLYBH trên máy tính khác.
Yêu cầu:
- Viết một báo cáo ngắn gọn về ứng dụng QLYBH
- Chụp hình quá trình cài đặt ứng dụng QLYBH, viết hƣớng dẫn cài đặt cho
ứng dụng QLYBH và lƣu tại đƣờng dẫn
D:\VB.NET\HuongDanSuDung\HuongDanCaiDat.doc
- Gỡ cài đặt ứng dụng QLYBH khỏi máy tính vừa đƣợc cài đặt.
4.2.2. Hướng dẫn thực hiện
Công việc 1: Thiết kế form quản lý chung cho ứng dụng vừa xây dựng theo mẫu
1. Phân tích yêu cầu:
Theo yêu cầu trên thì phải có một form dạng MDI có thuộc tính và các đối
tƣợng sau:
- Đối tƣợng menu có 2 cấp và đƣợc gắn phím nóng, shortcut key cho các mục
chọn
- Đối tƣợng status bar hiển thị thông tin ứng dụng.
- Form quản lý có thể phóng to, thu nhỏ bằng các nút chức năng.
2. Hướng dẫn thao tác:
Để thực hiện việc thiết kế form quản lý theo yêu cầu: Nháy phải chuột vào dự
án đang xây dựng ở cửa sổ Solution Explore, chọn Add/Windows Form. Xuất hiện cửa
sổ Add New Item
266
Hình 145. Cửa sổ Add New Item
Lựa chọn loại MDI Parent Form, sau đó nhập tên from frmQuanLy.vb vào ô
Name. Nhấn vào Add để thêm form vào dự án.
Nháy phải chuột vào form chọn Properties và thiết lập các thông số của form
theo đúng yêu cầu:
Text: Quản lý bán hàng
WindowState: Maximized
KeyPreview: True
Xóa bỏ các phần không cần thiết
3. Kết quả thiết kế:
Hình 146. Kết quả thiết kế form quản lý
267
4. Kết quả thực thi:
Hình 147. Kết quả thực thi form quản lý
Công việc 2: Thiết kế menu trên form có sử dụng phím nóng để truy cập vào mục chọn
trên menu:
1. Phân tích yêu cầu.
Theo yêu cầu trên thì cần phải xây dựng một hệ thống menu dạng phân cấp (2
cấp).
2. Hướng dẫn thao tác
Để thực hiện việc tạo menu theo đúng yêu cầu: Chọn các mục có sẵn trên menu
của form frmQuanly nhấn Delete để xóa các mục chọn này. Nháy phải chuột vào menu
chọn Edit Items xuất hiện cửa sổ Items Collection Editor
268
Hình 148. Cửa sổ Items Collection Editor
Lựa chọn kiểu MenuItem từ danh sách Select item and add to list below nhấn
Add để thêm mới một mục chọn vào danh sách mục chọn ở khung Members bên dƣới.
Chọn menu vừa tạo và thay đổi các thuộc tính của menu ở khung bên phải:
Text: Cập nhật dữ liệu
Name: mnuCapNhatDuLieu
DropDownItems: (Collection)
ShortcutKey: None
Nhấn vào biểu tƣợng bên cạnh thuộc tính (Collection) của menu để tạo các
menu con của nó. Cửa sổ Items Collection Editor xuất hiện. Nhấn Add để tạo mới một
menu con. Lựa chọn menu con vừa tạo và thiết lập các thuộc tính cho meu ở khung
bên phải:
Text: Thông tin &khách hàng (Thông tin khách hàng)
Name: mnuCapNhatThongTinKhachHang
DropDownItems: (Collection)
ShortcutKey: Ctrl+Alt+1
ShowShortcutKey: True
Nhấn OK để hoàn thành việc tạo menu cho form frmQuanLy.
Làm tƣơng tự với các mục chọn còn lại.
269
3. Kết quả thiết kế
Hình 149. Kết quả thiết kế menu
4. Kết quả thực thi
Hình 150. Kết quả thực thì form quản lý có menu
Công việc 3: Gắn các chức năng tƣơng ứng vào các mục chọn cho menu vừa
tạo trên form.
1. Phân tích yêu cầu
Theo yêu cầu trên thì hệ thống menu có 3 nhóm chức năng chính và ngƣời lập
trình phải viết các mã lệnh cho các chức năng này bao gồm:
- Chức năng hiển thị một form là form con của form quản lý.
270
- Chức năng hiển thị một tệp tin word.
- Chức năng kết thúc ứng dụng.
2. Hướng dẫn thao tác
Để thực hiện việc tạo menu theo đúng yêu cầu: Đƣa chuột đến mục chọn cần
gán thao tác, nhấp đúp chuột vào mục chọn để chuyển về cửa sổ cho phép viết mã lệnh
tƣơng ứng với mục chọn đó và thực hiện viết mã lệnh cho các mục chọn nhƣ sau:
Đoạn mã lệnh gán chức năng mở form frmThongTinKhachHang khi nhấp vào
mục chọn Cập nhật dữ liệu / Thông tin khách hàng trên thanh menu nhƣ sau:
Private Sub mnuCapNhatThongTinKhachHang_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles mnuCapNhatThongTinKhachHang.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmThongTinKhachHang
Dim ChildForm As New frmThongTinKhachHang
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
Đoạn mã lệnh gán chức năng mở form frmDanhSachMatHang khi nhấp vào
mục chọn Cập nhật dữ liệu / Danh sách mặt hàng trên thanh menu nhƣ sau:
Private Sub mnuCapNhatDanhSachKhachHang_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
271
Handles mnuCapNhatDanhSachKhachHang.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmDanhSachMatHang
Dim ChildForm As New frmDanhSachMatHang
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
Đoạn mã lệnh gán chức năng mở form frmBanHang khi nhấp vào mục chọn
Cập nhật dữ liệu / Bán hàng cho khách trên thanh menu nhƣ sau:
Private Sub mnuCapNhatThongTinBanHang_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles mnuCapNhatThongTinBanHang.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmBanHang
Dim ChildForm As New frmBanHang
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
272
End Sub
Đoạn mã lệnh gán chức năng Thoát ra trên thanh menu nhƣ sau:
Private Sub mnuThoatRa_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
mnuThoatRa.Click
' Thoát khỏi ứng dụng
Application.Exit()
End Sub
Đoạn mã lệnh gán chức năng mở form frmTimKiemDonGian khi nhấp vào mục
chọn Tìm kiếm / Tìm kiếm đơn giản trên thanh menu nhƣ sau:
Private Sub mnuTimKiemDonGian_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
mnuTimKiemDonGian.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmTimKiemDonGian
Dim ChildForm As New frmTimKiemDonGian
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
273
End Sub
Đoạn mã lệnh gán chức năng mở form frmTimKiemPhucTap khi nhấp vào mục
chọn Tìm kiếm / Tìm kiếm phức tạp trên thanh menu nhƣ sau:
Private Sub mnuTimKiemPhucTap_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
mnuTimKiemPhucTap.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmTimKiemPhucTap
Dim ChildForm As New frmTimKiemPhucTap
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
Đoạn mã lệnh gán chức năng mở form frmGiayMoiHoiNghiKhachHang khi
nhấp vào mục chọn Báo cáo / Giấy mời hội nghị khách hàng trên thanh menu nhƣ sau:
Private Sub
mnuBaoCaoGiayMoiHoiNghiKhachHang_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
mnuBaoCaoGiayMoiHoiNghiKhachHang.Click
274
' Khai báo một form con mới là một đối tượng form kế thừa
frmGiayMoiHoiNghiKhachHang
Dim ChildForm As New frmGiayMoiHoiNghiKhachHang
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
Đoạn mã lệnh gán chức năng mở form frmBangKeChiTietBanHang khi nhấp
vào mục chọn Báo cáo / Bảng kê chi tiết bán hàng trên thanh menu nhƣ sau:
Private Sub mnuBaoCaoBangKeChiTietBanHang_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles mnuBaoCaoBangKeChiTietBanHang.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmBangKeChiTietBanHang
Dim ChildForm As New frmBangKeChiTietBanHang
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
275
Đoạn mã lệnh gán chức năng mở form frmHoaDonBanHang khi nhấp vào mục
chọn Báo cáo / Hóa đơn bán hàng trên thanh menu nhƣ sau:
Private Sub mnuBaoCaoHoaDonBanHang _Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
mnuBaoCaoHoaDonBanHang.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmHoaDonBanHang
Dim ChildForm As New frmHoaDonBanHang
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
Đoạn mã lệnh gán chức năng mở form frmBaoCaoTheoNhom khi nhấp vào
mục chọn Báo cáo / Báo cáo theo nhóm trên thanh menu nhƣ sau:
Private Sub mnuBaoCaoTheoNhom _Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
mnuBaoCaoTheoNhom.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmBaoCaoTheoNhom
Dim ChildForm As New frmBaoCaoTheoNhom
276
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
Đoạn mã lệnh gán chức năng mở form frmGioiThieuPhanMem khi nhấp vào
mục chọn Trợ giúp / Giới thiệu phần mềm trên thanh menu nhƣ sau:
Private Sub mnuTroGiupGioiThieuPhanMem _Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles mnuTroGiupGioiThieuPhanMem.Click
' Khai báo một form con mới là một đối tượng form kế thừa
frmGioiThieuPhanMem
Dim ChildForm As New frmGioiThieuPhanMem
' Thiết lập form sắp hiển thị là form con của form hiện tại
ChildForm.MdiParent = Me
' Hiển thị form con
ChildForm.Show()
End Sub
Đoạn mã lệnh gán chức năng mở tập tin HuongDanSuDung.doc đặt tại cùng thƣ
mục chứa tệp tin thực thi của ứng dụng khi nhấp vào mục chọn Trợ giúp / Hƣớng dẫn
sử dụng trên thanh menu nhƣ sau:
277
Private Sub mnuTroGiupHuongDanSuDung _Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles mnuTroGiupHuongDanSuDung.Click
Dim startInfo As New ProcessStartInfo
startInfo.FileName = "WINWORD.EXE"
startInfo.Arguments = Application.StartupPath.ToString() +
"/HuongDanSuDung.doc"
Process.Start(startInfo)
End Sub
Đoạn mã xác nhận việc đóng form frmQuanLy và thoát khỏi ứng dụng đƣợc
viết trong sự kiện . Đoạn mã xác nhận việc thoát khỏi ứng dụng nhƣ sau:
Private Sub frmQuanLy_FormClosing(ByVal sender As Object,
ByVal e As System.Windows.Forms.FormClosingEventArgs)
Handles Me.FormClosing
If MessageBox.Show("Bạn có chắc chắn muốn thoát khỏi
ứng dụng không?", "Xác nhận", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) =
Windows.Forms.DialogResult.Yes Then
Application.ExitThread()
End If
End Sub
278
3. Kết quả thiết kế:
Phần này sinh viên tự kiểm tra và so sánh kết quả của mình với yêu cầu đề bài.
Điều chỉnh lại thiết kế và mã lệnh nếu cần.
4. Kết quả thực thi:
Phần này sinh viên tự kiểm tra và so sánh kết quả của mình với yêu cầu đề bài.
Công việc 4. Tạo bộ cài đặt cho ứng dụng QLYBH
1. Phân tích yêu cầu
Theo yêu cầu của đề bài, cần tạo một bộ cài đặt dạng đóng gói cho ứng dụng
Windows. Bộ cài đặt này phải đáp ứng các yêu cầu đó là chạy trên nền tảng Net
Framework 4.0, có chức năng tạo shortcut cho ứng dụng ở màn hình nền và có biểu
tƣợng riêng ở cửa sổ Add Remove Program của Windows.
2. Hướng dẫn thao tác
Để thực hiện việc tạo bộ cài đặt cho ứng dụng QLYBH nhƣ sau:
Tạo dự án cài đặt
Lựa chọn File / Add / New Project xuất hiện cửa sổ Add New Project
Hình 151. Cửa sổ Add New Project
Chọn Other Project Types / Setup and Deployment / Visual Studio Installer
Chọn Setup Project, nhập tên dự án vào ô Name. Nhấn OK để thêm mới dự án
tạo bộ cài đặt. Cửa sổ File System của dự án cài đặt xuất hiện.
279
Hình 152. Cửa sổ File System
Thêm các tập tin cần thiết:
Nháy phải chuột vào Application Folder chọn Add / Project Output
Hình 153. Cửa sổ Add Project Output Group
Chọn Primary output sau đó nhấn OK để thêm các tệp tin thực thi của ứng dụng
QLYBH vào bộ cài đặt.
280
Nháy phải chuột vào mục User’s Desktop chọn Create Shortcut to User’s
Desktop sau đó nhập tên cho shortcut này để tạo shortcut của ứng dụng trên màn hình
Desktop khi cài đặt.
Để thêm biểu tƣợng cho shortcut: Nháy phải chuột vào tên shortcut vừa tạo.
Chọn Properties Windows, tìm đến dòng Icon trong cửa sổ Properties sau đó nhấn vào
mũi tên quay xuống của phần giá trị và chọn (Browse …). Lựa chọn một biểu tƣợng đã
có trong cửa sổ Icons hoặc nhấn vào nút Browse để thêm vào một biểu tƣợng khác
Hình 154. Cửa sổ Icon
Hình 155. Cửa sổ Select Item in Project
281
Để thêm các tệp tin cần thiết khác cho ứng dụng: Nháy phải chuột vào mục
Application Folder, chọn Add/File để thêm các tệp tin cần thiết khác cho ứng dụng:
Icon (biểu tƣợng của ứng dụng), tệp tin hƣớng dẫn sử dụng, …
Hình 156. Cửa sổ Add Files cho phép thêm các file cần thiết vào bộ cài đặt
Thiết lập các thông số cho bộ cài đặt:
Để thiết lập các thông số cho bộ cài đặt của ứng dụng ngƣời sử dụng chọn ứng
dụng cài đặt từ cửa sổ Solution Explorer rồi nhấn F4 để chuyển sang cửa sổ Properties
cho phép thay đổi các thông tin khi cài đặt. Một số thuộc tính quan trọng của bộ cài đặt
bao gồm:
AddRemoveProgramIcon: Biểu tƣợng sẽ xuất hiện trong cửa sổ Add
Remove Program
Author: Tác giả của ứng dụng, thông tin này sẽ chính là thƣ mục chứa
ứng dụng khi cài đặt
DetechNewerInstalledVersion: Kiểm tra phiên bản mới trƣớc khi cài đặt
InstalAllUsers: Có cho phép cài đặt cho tất cả ngƣời dùng sử dụng
không
Manufacturer: Tên hãng sản xuất, thông tin này sẽ chính là thƣ mục chứa
thƣ mục có tên là giá trị của thuộc tính Author khi cài đặt
282
ProductName: Tên của ứng dụng xuất hiện khi cài đặt
RemovePreviousVersions: Có yêu cầu gỡ bỏ phiên bản cũ đã cài đặt trên
máy trƣớc khi cài đặt không
TargetPlatform: Nền tảng chạy ứng dụng (x86, x64)
Title: Tiêu đề cửa sổ cài đặt ứng dụng
Bổ xung các thành phần cần thiết khi cài đặt ứng dụng nhƣ nền tảng Net
Frameword, trình ứng dụng hỗ trợ cài đặt của Windows, ứng dụng để hiển thị báo cáo
(nếu xây dựng báo cáo bằng Crystal Report hoặc một hãng khác), … Để bổ xung các
thành phần này: Nháy phải chuột vào dự án cài đặt chọn Properties (Alt + Enter). Xuất
hiện cửa sổ Property Pages
Hình 157. Cửa sổ Property Pages
Nhấn chọn Prerequisites. Cửa sổ Prerequisites xuất hiện cho phép ngƣời sử
dụng lựa chọn các thành phần cần bổ xung khi cài đặt ứng dụng.
283
Hình 158. Cửa sổ Prerequisites
Lựa chọn các thành phần cần thiết sẽ tích hợp vào bộ cài đặt bằng cách tích vào
lựa chọn phía trƣớc mỗi thành phần. Chọn vị trí chứa các thành phần tích hợp ở mục
Specify the install location for prerequisites, sau đó nhấn OK để thêm các thành phần
này vào bộ cài đặt.
Có 3 lựa chọn về vị trí chứa các thành phần cài đặt bổ xung này:
Trên Website của hãng
Trên một thƣ mục của bộ cài đặt
Trên một đƣờng dẫn chỉ định
Biên dịch dự án tạo bộ cài đặt:
Sau khi hoàn thành việc thêm các tệp tin cần thiết và các thành phần cài đặt bổ
xung, ngƣời sử dụng cần tiến hành Build dự án cài đặt vừa tạo để Visual Studio .NET
đóng gói thành các tệp tin thực thi. Để đóng gói dự án cài đặt thành các tệp tin thực
thi: Nháy phải chuột vào dự án cài đặt tại cửa sồ Solution Explorer chọn Build.
Quá trình tạo và đóng gói bộ cài đặt cho ứng dụng hoàn thành. Lúc này ngƣời
sử dụng chỉ việc chép toàn bộ các tệp tin và thƣ mục mà Visual Studio đã tạo ra
(thƣờng nằm trong thƣ mục Debug) và tiến hành cài đặt trên các máy tính khác.
284
3. Kết quả thiết kế:
Hình 159. Kết quả thiết kế bộ cài đặt
4. Kết quả thực thi:
Hình 160. Kết quả thực thi bộ cài đặt
Công việc 5: Các thao tác cài đặt và gỡ bỏ sinh viên tự thực hiện
4.2.3. Bài tập thực hành
Bài tập số 1: Tiếp tục bài tập số 1 đã thực hiện ở bài 3, thực hiện các công việc
sau:
Công việc 1: Thiết kế form quản lý chung cho ứng dụng quản lý phân công
giảng dạy vừa xây dựng
Yêu cầu:
Loại form: MDIForm
285
Tiêu đề: Quản lý phân công giảng dạy
Chế độ hiển thị: Lớn nhất
Thanh trạng thái: Có
Hỗ trợ xem trƣớc khi nhấn phím: Có
Công việc 2: Thiết kế menu trên form có sử dụng phím nóng để truy cập vào
mục chọn trên menu theo mẫu sau:
Hình 161. Form quản lý phân công giảng dạy đã gắn menu
Yêu cầu:
- Cấu trúc của menu nhƣ sau:
Cập nhật dữ liệu
Thông tin giáo viên
Danh sách môn học
Phân công giảng dạy
----------
Thoát ra
286
Tìm kiếm
Tìm kiếm giáo viên.
Tìm kiếm môn học.
Tìm kiếm phân công giáo viên.
Báo cáo
Danh sách giáo viên
Phân công giảng dạy của giáo viên
Phân công giảng dạy của bộ môn
Phân công giáo viên theo môn học
Trợ giúp
Hƣớng dẫn sử dụng
Giới thiệu phần mềm
Công việc 3: Gắn các chức năng tƣơng ứng vào các mục chọn cho menu vừa
tạo trên form
Yêu cầu:
- Khi nhấn vào mục chọn Thông tin giáo viên sẽ thi hành form chứa thông tin
giáo viên là form con của form quản lý
- Khi nhấn vào mục chọn Danh sách giáo viên sẽ thi hành form chứa thông tin
môn học là form con của form quản lý
- Khi nhấn vào mục chọn Phân công giảng dạy sẽ thi hành form cho phép phân
công giảng dạy cho giáo viên là form con của form quản lý
- Khi nhấn vào mục chọn Thoát ra sẽ đóng form quản lý và kết thúc ứng dụng
- Khi nhấn vào mục chọn Danh sách giáo viên sẽ hiển thị form điều khiển việc
in danh sách giáo viên là form con của form quản lý
287
- Khi nhấn vào mục chọn Phân công giảng dạy giáo viên sẽ hiển thị form điều
khiển việc in ấn bảng phân công giảng dạy của giáo viên là form con của form quản lý
- Khi nhấn vào mục chọn Phân công giảng dạy của bộ môn sẽ hiển thị form
điều khiển việc in ấn bảng phân công giảng dạy của các giáo viên trong bộ môn là
form con của form quản lý
- Khi nhấn vào mục chọn Phân công giảng dạy theo môn học sẽ hiển thị form
điều khiển việc in ấn bảng phân công giảng dạy của giáo viên theo môn học là form
con của form quản lý
- Khi nhấn vào mục chọn Hướng dẫn sử dụng sẽ mở tệp tin
HuongDanSuDung.doc nằm tại thƣ mục cùng với tệp chạy của ứng dụng
- Khi nhấn vào mục chọn Giới thiệu phần mềm sẽ hiển thị form frmGioiThieu
là form con của form quản lý và căn form frmGioiThieu ở chính giữa form quản lý.
Công việc 4. Tạo bộ cài đặt cho ứng dụng QLYPC
Yêu cầu:
- Tích hợp đầy đủ các tập tin cần thiết để chạy ứng dụng trên nền tảng Windows
Desktop;
- Kiểu tệp tin cài đặt: Setup Project;
- Phiên bản đóng gói: ;
- Sử dụng trình hỗ trợ cài đặt: Windows Installer 3.1;
- Tạo shortcut của ứng dụng trên màn hình Desktop
Công việc 5. Cài đặt thử nghiệm bộ cài đặt vừa tạo ở công việc 4 và chạy thử
ứng dụng QLYPC trên máy tính khác.
Yêu cầu:
- Viết một báo cáo ngắn gọn về ứng dụng QLYBH
288
- Chụp hình quá trình cài đặt ứng dụng QLYBH, viết hƣớng dẫn cài đặt cho
ứng dụng QLYPC và lƣu tại đƣờng dẫn
D:\VB.NET\HuongDanSuDung\HuongDanCaiDat.doc
- Gỡ cài đặt ứng dụng QLYPC khỏi máy tính vừa đƣợc cài đặt.
Bài tập số 2: Tiếp tục bài tập số 1 đã thực hiện ở bài 3, thực hiện các công việc
sau:
Công việc 1: Thiết kế form quản lý chung cho ứng dụng vừa xây dựng
Yêu cầu:
Loại form: MDIForm
Tiêu đề: Quản lý tài sản
Chế độ hiển thị: Lớn nhất
Thanh trạng thái: Có
Hỗ trợ xem trƣớc khi nhấn phím: Có
Công việc 2: Thiết kế menu trên form có sử dụng phím nóng để truy cập vào
mục chọn trên menu theo mẫu sau:
Hình 162. Form quản lý tài sản đã gắn menu
Yêu cầu:
289
- Cấu trúc của menu nhƣ sau:
Cập nhật dữ liệu
Thông tin tài sản
Danh sách đơn vị
Quản lý tài sản
Tìm kiếm
Tìm kiếm tài sản
Tìm kiếm đơn vị
Tìm kiếm tài sản thuộc đơn vị
Tìm kiếm tài sản có tình trạng
Báo cáo
In nhãn cho tài sản
Báo cáo tài sản tại đơn vị
Báo cáo tài sản có tình trạng
Trợ giúp
Hƣớng dẫn sử dụng
Giới thiệu phần mềm
----------
Thoát ra
Công việc 3: Gắn các chức năng tƣơng ứng vào các mục chọn cho menu vừa
tạo trên form
Yêu cầu:
- Khi nhấn vào mục chọn Thông tin tài sản sẽ thi hành form
frmThongTinKhachHang là form con của form quản lý
290
- Khi nhấn vào mục chọn Danh sách đơn vị sẽ thi hành form
frmDanhSachMatHang là form con của form quản lý
- Khi nhấn vào mục chọn Quản lý tài sản sẽ thi hành form frmQuanLyTaiSan là
form con của form quản lý
- Khi nhấn vào mục chọn Thoát ra sẽ đóng form quản lý và kết thúc ứng dụng
- Khi nhấn vào mục chọn In nhãn tài sản sẽ hiển thị form điều khiển việc in ấn
nhãn tài sản là form con của form quản lý
- Khi nhấn vào mục chọn Báo cáo tài sản tại đơn vị sẽ hiển thị form điều khiển
việc in ấn danh mục tài sản tại đơn vị là form con của form quản lý
- Khi nhấn vào mục chọn Báo cáo tài sản theo tình trạng sẽ hiển thị form điều
khiển việc in ấn danh mục tài sản có tình trạng là form con của form quản lý
- Khi nhấn vào mục chọn Hướng dẫn sử dụng sẽ mở tệp tin
HuongDanSuDung.doc nằm tại thƣ mục cùng với tệp chạy của ứng dụng
- Khi nhấn vào mục chọn Giới thiệu phần mềm sẽ hiển thị form frmGioiThieu
là form con của form quản lý và căn form frmGioiThieu ở chính giữa form quản lý.
- Khi nhấn vào mục chọn Tìm kiếm tài sản sẽ hiển thị form cho phép tìm kiếm
thông tin về tài sản.
- Khi nhấn vào mục chọn Tìm kiếm đơn vị sẽ hiển thị form cho phép tìm kiếm
thông tin về đơn vị.
- Khi nhấn vào mục chọn Tìm kiếm tài sản thuộc đơn vị sẽ hiển thị form cho
phép tìm kiếm thông tin về tài sản thuộc đơn vị.
- Khi nhấn vào mục chọn Tìm kiếm tài sản có tình trạng sẽ hiển thị form cho
phép tìm kiếm thông tin về tài sản có tình trạng theo chỉ định.
Công việc 4. Tạo bộ cài đặt cho ứng dụng QLYTS
Yêu cầu:
- Tích hợp đầy đủ các tập tin cần thiết để chạy ứng dụng trên nền tảng Windows
Desktop;
- Kiểu tệp tin cài đặt: Setup Project;
- Phiên bản đóng gói: ;
- Sử dụng trình hỗ trợ cài đặt: Windows Installer 3.1;
291
- Tạo shortcut của ứng dụng trên màn hình Desktop
Công việc 5. Cài đặt thử nghiệm bộ cài đặt vừa tạo ở công việc 4 và chạy thử
ứng dụng QLYBH trên máy tính khác.
Yêu cầu:
- Viết một báo cáo ngắn gọn về ứng dụng QLYTS
- Chụp hình quá trình cài đặt ứng dụng QLYBH, viết hƣớng dẫn cài đặt cho
ứng dụng QLYTS và lƣu tại đƣờng dẫn
D:\VB.NET\HuongDanSuDung\HuongDanCaiDat.doc
- Gỡ cài đặt ứng dụng QLYTS khỏi máy tính vừa đƣợc cài đặt.
Bài tập số 3: Tiếp tục bài tập số 1 đã thực hiện ở bài 3, thực hiện các công việc
sau:
Công việc 1: Thiết kế form quản lý chung cho ứng dụng quản lý điểm vừa xây
dựng
Yêu cầu:
Loại form: MDIForm
Tiêu đề: Quản lý bán hàng
Chế độ hiển thị: Lớn nhất
Thanh trạng thái: Có
Hỗ trợ xem trƣớc khi nhấn phím: Có
Công việc 2: Thiết kế menu trên form có sử dụng phím nóng để truy cập vào
mục chọn trên menu theo mẫu sau:
292
Hình 163. Form quản lý điểm đã gắn menu
Yêu cầu:
- Cấu trúc của menu nhƣ sau:
Cập nhật dữ liệu
Thông tin sinh viên
Thông tin khoa
Thông tin lớp học phần
Thông tin môn học
Điểm sinh viên
Tìm kiếm
Tìm kiếm sinh viên
Tìm kiếm môn học
Tìm kiếm điểm của sinh viên trong học kỳ
Tìm kiếm điểm của sinh viên theo môn
Báo cáo
293
Giấy báo kết quả học tập
Bảng điểm sinh viên
Bảng điểm môn học
Bảng điểm lớp niên chế
Trợ giúp
Hƣớng dẫn sử dụng
Giới thiệu phần mềm
----------
Thoát ra
Công việc 3: Gắn các chức năng tƣơng ứng vào các mục chọn cho menu vừa
tạo trên form
Yêu cầu:
- Khi nhấn vào mục chọn Thông tin sinh viên sẽ thi hành form quản lý thông tin
sinh viên là form con của form quản lý
- Khi nhấn vào mục chọn Thông tin khoa sẽ thi hành form quản lý thông tin
khoa là form con của form quản lý
- Khi nhấn vào mục chọn Thông tin môn học sẽ thi hành form quản lý thông tin
môn học là form con của form quản lý
- Khi nhấn vào mục chọn Thông tin lớp học phần sẽ thi hành form quản lý
thông tin lớp học phần là form con của form quản lý
- Khi nhấn vào mục chọn Quản lý điểm sẽ thi hành form cập nhật điểm cho sinh
viên là form con của form quản lý
- Khi nhấn vào mục chọn Thoát ra sẽ đóng form quản lý và kết thúc ứng dụng
- Khi nhấn vào mục chọn Giấy báo kết quả học tập sẽ hiển thị form điều khiển
việc in xem giấy báo kết quả học tập của sinh viên là form con của form quản lý
294
- Khi nhấn vào mục chọn Bảng điểm sinh viên sẽ hiển thị form điều khiển việc
in xem bảng điểm của sinh viên là form con của form quản lý
- Khi nhấn vào mục chọn Bảng điểm sinh viên theo lớp niên chế sẽ hiển thị
form điều khiển việc in xem bảng điểm của sinh viên theo lớp niên chế là form con
của form quản lý
- Khi nhấn vào mục chọn Bảng điểm sinh viên theo môn sẽ hiển thị form điều
khiển việc in xem bảng điểm của sinh viên theo môn là form con của form quản lý
- Khi nhấn vào mục chọn Hướng dẫn sử dụng sẽ mở tệp tin
HuongDanSuDung.doc nằm tại thƣ mục cùng với tệp chạy của ứng dụng
- Khi nhấn vào mục chọn Giới thiệu phần mềm sẽ hiển thị form frmGioiThieu
là form con của form quản lý và căn form frmGioiThieu ở chính giữa form quản lý.
Công việc 4. Tạo bộ cài đặt cho ứng dụng QLYDIEM
Yêu cầu:
- Tích hợp đầy đủ các tập tin cần thiết để chạy ứng dụng trên nền tảng Windows
Desktop;
- Kiểu tệp tin cài đặt: Setup Project;
- Phiên bản đóng gói: ;
- Sử dụng trình hỗ trợ cài đặt: Windows Installer 3.1;
- Tạo shortcut của ứng dụng trên màn hình Desktop
Công việc 5. Cài đặt thử nghiệm bộ cài đặt vừa tạo ở công việc 4 và chạy thử
ứng dụng QLYDIEM trên máy tính khác.
Yêu cầu:
- Viết một báo cáo ngắn gọn về ứng dụng QLYDIEM
- Chụp hình quá trình cài đặt ứng dụng QLYBH, viết hƣớng dẫn cài đặt cho
ứng dụng QLYDIEM và lƣu tại đƣờng dẫn
D:\VB.NET\HuongDanSuDung\HuongDanCaiDat.doc
295
- Gỡ cài đặt ứng dụng QLYDIEM khỏi máy tính vừa đƣợc cài đặt.
4.3. Bài tập về nhà
Bài tập số 4. Tạo form quản lý và hệ thống menu cho ứng dụng xuất nhập kho công ty
BCD. Tạo bộ cài đặt cho ứng dụng này.
Bài tập số 5. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin thƣ viện tại trƣờng XYZ
Bài tập số 6. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin ký túc xá
Bài tập số 7. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin các đề tài khoa học tại trƣờng đại học SPK
Bài tập số 8. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin giải bóng đá vô địch quốc gia
Bài tập số 9. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin nhân sự tại công ty ABC
Bài tập số 10. Hãy thiết kế cơ sở dữ liệu phù hợp và các form cần thiết cho việc tìm
kiếm thông tin thi đua khen thƣởng tại công ty ABC
296
BÀI TẬP NHÓM.
Ca thực tập đƣợc chia thành các nhóm nhỏ, mỗi nhóm có tối đa 3 thành viên.
Tiến hành bốc thăm ngẫu nhiên để chọn một bài tập nhóm dƣới đây.
Yêu cầu:
Có bảng phân công nhiệm vụ và chữ ký xác nhận của các thành viên trong
nhóm.
Thời gian hoàn thành bài tập nhóm là 7 ngày kể từ khi nhận nhiệm vụ.
Bài tập nhóm hoàn thành đƣợc lƣu chung trong một thƣ mục có cấu trúc nhƣ
sau:
Trong đó:
+ Thƣ mục “BoCaiDat” chứa các tệp tin cần thiết cho việc cài đặt, phân phối
ứng dụng vừa xây dựng.
+ Thƣ mục “CoSoDuLieu” chứa tệp tin backup cơ sở dữ liệu của ứng dụng.
+ Thƣ mục “MaNguon” chứa toàn bộ Project của ứng dụng.
+ Tệp tin “Bảng phân công nhiệm vụ.docx” chứa thông tin về bài tập nhóm và
phân công nhiệm vụ các thành viên trong nhóm.
+ Tệp tin “Hƣớng dẫn cài đặt.docx” chứa thông tin đính kèm dữ liệu cho ứng
dụng và hƣớng dẫn cài đặt để chạy ứng dụng trên các máy tính khác.
Danh sách các bài tập nhóm
1. Xây dựng hệ thống quản lý bán vé tầu qua mạng
297
2. Xây dựng hệ thống quản lý bảo hiểm nhân thọ của công ty DEF
3. Xây dựng hệ thống quản lý giải bóng đá trƣờng
4. Xây dựng hệ thống quản lý nhân sự công ty SNO
5. Xây dựng hệ thống quản lý thiết bị tại công ty SHO
6. Xây dựng hệ thống quản lý đề tài khoa học tại trƣờng SPK/
7. Xây dựng hệ thống quản lý bán hàng cho cửa hàng văn phòng phẩm ABC.
8. Xây dựng hệ thống quản lý bán hàng cho cửa hàng thuốc tân dƣợc TBO.
9. Xây dựng hệ thống quản lý bán hàng cho chuỗi cửa hàng thời trang Việt
Tiến.
10. Xây dựng hệ thống quản lý bảo hành sản phẩm cho sản phẩm bình nƣớc
nóng của hãng SAMSUN.
11. Xây dựng hệ thống quản lý sách tại thƣ viện trƣờng GHY.
12. Xây dựng hệ thống quản lý điểm của học viên cho trung tâm đào tạo ngắn
hạn.
13. Xây dựng phần mềm quản lý bán máy tính cho cửa hàng BACTHA.
14. Xây dựng hệ thống quản lý ra vào của công nhân trong công ty may
SONHON.
15. Xây dựng hệ thống quản lý thuê xe cho công ty du lịch TANSON.
298
DANH MỤC TÀI LIỆU THAM KHẢO
Tiếng Việt
[1] Phạm Hùng Phú, Nguyễn Văn Thẩm, Giáo trình hệ quản trị cơ sở dữ liệu,
Trƣờng đại học SPKT Nam Định, 2013.
[2] Đoàn Tuấn Nam, Giáo trình lập trình cơ sở dữ liệu, Trƣờng đại học SPKT
Nam Định, 2012.
Tiếng Anh
[3] Ying Bai, Practical database programming with Visual Basic.NET (PDF).
IEEE Press, 2012.
[4] Evangelos Petroutsos and Asli Bilgin, Mastering Visual Basic .NET Database
Programming, Richard Mills, 2002
Website
[5] http://www.codeproject.com/
[6] http://caulacbovb.com/
[7] http://blog.sqlauthority.com/
[8] http://www.sqlviet.com/blog/