luẬn vĂn tỐt nghiỆp - math.hcmuns.edu.vnptbao/lvtn/2000/lv3.pdf · hoàn thành luận văn....
TRANSCRIPT
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 1
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA TOÁN - TIN HỌC CHUYÊN NGÀNH : TOÁN – TIN ỨNG DỤNG
LUẬN VĂN TỐT NGHIỆP
ĐỀ TÀI :
Giáo Viên Hướng Dẫn : ThS. PHẠM THẾ BẢO
ThS. NGUYỄN MINH HIỆP
Giáo Viên Phản Biện : ThS. NGUYỄN GIANG SƠN
Sinh Viên Thực Hiện : ÂU DƯƠNG ĐẠT
LÊ THÀNH NGUYÊN
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 2
NIÊN KHOÁ 2000 - 2004
NNHHẬẬNN XXÉÉTT CCỦỦAA GGIIÁÁOO VVIIÊÊNN HHƯƯỚỚNNGG DDẪẪNN ...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 3
LLỜỜII CCẢẢMM ƠƠNN
Chúng em xin bày tỏ chân thành lòng biết ơn đến thầy Phạm Thế Bảo, người đã
cung cấp tài liệu, tận tình hướng dẫn, chỉ bảo chúng em trong suốt quá trình làm và
hoàn thành luận văn.
Chúng em xin cảm ơn các thầy, cô trong khoa Toán – Tin học đã tạo mọi điều
kiện thuận lợi giúp đỡ chúng em trong suốt bốn năm học đại học.
Đồng thời, chúng em xin cảm ơn các anh, chị khóa trước đã giúp đỡ chúng em
nhiệt tình và cho chúng em nhiều lời khuyên bổ ích.
Cảm ơn các bạn sinh viên lớp Toán – Tin học 2000 đã chia sẻ và động viên chúng
tôi trong suốt quá trình thực hiện luận văn.
Cuối cùng, chúng con xin gửi lời cảm ơn chân thành nhất đến bố mẹ và mọi
người trong gia đình đã động viên, giúp đỡ chúng con cả về vật chất lẫn tinh thần để
chúng con có được kết quả ngày hôm nay.
TP. Hồ Chí Minh, tháng 7 năm 2004
ÂU DƯƠNG ĐẠT LÊ THÀNH NGUYÊN
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 4
MMỤỤCC LLỤỤCC LỜI MỞ ĐẦU ..................................................................Error! Bookmark not defined.
CHƯƠNG 1 – KHÁI NIỆM MÃ VẠCH.......................Error! Bookmark not defined.
I. Mã vạch 1 chiều: ....................................................Error! Bookmark not defined.
I.1. Thông tin về mã vạch 1 chiều: ........................Error! Bookmark not defined.
I.1.1. Mã vạch 1 chiều là gì? .............................Error! Bookmark not defined.
I.1.2. Mã vạch chứa đựng thông tin gì?.............Error! Bookmark not defined.
I.1.3. Cấu trúc của mã vạch 1 chiều: .................Error! Bookmark not defined.
I.1.4. Tập kí tự: ..................................................Error! Bookmark not defined.
I.1.5. Gián đoạn, liên tục: ..................................Error! Bookmark not defined.
I.1.6. Mã vạch có độ dài cố định, thay đổi: .......Error! Bookmark not defined.
I.1.7. Mã vạch tự kiểm tra: ................................Error! Bookmark not defined.
I.2. Ứng dụng:........................................................Error! Bookmark not defined.
I.3. Ưu khuyết điểm:..............................................Error! Bookmark not defined.
I.3.1. Ưu điểm:...................................................Error! Bookmark not defined.
I.3.2. Khuyết điểm:............................................Error! Bookmark not defined.
I.4. Giới thiệu một số loại mã vạch: ......................Error! Bookmark not defined.
I.4.1. EAN-13: ...................................................Error! Bookmark not defined.
I.4.2. Code 128: .................................................Error! Bookmark not defined.
I.4.3. Code 39: ...................................................Error! Bookmark not defined.
I.5. So sánh giữa các loại mã vạch: .......................Error! Bookmark not defined.
II. Mã vạch 2 chiều:...................................................Error! Bookmark not defined.
II.1. Thông tin về mã vạch 2 chiều:.......................Error! Bookmark not defined.
II.1.1. Mã vạch 2 chiều là gì? ............................Error! Bookmark not defined.
II.1.2. Mã vạch 2 chiều chứa đựng thông tin gì?............. Error! Bookmark not
defined.
II.1.3. Cấu trúc của mã vạch 2 chiều: ................Error! Bookmark not defined.
II.2. Ứng dụng trong thực tế:.................................Error! Bookmark not defined.
II.3. Ưu khuyết điểm: ............................................Error! Bookmark not defined.
II.3.1. Ưu điểm: .................................................Error! Bookmark not defined.
II.3.2. Khuyết điểm:...........................................Error! Bookmark not defined.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 5
II.4. Giới thiệu một số loại mã vạch:.....................Error! Bookmark not defined.
II.4.1. PDF417: ..................................................Error! Bookmark not defined.
II.4.2. Data Matrix: ............................................Error! Bookmark not defined.
II.4.3. Maxi Code: .............................................Error! Bookmark not defined.
II.5. So sánh giữa các loại mã vạch:......................Error! Bookmark not defined.
II.6. Mã vạch PDF417: ..........................................Error! Bookmark not defined.
II.6.1. Mã hóa mã vạch PDF417: ......................Error! Bookmark not defined.
II.6.1.1. Mã hóa mức cao:..............................Error! Bookmark not defined.
II.6.1.2. Mã hóa mức thấp .............................Error! Bookmark not defined.
II.6.2. Cơ chế phát hiện và sửa lỗi của mã vạch PDF417: .....Error! Bookmark
not defined.
II.6.2.1. Cấp độ sửa lỗi được đề nghị : ..........Error! Bookmark not defined.
II.6.2.2. Những vấn đề khác cần biết đến khi sử dụng cấp độ sửa lỗi: . Error!
Bookmark not defined.
II.6.2.3. Bảng hệ số đa thức khai triển tương ứng các cấp độ bảo mật: Error!
Bookmark not defined.
III. Ứng dụng thực tế của mã vạch: ...........................Error! Bookmark not defined.
III.1. Ứng dụng trong xét nghiệm..........................Error! Bookmark not defined.
III.2. Ứng dụng trong việc trồng và bán rau sạch..Error! Bookmark not defined.
III.3. Ứng dụng trong việc tránh sử dụng nhầm thuốc ........ Error! Bookmark not
defined.
III.4. Ứng dụng trong việc làm CMND.................Error! Bookmark not defined.
III.5. Ứng dụng trong làm thẻ học sinh .................Error! Bookmark not defined.
III.6. Ứng dụng trong việc ghi hạn sử dụng của sữa Vinamilk..Error! Bookmark
not defined.
III.7. Ứng dụng trong việc chống giả mạo hiện nay............ Error! Bookmark not
defined.
IV. Một số thông tin về RFID: ..................................Error! Bookmark not defined.
IV.1. Khi ông lớn làm thử nghiệm : ......................Error! Bookmark not defined.
IV.2. RFID là gì ? ..................................................Error! Bookmark not defined.
CHƯƠNG 2 – QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH .....Error!
Bookmark not defined.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 6
I. Đặt vấn đề: .............................................................Error! Bookmark not defined.
II. Phân tích yêu cầu: .................................................Error! Bookmark not defined.
II.1. Về mặt ứng dụng: ..........................................Error! Bookmark not defined.
II.1.1. Module 1: ................................................Error! Bookmark not defined.
II.1.2. Module 2: ................................................Error! Bookmark not defined.
II.1.3. Module 3: ................................................Error! Bookmark not defined.
II.1.4. Module 4: ................................................Error! Bookmark not defined.
II.2. Về mặt kĩ thuật:..............................................Error! Bookmark not defined.
II.3. Các yêu cầu khác: ..........................................Error! Bookmark not defined.
III. Thiết kế: ...............................................................Error! Bookmark not defined.
III.1. Kiến trúc hệ thống: .......................................Error! Bookmark not defined.
III.2. Thiết kế tổng quát:........................................Error! Bookmark not defined.
III.2.1. Thủ thư: .................................................Error! Bookmark not defined.
III.2.1.1. Ứng dụng web: ...............................Error! Bookmark not defined.
III.2.1.2. Ứng dụng trên máy đơn:.................Error! Bookmark not defined.
III.2.2. Sinh viên:...............................................Error! Bookmark not defined.
III.3. Thiết kế Cơ sở dữ liệu: .................................Error! Bookmark not defined.
III.3.1. Bảng Sinh viên: .....................................Error! Bookmark not defined.
III.3.2. Bảng Hẹn: ..............................................Error! Bookmark not defined.
III.3.3. Bảng Hẹn sinh viên: ..............................Error! Bookmark not defined.
III.3.4. Bảng Lớp: ..............................................Error! Bookmark not defined.
III.3.5. Bảng Phòng máy: ..................................Error! Bookmark not defined.
III.3.6. Bảng Thủ thư :.......................................Error! Bookmark not defined.
III.4. Thiết kế xử lý: ..............................................Error! Bookmark not defined.
III.4.1. Xử lý: đăng kí làm thẻ của sinh viên.....Error! Bookmark not defined.
III.4.2. Xử lý: đăng nhập của sinh viên .............Error! Bookmark not defined.
III.4.3. Xử lý: đăng nhập của thủ thư ................Error! Bookmark not defined.
III.4.4. Xử lý: hẹn ngày chụp hình của thủ thư .Error! Bookmark not defined.
III.4.5. Xử lý: thêm lớp của thủ thư...................Error! Bookmark not defined.
III.4.6. Xử lý: tìm kiếm sinh viên của thủ thư ...Error! Bookmark not defined.
III.4.7. Xử lý: quy định thời gian của thủ thư ...Error! Bookmark not defined.
III.4.8. Xử lý: cấp thời gian của thủ thư ............Error! Bookmark not defined.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 7
III.4.9. Xử lý: in phiếu chụp hình cho sinh viên của thủ thư .Error! Bookmark
not defined.
III.4.10. Xử lý: tạo thẻ thư viện cho sinh viên của thủ thư ....Error! Bookmark
not defined.
III.4.11. Xử lý: quản lí phòng máy của thủ thư .Error! Bookmark not defined.
III.5. Cơ chế hoạt động:.........................................Error! Bookmark not defined.
CHƯƠNG 3 – CÔNG NGHỆ SỬ DỤNG......................Error! Bookmark not defined.
I. JSP / Servlet: ..........................................................Error! Bookmark not defined.
I.1. Java Server Page (JSP):...................................Error! Bookmark not defined.
I.1.1. Khái niệm:................................................Error! Bookmark not defined.
I.1.2. Cấu trúc thẻ: .............................................Error! Bookmark not defined.
I.1.2.1. Thẻ chỉ dẫn:.......................................Error! Bookmark not defined.
I.1.2.2. Thẻ kịch bản:.....................................Error! Bookmark not defined.
I.1.2.3. Các hành động chuẩn: .......................Error! Bookmark not defined.
I.1.3. Các đối tượng ẩn (implicit object): ..........Error! Bookmark not defined.
I.1.3.1. Đối tượng Request: ...........................Error! Bookmark not defined.
I.1.3.2. Đối tượng Response: .........................Error! Bookmark not defined.
I.1.3.3. Đối tượng session:.............................Error! Bookmark not defined.
I.1.3.4. Đối tượng Application: .....................Error! Bookmark not defined.
I.1.3.5. Đối tượng Out: ..................................Error! Bookmark not defined.
I.1.3.6. Đối tượng Config: .............................Error! Bookmark not defined.
I.1.3.7. Đối tượng Exception: ........................Error! Bookmark not defined.
I.1.4. Chu trình sống của JSP ............................Error! Bookmark not defined.
I.1.4.1. Biên dịch trang JSP: ..........................Error! Bookmark not defined.
I.1.4.2. Nạp trang:..........................................Error! Bookmark not defined.
I.1.4.3. Khởi tạo:............................................Error! Bookmark not defined.
I.1.4.4. Thực thi: ............................................Error! Bookmark not defined.
I.1.4.5. Dọn dẹp: ............................................Error! Bookmark not defined.
I.2. Servlet: ............................................................Error! Bookmark not defined.
I.2.1. Khái niệm:................................................Error! Bookmark not defined.
I.2.2. Các phương thức xử lý cơ bản: ................Error! Bookmark not defined.
I.2.2.1. Phương thức khởi tạo init(): ..............Error! Bookmark not defined.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 8
I.2.2.2. Phương thức phục vụ service(): ........Error! Bookmark not defined.
I.2.2.3. Phương thức huỷ destroy():...............Error! Bookmark not defined.
I.2.2.4. Phương thức getServletConfig() và getServletInfo():............... Error!
Bookmark not defined.
I.2.3. Chu trình sống của servlet:.......................Error! Bookmark not defined.
I.2.3.1. Nạp servlet: .......................................Error! Bookmark not defined.
I.2.3.2. Khởi tạo servlet: ................................Error! Bookmark not defined.
I.2.3.3. Thực thi servlet: ................................Error! Bookmark not defined.
I.2.3.4. Dọn dẹp servlet: ................................Error! Bookmark not defined.
I.3. So sánh giữa JSP và Servlet: ...........................Error! Bookmark not defined.
II. JDBC:....................................................................Error! Bookmark not defined.
II.1. Giới thiệu: ......................................................Error! Bookmark not defined.
II.2. Khái quát:.......................................................Error! Bookmark not defined.
II.2.1. java.sql.DriverManager ..........................Error! Bookmark not defined.
II.2.2. java.sql.Connection.................................Error! Bookmark not defined.
II.2.3. java.sql.Statement ...................................Error! Bookmark not defined.
II.2.4. java.sql.ResultSet....................................Error! Bookmark not defined.
II.3. Các kiểu JDBC: .............................................Error! Bookmark not defined.
II.3.1. Kiểu 1:JDBC sử dụng cầu nối ODBC (JDBC-ODBC Bridge) ...... Error!
Bookmark not defined.
II.3.2. Kiểu 2:JDBC kết nối trực tiếp với các trình điều khiển cơ sở dữ liệu
...........................................................................Error! Bookmark not defined.
II.3.3. Kiểu 3:JDBC kết nối thông qua các ứng dụng mạng trung gian .... Error!
Bookmark not defined.
II.3.4. Kiểu 4:JDBC kết nối thông qua các trình điều khiển đặc thù ở xa Error!
Bookmark not defined.
II.4. Truy xuất cơ sở dữ liệu:.................................Error! Bookmark not defined.
II.4.1. Kết nối với cơ sở dữ liệu: .......................Error! Bookmark not defined.
II.4.2. Truy vấn dữ liệu:.....................................Error! Bookmark not defined.
II.4.3. Trích xuất dữ liệu:...................................Error! Bookmark not defined.
II.4.4. Đóng kết nối: ..........................................Error! Bookmark not defined.
III. Java Media Framework (JMF): ...........................Error! Bookmark not defined.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 9
III.1. Tổng quan:....................................................Error! Bookmark not defined.
III.2. Kiến trúc JMF:..............................................Error! Bookmark not defined.
III.2.1. Dữ liệu nguồn: .......................................Error! Bookmark not defined.
III.2.1.1. Dữ liệu nguồn kéo: .........................Error! Bookmark not defined.
III.2.1.2. Dữ liệu nguồn đẩy: .........................Error! Bookmark not defined.
III.2.2. Thiết bị thu: ...........................................Error! Bookmark not defined.
III.2.3. Player:....................................................Error! Bookmark not defined.
III.2.3.1. Không nhận biết: ............................Error! Bookmark not defined.
III.2.3.2. Nhận biết: .......................................Error! Bookmark not defined.
III.2.3.3. Đã nhận biết:...................................Error! Bookmark not defined.
III.2.3.4. Tìm kiếm: .......................................Error! Bookmark not defined.
III.2.3.5. Đã tìm kiếm: ...................................Error! Bookmark not defined.
III.2.3.6. Bắt đầu:...........................................Error! Bookmark not defined.
III.2.4. Processor: ..............................................Error! Bookmark not defined.
III.2.4.1. Định hình:.......................................Error! Bookmark not defined.
III.2.4.2. Đã định hình: ..................................Error! Bookmark not defined.
III.2.5. DataSink: ...............................................Error! Bookmark not defined.
III.2.6. Format: ..................................................Error! Bookmark not defined.
III.2.7. Manager:................................................Error! Bookmark not defined.
III.2.7.1. Manager:.........................................Error! Bookmark not defined.
III.2.7.2. CaptureDeviceManager:.................Error! Bookmark not defined.
III.2.7.3. PlugInManager: ..............................Error! Bookmark not defined.
III.3. Các phương thức thực hiện: .........................Error! Bookmark not defined.
III.3.1. Tạo ra Player: ........................................Error! Bookmark not defined.
III.3.2. Thu dữ liệu media..................................Error! Bookmark not defined.
III.4. Lấy hình ảnh từ webcam sử dụng JMF: .......Error! Bookmark not defined.
III.4.1. Giới thiệu:..............................................Error! Bookmark not defined.
III.4.2. Tên thiết bị :...........................................Error! Bookmark not defined.
III.4.3. Lấy định dạng đúng:..............................Error! Bookmark not defined.
III.4.4. Lấy DataSource: ....................................Error! Bookmark not defined.
III.4.5. Lấy Processor ........................................Error! Bookmark not defined.
III.4.6. PushBufferStream: ................................Error! Bookmark not defined.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 10
III.4.7. Lấy Image:.............................................Error! Bookmark not defined.
III.5. Chương trình đầy đủ minh họa việc lấy ảnh từ camera: ...Error! Bookmark
not defined.
CHƯƠNG 4 – CÀI ĐẶT, ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN................Error!
Bookmark not defined.
I. Cài đặt: ...................................................................Error! Bookmark not defined.
I.1. Tại sao cần cài đặt cơ chế chia sẻ kết nối (Connnection Pool):.............. Error!
Bookmark not defined.
I.2. Tại sao lại sử dụng JMF:.................................Error! Bookmark not defined.
I.3. Hình ảnh các module của hệ thống .................Error! Bookmark not defined.
II. Đánh giá:...............................................................Error! Bookmark not defined.
II.1. Tự đánh giá: ...................................................Error! Bookmark not defined.
II.2. Thư viện đánh giá: .........................................Error! Bookmark not defined.
III. Hướng phát triển:.................................................Error! Bookmark not defined.
PHỤ LỤC .........................................................................Error! Bookmark not defined.
I. Cài đặt hệ quản trị CSDL: MS SQL Server 2000 ..Error! Bookmark not defined.
II. Cài đặt Webserver : Apache Tomcat 5.0.25 .........Error! Bookmark not defined.
III. Cài đặt JMF : Java Media Framework ................Error! Bookmark not defined.
TÀI LIỆU THAM KHẢO...............................................Error! Bookmark not defined.
LLỜỜII MMỞỞ ĐĐẦẦUU Trong những năm gần đây với sự phát triển vượt bậc của công nghệ thông tin,
những ứng dụng của công nghệ thông tin vào các lãnh vực đã đóng vai trò to lớn cho
sự phát triển của nhân loại. Áp dụng quản lý bằng máy tính thay cho quản lý bằng tay
ở các tổ chức, công ty, cơ quan, đơn vị… là vô cùng cần thiết khi ở đó, sự nhanh
chóng, chính xác và tính hiệu quả được đặt lên hàng đầu.
Ở Thư viện trường Đại học Khoa Học Tự Nhiên, việc quản lý sinh viên sử dụng
phòng máy của thư viện từ trước đến nay đều chủ yếu thực hiện bằng tay, từ việc làm
thẻ, dán ảnh, đến nhập thông tin của sinh viên vào máy tính. Vì vậy, sẽ mất nhiều thời
gian cho việc quản lý và hiệu quả không cao. Do đó, mục tiêu của đề tài là xây dựng
chương trình quản lý sinh viên sử dụng phòng máy và tạo thẻ dựa trên mã vạch, qua
đó tăng độ chính xác và giảm thiểu sai sót.
Chương trình quản lý sinh viên sử dụng phòng máy là một bộ công cụ hỗ trợ
quản lý phòng máy thư viện bao gồm: hệ thống Web cho phép sinh viên đăng kí trực
tuyến, hẹn ngày chụp hình trực tuyến, thủ thư quản lý sinh viên; công cụ tạo và in thẻ
phòng máy; công cụ quản lý sử dụng máy tính. Chương trình sử dụng Java là ngôn
ngữ mạnh theo hướng thuần đối tượng, mã nguồn mở để xây dựng các ứng dụng.
Chương trình chạy trên môi trường Window có giao diện thân thiện với người sử
dụng.
Do khả năng có hạn và thời gian không cho phép nên không tránh khỏi những sai
sót, rất mong sự góp ý của quý thầy cô và các bạn.
Một lần nữa xin chân thành cảm ơn tất cả quý Thầy, Cô và các bạn !
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 2
CCHHƯƯƠƠNNGG 11 –– KKHHÁÁII NNIIỆỆMM MMÃÃ VVẠẠCCHH
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 3
I. Mã vạch 1 chiều:
I.1. Thông tin về mã vạch 1 chiều:
I.1.1. Mã vạch 1 chiều là gì?
Mã vạch một chiều là một loại mã có dạng một hàng bao gồm những thanh và
khoảng trắng nằm xen kẽ nhau.
Bề dày của những thanh và khoảng trắng xác định nội dung thông tin mà người
sử dụng cần mã hoá.
Những thanh và khoảng trắng có thể theo phương ngang hoặc phương thẳng
đứng tùy vào từng nhu cầu sử dụng cụ thể.
Thông tin được mã hoá có thể là chữ, số, hay toàn bộ các kí tự trong bảng mã
ASCII.
Hình 1.1
I.1.2. Mã vạch chứa đựng thông tin gì?
Nội dung được chứa đựng trong mã vạch tuỳ thuộc vào người dùng muốn mã hoá
cái gì, nội dung đó có thể là mã số một mặt hàng, tên nhân viên, tên hàng hoá, ...
Đa số các mã vạch có một hàng gồm chữ và số ngay bên dưới mã vạch. Chúng ta
có thể dễ dàng đọc nội dung trong hàng này. Nó được sử dụng khi mã vạch vì một lý
do nào đó bị hư hại, không đọc được. Khi đó, hàng này sẽ đóng vai trò cung cấp lại nội
dung đã được mã hoá trong mã vạch.
Bản thân mã vạch một chiều không chứa đựng cơ sở dữ liệu. Khi mã được nhận
thông qua một máy quét, người sử dụng lấy thông tin bằng cách tương ứng mã nhận
được này vào một CSDL có sẵn, từ đó có được những nội dung cần biết.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 4
Hình 1.2
I.1.3. Cấu trúc của mã vạch 1 chiều:
Mỗi mã vạch bắt đầu bằng kí tự bắt đầu và kết thúc bằng kí tự kết thúc. Những kí
tự đặc biệt này giúp cho máy đọc có thể xác định được vị trí của mã vạch và quét từ
đầu đến cuối.
Mỗi mã vạch có thể có một kí tự kiểm tra ngay trước kí tự kết thúc. Kí tự kiểm tra
này được tính toán khi mã vạch được in ra dựa trên những kí tự trên mã vạch. Máy đọc
thực hiện tính toán kí tự kiểm tra và so sánh kết quả tính được với kí tự kiểm tra đọc
được ở cuối mã vạch. Nếu hai kết quả này không giống nhau, máy đọc sẽ cho rằng có
cái gì đó sai sót, nó sẽ thoát ra và thử thực hiện lại một lần nữa.
Nhằm nâng cao sự chính xác trong việc đọc mã vạch, có một vùng trống tại nơi
bắt đầu và kết thúc của mã vạch gọi là Quiet Zone. Vùng trống này giúp cho máy đọc
mã vạch có thể xác định chính xác vị trí của kí tự bắt đầu và kết thúc của mã vạch.
Thông thường, độ rộng của vùng Quiet Zone phải gấp 10 lần chiều rộng của thanh
hẹp nhất.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 5
Hình 1.3
I.1.4. Tập kí tự:
Tập kí tự tuỳ thuộc vào loại dữ liệu mà mã vạch có thể mã hóa. Thông thường, có
3 loại tập kí tự: số, chữ cái và số, và tất cả các kí tự trong bảng mã ASCII.
Một mã vạch có tập kí tự số có nghĩa là mã vạch đó chỉ có thể mã hóa dữ liệu số
từ 0 đến 9. Một số kí tự bổ sung có thể được mã hóa bình thường là những kí tự điều
khiển của mã vạch, ví dụ như là kí tự bắt đầu, kết thúc.
Một mã vạch có tập kí tự gồm chữ cái và số có nghĩa là mã vạch đó có thể mã hóa
các số từ 0 đến 9 và chữ cái từ A đến Z. Thêm vào đó, một số kí tự bổ sung có thể
được mã hóa, ví dụ như là kí tự bắt đầu, kết thúc.
Một mã vạch có tập kí tự bao gồm tất cả những kí tự trong bảng mã ASCII cho
phép mã hóa tất cả các kí tự trong bảng mã ASCII. Nó bao gồm tất cả các kí tự trong
bảng mã ASCII, có giá trị từ 0 đến 127 và có thể được mã hóa bởi mã vạch.
Trên lý thuyết, để mã hoá cùng một dữ liệu như nhau, mã vạch dùng tập kí tự số
sẽ sử dụng nhiều không gian vật lý hơn so với mã vạch dùng tập kí tự bao gồm tất cả
các kí tự trong bảng mã ASCII. Tuy nhiên, mã vạch có tập kí tự bao gồm tất cả các kí
tự trong bảng mã ASCII cho phép bạn linh động trong việc mã hóa nhiều dạng thông
tin hơn so với mã vạch dùng tập kí tự số.
I.1.5. Gián đoạn, liên tục:
Thông thường có hai loại mã vạch: gián đoạn và liên tục.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 6
Mã vạch gián đoạn là dạng mã vạch mà mỗi kí tự được mã hóa trong mã vạch có
thể được biểu diển riêng lẻ mà không có mối liên hệ nào đến phần còn lại trong mã
vạch. Những mã vạch như vậy có những kí tự ở cả đầu và cuối của mã vạch. Những kí
tự riêng lẻ được tách biệt bởi một số khoảng trắng giữa các kí tự. Khoảng trắng giữa
những kí tự không chứa đựng thông tin gì cả, chức năng duy nhất của nó là tách biệt
những kí tự ra.
Hình 1.4 Mã vạch liên tục là một dạng mã vạch mà mỗi kí tự riêng lẻ của mã vạch không
thể được tách biệt. Thực tế là do những kí tự bắt đầu bằng một thanh và kết thúc bằng
một khoảng trắng. Khoảng trắng cuối cùng được kết thúc bởi thanh bắt đầu của kí tự
tiếp theo. Do đó, không có cách nào để có thể biết được khoảng trắng cuối cùng rộng
bao nhiêu và cũng không thể biết được kí tự tiếp theo bắt đầu ở đâu. Những mã vạch
liên tục thông thường sử dụng một vài loại thanh kết thúc đặc biệt hay chuỗi kết thúc,
do đó khoảng trắng cuối cùng của kí tự dữ liệu cuối cùng được kết thúc bởi thanh kết
thúc.
Hình 1.5 Trong ví dụ trên, mỗi kí tự bao gồm 4 thanh và 4 khoảng trắng. Khoảng trắng
cuối cùng của kí tự 1 được kết thúc bởi thanh đầu tiên của kí tự 2. Khoảng trắng cuối
cùng của kí tự 2 được kết thúc bởi thanh đầu tiên của kí tự 3. Khoảng trắng cuối cùng
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 7
của kí tự 3 được kết thúc bởi thanh đầu tiên của kí tự 4. Khoảng trắng cuối cùng của kí
tự 4 được kết thúc bởi thanh kết thúc.
Với cùng một dữ liệu cần mã hoá như nhau, mã vạch gián đoạn cần sử dụng
nhiều không gian hơn so với mã vạch liên tục do mã vạch gián đoạn tốn không gian
cho khoảng trắng giữa các kí tự. Tuy nhiên, mã vạch gián đoạn thông thường có thể
được in ra với chất lượng kém- điều này đồng nghĩa với việc có thể sử dụng máy in rẻ.
Ngoài số lượng khoảng trắng mà hai loại mã vạch yêu cầu, cũng như loại và chất
lượng của phần cứng được sử dụng để in nó, không có sự khác biệt tự nhiên nào trong
vấn đề an toàn. Điều này có nghĩa là, không thể nói rằng mã vạch liên tục thì an toàn
hơn so với mã vạch gián đoạn hay ngược lại.
I.1.6. Mã vạch có độ dài cố định, thay đổi:
Mã vạch có thể có chiều dài cố định hay thay đổi.
Theo định nghĩa, mã vạch có chiều dài cố định mã hóa một số lượng kí tự xác
định. Ví dụ, mã vạch UPC-A thường mã hóa 12 kí tự. Một ứng dụng không thể mã hoá
ít hơn hay nhiều hơn chiều dài được quy định trước là 12 kí tự. Bản thân mã vạch xác
định chiều dài dữ liệu.
Mã vạch có chiều dài thay đổi có thể mã hoá một số lượng kí tự bất kì. Ví dụ,
Code128 có thể mã hóa một số lượng kí tự bất kì. Bản thân mã vạch không xác định cụ
thể bao nhiêu kí tự dữ liệu có thể được mã hoá.
Chú ý rằng, tuỳ thuộc vào hiệu quả sử dụng, mã vạch có chiều dài thay đổi cũng
có thể được sử dụng như mã vạch có chiều dài cố định. Ví dụ, nếu chúng ta sử dụng
Code 128 để mã hoá một số nhận dạng có chiều dài luôn là 10 thì có nghĩa là chúng ta
đã sử dụng Code 128 như thể nó là mã vạch có chiều dài cố định.
I.1.7. Mã vạch tự kiểm tra:
Mã vạch được xem như “tự kiểm tra” nếu có một lỗi in hay quét thì mã vạch sẽ
không cho phép đọc một kí tự trong mã vạch thành một kí tự hợp lệ khác.
Chú ý rằng “tự kiểm tra” không có nghĩa là tự sửa lỗi.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 8
I.2. Ứng dụng:
Trong thực tế, chúng ta bắt gặp việc sử dụng mã vạch tại một số siêu thị trên cả
nước giúp tăng hiệu quả bán hàng, giúp cho việc phục vụ khách hàng một cách nhanh
chóng và hiệu quả. Trên mỗi mặt hàng đều có một mã vạch tương ứng, khi khách hàng
đem đến quầy tính tiền, nhân viên chỉ cần quét qua máy đọc mã vạch tất cả các mặt
hàng, từ đó máy tính sẽ cho biết tổng số tiền khách hàng phải trả. Điều này giúp giảm
thiểu sự sai sót trong tính toán và nâng cao khả năng phục vụ cho khách hàng.
Ứng dụng trong những quy trình kinh doanh, những quy trình cần được tự động
tăng năng suất và giảm thiểu sự sai lầm của con người.
Ứng dụng trong những sản phẩm xuất khẩu. Hiện nay, hầu hết những quốc gia
trên thế giới (hơn 80 quốc gia) đã đưa vào sử dụng mã vạch trên sản phẩm của họ. Nền
công nghiệp Việt Nam sẽ phải sử dụng mã vạch nếu muốn xuất khẩu sản phẩm của
mình ra nước ngoài.
Nói chung, mã vạch được ứng dụng khi có yêu cầu về sự nhận diện chính xác và
tốc độ nhận diện.
Tuỳ từng yêu cầu cụ thể của người sử dụng mà có các loại mã vạch tương ứng.
Lĩnh vực ứng dụng Mã vạch Những mặt hàng ở USA và Canada UPC/EAN Những mặt hàng trên toàn thế giới UPC/EAN Sách và tạp chí EAN-13 với UPC/EAN Những thùng carton được vận chuyển bằng tàu
Code 128
Những thùng carton được vận chuyển bằng tàu
Interleaved 2 of 5 hay Code 128
Những thùng carton được vận chuyển bằng tàu
Interleaved 2 of 5 hay Code 128
Những thùng carton được vận chuyển bằng tàu
Code 128
Số sêri trong việc xuất bản hàng loạt Code 128 Số sêri trong việc xuất bản hàng loạt Code 128 Địa chỉ thư trong các bưu điện ở Mỹ POSTNET Kiểm tra trong ngân hàng MICR E-13B hay CMC-7
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 9
I.3. Ưu khuyết điểm:
I.3.1. Ưu điểm:
Cải thiện hiệu quả thao tác. Tiết kiệm thời gian Giảm bớt việc mắc lỗi Giúp cho việc quản lý dễ dàng
I.3.2. Khuyết điểm:
Khuyết điểm chính của mã vạch một chiều đó là bản thân nó không thể chứa
đựng thông tin của cơ sở dữ liệu. Đây chính là điểm yếu của nó so với mã vạch hai
chiều.
I.4. Giới thiệu một số loại mã vạch:
I.4.1. EAN-13:
+ Cấu trúc mã EAN-13: Trong hệ thống mã số EAN cho sản phẩm bán lẻ có hai loại, một loại sử dụng 13 con số (EAN-13) và loại kia sử dụng 8 con số (EAN-8).
Hình 1.6
Mã số EAN-13 gồm 13 con số có cấu tạo như sau :
Từ trái sang phải Mã quốc gia: hai hoặc ba con số đầu. Mã doanh nghiệp: có thể là bốn, năm hoặc sáu con số Mã mặt hàng: có thể là năm, bốn hoặc ba con số tùy thuộc vào mã doanh nghiệp. Số cuối cùng là số kiểm tra.
Để đảm bảo tính thống nhất và tính đơn nhất của mã số, mã quốc gia phải do tổ
chức mã số vật phẩm quốc tế (EAN lnternational) cấp cho các qưốc gia là thành viên
của tổ chức này. Mã số quốc gia của Việt Nam là 893. Mã số EAN-8 gồm 8 con số có
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 10
cấu tạo như sau : ba số đầu là mã số quốc gia giống như EAN-13, bốn số sau là mã
mặt hàng, số cuối cùng là số kiểm tra.
00-13: USA & Canada 20-29: In-Store Functions 30-37: France 40-44: Germany 45: Japan (also 49) 46: Russian Federation 471: Taiwan 474: Estonia 475: Latvia 477: Lithuania 479: Sri Lanka 480: Philippines 482: Ukraine 484: Moldova 485: Armenia 486: Georgia 487: Kazakhstan 489: Hong Kong 49: Japan (JAN-13) 50: United Kingdom 520: Greece 528: Lebanon 529: Cyprus 531: Macedonia 535: Malta 539: Ireland 54: Belgium & Luxembourg 560: Portugal 569: Iceland 57: Denmark 590: Poland 594: Romania 599: Hungary 600 & 601: South Africa 609: Mauritius 611: Morocco 613: Algeria 619: Tunisia 622: Egypt 625: Jordan 626: Iran 64: Finland 690-692: China 70: Norway 729: Israel 73: Sweden 740: Guatemala 741: El Salvador 742: Honduras 743: Nicaragua 744: Costa Rica 746: Dominican Republic 750: Mexico 759: Venezuela 76: Switzerland 770: Colombia 773: Uruguay 775: Peru 777: Bolivia 779: Argentina 780: Chile 784: Paraguay 785: Peru 786: Ecuador 789: Brazil 80 - 83: Italy 84: Spain 850: Cuba 858: Slovakia 859: Czech Republic 860: Yugloslavia 869: Turkey 87: Netherlands 880: South Korea 885: Thailand 888: Singapore 890: India 893: Vietnam 899: Indonesia 90 & 91: Austria 93: Australia
94: New Zealand 955: Malaysia 977: International Standard Serial Number for Periodicals (ISSN)
978: International Standard Book Numbering (ISBN)
979: International Standard Music Number (ISMN) 980: Refund receipts
981 & 982: Common Currency Coupons 99: Coupons
Mã EAN-8 chỉ sử dụng trên những sản phẩm có kích thước nhỏ, không đủ chỗ ghi mã EAN-13 (ví dụ như thỏi son, bút bi) + Cách tính số kíểm tra cho mã EAN-13 và mã EAN-8 Bước 1 : Từ phải sang trái, cộng tất các con số ở vị trí lẻ (trừ số kiểm tra C); Bước 2: Nhân kết quả bước 1 với 3; Bước 3 : Cộng giá tri của các con số còn lại Bước 4 : Cộng kết quả bước 2 với bước 3;
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 11
Bước 5 : Lấy bội số của 10 lớn hơn và gần kết quả bước 4 nhất trừ đi kết quả bước 4, kết quả là số kiểm tra C. Ví dụ : Tính số kiểm tra cho mã 893456501001 C Bước 1 : 1 + 0 + + 0+ 6 + 4+ 9 - 20 Bước 2 : 20 x 3 = 60 . Bước 3 : 8 + 3 + 5 + 5 + 1 + 0 : 22 Bước 4 : 60 + 22 = 82 Bước 5 : 90 - 82 - 8 Mã EAN-13 hoàn chỉnh sẽ là : 893456501001 8 + Các điểm cần chú ý khi in mã EAN :
Không in chữ hay bất kỳ hình vẽ gì vào vùng diện tích xung quanh mã (đánh dấu
bằng khung đen trên film master): Màu lý tưởng để in mã vạch là màu đen trên nền
trắng. Có thể in một số màu nền và màu vạch khác để bao bì đẹp hơn ; khi đó phải
tuân thủ theo bảng các màu nền và màu vạch tiêu chuẩn do tổ chức EAN quốc gia
cung cấp; Mã vạch nên đặt ngang, các vạch vuông góc với mặt phẳng đáy sản phẩm,
mã số ở dưới .
I.4.2. Code 128:
+ Thông tin về Code 128: Code 128 là một loại mã vạch mã hoá dữ liệu chữ và số có hiệu quả sử dụng và
độ dày cao. Mã vạch này được ứng dụng rộng rãi, đặc biệt trong những trường hợp cần
mã hoá một lượng dữ liệu tương đối lớn trong một khoảng không gian tương đối hẹp.
Hình 1.7 + Tính toán số kiểm tra:
Trước khi Code 128 được mã hóa, phần mềm phải tính toán xem số kiểm tra trên mã vạch có đúng không. Những bước để tính toán số kiểm tra như sau:
1. Lấy giá trị của kí tự bắt đầu (103, 104, hay 105) và tạo giá trị bắt đầu của số kiểm tra.
2. Bắt đầu từ kí tự theo sau kí tự đầu tiên, lấy giá trị của kí tự (giữa 0 và 102), nhân nó với vị trí của kí tự (1) và thêm nó vào số kiểm tra đang sử dụng.
3. Xét từng kí tự trên dữ liệu, lấy giá trị của nó nhân với vị trí của nó và cộng vào giá trị số kiểm tra.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 12
4. Chia kết quả số kiểm tra cho 103. Số dư trở thành số kiểm tra, được thêm vào cuối của thông điệp.
5. Kí tự kết thúc được thêm vào sau kí tự kiểm tra.
Để dễ hiểu ta xem xét ví dụ sau. Tính giá trị của số kiểm tra cho mã vạch sau:
“HI345678”. Số kiểm tra có trong tất cả các mã vạch Code 128, nhưng nó không được
in như là một phần của phần văn bản phía dưới mã vạch (giống như UPC và EAN).
Mã vạch START-A H I CODE-C 34 56 78 Giá trị kí tự 103 40 41 99 34 56 78 Vị trí kí tự - 1 2 3 4 5 6 Tính 103 40 * 1 41 * 2 99 * 3 34 * 4 56 * 5 78 * 6Tổng khối lượng 103 40 82 297 136 280 468
Tính tổng số kiểm tra cho từng kí số, ta thu được:
103+40+82+297+136+280+468=1406.
Giá trị này được chia cho 103 (1406/ 103 = 13), phần dư là 67. Do vậy kí tự kiểm
tra là kí tự có giá trị 67.
+ Mã hoá mã vạch:
Tiếp tục với ví dụ trên, chúng ta sẽ mã hoá mã vạch Code 128 với dữ liệu
HI345678 và số kiểm tra 67 đã tính ở trên.
Chúng ta sẽ xem xét cách mã hoá mã vạch bằng cách xem số “1” đại diện cho
thanh và “0” đại diện cho khoảng trắng. Theo cách trên thì 1101 sẽ có 2 vạch (11), tiếp
theo là 1 khoảng trắng (0), cuối cùng là một thanh (1). Mã vạch sau cùng được biểu
diễn như sau:
Hình 1.8
+ Cấu trúc mã vạch Code 128: Code 128 gồm một vùng trống đầu, một trong ba kí tự bắt đầu, dữ liệu, số kiểm tra, kí tự kết thúc, và vùng trống.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 13
Để mã hoá giá trị trong mã vạch Code 128, đầu tiên chúng ta phải tính kí tự kiểm tra và phần dữ liệu của mã vạch, bao gồm cả số kiểm tra, sau đó chúng ta mới có thể mã hóa chúng thành một dãy gồm những thanh và khoảng trắng.
Một mã vạch Code 128 có cấu trúc vật lý như sau:
1. Mã đầu tiên, là mã 103, 104, hay 105 lấy từ bảng mã hóa bên dưới. 2. Mỗi kí tự dữ liệu được mã hóa dựa theo bảng mã hóa bên dưới. 3. Kí tự kiểm tra được tính như được đề cập ở trên và được mã hóa sử
dụng bảng bên dưới. 4. Kí tự kết thúc 11000111010 5. Vạch chấm dứt 11
+ Bảng mã hóa Code 128
THỂ HIỆN TRONG TẬP
KÍ TỰ
THỂ HIỆN TRONG TẬP
KÍ TỰ GIÁ TRỊ A B C MÃ HÓA
GIÁ TRỊ A B C MÃ HÓA
00 SP SP 00 11011001100 53 U U 53 11011101110 01 ! ! 01 11001101100 54 V V 54 11101011000 02 " " 02 11001100110 55 W W 55 11101000110 03 # # 03 10010011000 56 X X 56 11100010110 04 $ $ 04 10010001100 57 Y Y 57 11101101000 05 % % 05 10001001100 58 Z Z 58 11101100010 06 & & 06 10011001000 59 [ [ 59 11100011010 07 ' ' 07 10011000100 60 \ \ 60 11101111010 08 ( ( 08 10001100100 61 ] ] 61 11001000010 09 ) ) 09 11001001000 62 ^ ^ 62 11110001010 10 * * 10 11001000100 63 _ _ 63 10100110000 11 + + 11 11000100100 64 NUL ` 64 10100001100 12 , , 12 10110011100 65 SOH a 65 10010110000 13 - - 13 10011011100 66 STX b 66 10010000110 14 . . 14 10011001110 67 ETX c 67 10000101100 15 / / 15 10111001100 68 EOT d 68 10000100110 16 0 0 16 10011101100 69 ENQ e 69 10110010000 17 1 1 17 10011100110 70 ACK f 70 10110000100 18 2 2 18 11001110010 71 BEL g 71 10011010000 19 3 3 19 11001011100 72 BS h 72 10011000010 20 4 4 20 11001001110 73 HT I 73 10000110100 21 5 5 21 11011100100 74 LF j 74 10000110010
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 14
22 6 6 22 11001110100 75 VT k 75 11000010010 23 7 7 23 11101101110 76 FF l 76 11001010000 24 8 8 24 11101001100 77 CR m 77 11110111010 25 9 9 25 11100101100 78 SO n 78 11000010100 26 : : 26 11100100110 79 SI o 79 10001111010 27 ; ; 27 11101100100 80 DLE p 80 10100111100 28 < < 28 11100110100 81 DC1 q 81 10010111100 29 = = 29 11100110010 82 DC2 r 82 10010011110 30 > > 30 11011011000 83 DC3 s 83 10111100100 31 ? ? 31 11011000110 84 DC4 t 84 10011110100
32 @ @ 32 11000110110 85 NAK u 85 10011110010
33 A A 33 10100011000 86 SYN v 86 11110100100 34 B B 34 10001011000 87 ETB w 87 11110010100 35 C C 35 10001000110 88 CAN x 88 11110010010 36 D D 36 10110001000 89 EM y 89 11011011110 37 E E 37 10001101000 90 SUB z 90 11011110110 38 F F 38 10001100010 91 ESC { 91 11110110110 39 G G 39 11010001000 92 FS | 92 10101111000 40 H H 40 11000101000 93 GS } 93 10100011110 41 I I 41 11000100010 94 RS ~ 94 10001011110 42 J J 42 10110111000 95 US DEL 95 10111101000 43 K K 43 10110001110 96 FNC3 FNC3 96 10111100010 44 L L 44 10001101110 97 FNC2 FNC2 97 11110101000 45 M M 45 10111011000 98 SHIFT SHIFT 98 11110100010 46 N N 46 10111000110 99 Code C Code C 99 10111011110 47 O O 47 10001110110 100 Code B FNC4 Code B 10111101110 48 P P 48 11101110110 101 FNC4 Code A Code A 11101011110 49 Q Q 49 11010001110 102 FNC1 FNC1 FNC1 11110101110 50 R R 50 11000101110 103 Start A Start A Start A 11010000100 51 S S 51 11011101000 104 Start B Start B Start B 11010010000 52 T T 52 11011100010 105 Start C Start C Start C 11010011100 STOP STOP STOP 11000111010
+ Ví dụ mã hóa: Xét ví dụ sau, mã hoá HI345678 trên mã vạch Code 128. Theo cách tính số kiểm tra như phần trên, chúng ta thu được số kiểm tra đối với trường hợp này là 67. Chúng ta mã hóa từng kí tự sử dụng bảng mã hóa trên:
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 15
1. Kí tự START-A: 11010000100. 2. Kí tự “H”: 11000101000. 3. Kí tự “I”: 11000100010. 4. Kí tự “CODE-C”: 10111011110. 5. Kí tự “34”: 10001011000. 6. Kí tự “56”: 11100010110. 7. Kí tự “78”: 11000010100. 8. Số kiểm tra 67: 10000101100. 9. Kí tự STOP: 11000111010. 10. Thanh chấm dứt: 11.
Hình 1.9
I.4.3. Code 39:
+ Thông tin về Code 39: Code 39 là loại mã vạch chữ và số đầu tiên được phát triển, hiện nay vẫn còn được sử dụng rộng rãi, đặc biệt là trong việc bán sỉ hàng hoá. Nó là một chuẩn mã vạch được sử dụng bởi Bộ Quốc Phòng Mỹ. Code 39 cũng được biết với tên “3 of 9 Code” hay “USD-3”.
Một mã vạch Code 39 có dạng như sau:
Hình 1.10
Code 39 thuộc dạng mã vạch gián đoạn, có chiều dài thay đổi. Nó có thể tự kiểm tra vì vậy một kí tự in sai không thể được đọc và chuyển thành một kí tự đúng được.
+ Tính số kiểm tra: Vì Code 39 có khả năng tự kiểm tra nên thông thường số kiểm tra không còn cần thiết nữa. Tuy nhiên, trong những trường hợp cần đòi hỏi độ chính xác cao thì có thể thêm số kiểm tra vào.
Để tính số kiểm tra tự chọn, ta theo những bước sau:
1. Lấy giá trị (0 đến 42) của từng kí tự trong mã vạch. Những kí tự bắt đầu và kết thúc không được tính trong quá trình tính số kiểm tra.
2. Tính tổng những giá trị trong bước 1. 3. Chia giá trị trong bước 2 cho 43
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 16
4. Phần dư trong pháp chia ở bước 3 là kí tự kiểm tra, được thêm vào trước kí tự kết thúc.
+ Mã hoá mã vạch: Trong phần này, chúng ta sẽ xem xét cách mã hoá mã vạch bằng cách xem như
“1” đại diện cho thanh, “0” đại diện cho khoảng trắng trên mã vạch. Vì vậy số 1101
biểu diễn mã vạch gồm 2 thanh (11), tiếp theo là một khoảng trắng (0), tiếp theo là một
thanh (1). Cuối cùng ta có mã vạch như sau:
Hình 1.11 + Cấu trúc mã vạch Code 39: Mã vạch Code 39 có cấu trúc sau:
1. Kí tự bắt đầu- kí tự * 2. Những kí tự được mã hoá dựa trên bảng 3. Số kiểm tra tuỳ chọn như đã đề cập ở trên được mã hóa từ bảng bên
dưới. 4. Kí tự kết thúc là kí tự * thứ hai.
+ Bảng mã hoá:
Giá trị kiểm tra
Kí tự ASCII Mã hóa độ rộng Mã hóa mã
vạch
0 0 NNNWWNWNN 101001101101 1 1 WNNWNNNNW 110100101011 2 2 NNWWNNNNW 101100101011 3 3 WNWWNNNNN 110110010101 4 4 NNNWWNNNW 101001101011 5 5 WNNWWNNNN 110100110101 6 6 NNWWWNNNN 101100110101 7 7 NNNWNNWNW 101001011011 8 8 WNNWNNWNN 110100101101 9 9 NNWWNNWNN 101100101101 10 A NNWWNNWNN 110101001011 11 B NNWNNWNNW 101101001011
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 17
12 C WNWNNWNNN 110110100101 13 D NNNNWWNNW 101011001011 14 E WNNNWWNNN 110101100101 15 F NNWNWWNNN 101101100101 16 G NNNNNWWNW 101010011011 17 H WNNNNWWNN 110101001101 18 I NNWNNWWNN 101101001101 19 J NNNNWWWNN 101011001101 20 K WNNNNNNWW 110101010011 21 L NNWNNNNWW 101101010011 22 M WNWNNNNWN 110110101001 23 N NNNNWNNWW 101011010011 24 O WNNNWNNWN 110101101001 25 P NNWNWNNWN 101101101001 26 Q NNNNNNWWW 101010110011 27 R WNNNNNWWN 110101011001 28 S NNWNNNWWN 101101011001 29 T NNNNWNWWN 101011011001 30 U WWNNNNNNW 110010101011 31 V NWWNNNNNW 100110101011 32 W WWWNNNNNN 110011010101 33 X NWNNWNNNW 100101101011 34 Y WWNNWNNNN 110010110101 35 Z NWWNWNNNN 100110110101 36 - NWNNNNWNW 100101011011 37 . WWNNNNWNN 110010101101 38 SPACE NWWNNNWNN 100110101101 39 $ NWNWNWNNN 100100100101 40 / NWNWNNNWN 100100101001 41 + NWNNNWNWN 100101001001 42 % NNNWNWNWN 101001001001 n/a * NWNNWNWNN 100101101101
+ Ví dụ mã hoá:
Chúng ta sẽ mã hóa dữ liệu TEST8052 sử dụng mã vạch Code 39. Trong trường
hợp này chúng ta không sử dụng số kiểm tra.
1. Kí tự bắt đầu (*): 100101101101. 2. Kí tự “T”: 101011011001. 3. Kí tự “E”: 110101100101. 4. Kí tự “S”: 101101011001. 5. Kí tự “T”: 101011011001.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 18
6. Kí tự “8”: 110100101101. 7. Kí tự “0”: 101001101101. 8. Kí tự “5”: 110100110101. 9. Kí tự “2”: 101100101011. 10. Kí tự kết thúc: 100101101101.
Hình 1.12
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 19
I.5. So sánh giữa các loại mã vạch:
Dạng mã vạch Tập kí tự Chiều dài Số kiểm tra Ứng dụng
EAN-13 Toàn số
12 con số dữ liệu và 1 con số kiểm tra; 2 hoặc 5 con số thêm vào tuỳ ý
Cần thiết Đánh dấu hàng hoá bán lẻ toàn thế giới
EAN Bookland Toàn số Cần thíết Ứng dụng đặc biệt của EAN-13 trong việc mã hoá IBSN cho sách
Interleaved 2 of 5 Toàn số Có thể thay đổi Không bắt buộc Rất dày đặc, mã hoá số theo từng cặp do đó chiều dài tổng cộng phải là số chẵn những con số.
Codabar (USD-4, NW-7, 2 of 7)
Số: 0-9; Kí hiệu: - : . $ / + Kí tự bắt đầu, kết thúc: A, B, C, D, E, *, N, or T
Có thể thay đổi Không định rõ Một loại mã cũ, thường được sử dụng trong thư viện và trong ngân hàng máu.
Plessey Toàn số Có thể thay đổi Cần thiết Những thẻ trên kệ các cửa hàng tạp hoá
Code 39 Kí tự hoa A-Z; Số 0-9; Khoảng trắng - . $ / + % Có thể thay đổi Không bắt buộc Sử dụng rất rộng rãi cho rất nhiều loại
ứng dụng.
Code 93 Kí tự hoa A-Z; Số 0-9; Khoảng trắng - . $ / + % Có thể thay đổi Không bắt buộc Họ hàng của Code 39 ít được sử dụng
Intended Code 39 Tất cả kí tự mã ASCII và mã điều khiển Có thể thay đổi Không bắt buộc Sử dụng từng cặp kí tự để mã hoá những kí hiệu không chuẩn, lãng phí không gian.
Code 128 Tất cả kí tự mã ASCII và mã điều khiển Có thể thay đổi Cần thiết Được sử dụng rộng rãi, tuyệt vời với một số ứng dụng
LOGMARS Kí tự hoa A-Z; Số 0-9; Khoảng trắng - . $ / + % Có thể thay đổi Không bắt buộc Tương tự như Code 39, nhưng là chuẩn
của Mỹ.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 20
II. Mã vạch 2 chiều:
II.1. Thông tin về mã vạch 2 chiều:
II.1.1. Mã vạch 2 chiều là gì?
Trong những năm gần đây, việc ứng dụng mã vạch được phát triển rất mạnh trong
nhiều lĩnh vực. Mã vạch 1 chiều là loại thường được sử dụng nhiều vì tính phổ biến và
đơn giản của nó. Đối với loại mã vạch này thì chiều cao của chúng không được tính
đến (dư thừa), điều đó có nghĩa là thông tin được lặp lại trên chiều thắng đứng. Và
chiều cao của các vạch có thể bị cắt bỏ mà không hề làm mất đi bất cứ một thông tin
nào mà nó biểu diễn.
Mã vạch 2 chiều là loại mã vạch mà thông tin có thể được biểu diễn và lưu trữ
theo cả các vạch theo chiều ngang lẫn các vạch theo chiều dọc, tận dụng được nhiều
không gian hơn.
Mã vạch 2 chiều được phát triển nhằm thay thế dần mã vạch 1 chiều truyền thống
không những về khả năng chứa được nhiều dữ liệu hơn, xử lí nhanh hơn mà nó còn
được phát triển như là một cơ sở dữ liệu thu nhỏ, di động được (Portable database)
II.1.2. Mã vạch 2 chiều chứa đựng thông tin gì?
Tương tự như mã vạch một chiều, nội dung được chứa đựng trong mã vạch 2
chiều cũng tuỳ thuộc vào người dùng muốn mã hoá cái gì, nội dung đó có thể là mã số
một mặt hàng, tên nhân viên, tên hàng hoá, ...
Tuy nhiên nếu như mã vạch 1 chiều chỉ chứa giá trị là khóa chính trong các bảng
của một cơ sở dữ liệu, thì những thông tin mà mã vạch 2 chiều biểu diễn và lưu trữ
được, có thể là một record, một bảng, thậm chí một cơ sở dữ liệu đầy đủ
II.1.3. Cấu trúc của mã vạch 2 chiều:
Khác với mã vạch một chiều, mã vạch 2 chiều có cấu trúc đặc trưng phụ thuộc
vào loại mã vạch 2 chiều đó là loại nào.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 21
Mã vạch 2 chiều được phát triển bởi nhiều công ty, tổ chức cũng các cá nhân
khác nhau. Vì vậy trên phạm vi toàn thế giới, mã vạch 2 chiều có rất nhiều loại khác
nhau tùy theo nhu cầu và mục đích sử dụng chúng.
Hiện nay thị trường đang tồn tại khoảng trên 20 loại mã vạch 2 chiều và được
chia thành 2 nhóm chính sau đây
Mã vạch 2 chiều dạng stacked code
Mã vạch 2 chiều dạng matrix code
II.2. Ứng dụng trong thực tế:
Những lĩnh vực sau đây đã và đang ứng dụng mã vạch 2 chiều một cách thành
công, tích cực cũng như hiệu quả
Cơ quan chính phủ / bưu điện
Chăm sóc sức khoẻ
Hậu cần quân sự
Chế tạo, sản xuất
Phân phối bán lẻ
II.3. Ưu khuyết điểm:
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 22
II.3.1. Ưu điểm:
Hình 1.13
Mã vạch 2 chiều có khả năng chứa đựng, mã hóa thông tin nhiều hơn hẳn so với
mã vạch một chiều. Ngoài ra mã vạch 2 chiều còn có độ chính xác cao hơn.
II.3.2. Khuyết điểm:
Tuy nhiên chi phí đầu tư ban đầu cho các loại thiết bị đầu cuối dùng cho mã vạch
2 chiều tốn kém hơn so với mã vạch một chiều
II.4. Giới thiệu một số loại mã vạch:
II.4.1. PDF417:
PDF417 là loại mã vạch 2 chiều dạng
stacked code, có thể mã hóa bất kỳ chữ cái, số,
hoặc kí tự nào trong thực tế.
Mỗi kí tự bao gồm 4 vạch và 4 khoảng
trống trong một cấu trúc có 17 phần. Tên loại Hình 1.14
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 23
mã vạch này được đặt xuất phát từ định dạng mã của nó. PDF được viết tắt từ chữ
"Portable Data File“
Mỗi ký hiệu PDF417 có từ 3 đến 90 dòng stack được bao quanh bởi một vùng
tĩnh trên tất cả bốn cạnh.
Mỗi dòng bao gồm : một vùng tĩnh leading, mẫu bắt đầu , kí tự chỉ định dòng bên
trái, từ một đến ba mươi kí tự chứa dữ liệu, kí tự chỉ định dòng bên phải, mẫu kết thúc,
và một vùng tĩnh trailing
PDF417 hỗ trợ việc nén văn bản, nén số, và nén byte theo cơ chế tương quan ánh
xạ giữa những giá trị codeword và dữ liệu được giải mã .
Ngoài ra, PDF417 có thể hỗ trợ lên tới 340 kí tự trên một inch vuông, với khả
năng lưu trữ dữ liệu cực đại là 1850 kí tự dạng văn bản.
II.4.2. Data Matrix:
Data Matrix là loại mã vạch 2 chiều dạng matrix
code, có khả năng mã hóa tất cả 128 kí tự của bảng mã
ASCII và một số tập hợp kí tự khác nhau .
Mỗi ký hiệu Data Matrix gồm có : một vùng tĩnh
perimeter xung quanh, tiếp giáp với hai đường viền liên
tục và hai đường viền đứt quãng, và những ô bên trong các
đường này có thể có màu sáng hay màu tối.
2 đường viền liên tục cùng với những ô dữ liệu được sử dụng để nhận dạng ký
hiệu, việc định hướng và định vị các ô.
Data Matrix có khả năng lưu trữ lên đến 500 MB dữ liệu trên mỗi inches vuông,
hay từ 1 đến 2335 kí tự .
Data Matrix là loại mã vạch được thiết kế giảm đến mức tối đa sự dư thừa, tận
dụng không gian để biểu diễn thông tin và khắc phục tương đối hoàn hảo những
khuyết điểm khi in.
Hình 1.15
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 24
II.4.3. Maxi Code:
Maxi Code là loại mã vạch 2 chiều matrix code,
thường được sử dụng bởi United Pacel Service, dùng để
sắp xếp và phân loại các thư từ khi chuyển phát nhanh
Maxi Code được phát triển để có thể đọc và quét
được bằng các scanner ở tốc độ cao và theo bất kì phương
hướng nào.
Maxi Code là loại mã vạch có kích thước cố định bao gồm 866 lục giác được xếp
vào 33 dòng, xung quanh finder pattern nằm ở giữa.
Kích thước của một ký hiệu Maxi Code từ 1,05 cho đến 1,1 inch.
Một ký hiệu Maxi Code đơn có thể mã hóa lên đến 93 kí tự dữ liệu và sử dụng 5
phương thức khác nhau để có thể mã hóa được 256 kí tự của bảng mã ASCII.
MaxiCode sử dụng ba thuộc tính đặc trưng duy nhất khi mã hóa dữ liệu : Loại dịch vụ,
Mã quốc gia, và Mode
II.5. So sánh giữa các loại mã vạch:
Loại mã vạch Độ chính xác thấp nhất Độ chính xác cao nhất
Data Matrix 1 lỗi trên 10,5 triệu 1 lỗi trên 612,9 triệu
PDF 417 1 lỗi trên 10,5 triệu 1 lỗi trên 612,4 triệu
Code 129 1 lỗi trên 2,8 triệu 1 lỗi trên 37 triệu
Code 39 1 lỗi trên 1,7 triệu 1 lỗi trên 4,5 triệu
UPC 1 lỗi trên 349.000 1 lỗi trên 800.000
Hình 1.16
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 25
II.6. Mã vạch PDF417:
II.6.1. Mã hóa mã vạch PDF417:
Hình 1.17
Công việc mã hóa dữ liệu sang mã vạch PDF417 bao gồm 2 bước xử lí :
Đầu tiên, dữ liệu được chuyển đổi ra các giá trị codeword từ 0 – 928, đại diện
cho dữ liệu. Đây là quá trình mã hóa ở mức cao ( high level )
Sau đó, các giá trị này được biểu diễn một cách vật lí bằng những mẫu bao gồm
các vạch và khoảng trống xen kẽ lẫn nhau. Đây chính là quá trình mã hóa ở
mức thấp ( low level )
Và công việc giải mã bao gồm 2 bước xử lí ngược lại
II.6.1.1. Mã hóa mức cao:
PDF417 mã hóa các giá trị tùy theo cluster. Những mẫu bao gồm các vạch và
khoảng trống của mỗi codeword không những phụ thuộc vào giá trị được mã hóa mà
còn phụ thuộc vào cluster được sử dụng bởi dòng đó
Toàn bộ 929 codeword của mã vạch PDF417 được biểu diễn bằng 3 tập hợp kí
hiệu loại trừ lẫn nhau, hay còn được gọi là cluster. Mỗi cluster mã hóa 929 codeword
thành những pattern khác nhau vì vậy một cluster thì luôn phân biệt với cluster khác.
Giá trị của cluster bao gồm : 0, 3, 6
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 26
Khái niệm cluster được áp dụng cho tất cả kí hiệu của PDF417 ngoại trừ kí hiệu
bắt đầu và kết thúc
Mỗi dòng chỉ sử dụng duy nhất 1 trong 3 cluster (0, 3 hoặc 6) để mã hóa dữ liệu,
với sự lặp lại một cluster sau mỗi 3 dòng
Tóm lại điều cần biết đầu tiên khi muốn mã hóa bất kì codeword nào là phải biết
được giá trị cluster của nó
VD : Dòng 0 các codeword sử dụng cluster 0 Dòng 1 các codeword sử dụng cluster 3 Dòng 2 các codeword sử dụng cluster 6
Một cách tổng quát : cluster = (dòng mod 3) * 3
Mã hóa mức cao chuyển dữ liệu thành các codeword tương ứng. Và cơ chế nén
dữ liệu được sử dụng nhằm tăng cường khả năng lưu trữ dữ liệu khi mã hóa. Tùy theo
kiểu dữ liệu mà PDF417 có những cách mã hóa dữ liệu khác nhau
Mode là một phương thức nén dữ liệu đơn giản. Một kí hiệu PDF417 khi cần thiết
có khả năng chuyển đổi giữa những mode khác nhau
Mã vạch PDF417 hỗ trợ 3 mode cho việc mã hóa dữ liệu
Text Compaction mode
Byte Compaction mode
Numeric Compaction mode
Mỗi mode định nghĩa một ánh xạ xác định giữa dữ liệu người dùng và trình tự
codeword một cách hiệu quả. Trong một ứng dụng cụ thể thì mode tối ưu được lựa
chọn có thể là sự kết hợp cả 3 mode trên.
Trong mỗi mode thì 900 codeword được dùng để mã hóa dữ liệu. 29 codeword
còn lại được sử dụng cho các chức năng đặc biệt, và độc lập với mode nén dữ liệu
đang được sử dụng.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 27
Codeword từ 900 đến 928 có những chức năng sau đây
Chuyển đổi giữa các mode
Ứng dụng sử dụng Extended Channel Interpretation
Các ứng dụng mở rộng khác
II.6.1.1.1. Mã hóa mức cao – Text Compaction Mode
Text Compaction Mode mã hóa được tất cả kí tự ASCII có thể in được, có giá trị
từ 32 đến 126. Text Compaction Mode hỗ trợ 4 sub-mode :
Alpha ( các kí tự hoa ) Lower ( các kí tự thường ) Mixed ( kí tự số và một số dấu câu) Punctuation Mỗi sub-mode có tối đa 30 kí tự, bao gồm kí tự sub-mode latch và shift
Chế độ nén mặc nhiên của mã vạch PDF417 là Text Compaction Mode Alpha
sub-mode. Và latch codeword khi đổi từ mode khác sang Text Compaction Mode luôn
luôn chuyển thành Text Compaction Alpha sub-mode
II.6.1.1.2. Mã hóa mức cao – Byte Compaction Mode
Byte Compaction Mode cho phép mã hóa tất cả 256 giá trị byte 8-bit, bao gồm
các kí tự ASCII có mã từ 0 đến 127, đồng thời hỗ trợ tập hợp kí tự quốc tế. Byte
Compaction Mode mã hóa khoảng 1.2byte/codeword
Nếu xét khía cạnh mã hóa dữ liệu mạnh thì Byte Compaction Mode chính là một
lựa chọn tốt, ngược lại nó sẽ là Mode cho hiệu quả ít nhất khi xét về hiệu quả khi in
mã vạch
Mã hóa dữ liệu nhị phân sử dụng latch 901 hoặc 924, yêu cầu phải chuyển đổi dữ
liệu từ base 256 sang base 900
Quá trình mã hóa bằng latch codeword 924, lấy một lần 6 số hay giá trị chuyển
chúng thành 5 codeword base 900. Quá trình này được tiếp tục cho đến khi tất cả số và
giá trị đã được mã hóa hết
Nếu tổng các chữ số không phải bội của 6 thì ta sử dụng latch codeword 901. Khi
đó đối với các chữ số còn lại, ta lấy 1 chữ số là 1 codeword
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 28
Thuật toán chuyển đổi từ base 256 sang base 900
n = tổng số các codeword ( trong trường hợp này là 5 ) t = biến tạm t = d5*2565 + d4*2564 + d3*2563 + d2*2562 + d1*2561 + d0*2560 Sau đó ta tính mỗi codeword như sau : For : mỗi codeword ci = c0 … cn-1 Begin ci = t mod 900 t = t div 900 End Trong đó ci = codeword n
Chú ý: khi kết quả là số âm trong trường hợp -29160 mod 929 = -361, ta lấy 929
– 361 = 568
Ví dụ: mã hóa dãy số {1,2,3,4,5,6}
t = 1*2565 + 2*2564 + 3*2563 + 4*2562 + 5*2561 + 6*2560 = 1108152157446 Tính codeword 0 c0 = 1108152157446 mod 900 = 846 t = 1108152157446 div 900 = 1231280174 Tính codeword 1 c1 = 1231280174 mod 900 = 74 t = 1231280174 div 900 = 1368089 Tính codeword 2 c2 = 1368089 mod 900 = 89 t = 1368089 div 900 = 1520 Tính codeword 3 c3 = 1520 mod 900 = 620 t = 1520 div 900 = 1 Tính codeword 4 (codeword cuối cùng) c4 = 1 mod 900 = 1 t = 1 div 900 = 0
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 29
Kết quả cuối cùng, ta có trình tự các codeword sau khi mã hóa dãy số {1,2,3,4,5,6} là 924, 1, 620, 89, 74, 846 Ví dụ: Mã hóa dãy số {1,2,3,4,5,6,7,8,4}
Vì tống các chữ số cần mã hóa không phải bội của 6 nên ta sử dụng latch
codeword 901.
Do đó trình tự các codedword kết quả là 901, 1, 620, 89, 74, 846, 7, 8, 4
II.6.1.1.3. Mã hóa mức cao – Numeric Compaction Mode
Numeric Compaction Mode là một phương thức nén dữ liệu chuyển đổi từ base
10 sang base 900, thường được sử dụng để mã hóa các chuỗi chữ số dài liên tiếp.
Numeric Compaction Mode có khả năng mã hóa khoảng 2.93 chữ số numeric
/codeword.
Numeric Compaction Mode sử dụng latch codeword 901
Qui luật mã hóa các chuỗi chữ số dài liên tiếp có 2 bước
Chia chuỗi số thành các nhóm gồm 4 chữ số. Nhóm cuối cùng có thể có ít hơn 4 chữ số
Với mỗi nhóm ta thêm chữ số 1 vào vị trí thích hợp để hạn chế sự mất dữ liệu do chữ số 0 đứng đầu
Ví dụ: dữ liệu ban đầu : 00246812345678
sau 2 bước trên : 100 2468 1234 5678
Chú ý: số 1 ở đầu sẽ được bỏ trong thuật toán giải mã
Thuật toán chuyển đổi từ base 10 sang base 900
For : mỗi codeword ci = c0 … cn-1 Begin ci = x mod 900 x = x div 900 Nếu x = 0 thì dừng thuật toán End
Chú ý: khi kết quả là số âm trong trường hợp -29160 mod 929 = -361, ta lấy 929
– 361 = 568
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 30
Ví dụ: Mã hóa chuỗi số 00021329000 -> 1000 2132 9000
Ban đầu x = 100021329000 Tính codeword 0 c0 = 100021329000 mod 900 = 0 x = 100021329000 div 900 = 111134810 Tính codeword 1 c1 = 111134810 mod 900 = 110 x = 111134810 div 900 = 123483 Tính codeword 2 c2 = 123483 mod 900 = 183 x = 123483 div 900 = 137 Tính codeword 3 c3 = 137 mod 900 = 137 x = 137 div 900 = 0 Trình tự các codedword kết quả là 902, 137, 183, 110, 0
II.6.1.2. Mã hóa mức thấp
Như đã nói lúc đầu mã hóa mức thấp là quá trình các giá trị codeword đã có được
từ bước mã hóa mức cao, được biểu diễn một cách vật lí bằng những mẫu bao gồm các
vạch và khoảng trống xen kẽ lẫn nhau đã được định nghĩa trước
Cấu trúc của 1 codeword : 4 vạch và 4 khoảng trắng xen kẽ. Mỗi vạch hay
khoảng trắng có chiều rộng từ 1 đến 6 module, nhưng tổng cộng số module phải là 17
Chiều rộng của 1 module hay phần tử hẹp nhất được gọi là x-dimension ; chiều
cao của chúng là y-dimension
Mỗi codeword được định nghĩa bằng 8 chữ số liên tiếp, biểu diển cho các vạch và
khoảng trắng, được gọi là x-sequence
Ví dụ: codeword có x-sequence 31111334 được biểu diễn như sau :
Hình 1.18
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 31
II.6.1.2.1. Cấu trúc của mẫu bắt đầu và kết thúc:
Mẫu bắt đầu và kết thúc giúp cho mã vạch PDF417 có thể được đọc hay quét
bằng scanner từ trái sang phải hoặc từ phải sang trái
Chính vì vậy mà PDF417 có mẫu bắt đầu và kết thức duy nhất.
X-sequence của start pattern : 81111113
X-sequence của stop pattern : 711311121
II.6.2. Cơ chế phát hiện và sửa lỗi của mã vạch PDF417:
Một trong những đặc điểm chính PDF417 là khả năng phát hiện và sửa lỗi. Mỗi
mã vạch có 2 codeword phục vụ cho việc phát hiện lỗi. Khả năng sửa lỗi có thể do
người sử dụng chọn, dựa trên nhu cầu của ứng dụng khi mã vạch được sinh ra.
Phát hiện lỗi đòi hỏi phải có hai error-detection codeword cho mỗi kí hiệu.Việc
sửa lỗi bao gồm sự phối hợp giữa tính mềm dẻo và lựa chọn của người sử dụng.
Khi in mã vạch 2 chiều PDF417, người sử dụng phải xác định một cấp độ bảo
mật từ 0 đến 8. Điều này có nghĩa là, ví dụ như tại cấp độ 6, tổng cộng có 126
codeword có thể đồng thời mất đi hoặc bị hủy, và phần còn lại của mã vạch có thể đọc
và giải mã được do đó nội dung phần còn lại này có thể khôi phục được.
Ngoài việc sửa lỗi cho những dữ liệu mất hoặc bị huỷ, PDF417 còn có thể khôi
phục được cả những codeword không giải mã được. Để khôi phục cho một codeword
nó phải có 2 codeword : một codeword để phát hiện lỗi và một codeword để sửa lỗi
theo nguyên tắc sau :
Số codeword bị xóa + 2 lần số codeword giải mã sót ≤ Giới hạn tối đa
Hình 1.19
Hình 1.20
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 32
II.6.2.1. Cấp độ sửa lỗi được đề nghị :
Cấp độ thấp nhất cho việc sửa lỗi nên được xác định như trong bảng sau đây :
Số codeword mang dữ liệu Cấp độ sửa lỗi thấp nhất
1 đến 40 2
41 đến 160 3
161 đến 320 4
321 đến 863 5
Ngoài ra trong chế độ mã hóa dữ liệu bình thường, chúng ta cần lưu ý :
Text Compaction mode : một codeword mã hóa được 1,8 kí tự văn bản
Numeric Compaction mode : một codeword mã hóa được 2,93 chữ số
Việc sửa lỗi ở những cấp độ cao nên được sử dụng khi kí hiệu hư hỏng hoặc giảm
sút một cách đáng kể nhưng có thể lường trước được. Cấp độ sửa lỗi thấp hơn có thể
sử dụng trong các hệ thống ứng dụng đóng.
II.6.2.2. Những vấn đề khác cần biết đến khi sử dụng cấp độ sửa lỗi:
Bởi vì số lượng codeword mang dữ liệu tối đa của mã vạch PDF417 là 925 nên
nó cũng giới hạn cấp độ sửa lỗi có thể có được. Nhiều hơn 415 codewords mang dữ
liệu sử dụng cấp độ sửa lỗi 8. Nhiều hơn 671 codewords mang dữ liệu sử dụng cấp độ
sửa lỗi 7 và 8. Hay 799 codewords mang dữ liệu sử dụng cấp độ sửa lỗi 6, 7 và 8.
Codeword của mã vạch PDF417 có thể bị xóa, hay mờ do đó cấp độ sửa lỗi có thể
là 8 hoặc ở một cấp độ nào đó mà kích thước tối đa của mã vạch phù hợp với ứng dụng
thực tế cụ thể
Việc sửa lỗi không nên được sử dụng như là một thay thế cho việc đáp ứng hoàn
hảo chất lượng của mã vạch, hay là để bù đắp cho quá trình in kém chất lượng.
Mối quan hệ giữa cấp độ bảo mật và khả năng sửa lỗi : Giới hạn tối đa của cấp độ
bảo mật là E + 2(M)
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 33
0 0 1 2 2 6 3 14 4 30 5 62 6 126 7 254 8 510
E : số codeword bị xóa ( không thể giải mã )
M : số codeword bị giải mã sót
Việc tính error-detection codeword dựa trên tất cả codeword mang dữ liệu ngoại
trừ row indicator
Để tính những codeword này, trước hết chúng ta định nghĩa các kí hiệu như sau :
n : tổng số codeword s : cấp độ bảo mật do người sử dụng lựa chọn k : số codeword phát hiện/sửa lỗi hay 2s+1 gk(x) : đa thức khai triển (x – 3)(x – 32) ... (x – 3k), x là biến chưa biết ak : hệ số của x khi khai triển đa thức gk(x) ck : codeword phát hiện/sửa lỗi ; c0 ... ck-1 dn : codeword dữ liệu ; d0 ... dn-1 t1,t2,t3 : biến tạm
Ghi chú : c0 và c1 được sử dụng cho việc phát hiện lỗi, c2 đến ck-1 để sửa lỗi. k
phụ thuộc cấp độ bảo mật s
Hệ số của đa thức khai triển được tính như sau : gk(x) = (x-3)(x-32) ... (x-3k) = a0 + a1x + ... + ak-1xk-1 + xk Tiếp theo, ta tính những hệ số ở trên : For ai = a0 .. ak-1 Begin ai = ai mod 929 End
Ví dụ: Tính hệ số của đa thức khai triển cho cấp độ bảo mật 1
s = 1 k = 2s+1 = 4
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 34
g4(x) = (x-3)(x-32)(x-33)(x-34) = 59049 – 29160x + 3510x2 – 120x3 + x4 a0 = 59049 mod 929 = 522 a1 = -29160 mod 929 = 568 a2 = 3510 mod 929 = 723 a3 = -120 mod 929 = 809
Ghi chú: Bảng hệ số của đa thức khai triển dưới đây (*) được sử dụng để mã hóa
mã vạch PDF417 ở bất kì cấp độ bảo mật nào.
Error detection/correction codeword được tính như sau :
Khởi tạo các codeword phát hiện/sửa lỗi c0, ... , ck-1 bằng 0
Khởi tạo các biến tạm t1, t2, t3 bằng 0
For : mỗi codeword di = dn-1 ... d0 Begin t1 = (di + ck-1) mod 929 For : mỗi codeword phát hiện/sửa lỗi cj = ck-1 .. c1 Begin t2 = (t1 * aj) mod 929 t3 = 929 – t2 cj = (cj-1 + t3) mod 929 End t2 = (t1 * a0) mod 929 t3 = 929 – t2 c0 = t3 mod 929 End Cuối cùng ta tính mỗi codeword phát hiện/sửa lỗi cj = c0 .. ck-1 Begin If cj not 0 cj = 929 – cj End
Ví dụ: Chuỗi PDF417 được biểu diễn bằng các codeword : 453, 178, 121, 239.
Tiếp theo, kí hiệu mô tả chiều dài phía trước các codeword là 5.
5, 453, 178, 121, 239
n = 5 tổng số codeword ( bao gồm kí hiệu mô tả chiều dài ) d4 = 5 d3 = 453 d2 = 178 d1 = 121 d0 = 239
Chúng ta sử dụng cấp độ bảo mật 1 :
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 35
s = 1 k = 2s+1 = 4 a0, ... ,a3 = 522,568,723,809 Khởi tạo c0, ... ,c3 bằng 0 t1 = (d4 + c3) mod 929 = (5 + 0) mod 929 = 5 t2 = (t1 * a3) mod 929 = (5 * 809) mod 929 = 329 t3 = 929 - t2 = 929 – 329 = 600 c3 = (c2 + t3) mod 929 = (0 + 600) mod 929 = 600 t2 = (t1 * a2) mod 929 = (5 * 723) mod 929 = 828 t3 = 929 - t2 = 929 - 828 = 101 c2 = (c1 + t3) mod 929 = (0 + 101) mod 929 = 101 t2 = (t1 * a1) mod 929 = (5 * 568) mod 929 = 53 t3 = 929 - t2 = 929 - 53 = 876 c1 = (c0 + t3) mod 929 = (0 + 876) mod 929 = 876 t2 = (t1 * a0) mod 929 = (5 * 522) mod 929 = 752 t3 = 929 - t2 = 929 - 752 = 177 c0 = t3 mod 929 = 177 mod 929 = 177 t1 = (d3 + c3) mod 929 = (453 + 600) mod 929 = 124 t2 = (t1 * a3) mod 929 = (124 * 809) mod 929 = 913 t3 = 929 - t2 = 929 – 913 = 16 c3 = (c2 + t3) mod 929 = (101 + 16) mod 929 = 117 t2 = (t1 * a2) mod 929 = (124 * 723) mod 929 = 468 t3 = 929 - t2 = 929 – 468 = 461 c2 = (c1 + t3) mod 929 = (876 + 461) mod 929 = 408 t2 = (t1 * a1) mod 929 = (124 * 568) mod 929 = 757 t3 = 929 - t2 = 929 – 757 = 172 c1 = (c0 + t3) mod 929 = (177 + 172) mod 929 = 349 t2 = (t1 * a0) mod 929 = (124 * 522) mod 929 = 627 t3 = 929 - t2 = 929 - 627 = 302 c0 = t3 mod 929 = 302 mod 929 = 302 t1 = (d2 + c3) mod 929 = (178 + 117) mod 929 = 295 t2 = (t1 * a3) mod 929 = (295 * 809) mod 929 = 831
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 36
t3 = 929 - t2 = 929 - 831 = 98 c3 = (c2 + t3) mod 929 = (408 + 98) mod 929 = 506 t2 = (t1 * a2) mod 929 = (295 * 723) mod 929 = 544 t3 = 929 - t2 = 929 – 544 = 385 c2 = (c1 + t3) mod 929 = (349 + 385) mod 929 = 734 t2 = (t1 * a1) mod 929 = (295 * 568) mod 929 = 340 t3 = 929 - t2 = 929 - 340 = 589 c1 = (c0 + t3) mod 929 = (302 + 589) mod 929 = 891 t2 = (t1 * a0) mod 929 = (295 * 522) mod 929 = 705 t3 = 929 - t2 = 929 – 705 = 224 c0 = t3 mod 929 = 224 mod 929 = 224 t1 = (d1 + c3) mod 929 = (121 + 506) mod 929 = 627 t2 = (t1 * a3) mod 929 = (627 * 809) mod 929 = 9 t3 = 929 - t2 = 929 - 9 = 920 c3 = (c2 + t3) mod 929 = (734 + 920) mod 929 = 725 t2 = (t1 * a2) mod 929 = (627 * 723) mod 929 = 898 t3 = 929 - t2 = 929 - 898 = 31 c2 = (c1 + t3) mod 929 = (891 + 31) mod 929 = 922 t2 = (t1 * a1) mod 929 = (627 * 568) mod 929 = 329 t3 = 929 - t2 = 929 - 329 = 600 c1 = (c0 + t3) mod 929 = (224 + 600) mod 929 = 824 t2 = (t1 * a0) mod 929 = (627 * 522) mod 929 = 286 t3 = 929 - t2 = 929 - 286 = 643 c0 = t3 mod 929 = 643 mod 929 = 643 t1 = (d0 + c3) mod 929 = (239 + 725) mod 929 = 35 t2 = (t1 * a3) mod 929 = (35 * 809) mod 929 = 445 t3 = 929 - t2 = 929 - 445 = 484 c3 = (c2 + t3) mod 929 = (922 + 484) mod 929 = 477 t2 = (t1 * a2) mod 929 = (35 * 723) mod 929 = 222 t3 = 929 - t2 = 929 - 222 = 707 c2 = (c1 + t3) mod 929 = (824 + 707) mod 929 = 602 t2 = (t1 * a1) mod 929 = (35 * 568) mod 929 = 371
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 37
t3 = 929 - t2 = 929 - 371 = 558 c1 = (c0 + t3) mod 929 = (643 + 558) mod 929 = 272 t2 = (t1 * a0) mod 929 = (35 * 522) mod 929 = 619 t3 = 929 - t2 = 929 - 619 = 310 c0 = t3 mod 929 = 310 mod 929 = 310
Cuối cùng ta lấy những kết quả đã tính ở trên, để có được 4 codeword dùng cho
việc phát hiện và sửa lỗi cho mã vạch PDF417 như sau :
c3 = 929 - c3 = 929 - 477 = 452 c2 = 929 - c2 = 929 - 602 = 327 c1 = 929 - c1 = 929 - 272 = 657 c0 = 929 - c0 = 929 - 310 = 619
II.6.2.3. Bảng hệ số đa thức khai triển tương ứng các cấp độ bảo mật:
Cấp độ bảo mật 0
27 917
Cấp độ bảo mật 1
522 568 723 809
Cấp độ bảo mật 2
237 308 436 284 646 653 428 379
Cấp độ bảo mật 3
274 562 232 755 599 524 801 132 295 116 442 428 295 42 176 65
Cấp độ bảo mật 4
361 575 922 525 176 586 640 321 536 742 677 742 687 284 193 517
273 494 263 147 593 800 571 320 803 133 231 390 685 330 63 410
Cấp độ bảo mật 5
539 422 6 93 862 771 453 106 610 287 107 505 733 877 381 612
723 476 462 172 430 609 858 822 543 376 511 400 672 762 283 184
440 35 519 31 460 594 225 535 517 352 605 158 651 201 488 502
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 38
648 733 717 83 404 97 280 771 840 629 4 381 843 623 264 543
Cấp độ bảo mật 6
521 310 864 547 858 580 296 379 53 779 897 444 400 925 749 415
822 93 217 208 928 244 583 620 246 148 447 631 292 908 490 704
516 258 457 907 594 723 674 292 272 96 684 432 686 606 860 569
193 219 129 186 236 287 192 775 278 173 40 379 712 463 646 776
171 491 297 763 156 732 95 270 447 90 507 48 228 821 808 898
784 663 627 378 382 262 380 602 754 336 89 614 87 432 670 616
157 374 242 726 600 269 375 898 845 454 354 130 814 587 804 34
211 330 539 297 827 865 37 517 834 315 550 86 801 4 108 539
Cấp độ bảo mật 7
524 894 75 766 882 857 74 204 82 586 708 250 905 786 138 720
858 194 311 913 275 190 375 850 438 733 194 280 201 280 828 757
710 814 919 89 68 569 11 204 796 605 540 913 801 700 799 137
439 418 592 668 353 859 370 694 325 240 216 257 284 549 209 884
315 70 329 793 490 274 877 162 749 812 684 461 334 376 849 521
307 291 803 712 19 358 399 908 103 511 51 8 517 225 289 470
637 731 66 255 917 269 463 830 730 433 848 585 136 538 906 90
2 290 743 199 655 903 329 49 802 580 355 588 188 462 10 134
628 320 479 130 739 71 263 318 374 601 192 605 142 673 687 234
722 384 177 752 607 640 455 193 689 707 805 641 48 60 732 621
895 544 261 852 655 309 697 755 756 60 231 773 434 421 726 528
503 118 49 795 32 144 500 238 836 394 280 566 319 9 647 550
73 914 342 126 32 681 331 792 620 60 609 441 180 791 893 754
605 383 228 749 760 213 54 297 134 54 834 299 922 191 910 532
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 39
609 829 189 20 167 29 872 449 83 402 41 656 505 579 481 173
404 251 688 95 497 555 642 543 307 159 924 558 648 55 497 10
Cấp độ bảo mật 8
352 77 373 504 35 599 428 207 409 574 118 498 285 380 350 492
197 265 920 155 914 299 229 643 294 871 306 88 87 193 352 781
846 75 327 520 435 543 203 666 249 346 781 621 640 268 794 534
539 781 408 390 644 102 476 499 290 632 545 37 858 916 552 41
542 289 122 272 383 800 485 98 752 472 761 107 784 860 658 741
290 204 681 407 855 85 99 62 482 180 20 297 451 593 913 142
808 684 287 536 561 76 653 899 729 567 744 390 513 192 516 258
240 518 794 395 768 848 51 610 384 168 190 826 328 596 786 303
570 381 415 641 156 237 151 429 531 207 676 710 89 168 304 402
40 708 575 162 864 229 65 861 841 512 164 477 221 92 358 785
288 357 850 836 827 736 707 94 8 494 114 521 2 499 851 543
152 729 771 95 248 361 578 323 856 797 289 51 684 466 533 820
669 45 902 452 167 342 244 173 35 463 651 51 699 591 452 578
37 124 298 332 552 43 427 119 662 777 475 850 764 364 578 911
283 711 472 420 245 288 594 394 511 327 589 777 699 688 43 408
842 383 721 521 560 644 714 559 62 145 873 663 713 159 672 729
624 59 193 417 158 209 563 564 343 693 109 608 563 365 181 772
677 310 248 353 708 410 579 870 617 841 632 860 289 536 35 777
618 586 424 833 77 597 346 269 757 632 695 751 331 247 184 45
787 680 18 66 407 369 54 492 228 613 830 922 437 519 644 905
789 420 305 441 207 300 892 827 141 537 381 662 513 56 252 341
242 797 838 837 720 224 307 631 61 87 560 310 756 665 397 808
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 40
851 309 473 795 378 31 647 915 459 806 590 731 425 216 548 249
321 881 699 535 673 782 210 815 905 303 843 922 281 73 469 791
660 162 498 308 155 422 907 817 187 62 16 425 535 336 286 437
375 273 610 296 183 923 116 667 751 353 62 366 691 379 687 842
37 357 720 742 330 5 39 923 311 424 242 749 321 54 669 316
342 299 534 105 667 488 640 672 576 540 316 486 721 610 46 656
447 171 616 464 190 531 297 321 762 752 533 175 134 14 381 433
717 45 111 20 596 284 736 138 646 411 877 669 141 919 45 780
407 164 332 899 165 726 600 325 498 655 357 752 768 223 849 647
63 310 863 251 366 304 282 738 675 410 389 244 31 121 303 263
III. Ứng dụng thực tế của mã vạch:
III.1. Ứng dụng trong xét nghiệm
Trong xét nghiệm thường dùng các vật liệu thủy tinh và trước dây thường dùng
bút chì ghi tên khoa và số hồ sơ hoặc tên bệnh nhân trên ống nghiệm. Việc làm này đã
tạo nên một số sai sót nguy hiểm cho tính mạng bệnh nhân và đã từng xảy ra ở một vài
bệnh viện.
Thí dụ : số hồ sơ 66009 nếu quay chiều ống nghiệm lại sẽ là 60099 hoặc lầm lẫn
giữa tên Hương và Hường do nét bút chì bị mất vì thế việc sử dụng mã vạch là rất cần
thiết trong xét nghiệm.
Việc triển khai mã vạch ở khâu nào tùy tình hình mỗi bệnh viện. Ví dụ cụ thể là
tại khâu tiếp đón bệnh viện có thể cung cấp ngay cho bệnh nhân các mã vạch sẽ dùng
trong quá trình điều trị. Mã vạch này cũng có thể được dán vào sổ hoặc thẻ khám bệnh
của bệnh nhân.
III.2. Ứng dụng trong việc trồng và bán rau sạch
Sau khi thu hoạch rau, trung tâm phải phân loại rau nhằm phân biệt từng lô rau tương ứng với từng hộ nông dân trồng rau an toàn. Sau khi đưa rau về thành phố, tất cả
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 1
các loại rau đều phải qua công đoạn rửa bằng nước ozone để tẩy sạch hàm lượng
vi sinh còn sót lại trong rau. Qua khâu này, rau được phân loại và đóng gói theo từng
mã vạch riêng trên bao bì sản phẩm. Ưu điểm của việc dùng mã vạch là, "chỉ cần nhấp
chuột trên máy tính là có thể biết được khách hàng là ai, có tên tuổi địa chỉ nếu là
khách hàng quen. Ai là người bán gói rau đó, thời gian bán, nông dân trồng… tất cả
những thông số kỹ thuật đều kiểm soát được”. Ðây là cách quản lý hiệu quả và "an
toàn nhất cho rau an toàn", mà các chuyên gia của trung tâm thực hiện nhằm thuyết
phục người tiêu dùng về tính an toàn của sản phẩm.
I.1. Ứng dụng trong việc tránh sử dụng nhầm thuốc
Ở Mỹ, hàng năm có khoảng 800.000 người là nạn nhân của sự
nhầm lẫn trong sử dụng thuốc trị bệnh, chưa kể lỗi sử dụng thiết bị
không phù hợp hoặc lỗi phẫu thuật... Để chống lại những lỗi sử dụng
thuốc trị bệnh, Cơ quan Quản lý Thực phẩm & Dược phẩm Hoa Kỳ
(FDA) mới đây đã xây dựng một hệ thống mã số mã vạch và máy quét
(scanner) đối với các loại dược phẩm và bệnh nhân.
Thực vậy, mỗi loại thuốc được đưa đến bệnh viện phải chứa đựng những thông
tin cơ bản thông qua mã số mã vạch ở bao bì: như tên thuốc, liều dùng, chống chỉ định,
những phản ứng phụ... Về phần mình, bệnh nhân sẽ được trang bị một chiếc vòng chứa
thông tin về mã số mã vạch nhận dạng. Khi quản lý việc điều trị của bệnh nhân, nhân
viên y tế chỉ việc quét (scanning) hai mã số mã vạch.
Một máy tính trung tâm được nối với máy quét có chứa những thông tin chi tiết
của từng bệnh nhân (những hướng dẫn điều trị, trọng lượng cơ thể, tuổi tác, những
chẩn đoán cũng như toàn bộ các loại dược phẩm được sử dụng trong việc điều trị...) sẽ
kiểm chứng sự trùng hợp của các dữ liệu của thuốc cần dùng. Trong trường hợp nhầm
lẫn, máy quét sẽ phát ra tín hiệu báo động. Hệ thống này được thử nghiệm trong 90
ngày tại một vài bệnh viện trước khi chính thức được đưa vào sử dụng, là kết quả cụ
thể đầu tiên của cơ quan FDA, kể từ khi cơ quan chuyên môn chỉ đạo này bị chỉ trích
về những nhầm lẫn trong việc sử dụng thuốc trị bệnh.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 2
Hệ thống mã số mã vạch này không phải được lựa chọn một cách tình cờ. Nó đã
chứng minh được hiệu quả tại 3 bệnh viện ở Hoa Kỳ: Những lỗi về sử dụng thuốc đã
giảm 80% tại 2 bệnh viện ở Colorado và New Hampshire, nơi mà hệ thống này đã
được lắp đặt cách đây vài năm. Còn trong các bệnh viện dành cho các cựu chiến binh ở
Kansas thì kết quả cho thấy không còn hiện tượng nhầm lẫn về thuốc men nữa kể từ
khi áp dụng hệ thống này.
Giới y học đánh giá rất cao hệ thống mới này. Mặc dù các khoản chi tiêu hằng
năm cho các thiết bị y khoa tại các bệnh viện ở Mỹ ước tính lên tới khoảng 7 tỉ USD,
nhưng phần lớn các bệnh viện vẫn sẵn sàng đầu tư hệ thống này. Thực ra, số tiền đầu
tư cho hệ thống này chẳng thấm gì so với những chi phí do lỗi dùng thuốc, điều trị
thêm và bồi thường kiện tụng hằng năm lên tới 177,4 tỉ USD ở Mỹ.
Mọi điều kiện có vẻ đã hội đủ để hệ thống này được áp dụng rộng rãi. Tuy nhiên,
còn cần phải thuyết phục ngành công nghiệp dược phẩm đầu tư (ước tính khoảng 50
triệu USD) vào việc thay đổi hệ thống nhãn hiệu truyền thống bằng hệ thống mới.
Đối với cơ quan FDA, hệ thống mã số mã vạch này sẽ là một công cụ mạnh để đo
lường những phản ứng phụ (side effects) của các loại thuốc mà ngành công nghiệp này
vốn phải cảnh giác. Hơn nữa, lợi thế của hệ thống mới là sẽ tạo ra được một cơ sở dữ
liệu khổng lồ kiểm soát các loại thuốc và những phản ứng không mong muốn
(undesireable effects) đã được biết hoặc còn mới.
Cuối cùng, cơ quan FDA còn dự định áp dụng hệ thống mã số mã vạch tương tự cho
các sản phẩm máu vì những nguy cơ trong truyền máu là rất cao
I.2. Ứng dụng trong việc làm CMND
Ngày 11-5, Thủ tướng Chính phủ đã phê duyệt dự án sản xuất, cấp và quản lý
chứng minh nhân dân (CMND) với mục tiêu: Xây dựng hệ thống thu, nhận và quản lý
dữ liệu đăng ký CMND tự động trên mạng máy tính toàn quốc; sản xuất, cấp thẻ
CMND trên dây chuyền công nghệ hiện đại. Dự án chia làm hai giai đoạn: Giai đoạn 1
từ 2004–2007 sẽ sản xuất và cấp 24 triệu CMND. Giai đoạn 2 từ năm 2008 đến khi
hoàn thành dự án. Bảo đảm mỗi công dân Việt Nam từ 14 tuổi trở lên đều được cấp
CMND với một số duy nhất, không trùng lặp, chống được nạn làm giả CMND. Hai
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 3
trung tâm dữ liệu quốc gia sẽ được thành lập ở Hà Nội và TPHCM. Sản phẩm thẻ
CMND in mã vạch hai chiều, độ bền 15 năm.
I.3. Ứng dụng trong làm thẻ học sinh
Theo Sở GD-ĐT TP.HCM, sở sẽ tiến hành thực hiện thẻ học sinh có mã vạch cho
mỗi HS phổ thông từ lớp 1-12, dự kiến năm học 2004-2005 tới đây HS sẽ được cấp thẻ
này. Hiện nay ngành giáo dục các cấp đang quản lý HS bằng mã số. Các mã số này
mới chỉ bước đầu quản lý HS về mặt hành chính (đầu vào, đầu ra, chuyển đi, chuyển
đến...), nay mã vạch sẽ lưu thêm những thông tin cá nhân của HS và tiến đến kết hợp
với Sở Y tế theo dõi tình trạng sức khỏe của HS. Như vậy, chỉ cần một thẻ này HS có
thể sử dụng thay thế cho thẻ thư viện hoặc các thẻ cá nhân khác. Đây là việc làm mở
đầu cho việc thực hiện thẻ thông tin của công dân TP.HCM trong tương lai.
I.4. Ứng dụng trong việc ghi hạn sử dụng của sữa Vinamilk
Để đảm bảo sức khỏe khi sử dụng và mua sản phẩm cần phài biết sản phẩm có
còn hạn sử dụng hay không. Tất cả các sản phẩm của Vinamilk in hạn sử dụng là dãy
số gồm sáu chữ số. Để biết cách xem hạn sử dụng trên hộp sữa tươi, bạn hãy xem sáu
số cuối trên phần đầu của hộp sữa, ví dụ dãy số 011202 thì 2 số đầu 01 là ngày hết hạn
sử dụng sữa, hai số giữa 12 là tháng hết hạn sử dụng sữa, hai số cuối 02 là năm hết hạn
sử dụng sữa, có nghĩa là ngày hết hạn sử dụng hộp sữa này là ngày 1 tháng 12 năm
2002. Mã vạch sản phẩm không dùng để xem hạn sử dụng sản phẩm. Mã vạch in trên
sản phẩm chỉ để phân loại sản phẩm và quản lý giá cả trên máy, không liên quan gì
đến hạn sử dụng. Trên khía cạnh nào đó, mã vạch như một ngôn ngữ chung giúp nhận
biết các loại sản phẩm và giá sản phẩm khi sản phẩm lưu thông trên thế giới (mặc dù
hệ thống tiền tệ khác nhau).
I.5. Ứng dụng trong việc chống giả mạo hiện nay
Tại một hội nghị về công nghệ nano phòng chống và
phát hiện tội phạm diễn ra tuần trước tại London, Anh,
Russel Cowburn thuộc ĐH Durham đã giới thiệu một công
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 4
nghệ mới chống hàng giả. Đó là các mã vạch, chứa những hạt từ tính có đường kính
chỉ bằng 1 phần triệu của 1mm, được gắn lên hàng hoá.
Các hàng mã vạch chứa những nguyên tử permalloy - hợp kim của nickel và sắt.
Chúng được in theo cách tương tự vi mạch điện tử. Mỗi bản in sắp xếp các hạt từ tính
theo một hình mẫu khác biệt. Do mỗi mã vạch là độc nhất vô nhị nên từ trường của nó
cũng độc nhất. Sau này, từ trường có thể được đo, ghi và kiểm tra nhằm đảm bảo mã
vạch là thật.
Các từ trường khác nhau tương tác với ánh sáng theo cách thức khác nhau. Do
vậy, ánh phản xạ của laser phân cực từ mã vạch tiết lộ tính chất từ của nó. Chi tiết về
những tính chất này được lưu trong một cơ sở dữ liệu. Dữ liệu được nối với số của mỗi
mã vạch.
Để kiểm tra mã vạch, một thiết bị chẳng hạn như máy quét laser tại siêu thị đo từ
trường của nó và lưu lại số. Sau đó, máy quét tham khảo cơ sở dữ liệu để kiểm tra liệu
từ trường có khớp với số mã vạch hay không. Thủ tục này chỉ mất vài giây. Những kẻ
làm giả hàng hoá không thể tạo ra những mã vạch có các từ trường riêng biệt. Để qua
mặt được hệ thống này, chúng phải đột nhập vào cơ sở dữ liệu.
Theo Cowburn, để tránh mã vạch từ tính bị bóc ra và dán vào hàng giả, nhà sản
xuất có thể in chúng trên những vật liệu mà đảm bảo rằng bóc mã vạch ra sẽ làm xáo
trộn từ trường. Ông hy vọng bán công nghệ này cho các tổ chức tài chính để sử dụng
trên giấy chứng nhận bảo hiểm hoặc cho các nhà sản xuất ôtô - những người muốn bảo
đảm tính xác thật của các linh kiện. Máy quét và cơ sở dữ liệu được tích hợp trong một
thiết bị chỉ bằng kích cỡ 1 chiếc Walkman. Do đó, thanh tra có thể kiểm tra hàng hóa
ngay tại chỗ.
II. Một số thông tin về RFID: Sự phát triển cùa khoa học kỹ thuật hiện đại và việc ứng dụng các thành tựu Khoa
học kĩ thuật ấy thật đáng sợ. Mã số mã vạch vốn được coi là một hình thức hiện đại để
nhận biết sản phẩm nay cũng trở nên lạc hậu, và người ta đang nghĩ ra một hình thức
hiện đại khác để thay thế nó. Bởi vì đối với mã vạch dán trên hàng hóa trong siêu thị
khách hàng có thể tráo đổi một cách dễ dàng, và thông tin về hàng hóa đó sẽ không
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 5
còn chính xác nữa, kẻ gian sẽ mua được hàng hóa với giá thấp hơn giá trị thực tế nhiều
lần, gây thiệt hại không nhỏ đến doanh thu của siêu thị.
II.1. Khi ông lớn làm thử nghiệm :
Một thượng đế nhanh mắt, lanh mồm có thể sẽ thốt lên “hàng không có mã vạch”
như thế khi đến các siêu thị Wal-mart ở Mỹ mua hàng tiêu dùng cho toàn thể gia đình
trong thời gian sắp tới đây. Nhưng sản phẩm “no barcode” (không có mã vạch) mà
người tiêu dùng phát hiện nào có phải là sản phẩm kém chất lượng, quá thời hạn hay
do cách nào đó sơ sểnh đã lọt khỏi dây chuyền kiểm tra đâu !
Tiềm ẩn bên trong lớp bao bì của sản phẩm ấy là một thiết bị vô tuyến nhận dạng
mang tên khoa học chuyên ngành là Radio Frequency Identification (RFID). Thiết bị
này đang được chuỗi siêu thị bán lẻ hàng đầu thế giới Wal-mart chọn thay thế cho mã
vạch nay xem ra không còn hiệu quả cao trong thời buổi mà vô số chủng loại hàng hóa
tiêu dùng được chất đầy trong các tủ kính, trên các kệ, các quầy.
Đầu tháng 7 vừa qua, tổng giám đốc công nghệ thông tin Linda Dillman ở trụ sở
chính cùa Wal-mart tại thành phố Bentonville bang Arkansas thông báo đã chính thức
yêu cầu 100 nhà cung cấp hàng hóa chính yếu cho tập đoàn Wal-mart phải sẵn sàng để
từ đầu năm 2005 trở đi sẽ đưa RFID vào một số chủng loại hàng tiêu dùng bày bán cho
đám đông.
Do kích cỡ khổng lồ và uy lực tiền của chuỗi Wal-mart, các nhà phân tích chuyên
ngành cho rằng RFID sẽ nhanh chóng lan tràn sang đủ các loại hàng hóa khác. Các nhà
cung cấp hàng phải thay barcode bằng RFID (để cạnh tranh mà tiếp tục sống còn) đang
lo ngại phải tăng chi phí nhưng các chuyên gia cho biết, RFID sẽ không tốn kém nhiều
lắm đâu khi nó trở nên phổ biến toàn cầu.
“ Có nhiều công ty sản xuất kinh doanh không muốn mình phải là những người
đầu tiên nhảy ùm xuống dòng sông “, giám đốc Kevin Ashton thuộc tổ hợp Auto-ID
Center lo thiết kế và phát triển RFID nhận xét. “ Nhưng một Wal-mart tự nó đã hơn
hẳn 101 công ty lớn, nhỏ khác “. Có nghĩa là những gì Wal-mart tiên phong khởi
xướng thì tất cả các nhà buôn lớn, buôn lẻ sẽ đều theo.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 6
II.2. RFID là gì ?
Nó là một thiết bị có kích cỡ nhỏ chỉ bằng con tem bưu chính nhưng nó mang
trong thân mình những con bọ điện tử cực kì nhỏ và một ăng-ten. Khi một RFID được
gắn vào một sản phẩm, ngay tức khắc nó sẽ phát ra các tín hiệu vô tuyến chỉ báo cho
biết sản phẩm ấy đang nằm ở chỗ nào, trên xe đẩy vào kho, trong kho lạnh hay trên xe
đẩy của khách hàng. Thiết bị này còn nối kết mình vào mạng vi tính của cửa hàng và
nhờ vậy người bán hàng có thể biết rõ sản phẩm ấy được sản xuất khi nào, tại nhà máy
nào, màu sắc và kích cỡ của sản phẩm. Và để bảo quản tốt sản phẩm thì phải lưu trữ nó
ở nhiệt độ nào.
Nhờ RFID mà thời gian và chi phí quản lý, trưng bày, bán hàng sẽ giảm được rất
nhiều. Tín hiệu vô tuyến phát ra từ chiếc tem điện tử này sẽ khiến các nhân viên bán
hàng không phải đưa đầu dò đọc lướt lên mã vạch của món hàng nữa; việc tính tiền sẽ
nhanh lẹ hơn rất nhiều, các đuôi dài người tiêu dùng xếp hàng sẽ được xử lí cấp kì
hơn. Còn trong các kho hàng, nhân viên cũng sẽ thao tác được nhanh chóng hơn mà số
lượng, chủng loại hàng cũng được lập sổ thu-mua, tiêu thụ, tồn kho một cách chính
xác hơn. Họ sẽ nhanh chóng biết được lô hàng nào đã quá hạn sử dụng không được
bày bán nữa, chủng loại hàng đang hút khách tiêu dùng cần mua thêm ... Nói tóm lại
các cửa hàng bách hóa, các siêu thị lớn sẽ cần ít nhân viên hơn, chi phí hoạt động sẽ
giảm, lãi sẽ cao hơn.
Theo nhà phân tích Emme P. Kozloff ở công ty nghiên cứu thị trường C.
Bernstein & Co. thì việc ứng dụng RFID sẽ giúp chuỗi siêu thị Wal-mart tiết kiệm
được tối thiểu là 8,4 tỉ USD trong chi phí hoạt động kể từ năm 2007 trở đi. RFID còn
có hiệu quả làm giảm nguy cơ chôm chỉa hàng hóa trong các điểm bán lẻ vì một khối
lượng lớn sản phẩm có cài tem điện tử này sẽ tự chúng báo động mỗi khi được bốc
xuống khỏi quầy trưng hàng.
Chuỗi cửa hàng tạp hóa Tesco và công ty Gillette ở Anh đã bắt đầu thử nghiệm
ứng dụng RFID tại thành phố Cambridge. Gillette tin rằng doanh thu của họ có thể
tăng 15% nếu như các kệ bày hàng của họ luôn được bày biện hàng hóa kịp thời và
cửa hàng của họ chống được bọn chôm chĩa. Ngoài ra RFID cũng có thể là công cụ
hoàn hảo khi cần tung chiến dịch khuyến mãi. Lúc ấy mỗi xe đẩy hàng trong siêu thị
cũng sẽ được gắn kèm một thiết bị đọc RFID.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 7
Nhưng đó làm chuyện sau này vì giá một tem điện tử RFID hiện nay còn khá cao,
10 cent/cái. Khi nào đã phổ biến hơn barcode, giá của nó sẽ chỉ còn chưa tới 1 cent thì
sẽ là lúc nó đạt thời hoàng kim.
CCHHƯƯƠƠNNGG 22 –– QQUUẢẢNN LLÝÝ PPHHÒÒNNGG
MMÁÁYY TTHHƯƯ VVIIỆỆNN BBẰẰNNGG MMÃÃ VVẠẠCCHH
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 8
I. Đặt vấn đề: Chương trình quản lý phòng máy thư viện bằng mã vạch được thiết kế nhằm mục
tiêu phục vụ cho các bạn sinh viên và thủ thư trong thư viện. Các bạn sinh viên có thể
đăng kí làm thẻ thư viện qua mạng một cách linh động, dễ dàng tại địa chỉ website của
thư viện. Đối với thủ thư, qua đó nắm bắt được tình hình đăng kí của sinh viên, lên kế
hoạch chụp hình làm thẻ hợp lí, tạo và in thẻ thư viện cho sinh viên và quản lý phòng
máy sử dụng Internet tự động nhờ áp dụng công nghệ mã vạch.
II. Phân tích yêu cầu:
II.1. Về mặt ứng dụng:
Với những yêu cầu về quản lý và sử dụng được đặt ra, hệ thống được thiết kế bao
gồm 4 module nhỏ:
II.1.1. Module 1:
Website cho phép sinh viên đăng kí từ xa để có thể tham dự buổi hướng dẫn sử
dụng thư viện và chụp hình làm thẻ, đồng thời thủ thư cũng có thể thực hiện các thao
tác quản trị của mình qua website này
II.1.2. Module 2:
Phần mềm quản lý phòng máy Internet của thư viện bằng mã vạch, cho phép thủ
thư kiểm soát thời gian đã sử dụng trong tuần cũng như trong học kì của sinh viên.
II.1.3. Module 3:
Phần mềm tạo thẻ thư viện, cho phép thủ thư chụp hình sinh viên trực tiếp từ máy
ảnh kĩ thuật số và in thẻ thư viện cho sinh viên.
II.1.4. Module 4:
Phần mềm in phiếu thứ tự chụp hình có mã vạch, thủ thư sẽ in phiếu và phát cho
sinh viên sau khi đã được nghe hướng dẫn sử dụng thư viện, giúp cho việc chụp hình
sinh viên được thực hiện một cách nhanh chóng.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 9
II.2. Về mặt kĩ thuật:
Ứng dụng đòi hỏi phải có khả năng đáp ứng về mặt kĩ thuật như sau:
Ứng dụng triển khai trên môi trường Web và cả desktop
Hỗ trợ nhiều trình duyệt (IE, Netscape...)
Hỗ trợ nhiều người dùng, số lượng sinh viên và thủ thư không giới hạn
Tự động hóa các thao tác, sử dụng công nghệ mã vạch
II.3. Các yêu cầu khác:
Ngoài ra ứng dụng còn có các yêu cầu khác như sau:
Hỗ trợ tiếng Việt theo chuẩn Unicode
Cài đặt đơn giản, sử dụng một cách dễ dàng
Dễ dàng nâng cấp và mở rộng cho các công nghệ mới như RFID ( tại Mỹ
đang được dần thay thế cả mã vạch 2 chiều )
III. Thiết kế:
III.1. Kiến trúc hệ thống:
Kiến trúc hệ thống đòi hỏi phải có tính linh động cao, một thành phần có thể thêm
hay thay đổi khi cần mà không ảnh hưởng đến các thành phần khác.
Để đáp ứng được yêu cầu trên, ta thiết kế hệ thống hoạt động trong mô hình 3
tầng và công nghệ triển khai ứng dụng là công nghệ Java.
Browser Web
Netscape
IE
JSP/
Servlet
JavaBean
Java Object Java Object Java Object
Database
Hình 2.1 – Kiến trúc hệ thống
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 10
III.2. Thiết kế tổng quát:
Từ phân tích yêu cầu của bài toán, ta nhận thấy hệ thống xây dựng nhằm phục vụ
cho 2 nhóm người sau:
Thủ thư
Sinh viên
III.2.1. Thủ thư:
Thủ thư có quyền kiểm soát mọi hoạt động của hệ thống bao gồm:
III.2.1.1. Ứng dụng web:
Mỗi thủ thư sẽ được cấp một username và password để thực hiện những chức
năng cho phép của mình. Nếu quá trình đăng nhập thành công thì thủ thư có những
chức năng sau:
Hẹn ngày chụp hình, xem và sửa ngày hẹn
Thêm lớp, xem, sửa và xóa lớp
Tìm kiếm sinh viên, cập nhật hoặc xóa thông tin của sinh viên
Xem danh sách và thời gian sử dụng phòng máy của tất cả sinh viên
Quy định thời gian sử dụng phòng máy
Cấp thời gian sử dụng cho sinh viên các lớp sau mỗi học kì
III.2.1.2. Ứng dụng trên máy đơn:
In phiếu chụp hình cho sinh viên có đi nghe hướng dẫn sử dụng thư viện
Chụp hình sinh viên từ máy ảnh kĩ thuật số và tạo thẻ thư viện
Quản lý thời gian sử dụng phòng máy của sinh viên
III.2.2. Sinh viên:
Sinh viên là những người có thể sử dụng các dịch vụ do hệ thống cung cấp như
đăng kí làm thẻ từ xa, đăng nhập sửa chữa thông tin và được phép sử dụng phòng máy
của thư viện trong thời gian cho phép, được quy định bởi thủ thư.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 11
III.3. Thiết kế Cơ sở dữ liệu:
Để đáp ứng những yêu cầu thiết kế tổng quát ở trên ta sẽ xây dựng cơ sở dữ liệu
cho hệ thống như sau: ( sử dụng Hệ quản trị CSDL - MS SQL Server 2000 )
III.3.1. Bảng Sinh viên:
S T T
THUỘC TÍNH
KIỂU GHI CHÚ MÔ TẢ
1 mssv varchar Khoá chính Khoá duy nhất cho mỗi sinh viên
2 matkhau varchar Khác rỗng Mật khẩu của sinh viên, cần thiết khi đăng nhập để xem, sửa thông tin cá nhân
3 hoten nvarchar Khác rỗng Họ và tên đầy đủ của sinh viên
4 ngaysinh datetime Khác rỗng Ngày tháng năm sinh
5 gioitinh tinyint Khác rỗng 1 – Là Nam; 0 – Là Nữ
6 email varchar Có thể rỗng Địa chỉ email để khi thủ thư cần thiết sẽ liên lạc
7 diachi nvarchar Có thể rỗng Địa chỉ thường trú
Hình 2.2 – Mô hình quan hệ giữa các bảng
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 12
8 thoigian int Khác rỗng Thời gian sử dụng Internet còn lại của sinh viên này
9 malop varchar Khác rỗng Khóa ngoại lấy từ bảng Lop
10 tuan tinyint Khác rỗng Ghi nhận tuần hiện tại, để có thể kiểm tra giới hạn thời gian sử dụng Internet trong tuần
11 dasudung int Khác rỗng Số phút mà sinh viên đã sử dụng trong tuần này
III.3.2. Bảng Hẹn:
S T T
THUỘC TÍNH
KIỂU GHI CHÚ MÔ TẢ
1 Mahen bigint Khoá chínhKhoá duy nhất cho mỗi ngày hẹn, tự động tăng lên 1 mỗi lần insert vào database
2 ngayhen datetime Khác rỗng Ngày tháng năm hẹn
3 sosinhvien int Khác rỗng Số sinh viên cho lần hẹn này
4 dahen int Khác rỗng Số sinh viên đã đăng kí qua mạng và đã hẹn làm thẻ
III.3.3. Bảng Hẹn sinh viên:
S T T
THUỘC TÍNH
KIỂU GHI CHÚ MÔ TẢ
1 mssv varchar Khoá ngoại từ bảng Sinh viên
2 mahen bigint Khoá chính
Khoá ngoại từ bảngHẹn
3 dachuphinh tinyint Khác rỗng 1 – Đã chụp hình làm thẻ thư viên; 0 – Chưa chụp hình
4 sothutu int Khác rỗng Ghi nhận số thứ tự khi đăng kí qua mạng trong một lần hẹn
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 13
III.3.4. Bảng Lớp:
S T T
THUỘC TÍNH
KIỂU GHI CHÚ MÔ TẢ
1 malop varchar Khoá chính Khoá duy nhất cho mỗi lớp
2 tenlop nvarchar Khác rỗng Tên đầy đủ của lớp
3 khoa int Khác rỗng Niên khóa của lớp này
III.3.5. Bảng Phòng máy:
S T T
THUỘC TÍNH
KIỂU GHI CHÚ MÔ TẢ
1 maphongmay int Khoá chính Khoá duy nhất cho phòng máy
2 tongthoigian int Khác rỗng Thời gian sử dụng Internet trong một học kì, sẽ cấp cho sinh viên khi đăng kí qua mạng lần đầu
3 thoigiantrongtuan int Khác rỗng Thời gian tối đa mà một sinh viên được phép sử dụng trong một tuần lễ
III.3.6. Bảng Thủ thư :
S T T
THUỘC TÍNH
KIỂU GHI CHÚ MÔ TẢ
1 username varchar Khoá chính Khoá duy nhất cho thủ thư
2 passwords varchar Khác rỗng Mật khẩu cần thiết khi thủ thư đăng nhập vào hệ thống và thực hiện các thao tác quản trị
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 14
III.4. Thiết kế xử lý:
Phần thiết kế xử lý phân tích những hoạt động quan trọng mà các đối tượng tương
tác lên hệ thống. Các tương tác này ứng với những xử lý sau:
III.4.1. Xử lý: đăng kí làm thẻ của sinh viên
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu đăng kí làm thẻ của sinh viên
Kiểm tra lịch hẹn của thủ thư còn trống không
Lấy các thông tin cần thiết về sinh viên
Kiểm tra MSSV đó đăng kí chưa
Thông báo sinh viên đăng kí thành công và cho biết ngày giờ hẹn
Cập nhật thông tin của sinh viên vào CSDL
III.4.2. Xử lý: đăng nhập của sinh viên
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu đăng nhập của sinh viên
Kiểm tra MSSV và mật khẩu của sinh viên có đúng không
Kiểm tra sinh viên này đã chụp hình chưa
Hiển thị các thông tin mà sinh viên đã đăng kí
Lấy các thông tin sinh viên thay đổi
Cập nhật thông tin của sinh viên vào CSDL
III.4.3. Xử lý: đăng nhập của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu đăng nhập của thủ thư
Kiểm tra username và password của thủ thư có đúng không
Định phạm vi hoạt động của thủ thư
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 15
Hiển thị trang chủ của thủ thư
Thủ thư chọn thực hiện các thao tác quản trị của mình
III.4.4. Xử lý: hẹn ngày chụp hình của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu hẹn ngày chụp hình của thủ thư
Kiểm tra thủ thư đã đăng nhập vào hệ thống chưa
Lấy các thông tin về ngày muốn hẹn
Kiểm tra tính hợp lệ của ngày hẹn
Cập nhật ngày vào CSDL
III.4.5. Xử lý: thêm lớp của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu thêm lớp của thủ thư
Kiểm tra thủ thư đã đăng nhập vào hệ thống chưa
Lấy các thông tin về lớp cần thêm
Cập nhật thông tin lớp vào CSDL
III.4.6. Xử lý: tìm kiếm sinh viên của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu tìm kiếm sinh viên của thủ thư
Kiểm tra thủ thư đã đăng nhập vào hệ thống chưa
Lấy thông tin MSSV cần tìm
Hiển thị thông tin của sinh viên từ CSDL
Thủ thư có thể sửa thông tin của sinh viên hoặc xóa sinh viên
Cập nhật những thay đổi vào CSDL
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 16
III.4.7. Xử lý: quy định thời gian của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu quy định thời gian của thủ thư
Kiểm tra thủ thư đã đăng nhập vào hệ thống chưa
Lấy thông tin thời gian muốn quy định
Cập nhật thông tin thời gian vào CSDL, để giới hạn việc sử dụng phòng
máy của sinh viên
III.4.8. Xử lý: cấp thời gian của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu cấp thời gian của thủ thư
Kiểm tra thủ thư đã đăng nhập vào hệ thống chưa
Lấy thông tin thời gian thủ thư muốn cấp cho sinh viên
Cập nhật thông tin thời gian cho sinh viên vào CSDL
III.4.9. Xử lý: in phiếu chụp hình cho sinh viên của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu của thủ thư
Lấy thông tin đăng kí của sinh viên từ CSDL
In phiếu chụp hình cho sinh viên kèm mã vạch theo số thứ tự
III.4.10. Xử lý: tạo thẻ thư viện cho sinh viên của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu của thủ thư
Quét mã vạch từ phiếu chụp hình của sinh viên
Chụp hình sinh viên từ máy ảnh kĩ thuật số
In thẻ thư viện cho sinh viên kèm mã vạch và ảnh
Cập nhật thông tin sinh viên vào CSDL
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 17
III.4.11. Xử lý: quản lí phòng máy của thủ thư
Xử lý này được mô tả như sau:
Tiếp nhận yêu cầu của thủ thư
Quét mã vạch từ thẻ thư viện của sinh viên
Kiểm tra sinh viên đã chụp hình chưa
Lấy thông tin thời gian sử dụng của sinh viên
Kiểm tra thời gian đã sử dụng trong tuần của sinh viên còn trong giới
hạn quy định không
Xác định máy nào trong phòng máy không hư và còn trống
Cho phép sinh viên bắt đầu sử dụng máy đó
Trừ dần thời gian sử dụng của sinh viên
Thông báo với thủ thư : sinh viên nào đã hết thời gian sử dụng
Cập nhật các thông tin vào CSDL
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 18
III.5. Cơ chế hoạt động:
Lịch hẹn đã kín
Trang chủ
Sinh viên – Đăng kí
Sửa thông tin sinh viên
Lịch hẹn còn trống không ?
MSSV này đã đăng kí chưa ?
Y
N
Đăng kí thất bại
N
N
Sinh viên – Đăng nhập
Kiểm tra MSSV, mật khẩu và đã chụp hình làm
thẻ chưa ?
Cập nhật thành công
Đăng kí thành công
Y
N
Thủ thư – Đăng nhập username và passwords ?
Y
Thủ thư – Trang chủ
Y
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 19
Y
N
Y
Thủ thư - Trang chủ
Hẹn ngày chụp hình Hẹn ngày thành công
Xem danh sách ngày đã hẹn Sửa ngày đã hẹn
Kiểm tra có hẹn sinh viên chưa ? Cập nhật ngày thành công
Cập nhật ngày thất bại
Thêm lớp vào danh sách Thêm lớp thành công
Xem danh sách các lớp Xóa một lớp
Kiểm tra có sinh viên nào có mã lớp này không ?
Cập nhật lớp thành công
Sửa thông tin một lớp
Xóa lớp thành công
Xem danh sách sinh viên
Tìm kiếm một sinh viên Sửa thông tin sinh viên
Xóa thông tin sinh viên Sửa / Xóa thành công
N
Quy định thời gian sử dụng phòng máy Quy định thành công
Cấp thời gian sử dụng cho sinh viên Cấp thời gian thành công
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 20
In phiếu chụp hình Lấy thông tin đăng kí của
sinh viên trong CSDL
In phiếu chụp hình kèm mã vạch và số thứ tự cho sinh viên đi nghe
hướng dẫn sử dụng thư viện
Chụp hình và tạo thẻ thư viện
Quét mã vạch từ phiếu chụp hình của sinh viên
Kiểm tra thông tin đăng kí sinh viên đó và chụp hình bằng máy ảnh kĩ thuật số
Cập nhật ảnh sinh viên vào CSDL, và in ra thẻ
thư viện có mã vạch
Quản lý phòng máy Quét mã vạch từ thẻ thư viện của sinh viên
Kiểm tra tổng thời gian còn lại và thời
gian đã sử dụng trong tuần của sinh viên
Kiểm tra MSSV này có đang sử dụng ?
Cho phép sinh viên bắt đầu sử dụng máy, và
giảm dần thời gian sử dụng còn lại
Thông báo kết thúc sử dụng máy và cập nhật thông tin thời gian
của sinh viên vào CSDL hoặc không cho phép sinh viên sử dụng máy
Y
N
Y
N
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 21
CCHHƯƯƠƠNNGG 33 –– CCÔÔNNGG NNGGHHỆỆ SSỬỬ DDỤỤNNGG
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 22
I. JSP / Servlet:
I.1. Java Server Page (JSP):
I.1.1. Khái niệm:
JSP là một công nghệ lập trình Web phía máy chủ của Java. JSP kết hợp ngôn
ngữ HTML truyền thống và ngôn ngữ Java để tạo ra trang Web động phục vụ cho các
ứng dụng Web uyển chuyển hơn.
JSP đưa lệnh Java vào các thẻ HTML. Các trang JSP chứa các thẻ đặc biệt có cấu
trúc gần giống như những thẻ trong ngôn ngữ HTML. Khi bạn yêu cầu một trang JSP
thì trình chủ sẽ đọc trang JSP từ đĩa cứng, bộ diễn dịch JSP (JSP compiler) sẽ ánh xạ
trực tiếp mã JSP thành Servlet. Sau đó trình chủ Web Server sẽ triệu gọi servlet trả về
cho trình khách dưới dạng một trang HTML.
I.1.2. Cấu trúc thẻ:
JSP cung cấp các thẻ lệnh giúp tạo trang Web. Tương tự như thẻ HTML, thẻ lệnh
của JSP cũng bao gồm các thẻ mở và thẻ đóng. Thực tế, các thẻ JSP được xây dựng
theo đặc tả và chuẩn XML (Extension Markup Language) nên các thẻ của JSP có phân
biệt chữ thường và chữ hoa. Mỗi thẻ có các thuộc tính qui định cách dùng thẻ.
I.1.2.1. Thẻ chỉ dẫn:
*<%@ directive {attr= " value”}%>: Thẻ này cung cấp thông tin toàn cục để dịch trang JSP. attr :là thuộc tính. value: là giá trị ứng với thuộc tính đó, được đặt trong dấu “ ”. *<%@ page %>: thẻ này địng nghĩa những thông tin có giá trị toàn cục trong trang JSP. Thẻ này được sử dụng trong hầu hết các trang JSP được viết. Thẻ chứa các thuộc tính chỉ ra thông tin chú thích về một trang, có thể chỉ ra ngôn ngữ kịch bản đang sử dụng trong trang, những gói của Java cần import vào để sử dụng hay triệu gọi một trang lỗi khi xảy ra lỗi hay xuất hiện một ngoại lệ. Thẻ này thường được đặt trước thẻ mở <html>. *<%@ include %>: Cú pháp: <%@ include file=”URL or FilePath”%>
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 23
Thẻ này dùng để nhúng một trang html hay một tài nguyên tĩnh vào trang JSP hiện hành. Thuộc tính file cho biết địa chỉ URL hay đường dẫn đến tập tin cần nhúng vào. *<%@ tablib%>: là thẻ dùng để thông báo rằng trang jsp sử dụng một thẻ thư viện. Cú pháp: <%@tablib uri=”tagLibraryURI” prefix=”tagPrefix”%> Thuộc tính: uri: tham chiếu đến một địa chỉ URI chứa các thẻ truyền thống. prefix: dùng để phân biệt các hành động.
I.1.2.2. Thẻ kịch bản:
*<%! declaration %>: sử dụng để khai báo biến và các phương thức trong ngôn ngữ kịch bản sử dụng trong trang jsp. *<%= expression %>: dùng để hiển thị một biểu thức. Biểu thức sẽ được kết xuất ra bởi đối tượng JspWriter dưới dạng đối tượng String. Biểu thức trong jsp được gán giá trị khi trang jsp thực thi. Chuỗi kết quả của biểu thức sẽ được chèn vào vị trí tham chiếu của biểu thức trong tập tin jsp. *<% scriptlet %>: thẻ này cho phép chứa bất kì phát biểu hợp lệ nào của ngôn ngữ được tham chiếu trong hướng dẫn của ngôn ngữ diễn dịch.
I.1.2.3. Các hành động chuẩn:
*<jsp:useBean>: dùng tạo hay định vị một Bean. Hành động này liên kết đến các đối tượng của Java được định nghĩa trong một phạm vi với một định danh được định nghĩa trong trang jsp. Cú pháp: <jsp:useBean id =”name” scope=”page|request|session|application” typeSpec/> typeSpec::= class =”className” | class =”className” type =”typeName”| type =”typeName” class =”className”| beanName =”beanName” type =”typeName”| type =”typeName” beanName =”beanName”| type =”typeName”. Các thuộc tính: + id: tên dùng để xác định đối tượng và cũng là tên biến được khai báo và khởi tạo với các đối tượng tham chiếu trong scripting. + scope: là phạm vi cho biết môi trường sống của đối tượng. Giá trị mặc định là “page”. + class: tên đầy đủ của lớp đã được định nghĩa trong Bean (lớp định nghĩa việc thực thi của đối tượng).
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 24
+ beanName: tên của Bean, tương tự như là phương thức instantiate() của lớp java.beans.Beans. + type: định nghĩa kiểu của việc định nghĩa biến scripting trong trường hợp đặc biệt. Nếu không, giá trị giống như giá trị của thuộc tính class. *<jsp:setProperty>: là hành động dùng để đặt vào giá trị của thuộc tính trong Bean từ một HTML form. Tên của thuộc tính phải được định nghĩa truớc trong Bean và liên kết với tên của thành phần form. Để sử dụng được hành động này thì phải có phương thức set tương ứng trong Bean cho mỗi thuộc tính. Chú ý là hành động này chỉ đặt được một giá trị vào một thuộc tính tại một thời điểm. Cú pháp: <jsp:set Property name =“BeanName” prop_expr/> prop_expr::= property =”*”| property =”propertyName”| property =”propertyName” param =”paramName”| property =”propertyName” value =”propertyValue”. propertyValue =String hay là một expr_scriptlet. Thuộc tính: + name: là tên của thành phần Bean phải giống với tên đã được định nghĩa trước bởi thành phần <jsp:useBean>. + property: tên của thuộc tình trong Bean cần đặt giá trị. + param: tên của tham số yêu cầu, là giá trị mà bạn muốn đặt vào thuộc tính trong Bean. Tên của tham số yêy cầu thường là tên của HTML form. + value: là giá trị để gán cho thuộc tính. Một hành động không thể có đồng thời param và value. *<jsp:getProperty>: là hành động dùng để lấy giá trị của thuộc tính trong Bean. Tương ứng với hành động này là phương thức get trong Bean. Giá trị lấy ra được chuyển thành String và có thể thể hiện giá trị như là một output. Cú pháp: <jsp:getProperty name =”name” property =”propertyName”/> Thuộc tính: + name: tên của Bean được định nghĩa trước bởi <jsp:useBean>. + property: tên của thuộc tính cần lấy giá trị. *<jsp:include>: là hành động dùng để nhúng một tài nguyên tĩnh hay động vào trang jsp hiện hành. <jsp:include> có thể có thành phần con <jsp:param> để cung cấp giá trị cho các tham số cho mục đích nhúng. Cú pháp: <jsp:include page =”urlSpec” flush =”true”/>
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 25
hay <jsp:include page =“urlSpec” flush =“true”> {<jsp:param .../>} </jsp:include> Thuộc tính: + page: là đường dẫn URL đến một trang cần nhúng. + flush: có giá trị là Boolean. Nếu giá trị là true thì vùng đệm bị đẩy ra. Giá trị mặc định là false. *<jsp:forward>: hành động này cho phép trình dịch gởi đi một yêu cầu tại thời điểm thực thi đến tài nguyên tĩnh, JavaServlet hay đến trang jsp khác. Hành động này làn chấm dứt việc thực thi của trang hiện hành. Thường dùng như một điều kiện trong jsp để chuyển hướng xử lý. Cú pháp: <jsp:forward page =“urlSpec”/> hay <jsp:forward page =“urlspec”> {<jsp:param.../>} </jsp:forward> Thuộc tính: page: xác định quan hệ URL của đích mà hành động jsp:forward chuyển đến. * <jsp:param>: là hành động dùng để cung cấp và tạo giá trị cho tham số. Thường dùng trong các hành động jsp:include, jsp:forward, jsp:plugin. Khi làm việc với hành động jsp:include, jsp:forward thì trang được nhúng hay trang chuyển tới sẽ nhận được các tham số mới với các giá trị mới. Cú pháp: <jsp:param name =“name” value =“value”/> Thuộc tính: + name:tên của tham số tham chiếu. + value: giá trị của tham số được tham chiếu. *<jsp:plugin>: hành động này cho phép tạo ra trang HTML chứa đựng tính hợp lệ của trình duyệt khách. Hành động tạo ra thẻ <object> hay <embed> để đưa ra dòng xuất của đối tượng response. Thuộc tính của jsp:plugin cung cấp cấu hình dữ liệu để thể hiện phần tử đó. Cú pháp: <jsp:plugin type =“bean | applet” code =“classfile” codebase =“relativeURLpath”> {<jsp:params> {<jsp:param .../>} </jsp:params>} </jsp:plugin> Thuộc tính:
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 26
+ type: xác định loại cần đưa vào là Bean hay Applet. + code: tên của class được nhúng. + codebase: tham chiếu cơ sở hay đường dẫn liên hệ đến tập tin plugin.class.
I.1.3. Các đối tượng ẩn (implicit object):
Các đối tuợng ẩn luôn luôn có giá trị cho việc sử dụng trong scriptlet và biểu thức
mà không cần phải khai báo trước. Hầu hết các ngôn ngữ kịch bản đòi hỏi được cung
cấp việc truy cập đến đối tượng này.
Mỗi đối tượng ẩn đều có một lớp hay giap diện được định nghĩa trong nhân java
hay gói JavaServletAPI.
I.1.3.1. Đối tượng Request:
Đối tượng này đại diện cho đối tượng javax.servlet.htttp. HttpServletRequest. Đối
tượng request nắm giữ các tham số hay dữ liệu do trình khách gửi lên.
Phương thức getParameter() nhận tên tham số và trả về giá trị chuỗi tương ứng
với tên tham số đó.
I.1.3.2. Đối tượng Response:
Là đối tượng phản hồi thông tin xử lý từ trình chủ trở về trình duyệt. Đối tượng
này dùng để xuất ra trình duyệt khách dữ liệu dưới dạng HTML.
Các phương thức thường dùng:
getWriter(): dùng thực hiện kết xuất.
sendRedirect(“ .jsp”): dùng liên kết trực tiếp đến một trang jsp.
setContentType(“text/html”): định dạng xuất
getOutputStream(): lấy dữ liệu trong vùng đệm nhờ OutputStream.
I.1.3.3. Đối tượng session:
Là đối tượng tham chiếu đến đối tượng javax.servlet.http. HttpSession. Đối tượng
này được khởi tạo bằng phương thức pageContext.getSession()để tạo trang servlet.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 27
Khi cần một biến nào đó có giá trị toàn cục từ jhi bạn mở cho đến khi kết thúc
trình duyệt đó thì đối tượng session được tạo ra. Đối tượng session tạo ra biến cục bộ
cho phép lưu một giá trị nào đó từ trang jsp này sang trang jsp khác.
I.1.3.4. Đối tượng Application:
Đối tượng này tham chiếu đến đối tượng javax.servlet.ServletContext lưu giữ cấu
hình toàn cục của Servlet và JSP.
Đối tượng Application có phạm vi hoạt động ở cấp ứng dụng nghĩa là có thể giữ
giá trị của tất cả các trang jsp ở những session khác nhau cho đến khi trình dịch JSP
engine bị đóng lại.
I.1.3.5. Đối tượng Out:
Đối tượng xuất phát từ lớp java.io.Writer. Đối tượng này dùng ghi kết xuất gửi về
trình duyệt máy khách.
I.1.3.6. Đối tượng Config:
Tượng trưng cho đối tượng ServletConfig. Được định nghĩa là đối tượng tạo bởi
Servlet chứa các thông tin cấu hình của Servlet.
I.1.3.7. Đối tượng Exception:
Đối tượng này chỉ tồn tại trong trang xử lý lỗi. Dùng tham chiếu đến nguyên nhân
gây ra lỗi mà trang error có liên quan.
I.1.4. Chu trình sống của JSP
Chu trình sống của JSP bao gồm các giai đoạn sau:
Biên dịch trang JSP
Nạp trang
Khởi tạo
Thực thi
Dọn dẹp
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 28
I.1.4.1. Biên dịch trang JSP:
Quá trình biên dịch của trang JSP được thể hiện thông qua sơ đồ sau:
Hình 3.1 - Quá trình biên dịch trang JSP
Khi trình duyệt yêu cầu trang JSP, Web server sẽ kiểm tra trang JSP đã được biên
dịch hay chưa. Nếu chưa biên dịch hoặc đã biên dịch nhưng trang JSP vừa thay đổi
trong mã nguồn thì web server sẽ thực hiện biên dịch trang JSP. Quá trình biên dịch
JSP thực tế là chuyển trang JSP thành Servlet. Tập tin biên dịch .class của trang sẽ
được đặt trong thư mục đệm (thường là WEB-INF\jsp hoặc \temp). Như bạn thấy, quá
trình biên dịch trang chỉ diễn ra một lần. Nếu trang đã biên dịch và sau đó bạn không
có thay đổi gì trong trang nguồn thì quá trình biên dịch sẽ không xảy ra, do đó tốc độ
thực thi trang sẽ nhanh hơn. Sau khi trang đã được biên dịch, mã trang sẽ được nạp
vào bộ nhớ để thực thi.
I.1.4.2. Nạp trang:
Kể từ giai đoạn này, quá trình nạp trang tương tự như servlet (thật sự thì trang
JSP qua biên dịch giờ đây đã là một servlet). Chỉ có một sự khác biệt đó là servlet chỉ
được nạp một lần trong khi mã trang JSP mặc dù đã biên dịch nhưng phải nạp lại nhiều
lần mỗi khi Web server nhận được một yêu cầu trang từ trình duyệt.
Tập tin JSP Tập tin JSP Graphics
Tập tin .java Component
Lưu trữ dữ liệu Tập tin .classTrình duyệt
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 29
I.1.4.3. Khởi tạo:
Khi nạp mã trang thành công, Web server sẽ gọi đến phương thức khởi tạo trang.
Và mặc dù, JSP được biên dịch ra servlet nhưng phương thức khởi tạo cho trang JSP
lại mang tên jspInit() chứ không phải init() như servlet.
I.1.4.4. Thực thi:
Sau quá trình khởi tạo, Web server sẽ gọi đến phương thức _jspService. Phương
thức _jspService sẽ chuyển cho bạn hai lớp đối tượng HttpServletRequest và
HttpServletResponse để đọc và ghi kết xuất trả về trình khách.
I.1.4.5. Dọn dẹp:
Khi trang JSP đã thực thi xong, trình chủ Web server sẽ gọi phương thức
jspDestroy() để giải phóng mã trang khỏi bộ nhớ.
I.2. Servlet:
I.2.1. Khái niệm:
Servlet thực sự là một mẫu chương trình viết bằng ngôn ngữ Java, được trình chủ
Web triệu gọi, sản sinh ra kết xuất phù hợp trả về cho client.
Servlet dễ sử dụng và phát triển những ứng dụng Web nhanh hơn CGI (Common
Gateway Interface). Hiện nay Servlet đã dần thay thế các ứng dụng CGI truyền thống
và là trung tâm của công nghệ Web trong Java. Servlet chạy trên máy ảo Java, xử lý và
sinh mã HTML trả về trình khách. Servlet chỉ nạp một lần bởi Web Server và có thể
duy trì các hành động giữa các yêu cầu.
I.2.2. Các phương thức xử lý cơ bản:
Thật sự lớp GenericServlet là phần cài đặt tổng quát cho đặc tả giao tiếp
(interface) mang tên Servlet. Một servlet cơ bản cần có những phương thức phục vụ
cho các nhu cầu: khởi tạo (init), hoạt động và phục vụ (service), huỷ (destroy), trả về
thông tin cấu hình (getServletInfo). Khi tạo ra servlet mới, đơn giản chỉ nên kế thừa lại
GenericServlet và xây dựng chồng (overide) các phương thức mà bạn muốn.sử dụng.
Cụ thể lớp giao tiếp Servlet được mô tả như sau:
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 30
interface Servlet { void destroy(); ServletConfig getServletConfig(); String getServletInfo();
void init(ServletConfig config); void service(ServletRequest req, ServletResponse res);
}
I.2.2.1. Phương thức khởi tạo init():
public void init();
Phương thức này được gọi khi lần đầu tiên trình chủ Web Server nạp mã thực thi
của servlet từ tập tin .class vào bộ nhớ và bắt đầu cho phép servlet hoạt động. Có thể
dựa vào phương thức này để khởi tạo các biến môi trường và giá trị ban đầu cần thiết
cho quá trình thực thi servlet sẽ diễn ra tiếp theo.
Vd:
public void init() { //Tạo kết nối đến CSDL }
I.2.2.2. Phương thức phục vụ service():
public void service(ServletRequest req, ServletResponse res) throws IOException
Sau khi phương thức init() đã hoàn tất, trình chủ Web Server sẽ triệu gọi đến
phương thức service(). Phương thức này được xem là trung tâm xử lý của servlet mà
bạn cần cài đặt. Khi trình chủ nạp servlet vào bộ nhớ, phương thức init() chỉ có thể
được gọi duy nhất một lần, trong khi phương thức service() có thể được triệu gọi nhiều
lần ứng với mỗi yêu cầu servlet phát sinh từ client.
Trong phương thức service() bạn có thể sử dụng đối tượng tham số
ServletRequest, ServletResponse để tiếp nhận dữ liệu từ trình khách chuyển lên và
xuất kết quả trở lại trình khách.
Vd:
public void service(ServletRequest request, ServletResponse response) throws IOException
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 31
{ response.setContentType(“text/html”); PrintWriter out = response.getWriter(); out.println(“<html>”); out.println(“<body>”); out.println(“<h1>Chao moi nguoi! </h1>”); … }
I.2.2.3. Phương thức huỷ destroy():
Khi servlet không còn dùng đến nữa hay hết thời gian qui định lưu trữ trong bộ
nhớ của Web Server, nó sẽ bị trình chủ giải phóng. Trước khi servlet bị huỷ phương
thức destroy() sẽ được gọi. Phương thức này có thể dùng để dọn dẹp tài nguyên mà các
biến chiếm giữ, đóng các kết nối mà phương thức init() đã mở.
I.2.2.4. Phương thức getServletConfig() và getServletInfo():
public String getServletInfo();
public ServletConfig getServletConfig();
Hai phương thức này nhằm mục đích cung cấp thông tin. Phương thức
getServletConfig() giúp người sử dụng servlet có được đối tượng servletConfig chứa
các thông tin khởi tạo từ môi trường ngoài đưa vào servlet. Phương thức
getServletInfo() trả về một chuỗi thông tin mô tả ý nghĩa và mục đích của servlet.
I.2.3. Chu trình sống của servlet:
Chu trình sống của servlet được tính từ khi servlet bắt đầu được hệ thống lưu tâm
đến (như việc gọi nạp vào bộ nhớ) cho đến khi nó bị loại ra khỏi trình chủ Web server
vì không còn cần nữa. Chu trình sống của servlet trải qua các giai đoạn sau:
Nạp servlet
Khởi tạo servlet
Thực thi servlet
Dọn dẹp servlet
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 32
I.2.3.1. Nạp servlet:
Tuy theo điều kiện, một servlet có thể được nạp vào bộ nhớ ở ba thời điểm khác
nhau: khi server khởi động, khi người quản trị yêu cầu, hoặc khi trình duyệt triệu gọi
servlet từ máy khách. Hầu hết các Web server đều cho phép bạn chọn danh sách
servlet sẽ được ưu tiên nạp lúc Web server khởi động.
Để nạp servlet, trình chủ Web server cần phải biết tên lớp của servlet. Thông
thường tên lớp của servlet (tên tập tin .class) cũng là tên mà trình duyệt dùng để triệu
gọi servlet. Chúng ta thường gọi servlet với địa chỉ URL bắt đầu với tiếp đầu ngữ
/servlet. Ví dụ địa chỉ sau http://localhost:8100/servlet/helloWorld. Cách mà trình chủ
Web server sử dụng ở đây là khi nhận được chuỗi URL triệu gọi servlet, nó sẽ phân
tích chuỗi này và nhận ra tiếp đầu ngữ /servlet. Đây chính là tên ánh xạ dùng để gọi
các servlet mặc định. Khi đó Web server sẽ truy tìm tiếp các servlet sau bí danh
/servlet (ở đây là servlet helloWorld) và triệu gọi nó thực thi. Tuy nhiên, bạn cũng có
thể ánh xạ đổi tên servlet khác với tên tập tin .class của nó thậm chí đối với cả tiếp đầu
ngữ dùng để triệu gọi servlet và vị trí thư mục chứa servlet.
Khi có một yêu cầu triệu gọi servlet, trình chủ Web server sẽ xem xét servlet đã
nạp vào bộ nhớ hay chưa, nếu chưa nó sẽ nạp servlet vào bộ nhớ. Một khi servlet đã
nạp, Web server sẽ tiến đến giai đoạn khởi tạo servlet.
I.2.3.2. Khởi tạo servlet:
Trình chủ Web server khởi tạo servlet bằng cách gọi đến phương thức init() mà
servlet cài đặt. Phương thức này chỉ gọi một lần duy nhất. Bạn có thể lợi dụng cơ hội
này để khởi tạo các biến toàn cục mà servlet sẽ sử dụng sau này.
I.2.3.3. Thực thi servlet:
Khi trình duyệt hoặc các trang JSP triệu gọi servlet thông qua địa chỉ URL, trình
chủ Web server sẽ chính thức gọi servlet thực thi thông qua các phương thức như
doGet(), doPost(), hoặc service(). Lưu ý, sau khi các phương thức này được gọi thực
thi xong, servlet vẫn giữ lại trong bộ nhớ để phục vụ cho lần triệu gọi tiếp theo. Đây
cũng chính là ưu điểm làm cho servlet thực thi nhanh hơn các ứng dụng CGI.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 33
I.2.3.4. Dọn dẹp servlet:
Servlet không giữ lại trong bộ nhớ vĩnh viễn, sẽ đến lúc cần loại servlet khỏi bộ
nhớ. Trước khi chấm dứt, Web server sẽ gọi đến phương thức huỷ destroy() của
servlet. Đây là cơ hội để servlet thực hiện một số thao tác dọn dẹp cần thiết như lưu dữ
liệu xuống đĩa, ghi nhớ trạng thái của servlet để phục vụ cho lần khởi động sau, đóng
kết nối với cơ sở dữ liệu… Và mặc dù Java có thể tự động thu gom rác trong bộ nhớ
nhưng nếu bạn đã cấp phát một khối lượng bộ nhớ lớn cho servlet trong quá trình làm
việc, bạn nên thực hiện giải phóng chúng trong phương thức destroy() này.
I.3. So sánh giữa JSP và Servlet:
Do mã trang JSP khi thực thi đều được biên dịch ra servlet cho nên tất cả những
gì servlet làm được cũng đồng nghĩa với trang JSP làm được. Viết trang JSP đôi lúc
đơn giản hơn viết servlet vì không cần phải qua bước đăng kí và biên dịch thủ công.
Tuy nhiên bạn cũng nên biết một số trường hợp cần phải phân biệt giữa JSP và Servlet
và cách sử dụng chúng.
JSP có thể trộn lẫn mã Java với các thẻ HTML, cho nên việc thiết kế trang JSP
thường đơn giản và dễ bổ sung hơn so với servlet. Tuy nhiên, đây cũng là yếu tố
không nên lạm dụng đối với JSP. Nếu bạn tập trung tất cả mã Java vào cùng với mã
HTML, một khi dự án mở rộng và trở nên phức tạp, việc bảo trì và nâng cấp ứng dụng
Web với hàng trăng trang JSP sẽ rất khó khăn. Trong quá trình phát triển ứng dụng
Web theo nhóm, việc trộn lẫn mã Java và HTML trong trang JSP cho thấy không hiệu
quả.
Với servlet, tuy phải biên dịch và đăng kí thủ công với trình chủ, nhưng bù lại
tính bảo mật cao hơn. Bạn chỉ cần cung cấp cho trình chủ Web server bản servlet nhị
phân (tập tin .class) đã qua bước biên dịch mà không cần đến mã nguồn của servlet
ban đầu. Mặt khác, các servlet có thể tương tác với nhau để tạo nên những kết xuất tuỳ
biến và đa dạng trước khi trả kết quả về cho trình khách. Servlet có thể phân rã các
đơn thể của dự án và phát triển độc lập như các thành phần riêng rẽ để ráp lại thành
một tổng thể chung. Tuy nhiên, việc kết xuất trong servlet thương dựa vào phương
thức print() hay println(). Công việc quyết định giao diện cho kết xuất hoàn toàn phụ
thuộc vào lập trình viên với hàng loạt các câu lệnh print() hay println() rất khó quản lý.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 34
II. JDBC:
II.1. Giới thiệu:
Máy tính ra đời do nhu cầu điều tác và lưu trữ thông tin của con người. Thông tin
này thường được truy cập từ trong một môi trường cơ sở dữ liệu. Do đó quả là không
đúng nếu ta giới thiệu một ngôn ngữ mới mà không cung cấp vài kiểu giao diện cho
một ngân hàng dữ liệu. Và Java cũng không ngoại lệ.
Các nhà phát triển Java đã thấy rằng họ cần một khung sườn để có thể xây dựng
một giao diện đồng nhất nằm trên nhiều hệ thống giao kết cơ sở dữ liệu khác nhau.
Một khung sườn như vậy sẽ cho phép các nhà phát triển viết một giao diện cơ sở dữ
liệu đơn lẻ trên nhiều nền tảng. Khung sườn với những tính năng như trên được mang
tên JDBC (Java Database Connection).
II.2. Khái quát:
JDBC là trình điều khiển thông dụng của Java. JDBC giúp cho JSP và Servlet
tiếp cận với các hệ quản trị cơ sở dữ liệu một cách dễ dàng thông qua ngôn ngữ SQL.
JDBC không phân ngữ chuỗi văn bản cho người dùng, nó đơn giản tác động như cầu
nối giữa người dùng và cơ sở dữ liệu, cho phép cơ sở dữ liệu phân ngữ chuỗi. Như
vậy, mọi lỗi ngoại lệ phát sinh đều bắt nguồn từ cơ sở dữ liệu, chứ không phải từ tầng
JDBC.
API JDBC bao gồm bốn lớp chính:
java.sql.DriverManager
java.sql.Connection
java.sql.Statement
java.sql.ResultSet
II.2.1. java.sql.DriverManager
java.sql.DriverManager là một lớp rất quan trọng. Mục đích chính của nó là quản
lý các tiểu trình điều khiển cơ sở dữ liệu JDBC khác nhau. Khi chạy một ứng dụng,
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 35
chính DriverManager sẽ có trách nhiệm nạp tất cả các trình điều khiển có trong tính
chất hệ thống jdbc.drivers.
II.2.2. java.sql.Connection
Khi thiết lập một tuyến nối với cơ sở dữ liệu, lớp java.sql.Connection biểu thị ví
dụ minh họa của một phiên làm việc cụ thể. Khi nào tuyến nối vẫn còn mở, ta vẫn có
thể thi hành các truy vấn SQL và có thể có các kết quả. Có thể dùng giao diện này để
truy lục thông tin liên quan đến các phần mô tả bảng và các thông tin khác về cơ sở dữ
liệu đang kết nối.
II.2.3. java.sql.Statement
Giao diện java.sql.Statement chuyển đến cơ sở dữ liệu mà chuỗi SQL cần thi
hành. Nó cũng truy lục các kết quả từ cơ sở dữ liệu dưới dạng một ResultSet.
Mỗi câu lệnh chỉ có thể mở một ResultSet vào cùng một thời điểm. Ví dụ, hai
ResultSet không thể được so sánh với nhau nếu cả hai đều bắt nguồn từ cùng câu lệnh
SQL. Nếu một câu lệnh SQL được phát lại vì một lý do nào đó, ResultSet cũ tự động
được đóng.
II.2.4. java.sql.ResultSet
Một java.sql.Resultset biểu thị cho dữ liệu được truy lục từ một câu lệnh SQL
đang được thi hành. Dữ liệu từ bộ hỏi được chuyển giao dưới dạng một bảng kết quả.
Các hàng của bảng được tuần tự trả về cho chương trình, nhờ đó các cột dữ liệu có thể
được truy cập.
Một biến con trỏ sẽ lưu giữ mẩu tin hiện đang được được truy cập. Một ResultSet
không thể quay lui. Để đọc lại một hàng được truy lục trước đó, chương trình phải
đóng ResultSet và phát lại câu lệnh SQL. Sau khi truy lục hàng chót, câu lệnh xem
như là đã được đóng, điều này có nghĩa là ResultSet tự động đóng.
Có thể truy lục các cột từ hàng hiện hành theo thứ tự bất kì. Một chương trình có
thể thu thập các giá trị bằng một số chỉ mục của cột (bắt đầu từ 1), hoặc phát biểu rõ
ràng tên cột . Về khả năng cơ động và hiệu năng, các cột nên được truy lục từ trái sang
phải và chỉ được đọc một lần.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 36
II.3. Các kiểu JDBC:
Theo đặc tả của Sun có 4 kiểu JDBC sau:
II.3.1. Kiểu 1:JDBC sử dụng cầu nối ODBC (JDBC-ODBC Bridge)
ODBC (Open Database Connectivity) là cách kết nối tổng quát nhất đến mọi hệ
cơ sở dữ liệu thông qua trình quản lý ODBC của Windows. Mỗi hệ cơ sở dữ liệu sẽ
cung cấp một trình điều khiển (driver) có khả năng đọc hiểu được cơ sở dữ liệu của
chúng. Trình điều khiển này sẽ được đăng kí với bộ quản lý ODBC. Tất cả các lệnh
truy xuất cơ sở dữ liệu đều được thực thi bằng lệnh SQL. Java cung cấp cho bạn khả
năng sử dụng JDBC để gọi ODBC. Bằng cách này bạn có thể kiểm soát được nhiều hệ
quản trị CSDL khác nhau.
Mã Java Mã đặc thù
II.3.2. Kiểu 2:JDBC kết nối trực tiếp với các trình điều khiển cơ sở dữ liệu
JDBC kết nối trục tiếp với trình điều khiển đặc thù của mỗi hệ cơ sở dữ liệu
(native database driver) mà không cần phải qua trung gian ODBC của Windows. Do
đó kiểu kết nối này sẽ nhanh và hiệu quả hơn kiểu 1. Tuy nhiên phải có các trình điều
khiển cơ sở dữ liệu đặc thù do những nhà phát triển cơ sở dữ liệu hay nhà phân phối
cung cấp.
Java Application, Applet, Servlet
JDBC Driver
ODBC
Database Driver
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 37
Mã Java Mã đặc thù
II.3.3. Kiểu 3:JDBC kết nối thông qua các ứng dụng mạng trung gian
Theo mô hình lập trình phân tán, ứng dụng trung gian trên máy chủ sẽ chịu trách
nhiệm kết nối với cơ sở dữ liệu. Nhiệm vụ của trình khách là sử dụng những trình điều
khiển JDBC gọn nhẹ, có khả năng giao tiếp với ứng dụng trung gian qua Internet để
truy vấn dữ liệu.
Mã Java internet Mã Java
Java Application, Applet, Servlet
JDBC Driver
Database Driver
Java Application, Applet, Servlet
JDBC Driver
Java Middle_Ware
Java Native Driver
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 38
II.3.4. Kiểu 4:JDBC kết nối thông qua các trình điều khiển đặc thù ở xa
Kiểu này cho phép máy khách sử dụng các trình điều khiển gọn nhẹ kết nối vào
trình điều khiển cơ sở dữ liệu đặc thù (thuần Java) trên máy chủ từ xa thông qua mạng
Internet.
Mã Java internet Mã Java
II.4. Truy xuất cơ sở dữ liệu:
Hầu hết các ứng dụng JDBC đều theo cùng các bước cơ bản sau:
II.4.1. Kết nối với cơ sở dữ liệu:
Để thiết lập kết nối, JDBC đòi hỏi 2 yếu tố là trình điều khiển (tương ứng với các
kiểu kết nối) và thông tin để kết nối (địa chỉ máy chủ, tên tài khoản đăng nhập, mật
khẩu...).
Đối với cơ chế truy xuất thông qua ODBC, sử dụng trình điều khiển do Sun cung
cấp mang tên JdbcOdbcDriver. Chúng ta khai báo tên lớp này như sau:
String drivername = “sun.jdbc.odbc.JdbcOdbcDriver”;
Tiếp đến ta gọi phương thức forName của lớp Class để nạp và khởi tạo trình điều
khiển: Class.forName(drivername).new Instance();
Kể từ lúc này bạn đã hoàn toàn có khả năng sử dụng trình điều khiển JDBC-
ODBC để truy xuất dữ liệu. Tuy nhiên, trình điều khiển của bạn cần biết thêm những
Java Application, Applet, Servlet
JDBC Driver
Java Native Driver
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 39
thông tin cụ thể như tài khoản đăng nhập, địa chỉ máy chủ chứa cơ sở dữ liệu. Trong
trường hợp sử dụng ODBC những thông tin này được chúng ta thiết lập trước đó khi
cấu hình cho chuỗi kết nối cơ sở dữ liệu lvtn bằng ODBC Driver của Windows. Bạn
đặt thông tin này trong chuỗi kết nối như sau:
String connectionURL = “jdbc:odbc:lvtn”;
String username=”sa”;
String password=””;
Ở đây chuỗi jdbc:odbc: là bắt buộc đối với trình điều khiển JDBC-ODBC. Phía
sau chuỗi này là thông tin kết nối cụ thể đến cơ sở dữ liệu lvtn của chúng ta do ODBC
quy định. Cuối cùng đối tượng Connection sẽ thể hiện kết nối đến cơ sở dữ liệu. Bạn
gọi phương thức getConnection của lớp DriverManager để yêu cầu trình điều khiển
nạp bởi Class.forName() trước đây tiếp nhận thông tin và thực thi kết nối.
Connection con = null;
con = DriverManager.getConnection(connectionURL, username, password);
Với ODBC, nếu khi thiết lập thông số cho lvtn bạn đã chỉ định rõ thông tin đăng
nhập username/ password thì có thể gọi đối tượng Connection để thực hiện kết nối đến
cơ sở dữ liệu gọn hơn như sau:
Connection con = DriverManager.getConnection(connectionURL);
II.4.2. Truy vấn dữ liệu:
Chúng ta truy vấn dữ liệu bằng các câu lệnh truy vấn SQL. JDBC truy vấn dữ liệu
dựa vào đối tượng Statement (dùng thực thi câu lệnh SQL). Truy vấn thành công thì
Statement sẽ trả về kết quả là tập dữ liệu truy vấn có kiểu ResultSet.
Ngoài đối tượng Statement, đối tượng PreparedStatement có thể được sử dụng.
Điều này tạo ra cơ hội đơn giản hóa đối tượng Statement:
Cho những câu truy vấn có tính chất lặp lại rất giống nhau ngoại trừ vài giá trị đối
số, chúng hiệu quả hơn rất nhiều vì câu SQL được biên dịch một lần và sau đó được
thực thi rất nhiều lần, với giá trị đối số được thay thế cho từng câu truy vấn.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 40
Cơ chế cho việc chèn những đối số quy định các kí tự đặc biệt theo một cách thức
cần thiết cho việc hiệu chỉnh cơ sở dữ liệu đã kết nối.
PreparedStatement có tập những câu SQL khi nó được khởi tạo. Những đối số
được xác định bởi những kí tự “?”. Sau khi xây dựng xong, những đối số có thể được
xoá đi sử dụng clearParameters và thiết lập sử dụng những phương thức setInt,
setString, … và câu truy vấn có thể được thực thi sử dụng những phương thức execute,
executeUpdate, hay executeQuery như đối với Statement.
II.4.3. Trích xuất dữ liệu:
Sau khi nhận được kết quả trả về là tập ResultSet, gọi phương thức next() để đi
đến từng mẩu tin và in ra kết quả của các cột. Dùng phương thức getString(column) để
lấy dữ liệu của các cột (các cột được đánh số thứ tự từ 1).
Nếu bạn không biết chính xác cấu trúc bảng của ResultSet, bạn có thể thu được
nó trực tiếp thông qua đối tượng ResultSetMetaData.
Một khi đã thu được ResultSet , bạn có thể từng bước thu được từng dòng của nó,
cụ thể hơn là trường của từng dòng.
Chú ý rằng số cột bắt đầu từ 1 chứ không phải 0 như trong mảng của Java. Tiện
dụng hơn nữa là có phương thức getObject cho ResultSet để lấy đối số chuỗi chứa
trong cột. Cũng có phương thức getxxx để lấy tên của cột thay vì số cột.
II.4.4. Đóng kết nối:
Một khi bạn làm việc với các đối tượng ResultSet, Connection, Statement thì
dùng phương thức close() để giải phóng tất cả các liên kết đến các nguồn.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 41
III. Java Media Framework (JMF):
III.1. Tổng quan:
Java Media Framework (JMF) là một bộ thư viện lớn và linh hoạt của Sun được
sử dụng để xử lý media dựa trên thời gian.
Hình 3.2 – Tổng quan JMF
Phiên bản hiện hành của JMF là 2.1. Phiên bản này cho phép bạn thực hiện mọi
thao tác với media mà bạn có thể hình dung được. JMF có thể:
Thực thi những tập tin media khác nhau trên Java applet hay ứng dụng
độc lập. Những định dạng được cung cấp là AU, AVI, MIDI, MPEG,
QuickTime, và WAV.
Điều khiển media theo luồng từ Internet.
Thu audio và video với micro và máy quay phim, sau đó lưu trữ dữ liệu
theo chuẩn được cung cấp.
Thực thi media dựa theo thời gian và thay đổi định dạng nội dung.
Truyền audio và video theo thời gian thực trên Internet.
Truyền radio trực tiếp hay những chương trình truyền hình.
Tuy nhiên, trước khi bạn viết một ứng dụng JMF, bạn cần hiểu kĩ về kiến trúc
JMF, những interface và class của nó.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 42
III.2. Kiến trúc JMF:
Kiến trúc của JMF có thể được thể hiện theo những phần sau:
Dữ liệu nguồn
Thiết bị thu
Máy chơi nhạc
Processor
DataSink
Format
Manager
Hình 3.3 – Kiến trúc JMF
III.2.1. Dữ liệu nguồn:
Dữ liệu nguồn chứa các luồng media tương tự như một đĩa Compact Disk. Trong
JMF, đối tượng DataSource đại diện cho audio media, video media, hay kết hợp của cả
hai. DataSource có thể thu được từ nhiều nguồn khác nhau: những tập tin cục bộ,
mạng, hay những chương trình Internet trực tiếp.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 43
III.2.1.1. Dữ liệu nguồn kéo:
Trình khách khởi tạo việc truyền dữ liệu và điều khiển luồng dữ liệu từ nguồn. Ví
dụ: HTTP và FILE là những phương thức được thiết lập cho dạng dữ liệu này.
III.2.1.2. Dữ liệu nguồn đẩy:
Trình chủ khởi tạo việc truyền dữ liệu và điều khiển luồng dữ liệu từ dữ liệu
nguồn đẩy. Ví dụ dữ liệu nguồn đẩy bao gồm việc truyền media và video theo yêu cầu.
Hình 3.4 – Dữ liệu nguồn JMF
Như chúng ta đã đề cập ở trên, một số dữ liệu nguồn có thể được kết hợp thành
một. Ví dụ, nếu bạn thu trực tiếp một cảnh, khả năng là bạn có hai nguồn dữ liệu là
audio và video. Trong tình huống này, nhu cầu đặt ra là bạn cần kết hợp cả hai để dễ
dàng cho việc điều khiển.
III.2.2. Thiết bị thu:
Thiết bị thu đại diện cho những thiết bị dùng để thu dữ liệu như micro, máy chụp
hình hay máy quay phim. Dữ liệu media thu được có thể được chuyển cho đối tượng
Player để trình diễn, thực thi, chuyển đổi kiểu dữ liệu, hay lưu trữ cho việc sử dụng
sau này.
Những thiết bị thu cũng có thể được phân loại thành nguồn kéo hay đẩy. Với
nguồn kéo, người sử dụng điều khiển nó khi thu hình. Ví dụ máy chụp hình, người
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 44
dùng nhấn nút để chụp hình. Ngược lại, micro đóng vai trò như nguồn đẩy vì nó liên
tục cung cấp luồng dữ liệu audio.
III.2.3. Player:
Player thực hiện công việc là nhập luồng dữ liệu audio hay video và trình diễn nó
ra loa hay màn hình, tương tự như chương trình chơi đĩa nhạc: đọc đĩa nhạc và phát
nhạc ra loa. Player cũng có những trạng thái tồn tại thông thường bởi vì Player phải tự
chuẩn bị và chuẩn bị dữ liệu nguồn cho bản thân nó trước khi nó có thể bắt đầu thực
thi media.
Hình 3.5 – JMF Player
Để hiểu điều này, bạn hãy cho đĩa nhạc vào máy nghe nhạc và chọn bài thứ tư
trong đĩa nhạc. Điều gì xảy ra? Chương trình nghe nhạc không phát bài nhạc ngay lập
tức. Đầu tiên nó phải tìm ra vị trí track nơi mà bài thứ tư bắt đầu và thực hiện một số
bước chuẩn bị. Sau khoảng nửa giây (tuỳ thuộc vào chương trình chơi nhạc), bạn có
thể nghe được bài nhạc. Bình thường, Player phải tiến hành theo từng bước, theo từng
trạng thái cho đến khi đạt đến trạng thái cuối cùng. JMF xác định sáu trạng thái trong
Player:
III.2.3.1. Không nhận biết:
Trong trường hợp này, đối tượng Player đã bị instantiate. Player bị instantiate
không biết gì về media mới của nó.
III.2.3.2. Nhận biết:
Player chuyển từ trạng thái không nhận biết sang trạng thái nhận biết khi bạn gọi
phương thức realize() của Player. Trong trạng thái nhận biết, Player xác định những
yêu cầu về tài nguyên phục vụ cho việc xử lý.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 45
III.2.3.3. Đã nhận biết:
Chuyển tiếp từ trạng thái nhận biết, Player chuyển sang trạng thái đã nhận biết.
Trong trạng thái này Player biết tài nguyên nào nó cần và có thông tin về loại media để
biểu diễn. Nó cũng có thể cung cấp những thành phần và điều khiển trực quan, cùng
những kết nối của nó cho những đối tượng khác trong hệ thống.
III.2.3.4. Tìm kiếm:
Khi phương thức prefetch() được gọi, Player chuyển từ trạng thái đã nhận biết
sang trạng thái tìm kiếm. Player ở trạng thái tìm kiếm chuẩn bị để trình diễn media.
III.2.3.5. Đã tìm kiếm:
Trạng thái khi Player đã chấm dứt tìm kiếm dữ liệu media và nó sẵn sàng bắt đầu.
III.2.3.6. Bắt đầu:
Trạng thái này đạt được khi bạn gọi phương thức start(). Player bây giờ đã sẵn
sàng trình diễn dữ liệu media.
Hình 3.6 – Sơ đồ trạng thái Player
III.2.4. Processor:
Processor là một dạng của player. Trong JMF API, interface Processor kế thừa từ
Player. Như vậy, Processor chấp nhận những điều khiển trình bày như Player. Không
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 46
như Player, Processor điều khiển thông qua những thứ đang trình diễn trong luồng
media.
Hình 3.7 – Xử lý JMF
Ngoài việc trình bày dữ liệu nguồn, Processor cũng có thể xuất dữ liệu media
thông qua DataSource, vì vậy nó có thể được trình bày bởi một Player hay Processor
khác, hay được chuyển đổi sang một vài định dạng khác.
Bên cạnh sáu trạng thái Player đã nói trên, Processor bao gồm hai trạng thái bổ
sung xảy ra trước khi Processor vào trạng thái nhận biết nhưng sau trạng thái không
nhận biết:
III.2.4.1. Định hình:
Processor vào trạng thái định hình từ trạng thái không nhận biết khi phương thức
configure() được gọi. Processor tồn tại trong trạng thái định hình khi nó kết nối vào
DataSource, phức hợp lại luồng nhập, truy nhập thông tin định dạng của dữ liệu nhập.
III.2.4.2. Đã định hình:
Từ trạng thái định hình, Processor chuyển sang trạng thái đã định hình khi nó
được kết nối vào DataSource và đã xác định được định dạng của dữ liệu.
Tương tự như Player, Processor chuyển tiếp sang trạng thái đã nhận biết khi
phương thức realize() được gọi.
III.2.5. DataSink:
DataSink là một interface chuẩn dành cho những đối tượng chứa nội dung media
được chuyển tới bởi DataSource và nó có thể trình bày media theo một số mục tiêu.
III.2.6. Format:
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 47
Đối tượng Format trình bày chính xác định dạng media của đối tượng. Bản thân
định dạng không mang những đối số mã hóa xác định hay thông tin thời gian toàn cục,
nó mô tả tên mã hóa của định dạng và loại dữ liệu định dạng yêu cầu.
Lớp con Format bao gồm AudioFormat và VideoFormat. VideoFormat chứa sáu
lớp con trực tiếp:
Hình 3.8 – Các định dạng JMF H261Format
H263Format
IndexedColorFormat
JPEGFormat
RGBFormat
YUVFormat
III.2.7. Manager:
Manager là một đối tượng trung gian được sử dụng giúp phối hợp để khởi tạo
những đối tượng Player, Processor, DataSource và DataSink cho phép những ứng
dụng quen thuộc của những interface JMF này được sử dụng một cách không ráp nối
với JMF. Khi một trong những phương thức create() được gọi, Manager sử dụng cơ
chế để xác định vị trí và khởi tạo đối tượng được yêu cầu.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 48
Hình 3.9 – JMF Manager Với Manager bạn có thể tạo Player từ DataSource. JMF cung cấp 4 manager:
III.2.7.1. Manager:
Sử dụng Manager để tạo ra Player, Processor, DataSource, và DataSink. Ví dụ,
nếu bạn muốn trình diễn DataSource, bạn có thể sử dụng Manager để tạo ra Player.
Manager này cung cấp bảo đảm của những gói chứa những lớp JMF, như Player
thông thường, Processor, DataSource, và DataSink.
III.2.7.2. CaptureDeviceManager:
Manager này cung cấp bảo đảm của những thiết bị thu có sẵn.
III.2.7.3. PlugInManager:
Manager này cung cấp bảo đảm của những thành phần xử lý cắm JMF có sẵn.
III.3. Các phương thức thực hiện:
III.3.1. Tạo ra Player:
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 49
Với việc lập trình multimedia sử dụng JMF, một trong những công việc khó khăn
nhất là tạo ra Player. Bạn tạo ra Player bằng cách gọi phương thức createPlayer() của
Manager. Manager sử dụng URL của media hay MediaLocator mà bạn chỉ định để tạo
ra Player thích hợp. Một khi bạn có Player, bạn có thể thu được những thành phần trực
quan của đối tượng Player. Sau đó, bạn có thể thêm những thành phần trực quan này
vào cửa sổ ứng dụng của bạn hay applet.
Để trình bày thành phần trực quan của đối tượng Player, bạn phải:
Thu được thành phần trực quan bằng cách gọi phương thức
getVisualComponent()
Thêm thành phần trực quan vào cửa sổ ứng dụng hay applet.
Player cũng có thể bao gồm bảng điều khiển với những nút quen thuộc trong
chương trình nghe nhạc như bắt đầu, kết thúc, và tạm dừng luồng media. Rất nhiều
phương thức của Player chỉ có thể được gọi khi Player trong trạng thái đã nhận biết.
Để bảo đảm rằng nó trong trạng thái này, bạn có thể sử dụng phương thức
createRealizedPlayer() của đối tượng Manager để tạo ra Player. Phương thức này cung
cấp một phương cách thuận tiện để tạo và nhận biết Player chỉ trong một bước. Khi
phương thức này được gọi, nó sẽ chặn mọi thứ lại cho đến khi Player được nhận biết.
III.3.2. Thu dữ liệu media
Thu media là một công việc quan trọng khác trong lập trình JMF. Bạn có thể thu
dữ liệu media sử dụng các thiết bị thu như micro hay máy quay phim. Sau đó nó có thể
được xử lý và trình diễn, hay được lưu trữ theo định dạng media. Để thu dữ liệu, bạn
cần phải:
Xác định vị trí thiết bị thu bạn muốn sử dụng bằng cách sử dụng đối
tượng CaptureDeviceManager
Lấy được đối tượng CaptureDeviceInfo cho thiết bị
Lấy MediaLocator từ đối tượng CaptureDeviceInfo và sử dụng nó để tạo
ra DataSource
Tạo ra một Player hay một Processor nữa sử dụng DataSource
Bắt đầu Player hay Processor để tạo ra quá trình xử lý thu dữ liệu.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 1
Bạn sử dụng CaptureDeviceManager để truy cập vào những thiết bị thu tương
thích trong hệ thống. Manager này đóng vai trò như một trung tâm bảo đảm cho tất cả
những thiết bị thu tương thích với JMF. Bạn có thể lấy được danh sách những thiết bị
tương thích bằng cách gọi phương thức getDeviceList(). Thiết bị thu được đại diện bởi
đối tượng CaptureDeviceInfo. Bạn sử dụng phương thức getDevice() của
CaptureDeviceManager để lấy CaptureDeviceInfo đối với thiết bị thu cụ thể.
Sử dụng thiết bị thu để thu dữ liệu media, sau đó bạn cần lấy MediaLocator của
thiết bị từ đối tượng CaptureDeviceInfo của nó. Bạn cũng có thể sử dụng
MediaLocator để khởi tạo Player hay Processor trực tiếp, hay sử dụng MediaLocator
để khởi tạo DataSource mà bạn có thể sử dụng như đầu vào cho Player hay Processor.
Sử dụng phương thức start() của Player hay Processor để khởi động quá trình xử lý thu
dữ liệu.
I.1. Lấy hình ảnh từ webcam sử dụng JMF:
Hình 3.10 – JMF API
I.1.1. Giới thiệu:
Bộ thư viện JMF được tạo ra tương thích với nhiều định dạng audio, video, và
nhiều loại phương tiện truyền thông dựa theo thời gian, được sử dụng bởi những ứng
dụng độc lập và applet được xây dựng theo kĩ thuật Java. Kể từ phiên bản 2.0, bộ thư
viện JMF thêm vào khả năng thu, luồng, và chuyển đổi giữa rất nhiều định dạng. Phần
này trình bày cách sử dụng JMF để lấy những hình ảnh từ một webcam.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 2
Do khả năng tương thích đối với phần cứng, phần ví dụ được xây dựng và chạy
thử trong nền Microsoft Windows sử dụng Logitech USB Webcam.
I.1.2. Tên thiết bị :
Để sử dụng một thiết bị truyền thông cụ thể, đầu tiên bạn phải biết tên mà gói
JMF chỉ đến thiết bị. Có hai cách tìm tên tương ứng, tuỳ thuộc vào ứng dụng mà bạn
đang xây dựng.
Cách dễ nhất là chạy chương trình JMStudio đi cùng với JMF API. Một khi
chương trình thực thi, chọn Capture từ mục File. Khi đó, một cửa sổ sẽ hiện ra cho
phép bạn có một số lựa chọn để xác định những thiết bị video và sound. Trong
Microsoft Windows, tên thông thường cho webcam có dạng tương tự như
vfw:Logitech USB Video Camera:0.
Cách thứ hai để lấy thông tin này là bằng lập trình (cách này có thể tiện dụng hơn
nếu bạn muốn người sử dụng ứng dụng chọn thiết bị sử dụng).
Lớp CaptureDeviceManager trong thư viện JMF cho phép truy cập vào một danh
sách những thiết bị thu tín hiệu tương thích trong hệ thống. Để lấy thông tin về một
loại thiết bị cụ thể, truyền vào đối số cho phương thức getDeviceList() là một đối
tượng định dạng. Ví dụ 1 trình bày đoạn mã sẽ in danh sách những thiết bị RGB video
tương thích trong hệ thống.
Ví dụ 1: public void printRGBDevices() { /* t•o ••i t••ng ••nh d•ng RGB m•c ••nh m•i (xem tài li•u JMF •• bi•t thêm nh•ng ••nh d•ng khác). */ RGBformat rgbFormat = new RGBFormat(); /* S• d•ng ••i t••ng Format •• l•y Vector nh•ng ••i t••ng CaptureDeviceInfo t• CaptureDeviceManager*/ Vector videoDevs = CaptureDeviceManager.getDeviceList(rgbFormat); /*Th•c hi•n vòng l•p trong k•t qu• và l•y k•t qu• ra cho ng••i dùng*/ for (int i = 0; i …
Để sử dụng thiết bị bạn cần đối tượng CaptureDeviceInfo. Đối tượng này hoặc có
thể được lấy ra từ danh sách thu được trong đoạn mã ví dụ hoặc thông qua phương
thức getDeviceName() của CaptureDeviceManager nếu sử dụng tên thiết bị xác định.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 3
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 4
I.1.3. Lấy định dạng đúng:
Hầu hết webcam tương thích với nhiều định dạng khác nhau; những thành phần
như độ nét, màu, và mỗi giây có bao nhiêu frame có thể được điều chỉnh. Những định
dạng tương thích với một thiết bị cụ thể có thể được xác định bằng cách sử dụng
phương thức getFormats() của lớp CaptureDeviceInfo. Ví dụ 2 trình bày đoạn mã cho
phép chọn định dạng.
Ví dụ 2: /* Chúng ta xem xét ••nh d•ng 160x120 v•i 24 bit màu, RGB */ Dimension wantRes = new Dimension(160, 120); int wantDepth = 24; /* L•y nh•ng ••nh d•ng t••ng thích v•i thi•t b•. Th•c t• là ki•m tra getDevice có tr• v• null hay không*/ CaptureDeviceInfo device = CaptureDeviceManager.getDevice("webcam:0"); Format[] fmts = device.getFormats(); RGBFormat userFormat = null;
I.1.4. Lấy DataSource:
Để bắt lấy ảnh từ webcam, chúng ta cần lấy đối tượng PushBufferStream của
JMF. Để thực hiện điều này, chúng ta lần lượt thực hiện các bước sau. Đầu tiên, chúng
ta cần đối tượng MediaLocator mô tả vị trí của nội dung truyền thông. Sau đó chúng ta
sử dụng đối tượng này để tạo ra DataSource sử dụng phương thức createDataSource()
của lớp Manager. Lớp Manager là dạng truy cập thông thường của JMF để lấy những
tài nguyên lệ thuộc vào hệ thống.
Trước khi chúng ta có thể sử dụng DataSource, chúng ta phải chắc chắn rằng nó
sẽ cung cấp thông tin theo định dạng chúng ta cần. Ví dụ 3 trình bày một phần mã để
tạo ra DataSource được thiết lập cho một định dạng cụ thể.
Ví dụ 3: MediaLocator loc = device.getLocator(); DataSource formattedSource = null; try { formattedSource = Manager.createDataSource(loc); } catch (IOException ioe) { System.out.println("L•i IO khi t•o dataSource"); System.exit(1); } catch (NoDataSourceException ndse) {
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 5
System.out.println("Không t•o •••c dataSource"); System.exit(1); } /* Thi•t l•p ••nh d•ng khá ph•c t•p. ••u tiên, chúng ta c•n l•y nh•ng •i•u khi•n ••nh d•ng t• dataSource chúng ta m•i t•o ra. •• làm •i•u này, chúng ta c•n tham kh•o ••i t••ng •ng d•ng interface CaptureDevice */ if (!(formattedSource instanceof CaptureDevice)) { System.out.println("DataSource không là CaptureDevice"); System.exit(1); } FormatControl[] fmtControls = ((CaptureDevice)formattedSource).getFormatControls(); if (fmtControls == null || fmtControls.length == 0) { System.out.println("Không có FormatControl t••ng thích"); System.exit(1); } Format setFormat = null; /* Ti•p theo chúng ta th•c hi•n vòng l•p trong nh•ng FormatControl t••ng thích và th• thi•t l•p ••nh d•ng cho m•t cái mà chúng ta mu•n. */
I.1.5. Lấy Processor
Hiện tại, chúng ta đã có đối tượng DataSource có thể sử dụng. Tuy nhiên, chúng
ta chưa làm được gì cả. JMF API cho phép chúng ta sử dụng DataSource này hoặc là
trình diễn truyền thông (thông qua player) hay dùng thông tin (thông qua processor).
Một lần nữa, chúng ta sử dụng Manager để tạo ra đối tượng processor, truyền
DataSource của chúng ta như là một đối số. Trước khi chúng ta có thể sử dụng
processor này, nó phải ở trong trạng thái có thể được thi hành.
Ví dụ 4: Object stateLock = new Object(); // Ph•i là bi•n toàn c•c Processor deviceProc = null; try { deviceProc = Manager.createProcessor(formattedSource); } catch (IOException ioe) { System.out.println("Không th• l•y processor cho thi•t b•: " + ioe.getMessage()); System.exit(1); } catch (NoProcessorException npe) { System.out.println("Không th• l•y processor cho thi•t b•: " +
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 6
npe.getMessage()); System.exit(1); } deviceProc.addControllerListener(this); deviceProc.realize(); while (deviceProc.getState() != Controller.Realized) { synchronized (stateLock) { try { stateLock.wait(); } catch (InterruptedException ie) { System.out.println("Thi•t b• không th• chuy•n sang tr•ng thái •ã nh•n bi•t"); System.exit(1); } } } deviceProc.start(); Ví dụ 5: /* Interface ControllerListener ch• ch•a duy nh•t m•t ph••ng th•c, controllerUpdate*/ public void controllerUpdate(ControllerEvent ce) { if (ce instanceof RealizeCompleteEvent) { System.out.println("Hoàn t•t vi•c chuy•n ••i"); synchronized (stateLock) { stateLock.notifyAll(); } } }
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 7
I.1.6. PushBufferStream:
Bây giờ processor đã thực thi, chúng ta có thể truy cập vào
PushBufferDataSource để sau đó có thể cung cấp cho chúng ta PushBufferStream.
PushBufferDataSource là một dạng đặc biệt của DataSource, nó quản lý dữ liệu theo
dạng những luồng đưa vào thông qua những đối tượng buffer. PushBufferStream cung
cấp một cách truy cập buffer thông qua luồng. Trong trường hợp này, mỗi buffer đại
diện cho một frame từ webcam.
Ví dụ 6 trình diễn đoạn mã đầy đủ hàm tạo của PushBufferStream.
Ví dụ 6: private PushBufferStream camStream; // Bi•n toàn c•c private BufferToImage converter; // Bi•n toàn c•c PushBufferDataSource source = null; try { source = (PushBufferDataSource)deviceProc.getDataOutput(); } catch (NotRealizedError nre) { /* Có th• ch•ng bao gi• x•y ra */ throw new VisionJMFException("L•i bên trong: processor không nh•n bi•t"); } PushBufferStream[] streams = source.getStreams();
I.1.7. Lấy Image:
Từ những Buffer đại diện cho những frame từ webcam, chúng ta cũng có thể tạo
ra đối tượng BufferToImage cho phép chúng ta chuyển đổi những buffer này sang ảnh
AWT để sử dụng hay trình diễn.
Ví dụ 7 trình bày phương thức có thể được sử dụng để chuyển đối tượng Image
cho ứng dụng.
Ví dụ 7: /* L•y •nh t• máy ch•p hình */ public Image getImage() { Buffer b = new Buffer(); try { camStream.read(b); } catch (IOException ioe) {
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 8
System.out.println("Không th• l•y frame t• camera"); return null; } Image i = converter.createImage(b); return i; }
I.2. Chương trình đầy đủ minh họa việc lấy ảnh từ camera:
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.media.*;
import javax.media.control.*;
import javax.media.format.*;
import javax.media.util.*;
public class FrameGrab
{
public static void main(String[] args) throws Exception
{
// Tạo thiết bị thu
CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("vfw:Microsoft
WDM Image Capture (Win32):1");
Player player = Manager.createRealizedPlayer(deviceInfo.getLocator());
player.start();
// Dừng vài giây để máy chụp hình khởi tạo
Thread.sleep(2500);
// Bắt lấy frame từ webcam
FrameGrabbingControl frameGrabber =
(FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
Buffer buf = frameGrabber.grabFrame();
// Chuyển đổi frame sang ảnh ở dạng buffer để có thể xử lý hay lưu trữ
Image img = (new BufferToImage((VideoFormat)buf.getFormat()).createImage(buf));
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 9
BufferedImage buffImg = new BufferedImage(img.getWidth(null),
img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
g.drawImage(img, null, null);
// Lưu ảnh dưới dạng JPG
ImageIO.write(buffImg, "jpg", new File("c:\\webcam.jpg"));
// Kết thúc sử dụng webcam
player.close();
player.deallocate();
System.exit(0);
}
}
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 10
CCHHƯƯƠƠNNGG 44 –– CCÀÀII ĐĐẶẶTT,, ĐĐÁÁNNHH GGIIÁÁ
VVÀÀ HHƯƯỚỚNNGG PPHHÁÁTT TTRRIIỂỂNN
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 11
I. Cài đặt: Đầu tiên chúng ta cần phải cài đặt hệ quản trị cơ sở dữ liệu MS SQL Server 2000,
Webserver Apache Tomcat 5.0.25, JMF 2.1.1e. ( Xin tham khảo ở phần Phụ lục )
MS SQL Server 2000 là một bước nhảy vọt về hệ quản trị cơ sở dữ liệu
đa người dùng của Microsoft, nhằm phục vụ cho những nhà phát triển hệ
thống cơ sở dữ liệu. Một trong những ưu điểm của SQL Server là tốc độ
nhanh, ổn định, hỗ trợ rất mạnh tiếng Việt theo chuẩn Unicode.
TomCat là trình chủ Web server có khả năng diễn dịch JSP và servlet.
TomCat miễn phí có mã nguồn mở nên được rất nhiều lập trình viên sử
dụng. Ngoài ra Tomcat còn hỗ trợ Connnection Pool rất tốt. Để sử dụng
file .war trong TomCat, đơn giản, bạn chỉ cần thực hiện lệnh copy cứng,
chép file .war vào thư mục webapps của TomCat.
JMF ( Java Media Framework ) của Sun Microsystem.
Sau đó ta sẽ lần lượt cài đặt các module của hệ thống tương ứng với các file *.exe
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 12
I.1. Tại sao cần cài đặt cơ chế chia sẻ kết nối (Connnection Pool):
Nhu cầu về kết nối đến cơ sở dữ liệu trung tâm để truy vấn dữ liệu trong các ứng
dụng Web ngày càng tăng. Về mặt kỹ thuật, các hệ cơ sở dữ liệu phải tiêu tốn rất nhiều
tài nguyên để duy trì liên tục kết nối trong quá trình truy vấn. Vì lý do này, bạn chỉ nên
mở kết nối truy vấn đến cơ sở dữ liệu chỉ khi nào thật sự cần thiết. Một khi đã hoàn tất
thao tác truy xuất, bạn phải trả lại kết nối cho những người dùng khác truy cập. Mặc
dầu vậy, mỗi một kết nối đến cơ sở dữ liệu đều đòi hỏi phải có thời gian thiết lập, phân
bổ tài nguyên ...
Các trình chủ Web server đưa ra khái niệm chia sẻ kết nối (connection share
pool) cho phép các yêu cầu về kết nối đến cơ sở dữ liệu chỉ được mở một lần và dùng
chung bởi các trang JSP hay servlet với nhau. Ví dụ, các yêu cầu về truy vấn dữ liệu
thường chỉ diễn ra trong thời gian ngắn, những trang JSP hay servlet trước khi truy
xuất dữ liệu sẽ yêu cầu hệ thống cung cấp kết nối, hệ thống của ta sẽ kiểm tra xem kết
nối đã tồn tại hay chưa. Nếu chưa, hệ thống sẽ tạo kết nối cung cấp cho trang JSP sử
dụng. Trang JSP sau khi sử dụng xong không đóng kết nối mà trả lại kết nối cho hệ
thống. Hệ thống lưu đối tượng kết nối trở lại ngăn xếp hoặc hàng đợi. Trong lời triệu
gọi trang JSP ở phiên làm việc khác, nếu cần đến truy xuất cơ sở dữ liệu hệ thống sẽ
cung cấp kết nối đã có trước đó mà không cần sử dụng lại tài nguyên của hệ thống để
tạo lại kết nối.
Ở đây, sự thuận tiện là bạn không cần quan tâm đến việc trả lại kết nối cho pool.
Web server sẽ tự động thu hồi kết nối trả về cho pool hộ bạn một khi trang JSP hay
servlet của bạn không sử dụng đến kết nối nữa.
Khi website của bạn phát triển với số lượng người truy cập lớn, cơ chế chia sẻ kết
nối (share pool) này sẽ làm tăng tốc đáng kể việc truy xuất và bảo đảm nguồn tài
nguyên hạn hẹp của trình chủ không bị tiêu hao nhiều.
I.2. Tại sao lại sử dụng JMF:
Hiện nay, có rất nhiều công cụ tương thích với Java cho phép thực hiện lấy ảnh
về từ camera. Các công cụ này khá mạnh, cho phép lập trình viên có thể dễ dàng thực
hiện những công việc tương tác với camera. Tuy nhiên, vấn đề được đặt ra ở đây là
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 13
hầu hết những bộ thư viện này đều để bán hoặc cho dùng thử trong một khoảng thời
gian nhất định. Trong khi đó, bộ thư viện JMF do Sun được tạo ra tuy khó sử dụng
hơn, nhưng nó cũng khá mạnh, và quan trọng hơn cả là việc JMF được tạo ra không vì
mục đích lợi nhuận. Những người lập trình Java chắc hẳn cũng thích làm việc với JMF
hơn vì không những nó có thể lấy ảnh từ camera mà nó còn có thể làm nhiều thứ hơn
thế nữa như: làm phần mềm chơi nhạc như Windows Media Player, xem phim, … Rất
tiện dụng, trong khi những bộ thư viện khác vừa tốn tiền, vừa chỉ sử dụng được trong
một việc duy nhất. Tóm lại, sử dụng JMF là kinh tế và hợp lý hơn cả.
Ta dùng JMStudio được đính kèm khi cài đặt JMF để xem giới thiệu những tính
năng của JMF.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 14
I.3. Hình ảnh các module của hệ thống
Trang chủ của ứng dụng Web:
Sinh viên chọn vào mục “Sinh viên - Đăng kí” trên danh sách các mục chọn để
tiến hành đăng kí. Mục chọn này sẽ mở ra một trang Web cho phép sinh viên nhập vào
các thông tin cá nhân
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 15
Sinh viên sử dụng mục “Sinh viên - Đăng nhập” để chỉnh sửa thông tin cá nhân
trước khi chụp hình làm thẻ, xem thời gian sử dụng còn lại trong học kì và trong tuần
Phần “Thủ thư - Đăng nhập” trên trang chủ cho phép thủ thư đăng nhập vào hệ
thống thực hiện các thao tác quản trị của mình
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 16
Sau khi đã đăng nhập, thủ thư sẽ vào được trang chủ dành riêng cho riêng. Từ đây
thủ thư có thể thực hiện các thao tác quản trị của mình bằng cách click vào các
hyperlink tương ứng
Hẹn ngày chụp hình cho sinh viên
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 17
Xem danh sách những ngày đã hẹn sinh viên chụp hình
Thêm tên lớp mới
Có thể chọn vào đây để sửa thông tin của những ngày hẹn
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 18
Xem danh sách các lớp
Tìm kiếm sinh viên theo MSSV, sau đó thủ thư có thể sửa thông tin của sinh viên
hoặc xóa sinh viên khỏi CSDL
Có thể chọn vào đây để xem và xóa thông tin của một lớp
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 19
Xem danh sách sinh viên
Quy định thời gian sử dụng phòng máy trong tuần và trong học kì
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 20
Cấp thời gian sử dụng phòng máy cho sinh viên sau một học kì
Ứng dụng tạo thẻ phòng máy cho phép thủ thư thực hiện việc chụp hình và in thẻ
thư viện cho sinh viên
Thẻ trước Thẻ sau
Chụp hình
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 21
Ứng dụng tạo thẻ chụp hình cho sinh viên sau khi nghe thủ thư hướng dẫn sử
dụng thư viện
Ứng dụng quản lý phòng máy cho phép thủ thư theo dõi thời gian sử dụng của
sinh viên, bằng cách quét mã vạch khi sinh viên bắt đầu và kết thúc sử dụng
Cho phép thủ thư điều chỉnh các máy hư trong phòng máy
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 1
I. Đánh giá:
I.1. Tự đánh giá:
• Ưu điểm:
o Chương trình được xây dựng đáp ứng đúng theo yêu cầu của Thư viện.
o Bản thân chương trình đã được vận hành thử tại Thư viện và thu được
kết quả cao.
o Giao diện thân thiện, dễ dùng.
o Đã xây dựng được bộ cài đặt, cho phép việc cài đặt và sử dụng một cách
dể dàng.
• Khuyết điểm:
o Do thiếu thiết bị nên chỉ thực hiện tạo thẻ dùng mã vạch một chiều, chưa
có cơ hội tiếp xúc trực tiếp với mã vạch hai chiều.
o Do thời gian hạn hẹp nên chưa thực hiện được phần hướng dẫn sử dụng
dành cho người dùng.
I.2. Thư viện đánh giá:
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 2
II. Hướng phát triển: Nếu được tiếp tục phát triển, chương trình có thể được tiếp tục xây dựng sử dụng
những công nghệ mới trong mã hoá dữ liệu như mã vạch hai chiều, thẻ từ, …
Từ những kiến thức cơ bản trong việc tương tác với thiết phần cứng, sẽ tiếp tục
xây dựng những công cụ tăng khả năng tự động trong quản lý như sử dụng tia hồng
ngoại để quản lý sinh viên ra vào phòng máy…
Tiếp tục phát triển để nâng cao khả năng quản lý, khả năng tự động hóa của
phòng máy trong việc quản lý từng máy, khả năng can thiệp vào từng máy. Khả năng
can thiệp sâu vào từng máy bao gồm những chức năng sau: tự động mở và tắt máy tính
khi sinh viên bắt đầu và kết thúc sử dụng máy; lấy địa chỉ URL của từng máy, qua đó
cho phép thủ thư có thể quản lý nội dung truy cập internet của sinh viên, …
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 3
PPHHỤỤ LLỤỤCC
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 4
I. Cài đặt hệ quản trị CSDL: MS SQL Server 2000
Hình 5.1
Hình 5.2
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 5
Hình 5.3
Hình 5.4
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 6
Hình 5.5
Hình 5.6
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 7
Hình 5.7
Hình 5.8
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 8
Hình 5.9
Hình 5.10
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 9
Hình 5.11
Hình 5.12
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 10
Sau khi cài đặt xong chạy Enterprise Manager tạo database tên là lvtn, mở SQL
Service Manager stop tạm dừng SQL Server. Copy 2 file: lvtn_Log.LDF và
lvtn_Data.MDF vào thư mục C:\Program Files\Microsoft SQL Server\MSSQL\Data.
Cuối cùng mở lại SQL Service Manager và start SQL Server.
II. Cài đặt Webserver : Apache Tomcat 5.0.25
Hình 5.13
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 11
Hình 5.14
Hình 5.15
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 1
Hình 5.16
Hình 5.17
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 2
Hình 5.18
Sau khi cài đặt xong Apache Tomcat, mở trình duyệt và gõ vào ô Address
http://127.0.0.1:8080/admin/ nhập username và password của admin để đăng nhập.
Sau đó đăng ký JNDI name cho Datasource lvtn, yêu cầu Webserver tạo một
Connection Pool cho ứng dụng web của ta. Cuối cùng copy thư mục lvtn1 vào thư mục
CATALINA_HOME\webapps\ và restart Tomcat.
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 3
Hình 5.19
Hình 5.20
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 4
Hình 5.21
I. Cài đặt JMF : Java Media Framework
Hình 5.22
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 5
Hình 5.23
Hình 5.24
QUẢN LÝ PHÒNG MÁY THƯ VIỆN BẰNG MÃ VẠCH
SVTH : Âu Dương Đạt – Lê Thành Nguyên Trang 6
TTÀÀII LLIIỆỆUU TTHHAAMM KKHHẢẢOO Trong quá trình thực hiện luận văn chúng em đã tham khảo một số tài liệu sau:
[1] Hoàng Ngọc Giao. Lập trình Java như thế nào? NXB Thống kê-Hà Nội, 1998
[2] Nguyễn Phương Lan, Hoàng Đức Hải. Lập trình ứng dụng Web với
JSP/Servlet NXB Giáo dục, 2001
[3] java.sun.com/jmf
[4] jakarta.apache.org/tomcat
[5] www.idautomation.com
[6] Báo Sài gòn Tiếp thị số ra ngày 31/7/2003