Đối với giáo viên và những đối tượng muốn chia sẻ những vốn kiến thức của mình với người khác, việc có một nền tảng để bán và quảng cáo khóa học của họ trực tuyến giúp tăng cơ hội kiế
Trang 1THÀNH PHỐ HỒ CHÍ MINH
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
XÂY DỰNG WEBSITE MUA BÁN
Trang 2TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
GIÁO VIÊN HƯỚNG DẪN ThS NGUYỄN MINH ĐẠO
KHÓA 2020 – 2024
Trang 3ĐH SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CNTT
*******
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh Phúc
*******
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên Sinh viên 1: Nguyễn Trương Nhân MSSV 1: 20110690
Họ và tên Sinh viên 2: Bùi Văn Hữu Phước MSSV 2: 20110701
Ngành: Công nghệ Thông tin
Tên đề tài: Xây dựng website mua bán khóa học online Họ và tên Giáo viên hướng dẫn: ThS Nguyễn Minh Đạo NHẬN XÉT 1 Về nội dung đề tài & khối lượng thực hiện: ………
………
………
2 Ưu điểm: ………
………
………
3 Khuyết điểm: ………
………
………
4 Đề nghị cho bảo vệ hay không?
5 Đánh giá loại:
6 Điểm:
Tp Hồ Chí Minh, ngày tháng năm 202
(Ký & ghi rõ họ tên)
Trang 4ĐH SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CNTT
*******
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh Phúc
*******
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Họ và tên Sinh viên 1: Nguyễn Trương Nhân MSSV 1: 20110690
Họ và tên Sinh viên 2: Bùi Văn Hữu Phước MSSV 2: 20110701
Ngành: Công nghệ Thông tin
Tên đề tài: Xây dựng website mua bán khóa học online Họ và tên Giáo viên phản biện: ThS Mai Anh Thơ NHẬN XÉT 1 Về nội dung đề tài & khối lượng thực hiện: ………
………
………
2 Ưu điểm: ………
………
………
3 Khuyết điểm: ………
………
………
4 Đề nghị cho bảo vệ hay không?
5 Đánh giá loại:
6 Điểm:
Tp Hồ Chí Minh, ngày tháng năm 202
(Ký & ghi rõ họ tên)
Trang 5LỜI CẢM ƠN
Đầu tiên, chúng em muốn gửi lời cảm ơn sâu sắc tới thầy Nguyễn Minh Đạo trong thời gian thực hiện Khóa luận tốt nghiệp vừa qua Dưới sự chỉ dẫn tận tình của thầy, nhóm chúng em đã có những hướng đi để khám phá và tìm hiểu sâu sắc về chuyên ngành của mình, nắm bắt được những kiến thức quan trọng và áp dụng vào quá trình nghiên cứu
Bên cạnh đó, chúng em cũng muốn bày tỏ lòng biết ơn chân thành đến các anh trợ giảng, những người đã hỗ trợ chúng em hết mình trong suốt quá trình thực hiện dự án Sự hướng dẫn tận tình và những lời góp ý quý báu của các anh không chỉ giúp chúng em hoàn thiện tiểu luận mà còn là nguồn động viên lớn giúp chúng em phát triển bản thân Sự tận tâm của các anh đã giúp chúng em nắm vững kiến thức và kỹ năng cần thiết, từ
đó hoàn thiện dự án một cách tốt nhất
Nhóm chúng em đã tiến hành nghiên cứu và trình bày đề tài cùng báo cáo trong một khoảng thời gian ngắn Với sự hạn chế về kiến thức cũng như kinh nghiệm trong việc thực hiện dự án web, không thể tránh khỏi những thiếu sót trong quá trình nghiên cứu Chúng em rất mong nhận được những đóng góp quý báu từ thầy và các anh trợ giảng để
có thể nâng cao chất lượng kiến thức và thực hiện công việc tốt hơn trong các dự án tương lai
Một lần nữa, chúng em xin bày tỏ lòng biết ơn sâu sắc đối với sự hỗ trợ và hướng dẫn tận tâm của thầy và các anh trợ giảng Những kinh nghiệm và kiến thức chúng em đã học được sẽ là nền tảng quan trọng cho sự phát triển trong tương lai Mong rằng, những đóng góp của thầy và các anh sẽ tiếp tục lan tỏa và làm giàu thêm không khí học thuật tại trường
Trang 6ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP
Họ và tên Sinh viên 1: Nguyễn Trương Nhân MSSV 1: 20110690
Họ và tên Sinh viên 2: Bùi Văn Hữu Phước MSSV 2: 20110701
Thời gian làm luận văn: Từ 01/03/2024 đến 09/07/2024
Ngành: Công nghệ Thông tin
Tên đề tài: Xây dựng website mua bán khóa học online
Họ và tên Giáo viên hướng dẫn: ThS Nguyễn Minh Đạo
Nhiệm vụ của luận văn:
1 Xây dựng Website với các công nghệ Nodejs, Reactjs, TypeScript, MySQL
- Xây dựng ứng dụng giao diện (frontend) sử dụng ReactJS, Typescript
- Xây dựng ứng dụng web service (backend) sử dụng Nodejs, ExpressJS
- Sử dụng Axios để giao tiếp giữa backend và frontend
- Sử dụng MySQL để lưu trữ dữ liệu, ORM Prisma để giao tiếp dữ liệu giữa Backend
và Database
- Sử dụng FFMPEG để xử lý chuyển đổi độ phân giải video
Đề cương chi tiết tiểu luận:
Trang 75 Kết quả dự kiến đạt được
- Tìm hiểu về NodeJS, ReactJS, FFMPEG
- Tham khảo các trang web về học tập online như Coursera, Udemy…
Bắt đầu khóa luận tốt nghiệp
- Thiết kế triển khai dự án
4 01/04/2024 –
10/04/2024
- Cài đặt database và tìm kiếm dữ liệu
Trang 8- Thực hiện xây dựng và thiết kế giao diện trang web một cách chi tiết
Trang 9Mục lục
MỞ ĐẦU 1
1 Tính cấp thiết của đề tài 1
2 Mục đích của đề tài 1
3 Cách tiếp cận và phương pháp nghiên cứu 2
4 Phân tích những công trình có liên quan 3
4.1 Udemy 3
4.2 Coursera 4
4.3 Kết luận 5
5 Kết quả dự kiến đạt được 6
NỘI DUNG 7
1 CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 7
1.1 ReactJS 7
1.1.1 Tổng quan 7
1.1.2 Đặc điểm chính 7
1.1.3 Tại sao sử dụng 7
1.2 NodeJS 8
1.2.1 Tổng quan 8
1.2.2 Đặc điểm chính 8
1.2.3 Tại sao sử dụng 9
1.3 Express 9
1.3.1 Tổng quan 9
1.3.2 Đặc điểm chính 9
1.3.3 Tại sao sử dụng 10
1.4 MySQL 11
1.4.1 Tổng quan 11
1.4.2 Đặc điểm chính 11
1.4.3 Tại sao sử dụng 12
1.5 Typescript 12
1.5.1 Tổng quan 12
1.5.2 Đặc điểm chính 13
1.5.3 Tại sao sử dụng 13
1.6 Phương pháp nghiên cứu 14
1.6.1 Nghiên cứu tài liệu 14
1.6.2 Phân tích yêu cầu 14
1.6.3 Phân tích các trang web có liên quan 14
Trang 102 CHƯƠNG 2: THIẾT KẾ HỆ THỐNG 15
2.1 Lược đồ ERD 15
2.2 Use case Diagram 16
2.3 Đặc tả Use case 18
2.3.1 Tìm kiếm khóa học 18
2.3.2 Thêm khóa học vào giỏ hàng 19
2.3.3 Xóa khóa học khỏi giỏ hàng 21
2.3.4 Chuyển khóa học vào để dành sau 21
2.3.5 Thanh toán 22
2.3.6 Kiểm tra coupon 23
2.3.7 Kiểm tra, ghi nhận kết quả 24
2.3.8 Học tập, ghi nhận kết quả 25
2.3.9 Thêm xóa sửa khóa học 26
2.3.10 Thêm xóa sửa bài giảng 27
2.3.11 Cấp chứng chỉ cho người học 28
2.3.12 Báo cáo khóa học 28
2.3.13 Học thử 29
2.3.14 Yêu cầu duyệt khóa học 30
2.3.15 Tìm kiếm blog 30
2.3.16 Thống kê - giảng viên 31
2.3.17 Thống kê – người quản trị 31
2.3.18 Duyệt / ẩn khóa học 32
2.3.19 Ra quyết định trên khóa học 33
2.3.20 Thêm xóa sửa event 34
2.3.21 Chỉnh sửa tỉ lệ phần thưởng trong event 35
2.4 Class Diagram 37
2.5 Sequence Diagram 38
2.5.1 Tìm kiếm khóa học 38
2.5.2 Thêm khóa học vào giỏ hàng 38
2.5.3 Xóa khóa học khỏi giỏ hàng 38
2.5.4 Chuyển khóa học vào để dành sau 39
2.5.5 Thanh toán 39
2.5.6 Kiểm tra, ghi nhận kết quả 40
2.5.7 Học tập, ghi nhận kết quả 41
2.5.8 Thêm xóa sửa khóa học 41
Trang 112.5.10 Xóa bài giảng 44
2.5.11 Sửa bài giảng 44
2.5.12 Cấp chứng chỉ cho người học 45
2.5.13 Báo cáo khóa học 46
2.5.14 Học thử 46
2.5.15 Yêu cầu duyệt khóa học 47
2.5.16 Tìm kiếm blog 47
2.5.17 Thống kê - giảng viên 48
2.5.18 Thống kê – người quản trị 49
2.5.19 Duyệt ẩn khóa học 50
2.5.20 Ra quyết định trên khóa học 50
2.5.21 Thêm xóa sửa event 51
2.5.22 Chỉnh sửa tỉ lệ phần thưởng trong event 53
2.6 Thiết kế cơ sở dữ liệu 54
2.6.1 User 54
2.6.2 Cart 55
2.6.3 Cart_detail 55
2.6.4 Category 55
2.6.5 Course 55
2.6.6 Courses_categories 56
2.6.7 Enrolled 57
2.6.8 Invoice 57
2.6.9 Invoice_detail 57
2.6.10 Lesson 58
2.6.11 Rating 58
2.6.12 Section 58
2.6.13 Transaction 59
2.6.14 Feedback 59
2.6.15 Lecture 60
2.6.16 Quiz 60
2.6.17 Quiz_group 60
2.6.18 Quiz_answer 61
2.6.19 Test 61
2.6.20 Test_detail 62
2.6.21 Test_history 62
2.6.22 Test_history_detail 62
Trang 122.6.23 Approval 63
2.6.24 Blog 63
2.6.25 Blog_categories 63
2.6.26 Certificate 64
2.6.27 Comment_lecture 64
2.6.28 Coupon 64
2.6.29 Coupon_history 65
2.6.30 Coupon_owner 65
2.6.31 Decision 65
2.6.32 Dislike 66
2.6.33 Event 66
2.6.34 Like 66
2.6.35 Progress 66
2.6.36 Ratio 67
2.6.37 Reaction_blog 67
2.6.38 Reply_comment_lecture 67
2.6.39 Report 68
2.6.40 User_event 68
2.7 Thiết kế giao diện 69
3 CHƯƠNG 3: KIỂM THỬ 95
3.1 Lý thuyết kiểm thử 95
3.1.1 Kiểm thử đơn vị 95
3.1.2 Kiểm thử tích hợp 96
3.1.3 Kiểm thử hệ thống 97
3.1.4 Kiểm tra API 98
3.1.5 Tổng quan về selenium 100
3.2 Kiểm thử 102
3.3 Kiểm thử tự động hệ thống với Selenium WebDriver 106
3.3.1 Cài đặt công cụ 107
3.3.2 Kiểm thử với Selenium Webdriver 107
KẾT LUẬN 112
1 Kiến thức và kĩ năng 112
2 Hệ thống 113
3 Điểm mạnh 113
4 Điểm yếu 113
Trang 13TÀI LIỆU THAM KHẢO 115PHỤ LỤC 116
Trang 14Danh mục bảng
Bảng 2.1 UC_Tìm kiếm khóa học 18
Bảng 2.2 UC_Thêm khóa học vào giỏ hàng 19
Bảng 2.3 UC_Xóa khóa học khỏi giỏ hàng 21
Bảng 2.4 UC_Chuyển khóa học vào để dành sau 21
Bảng 2.5 UC_Thanh toán 22
Bảng 2.6 UC_Kiểm tra coupon 23
Bảng 2.7 UC_Kiểm tra, ghi nhận kết quả 24
Bảng 2.8 UC_Học tập ghi nhận kết quả 25
Bảng 2.9 UC_Thêm xóa sửa khóa học 26
Bảng 2.10 UC_Thêm xóa sửa bài giảng 27
Bảng 2.11 UC_Cấp chứng chỉ cho người học 28
Bảng 2.12 UC_Báo cáo khóa học 28
Bảng 2.13 UC_Học thử 29
Bảng 2.14 UC_Yêu cầu duyệt khóa học 30
Bảng 2.15 UC_Tìm kiếm blog 30
Bảng 2.16 UC_Thống kê – giảng viên 31
Bảng 2.17 UC_Thống kê – người quản trị 31
Bảng 2.18 UC_Duyệt ẩn khóa học 32
Bảng 2.19 UC_Ra quyết định trên khóa học 33
Bảng 2.20 UC_Thêm xóa sửa event 34
Bảng 2.21 UC_Chỉnh sửa tỉ lệ phần thưởng trong event 35
Bảng 2.22 User 54
Bảng 2.23 Cart 55
Bảng 2.24 Cart_detail 55
Bảng 2.25 Category 55
Bảng 2.26 Course 55
Bảng 2.27 Courses_categories 56
Bảng 2.28 Enrolled 57
Bảng 2.29 Invoice 57
Bảng 2.30 Invoice_detail 57
Bảng 2.31 Lesson 58
Bảng 2.32 Rating 58
Bảng 2.33 Section 58
Bảng 2.34 Transaction 59
Bảng 2.35 Feedback 59
Bảng 2.36 Lecture 60
Bảng 2.37 Quiz 60
Bảng 2.38 Quiz_group 60
Bảng 2.39 Quiz_answer 61
Bảng 2.40 Test 61
Bảng 2.41 Test_detail 62
Bảng 2.42 Test_history 62
Bảng 2.43 Test_history_detail 62
Bảng 2.44 Approval 63
Bảng 2.45 Blog 63
Trang 15Bảng 2.47 Certificate 64
Bảng 2.48 Comment_lecture 64
Bảng 2.49 Coupon 64
Bảng 2.50 Coupon_history 65
Bảng 2.51 Coupon_owner 65
Bảng 2.52 Decision 65
Bảng 2.53 Dislike 66
Bảng 2.54 Event 66
Bảng 2.55 Like 66
Bảng 2.56 Progress 66
Bảng 2.57 Ratio 67
Bảng 2.58 Reaction_blog 67
Bảng 2.59 Reply_comment_lecture 67
Bảng 2.60 Report 68
Bảng 2.61 User_event 68
Bảng 3.1 Kết quả kiểm thử 102
Bảng 3.2 File helper.test.ts 108
Bảng 3.3 File test-selenium.test.ts 108
Bảng 3.4 File enrolled.test.ts 109
Trang 16Danh mục hình
Hình 4.1 Trang chủ Udemy 3
Hình 4.2 Trang chủ Coursera 4
Hình 2.1 Lược đồ ERD 15
Hình 2.2 Use case diagram_Actor Guest 16
Hình 2.3 Use case diagram_Actor Student 17
Hình 2.4 Use case diagram_Actor Teacher 17
Hình 2.5 Use case diagram_Actor Admin 18
Hình 2.6 Class Diagram 37
Hình 2.7 SD_Tìm kiếm khóa học 38
Hình 2.8 SD_Thêm khóa học vào giỏ hàng 38
Hình 2.9 SD_Xóa khóa học khỏi giỏ hàng 39
Hình 2.10 SD_Chuyển khóa học vào để dành sau 39
Hình 2.11 SD_Thanh toán 39
Hình 2.12 SD_Kiểm tra, ghi nhận kết quả 40
Hình 2.13 SD_Học tập, ghi nhận kết quả 41
Hình 2.14 SD_Thêm khóa học 41
Hình 2.15 SD_Xóa khóa học 42
Hình 2.16 SD_Sửa khóa học 42
Hình 2.17 SD_Thêm bài giảng 43
Hình 2.18 SD_Xóa bài giảng 44
Hình 2.19 SD_Sửa bài giảng 45
Hình 2.20 SD_Cấp chứng chỉ cho người học 45
Hình 2.21 SD_Báo cáo khóa học 46
Hình 2.22 SD_Học thử 46
Hình 2.23 SD_Yêu cầu duyệt khóa học 47
Hình 2.24 SD_Tìm kiếm blog 47
Hình 2.25 SD_Thống kê – giảng viên 48
Hình 2.26 SD_Thống kê - người quản trị 49
Hình 2.27 SD_Duyệt ẩn khóa học 50
Hình 2.28 SD_Ra quyết định trên khóa học 50
Hình 2.29 SD_Thêm event 51
Hình 2.30 SD_Sửa event 51
Hình 2.31 SD_Xóa event 52
Hình 2.32 SD_Thêm tỉ lệ phần thưởng trong event 53
Hình 2.33 SD_Chỉnh sửa tỉ lệ phần thưởng trong event 53
Hình 2.34 Xóa tỉ lệ phần thưởng trong event 54
Hình 2.35 GD_Trang chủ - 1 69
Hình 2.36 GD_Trang chủ - 2 69
Hình 2.37 GD_Trang chủ - 3 70
Hình 2.38 GD_Trang Tất cả khóa học 71
Hình 2.39 GD_Trang Chi tiết khóa học 72
Hình 2.40 GD_Trang cá nhân của người khác 73
Hình 2.41 GD_Nội dung khóa học 74
Hình 2.42 GD_Trang Khóa học của tôi 75
Hình 2.43 GD_Trang Tạo khóa học mới 76
Trang 17Hình 2.45 GD_Popup Tạo bộ câu hỏi mới 77
Hình 2.46 GD_Popup Tạo câu hỏi mới 78
Hình 2.47 GD_Trang Chỉnh sửa khóa học – Tổng quan khóa học 78
Hình 2.48 GD_Trang Chỉnh sửa khóa học – Chương trình giảng dạy 79
Hình 2.49 GD_Trang Chỉnh sửa khóa học – Tình trạng khóa học 79
Hình 2.50 GD_Trang Thống kê – giảng viên 79
Hình 2.51 GD_Trang Sự kiện 80
Hình 2.52 GD_Trang Giỏ hàng 81
Hình 2.53 GD_Trang Thanh toán 81
Hình 2.54 GD_Trang Kết quả thanh toán 82
Hình 2.55 GD_Trang Lịch sử giao dịch 82
Hình 2.56 GD_Trang Khóa học đã đăng ký của tôi 83
Hình 2.57 GD_Popup báo xấu khóa học 84
Hình 2.58 GD_Trang xem video bài học 84
Hình 2.59 GD_Trang làm bài kiểm tra 84
Hình 2.60 GD_Thông báo hoàn thành nội dung khóa học 84
Hình 2.61 GD_Thông báo hoàn thành bài kiểm tra toàn khóa học 84
Hình 2.62 GD_Phần Bình luận trong khóa học 85
Hình 2.63 GD_Email gửi chứng chỉ cho người dùng hoàn thành khóa học 85
Hình 2.64 GD_Trang chứng chỉ 86
Hình 2.65 GD_Chatbot 87
Hình 2.66 GD_Trang Thống kê_Tab Thống kê chính – người quản trị 88
Hình 2.67 GD_Trang Thống kê_Tab Xếp hạng giảng viên – người quản trị 88
Hình 2.68 GD_Trang Thống kê_Tab Xếp hạng khóa học – người quản trị 88
Hình 2.69 GD_Trang Quản lý danh mục 89
Hình 2.70 GD_Trang Quản lý người dùng 89
Hình 2.71 GD_Trang Thêm người dùng 89
Hình 2.72 GD_Trang Xét duyệt khóa học 90
Hình 2.73 GD_Trang Chi tiết khóa học – Duyệt khóa học 90
Hình 2.74 GD_Trang Chi tiết khóa học – Báo cáo khóa học 91
Hình 2.75 GD_Trang Quản lý phản hồi 91
Hình 2.76 GD_Trang Quản lý sự kiện 91
Hình 2.77 GD_Popup Thêm sự kiện 92
Hình 2.78 GD_Popup Chỉnh sửa tỉ lệ phần thưởng sự kiện 92
Hình 2.79 GD_Trang Quản lý coupon 93
Hình 2.80 GD_Popup Thêm coupon 94
Hình 3.1 Test case 1 và kết quả 102
Hình 3.2 Test case 2 và kết quả 103
Hình 3.3 Test case 3 và kết quả 104
Hình 3.4 Test case 4 và kết quả 105
Hình 3.5 Test case 5 và kết quả 106
Hình 3.6 Kết quả kiểm thử tự động với Selenium Webdriver 111
Trang 18MỞ ĐẦU
1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI
Với sự phổ cập Internet ngày càng rộng rãi, nhu cầu học tập trực tuyến đã tăng lên đáng
kể Một trang web mua bán khóa học giúp tạo ra một nền tảng thuận tiện cho học viên
để truy cập và tham gia các khóa học mọi nơi, mọi lúc
Website mua bán khóa học trực tuyến giúp mở rộng khả năng tiếp cận đối tượng học viên Người học không còn bị giới hạn bởi địa lý, và do đó, trang web có thể hỗ trợ việc kết nối giữa giảng viên và học viên từ khắp mọi nơi trên thế giới
Đối với những người muốn học hỏi, việc có một trang web mua bán khóa học trực tuyến mang lại sự đa dạng trong nguồn tài nguyên học tập Họ có thể chọn lựa giữa các khóa học, chủ đề và những nội dung bài học khác nhau, tạo ra một trải nghiệm học tập phong phú
Đối với giáo viên và những đối tượng muốn chia sẻ những vốn kiến thức của mình với người khác, việc có một nền tảng để bán và quảng cáo khóa học của họ trực tuyến giúp tăng cơ hội kiếm thu nhập Điều này khích lệ sự chia sẻ kiến thức và kỹ năng, đồng thời thúc đẩy sự đổi mới trong lĩnh vực giáo dục
Xu hướng học tập liên tục thay đổi, và một trang web mua bán khóa học trực tuyến có thể linh hoạt thích ứng với những thay đổi này, bao gồm cả việc tích hợp công nghệ mới và phản hồi từ cộng đồng học viên
Tóm lại, xây dựng một trang web mua bán khóa học trực tuyến không chỉ đáp ứng nhu cầu ngày càng tăng của người học mà còn tạo ra cơ hội mới cho giảng viên và doanh nghiệp trong lĩnh vực giáo dục trực tuyến
2 MỤC ĐÍCH CỦA ĐỀ TÀI
Đề tài “Xây dựng website mua bán khóa học online” đặt ra các vấn đề trọng tâm về mục
Trang 19Vấn đề đầu tiên được đưa ra về yếu tố lý thuyết, sinh viên thực hiện cần nghiên cứu chuyên môn, hiểu được tổng quan và khả năng ứng dụng những kiến thức đã học ở trường vào trong đề tài này Song song với công nghệ được lựa chọn để sử dụng, nhóm sinh viên cần tìm hiểu thêm cách xây dựng giao diện đẹp, thân thiện với người dùng Vấn đề thứ hai là nâng cao khả năng làm việc nhóm, tìm hiểu và thảo luận về đề tài, các vấn đề đưa ra từ dó tìm ra câu trả lời Xây dựng thái tích cực trong việc học, làm đồ án
3 CÁCH TIẾP CẬN VÀ PHƯƠNG PHÁP NGHIÊN CỨU
- Đối tượng nghiên cứu: Đối tượng của nghiên cứu này là việc xây dựng một hệ thống website mua bán khóa học trực tuyến, với sự tập trung vào cả phía frontend
và backend
- Phạm vi nghiên cứu: Nghiên cứu sẽ tập trung vào việc sử dụng các công nghệ và ngôn ngữ lập trình chủ chốt như ReactJS, TypeScript, Redux cho phần giao diện người dùng (frontend) và NodeJS, ExpressJS, TypeScript cho phần xử lý logic và dữ liệu (backend)
+ ReactJS và TypeScript: Sử dụng ReactJS để xây dựng giao diện người dùng, cùng với TypeScript để tăng tính kiểm soát và khả năng tái sử dụng
+ TypeScript: Sử dụng TypeScript để viết mã nguồn của backend, giúp kiểm soát kiểu và giảm thiểu lỗi trong quá trình phát triển
Trang 204 PHÂN TÍCH NHỮNG CÔNG TRÌNH CÓ LIÊN QUAN
4.1 UDEMY
Hình 4.1 Trang chủ Udemy
Udemy (https://www.udemy.com/) là nền tảng mua bán khóa học trực tuyến lớn và nổi tiếng khắp thế giới Mọi người có thể mua khóa học với tư cách là học viên, tham gia khóa học để nhận chứng chỉ cũng như đăng ký làm giáo viên để bán khóa học cho mọi người
Ưu điểm:
- Có đa dạng loại khóa học với nhiều chủ đề khác nhau, đa ngôn ngữ
- Tiện ích và nhanh chóng: Có thể kết nối ở bất kỳ đâu chỉ cần có kết nối mạng
- Giao diện hiện đại, trẻ trung
Nhược điểm:
- Vấn đề kết nối và hệ thống: Hệ thống hay gặp vấn đề kết nối làm cho người dùng không thể truy cập vào trang web một cách ổn định
- Các khóa học có giá khá đắt đỏ so với mức chi tiêu của người Việt
- Không thực sự có một bản chứng chỉ mà chỉ ghi nhận kết quả học tập của cá
Trang 214.2 COURSERA
Hình 4.2 Trang chủ Coursera
Coursera (https://www.coursera.org/) là nền tảng mua bán khóa học trực tuyến lớn và nổi tiếng khắp thế giới Mọi người có thể mua khóa học với tư cách là học viên, tham gia khóa học để nhận chứng chỉ cũng như đăng ký làm giáo viên để bán khóa học cho mọi người
Ưu điểm:
- Có đa dạng loại khóa học với nhiều chủ đề khác nhau, các khóa học được nhóm lại để phù hợp với các ngành nghề khác nhau
- Tiện ích và nhanh chóng: Có thể kết nối ở bất kỳ đâu chỉ cần có kết nối mạng
- Giao diện hàn lâm và nghiêm túc
Trang 22- Hệ thống cần được cải thiện về tốc độ tải trang, trải nghiệm tìm kiếm, độ ổn định của các chức năng
- Các khóa học còn thiếu hụt sự tương tác giữa giáo viên với học sinh, giữa học sinh với nhau Giá của các khóa học còn khá mắc so với mức chi tiêu của người Việt
- Qua khảo sát và nghiên cứu, chúng em sẽ ghi nhận và cố gắng cải thiện, nâng cao trải nghiệm người dùng bằng cách cải thiện giao diện, tối ưu hóa quy trình tìm kiếm khóa học và đăng ký
Trang 235 KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC
Giao diện người dùng thân thiện: thiết kế giao diện người dùng được xây dựng với sự tập trung đặc biệt vào trải nghiệm người dùng, tạo ra một giao diện thân thiện, dễ sử dụng và hấp dẫn
Hệ thống quản lý khóa học linh hoạt: xây dựng một hệ thống quản lý khóa học linh hoạt, cho phép người quản trị dễ dàng thêm, sửa đổi và xóa các khóa học một cách hiệu quả cũng như thống kê các số liệu liên quan tới khóa học
Tích hợp hệ thống thanh toán: hệ thống thanh toán được tích hợp một cách an toàn và linh hoạt, hỗ trợ nhiều phương thức thanh toán để tối ưu hóa trải nghiệm mua sắm của người học Kết hợp với các phiếu giảm giá có thể kiếm được thông qua các sự kiện
Hệ thống học tập: xây dựng hệ thống phù hợp cho việc học tập các khóa học của người dùng với các chức năng như ghi lại quá trình học, tùy chỉnh chất lượng video bài học phù hợp với các điều kiện mạng khác nhau
Hệ thống bài viết: xây dựng hệ thống các bài viết được tạo bởi người quản trị cho giúp cung cấp những thông tin cần thiết, bổ ích hoặc những góc nhìn của người đăng bài
Hệ thống đánh giá và phản hồi: đã tích hợp một hệ thống đánh giá và phản hồi, giúp người học đánh giá chất lượng khóa học, đồng thời cung cấp thông tin quan trọng cho việc cải thiện chất lượng dịch vụ Người dùng còn có thể phản ánh, báo xấu những khóa học không phù hợp để người quản trị thực hiện xử lý Đồng thời những nội dung bình luận của người dùng cũng được kiểm soát chặt chẽ về mức độ phù hợp
Hệ thống đăng ký và quản lý tài khoản người dùng: xây dựng hệ thống đăng ký và quản
lý tài khoản người dùng, đảm bảo tính bảo mật thông tin cá nhân và thuận tiện cho quá trình đăng nhập và học tập
Hệ thống chatbot: Cung cấp 1 chatbot hỗ trợ người dùng trong quá trình sử dụng website Thống kê: thống kê các nguồn tài nguyên của hệ thống
Trang 24- Virtual DOM: React sử dụng để cải thiện hiệu suất Thay vì cập nhật toàn bộ DOM khi có thay đổi, React tạo một bản sao ảo của DOM (Virtual DOM) và so sánh với DOM thật, sau đó xác định và cập nhật những phần cần thiết Điều này giúp giảm tải cho trình duyệt và tăng tốc độ làm mới giao diện
- One-Way Data Binding: React sử dụng luồng dữ liệu một chiều (one-way data binding) từ component cha đến component con thông qua props, đồng thời component con không được phép thay đổi dữ liệu ngược về phía component cha giúp quản lý dữ liệu dễ dàng và tránh tình trạng rơi vào vòng lặp vô tận (infinite loop)
Trang 25- React sử dụng ngôn ngữ Javascript là một ngôn ngữ lập trình dễ học và tiếp cận
- Hỗ trợ cho React Native: React có thể sử dụng để xây dựng cả ứng dụng di động thông qua React Native Việc sử dụng cùng một cơ sở mã nguồn cho cả ứng dụng web và di động giảm công sức phát triển và bảo trì
- Cập Nhật Liên Tục: React được duy trì và cập nhật thường xuyên bởi Facebook, đảm bảo rằng những tính năng mới và các sửa lỗi được thêm vào hệ sinh thái Cho thấy khả năng đáng tin tưởng và sự hỗ trợ lâu dài
- Lập trình và bảo trì dễ dàng: Nhờ vào virtual DOM cùng cách quản lí dữ liệu hiệu quả, cùng với mô hình phát triển dựa trên thành phần hỗ trợ cho lập trình và tái sử dụng, React có hiệu suất tốt và đáng tin cậy để phát triển ứng dụng web
1.2 NODEJS
1.2.1 Tổng quan
NodeJS được xây dựng trên V8 JavaScript engine của Chrome - V8 là một môi trường runtime chạy JavaScript đa nền tảng và có mã nguồn mở, được sử dụng để chạy các ứng dụng web bên ngoài trình duyệt của client Nền tảng này được phát triển bởi Ryan Dahl vào năm 2009, được xem là một giải pháp hoàn hảo cho các ứng dụng sử dụng nhiều dữ liệu nhờ vào mô hình hướng sự kiện (event-driven) không đồng bộ
1.2.2 Đặc điểm chính
- Lập trình hướng sự kiện và không đồng bộ: Toàn bộ API trong thư viện NodeJS đều không đồng bộ, hay không bị chặn Về cơ bản điều này có nghĩa là một server sử dụng NodeJS sẽ không bao giờ chờ một API trả về dữ liệu Server
sẽ chuyển sang API kế tiếp sau khi gọi API đó và cơ chế thông báo của Events trong NodeJS giúp server nhận được phản hồi từ lần gọi API trước
- Cực kỳ nhanh chóng: Được xây dựng trên Công cụ JavaScript V8 của Google Chrome, thư viện NodeJS có khả năng xử lý mã vô cùng nhanh
Trang 26- Đơn luồng/Single thread nhưng có khả năng mở rộng cao: NodeJS sử dụng một mô hình luồng đơn với vòng lặp sự kiện/event Cơ chế event cho phép máy chủ phản hồi non-blocking và cũng cho phép khả năng mở rộng cao hơn so với các server truyền thống hỗ trợ giới hạn các thread để xử lý yêu cầu
1.2.3 Tại sao sử dụng
- Tốc độ cực nhanh: Được xây dựng dựa trên engine JavaScript V8 của Google Chrome, do đó các thư viện của nó có khả năng thực thi code rất nhanh
- Sử dụng Javascript, một ngôn ngữ lập trình dễ học và tiếp cận
- Cộng đồng lớn: Hệ thống các thư viện có sẵn lớn cùng với cộng đồng tích cực đang phát triển từng ngày giúp cho việc lập trình trở nên dễ dàng
- Phù hợp để phát triển các ứng dụng realtime, các ứng dụng yêu cầu tốc độ cao và ứng dụng IoT
1.3 EXPRESS
1.3.1 Tổng quan
Express là một framework web Node.js được thiết kế để xây dựng ứng dụng web và API một cách dễ dàng và linh hoạt Nó giúp giảm độ phức tạp của việc xây dựng và quản lý các ứng dụng web bằng cách cung cấp một lớp trừu tượng cho việc xử lý các yêu cầu và phản hồi HTTP
1.3.2 Đặc điểm chính
- Middleware: Middleware là các hàm được thực thi tuần tự khi có yêu cầu được gửi đến server Các middleware có thể thực hiện các chức năng như xử lý yêu cầu, kiểm soát quyền truy cập, ghi log, xử lý lỗi, và nhiều công việc khác Middleware giúp tách biệt logic xử lý thành các chức năng nhỏ, giúp mã nguồn trở nên dễ đọc, tái sử dụng và mở rộng
- Routing: Express cung cấp hệ thống định tuyến mạnh mẽ, cho phép xác định
Trang 27lý và tổ chức ứng dụng một cách hiệu quả, tách biệt logic xử lý và tạo cấu trúc rõ ràng
- Template Engines: Express không buộc sử dụng một template engine cụ thể, nhưng nó hỗ trợ nhiều loại như EJS, Pug, và Handlebars để xây dựng giao diện người dùng Template engines giúp tạo ra trang web động và linh hoạt, cho phép nhúng dữ liệu vào các mẫu và tái sử dụng mã nguồn
- Xử Lý JSON và Dữ Liệu Form: Express cung cấp built-in middleware để xử
lý dữ liệu được gửi dưới dạng JSON và các biểu mẫu web (form data) Giúp dễ dàng xử lý dữ liệu đầu vào từ các yêu cầu, giúp đơn giản hóa việc xây dựng và
xử lý các biểu mẫu trên trang web
- Phản Hồi (Response): Express giúp quản lý phản hồi từ server đến client Bạn
có thể thiết lập các loại phản hồi, đặt header, và gửi dữ liệu về client Việc kiểm soát phản hồi giúp tối ưu hóa trải nghiệm người dùng và giúp tăng tính bảo mật của ứng dụng
- Điều Hướng Tĩnh (Static File Serving): Giải thích: Express có thể được cấu hình để phục vụ các tệp tĩnh (ví dụ: hình ảnh, tệp CSS) một cách dễ dàng Giúp tối ưu hóa hiệu suất và tăng tốc độ tải trang bằng cách cung cấp trực tiếp các tệp tĩnh từ server
1.3.3 Tại sao sử dụng
- Tốc Độ và Hiệu Suất: Express là một framework nhẹ, giúp giảm độ trễ và tăng hiệu suất của ứng dụng Nó tập trung vào việc cung cấp các tính năng cần thiết mà không làm giảm tốc độ xử lý của Node.js
- Cộng Đồng Phong Phú: Express có một cộng đồng lớn, đa dạng và tích cực Điều này mang lại nhiều lợi ích, bao gồm tài liệu phong phú, các module bổ sung, và sự hỗ trợ từ cộng đồng Khiến cho quá trình tiếp cận, lập trình trở nên dễ dàng
- Dễ Học và Sử Dụng: Express được thiết kế để dễ học và sử dụng, đặc biệt là đối với những người đã quen thuộc với JavaScript và Node.js
Trang 28- Middleware và Phản Hồi Tùy Chỉnh: Middleware cho phép mở rộng chức năng một cách linh hoạt, và có thể tùy chỉnh các xử lý trung gian cho yêu cầu và phản hồi theo ý muốn của bạn
- Thích Hợp Cho Xây Dựng API: Express là một lựa chọn phổ biến để xây dựng các RESTful API do khả năng định tuyến và xử lý yêu cầu tốt
1.4 MYSQL
1.4.1 Tổng quan
MySQL là một hệ quản trị cơ sở dữ liệu (DBMS) phổ biến và mã nguồn mở Nó được
sử dụng rộng rãi trong phát triển ứng dụng web và nhiều hệ thống thông tin do tính ổn định, hiệu suất cao, và tính linh hoạt của nó MySQL hỗ trợ nhiều ngôn ngữ lập trình và cung cấp các tính năng mạnh mẽ để quản lý cơ sở dữ liệu
1.4.2 Đặc điểm chính
- Kiểu Dữ Liệu Đa Dạng: MySQL hỗ trợ nhiều kiểu dữ liệu như INTEGER, VARCHAR, TEXT, DATE, và nhiều kiểu dữ liệu khác, giúp lưu trữ và xử lý đa dạng loại dữ liệu
- Ngôn Ngữ SQL: MySQL sử dụng ngôn ngữ truy vấn SQL (Structured Query Language), giúp người phát triển thao tác dữ liệu một cách dễ dàng và mạnh mẽ
- Quản Lý Quyền Truy Cập: MySQL cung cấp hệ thống quản lý quyền truy cập mạnh mẽ, cho phép người quản trị xác định quyền và khả năng truy cập của người dùng đối với cơ sở dữ liệu
- Hiệu Suất Cao: MySQL được tối ưu hóa để đạt hiệu suất cao và xử lý tốt cả trong môi trường sử dụng có số lượng kết nối đồng thời lớn
- Replication và Sharding: MySQL hỗ trợ các kỹ thuật như Replication (sao chép dữ liệu giữa các máy chủ) và Sharding (chia nhỏ cơ sở dữ liệu) để cải thiện khả năng mở rộng và đảm bảo sự ổn định
Trang 29- Cộng Đồng Lớn và Hỗ Trợ: Có một cộng đồng người dùng và phát triển lớn xung quanh MySQL, điều này có nghĩa là có nhiều tài liệu, diễn đàn và nguồn lực học tập khả dụng
1.4.3 Tại sao sử dụng
- Tính Ổn Định và Độ Tin Cậy: MySQL đã được thử nghiệm qua thời gian và được sử dụng rộng rãi trong nhiều dự án lớn Nó cung cấp tính ổn định và độ tin cậy cao
- Hiệu Suất Cao: MySQL được tối ưu hóa để đạt hiệu suất cao, giúp xử lý đồng thời nhiều truy vấn và kết nối một cách hiệu quả
- Khả Năng Mở Rộng: MySQL hỗ trợ các kỹ thuật như Replication và Sharding
để mở rộng khả năng chịu tải và quản lý lượng dữ liệu lớn
- Đa Nền Tảng: MySQL có sẵn trên nhiều nền tảng, bao gồm Windows, Linux, macOS, và có thể tích hợp dễ dàng vào nhiều loại ứng dụng
- Ngôn Ngữ SQL Tiêu Chuẩn: Việc sử dụng ngôn ngữ SQL tiêu chuẩn giúp di chuyển giữa các hệ thống quản trị cơ sở dữ liệu một cách dễ dàng và tiện lợi
- Cộng Đồng Mạnh Mẽ và Tài Nguyên Phong Phú: Sự phổ biến của MySQL đồng nghĩa với sự hỗ trợ mạnh mẽ từ cộng đồng, có nhiều tài liệu, diễn đàn, và nguồn học tập để hỗ trợ người phát triển
1.5 TYPESCRIPT
1.5.1 Tổng quan
TypeScript là một ngôn ngữ lập trình mã nguồn mở, được phát triển bởi Microsoft, nó
có thể được coi là một phiên bản nâng cao của Javascript, thêm vào đó các tính năng mới như kiểu dữ liệu tĩnh, lớp, và module TypeScript được thiết kế để giúp làm cho việc phát triển ứng dụng JavaScript lớn và phức tạp trở nên dễ dàng hơn bằng cách tăng tính dễ bảo trì và độ tin cậy
Trang 301.5.2 Đặc điểm chính
- Kiểu Dữ Liệu Tĩnh: TypeScript hỗ trợ kiểu dữ liệu tĩnh, giúp phát hiện lỗi và cung cấp thông tin rõ ràng về cấu trúc dữ liệu trong quá trình phát triển
- Lớp và Kế Thừa: TypeScript hỗ trợ lập trình hướng đối tượng với khả năng
sử dụng lớp, đối tượng, và kế thừa, giúp tổ chức mã nguồn một cách cấu trúc và
- IntelliSense và Kiểm Tra Lỗi Tốt: Công cụ phát triển như Visual Studio Code
hỗ trợ IntelliSense mạnh mẽ với TypeScript, cung cấp gợi ý và thông báo lỗi khi bạn nhập code
1.5.3 Tại sao sử dụng
- Kiểm Soát Lỗi Tại Thời Gian Biên Dịch: Kiểu dữ liệu tĩnh của TypeScript giúp phát hiện lỗi ngay khi bạn viết code, giảm số lượng lỗi trong quá trình thực thi
- Tăng Hiệu Suất và Dễ Bảo Trì: Kiểu dữ liệu tĩnh giúp tăng hiệu suất và làm cho code dễ bảo trì hơn IntelliSense và tính năng autocomplete cũng giúp tăng tốc độ phát triển
- Phát Triển Ứng Dụng Lớn và Phức Tạp: TypeScript thích hợp cho việc phát triển các ứng dụng lớn và phức tạp, nơi tính dễ bảo trì và tổ chức mã nguồn là quan trọng
Trang 31- Hệ Sinh Thái Mạnh Mẽ: TypeScript có một cộng đồng lớn và đầy đủ tài liệu
Nó cũng được hỗ trợ rộng rãi trong các công cụ phát triển như Visual Studio Code
- Tương Thích Ngược và Ngược Ngôn Ngữ: TypeScript tương thích ngược với JavaScript, nghĩa là bạn có thể sử dụng mã nguồn JavaScript trong dự án TypeScript Điều này giúp dễ dàng tích hợp TypeScript vào dự án hiện tại
- Chuẩn Hóa Dự Án: TypeScript giúp chuẩn hóa cấu trúc dự án, giúp đảm bảo sự nhất quán và tính tổ chức trong mã nguồn
1.6 PHƯƠNG PHÁP NGHIÊN CỨU
1.6.1 Nghiên cứu tài liệu
- Tìm hiểu các công nghệ được sử dụng trong dự án (React, Redux, Node.js, MySQL, TypeScript)
- Xem xét các mô hình thiết kế phổ biến cho ứng dụng web
- Nghiên cứu các giải pháp tối ưu hóa hiệu suất và bảo mật cho trang web
1.6.2 Phân tích yêu cầu
- Xác định các yêu cầu chức năng (functional requirements) như đăng ký, đăng nhập, tìm kiếm khóa học, quản lý giỏ hàng, thanh toán…
- Xác định các yêu cầu phi chức năng (non-functional requirements) như hiệu suất, bảo mật, trải nghiệm người dùng, khả năng mở rộng và bảo trì
1.6.3 Phân tích các trang web có liên quan
- Nghiên cứu các trang web mua bán khóa học hiện có trên thị trường
- Xác định những điểm mạnh và yếu của các đối thủ để cải thiện dự án
Trang 322 CHƯƠNG 2: THIẾT KẾ HỆ THỐNG
2.1 LƯỢC ĐỒ ERD
Hình 2.1 Lược đồ ERD
Trang 332.2 USE CASE DIAGRAM
Hình 2.2 Use case diagram_Actor Guest
Trang 34Hình 2.3 Use case diagram_Actor Student
Hình 2.4 Use case diagram_Actor Teacher
Trang 35Hình 2.5 Use case diagram_Actor Admin
2.3 ĐẶC TẢ USE CASE
2.3.1 Tìm kiếm khóa học
Bảng 2.1 UC_Tìm kiếm khóa học
Use case: UC01_Tìm kiếm các khóa học
Trang 36Mục đích: Cho phép người dùng tìm kiếm khóa học dựa trên tên
Mô tả: Cho phép người dùng tìm kiếm khóa học dựa trên tên Tác nhân: Người dùng
Điều kiện trước: Không có
Điều kiện sau: Danh sách khóa học được lọc và hiển thị dựa trên kết quả tìm kiếm Luồng sự kiện chính
(Basic flows)
Người dùng Hệ thống
1 Nhập vào input tìm
kiếm và nhấn Enter
2 Gửi thông tin về server để tìm kiếm khóa học liên quan
3 Lấy danh sách khóa học phù hợp với từ khóa tìm kiếm và cập nhật danh sách hiển thị
Luồng sự kiện phụ
(Alternative Flows):
2.3.2 Thêm khóa học vào giỏ hàng
Bảng 2.2 UC_Thêm khóa học vào giỏ hàng
Use case: UC02_Thêm khóa học vào giỏ hàng
Mục đích: Thêm khóa học vào giỏ hàng để chuẩn bị cho quá trình (mua)
Mô tả: Cho phép người dùng thêm khóa học vào giỏ hàng để chuẩn bị cho quá
trình xem giỏ hàng
Tác nhân: Người dùng
Điều kiện trước: Người dùng đã đăng nhập thành công vào hệ thống và đã chọn xem
thông tin chi tiết của một khóa học mà không phải khóa học của chính bản thân mình tạo ra
Điều kiện sau: Khóa học đã được thêm vào giỏ hàng của người dùng
Luồng sự kiện chính
(Basic flows)
Người dùng Hệ thống
1 Trong trang chi tiết khóa
học, nhấn vào nút “Get it”
Trang 374 Tại vị trí nút nhấn “Get it” sẽ biến thành nút “Go to cart”
Luồng sự kiện phụ
(Alternative Flows):
Trang 38
2.3.3 Xóa khóa học khỏi giỏ hàng
Bảng 2.3 UC_Xóa khóa học khỏi giỏ hàng
Use case: UC03_Xóa khóa học khỏi giỏ hàng
Mục đích: Xóa khóa học khỏi giỏ hàng
Mô tả: Cho phép người dùng xóa khóa học khỏi giỏ hàng
Tác nhân: Người dùng
Điều kiện trước: Người dùng đã đăng nhập thành công vào hệ thống và đã thêm ít nhất
một khóa học vào giỏ hàng và truy cập đến giỏ hàng của mình Điều kiện sau:
Luồng sự kiện
chính (Basic flows)
Người dùng Hệ thống
1 Ở trang hiển thị danh sách các
khóa học trong giỏ hàng, chọn Remove những khóa học nào mà
bản thân muốn xóa
.3 Xóa khóa học đó ra khỏi giỏ hàng trong database
4 Hiện thông báo Xóa khỏi giỏ hàng thành công
Luồng sự kiện phụ
(Alternative
Flows):
2.3.4 Chuyển khóa học vào để dành sau
Bảng 2.4 UC_Chuyển khóa học vào để dành sau
Use case: UC04_Chuyển khóa học vào để dành sau
Mục đích: Lưu khóa học vào danh sách để sau
Mô tả: Cho phép người dùng lưu khóa học vào danh sách để sau
Tác nhân: Người dùng
Điều kiện trước: Người dùng đã đăng nhập thành công vào hệ thống và đã thêm ít nhất một
khóa học vào giỏ hàng và truy cập đến giỏ hàng của mình Điều kiện sau:
Trang 39Luồng sự kiện
chính (Basic
flows)
Người dùng Hệ thống
1 Ở trang hiển thị danh sách các khóa
học trong giỏ hàng, chọn Save for later những khóa học nào mà bản thân muốn lưu vào danh sách để sau
2 Đánh dấu khóa học dó đang ở trong trạng thái save for later trong database, đồng thời xóa khóa học
đó ra khỏi giỏ hàng
3 Thêm khóa học đó vào danh sách Save for later trên giao diện
4 Hiển thị thông báo Lưu vào danh sách để sau thành công
Luồng sự kiện phụ
Use case: UC05_Thanh toán
Mục đích: Đăng ký học (mua) khóa học của người khác
Mô tả: Cho phép người dùng mua khóa học của người khác bằng hình thức
thanh toán Vnpay Tác nhân: Người dùng
Điều kiện trước: Người dùng đã thêm tối thiểu ít nhất một khóa học vào giỏ hàng
Điều kiện sau:
Luồng sự kiện
chính (Basic
flows)
Người dùng Hệ thống
Trang 401 Trong trang giỏ hàng, chọn
chức năng "Check Out."
3.Kiểm tra thông tin trên bill
để đảm bảo đơn hàng chính xác
4 Chọn nút "Create Check Out"
6 Điền thông tin thanh toán trên trang VNPAY, bao gồm các thông tin thẻ ngân hàng hoặc thông tin thanh toán khác
7 Xác nhận thanh toán
2 Hiển thị trang xác nhận đơn hàng (bill) với các thông tin chi tiết về danh sách khóa học, giá cả, và tổng tiền cần thanh toán
5.Chuyển hướng người dùng đến trang thanh toán VNPAY
8 Nhận xác nhận thanh toán từ VNPAY và cập nhật trạng thái thanh toán trong hệ thống
9 Chuyển hướng người dùng đến trang xác nhận đơn hàng với thông báo thanh toán thành công và cung cấp lựa chọn
để quay lại trang chủ hoặc xem thông tin khóa học đã thanh toán
Luồng sự kiện phụ
(Alternative
Flows):
2.3.6 Kiểm tra coupon
Bảng 2.6 UC_Kiểm tra coupon
Use case: UC06_Kiểm tra coupon
Mục đích: Kiểm tra coupon để áp dụng coupon cho đơn hàng
Mô tả: Cho phép người dùng nhập hoặc lựa chọn từ những mã giảm giá săn
được để áp dụng cho tổng đơn hàng của mình trong quá trình thanh toán
Tác nhân: Người dùng
Điều kiện trước: Người dùng đang ở trang giỏ hàng
Điều kiện sau: