Lập trình viên phải sử dụng các thư viện bên ngoài, như jQuery, Script.aculo.us, Prototype hay Mootools… Chưa hỗ trợ một số module thông dụng: So sánh với framework khác, CodeIgniter kh
Trang 1LỜI CAM ĐOAN
Em xin cam đoan rằng:
Kết quả nghiên cứu trong đồ án này là hoàn toàn trung thực và chưa từng được sử dụng hoặc công bố trong bất kỳ công trình nào khác
Mọi sự giúp đỡ cho việc thực hiện đồ án này đã được cám ơn và các thông tin trích dẫn trong đồ án đều được ghi rõ nguồn gốc
Sinh viên
Nguyễn Văn Hòa
Trang 2LỜI CẢM ƠN
Để hoàn thành đề tài nghiên cứu của mình đúng thời gian quy định, em xin
chân thành cảm ơn Ban giám hiệu nhà trường và các thầy giáo, cô giáo trường Đại học công nghệ thông tin và truyền thông nói chung, các thầy cô giáo bộ môn Mạng và Truyền thông nói riêng đã giúp đỡ và tạo điều kiện cho em học
tập và thực hiện đề tài nghiên cứu này
Em xin chân thành cảm ơn thầy giáo Trịnh Văn Hà- Giáo viên hướng dẫn
em- Người đã luôn tận tình giúp đỡ em giải quyết vướng mắc khi thực hiện đề tài nghiên cứu Mặc dù thời gian làm việc rất bận song thầy vẫn luôn dành thời gian hướng dẫn em mỗi khi gặp khó khăn trong quá trình thực hiện đề tài nghiên cứu
Bên cạnh đó là sự giúp đỡ của các bạn trong lớp đã giúp đỡ em tìm hiểu sâu hơn về ngôn ngữ lập trình PHP & MySQL, ngôn ngữ mà em dùng để xây dựng chương trình demo trong đợt làm đề tài này
Đề tài nghiên cứu đã hoàn thiện nhưng không tránh khỏi những thiếu sót,
em rất mong được sự đóng góp ý kiến của các thầy cô và các bạn đề em có thể hoàn thiện hơn trong những đợt báo cáo lần sau
Em xin chân thành cảm ơn !
Sinh viên
Trang 3MỤC LỤC
LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
MỤC LỤC 3
MỞ ĐẦU 6
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 7
1.1.Tìm hiểu ngôn ngữ PHP 7
1.2 Giới thiệu MySQL 9
1.3 Mô hình MVC 9
1.4 Giới thiệu về Codeigniter Framework 2.x 11
1.4.1 Tổng quan 11
1.4.2 Cài đặt 14
1.4.3 Cấu trúc CodeIgniter 17
1.4.4 Các helper và plugin 24
CHƯƠNG 2 KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ HỆ THỐNG 26
2.1 Khảo sát hiện trạng 26
2.2 Phân tích các chức năng của hệ thống 28
2.2.1 Các chức năng của đối tượng Khách hàng 29
2.2.2 Chức năng của Admin 30
2.3 Biểu đồ phân tích thiết kế hệ thống 33
2.3.1 Biểu đồ Use case tổng quát 33
2.3.2 Biểu đồ hoạt động 35
2.3.3 Biểu đồ trình tự 40
2.3.4 Thiết kế biểu đồ lớp 44
CHƯƠNG 3: XÂY DỰNG DEMO 46
3.1 Giao diện trang chủ 46
3.2 Giao diện đăng ký và đăng nhập của người dùng 47
3.3 Giao diện thông tin chi tiết sản phẩm 48
3.4 Giao diện dịch vụ 49
3.5 Giao diện quản trị 51
KẾT LUẬN 55
TÀI LIỆU THAM KHẢO 56
DANH MỤC HÌNH ẢNH Hình 1.1.Mô hình MVC 9
Trang 4Hình 1.2 Biểu đồ trình tự mô hình MVC 11
Hình 1.3 Cấu hình xampp_start 15
Hình 1.4 Cấu hình xampp_stop 15
Hình 1.5 Thư mục của CodeIgniter Framework 2.2.1 16
Hình 1.6 Thư mục application 16
Hình 1.7 Sơ đồ thể hiện dòng chảy dữ liệu trong CodeIgniter 17
Hình 2.1 Biểu đồ user case tổng quát 33
Hình 2.2 Biểu đồ use case quản lý sản phẩm 34
Hình 2.3 Biểu đồ use case quản lý khách hàng 34
Hình 2.4.Biểu đồ use case quản lý đơn hàng 35
Hình 2.5 Biểu đồ hoạt động chức năng đăng nhập vào hệ thống 35
Hình 2.6 Biểu đồ hoạt động chức năng đăng xuất 36
Hình 2.7 Biểu đồ hoạt động chức năng Tìm kiếm 36
Hình 2.8 Biểu đồ hoạt động chức năng đăng kí thành viên 37
Hình 2.9 Biểu đồ hoạt động chức năng xem thông tin về sản phẩm 37
Hình 2.10 Biểu đồ hoạt động chức năng đặt hàng 38
Hình 2.11 Biểu đồ hoạt động chức năng xoá Đơn hàng 38
Hình 2.12 Biểu đồ hoạt động chức năng thêm sản phẩm 39
Hình 2.13 Biểu đồ hoạt động chức năng sửa thông tin sản phẩm 39
Hình 2.14 Biểu đồ hoạt động chức năng xoá sản phẩm 40
Hình 2.15 Biểu đồ trình tự chức năng đăng nhập 40
Hình 2.16 Biểu đồ trình tự chức năng đăng xuất 41
Hình 2.17 Biểu đồ trình tự chức năng đăng ký thành viên 41
Hình 2.18 Biểu đồ trình tự chức năng tìm kiếm 42
Hình 2.19 Biểu đồ trình tự chức năng thêm mới sản phẩm 42
Hình 2.20 Biểu đồ trình tự chức năng sửa thông tin sản phẩm 43
Hình 2.21 Biểu đồ trình tự chức năng xóa sản phẩm 43
Hình 2.22 Biểu đồ trình tự chức năng đặt hàng 44
Trang 5Hình 2.23 Biểu đồ lớp 45
Hình 3.1.Giao diện trang chủ 46
Hình 3.2: Giao diện form đăng nhập 47
Hình 3.3: Giao diện form đăng ký thành viên 47
Hình 3.4: Giao diện form thông tin chi tiết về sản phẩm hoặc dịch vụ 48
Hình 3.5: Giao diện tin tức 48
Hình 3.6 Giao diện Dịch vụ tại cửa hàng 49
Hình 3.7: Giao diện chi tiết dịch vụ tại cửa hàng và báo giá và bảo hành 49
Hình 3.8: Giao diện gửi liên hệ 50
Hình 3.9: Giao diện danh mục dịch vụ sửa chữa điện thoại 50
Hình 3.10: Giao diện dịch vụ sửa chữa máy tính 51
Hình 3.11: Giao diện đăng nhập của admin 51
Hình 3.12: Giao diện quản lý thành viên 52
Hình 3.13: Giao diện quản lý sản phẩm và dịch vụ 52
Hình 3.14: Giao diện quản lý đơn hàng 53
Hình 3.15: Giao diện quản lý liên hệ của khách hàng 53
Hình 3.16: Giao diện quản lý bài viết 54
Trang 6MỞ ĐẦU
Với quá trình phát triển công nghệ khoa học và kỹ thuật thì Internet đã đóng vai trò quan trọng, nó đã nhanh chóng phát triển trên toàn quốc Việc áp dụng những công nghệ vào các lĩnh vực đời sống của con người ngày càng tăng và không ngừng can thiệp vào hầu hết các công việc Công nghệ thông tin là một trong những ngành khoa học đó
Với công nghệ Web sẽ giúp bạn đưa những thông tin mong muốn của mình lên mạng Internet cho mọi người cùng xem một cách dễ dàng với các công cụ và các ngôn ngữ lập trình khác nhau Sự ra đời của các ngôn ngữ lập trình cho phép chúng ta xây dựng các trang web đáp ứng các yêu cầu của người sử dụng PHP là kịch bản trên phía trình chủ cho phép chúng ta xây dựng trang Web trên cơ sở dữ liệu.Với nhiều ưu điểm nổi bật mà PHP và MySQL được rất nhiều người sử dụng
Với lý do chọn đó,được sự hướng dẫn và giúp đỡ của thầy giáo Thạc sĩ Trịnh Văn Hà,em đã chon đề tài: “Xây dựng website bán và giới thiệu dịch vụ cho cửa hàng HPCMOBILE Thái Nguyên.” làm đề tài báo cáo.
Vì khả năng và thời gian còn hạn chế, Website không tránh khỏi có những thiếu sót nhất định, rất mong sự đóng góp ý của thầy cô và các bạn để Website được hoàn thiện hơn
Trang 7CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 1.1.Tìm hiểu ngôn ngữ PHP
Giới thiệu.
Lịch sử ra đời: Năm 1995, Rasmus Lerdorf tạo ra PHP nhằm giải quyết
việc viết lặp đi lặp lại cùng đoạn mã khi tạo các trang Ban đầu tác giả chỉ có ý định tạo bộ phân giải đơn giản để thay thế các thẻ lệnh trong file HTML bằng các đoạn mã lệnh viết bằng C
PHP là gì? PHP là chữ viết tắt của “Personal Home Page” do Rasmus
Lerdorf tạo ra năm 1994.Vì tính hữu dụng của nó và khả năng phát triển, PHP bắt đầu được sử dụng trong môi trường chuyên nghiệp và nó trở thành “PHP :Hypertext Prerocessor”
Tại sao cần dùng PHP?
PHP được sử dụng để phát triển website động vì nó tốt, nhanh và dễ dàng nghiên cứu hơn các giải pháp khác PHP có khả năng thực hiện và tích hợp chặt chẽ với hầu hết các cơ sở dữ liệu có sẵn, tính năng bền vững linh động và khả năng phát triển không giới hạn Tất cả các đặc tính trên đều miễn phí vì PHP là mã nguồn mở PHP vừa dễ với người mới sử dụng và vừa có khả năng làm được mọi thứ, đáp ứng yêu cầu của lập trình viên chuyên nghiệp
PHP được sử dụng càng ngày càng nhiều và mới đây đã bắt kịp ASP (vốn được xem là ngôn ngữ kịch bản phổ biến nhất hiện nay) PHP là modun thông dụng cho Apache (máy chủ Web phổ biến nhất) và nó đã có mặt trên 12 triệu website
Trang 8w+ Mở dưới dạng Write-Read Nếu file này tồn tại, nội dung sẽ bị
xóa, nếu không tồn tại chúng sẽ được tạo ra
A Mở dưới dạng append dữ liệu (write), nếu nội dung tồn tại, bắt
đầu cuối cùng của nội dung, dữ liệu sẽ được ghi tiếp phần cuối, trong trường hợp file không tồn tại chúng sẽ được tạo ra.a+ Mở dưới dạng append dữ liệu (write & read), nếu nội dung tồn
tại, bắt đầu phần đầu của nội dung, dữ liệu sẽ được ghi tiếp phần đầu, trong trường hợp file không tồn tại chúng sẽ được tạo ra
Thiết lập kết nối cơ sở dữ liệu:
Để kết nối cơ sở dữ liệu MySQL, cần cung cấp tên Server hay IP (có thể là localhost) của máy chứa cơ sở dữ liệu MySQL, Username và Password để đăng nhập làm việc trên cơ sở dữ liệu được mở
$link = mysql_connect(“servername”, “username”, “password”)
or die(“Không kết nối được với CSDL”);
Mở một CSDL: mysql_select_db(“database name”); hoặc mysql_select_db
(“database name”, $link);
Đóng kết nối cơ sở dữ liệu: mysql_close(database_connection);
Truy vấn cơ sở dữ liệu:
Int mysql_query(string sql);
Int mysql_query(string sql, [int db_connect]);
Trang 9Int mysql_query(string database, string sql, [int db_connect]);
Số lượng mẩu tin: mysql_num_rows(); Cho biết số lượng mẩu tin
câu truy vấn trả về;
Truy vấn dữ liệu: Int mysql_fetch_array($result);
Mysql_fetch_object($result);
Dung lượng của tập mẩu tin: int mysql_free_result(int $result);
1.2 Giới thiệu MySQL.
MySQL là ứng dụng cơ sở dữ liệu mã nguồn mở phổ biến nhất hiện nay và được sử dụng phối hợp với PHP.Trước khi làm việc với MySQL cần xác định các nhu cầu cho ứng dụng
MySQL là cơ sở dữ liệu có trình giao diện trên Windows hay Linux,cho phép người sử dụng có thể thao tác các hành động liên quan đến nó.Việc tìm hiểu từng công nghệ trước khi bắt tay vào việc viết mã kịch bản PHP,việc tích hợp hai công nghệ PHP và MySQL là một công việc cần thiết và quan trọng
Chúng ta có thế download MySQL tại website www.mysql.com
1.3 Mô hình MVC
Mô hình MVC (Model - View - Controller) là một kiến trúc phần mềm hay
mô hình thiết kế được sử dụng trong kỹ thuật phần mềm Nó giúp cho các developer tách ứng dụng của họ ra 3 thành phần khác nhau Model, View và Controller Mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác
Các thành phần trong MVC
Trang 10Giữ nhiệm vụ nhận điều hướng các yêu cầu từ người dùng và gọi đúng những phương thức xử lý chúng… Chẳng hạn, thành phần này sẽ request từ url và form để thao tác trực tiếp với Model
Nhìn lại sơ đồ phía trên, ta thấy, các Web Browser gửi một yêu cầu thông qua môi trường internet đến mô hình MVC và nơi nhận yêu cầu chính là file Controller-trung tâm xử lý File Controller sẽ xử lý thao tác xem rằng có cần phải
sử dụng Model hay không?
Trường hợp 1- luồng dữ liệu theo dòng 1: Controller sẽ xử lý thao tác mà
Trang 11web browser yêu cầu và yêu cầu Model trả về những phương thức xử lý và sau khi
có kết quả nó sẽ trả về View thông qua đường hướng dữ liệu 1 View sẽ thực hiện trả về những kết qủa của Model và Controller sau khi điều hướng về cho người xem ở web browser Khi đó, người dùng sẽ thấy được kết quả mà họ đã đưa lên
Trường hợp 2-luồng dữ liệu theo dòng 2: khi dữ liệu không cần thiết phải
xử lý qua Model thì Controller sẽ xử lý dữ liệu và trả về View Khi đó mô hình sẽ
có dạng VC – là một dạng web tĩnh View sẽ thực hiện trả về những kết qủa của Model và Controller sau khi điều hướng về cho người xem ở web browser Khi đó, người dùng sẽ thấy được kết quả mà họ đã đưa lên
Đây là một cách đơn giản để mô tả lại luồng sự kiện được xử lý trong MVC:
User tương tác với View, bằng cách click vào button, user gửi yêu cầu đi
Controller nhận và điều hướng chúng đến đúng phương thức xử lý ở Model
Model nhận thông tin và thực thi các yêu cầu trả lại kết quả
Controller sẽ điều khiển view hiển thị kết quả tương ứng cho người sử dụng
Trang 12Hình 1.2 Biểu đồ trình tự mô hình MVC
Ưu và nhược điểm của mô hình MVC
Ưu điểm: Thể hiện tính chuyên nghiệp trong lập trình, phân tích thiết kế
Do được chia thành các phần độc lập nên giúp phát triển ứng dụng nhanh hơn, đơn giản, dễ nâng cấp, bảo trì…
Nhược điểm: Đối với dự án nhỏ việc áp dụng mô hình MVC gây cồng
kềnh, tốn thời gian trong quá trình phát triển Tốn thời gian trung chuyển dữ liệu của các thành phần
1.4 Giới thiệu về Codeigniter Framework 2.x
1.4.1 Tổng quan
Trang 13CodeIgniter là một nền tảng ứng dụng web (web application framework) nguồn mở được dùng để xây dựng các ứng dụng web động tương tác với PHP Nó cho phép các nhà phát triển xây dựng một ứng dụng web nhanh hơn - so với việc viết mã hỗn tạp - bằng cách cung cấp 1 bộ thư viện đầy đủ cho các tác vụ thông thường, cũng như cung cấp một mô hình tương tác đơn giản và dễ hiểu cho việc kết nối tới những bộ thư viện đó Phiên bản chính thức đầu tiên của CodeIgniter được công bố vào 28 tháng 2 năm 2006.Phiên bản mới nhất cho tới bây giờ là 2.2.2 được công bố chính thức vào tháng 04 năm 2015.
CodeIgniter khuyến khích các lập trình viên sử dụng mô hình controller architectural pattern cho các ứng dụng web của mình
model-view-CodeIgniter cũng mang một số các khái niệm đặc thù và các tính năng cơ bản của các mô hình MVC khác như Ruby on Rails:
Hỗ trợ kết nối và tương tác đa nền tảng cơ sở dữ liệu
Tương tác với cơ sở dữ liệu thông qua active records
Session Management (quản lí Session)
Định dạng và chuẩn hóa form và dữ liệu đầu vào
Hỗ trợ Caching toàn trang để tăng tốc độ thực thi và giảm tải tối thiểu cho máy chủ
Scaffolding (Bị phản đối từ cộng đồng nên đã được lược bỏ trong phiên bản 2.0 trở về sau)
Hỗ trợ Template Engine hoặc sử dụng chính PHP tags để điều hướng trong Views
Hỗ trợ Hooks, các lớp ngoại (Class Extensions), và các Plugins
Ưu điểm: Trong số các mô hình framework MVC khác, CodeIgniter có các
ưu điểm sau:
Tương thích hoàn toàn với PHP 4 Nếu sử dụng PHP 5 sẽ dùng được các tính năng hữu ích khác như khả năng gọi phương thức dây chuyền (method
Trang 14chaining ability).
Mô hình code nhẹ cho hệ thống, cải thiện tốc độ thực thi
Đơn giản trong việc cài đặt, cấu hình và cấu trúc thư mục
Error Logging
Mềm dẻo trong việc định tuyến URI (URI Routing)
Framework này tích hợp thêm vào một số lớp thư viện khác mà các framework khác chưa mặc định tích hợp:
Mã hóa dữ liệu - Data Encryption
Đo lường tốc độ thực thi - Benchmarking
Application Profiling
Lịch - Calendaring Class
User Agent Class
Nén - Zip Encoding Class
Trackback Class
XML-RPC Library
Unit Testing Class
Search-engine Friendly URLs
Trang 15 Một lượng lớn các hàm hỗ trợ (helpers)
Nhược điểm:
Chưa hỗ trợ Object-Relational Mapping: Object Relational Mapping
(ORM) là một kỹ thuật lập trình, trong đó các bảng của cơ sở dữ liệu được ánh xạ thành các đối tượng trong chương trình Kỹ thuật này giúp cho việc thực hiện các thao tác trong cơ sở dữ liệu (Create Read Update Delate – CRUD) dễ dàng, mã nguồn ngắn gọn hơn Hiện tại, CodeIgniter vẫn chưa hỗ trợ ORM
Chưa hỗ trợ AJAX: AJAX (Asynchronous JavaScript and XML) đã trở
thành một phần không thể thiếu trong bất kỳ ứng dụng Web 2.0 nào AJAX giúp nâng cao tính tương tác giữa người dùng và hệ thống, giúp cho người dùng có cảm giác như đang sử dụng ứng dụng desktop vì các thao tác đều diễn ra “tức thời” Hiện tại, CodeIgniter vẫn chưa có thư viện dựng sẵn nào để hỗ trợ xây dựng ứng dụng AJAX Lập trình viên phải sử dụng các thư viện bên ngoài, như jQuery, Script.aculo.us, Prototype hay Mootools…
Chưa hỗ trợ một số module thông dụng: So sánh với framework khác,
CodeIgniter không có các module thực thi một số tác vụ thường gặp trong quá trình xây dựng ứng dụng web như Chứng thực người dùng (User Authorization), Trình phân tích RSS (RSS Parser) hay Trình xử lý PDF…
Chưa hỗ trợ Event-Driven Programming: Event-Driven Programming
(EDP) là một nguyên lý lập trình, trong đó các luồng xử lý của hệ thống sẽ dựa vào các sự kiện, chẳng hạn như click chuột, gõ bàn phím…Đây không phải là một khuyết điểm to lớn của CodeIgniter vì hiện tại, chỉ có một số ít framework hỗ trợ EDP, bao gồm Prado, QPHP và Yii
1.4.2 Cài đặt
Yêu cầu hệ thống: CodeIgniter có thể hoạt động trên nhiều hệ điều hành và
server, yêu cầu có cài đặt PHP phiên bản 4.x hoặc cao hơn; hệ quản trị cơ sở dữ liệu: MySQL (4.1+), MySQLi, Mircrosoft SQL Server, Postgres, Oracle, SQLite,
và ODBC
Trang 16Để cài đặt và sử dụng được CodeIgniter Framewrk, trước hết ta cần phải cài đặt một phần mềm hỗ trợ server giả lập Hiện nay, có ba phần mềm khá phổ biến giúp chúng ta thực hiện được việc tạo server giả lập trên localhost một cách dễ dàng và nhanh chóng là: Appserver, Xamppserver và Wampserver Các phần mềm này bao gồm server Apache, trình biên dịch PHP và trình quản lý phpMyAdmin là các thành phần để chạy được ứng dụng PHP.
Trong bài báo cáo đề tài này, em xin hướng dẫn cài đặt Xampp Để cài đặt Xampp, ta tiến hành theo các bước sau:
Bước 1: Download gói cài đặt Xampp tại
Trang 17Hình 1.3 Cấu hình xampp_start
Và muốn ngừng chạy ta chọn Stop
Trang 18Hình 1.4 Cấu hình xampp_stop
Và muốn điều khiển Xampp thì chọn xampp_control
Bước 2: Để cài đặt và chạy ứng dụng đầu tiên trong codeigniter Bạn cần
download bộ framework này tại đây: http://www.codeigniter.com/download
Sau khi download xong Chúng ta giải nén sẽ thấy bố cục của chúng như hình bên dưới
Trang 19Hình 1.5 Thư mục của CodeIgniter Framework 2.2.1Như các bạn thấy, chúng ta có tới 3 thư mục là: application, system, user_guide và file index.php Trong đó, chúng ta chỉ quan tâm tới 2 thư mục là application, system và file index.php.
Copy chúng vào thư mục D/xampp/htdocs Trong trường hợp này, tạo thư mục tên baocao để chứa chúng
Sau khi đã hoàn tất thao tác, kế tới ta tìm hiểu xem, chức năng của 2 thư mục này như thế nào
+ Thư mục system là thư mục dùng để chứa thư viện mặc định ban đầu của framework
+ Thư mục application là thư mục dùng để chứa code do chúng ta tạo ra
Vì thế, sau này chúng ta chủ yếu sẽ thao tác ở thư mục application
Trang 20Hình 1.6 Thư mục applicationNhư các bạn đã thấy ở hình trên Thư mục application của chúng ta chứa khá nhiều thư mục khác nhau Mỗi thư mục có những nhiệm vụ khác nhau
Thư mục config: Dùng để chứa các file cấu hình như kết nối CSDL, cấu hình đường dẫn, cấu hình ngôn ngữ,…
Thư mục Controllers: Chứa các file controller của ứng dụng
Thư mục Models: Chứa các file thao tác trên CSDL của ứng dụng
Thư mục Views: Chứa các file hiển thị thông tin khi tương tác
1.4.3 Cấu trúc CodeIgniter
Dòng chảy dữ liệu trong CodeIgniter
Hình 1.7 Sơ đồ thể hiện dòng chảy dữ liệu trong CodeIgniter
1 Tập tin index.php đóng vai trò làm controller đầu vào, thiết lập các tài
nguyên cần thiết cho hệ thống
2 Routing: Quá trình điều hướng giúp xác định các yêu cầu và hướng xử lý
đối với chúng
3 Caching: Nếu dữ liệu được yêu cầu đã được lưu trong bộ đệm,
CodeIgniter sẽ trả dữ liệu trong bộ đệm về phía client Quá trình xử lý kết thúc
4 Security: Dữ liệu trước khi được chuyển đến các Controller sẽ được lọc
Trang 21để phòng chống XXS hoặc SQL Injection.
5 Application Controller: Controller xử lý dữ liệu nhận được bằng cách
gọi đến các Models, Libraries, Helpers, Plugins…có liên quan
6 View: Dữ liệu được chuyển qua View để hiển thị cho người dùng Nếu
chức năng caching được bật, dữ liệu sẽ được lưu trong cache cho những lần yêu cầu tiếp theo
Trong thực tế, đôi khi ta cần xen vào các bước trong sơ đồ trên Chẳng hạn, trước khi một controller được gọi, ta có thể muốn lưu log xuống tập tin trong hệ thống CodeIgniter sử dụng cơ chế hook cho phép ta thực hiện việc này Để kích hoạt hook, ta cần thay đổi giá trị của biến $config['enable_hooks'] trong tập tin application/config/config.php: $config['enable_hooks'] = TRUE;
Các hook được khai báo trong tập tin application/config/hooks.php, có mẫu sau:
domain.com/index.php/controller/method/param/…
Trong đó:
Segment controller là tên của lớp controller được gọi
Trang 22 Segment method là tên của phương thức trong lớp controller ở trên.
Segment param là các đối số của phương thức đó
Như vậy, URI domain.com/index.php/product/view/1 sẽ mang ý nghĩa: Gọi đến phương thức view() thuộc lớp Product với đối số truyền vào bằng 1
Định tuyến URI (URI Routing)
Trong thực tế, URI domain.com/index.php/product/view/1 lại không thân thiện với các bộ máy tìm kiếm bằng URI domain.com/index.php/product/ view/appple-ipad-1 CodeIgniter cho phép lập trình viên có thể thay đổi cơ chế xử
lý URL mặc định thông qua chức năng Định hướng URI bằng cách thiết lập các quy luật trong tập tin application/config/routes.php Tập tin này chứa mảng $route, với khóa là URI mới và giá trị là URI cũ Các quy luật được đọc theo thứ tự từ trên xuống, quy luật trước có độ ưu tiên cao hơn quy luật sau CodeIgniter cho phép sử dụng các ký tự đại diện (wildcard) để thay thế CodeIgniter đã quy định sẵn hai ký
tự đại diện:
:num tương ứng với các giá trị số
:any tương ứng với bất kỳ giá trị nào
Thêm hậu tố vào URL
Các bộ máy tìm kiếm có xu hướng thân thiện hơn với các tập tin HTML Bằng cách thay đổi giá trị biến $config['url_suffix'] trong tập tin system/application/config /config.php, ta có thể thêm hậu tố HTML hay bất cứ hậu
tố nào khác vào cho URL Ví dụ, với $config['url_suffix'] = '.html', URL của ta sẽ như sau: domain.com/index.php/controller/method/param.html
Loại bỏ chuỗi index.php trong URL
Theo mặc định, chuỗi index.php được thêm vào URL Để loại bỏ chuỗi này,
ta có thể sử dụng một tập tin htaccess có nội dung như sau:
Options +FollowSymLinks All –Indexes
RewriteEngine On
RewriteCond $1 !^(index\.php|resources|robots\.txt)
Trang 23RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Model
Một lớp model chuẩn trong CodeIgniter có cấu trúc như sau:
class Example_model extends Model {
Khi khai báo một lớp model, ta cần tuân theo một số quy tắc:
-Tên lớp được viết hoa chữ đầu tiên, phần còn lại viết thường Ví dụ: User_model, Blog_model, Article_model…
-Tên tập tin được đặt như tên lớp, và được đặt trong thư mục application/models/ Các thư mục có thể được lưu lồng vào nhau để thuận tiện cho việc quản lý Ví dụ: application/models/user_model.php, application/models /front_end/blog_model.php, application/models/back_end/article_model.php…
-Bắt buộc phải kế thừa từ lớp Model Trong hàm tạo của lớp con, phải gọi đến hàm tạo của lớp cha
-Để sử dụng model trong controller, ta sử dụng đoạn mã sau:
Trang 24Trong đó, model_name là tên của lớp model Nếu lớp model được lưu trong một thư mục, ta cần ghi rõ đường dẫn đến thư mục đó Ví dụ lớp Blog_model được lưu trong thư mục application/models/front_end/ blog_mode.php Để sử dụng lớp này, ta sử dụng đoạn mã sau: $this>load>model('front_end/blog_model');
Sau khi load lớp model, ta có thể sử dụng lớp này trong chương trình bằng cách gọi: $this->model_name->method();
Để gán một tên khác cho lớp model khi sử dụng trong chương trình, ta có thể truyền vào tham số thứ hai như sau: $this->load->model('model_name', 'ModelName');
Khi đó, để sử dụng các phương thức của lớp model, ta gọi: $this -> ModelName ->method();
Khi sử dụng, chỉ cần khai báo đường dẫn tương đối đến thư mục chứa view
Ví dụ tập tin header.tpl.php được lưu trong thư mục application/views/front_end
Để hiển thị view này, ta sử dụng đoạn mã sau: $this->load->view('front_end/header.tpl');
CodeIgniter cho phép sử dụng nhiều view trong cùng một phương thức của controller Dữ liệu trong các view sẽ được kết hợp lại với nhau Ví dụ:
class Example extends Controller {
function showExample()
{
// Loading multiple views
Trang 25CodeIgniter còn cho phép lập trình viên có thể lấy về nội dung của view thay vì xuất trực tiếp trình duyệt, bằng cách truyền true làm đối số thứ ba khi tải view.
Controller
Một lớp controller chuẩn trong CodeIgniter có mẫu:
class Example extends Controller {
Trang 26-Tên lớp được viết hoa chữ đầu tiên, phần còn lại viết thường Ví dụ: User, Blog, Article…
-Tên tập tin được đặt như tên lớp, và được đặt trong thư mục application/controllers/ Các thư mục có thể được lưu lồng vào nhau để thuận tiện cho việc quản lý Ví dụ: application/controllers/user.php, application/ controllers/front_end/blog.php, application/controllers/back_end/article.php…
-Bắt buộc phải kế thừa từ lớp Controller Trong hàm tạo của lớp con, phải gọi đến hàm tạo của lớp cha
Segment thứ hai trong URI sẽ gọi đến phương thức tương ứng trong controller.Các giá trị của các segment còn lại trong URI chính là các tham số truyền vào cho phương thức này CodeIgniter quy định một phương thức đặc biệt, index() Phương thức này có thể xem như đầu vào của controller, sẽ được tự động gọi trong trường hợp segment thứ hai của URI bị bỏ trống
Các thư viện
Sức mạnh của CodeIgniter nằm ở các thư viện xây dựng sẵn Hiện tại, CodeIgniter hỗ trợ người dùng 26 thư viện sau:
Benchmarking Hỗ trợ đánh gía hiệu năng hệ thống
Calendar Hỗ trợ tạo lịch tự động
Cart Hỗ trợ chức năng giỏ hàng trong các website thương mại
điện tử
Config Cho phép thiết lập hệ thống
Database Hỗ trợ thao tác trên cơ sở dữ liệu
Encryption Hỗ trợ mã hóa và giải mã thông tin
File Uploading Hỗ trợ upload tập tin từ người dùng lên server
Form Validation Cho phép kiểm tra dữ liệu người dùng
Trang 27HTML Table Hỗ trợ xây dựng bảng tự động
Image
Manipulation
Hỗ trợ xử lý ảnh
Input and Security Hỗ trợ xử lý dữ liệu đầu vào và bảo mật
Loader Hỗ trợ tải các thành phần của CodeIgniter
Language Hỗ trợ hiển thị đa ngôn ngữ
Output Hỗ trợ xuất thông tin về phía trình duyệt của người dùng
Pagination Hỗ trợ phân trang tự động
Session Hỗ trợ xử lý session
Trackback Cho phép và nhận thông tin trackback
Template Parser Cho phép xây dựng và xử lý mã giả trong các tập tin view
Typography Hỗ trợ định dạng văn bản
Unit Testing Hỗ trợ unit testing
URI Cho phép lấy thông tin từ URI
User Agent Cho phép xác định thông tin trình duyệt của người
dùng,thiết bị di động hay các robot đang truy cập website
XML-RPC Cho phép gửi yêu cầu đến một XML-RPC hoặc tự xây
dựng một XML-RPC cho hệ thống
Zip Encoding Cho phép tạo tập tin ZIP
Để sử dụng một thư viện nào đó, ta khai báo như sau:
Trang 28Form Helper giúp tạo form, Cookie Helper giúp xử lý cookie…Các helper không được xây dựng thành từng lớp đối tượng, đơn giản chúng là tập hợp những hàm thủ tục được phân thành từng nhóm riêng biệt, và chúng không phụ thuộc vào nhau.
Các helper của CodeIgniter được lưu trong thư mục system/helpers Lập trình viên có thể tự xây dựng riêng các helper cho mình, hoặc sử dụng helper được chia sẻ trên mạng Các helper này được lưu trong thư mục system/application/helpers Khi khai báo sử dụng một helper nào đó, trước tiên CodeIgniter sẽ tìm trong thư mục system/application/helpers, nếu không tìm thấy
sẽ chuyển sang tìm trong thư mục system/helpers
Để sử dụng một helper, ta khai báo như sau:$this->load->helper ('helper_name');
Trong đó, helper_name là tên của helper, bỏ đi phần “.php” hoặc “_helper” Chẳng hạn để sử dụng URL Helper, là tập tin có tên url_helper.php, ta khai báo:
mở rộng, và có thêm tiền tố MY_ Tiền tố này có thể được thay đổi bằng cách thiết lập giá trị biến $config['subclass_prefix'] trong tập tin application/config/config.php Lưu ý: CI_ là tiền tố mặc định của CodeIgniter, ta không nên sử dụng
Plugin có chức năng tương tự như helper.Điểm khác biệt là plugin thường chỉ có duy nhất một hàm, trong khi helper là tập hợp các hàm cùng thực hiện một loại tác vụ nào đó Các plugin được lưu trong thư mục system/plugins, hoặc
Trang 29system/application/plugins Khi sử dụng plugin, CodeIgniter sẽ tìm trong thư mục system/application/plugins trước, sau đó đến thư mục system/plugins Để sử dụng plugin, ta khai báo như sau: $this->load->plugin('plugin_name');
Trong đó, plugin_name là tên của helper, bỏ đi phần “.php” hoặc “plugin” Chẳng hạn để sử dụng Captcha plugin, là tập tin có tên captcha_pi.php, ta khai báo: $this->load->plugin('captcha');
Ta cũng có thể sử dụng nhiều plugin cùng lúc bằng cách khai báo: $this->load->plugin( array('plugin1', 'plugin2', 'plugin3') );
Trang 30CHƯƠNG 2 KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ HỆ THỐNG 2.1 Khảo sát hiện trạng
Cửa hàng mua bán sửa chữa máy tính điện thoại HPCmobile có địa chỉ tổ 7 cách đường tròn Chùa hàng 50m Cửa hàng chuyên cung cấp các mặt hàng máy tính điện thoại, phụ kiện máy tính và điện thoại, cung cấp dịch vụ sửa chữa máy tính, laptop, điện thoại Do nhu cầu phát triển và quảng bá các sản phẩm và dịch vụ của cửa hàng HPCmobile Thái Nguyên Do vậy em chọn đề tài: Viết website bán
và giới thiệu dịch vụ cho cửa hàng HPCmobile Thái Nguyên làm đề tài Nhằm giới thiệu và quảng bá các sản phẩm và dịch vụ của cửa hàng tới khách hàng giúp khách hàng có thêm thông tin về các sản phẩm và dịch vụ Khách hàng không cần đến tại cửa hàng vẫn có thể mua và sử dụng các dịch vụ tại cửa hàng trên website, khách hàng có thể đăng ký tài khoản hoặc không cần đăng ký tài khoản vẫn có thể mua và sử dụng các dịch vụ tại cửa hàng trên website khách hàng sẽ để lại thông tin liên hệ như tên, địa chỉ, số điện thoại, cửa hàng sẽ liên hệ lại với khách hàng Khi khách hàng đã lựa chọn sản phẩm mà mình muốn mua trên website Cửa hàng
sẽ giao tận tay sản phẩm mà khách hàng đã chọn mua qua thông tin khách hàng cung cấp, cửa hàng sẽ miễn phí giao hàng trong địa phận Tỉnh Thái Nguyên với những khách hàng ngoại tỉnh cửa hàng sẽ gửi chuyển phát nhanh cho khách hàng mọi chi phí vận chuyển và chuyển phát do khách hàng chi trả Với việc sử dụng dịch vụ tại cửa hàng, khách hàng có thể tham khảo trên website những lỗi thường gặp chi phí sửa chữa và bảo hành (Lưu ý mọi hoạt động sửa chữa bảo hành đều thực hiện tại cửa hàng)
Hình thức thanh toán khi khách hàng lựa chọn thanh toán online trên website của cửa hàng cửa hàng sẽ thông qua chuyển khoản ngân hàng bằng dịch vụ tạm giữ tại ngân hàng Khi khách hàng đã nhận được hàng cửa hàng sẽ nhận thanh toán của khách hàng tại ngân hàng Đối với khách hàng trong địa phận tỉnh Thái Nguyên cửa hàng sẽ giao sản phẩm đến tận tay khách hàng và thanh toán trực tiếp
Trang 31bằng tiền mặt hoặc khách hàng cũng có thể ghé thăm cửa hàng và mua các sản phẩm và sử dụng các dịch vụ của cửa hàng.
Khi khách hàng sử dụng dịch vụ sửa chữa tại cửa hàng khách hàng có thể tham khảo thông tin các pan bệnh và triệu chứng thường gặp trên website trên website
sẽ cung cấp thông tin về pan bệnh thường gặp giá cả sửa chữa, và bảo hành tại cửa hàng Khi khách hàng sử dụng dịch vụ sửa chữa tại cửa hàng, nhân viên tại cửa hàng sẽ nghe khách hàng miêu tả về triệu chứng của máy bị lỗi ra sao, để có hướng sửa chữa và tư vấn cho khách hàng về cách thức sửa chữa, chi phí sửa chữa, và bảo hành sau sửa chữa Khách hàng có thể ngồi đợi cửa hàng thực hiện đối với các pan bệnh khó Cửa hàng sẽ có ghi lại thông tin của khách hàng bằng giấy biên lai
và hẹn gặp khách hàng sau khi hoàn thành xong việc sửa chữa cửa hàng sẽ liên hệ lại với khách hàng thông qua số điện thoại của khách hàng để báo khách hàng đến nhận máy đã sửa chữa tại cửa hàng và thanh toán dịch vụ
Khi khách hàng mua sản phẩm tại cửa hàng Cửa hàng sẽ dán tem bảo hành đối với tất cả các mặt hàng được bán ra tại cửa hàng khi sản phẩm gặp lỗi tùy từng sản phẩm sẽ có thời gian bảo hành khác nhau đối với các sản phẩm như phụ kiện điện thoại cửa hàng sẽ đổi mới trong 3 tháng đầu Đối với phụ kiện máy tính cửa hàng
sẽ ghi phiếu bảo hành và có thời gian bảo hành trên tem của cửa hàng
Sau mỗi ngày làm việc cửa hàng sẽ tổng hợp lại các sản phẩm đã bán ra các dịch vụ mà khách hàng đã sử dụng tại cửa hàng và ghi vào sổ Hàng tháng cửa hàng sẽ tính toán xem lợi nhuận hàng tháng, các sản phẩm bán chạy trong tháng đó
để nhập thêm các sản phẩm hoặc các mặt hàng
Trên Website của Cửa hàng sẽ:
-Giới thiệu về các mẫu máy tính điện thoại hiện có tại cửa hàng
-Các thông tin đi kèm cho phép thanh toán online các mặt hàng và dịch vụ
Trang 32Với website này người mua hàng thay vì phải đến trực tiếp cửa hàng thì họ
có thể lên mạng để xem thông tin sản phẩm và đặt mua các sản phẩm, hoặc khách hàng có như cầu sử dụng các dịch vụ sửa chữa tại cửa hàng như sửa chữa điện thoại, máy tính đều có thể xem giá sửa chữa các pan bệnh thường gặp đều có trên website (Lưu ý mọi dịch vụ sửa chữa đều thực hiện tại cửa hàng)
Để xây dựng website bán và giới thiệu dịch vụ cho cửa hàng HPCmobile,
đề tài cần phải thực hiện những yêu cầu sau:
+Cập nhật một hệ thống các loại điện thoại,máy tính và dịch vụ
+Đưa ra kết quả cho khách hàng để khách hàng có thể lựa chọn phù hợp
Từ một số yêu cầu trên website bán máy tính điện thoại phải thực hiện được một số chức năng sau:
-Quản trị hệ thống
-Quản trị người dùng
2.2 Phân tích các chức năng của hệ thống
Các tác nhân của hệ thống gồm có:
Trang 33 Khách hàng có chức năng: Đăng kí thành viên, đăng nhập, đăng xuất, tìm kiếm, xem thông tin sản phẩm, gửi phản hồi, đặt hàng, thanh toán.
Admin: là thành viên quản trị của hệ thống, có các quyền và chức năng như: tạo các tài khoản, quản lý sản phẩm và dịch vụ, quản trị người dùng, quản lý hoá đơn,…
2.2.1 Các chức năng của đối tượng Khách hàng
Khi tham gia vào hệ thống thì họ có thể đăng ký làm thành viên của hệ thống, đăng nhập, đăng xuất, xem thông tin, tìm kiếm sản phẩm, gửi phản hồi, đặt hàng, thanh toán
Chức năng đăng ký thành viên
Description: Dành cho khách hàng đăng ký làm thành viên để có thêm nhiều chức năng cho việc mua bán sản phẩm, cũng như tạo mối quan hệ lâu dài với công ty Qua đó, thành viên sẽ được hưởng chế độ khuyến mại đặc biệt
Input: Khách hàng phải nhập đầy đủ các thông tin (*: là thông tin bắt buộc)
Tên đăng nhập: (*)
Địa chỉ email: Nhập địa chỉ email của Member (*)
Trang 34 Mật khẩu: (*)
Nhập lại mật khẩu (*)
Process: Kiểm tra thông tin nhập Nếu thông tin chính xác sẽ lưu thông tin vào CSDL và thêm thông tin của thành viên đó vào CSDL
Output: Đưa ra thông báo đăng ký thành công hoặc yêu cầu nhập lại nếu thông tin không hợp lệ
Chức năng đăng nhập
Description: Cho Member login vào hệ thống
Input: Người dùng nhập vào các thông tin về username, password để login.Process: Kiểm tra username và password của người dùng nhập vào và so sánh với username và password trong CSDL
Output: nếu đúng cho đăng nhập và hiển thị các chức năng của Member, ngược lại hiển thị thông báo yêu cầu nhập lại nếu thông tin không chính xác
Chức năng đăng xuất
Description: Cho phép người dùng đăng xuất khỏi hệ thống khi không còn nhu cầu sử dụng hệ thống
Input: Người dùng click vào nút thoát trên hệ thống
Process: Tiến hành xóa session lưu thông tin đăng nhập để dừng phiên làm việc của tài khoản Member trong hệ thống
Output: Quay trở lại trang hiện hành Ẩn hết các chức năng của Member
Chức năng tìm kiếm sản phẩm và dịch vụ
Input: Nhập vào hoặc lựa chọn thông tin tìm kiếm theo Hãng, theo Giá, theo tên sản phẩm và dịch vụ, theo chủng loại…
Process: Lấy thông tin sản phẩm từ CSDL theo các trường tìm kiếm
Output: Hiện chi tiết thông tin sản phẩm thỏa mãn yêu cầu tìm kiếm
Chức năng xem thông tin sản phẩm và dịch vụ
Description: Cho phép xem chi tiết thông tin của sản phẩm và dịch vụ
Trang 35Input: Chọn sản phẩm và dịch vụ cần xem.
Process: Lấy thông tin sản phẩm từ CSDL thông qua ID
Output: Hiện chi tiết thông tin sản phẩm và dịch vụ
Chức năng đặt hàng
Description: Cho phép tất cả các khách hàng có thể đặt hàng hoặc xem các dịch vụ của cửa hàng mà không cần phải là thành viên của hệ thống
Input: Sau khi xem giỏ hàng, khách hàng có nhu cầu đặt hàng qua mạng thì
có thể click vào nút đặt hàng và điền một số thông tin cần thiết để người quản trị có thể xác nhận thông tin và giao hàng trực tiếp đến đúng địa chỉ một cách nhanh nhất
2.2.2 Chức năng của Admin
Các chức năng quản lý khách hàng (thành viên):
Chức năng xoá thành viên:
Description: Giúp Admin có thể xóa thành viên ra khỏi CSDL
Input: Chọn thành viên cần xóa
Process: Lấy các thông tin của thành viên và hiển thị ra màn hình để chắc chắn rằng Admin xóa đúng thành viên cần thiết
Output: Load lại danh sách thành viên để biết được đã xoá thành công hành viên ra khỏi CSDL
Chức năng xem thông tin chi tiết khách hàng:
Description: Xem chi tiết thành viên có trong CSDL
Input: Chọn tên thành viên đó
Process: Lấy toàn bộ thông tin chi tiết của thành viên có trong CSDL
Output: Hiển thị chi tiết thông tin của thành viên
Trang 36Chức năng sửa thông tin khách hàng:
Description: Cập nhật thành viên có trong CSDL
Input: Chọn chức năng cập nhật thành viên
Process: Lấy toàn bộ thông tin của thành viên có trong CSDL
Output: Hiển thị bảng thành viên
Các chức năng quản lý sản phẩm và dịch vụ
Chức năng chỉnh sửa thông tin sản phẩm và dịch vụ:
Description: Giúp Admin thay đổi thông tin của sản phẩm và dịch vụ đã có trong CSDL
Input: Admin nhập thông tin mới của sản phẩm và dịch vụ
Process: Cập nhật thông tin mới cho sản phẩm và dịch vụ
Output: Hiển thị thông báo đã cập nhật sản phẩm và dịch vụ
Chức năng xoá sản phẩm:
Description: Giúp Admin có thể xoá sản phẩm và dịch vụ
Input: Chọn sản phẩm và dịch vụ cần xoá
Process: Xoá trong CSDL
Output: Load lại danh sách sản phẩm và dịch vụ
Chức năng thêm sản phẩm và dịch vụ:
Description: Giúp Admin có thể thêm sản phẩm hoặc dịch vụ mới
Input: Admin nhập vào những thông tin cần thiết của sản phẩm mới hoặc dịch vụ mới
Process: Kiểm tra xem những trường nào không được để trống Nếu tất cả đều phù hợp thì thêm vào database.Ngược lại thì không thêm vào database
Output: Load lại danh sách sản phẩm hoặc dịch vụ để xem sản phẩm mới
đã được thêm vào CSDL
Các chức năng quản lý đơn hàng
Chức năng xem thông tin chi tiết các đơn đặt hàng (đang chờ được xử lý,
đang xử lý, đã hoàn thành, hoặc hoá đơn bị huỷ bỏ):
Trang 37Description: Xem chi tiết đơn đặt hàng có trong CSDL
Input: Chọn tên hoá đơn hoặc tên khách hàng của hoá đơn đó
Process: Lấy toàn bộ thông tin chi tiết của đơn đặt hàng có trong CSDL.Output: Hiển thị chi tiết thông tin trong đơn đặt hàng
Chức năng cập nhật đơn hàng:
Description: Cập nhật đơn hàng có trong CSDL
Input: Chọn chức năng cập nhật
Process: Lấy toàn bộ thông tin của đơn hàng có trong CSDL
Output: Hiển thị thông tin của đơn hàng
Chức năng xoá đơn hàng:
Description: Giúp Admin có thể xoá đơn hàng
Input: Chọn đơn hàng cần xoá
Process: Xoá trong CSDL
Output: Load lại danh sách đơn hàng
Các chức năng quản lý nội dung
Chức năng xem thông tin chi tiết nội dung:
Description: Xem chi tiết nội dung có trong CSDL
Input: Chọn tên nội dung đó
Process: Lấy toàn bộ thông tin chi tiết của nội dung có trong CSDL.Output: Hiển thị chi tiết thông tin của nội dung
Chức năng cập nhật nội dung:
Description: Cập nhật nội dung có trong CSDL
Input: Chọn chức năng cập nhật nội dung
Process: Lấy toàn bộ thông tin của nội dung có trong CSDL
Output: Hiển thị thông tin của nội dung
Chức năng xoá nội dung:
Description: Giúp Admin có thể xoá nội dung
Input: Chọn nội dung cần xoá
Trang 38Process: Xoá trong CSDL.
Output: Load lại danh sách nội dung
2.3 Biểu đồ phân tích thiết kế hệ thống
2.3.1 Biểu đồ Use case tổng quát
Hình 2.1 Biểu đồ user case tổng quát
Trang 39 Biểu đồ use case phân rã chức năng quản lý sản phẩm :
Hình 2.2 Biểu đồ use case quản lý sản phẩm
Biểu đồ use case phân rã chức năng quản lý khách hàng:
Trang 40Hình 2.3 Biểu đồ use case quản lý khách hàng
Biểu đồ use case phân rã chức năng quản lý đơn hàng :