Tải bản đầy đủ (.docx) (63 trang)

THỰC TẬP ĐỀ TÀI - Bán vé xe khách

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.38 MB, 63 trang )

MỤC LỤC
CHƯƠNG 1. TỔNG QUAN VỀ LINQ..............................................................6
1.1. TÌM HIỂU LINQ..........................................................................................6
1.1.1. Giới thiệu về linq...................................................................................6
1.1.2. Các loại linq..........................................................................................7
1.1.3. So sánh Linq và các công cụ khác.........................................................8
1.1.4. Cú pháp của linq to sql........................................................................12
CHƯƠNG 2. CÁC CÔNG CỤ HỖ TRỢ ĐỂ THIẾT KẾ WEB.....................19
2.1. JAVASCRIPT.............................................................................................19
2.1.1. Làm quen với Javascript......................................................................19
2.1.2. Các thành phần chính..........................................................................19
2.1.3. Quản lý lỗi...........................................................................................24
2.1.4. Phạm vi ảnh hưởng của lỗi..................................................................25
2.2. AJAX..........................................................................................................25
2.3. AJAXTOOLKIT.........................................................................................26
2.4. JQUERY.....................................................................................................28
2.4.1. Tự host Jquery.....................................................................................30
2.4.2. Dùng phiên bản có sẵn trên server của Google....................................30
2.4.3. Cách sử dụng jquery............................................................................30
2.5. CAPTCHA.................................................................................................32
2.5.1. Đặc điểm.............................................................................................33
2.5.2. Nguồn gốc...........................................................................................33
2.5.3. Ứng dụng.............................................................................................34
2.5.4. Ứng dụng captcha trong ASP.Net........................................................34
CHƯƠNG 3. PHÂN TÍCH, THIẾT KẾ VÀ CÀI ĐẶT BÀI TOÁN QUẢN
LÝ BÁN VÉ XE ......................................................................................................36
3.1. KHẢO SÁT HIỆN TRẠNG VÀ ĐẶC TẢ HỆ THỐNG............................36
3.1.1. Mục tiêu của hệ thống thông tin..........................................................36
3.1.2. Đặc tả các yêu cầu của hệ thống..........................................................37
3.2. PHÂN TÍCH HỆ THỐNG..........................................................................39
3.2.1. Xác định các ca sử dụng của hệ thống.................................................39




Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 1-

3.2.2. Xác định các gói ca sử dụng, lược đồ ca sử dụng chi tiết....................40
3.3. THIẾT KẾ HỆ THỐNG.............................................................................45
3.3.1. Thiết kế ca sử dụng “Đăng nhập hệ thống”.........................................45
3.3.2. Thiết kế ca sử dụng “Đổi mật khẩu”....................................................47
3.3.3. Thiết kế ca sử dụng “Quản lý lịch trình”.............................................49
3.3.4. Quản lý đặt vé......................................................................................51
3.3.5. Thiết kế cơ sở dữ liệu..........................................................................53
3.4. CÀI ĐẶT....................................................................................................61

Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 2-

PHỤ LỤC HÌNH ẢN

Hình 1.1 Cơ sở dữ liệu.................................................................................................12
Hình 3.1 Lược đồ ca sử dụng tổng quát.......................................................................40
Hình 3.2 Quản lý đăng nhập........................................................................................41
Hình 3.3 Quản lý danh mục phương tiện.....................................................................42
Hình 3.4 Quản lý khách hàng......................................................................................43
Hình 3.5 Quản lý bán vé..............................................................................................44

Hình 3.6 Quản lý thống kê - báo cáo...........................................................................44
Hình 3.7 Uc đăng nhập................................................................................................45
Hình 3.8 Biểu đồ hoạt động đăng nhập........................................................................47
Hình 3.9 Uc đổi mật khẩu............................................................................................47
Hình 3.10 Biểu đồ hoạt động đổi mật khẩu..................................................................49
Hình 3.11 Uc quản lý lịch trình....................................................................................49
Hình 3.12 Biểu đồ hoạt động quản lý lịch trình...........................................................51
Hình 3.13 Uc đặt vé.....................................................................................................51
Hình 3.14 Biểu đồ hoạt động quản lý đặt vé................................................................52
Hình 3.15 Mô hình E-R Loại tài khoản và Tài khoản..................................................53
Hình 3.16 Bảng cơ sở dữ liệu Loại tài khoản và Tài khoản.........................................53
Hình 3.17 Mô hình E-R Bán vé và Trả vé....................................................................54
Hình 3.18 Bảng cơ sở dữ liệu Bán vé và Trả vé...........................................................54
Hình 3.19 Mô hình E-R Bến và Tuyến........................................................................55
Hình 3.20 Bảng cơ sở dữ liệu Bến và Tuyến................................................................55
Hình 3.21 Mô hình E-R Xe và Đơn vị vận tải..............................................................56
Hình 3.22 Bảng cơ sở dữ liệu Xe và Đơn vị vận tải.....................................................56
Hình 3.23 Mô hình E-R Xe và Loại xe........................................................................57
Hình 3.24 Bảng cơ sở dữ liệu Xe và Loại xe...............................................................57
Hình 3.25 Mô hình E-R Xe, Tuyến, Tài xế và Bán vé.................................................58
Hình 3.26 Bảng cơ sở dữ liệu Xe, Tuyến, Tài xế và Bán vé........................................59
Hình 3.27 Bảng cơ sở dữ liệu tổng quát.......................................................................60

Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 3-


KÝ HIỆU VÀ VIẾT TẮT
Ado.net
AJAX
CAPTCHA

CLR
CSDL
CSS
DBA
DOM XML API
HTML
Jquery

Linq
MSDN
MVC
O/ RM
OCR
Sql
Xml

(ActiveX Data Objects - là công nghệ cho phép các ứng dụng có
thể kết nối và làm việc với các loại cơ sở dữ liệu khác nhau.
Asynchronous JavaScript and XML.
Completely Automated Public Turing test to tell Computers and
Humans Apart - Phép thử Turing công cộng hoàn toàn tự động
để phân biệt máy tính với người.
Common Language Runtime - môi trường thời gian chạy.
Cơ sở dữ liệu.
Cascading Style Sheet - bảng kiểu xếp chồng

database administrator - người quản trị cơ sở dữ liệu.
Document Object Model - eXtensible Markup Language Application Programming Interface: Mô hình đối tượng tài liệu.
HyperText Markup Language - Ngôn ngữ đánh dấu siêu văn bản.
Jquery chính là một thư viện kiểu mới của Javascript giúp đơn
giản hóa cách viết Javascript và tăng tốc độ xử lý các sự kiện
trên trang web.
Language Integrated Query - ngôn ngữ tích hợp truy vấn.
Microsoft Software Developer Network.
Model-View-Controller.
Object Relational Mapping.
Optical Character Recognition -Nhận dạng ký tự quang học.
Structure Query Language - Ngôn ngữ truy vấn cấu trúc.
eXtensible Markup Language - Ngôn ngữ đánh dấu mở rộng.

Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 4-

LỜI NÓI ĐẦU
Đi lại là nhu cầu không thể thiếu trong cuộc sống hằng ngày, hiện nay đi lại
chúng ta có thể sử dụng nhiều loại phương tiện khác nhau như xe khách, tàu lửa, máy
bay,... Khi đi lại ta thường gặp các khó khăn: Thứ nhất là việc mua vé, trả vé và thay
đổi tuyến đi. Thứ hai là tình trạng như mua vé nhưng không được ngồi đúng chỗ, tình
trạng xe dù, chèo kéo thêm khách dọc đường, tài xế chạy không đúng quy định hay là
thu tiền cao hơn so với giá mà bến xe đã đưa ra ...
Vì vậy mà trong thời đại công nghiệp hóa, hiện đại hóa đất nước việc quản lý
bến xe là một vấn đề cấp thiết và đáng quan tâm. Hiện nay một số bến xe và nhà xe

đang còn quản lý theo kiểu truyền thống tức là khách hàng phải đến tận công ty để
mua hoặc hủy hoặc thay đổi lịch trình của mình và việc quản lý nhân sự, tuyến mang
tính thủ công, như vậy sẽ rất lãng phí thời gian và tiền bạc. Với sự phát triển ngày càng
cao của mạng Internet thì ứng dụng công nghệ thông tin vào việc quản lý các bến xe là
một nhu cầu tất yếu và thiết thực trong cuộc sống hằng ngày.
Bên cạnh việc quản lý bến xe thì việc mua bán vé cũng là vấn đề quan trọng.
Với sự phát triển ngày càng mạnh của xu hướng mua bán qua mạng Internet. Phát triển
đặt vé qua mạng sẽ có nhiều thuận lợi cho khách hàng như họ không cần đến công ty
nhưng vẫn có thể đặt mua và trả vé theo nhu cầu của mình.
Song song với các yêu cầu ngoài thực tế thì ngày nay các công nghệ của ngành
công nghệ thông tin phát triển một cách nhanh chóng, ứng dụng các công nghệ này
vào bài toán cụ thể là rất quan trọng và cần thiết đối với người lập trình. Với các lý do
trên em quyết định chọn đề tài: “Tìm Hiểu Linq và Quản Lý Bán Vé Xe” trong khóa
luận của mình.
Bố cục của khóa luận được chia thành 3 chương:
Chương 1: Tìm hiểu LINQ chương này trình bày tổng quan về LINQ, ưu nhược
điểm, cú pháp của LINQ và so sánh với các công nghệ khác.
Chương 2: Các công cụ hỗ trợ để thiết kế web chương này giới thiệu một số
khái niệm và làm quen với Javascript, Ajax, Ajaxtoolkit, Jquery, Captcha.
Chương 3: Phân tích thiết kế và cài đặt bài toán quản lý bán vé xe chương này
trình bày về các vấn đề khảo sát, đặc tả, phân tích, và thiết kế hệ thống.

Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 5-

CHƯƠNG 1. TỔNG QUAN VỀ LINQ


1.1. TÌM HIỂU LINQ
1.1.1. Giới thiệu về linq
a. Sự ra đời của linq
Đã lâu lắm rồi, hơn 2 thập niên, ngành công nghiệp phần mềm mới chứng kiến
một cuộc đổi thay mang tính bước ngoặc về mặt ngôn ngữ. Đó chính là LINQ, một
cuộc cách tân khá táo bạo. LINQ mang hơi hướng của một ngôn ngữ lập trình không
hướng đối tượng. Bản chất của LINQ chính là thống nhất sự khác biệt giữa hai mô
hình: Đối tượng và dữ liệu. Bên Java có Hibernate thì LINQ cũng tương tự như vậy,
nó đưa ra khả năng lập trình mới trong .NET kiểu truy vấn: Sql database, Objects và
Xml (eXtensible Markup Language - ngôn ngữ đánh dấu mở rộng) - Giải pháp lập
trình hợp nhất, đem đến khả năng truy vấn dữ liệu theo cú pháp SQL(Structure Query
Language - ngôn ngữ truy vấn cấu trúc) trực tiếp trong C# hay Visual Basic.NET, áp
dụng cho tất cả các dạng dữ liệu từ đối tượng đến cơ sở dữ liệu quan hệ và XML. Xử
lý thông tin hay dữ liệu là nhiệm vụ quan trọng nhất của bất kỳ phần mềm nào và một
trong những trở ngại chính mà các nhà phát triển hiện nay phải đối mặt là khác biệt
giữa ngôn ngữ lập trình hướng đối tượng và ngôn ngữ truy vấn dữ liệu, vấn đề càng
phức tạp hơn với sự xuất hiện của XML. Hiện tại, cách phổ biến nhất để ứng dụng lấy
dữ liệu từ các hệ cơ sở dữ liệu là sử dụng SQL.
Để giảm gánh nặng thao tác trên nhiều ngôn ngữ khác nhau và cải thiện năng suất
lập trình, Microsoft đã phát triển giải pháp tích hợp dữ liệu cho .NET Framework có
tên gọi là LINQ (Language Integrated Query), do Anders Hejlsberg xây dựng, thường
được gọi Microsoft Linq. Đây là thư viện mở rộng cho các ngôn ngữ lập trình C# và
Visual Basic.NET (có thể mở rộng cho các ngôn ngữ khác) cung cấp khả năng truy
vấn trực tiếp dữ liệu Object, cơ sở dữ liệu và XML. Truy vấn dữ liệu đối tượng trong
bộ nhớ dữ liệu cần phải đổ vào bộ nhớ để xử lý, nhưng một khi tách khỏi nơi gốc của
nó thì khả năng truy vấn rất kém. Chúng ta có thể dễ dàng truy vấn thông tin khách
hàng móc nối với thông tin đơn hàng của họ từ cơ sở dữ liệu SQL Server nhưng không
dễ gì thực hiện tương tự với thông tin trong bộ nhớ. Trong môi trường .NET, thông tin
Sinh viên thực hiện:



Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 6-

(trong bộ nhớ) thường được thể hiện ở dạng các đối tượng và trước LINQ, không có
cách nào để móc nối các đối tượng hay thực hiện bất kỳ thao tác truy vấn nào. LINQ
chính là giải pháp cho vấn đề này. Với Microsoft .NET platform, ngôn ngữ hỗ trợ
chính đó chính là C# và Visual Basic.NET. Những người lập trình viên họ thường gặp
rắc rối và cảm thấy khó chịu với việc truy cập dữ liệu ở những nguồn khác nhau. Đặc
biệt là hai loại dữ liệu XML và cơ sở dữ liệu. Các vấn đề về truy xuất dữ liệu như sau:
Chúng ta không lập trình tương tác với cơ sở dữ liệu tại cấp độ dữ liệu cục bộ. Vì
thế lỗi thường khó phát hiện rõ. Khó khăn trong việc quản lý lỗi xảy ra.
Kiểu dữ liệu khác nhau trong mỗi nguồn dữ liệu ở XML và cơ sở dữ liệu. Đặc
biệt date và time. Chính các nhà phát triển ở Microsoft đưa ra 1 nền tảng mới trong
việc truy vấn dữ liệu với các nguồn khác nhau (Object, XML, cơ sở dữ liệu). Đó là
LINQ, đây là công nghệ hỗ trợ cơ chế truy vấn dữ liệu ở tất cả các kiểu. Những kiểu
này bao gồm mảng(List, Vector), XML, cơ sở dữ liệu và hơn thế nữa. Kết quả trả về
của LINQ người ta gọi là sequence. Hầu hết sequence là IEnumerable<T> với T là
kiểu dữ liệu của những đối tượng trong sequence. LINQ sẽ cung cấp cách duy nhất để
truy cập dữ liệu từ bất kể nguồn dữ liệu nào với cú pháp giống nhau.
b. Định nghĩa linq
Theo định nghĩa trên thư viện MSDN của Microsoft LINQ là một tập hợp các
phần mở rộng của .Net Framework. Nó bao gồm ngôn ngữ tích hợp truy vấn, thiết lập
và chuyển đổi hoạt động. Nó mở rộng C# và Visual Basic với cú pháp ngôn ngữ bản
địa cho các truy vấn và cung cấp các thư viện lớp để tận dụng những khả năng thuận
lợi của nó.
1.1.2. Các loại linq
a. Linq to sql

Là một phiên bản hiện thực hóa của O/ RM (Object Relational Mapping) có bên
trong .NET Framework 3.5, cho phép mô hình hóa một số cơ sở dữ liệu dùng các
lớp .NET. Sau đó chúng ta có thể truy vấn cơ sở dữ liệu dùng LINQ, cũng như cập
nhật / thêm/ xóa dữ liệu từ đó.
LINQ to SQL hỗ trợ đầy đủ transaction (giao dịch), view (khung nhìn) và các
stored procedure (thủ tục lưu trữ). Nó cũng cung cấp một cách dễ dàng để thêm khả
năng kiểm tra tính hợp lệ của dữ liệu và các quy tắc vào trong mô hình dữ liệu.
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 7-

b. Linq to xml
XML là một ngôn ngữ được ứng dụng rất nhiều trong lập trình, xử lý dữ liệu cũng
như truyền tải thông tin. Trước đây việc thao tác và tạo ra các tài liệu XML thông qua
DOM XML API trong .Net rất dài dòng và rắc rối. Vì thế để khắc phục điều này,
Microsoft đã cho ra đời LINQ cùng với LINQ to XML API.
c. Linq to Objects
“LINQ to Objects” ở đây có nghĩa là nói đến cách sử dụng LINQ đối với các đối
tượng Collection mà đã được thực thi giao diện IEnumerable hoặc IEnumerable<T>
tức những collection có thể “liệt kê” ra được. Đây là trường hợp sử dụng đơn giản nhất
của LINQ khi làm việc với dữ liệu. Các kiểu Collection có sẵn trong .NET như
List<T>, Array, Dictionary<TKey, TValue>, … đều có thể sử dụng được với LINQ và
chúng ta hoàn toàn có thể tạo những kiểu Collection có thể làm việc được với LINQ.
Về mặt hình thức, LINQ là một cách thể hiện của các vòng lặp for, foreach. Nhưng
về thực tế LINQ đem lại nhiều lợi ích hơn: Cách viết dễ dàng cho việc đọc và phân
tích. Trường hợp này sẽ được thể hiện rõ ràng khi chúng ta cần lọc những dữ liệu với
nhiều điều kiện phân cấp nhau thì LINQ sẽ thể hiện rõ tính ưu việt của mình; LINQ

cũng cung cấp những bộ lọc, sắp xếp thứ tự, nhóm dữ liệu với khối lượng code tối
thiểu nhưng vẫn bảo đảm tính rõ ràng như ở trên; Trong trường hợp chúng ta cần
chuyển dữ liệu từ nguồn dữ liệu này sang nguồn dữ liệu khác, thì LINQ sẽ giảm thiểu
sự thay đổi của dữ liệu trong quá trình di chuyển.
1.1.3. So sánh Linq và các công cụ khác
a. Linq và ado.net
LINQ là tập mở rộng cho phép viết các câu truy vấn ngay trong các ngôn ngữ lập
trình. Nó cho phép chúng ta làm việc với các kiểu tập hợp dữ liệu, như XML,
collection, array,… và cả cơ sở dữ liệu.
ADO.NET là công nghệ cho phép các ứng dụng có thể kết nối và làm việc với các
loại cơ sở dữ liệu khác nhau (truy vấn, cập nhật, thêm, xóa, gọi thủ tục…).
Bản thân LINQ không phải là một công nghệ được tạo ra để thay thế ADO.NET,
chúng ta có thể làm việc với LINQ mà không dính gì đến cơ sở dữ liệu. Tuy nhiên,
LINQ to SQL, là một phần mở rộng của LINQ, cho phép chúng ta có thể làm việc
được với cơ sở dữ liệu SQL Server, trong trường hợp này thì khi viết chúng ta có thể
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 8-

bỏ qua các câu lệnh ADO.NET mà chỉ quan tâm tới cú pháp mà LINQ cung cấp.
Ta không hề dùng đến ADO.NET khi viết chương trình sử dụng LINQ to SQL,
nhưng đằng sau nó, ADO.NET vẫn được dùng để thực hiện kết nối, gửi các câu lệnh,
các lời gọi thủ tục…
b. Linq với sql
SQL chỉ được dùng để truy vấn dữ liệu trong các cơ sở dữ liệu dạng quan hệ, nếu
muốn truy cập các dạng dữ liệu khác như HTML, XML v.v… thì đây là điều không thể
đối với SQL và có thể đối với LINQ. Do đó có thể nói đây là một ưu điểm khác của

LINQ mà SQL không có.
Ưu điểm của LINQ.
Nói về quy luật cơ bản trong lập trình là dữ liệu phải nằm trong bộ nhớ chính. Do
đó khi cần dữ liệu chúng ta phải dùng cách nào đó để đưa dữ liệu vào bộ nhớ (đọc file
văn bản, truy vấn từ database …). Trong môi trường .NET, dữ liệu trong bộ nhớ
thường được thể hiện ở dạng các đối tượng và trước LINQ, chúng ta không có cách
nào để móc nối các đối tượng hay thực hiện bất kỳ thao tác truy vấn nào. LINQ chính
là giải pháp cho vấn đề này.
Trước đây, cách phổ biến nhất để ứng dụng lấy dữ liệu từ các hệ cơ sở dữ liệu là
sử dụng SQL. SQL có cú pháp rất khác với những ngôn ngữ lập trình phổ dụng như
C# và Visual Basic.NET, do vậy chúng ta phải tốn công “hàn gắn” hai thực thể khác
biệt này với nhau trong mỗi dự án phần mềm. LINQ ra đời để giảm gánh nặng thao tác
“hàn gắn” trên nhiều ngôn ngữ khác nhau.
Một vấn đề khác với SQL là nó chỉ dùng để truy vấn dữ liệu trong các cơ sở dữ
liệu dạng quan hệ. Nếu muốn truy cập dữ liệu XML hay dạng khác (như trang HTML,
email…), chúng ta lại phải sử dụng cú pháp truy vấn khác. Cách giải quyết vấn đề tốt
nhất hiện nay là LINQ.
Về vấn đề “Error” chúng ta không lập trình tương tác với cơ sở dữ liệu tại cấp độ
native language. Vì thế lỗi thường khó phát hiện rõ. Khó khăn trong việc quản lý lỗi
xảy ra.
Về vấn đề cú pháp truy vấn thì trước khi có LINQ chúng ta chưa có 1 cú pháp
chung nào cho truy vấn dữ liệu từ những nguồn khác nhau. Với LINQ nó sẽ cung cấp
cách duy nhất để truy cập dữ liệu từ bất kể nguồn dữ liệu nào với cú pháp giống nhau.
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 9-


Ngoài ra cách viết dễ dàng cho việc đọc và phân tích. Trường hợp này sẽ được thể hiện
rõ ràng khi chúng ta cần lọc những dữ liệu với nhiều điều kiện phân cấp khác nhau thì
LINQ sẽ thể hiện rõ tính ưu việt của mình. LINQ cũng cung cấp những bộ lọc, sắp xếp
thứ tự, nhóm dữ liệu với khối lượng code tối thiểu nhưng vẫn bảo đảm tính rõ ràng.
c. LINQ to SQL và Entity Framework
LINQ to SQL và Entity Framework có rất nhiều điểm chung, nhưng mỗi công
nghệ có những đặc tính riêng nhắm đến những trường hợp khác nhau trong Orcas (bản
VS 2008).
LINQ to SQL có các đặc tính hướng đến việc phát triển nhanh ứng dụng với cơ sở
dữ liệu Microsoft SQL Server. LINQ to SQL cho phép chúng ta có một cái nhìn chặt
chẽ về kiểu với cấu trúc của cơ sở dữ liệu. LINQ to SQL hỗ trợ việc ánh xạ 1-1 trực
tiếp cấu trúc dữ liệu của chúng ta vào các lớp; một bảng đơn có thể được ánh xạ vào
một cấu trúc phân cấp và các khóa ngoài có thể ánh xạ thành các quan hệ stronglytyped. Chúng ta có thể thực hiện truy vấn trên các các bảng, các view hay thậm chí các
kết quả dạng bảng trả về bởi một function thông qua các phương thức. Một trong
những mục tiêu thiết kế chính của LINQ to SQL là nhằm làm cho nó có thể dùng được
ngay đối với những trường hợp thông thường; vậy nên, ví dụ chúng ta truy cập một tập
các order thông qua thuộc tính Orders của một customer, và các order của customer đó
chưa được đọc vào, LINQ to SQL sẽ tự động đọc vào từ cơ sở dữ liệu cho chúng ta.
LINQ to SQL dựa trên những quy ước cho trước, chúng ta có thể dựa trên các quy ước
này để tùy biến, chẳng hạn như thay đổi các thao tác mặc nhiên cho việc insert, update
và bằng cách tạo ra những câu lệnh thao tác với cơ sở dữ liệu. Các phương thức này có
thể gọi các thủ tục trong cơ sở dữ liệu hay thực hiện thêm các thao tác để xử lý các
thay đổi.
Entity Framework có các đặc tính nhắm đến các ứng dụng doanh nghiệp. Trong
một doanh nghiệp, một cơ sở dữ liệu thông thường được kiểm soát bởi DBA (người
quản trị cơ sở dữ liệu), cấu trúc của cơ sở dữ liệu thông thường được tối ưu cho việc
lưu trữ (hiệu năng, tính toàn vẹn, phân hoạch) hơn là cho một mô hình ứng dụng tốt,
và có thể thay đổi qua thời gian khi dữ liệu và việc sử dụng phát triển lên. Với ý tưởng
này, Entity Framework được thiết kế xung quanh việc xây dựng một mô hình dữ liệu
hướng tới ứng dụng, ít phụ thuộc, thậm chí có thể khác một chút so với cấu trúc cơ sở

Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 10-

dữ liệu thực sự. Ví dụ: chúng ta có thể ánh xạ một lớp đơn (hay “thực thể”) và nhiều
table/view, hay ánh xạ nhiều lớp vào cùng một table/view. Chúng ta có thể ánh xạ vào
một cấu trúc phân cấp vào một table/view đơn (như trong LINQ to SQL) hay vào
nhiều table/view (ví dụ: person, customer, employee có thể nằm trong các bảng riêng
biệt vì customer và employee chỉ chứa thêm một số thông tin không có trong person,
hoặc lặp lại các cột từ bảng person). Chúng ta có thể nhóm các thuộc tính vào các kiểu
phức hợp (“complex” hay “composite”), ví dụ một kiểu Customer có thể có thuộc tính
“Address” với kiểu Address có các thuộc tính Street, City, Region, Country và Postal).
Entity Framework cũng cho phép chúng ta biểu diễn quan hệ nhiều-nhiều một cách
trực tiếp, mà không cần tới bảng kết nối như một thực thể trong mô hình dữ liệu và có
một đặc tính mới được gọi là “Defining Query”, có thể được dùng cho việc biểu diễn
một bảng ảo với dữ liệu lấy từ một câu truy vấn (ngoài trừ việc cập nhật phải thông
qua một stored procedure). Khả năng ánh xạ mềm dẻo này, bao gồm tùy chọn dùng các
stored procedure để xử lý các thay đổi, có thể được thực hiện chỉ bằng cách khai báo,
hoặc chỉnh sửa lại khi yêu cầu thay đổi, mà không cần phải biên dịch lại ứng dụng.
Entity Framework bao gồm LINQ to Entities đưa ra nhiều tính năng giống với
LINQ to SQL trên mô hình ứng dụng ở mức khái niệm; chúng ta có thể xây dựng các
câu truy vấn trong LINQ (hay trong “entity SQL”, một phiên bản mở rộng của SQL để
hỗ trợ các khái niệm như strong-typing, đa hình, kiểu phức hợp…) trả về kết quả ở
dạng các đối tượng CLR (Common Language Runtime - môi trường thời gian chạy),
thực thi các thủ tục hay các hàm trả về kiểu bảng thông qua các phương thức, và cho
phép gọi một phương thức để lưu lại các thay đổi.
Tuy nhiên, Entity Framwork còn hơn cả LINQ to Entities; nó bao gồm một lớp lưu

trữ cho phép chúng ta dùng cùng mô hình ứng dụng mức khái niệm thông qua giao
diện ADO.NET ở mức thấp dùng Entity SQL và trả lại kết quả một cách hiệu quả nhờ
các DataReader, giảm thiểu tải khi dùng trong các ngữ cảnh chỉ có đọc và không có
các xử lý thêm.
Vậy nên, trong khi có nhiều phần bị trùng lắp, LINQ to SQL được nhắm đến việc
phát triển nhanh ứng dụng cùng SQL Server, còn Entity Framework cung cấp các lớp
truy xuất đối tượng và lưu trữ dữ liệu cho Microsoft SQL Server cũng như các cơ sở
dữ liệu khác thông qua khả năng ánh xạ mềm dẻo và ít phụ thuộc vào cấu trúc của cơ
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 11-

sở dữ liệu.
1.1.4. Cú pháp của linq to sql
Để dễ dàng thể hiện cú pháp của linq to sql, giả sử đã có CSDL:
QuanLy_BenXePhiaNam gồm hai bảng có quan hệ:
tblBanVe

tblLichTrinh

maBan

maLichTrinh

thoiDiemBan

soXe


daTraTien

maTuyen

nguoiXacNhan

thoiDiemDi

maLichTrinh

moTa

soTien

hoatDong

soLuongVe

maTaiXe

nguoiMua
mailQuaHan
daNhanVe

Hình 1.1.4.a.1..1 Cơ sở dữ liệu
Khi tạo ra lớp DataContext chứa hai bảng ở trêntblDonViVanTai
thì C# tự động tạo ra chuỗi kết
nối đến cơ sở dữ liệu (CSDL), chuỗi kết nối lưu trong file web.config. Do đó, khi thay
đổi các thông tin như tên máy chủ, user name, password thì ta có thể sửa ở file này:

<connectionStrings>

name="QuanLyConnectionString"

=.\sqlexpress;Initial

connectionString="Data

Catalog=QuanLy_BenXePhiaNam;Persist

Source
Security

Info=True;User ID=sa;Password=123"
providerName="System.Data.SqlClient" />
</connectionStrings>
Khi tạo ra file DataContext thì C# sẽ tự động tạo ra lớp <tên file> + DataContext
trong lớp này có:


5 hàm dựng để người dùng tùy biến kết nối đến CSDL.



Cứ mỗi bảng tham gia vào DataContext thì sẽ có:

- Một thuộc tính có tên <tên bảng> + s hoặc es để lấy tất cả dữ liệu của bảng này
về.
Sinh viên thực hiện:



Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 12-

- Một lớp có tên là tên bảng với số lượng trường của bảng và của lớp giống nhau,
có bao nhiêu trường sẽ tạo ra bấy nhiêu thuộc tính.
Ví dụ: Bảng tblLichTrinh tham gia vào DataContext thì C# sẽ tự động phát sinh
lớp tblLichTrinh bao gồm các thuộc tính và trường như sau:
public System.Data.Linq.Table<tblLichTrinh> tblLichTrinhs
{
get
{
return this.GetTable<tblLichTrinh>();
}
}
public partial class tblLichTrinh: INotifyPropertyChanging,
INotifyPropertyChanged
{
private long _maLichTrinh;
private string _soXe;
private System.Nullable<long> _maTuyen;
private System.Nullable<System.DateTime>
_thoiDiemDi;
private string _moTa;
private System.Nullable<bool> _hoatDong;
private System.Nullable<long> _maTaiXe;
public long maLichTrinh
{

get
{
return this._maLichTrinh;
}
set
{
if ((this._maLichTrinh != value))
{
this.OnmaLichTrinhChanging(value);
this.SendPropertyChanging();
this._maLichTrinh = value;
this.SendPropertyChanged("maLichTrinh");
this.OnmaLichTrinhChanged();
}
}
}
public string soXe
{
get
{
return this._soXe;
}
set
{
if ((this._soXe != value))
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe


-Trang 13-

{
this.OnsoXeChanging(value);
this.SendPropertyChanging();
this._soXe = value;
this.SendPropertyChanged("soXe");
this.OnsoXeChanged();
}
}
}
public System.Nullable<long> maTuyen
{
get
{
return this._maTuyen;
}
set
{
if ((this._maTuyen != value))
{
this.OnmaTuyenChanging(value);
this.SendPropertyChanging();
this._maTuyen = value;
this.SendPropertyChanged("maTuyen");
this.OnmaTuyenChanged();
}
}
}
public System.Nullable<System.DateTime> thoiDiemDi

{
get
{
return this._thoiDiemDi;
}
set
{
if ((this._thoiDiemDi != value))
{
this.OnthoiDiemDiChanging(value);
this.SendPropertyChanging();
this._thoiDiemDi = value;
this.SendPropertyChanged("thoiDiemDi");
this.OnthoiDiemDiChanged();
}
}
}
public string moTa
{
get
{
return this._moTa;
}
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 14-


set
{
if ((this._moTa != value))
{
this.OnmoTaChanging(value);
this.SendPropertyChanging();
this._moTa = value;
this.SendPropertyChanged("moTa");
this.OnmoTaChanged();
}
}
}
public System.Nullable<bool> hoatDong
{
get
{
return this._hoatDong;
}
set
{
if ((this._hoatDong != value))
{
this.OnhoatDongChanging(value);
this.SendPropertyChanging();
this._hoatDong = value;
this.SendPropertyChanged("hoatDong");
this.OnhoatDongChanged();
}
}
}

public System.Nullable<long> maTaiXe
{
get
{
return this._maTaiXe;
}
set
{
if ((this._maTaiXe != value))
{
this.OnmaTaiXeChanging(value);
this.SendPropertyChanging();
this._maTaiXe = value;
this.SendPropertyChanged("maTaiXe");
this.OnmaTaiXeChanged();
}
}
}
}

Để thao tác trên CSDL thì bước đầu tiên ta cần kết nối đến CSDL, để làm điều này ta
chỉ cần tạo ra một thể hiện của lớp dbDataContext:
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 15-

dbDataContext db=new dbDataContext();

Khi đó hàm dựng đầu tiên của lớp dbDataContext sẽ thực hiện và nó kết nối đến
CSDL. Sau đó, ta sử dụng câu lệnh LINQ để truy xuất dữ liệu. Để dễ dàng thể hiện cú
pháp của LINQ ta sử dụng câu lệnh SQL sau đó đổi sang câu lệnh LINQ như sau:
- Lệnh Select


Trong sql: SELECT

*

FROM

tblBanVe



Trong linq: var q=from p in db.tblBanVes select p;

Trong đó p, q là biến do người lập trình tạo, db.tblBanVes lấy về toàn bộ dữ liệu
của bảng tblBanVe.
- Lệnh Take


Trong sql: SELECT

TOP (2) * FROM

tblBanVe




Trong linq: var q=(from p in db.tblBanVes select p).Take(2);

- Order by


Trong sql:

SELECT


* FROM

tblBanVe ORDER BY nguoiXacNhan DESC

Trong Linq:
var q=from p in db.tblBanVes orderby p.nguoiXacNhan select p;

- Distinct


Trong sql: SELECT DISTINCT nguoiXacNhan FROM



Trong Linq:

tblBanVe

var q = (from p in db.tblBanVes select new { p.nguoiXacNhan}).Distinct();

- Where


Trong sql: SELECT * FROM



Trong Linq:

tblBanVe WHERE

(daTraTien = 1)

var q = from p in db.tblBanVes where p.daTraTien==true select p;
- Join


Trong sql:

SELECT

soTien, soLuongVe, soXe, maTuyen, thoiDiemDi FROM tblBanVe

INNER JOIN tblLichTrinh ON tblBanVe.maLichTrinh = tblLichTrinh.maLichTrinh


Trong Linq:

var q = from banve in db.tblBanVes join lichtrinh in db.tblLichTrinhs
Sinh viên thực hiện:



Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 16-

on banve.maLichTrinh equals lichtrinh.maLichTrinh
select new
{ banve.soLuongVe, banve.soTien, lichtrinh.soXe,
lichtrinh.maTuyen, lichtrinh.thoiDiemDi
};
- Group


Trong sql:

SELECT

daTraTien, SUM(soTien) AS 'TongTien'

FROM

tblBanVe GROUP BY daTraTien



Trong Linq:

var q = from banve in db.tblBanVes group banve by banve.daTraTien into kq
select new

{ kq.Key, kq.First().daTraTien, TongTien=kq.Sum(p=>p.soTien)
};
Trong đó Key là từ khóa, đây chính là tên trường để nhóm, kq là biến do người lập
trình tự tạo.
- Thêm


Trong sql:

INSERT tblLichTrinh (maLichTrinh, soXe, maTuyen, thoiDiemDi, moTa,
hoatDong) VALUES (1000, N'12345', 4, '03/24/2012 08:30', N'', 0)


Trong Linq:
tblLichTrinh lt = new tblLichTrinh();
lt.maLichTrinh = 1000;
lt.soXe = "12345";
lt.maTuyen = 4;
lt.thoiDiemDi = DateTime.Parse("24/03/2012 08:30");
lt.moTa = "";
lt.hoatDong = false;
db.tblLichTrinhs.InsertOnSubmit(lt);

db.SubmitChanges();

Trong đó: Hàm SubmitChanges() lưu dữ liệu vào CSDL

Sinh viên thực hiện:



Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 17-

- Xóa


Trong sql:

delete from tblLichTrinh where maLichTrinh=1000


Trong Linq:
tblLichTrinh lt = db.tblLichTrinhs.Single(p => p.maLichTrinh == 1000);
db.tblLichTrinhs.DeleteOnSubmit(lt);

db.SubmitChanges();

- Sửa


Trong sql:

update tblLichTrinh set hoatDong=1 where maLichTrinh=1000


Trong Linq:

tblLichTrinh lt = db.tblLichTrinhs.Single(p => p.maLichTrinh == 1000);
lt.hoatDong = true;


db.SubmitChanges();

- Sử dụng thủ tục và View


Trong sql ta xây dựng thủ tục lưu trữ: xoaQuaHan



Trong Linq ta sử dụng thủ tục lưu trữ như 1 hàm: db.xoaQuaHan();



Sử dụng View trong LINQ giống như sử dụng một bảng thông thường.

Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 18-

CHƯƠNG 2. CÁC CÔNG CỤ HỖ TRỢ ĐỂ THIẾT
KẾ WEB

2.1. JAVASCRIPT
2.1.1. Làm quen với Javascript
JavaScript, theo phiên bản hiện hành, là một ngôn ngữ lập trình kịch bản dựa trên
đối tượng được phát triển từ các ý niệm nguyên mẫu. Ngôn ngữ này được dùng rộng

rãi cho các trang web, nhưng cũng được dùng để tạo khả năng viết script sử dụng các
đối tượng nằm sẵn trong các ứng dụng. Giống Java, JavaScript có cú pháp tương tự C,
nhưng nó gần với Self hơn Java. .js là phần mở rộng thường được dùng cho tập tin mã
nguồn JavaScript.
Trên thực tế, hai ngôn ngữ lập trình Java và JavaScript không có liên quan gì đến
nhau, ngoại trừ việc cú pháp của cả hai ngôn ngữ cùng được phát triển dựa trên cú
pháp của C. Java Script gồm 2 mảng là client-server thực hiện lệnh trên máy của enduser và web-server.
JavaScript là một ngôn ngữ lập trình dựa trên nguyên mẫu với cú pháp phát triển
từ C. Giống như C, JavaScript có khái niệm từ khóa, do đó, JavaScript gần như không
thể được mở rộng.
Cũng giống như C, JavaScript không có bộ xử lý xuất/nhập (input/output) riêng.
Trong khi C sử dụng thư viện xuất/nhập chuẩn, JavaScript dựa vào phần mềm ngôn
ngữ được gắn vào để thực hiện xuất/nhập.
Trên trình duyệt, rất nhiều trang web sử dụng JavaScript để thiết kế trang web
động và một số hiệu ứng hình ảnh thông qua DOM. JavaScript được dùng để thực hiện
một số tác vụ không thể thực hiện được với chỉ HTML như kiểm tra thông tin nhập
vào, tự động thay đổi hình ảnh.
Bên ngoài trình duyệt, JavaScript có thể được sử dụng trong tập tin PDF của
Adobe Acrobat và Adobe Reader.
2.1.2. Các thành phần chính
a. Khoảng trắng
Dấu cách, tab và ký tự dòng mới sử dụng bên ngoài một chuỗi ký tự được gọi là
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 19-

khoảng trắng. Khác với C, khoảng trắng trong JavaScript có thể ảnh hưởng trực tiếp

tới ý nghĩa của câu lệnh. Sử dụng phương pháp "tự động thêm dấu chấm phẩy", bất cứ
một dòng JavaScript nào thích hợp sẽ được coi là một câu lệnh hợp lệ (giống như có
dấu chấm phẩy trước ký tự dòng mới).
b. Chú giải
Cú pháp chú giải của JavaScript giống với C++. Lập trình viên có thể chú giải trên
nhiều dòng bằng cách bao bọc chú giải với /* và */ hoặc sử dụng // để chú giải từ vị
trí // đến hết dòng.
c. Biến
Trước khi sử dụng biến trong JavaScript, lập trình viên không nhất thiết phải khai
báo biến. Có hai cách để định nghĩa biến trong JavaScript. Một là sử dụng cú pháp var
để khai báo biến:
<script language="JavaScript">
var tên_biến;
</script>
Ngoài ra, lập trình viên có thể gán cho biến một giá trị để sử dụng biến đó.
d. Đối tượng
Kiểu của JavaScript được chia ra làm hai loại: Kiểu cơ bản và đối tượng.
Đối tượng trong JavaScript là một thực thể có tên xác định và có thuộc tính trỏ đến
giá trị, hàm hoặc cũng có thể là một đối tượng khác. Có nghĩa là, đối tượng trong
JavaScript là một mảng kết hợp (associative array) tương tự như mảng trong PHP hay
từ điển trong Python, PostScript hoặc Smalltalk.
e. Cấu trúc dữ liệu
Một cấu trúc dữ liệu tiêu điểm là mảng (Array), mảng trong JavaScript là một
bảng liên kết chỉ mục đến giá trị. Trong JavaScript, tất cả các đối tượng đều có thể liên
kết chỉ mục đến giá trị, nhưng mảng là một đối tượng đặc biệt có thêm nhiều tính năng
xử lý chỉ mục và dữ liệu đặc biệt.
f. Cấu trúc điều khiển if, while, for giống như cú pháp của java


Rẽ nhánh theo điều kiện với if ... else


Cú pháp:
<script language="JavaScript">
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 20-

if (biểu_thức_1)
{
khối lệnh được thực hiện nếu biểu thức 1 đúng;
}
else
{
khối lệnh được thực hiện nếu biểu thức 1 sai;
}
</script>


Vòng lặp while

• <script language="JavaScript">
while (biểu_thức_điều_kiện) {
thực hiện các câu lệnh nếu biểu_thức_điều_kiện đúng;
}
</script>



Vòng lặp do ... while

Cú pháp của vòng lặp do ... while như sau:
<script language="JavaScript">
do
{
khối lệnh;
} while (biểu_thức_điều_kiện);
</script>


Vòng lặp for

Cú pháp của vòng lặp for như sau:
<script language="JavaScript">
for (biểu_thức_khởi_tạo; biểu_thức_điều_kiện;
biểu_thức_thay_đổi_giá_trị)
{
Khối lệnh cần lặp;
}
</script>
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe



-Trang 21-


Vòng lặp for ... in

Cú pháp của vòng lặp này như sau:
<script language="JavaScript">
for (biến in đối_tượng)
{
khối lệnh cần thực hiện, có thể sử dụng
đối_tượng[biến]

để

truy

cập

từng

thuộc

tính

(phần tử) của đối tượng;
}
</script>


switch

Cách sử dụng cú pháp switch:
<script language="JavaScript">

switch (biểu_thức)
{
case kết_quả_1:
khối lệnh 1; break;
...
case kết_quả_n:
khối lệnh n; break;
default :
khối lệnh n+1;break;
}
</script>
g. Hàm
Hàm là một khối các câu lệnh với một danh sách một hoặc nhiều đối số (có thể
không có đối số) và thường có tên (mặc dù trong JavaScript hàm không nhất thiết phải
có tên).
<script language="JavaScript">
function tên_hàm(đối_số_1, đối_số_2)
{
các câu lệnh cần thực hiện mỗi khi hàm được gọi;
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 22-

return giá_trị_cần_trả_về;
}
</script>
Trong JavaScript, khi gọi hàm không nhất thiết phải gọi hàm với cùng số đối số

như khi định nghĩa hàm, nếu số đối số ít hơn khi định nghĩa hàm, những đối số không
được chuyển cho hàm sẽ mang giá trị undefined.
Các kiểu cơ bản sẽ được chuyển vào hàm theo giá trị, đối tượng sẽ được chuyển
vào hàm theo tham chiếu.
Hàm là đối tượng hạng nhất trong JavaScript. Tất cả các hàm là đối tượng của
nguyên mẫu Function. Hàm có thể được tạo và dùng trong phép toán gán như bất kỳ
một đối tượng nào khác, và cũng có thể được dùng làm đối số cho các hàm khác. Do
đó, JavaScript hỗ trợ hàm cấp độ cao. Ví dụ:
<script language="JavaScript">
Array.prototype.fold =
function (value, functor) {
var result = value;
for (var i = 0; i < this.length; i++) {
result = functor(result, this[i]);
}
return result;
}
var sum = [1,2,3,4,5,6,7,8,9,10].fold(0, function
(a, b) { return a + b })
</script>
Đoạn mã nguồn trên sẽ trả lại kết quả là 55.
Vì hàm trong JavaScript là đối tượng, lập trình viên có thể khởi tạo hàm không
tên:
<script language="JavaScript">
function() { thân hàm; }
</script>
Một ví dụ sử dụng hàm không tên trong JavaScript:
<script language="JavaScript">
Sinh viên thực hiện:



Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 23-

document.onkeypress = function(e) {
alert("Chúng ta vừa nhấn một phím trên bàn phím");
}
</script>
Hàm trên sẽ hiển thị thông báo khi một số phím trên bàn phím có thể gây sự kiện
onkeypress được nhấn.
Mặc định, tất cả các thành phần của đối tượng thuộc phạm vi công cộng (public).
Trong JavaScript, không có khái niệm thành phần riêng hay thành phần được bảo vệ
(private và protected), tuy nhiên những tính năng này có thể được giả lập.
2.1.3. Quản lý lỗi
Tùy theo môi trường phát triển, sửa lỗi JavaScript có thể sẽ rất khó khăn. Với
JavaScript dùng trên trang web, hiện tại, các trình duyệt dựa trên Gecko (như Mozilla,
Mozilla Firefox) có công cụ tìm diệt lỗi rất tốt (Venkman), ngoài ra còn kèm theo một
công cụ kiểm tra DOM.
Các phiên bản của JavaScript (từ Internet Explorer 5 và Netscape 6 trở lên) hỗ trợ
mệnh đề quản lý lỗi try ... catch ... finally, mệnh đề này bắt nguồn từ Java giúp lập
trình viên quản lý lỗi thời gian chạy hoặc quản lý ngoại lệ xuất phát từ cú pháp throw.
Cú pháp của mệnh đề này như sau:
<script language="JavaScript">
try
{
Khối lệnh cần thực hiện có thể gây lỗi;
}
catch (error)
{

Khối lệnh cần thực hiện trong trường hợp có lỗi;
}
finally
{
Khối lệnh luôn được thực hiện;
}
Sinh viên thực hiện:


Đề tài: Tìm Hiểu Linq và Quản Lý Bán Vé Xe

-Trang 24-

</script>
Trong cú pháp trên error là một đối tượng Error có hai thuộc tính theo chuẩn
ECMAScript phiên bản 3:
* error["message"]: Thông điệp diễn giải lỗi
* error["name"]: Tên lỗi
Tuy nhiên mỗi trình duyệt sử dụng một bản JavaScript khác nhau, trong các trình
duyệt lớn và phổ dụng không có trình duyệt nào hoàn toàn tuân thủ theo chuẩn
ECMAScript phien bản 3. Ví dụ như Internet Explorer 6 SP 1 có thêm hai thuộc tính:
* error["number"]: Bí số của lỗi
* error["description"]: Thông điệp diễn giải lỗi
Còn Mozilla Firefox 1.07 có thêm ba thuộc tính:
* error["fileName"]: Tên tập tin xảy ra lỗi
* error["lineNumber"]: Dòng xảy ra lỗi
* error["stack"]: Cả hai thuộc tính trên gộp lại trong một chuỗi ký tự
Phần finally là không bắt buộc. Lập trình viên hoàn toàn có thể sử dụng try ...
catch mà không có finally.
2.1.4. Phạm vi ảnh hưởng của lỗi

Các ngôn ngữ lập trình kịch bản rất dễ bị ảnh hưởng bởi lỗi, hơn nữa, mỗi một
trình duyệt, mỗi một website ứng dụng JavaScript một cách hoàn toàn khác nhau nên
lập trình viên JavaScript thường phải dành rất nhiều thời gian sửa lỗi để đảm bảo đoạn
mã nguồn của mình sẽ hoạt động tốt. Trong những trang HTML mà thẻ script và các
đoạn mã HTML khác xen kẽ lẫn nhau, lỗi cú pháp có thể được phát hiện dễ dàng hơn
bằng cách để mỗi hàm trong một thẻ script riêng biệt hoặc có thể sử dụng nhiều tệp .js
khác nhau. Trong nhiều trường hợp, cách này còn giúp tránh làm hỏng cả trang web
trong trường hợp có lỗi trong một đoạn mã nguồn.
2.2. AJAX
AJAX, viết tắt từ Asynchronous JavaScript and XML (JavaScript và XML không
đồng bộ), là bộ công cụ cho phép tăng tốc độ ứng dụng web bằng cách cắt nhỏ dữ liệu
và chỉ hiển thị những gì cần thiết, thay vì tải đi tải lại toàn bộ trang web. AJAX không
phải một công nghệ đơn lẻ mà là sự kết hợp một nhóm công nghệ với nhau. Trong đó,
HTML và CSS đóng vai hiển thị dữ liệu, mô hình DOM trình bày thông tin động, đối
Sinh viên thực hiện:


×