ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP
LỚN
Môn: phát triển phần
mềm theo cấu phần
Đề tài: Xây dựng website cho trung tâm hội nghị - nhà hàng tiệc cưới
Giáo viên hướng dẫn: Th.s Nguyễn Thái Cường.
Sinh viên thực hiện (Nhóm 6):
• Trương Đức Anh.
• Ngô Văn Hảo.
• Dương Văn Quý
Hà Nội, 2014.
1
LỜI NÓI ĐẦU
Trong cuộc cách mạng khoa học và công nghệ đang diễn ra một cách sôi động chưa
từng thấy như hiện nay trên toàn thế giới thúc đẩy loài người bước sang một kỉ nguyên mới.
Đó là kỷ nguyên của công nghệ thông tin, việc ứng dụng tin học vào đời sống nói chung và
công tác quản lý nói riêng đang phát triển mạnh mẽ, nó góp vai trò không nhỏ vào việc phát
triển phát trển của lĩnh vực công nghệ thông tin và ngày nay, sự phát triển đó đang được ứng
dụng nhiều và không thể thiếu được trong mọi ngành nghề văn phòng, quảng cáo, tài chính,
công tác quản lý…
Sự phát triển của Internet trên mọi lĩnh vực giúp mọi người có thể lấy các tin tức cần
thiết, chia sẻ các thông tin trên mạng máy tính và liên lạc với người ở xa. Website là một
trong những lĩnh vực đa phương tiện hữu ích giúp con người sử dụng làm những công việc
trên, thông qua web mọi người có thể tìm được mọi thứ mình cần một cách nhanh chóng mà
không tốn nhiều công sức vì phát triển thương mại điện tử từ mọi cơ quan, văn phòng cũng
như siêu thị đều có website của riêng minh. Bạn nghĩ sao khi chỉ cần ngồi nhà mà có thể đặt
hang, đặt phòng cũng như lấy thông tin cần thiết. Có được những thứ đó là nhờ sự kết hợp
của các website cùng với những cơ sở dữ liệu trên khắp thế giới. Website trở thành một cuộc
cách mạng vì nó làm cho Internet trở nên thân thiện với người dung. Chính vì những vấn đề
trên đã thúc đấy chúng em tìm hiểu về lĩnh vưc thiết kế website. Qua quá trình khảo sát thực
tế, em thấy các trung tâm Hội nghị - tiệc cưới chưa thực sự có một website đáp ứng nhu cầu
của khách hàng. Chính vì vậy, nhóm quyết định chọn đề tài “Xây dựng website cho trung
tâm hội nghị - nhà hàng tiệc cưới”.
Trong quá trình thực hiện Đề tài: Xây dựng website cho trung tâm hội nghị - nhà
hàng tiệc cưới, nhóm em đã nhận được nhiều sự giúp đỡ của thầy cô và các bạn, những
đóng góp hết sức ý nghĩa đó đã góp phần giúp chúng em hoàn thành được dự án. Chúng em
xin gửi lời cảm ơn tới những thầy cô cùng các bạn đã giúp nhóm em, Đặc biệt em xin gửi lời
cảm ơn sâu sắc tới thầy Nguyễn Thái Cường – người đã tận tâm chỉ bảo, hướng dẫn trong
suốt quá trình thực hiện đề tài. Rất mong rằng thầy và các bạn vẫn tiếp tục đồng hành cùng
nhóm chúng em và những lời góp ý và nhận xét nhiều hơn nữa để nhóm có thể hoàn thiện đề
tài của mình ngày một tốt hơn.
Em xin chân thành cảm ơn!
Nhóm thực hiện
2
Tóm tắt bài tập lớn
Hiện nay có rất nhiều các nhà hàng tiệc cưới, các trung tâm hội nghị với nhiều dịch vụ
đi kèm, việc quảng bá hình ảnh cho nhà hàng chủ yếu thông qua internet, các nhà hàng hầu
hết đều có được những website riêng nhưng việc đặt tiệc online các website đó chưa làm
được, chính vì vậy chúng em xây dựng một website có đầy đủ các chức năng cần thiết, đặt
biệt website được phát triển theo hướng cấu phần gồm các module rời có thể thay thế bằng
những module khác, giúp website dễ dàng bảo trì, dễ thay đổi cho phù hợp với hoàn cảnh xã
hội.
Những chức năng chính của website:
• Thêm, sửa, xóa Thực đơn.
• Đặt tiệc.
• Giới thiệu dịch vụ.
• Cập nhật dịch vụ.
• Lập hóa đơn
• Thống kê doanh thu
• Báo biểu: Tổng doanh thu; số khách đến, thức ăn, thức uống bán nhiều nhất
theo từng tiêu chí
3
Mục Lục
4
Danh sách bảng và hình vẽ
5
Danh sách từ viết tắt
COP component object
programing
lập trình hướng cấu phần
6
PHẦN 1: MỞ ĐẦU
1. Tên đề tài
Xây dựng website cho trung tâm hội nghị - nhà hàng tiệc cưới.
Mục đích đề tài
Xây dựng được website đẹp, đầy đủ các chức năng nhằm giúp nhà hàng quản lý được
các đơn đặt hàng, giới thiệu các dịch vụ, thực đơn. Website đáp ứng nhu cầu tìm hiểu các
dịch vụ của khách hàng, cho phép khách hàng đặt tiệc online.
Mục tiêu:
Sản phẩm phải đạt các yêu cầu sau:
• Yêu cầu về phía người sử dụng.
• Giao diện đẹp, thân thiện phù hợp với yêu cầu của khách hàng.
• Dễ sử dụng đối với người dung, thuận tiện trong quản trị, dễ bảo trì
• Thông tin hiện thị chi tiết.
• Chạy ổn định.
• Hoàn thành sản phẩm đúng thời gian quy định.
Yêu cầu về chức năng:
• Quảng bá hình ảnh của nhà hàng tới người đọc.
• Cho phép người truy cập có thể đặt tiệc thông qua hệ thống.
• Dễ dang tùy chỉnh, thay đổi các modul, có khả năng tích hợp nhiều thành
phần.
• Có tính hiệu quả cao.
• Có tính bảo mật cao.
Yêu cầu module
• Module quản lý khách hang.
• Module quản lý thông tin nhà hàng.
• Module quản lý người truy cập.
• Module quản lý thông tin hợp đồng đặt tiệc.
• Module liên hệ.
• Module thông báo.
• Module quản trị hệ thống.
2. Bố cục đề tài
• Chương 1: Cơ sở lý thuyết
• Chương 2: Phân tích thiết kế hệ thống.
• Chương 3: Thiết kế cơ sở dữ liệu.
• Chương 4: Cài đặt,
7
PHẦN 2: NỘI DUNG
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Kiến thức tổng quan về cấu phần
Lập trình hướng cấu phần (component object programing - COP) là kiểu lập
trình có xu hướng chia hệ thống phần mềm thành những thành phần giữ các chức
năng khác nhau (mỗi thành phần này được gọi là một bộ phận hợp thành) mà khi
kết hợp lại ta thu được một hệ thống phần mềm hoàn chỉnh. Với lập trình hướng cấu
phần, chương trình được xây dựng bằng cách lắp ráp các thành phần phần mềm có
thể sử dụng lại, các khối tự chứa mã máy (hay còn gọi là các khối .thành phần thực
hiện). Các thành phần này gồm các thành phần giao diện, các kết nối. COP nẩy sinh
xuất phát từ thực tế rằng mọi thứ có cấu trúc đều được tạo nên từ các thành phần
khác. Điển hình như trong nền công nghiệp tự động, các hệ thống được cấu tạo từ
các thành phần. Ví dụ, để phát triển một chiếc ô tô là rất phức tạp.
Ô tô = {Các thành phần được ghép nối};
Các thành phần cấu tạo nên ô tô là thuộc nhiều loại khác nhau, kích cỡ khác
nhau, chức năng khác nhau, được sản xuất bởi các nhà sản xuất khác nhau. Các
thành phần này giới hạn từ các ốc vít rất nhỏ đến các hệ thống con phức tạp hơn
như các động cơ, các bộ truyền phát nhanh
Trong công nghiệp phần mềm. Sản phẩm vẫn làm bằng tay là chủ yếu. Điều
đó dẫn đến tính năng của sản phẩm thấp, chất lượng không đảm bảo, khó tái sử
dụng
Trong công nghệ phần cứng. Mọi sản phẩm cũng được tạo ra dựa trên phương
pháp hướng cấu phần. Thực tế cho thấy nền công nghiệp này phát triển rất nhanh,
thu được nhiều lợi nhuận. Đây chính là lý do tại sao COP lại quan trọng.
COP sử dụng nhiều khái niệm của OOP (lập trình hướng đối tượng) nhưng hai
phương pháp này là độc lập nhau. COP phát triển phần mềm bằng cách lắp ráp các
thành phần trong khi OOP nhấn mạnh đến các lớp và các đối tượng. COP nhấn
mạnh giao diện và kết cấu, trong khi OOP nhấn mạnh về cài đặt viết mã. COP
không cần biết bất cứ kiến thức nào về cách thức một thành phần cài đặt giao diện
của chúng, nó xem thành phần như một hộp đen (không bị ảnh hưởng bởi sự thay
đổi trong cài đặt của giao diện thành phần), chỉ quan tâm đến đầu vào, đầu ra, chức
năng nhiệm vụ của hộp đen đó. Ví dụ: Ốc vít dùng để làm gì, làm thế nào để sử
8
dụng nó mà không cần biết nó được làm như thế nào, sử dụng công cụ gì. COP lắp
ráp các thành phần thông qua giao diện của các thành phần này.
Sự khác nhau giữa 2 phương pháp lập trình OOP và COP được chỉ ra trong
bảng sau:
COP OOP
COP phát triển phần mềm bằng cách lắp
ráp các thành phần
OOP nhấn mạnh cài đặt các lớp và các đối
tượng
COP nhấn mạnh giao diện và kết cấu
OOP nhấn mạnh về đối tượng/lớp
OOP hỗ trợ bao bọc, thừa kế, đa xạ nhưng
chưa bao giờ đạt mục đích của nó vì kế thừa
xâm phạm bao bọc, hơn nữa các đối tượng và
các lớp không tự vận hành.
COP là kỹ thuật đóng gói và phân tán OOP là kỹ thuật cài đặt
COP hỗ trợ sử dụng lại mức cao OOP hỗ trợ sử dụng lại mức thấp
COP về nguyên tắc có thể viết bởi bất kỳ
ngôn ngữ lập trình nào
OOP bị giới hạn bởi ngôn ngữ OO
COP gồm các thành phần gắn kết lỏng
lẻo
OOP gồm các đối tượng phụ thuộc chặt chẽ
hơn vào các đối tượng khác qua giao diện kế
thừa (Cha thay đổi, con thay đổi theo)
COP có các thành phần hạt nhân từ lớn
đến nhỏ
OOP gồm các đối tượng là các đơn vị của
kiến trúc
COP hỗ trợ đa giao diện và thiết kế
hướng giao diện
OOP không cung cấp mỗi quan hệ rõ ràng về
giao diện giữa các lớp con và lớp cha
1. Hình 1:Sự khác nhau giữa cop và oop
Các ngôn ngữ có thể được sử dụng trong lập trình hướng cấu phần: Visual
Basic, Delphi, C#, Java…
Tóm lại: Kỹ nghệ phần mềm dựa trên cấu phần – CBSE (Component Based
Software Engineering) gồm các hoạt động:
o COA (Component Oriented Analysis): Phân tích hướng cấu phần
9
o COD (Component Oriented Design): Thiết kế hướng cấu phần
o COP (Component Oriented Programming): Lập trình hướng cấu phần
o COM (Component Oriented Management): Quản lý hướng cấu phần
Từ cách nhìn của tiến trình kỹ nghệ, các thành phần có thể được phân làm 5
dạng khác nhau:
Thành phần đặc tả: Biểu diễn các đặc tả của một đơn vị phần mềm,
mô tả một tập hành vi của các đối tượng thành phần.
Thành phần giao diện: Định nghĩa một tập hành vi có thể được yêu
cầu bởi một đối tượng thành phần.
Thành phần cài đặt: Có thể vận hành độc lập (điều này không có
nghĩa nó độc lập với các thành phần khác. Nó có thể có nhiều phụ
thuộc với thành phần khác).
Thành phần đã cài đặt: Thành phần mã thực thi
Thành phần đối tượng: Lớp, gói,
CBSE hiện tại là một mô hình cho việc phát triển các hệ thống phần mềm
lớn như:
Các ứng dụng phân tán cho doanh nghiệp
Các ứng dụng Web – N Tier
Các dịch vụ Web (Web Services)
Có thể dùng các công nghệ của Java như:
EJB: Enterprise Java Bean,
COM: Component Object Model,
DCOM: Distributed Component Object Model ,
CORBA:
10
Hoặc công công nghệ .NET của Microsoft để phát triển các hệ thống phần
mềm theo mô hình này.
Ưu điểm của COP
• Trinh phục sự phức tạp
• Quản lý sự thay đổi
• Tái sử dụng
• Lập trình viên có thể chia sẻ với nhau những thành phần mình đã xây
dựng cho nhiều người khác dùng chung.
• Khi cần, lập trình viên có thể lắp ghép các thành phần có sẵn khác nhau
để tạo thành các chương trình có chức năng khác nhau. Tất cả chỉ cần
dựa trên công nghệ lắp ghép thành phần, tiết kiệm được rất nhiều công
sức lập trình.
11
1.2. Các công nghệ thiết kế website cơ bản
Java script, java applet, DHTML (dynamic HTML), VB script là các script
giúp tạo hiệu ứng đặc biệt trên trang web. ASP, ASP.NET, CGI, Java, PHP: giúp
tạo chương trình web động, tạo chat, forum. MS SQL, Access, My SQL, DBF
giúp tạo cơ sở dữ liệu.
HTML (HyperText Markup Language hay “Ngôn ngữ Đánh dấu Siêu văn
bản”), là một ngôn ngữ đánh dấu được thiết kế để tạo nên các trang web với các
mẩu thông tin được trình bày trên World Wide Web. Tim Berners-Lee là cha đẻ của
HTML. Từ năm 1996, các chi tiết kỹ thuật HTML đã được duy trì, với sự đóng góp
từ các nhà cung cấp phần mềm thương mại, bởi World Wide Web Consortium
(W3C). HTML được viết theo mẫu của các thành phần HTML bao gồm các thẻ
được đặt bên trong dấu ngoặc nhọn <>.HTML không phải là ngôn ngữ lập trình, nó
là ngôn ngữ trình bày.
CSS (Cascading Style Sheet) là các tập tin định kiểu theo tầng, được dùng để
miêu tả cách trình bày các tài liệu viết bằng ngôn ngữ HTML và XHTML. Ngoài ra
ngôn ngữ định kiểu này cũng có thể dùng cho XML, SVG, XUL. CSS được thiết kế
chủ yếu để cho phép tách nội dung tài liệu (viết bằng HTML hoặc một ngôn ngữ
đánh dấu tương tự) từ tài liệu trình bày, bao gồm các thành tố như hiển thị (layout),
màu sắc(colors) và phông chữ(fonts).Các đặc điểm kỹ thuật của CSS được duy trì
bởi Worl Wide Web Contsortium(W3C).
Flash: tạo hình ảnh động cao cấp, đẹp nhất hiện nay, dùng cho việc trang trí.
Mặc dù flash còn nhiều chức năng xuất sắc nữa nhưng dùng flash trong web cần
cẩn thận vì không phải máy nào cũng hiển thị được Flash.
JavaScript (JS): sáng chế bởi Netscape là một ngôn ngữ dùng để lập Trình
Trang Mạng HTML cơ bản và theo hướng Đối Tượng DOM để làm cho trang mạng
HTML thêm sống động và đẹp hơn.
Applet là chương trình java có thể được nhúng vào các trang HTML và có thể
chạy được trên các trình duyệt có bật java như Mozilla hoặc IE. Applet được dùng
để điều khiển phía client nên có một vài hạn chế nhất định. Applet không thể truy
cập những tài nguyên hệ thống từ máy cục bộ (local computer), thay vào đó, applet
làm tăng thêm tính động của trang web.
12
PHP (viết tắt hồi quy "PHP: Hypertext Preprocessor") là một ngôn ngữ lập
trình kịch bản hay một loại mã lệnh chủ yếu được dùng để phát triển các ứng
dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng quát. Nó rất thích
hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được tối ưu hóa cho
các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời
gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã
nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới.
1.3. Các công nghệ java web
Java là một ngôn ngữ lập trình dạng lập trình hướng đối tượng (OOP). Khác
với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã
máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn
thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment)
chạy. Trước đây, Java chạy chậm hơn những ngôn ngữ dịch thẳng ra mã máy như C
và C++, nhưng sau này nhờ công nghệ "biên dịch tại chỗ" - Just in time
compilation, khoảng cách này đã được thu hẹp, và trong một số trường hợp đặc biệt
Java có thể chạy nhanh hơn. Java chạy nhanh hơn những ngôn ngữ thông dịch
như Python, Perl, PHP gấp nhiều lần. Java chạy tương đương so với C#, một ngôn
ngữ khá tương đồng về mặt cú pháp và quá trình dịch/chạy. Cú pháp Java được vay
mượn nhiều từ C & C+nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính
năng xử lý cấp thấp hơn. Do đó việc viết một chương trình bằng Java dễ hơn, đơn
giản hơn, đỡ tốn công sửa lỗi hơn. Lập trình C rất hay xảy ra lỗi và khó sửa. Trong
Java, hiện tượng rò rỉ bộ nhớ hầu như không xảy ra do bộ nhớ được quản lí bởi Java
Virtual Machine (JVM) bằng cách tự động "dọn dẹp rác" - Garbage collection.
Người lập trình không phải quan tâm đến việc cấp phát và xóa bộ nhớ như C, C++.
Tuy nhiên khi sở dụng những tài nguyên mạng, file IO, database (nằm ngoài kiểm
soát của JVM) mà người lập trình không đóng (close) các streams thì memory leak
vẫn có thể xảy ra.
1.3.1. Servlet
1.3.1.1. Giới thiệu về Servlet
Hiện nay, trong lập trình có một xu hướng rất quan trọng đang được tập trung phát
triển ứng dụng, đó là xây dựng các chương trình dịch vụ Java ở phía máy chủ
(Server).
Servlet là thành phần chính được sử dụng để phát triển các chương trình dịch vụ
Java ở phía máy chủ. Các Servlet là các chương trình Java thực hiện ở các ứng dụng
Server (tên gọi “Servlet” cũng gần giống như “Applet” ở phía máy Client) để trả lời
cho các yêu cầu của Client. Các Servlet không bị ràng buộc chặt với một giao thức
13
Client-Server cụ thể nào cả, nhưng giao thức thường được sử dụng là HTTP, do
vậy, khi nói tới Servlet nghĩa là nói tới HTTP Servlet. Servlet là sự phát triển mở
rộng của CGI để đảm bảo Server thực hiện được các chức năng của mình. Ta có thể
sử dụng Servlet của Java để tuỳ chỉnh lại một dịch vụ bất kỳ, như Web Server, Mail
Server, v.v.
Web Server hiển thị các tư liệu được viết trong HTML và hồi đáp cho yêu cầu của
người sử dụng qua HTTP. Các tư liệu HTML chứa các văn bản được đánh dấu
(định dạng) để các trình duyệt như IE, Netscape đọc được.
Một trình duyệt chấp nhận đầu vào ở dạng HTML, khi người sử dụng nhấn một nút
để yêu cầu một số thông tin nào đó, một Servlet đơn giản được gọi để xử lý các yêu
cầu đó. Các công việc chính của Servlet được mô tả khái quát trong hình 1, bao
gồm:
• Đọc các dữ liệu tường minh được Client gửi đến từ các yêu cầu (dữ liệu theo
các khuôn dạng – form data).
• Đọc các dữ liệu không tường minh được Client gửi đến từ các yêu cầu (dữ
liệu trong phần đầu của yêu cầu – request headers).
• Xử lý và lưu trữ các dữ liệu được cung cấp dưới dạng HTML.
• Gửi trả lời dữ liệu tường minh cho Client (dạng HTML), cung cấp các nội
dung động, ví dụ trả lời yêu cầu Client về các câu truy vấn vào các CSDL.
• Quản lý các thông tin trạng thái và trả lời dữ liệu không tường minh cho
Client (các mã trạng thái và các phần đầu của trả lời).
2. Hình 2:Vai trò của Servlet
Viết một Servlet là tương đối dễ. Ta chỉ cần có Tomcat, nó là tổ hợp của Java
Server Pages
TM
1.1 và Servlets 2.2. Tomcat có thể nạp miễn phí từ
phần cài đặt sẽ được mô tả ở phần sau.
Các Servlet cũng được sử dụng thay cho kịch bản giao diện cổng chung CGI Script.
Khi tạo ra một trang Web, ta cũng sẽ tạo ra một ứng dụng Web.
Trước khi sử dụng Servlet để tạo ra các ứng dụng Web, chúng ta đi tìm hiểu xem có
những khả năng lựa chọn nào khác để phát triển những ứng dụng Web.
14
• CGI: Theo cách thông thường, để bổ sung các chức năng vào cho một Web
Server người ta hay sử dụng Common Gateway Interface (CGI), một giao diện độc
lập với ngôn ngữ cho phép một Server khởi động một tiến trình ngoại để
nhận thông tin được yêu cầu thông qua các biến môi trường. Mỗi yêu cầu
được trả lời bởi một tiến trình riêng thông qua một đại diện riêng của một
chương trình CGI hoặc bởi một kịch bản CGI (thường được viết bằng ngôn
ngữ thông dịch như Perl).
• Fast CGI: Open Marked đã phát triển một chuẩn khác thay cho CGI được
gọi là Fast CGI. Fast CGI hành động giống như CGI. Nó khác ở chỗ, Fast
CGI tạo ra một tiến trình bền vững cho từng chương trình.
• Một số chương trình ứng dụng khác như ASP và Java Script cũng hỗ trợ để
tạo ra các ứng dụng Web. ASP được Microsoft phát triển để tạo ra các nội
dung cho các trang Web động. Trong ASP, trang HTML có thể nhúng những
phần nhỏ được viết bằng VBScript hoặc JScript. Netscape đưa ra kỹ thuật
được gọi là JavaScript, cho phép đưa các phần mã lệnh nhỏ nhúng vào trang
HMTL, nhằm tạo ra những nội dung Web động một cách linh họat hơn.
Ngoài ra, Netscape còn cung cấp NSAPI, Microsoft đưa ra ISAPI cho các
Web Server của họ.
Servlet có một số ưu điểm so với CGI:
• Một Servlet không làm việc trong một tiến trình riêng. Điều này loại bỏ được
việc phải tạo ra quá nhiều tiến trình mới cho mỗi yêu cầu.
• Một Servlet sẽ thường trực trong bộ nhớ giữa các yêu cầu, trong khi các
chương trình CGI cần phải tải xuống và được khởi động cho từng yêu cầu
CGI.
• Chỉ cần một Servlet trả lời đồng thời cho tất cả các yêu cầu. Điều này cho
phép tiết kiệm được bộ nhớ và đảm bảo nó dễ dàng quản lý được dữ liệu một
cách thống nhất.
• Một Servlet có thể thực hiện bởi một Servlet Engine trong phạm vi kiểm soát
Sandbox để đảm bảo an toàn trong việc sử dụng các Servlet.
Các lớp Servlet của Java có thể được nạp tự động để mở rộng các chức năng
của Server. Các Servlet của Java thực hiện bên trong JVM. Chúng được đảm bảo an
toàn và chuyển đổi tương thích giữa các hệ điều hành và giữa các Server với nhau.
Điều này khác với các Applet, Servlet chỉ thao tác được trong miền của một Server.
Servlet API được phát triển dựa trên những điểm mạnh của Java platform
nhằm giải quyết vấn đề của CGI và Server API. Nó là một API đơn giản, hỗ trợ tất
cả các Web server và thậm chí cho phép các ứng dụng máy chủ dùng để kiểm tra và
15
quản lý các công việc trên Server. Nó giải quyết vấn đề thực thi bằng việc thực hiện
tất cả các yêu cầu như các luồng Thread trong quá trình xử lý, hoặc việc cân bằng
tải trên một Server trong các cụm máy tính Cluster. Các Servlet dễ dàng chia sẻ tài
nguyên với nhau.
Trong định nghĩa Servlet, vấn đề bảo mật được cải tiến theo nhiều cách.
Trước hết, bạn hiếm khi thực thi được các câu lệnh trên Shell với dữ liệu cung cấp
bởi người dùng mà Java API đã cung cấp với những khả năng truy cập đến tất cả
các hàm thông dụng. Bạn có thể sử dụng Java Mail để đọc và gửi mail, kết nối vào
các CSDL (thông qua JDBC), tệp lớp (.class) và những lớp liên quan để truy cập hệ
thống tệp, CSDL, RMI, CORBA, Enterprise Java Beans (EJB), …
1.3.1.2. Ưu điểm của Servlet
Servlet được sử dụng để thay thế cho những công nghệ Web động. Việc sử
dụng Servlet mang lại những lợi thế:
• Dễ di chuyển. Servlet được viết bằng Java nên nó có tính di động cao, thực
hiện được trên nhiều hệ điều hành, trên các Web Server khác nhau. Khái
niệm “Viết một lần, chạy ở mọi nơi” cũng rất đúng với Servlet.
• Mạnh mẽ. Servlet hỗ trợ rất hiệu quả cho việc sử dụng các giao diện lõi API
như lập trình mạng, xử lý đa luồng, xử lý ảnh, nén dữ liệu, kết nối các
CSDL, bảo mật, xử lý phân tán và triệu gọi từ xa RMI, CORBA, v.v. Nó
cũng thích hợp để trao đổi tin, truyền thông giữa Client và Server một cách
bình thường.
• Hiệu quả. Servlet có tính hiệu quả cao. Một khi được tải về, nó sẽ được lưu
lại trong bộ nhớ của máy chủ. Servlet duy trì các trạng thái của nó, do vậy
những tài nguyên ngoại như việc kết nối với CSDL cũng sẽ được lưu giữ lại.
• An toàn. Bởi vì Servlet được viết bằng Java nên nó kế thừa được tính an toàn
của Java. Cơ chế tự động dọn rác và việc không sử dụng con trỏ của Java
giúp cho Servlet thoát khỏi nhiều công việc quản lý bộ nhớ. Đồng thời nó xử
lý các lỗi rất an toàn theo cơ chế xử lý ngoại lệ của Java.
• Tính tích hợp. Các Servlet được tích hợp với các Server. Chúng cộng tác với
các Server tốt hơn các chương trình CGI.
• Tính linh hoạt. Các Servlet hoàn toàn mềm dẻo. Một HTTP Servlet được sử
dụng để tạo ra một trang Web, sau đó ta có thể sử dụng thẻ <Servlet> để đưa
nó vào trang Web tĩnh, hoặc sử dụng với các Servlet khác để lọc ra các nội
dung cần thiết.
1.3.1.3. Môi trường thực hiện Servlet
16
Các Servlet thường là sự mở rộng (kế thừa) các lớp chuẩn Java trong gói
javax.servlet (chứa các khuôn mẫu cơ bản của Servlet) và javax.servlet.http (mở
rộng các khuôn mẫu cơ bản của Servlet và các yêu cầu theo HTTP).
Servlet là một lớp Java và vì thế cần được thực thi trên một máy ảo Java
(JVM) và bằng một dịch vụ được gọi là mô tơ Servlet (Servlet Engine). Servlet
Engine tải lớp Servlet lần đầu tiên nó được yêu cầu, hoặc ngay khi Servlet Engine
được bắt đầu. Servlet ngừng tải để xử lý nhiều yêu cầu khi Servlet Engine bị tắt
hoặc nó bị dừng lại.
Như vậy, để dịch và thực hiện các Servlet, việc có các Servlet là chưa đủ, mà
cần phải có một mô tơ Servlet để kiểm tra và triển khai chúng. Hiện nay một số mô
tơ tương thích với nhiều loại Web Server khác nhau, nhưng nguyên lý hành động
tương đối giống nhau. Người ta chia chúng thành ba loại.
• Mô tơ Servlet đơn
• Mô tơ Servlet gộp
• Mô tơ Servlet nhúng.
1.3.1.4. Kiến trúc của Servlet
Gói javax.servlet cung cấp các giao diện và các lớp để xây dựng các Servlet.
Kiến trúc của chúng được mô tả như sau.
3. Hình 3:Kiến trúc của Servlet
Giao diện Servlet
Giao diện Servlet là một khái niệm trừu tượng trung tâm trong Servlet API. Tất cả
các Servlet đều cài đặt trực tiếp hoặc gián tiếp giao diện này hoặc mở rộng (kế thừa)
những lớp đã cài đặt nó.
Giao diện này khai báo ba phương thức định nghĩa vòng đời của Servlet.
public void init(ServletConfig config) throws ServletException
Phương thức này được gọi một lần khi Servlet được tải vào trong Servlet Engine,
trước khi Servlet được yêu cầu để xử lý một yêu cầu nào đó. Phương thức init() có
một thuộc tính là đối tượng của ServletConfig, và Servlet có thể đọc các đối số khởi
tạo của nó thông qua đối tượng ServletConfig. Chúng thường được định nghĩa trong
một tệp cấu hình. Một ví dụ thông thường của một đối số khởi tạo là định danh
database cho một CSDL.
17
public void service(ServletRequest request, ServletResponse response) throws
ServletException, IOException
Phương thức này được gọi để xử lý các yêu cầu. Nó có thể không được gọi, gọi một
lần hay nhiều lần cho đến khi Servlet được ngưng tải. Nhiều Thread (mỗi Thread
cho một yêu cầu) có thể thực thi phương thức này song song, vì thế nó trở nên an
toàn và hiệu quả hơn.
public void destroy()
Phương thức này chỉ được gọi một lần trước khi Servlet được ngưng tải và sau khi
đã kết thúc các dịch vụ.
Servlet API có cấu trúc để Servlet có thể cho phép bổ sung một giao thức khác với
HTTP. Gói javax.servlet chứa các lớp và các giao diện được kế thừa giao diện
Servlet một cách độc lập. Gói javax.servlet.http chứa các lớp và giao diện HTTP cụ
thể.
Lớp cơ sở HttpServlet
Như ta đã biết, theo giao thức HTTP, dữ liệu được trao đổi giữa máy chủ Server và
các máy Client theo một trong hai phương thức GET hay POST. Java định nghĩa
một lớp có tên là HttpServlet ở trong goi javax.servlet để truyền và nhận dữ liệu
theo cả hai phương thức trên.
Lớp trừu tượng HttpServlet cung cấp một khung làm việc để xử lý các yêu cầu
GET, POST của giao thức HTTP. HTTPServlet kế thừa giao diện Servlet cộng với
một số các phương thức hữu dụng khác.
Một tập các phương thức trong HTTPServlet là những phương thức xác định dịch
vụ trong giao diện Servlet. Việc bổ sung dịch vụ trong HTTPServlet giống như một
kiểu của các yêu cầu được xử lý (GET, POST, HEAD, …) và gọi một phương thức
cụ thể cho mỗi kiểu. Bằng việc làm này, các nhà phát triển Servlet sẽ an tâm khi xử
lý chi tiết những yêu cầu như HEAD, TRACE, OPTIONS, … và có thể tập trung
vào những yêu cầu thông dụng hơn như GET và POST.
HTTP sinh ra các trang HTML và ta có thể nhúng các Servlet vào một trang
HTML.
Khi có một yêu cầu được gửi tới, đầu tiên nó phải chỉ ra lệnh cho HTTP bằng cách
gọi một phương thức tương ứng. Phương thức này chỉ cho Server biết kiểu hành
động mà nó muốn thực hiện.
Khi có một Client gửi tới một yêu cầu, Server sẽ xử lý yêu cầu nhận được và gửi trả
lại kết quả cho Client. Hai phương thức doGet() và doPost() được sử dụng chung để
nhận và gửi tin trong các Servlet.
Một Servlet bất kỳ, ví dụ MyServlet phải kế thừa HttpServlet và viết đè ít nhất một
trong các phương thức doGet() để thực thi thao tác GET của HTTP, hay doPost() để
thực thi thao tác POST của HTTP.
Trong ví dụ đầu tiên, chúng ta sẽ viết đè phương thức doGet() dạng protected void
doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
…
}
Phương thức doGet() có hai tham số đối tượng thuộc hai lớp HttpServletRequest và
HttpServletResponse (cả hai lớp này được định nghĩa trong javax.servlet.http). Hai
18
đối tượng này cho phép chúng ta truy cập đầy đủ tất cả các thông tin yêu cầu và cho
phép gửi dữ liệu kết quả cho Client để trả lời cho yêu cầu đó.
Với CGI, các biến môi trường và stdin được sử dụng để nhận thông tin về yêu cầu,
tuy nhiên việc đặt tên các biến môi trường có thể khác nhau giữa các chương trình
CGI, và một vài biến có thể không được cung cấp bởi tất cả các Web Server.
Đối tượng HttpServletRequest cũng cung cấp thông tin giống như biến môi
trường của CGI nhưng theo một hướng chuẩn. Nó cũng cung cấp những phương
thức để mở ra các tham số HTTP từ dãy các câu truy vấn hoặc từ nội dung của yêu
cầu phụ thuộc vào kiểu yêu cầu (GET hay POST).
1.3.2. Giới thiệu JSP
1.3.2.1.JSP là gì?
JSP là một công nghệ cho phép thực hiện dễ dàng việc viết các trang web
động (dĩ nhiên ta cũng có thể viết các trang web tĩnh với JSP). Cụ thể, một trang
JSP là một trang HTML (hay XML) trong đó có trộn lẫn các mã Java, tức các
thành phần JSP, cho phép thực hiện nội dung động. Các trang JSP có phần mở
rộng .jsp. Một trang jsp có thể là một bao gồm nhiều tập tin, mà các tập tin này có
thể là một trang jsp hoàn chỉnh hay những đoạn (fragment) của một trang jsp.
Những đoạn jsp này có phần mở rộng là .jspf.
Như ta đã biết, việc viết nội dung html trả lời trong servlet bằng cách dùng
các lệnh out.println() là một việc tốn nhiều công sức, đặc biệt khi nội dung html trả
lời càng phức tạp. Việc này còn tệ hơn khi ta muốn bảo trì hay thay đổi nội dung
trả lời. JSP đem lại một giải pháp tiện lợi hơn khi cho phép chèn nội dung động
vào trang web, nó còn cho phép việc tách bạch phần trình bày và logic xử lý nội
dung. Với servlet thì ta chèn mã html để phát sinh trong lớp java còn JSP thì ngược
lại, ta chèn mã java trong trang html.
1.3.2.2. Chu trình sống của JSP
Trang JSP có chu trình sống xác định tính từ khi hệ thống đọc biên dịch trang
JSP, gọi thực thi và loại bỏ trang ra khỏi bộ nhớ. Chu trình sống của trang JSP gồm
có 5 giai đoạn sau:
Biên dịch trang: Khi trình duyệt yêu cầu trang JSP, Web server sẽ kiểm tra
xem 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 mới vừa thay đổi 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. File
biên dịch .class của trang chỉ diễn ra một lần. Nếu trang đã biên dịch và sau đó
không bị thay đổi trong mã nguồn thì quá trình biên dịch sẽ không xảy ra nữa, do đó
mà tốc độ thực thi sẽ nhanh hơn. Sau khi biên dịch, mã trang sẽ được nạp vào bộ
nhớ để thực thi
Quá trình biên dich trang JSP sẽ được diễn ra như sau:
19
Bước 1: Kiểm tra xem trang đã được dịch thành mã nguồn tương đương
servlet hay chưa.
Bước 2: Nếu chưa được biên dịch thì trang JSP sẽ được biên dịch thành file
nguồn .java theo cấu trúc của servlet. Gọi trình biên dịch javac biên dịch file
nguồn .java thành file thực thi của servlet .class.
Bước 3: Nạp servlet đã biên dịch ở bước 2, thực thi trả kết quả về cho trình
khách.
Bước 4: Nếu file JSP đã được biên dịch trước đó : thực hiện kiểm tra xem nội
dung file .jsp có thay đổi không, Nếu có thì quay lại bước 2 biên dịch lại trang, nếu
không thì quay lại bước 3.
Nạp trang: Kể từ giai đoạn này, quá trình nạp trang tương tự như servlet
(trang JSP sau khi biên dịch có thể coi như một servlet). Chỉ có một điểm khác 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 yêu cầu trang từ trình duyệt.
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 là jspInit() chứ không phải là init() như servlet.
Thực thi: Sau quá trình khởi tạo, Web server sẽ gọi đến phương thức
_jspService (khác với servlet gọi đến doPost(), doGet() hoặc service()). Phương
thức _jspService sẽ chuyển đến hai lớp đối tượng HttpServletRequest và
HttpServletResponse để đọc và ghi kết xuất trả về trình khách.
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ớ. Tương tự như trong
Servlet, có thể cài đặt phương thức jspDestroy() thực hiện giải phóng vùng nhớ
hoặc đóng kết nối trả về tài nguyên cho hệ thống.
1.3.3. JBDC
Trên thực tế đa số ứng dụng đòi hỏi việc lưu trữ thông tin trong cơ sở dữ liệu, vì
vậy ứng dụng thường có 2 phần:
Phần giao diện chương trình và chức năng của ứng dụng: giao tiếp với người
sử dụng thông qua các chức năng lệnh mô tả cho khả năng làm việc của chương
trình như: khả năng nhập dữ liệu, truy xuất thông tin, thống kê, tính toán số liệu để
đáp ứng cho nhu cầu làm việc của người dùng …
Phần cơ sở dữ liệu cung cấp thông tin cho chương trình chính hoạt động, cho
phép lưu trữ thông tin mà người dùng nhập vào, cung cấp các khả năng cho phép
20
chương trình chính khai thác thông tin dựa trên dữ liệu đã có để đáp ứng cho những
nhu cầu cụ thể nào đó của người dùng …
Do chương trình chính hoạt động phụ thuộc vào cơ sở dữ liệu đã được định
nghĩa, nên khi có các tác động của người dùng để thực hiện nhu cầu làm việc trong
quá trình sử dụng ứng dụng thì chương trình chính cần phải tạo ra 1 kết nối đến cơ
sở dữ liệu ở phía dưới để truy xuất thông tin hoặc thực hiện các lệnh cho nhu cầu
lưu trữ,…. Để đáp ứng nhu cầu này, Java cung cấp 1 giao diện lập trình (Java API –
Application Programming Interfaces) hỗ trợ cho các kết nối đến CSDL được gọi là
JDBC – Java Database Connectivity.
Đây là một thư viện chứa các lớp (Classes) và giao diện (Interfaces) cho
phép lập trình viên có thể thực hiện kết nối từ chương trình của mình đến cơ sở dữ
liệu để lưu trữ thông tin và hỗ trợ cho quá trình xử lý.
JDBC cho phép chương trình viết bằng Java có thể truy xuất đến bất kỳ kiểu
dữ liệu nào của CSDL cũng như có thể thực thi trên tất cả các môi trường có hỗ trợ
máy ảo Java (JVM – Java Vitural Marchine)
Về khía cạnh phát triển ứng dụng thì JDBC cho phép xây dựng ứng dụng
Java có thể tác động đến nhiều loại CSDL khác nhau như: SQL Server, Oracle,
MySQL, DB2, Access… Với cùng một hình thức. Có nghĩa là với các loại
CSDL khác nhau thì các đối tượng được tạo ra bởi JDBC trong chương trình vẫn có
thể sử dụng các cấu trúc lệnh phục vụ cho việc thao tác dữ liệu (Tạo, Ghi, Truy vấn,
…) trên CSDL không hề thay đổi dựa trên cấu trúc truy vấn dữ liệu dạng SQL
(Structure Query Language).
Điều này rất hữu ích trong tình huống: 1 ứng dụng ban đầu thiết kế sử dụng
CSDL SQL Server nhưng sau đó vì 1 lý do đặc biệt mà phải chuyển sang sử dụng
MySQL thì phần mã lệnh của chương trình dùng cho việc truy xuất dữ liệu đến
Database vẫn không phải thay đổi gì nhiều, có chăng là điều chỉnh lại các thuộc tính
cần thiết cho việc kết nối CSDL loại khác mà thôi.
21
CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ
2.1. Mô tả bài toán và cách giải quyết vấn đề
2.1.1. Tổ chức hoạt động
Trung tâm Tiệc cưới – hội nghị Hương Sen toạ lạc tại địa chỉ 584, đường Đội Cấn,
quận Ba Đình. Được xây dựng trên diện tích gần 4000m2 với quy mô 2 tầng lầu, bao gồm 2
đại sảnh đãi tiệc hiện đại, không gian thoáng đãng và 1 tầng hầm giữ xe tuyệt đối an toàn,
thuận tiện. Nhà hàng có tổng sức chứa lên đến 3000 khách là địa điểm hoàn hảo cho những
buổi tiệc cưới trang trọng, hoành tráng, những hội nghị chuyên nghiệp cùng các sự kiện
đáng ghi nhớ. Với hình thức kiến trúc hài hoà, công trình mang dáng dấp của một cung điện
sang trọng, rực rỡ và lịch lãm, rất phù hợp cho những bữa tiệc mang phong cách Châu Âu
hiện đại, chuẩn mực nhưng cũng không kém phần ấm áp, gần gũi.
Với phương châm “Luôn đem đến cho khách hàng niềm vui trọn vẹn”, Trung
tâm Hội nghị Tiệc cưới Hương Sen sẽ dành sự quan tâm đặc biệt đến từng chi tiết
để cùng quý vị làm nên ngày vui thành công mỹ mãn. Gồm 2 sảnh tiệc sang trọng,
đây là địa điểm thích hợp cho bữa tiệc của bạn, dù đậm tính truyền thống hay quý
phái theo phong cách phương Tây.Ngoài phục vụ tiệc cưới, Hương Sen còn có Hội
trường hội nghị phục vụ các sự kiện lớn của doanh nghiệp như: hội thảo, hội nghị,
tiệc cuối năm… Khu vực dành cho nhà hàng cũng là một địa chỉ ẩm thực tin cậy
của nhiều khách hàng, với hệ thống phòng ăn gia đình riêng biệt đem lại không gian
ấm cúng cho bữa ăn gia đình trong những dịp lễ kỷ niệm, sinh nhật.
Hương Sen phấn đấu trở thành Trung tâm Hội nghị - tiệc cưới hiện đại bậc nhất Hà
thành. Với tất cả cảnh sắc quyến rũ sang trọng, cùng sự độc đáo, hấp dẫn, đa dạng của các
dịch vụ, Nhà hàng Hương Sen tự tin thu hút du khách và kỳ vọng sớm trở thành một trong
những nơi tổ chức họi nghị, tiệc cưới hấp dần nhất ở Hà Nội.
2.1.2. Quy trình nghiệp vụ
Nhà Hàng chưa sử dụng phần mềm hay Website để quản lý các nghiệp vụ. Nhân viên
của từng bộ phận hoạt động và hổ trợ cho nhau.
Khi có khách hàng muốn đặt tiệc có thể trực tiếp đặt tại website cùa nhà hàng. Khi đặt
tiệc, khách hàng phải đăng nhập vào hệ thống và khai báo thông tin đầy đủ của cá nhân của
khách hàng như:
- Họ tên.
- Giới tính.
- Ngày sinh.
- Địa chỉ.
- Quốc tịch.
22
- Số điện thoại liên lạc….
Khi việc đăng ký đặt tiệc thành công, khách sạn lập hóa đơn thanh toán. Các nhà
quản lý có thể xem thông tin khách, thông tin nhân viên, thông tin về dịch vụ, các phiếu
thống kê tháng, quý hay năm.
2.1.3. Giải quyết vấn đề
Bài toán được phân tích thiết kế theo phương pháp hướng đối tượng gồm các bước
sau:
• Xây dựng sơ đồ use case và đặc tả use case.
• Xây dựng sơ đồ cơ sơ dữ liệu quan niệm và mô tả thuộc tính của bảng.
• Xây dựng sơ đồ tuần tự.
• Xây dựng sơ đồ quan hệ cơ sở dữ liệu.
• Cài đặt cơ sở dữ liệu.
• Cài đặt các ứng dụng, lập trình.
• Kết luận.
2.2. Giới thiệu UML
2.2.1. Khái niệm
Unified Modeling Language (UML): Là một ngôn ngữ mô hình hóa dựng để
xác định, mô hình, xây dựng và trình bày báo cáo về những nhân tố thành phần của
một hệ thống phần mềm. Ngôn ngữ này nắm bắt những quyết định và hiểu biết về
hệ thống đã được ứng dụng. Nó còn được dựng để hiểu biết, thiết kế, định hình, bảo
trì và kiểm soát thông tin của hệ thống.
UML: Là một hệ thống các ký hiệu nhằm vào việc mô hình hệ thống sử dụng
các khái niệm về hướng đối tượng.
UML: Là ngôn ngữ dựng để đặc tả, trình bày trực quan và tài liệu hóa những
tạo tác của hệ thống hướng đối tượng đang được phát triển. UML là sự hợp nhất của
các phương pháp Booch, OMT, ký pháp Objectory, cùng với những ý tưởng tốt
nhất của một số nhà phương pháp luận. Bằng cách hợp nhất những ký pháp sử dụng
bởi những phương pháp hướng đối tượng này.
UML: Là một cố gắng để chuẩn hóa việc phân tích và thiết kế: các mô hình
ngữ nghĩa, các ký pháp và biểu đồ.
UML: Là ngôn ngữ xây dựng nhưng không phải là ngôn ngữ lập trình trực
quan nghưng mô hình của nó có thể kết nối trực tiếp đến các ngôn ngữ lập trình
khác. Có nghĩa là có thể ánh xạ mô hình từ trong UML đến các ngôn ngữlập trình
khác như Java, C++ hay các bảng Cơ sở dữ liệu (CSDL) quan hệ, CSDL hướng đối
tượng. Ánh xạ đó là 2 chiều, có nghĩa là ánh xạ từ UML sang ngôn ngữ lập trình và
ngược lại.
23
2.2.2. Những ưu điểm khi sử dụng UML
Mô tả các mô hình cuả hệ thống – cả thế giới thực và Software – dựa trên
những khái niệm về đối tượng.
Là một ngôn ngữ mô hình hóa chuẩn, linh động và có tính diễn đạt cao. Nhờ
đó có thể trao đổi thông tin về hệ thống cho những người quan tâm về hệ thống một
cách dể dàng. Do đó những chổ sai sót dể dàng nhận ra (Sau khi được mọi người
quan tâm) và sẽ được sữa chữa sớm nên sẽ tránh sai sót hơn khi thời gian về cuối
quá trình hoàn tất chương trình. Rất có ích khi muốn có một hiểu biết tổng quan về
hệ thống.
2.3. Phân tích thiết kế
2.3.1. Biểu đồ User Case
Biểu đồ User Case
2.3.2. Mô tả Ca sử dụng
2.3.2.1.Đăng nhập hệ thống
24
4. Hình 2.2: UserCase đăng nhập
Đặc tả:
• Tên Use Case: đăng nhập hệ thống.
• Tác nhân: Quản lý, Khách hàng.
• Điều kiện tiên quyết (Pre – conditions):
• Điều kiện hoàn thành (Post – conditions): Quản lý hoặc khách hàng được hệ
thống nhận diện.
• Dòng sự kiện chính (Main Flow):
1. Quản lý hoặc Thu ngân yêu cầu hệ thống cho đăng nhập.
2. Hệ thống yêu cầu Quản lý hoặc Thu ngân nhập thông tin đăng nhập.
3. Quản lý hoặc Thu ngân nhập thông tin đăng nhập.
4. Hệ thống xác nhận thông tin đăng nhập và thông báo kết quả.
• Dòng sự kiện phụ (Extension):
1. Nếu trong quá trình thực hiện hệ thống bị dừng bất ngờ:
Quản lý hoặc Thu ngân khởi động lại hệ thống.
Hệ thống hủy bỏ các thao tác trước đó và trở về trạng thái hoạt độngbình
thường.
2. Nếu Quản lý hoặc Thu ngân không nhập tên đăng nhập:
Hệ thống thông báo: “Tên đăng nhập không được rỗng!” .
Quản lý hoặc Thu ngân nhập lại tên đăng nhập.
3. Nếu Quản lý hoặc Thu ngân không nhập mật khẩu:
Hệ thống thông báo: “Mật khẩu không được rỗng!” .
Quản lý hoặc Thu ngân nhập lại mật khẩu.
25