1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online

136 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây dựng website bán khóa học lập trình online
Tác giả Phạm Ngọc Thắng, Trần Chí Mỹ
Người hướng dẫn ThS. Mai Tuấn Khôi
Trường học Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh
Chuyên ngành Công nghệ Thông tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2024
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 136
Dung lượng 12,73 MB

Cấu trúc

  • 1.1. Lý do chọn đề tài (15)
  • 1.2. Mục tiêu của đề tài (15)
  • 1.3. Kết cấu của đề tài (15)
  • CHƯƠNG 1. KHẢO SÁT HIỆN TRẠNG (15)
    • 1.1. Phân tích và đánh giá các website (16)
      • 1.1.1. Website Udemy (16)
      • 1.1.2. Website Fullstack Edu (19)
    • 1.2. Kết luận (22)
  • CHƯƠNG 2. XÁC ĐỊNH VÀ MÔ HÌNH HÓA YÊU CẦU (15)
    • 2.1. Xác định yêu cầu (23)
      • 2.1.1. Yêu cầu chức năng (23)
      • 2.1.2. Yêu cầu phi chức năng (23)
    • 2.2. Mô hình hóa yêu cầu (24)
      • 2.3.1. Lược đồ usecase (24)
      • 2.3.2. Đặc tả usecase và lược đồ tuần tự (24)
  • CHƯƠNG 3. THIẾT KẾ HỆ THỐNG (15)
    • 3.1. Thiết kế cơ sở dữ liệu (60)
      • 3.1.1 Lược đồ cơ sở dữ liệu (60)
      • 3.2.2. Mô tả các bảng trong cơ sở dữ liệu (61)
    • 3.2. Thiết kế giao diện (77)
      • 3.2.1. Giao diện dành cho Khách hàng (77)
      • 3.2.2. Giao diện dành cho Quản lý (95)
      • 3.2.3. Giao diện dành cho Admin (100)
  • CHƯƠNG 4. KIẾN TRÚC HỆ THỐNG VÀ CÁC CÔNG NGHỆ SỬ DỤNG (15)
    • 4.1. Sơ đồ kiến trúc hệ thống (105)
    • 4.2. Các công nghệ sử dụng (105)
      • 4.2.1. Java (105)
      • 4.2.2. Spring Framework trong Java (106)
      • 4.2.3. Spring Boot (107)
      • 4.2.4. ReactJS (112)
      • 4.2.5. NextJS (115)
      • 4.2.6. Redux Toolkit (117)
      • 4.2.7. Docker (118)
  • CHƯƠNG 5. CÀI ĐẶT VÀ KIỂM THỬ PHẦN MỀM (15)
    • 5.1. Thiết lập môi trường (120)
    • 5.2. Triển khai dự án (120)
    • 5.3. Triển khai dự án bằng Docker (121)
    • 5.4. Deploy dự án (122)
      • 5.4.1. Thiết lập CI/CD (122)
      • 5.4.2. Triển khai trên server (124)
    • 5.5. Kiểm thử (125)
      • 5.5.1. Kế hoạch kiểm thử (125)
      • 5.5.2. Quy trình kiểm thử (125)
      • 5.5.3. Kết quả kiểm thử (126)
    • 1.1. Đánh giá kết quả đã thực hiện được (133)
    • 1.2. Phân tích kết quả (134)
      • 1.2.1 Ưu điểm (134)
      • 1.2.2 Nhược điểm (134)
    • 1.3. Hướng phát triển (134)

Nội dung

Hiểu được các vấn đề trên nhóm em quyết định phát triển một ứng dụng bán khóa học trực tuyến, nền tảng này cung cấp một môi trường tiện lợi cho người dùng dễ dàng tìm khóa học mong muốn,

Mục tiêu của đề tài

Trong đề tài này, nhóm em đề ra những mục tiêu sau:

+ Xây dựng một website mà ở đó ban quản trị và quản lý có thể đăng tải lên các khóa học, người dùng có thể truy cập để xem và mua khóa học đó trực tuyến

+ Phát triển một hệ thống học online và cho phép quản lý tạo ra các bài giảng với video, tài liệu và các dạng bài tập trắc nghiệm, tự luận, coding

+ Xây dựng trang học trực tuyến của khóa học bao gồm các bài giảng khóa học + Xây dựng một trang quản trị website dành cho admin.

KHẢO SÁT HIỆN TRẠNG

Phân tích và đánh giá các website

Nhóm chúng em đã thực hiện tiến hành khảo sát trên một vài Website tiêu biểu và có lược người sử dụng và truy cập nhiều như:

+ Udemy (https://www.udemy.com)

+ Fullstack Edu (https://fullstack.edu.vn)

1.1.1 Website Udemy Đối với những trang bán khóa học trực tuyến ta không thể không nhắc đến Udemy Đây là một nền tảng bán khóa học hàng đầu đã tồn tại hơn 13 năm chuyên cung cấp các khóa học trực tuyến với nhiều chủ đề khác nhau Tại Udemy cung cấp hàng ngàn khóa học với đội ngũ giảng viên đa dạng Các giảng viên có thể tự do tạo và quản lý khóa học của mình trên nền tảng này

Trang tìm kiếm là một trong số trang ấn tượng nhất đối với trang web này Trong trang này cung cấp các công cụ để người dùng có thể tìm kiếm các khóa học mong muốn một cách nhanh chóng Có nhiều bộ lọc như: đánh giá, chủ đề, trình độ, ngôn ngữ,

Hình 1: Hình ảnh trang tìm kiếm (trang Udemy)

13 Đối với trang thông tin khóa học cung cấp tất cả thông tin cần thiết của khóa học giúp người dùng nằm bắt được tất cả thông tin về khóa học và các nội dung chưa trong khóa học Từ đó xem có phù hợp với mình hay không trước khi đưa ra quyết định mua

Hình 2: Hình ảnh trang chi tiết khóa học (trang Udemy) Đối với giảng viên có thể đăng tải lên nội dung của khóa học do bản thân họ tạo ra Trong trang này giảng viên có thể đăng tải các khóa học bao gồm các thông tin mô tả về khóa học, danh sách các bài giảng và bài tập Bất kỳ ai miễn có tài khoản có thể đăng nội dung khóa học của mình để kinh doanh Điều kiện để một khóa học được phê duyệt thì phải đầy đủ nội dung, đảm bảo nội dung phù hợp Sau khi đăng tải đội ngũ phê duyệt của Udemy sẽ review để đảm bảo rằng nội dung khóa học là phù hợp

Hình 3: Hình ảnh trang thêm khóa học (trang Udemy) Nhìn chung, sau khi khảo sát, Website Udemy có những ưu điểm và nhược điểm như sau: Ưu điểm:

+ Có nhiều bộ lọc tìm kiếm khóa học giúp người dùng có thể tìm kiếm một khóa học một cách nhanh chóng

+ Hệ thống quản lý học trực tuyến được thiết kế giúp cho người dạy có thể đăng tải bài giảng, tài liệu và bài tập trực tuyến giúp cho người học có thể học tập trực tuyến hiệu quả Phần thống kê quá trình học tập giúp người học có thể theo dõi được tiến độ

+ Có phần đánh giá khóa học của các học viên sau khi học tập Giúp cho người dùng có thể xem đánh giá trước khi quyết định mua khóa học

+ Giảng viên có thể dễ dàng đăng tải nội dung khóa học và chỉnh sửa nó dễ dàng

+ Tốc độ phản hồi của hệ thống nhanh

+ Thiếu tương tác trực tiếp: Khi học trên Udemy người học phải chủ động tự học, chủ yếu sự tương tác đến từ việc đặt câu hỏi trên cộng đồng của khóa học đó và giảng viên hoặc mọi người có thể xem và trả lời

+ Chất lượng khóa học: Vì lượng giảng viên trên nền tảng là đa dạng bên cạnh

15 những giảng việc chất lượng thì còn nhiều giảng viên ít có kinh nghiệm nên nhiều khóa học không đủ chất lượng và phù hợp với nhiều học viên Do đó học viên nên tham khảo và chọn lọc khóa học phù hợp trước khi mua

Fullstack Edu là một nền tảng học tập trực tuyến được xây dựng được xây dựng bởi người Việt Đây là trang web cung cấp những khóa học với tính thực tiễn cao với các bài giảng đi đôi với thực hành Các bài giảng tích hợp các bài tập trắc nghiệm, bài tập lập trình giúp học viên có thể thực hành ngay sau mỗi bài giảng Sau khi hoàn thành khóa học học viên được cấp chứng chỉ của khóa học đó

Trang web được thiết kế ấn tượng với giao diện người dùng hiện đại, trắc quan làm nổi bật lên các khóa học và nền tảng này muốn giới thiệu Trang web sử dụng màu sắc tươi sáng, dễ nhìn tạo cảm giác năng động

Hình 4: Hình ảnh trang chủ (trang Fullstack edu) Ấn tượng nhất trong website là là phần thiết kế lộ trình học cho từng lĩnh vực lập trình khác nhau giúp người dùng có cái nhìn tổng quan về quá trình học Mỗi lộ trình đều chia nhỏ ra theo từng giai đoạn

Hình 5: Hình ảnh trang lộ trình học (trang Fullstack edu)

Popup đăng nhập của trang web được thiết kế với màu sắc hài hòa, giúp người dùng dễ dàng nhận diện các trường thông tin cần điền Ngoài ra việc đăng nhập bằng tài khoản Email và Facebook giúp người dùng tiết kiệm được thời gian và tạo ra trải nghiệm đăng nhập thuận tiện hơn

Hình 6: Hình ảnh popup đăng nhập (trang Fullstack edu)

Phần thiết kế nội dung bài giảng khóa học là một phần đặc sắc trong trang web này Với mỗi khóa học được thiết kế gồm nhiều chương, với mỗi chương sẽ bao gồm nhiều bài giảng có thể là video, tài liệu hoặc các dạng bài tập trắc nghiệm, tự luận và coding

Hình 7: Hình ảnh trang học trực tuyến (trang Fullstack edu) Ngoài ra với mỗi khóa học sẽ có phần hỏi đáp, nơi mà người học sẽ lên trao đổi về nội dung bài học và sẽ có người hướng dẫn và giảng viên tham gia để hổ trợ học viên

Từ đó giúp học viên có thể học tập được tốt hơn

Hình 8: Hình ảnh trang diễn đàn học tập (trang Fullstack edu) Ưu điểm:

+ Hệ thống học tập trực tuyến được xây dựng với nhiều nội dung như video, tài liệu và bài tập giúp cho học viên có thể học tập được một cách hiệu quả

+ Có diễn đàn hỏi đáp cho từng bài giảng

+ Quá trình xem video trong nhiều thời điểm khá mượt mà

+ Chức năng đăng nhập được hổ trợ với nhiều hình thức

XÁC ĐỊNH VÀ MÔ HÌNH HÓA YÊU CẦU

Xác định yêu cầu

Qua việc khảo sát các trang web bán khóa học, ta có các yêu cầu chức năng cho hệ thống bao gồm:

+ Đăng ký, đăng nhập và lấy lại mật khẩu

+ Quản lý khóa học cho người quản lý

+ Tạo các bài giảng với video hoặc tài liệu

+ Tạo các dạng bài tập trắc nghiệm và tự luận

+ Phần thảo luận cho từng bài giảng trong khóa học

+ Quản lý giỏ hàng và thanh toán online

+ Chuông thông báo cho người dùng

+ Quản lý khóa học cho quản trị viên

2.1.2 Yêu cầu phi chức năng

Các yêu cầu phi chức năng bao gồm:

+ Giao diện người dùng thân thiện, dễ sử dụng

+ Tốc độ xử lý các thao tác nhanh chóng và chính xác

+ Hệ thống có tính bảo mật, phần quyền rõ ràng

+ Việc bảo trì, nâng cấp và phát triển dễ dàng

THIẾT KẾ HỆ THỐNG

Thiết kế cơ sở dữ liệu

3.1.1 Lược đồ cơ sở dữ liệu

Hình 41: Hình ảnh lược đồ cơ sở dữ liệu của user service

Hình 42: Hình ảnh lược đồ cơ sở dữ liệu của course service

3.2.2 Mô tả các bảng trong cơ sở dữ liệu

Danh sách các bảng trong cơ sở dữ liệu

STT Tên bảng Diễn giải

1 user Chứa các thông tin của người dùng

2 role Chứa thông tin về tất cả quyền chung của người dùng có mối quan hệ nhiều – nhiều với bảng user

3 users_roles Là bảng trung giữa của bảng user và bảng role giúp liên kết được

4 address Chứa thông tin địa chỉ của người dùng có mối quan hệ nhiều – một với bảng user

5 orders Chứa thông tin hóa của người dùng

6 order_items Chứa danh sách các item của một hóa đơn của người dùng, có mối quan hệ nhiều – một với bảng order

7 module Chứa tất cả thông tin các tính năng trong hệ thống, được sử dụng để phần quyền theo tính năng

8 role_details Chứa thông tin chi tiết của một quyền được liên kết với bảng module và role để phân quyền theo tính năng trong hệ thống

9 user_logs Chứa thông tin về lịch sử hoạt động của người dùng

10 recent_search_history Chứa thông tin về lịch sử tìm kiếm của người dùng trên từng tính năng trong hệ thống Sử dụng trong tất cả tính năng tìm kiếm

11 category Chứa thông tin các danh mục của khóa học

13 topic Chứa thông tin các chủ đề của khóa học

14 course Chứa tất cả các thông tin cơ bản của các khóa học

15 content Chứa nội dung của một khóa học có mối quan hệ một – một với bảng khóa học

16 description Chứa mô tả chi tiết về của khóa học có quan hệ một – một với bảng content

17 section Chứa nội dung các chương của khóa học

18 lecture Chứa thông tin các bài giảng trong khóa học, có mối quan hệ nhiều – một với bảng section Bài giảng có thể là video, tài liệu hoặc bài tập

19 level Chứa thông tin về các cấp độ của khóa học

20 language Chứa thông tin về các ngôn ngữ của khóa học

21 course_progress Chứa thông tin về tiến trình học của người dùng đối với một khóa học

22 course_issue _report Ghi nhận thông tin lỗi khi từ chối một khóa học

23 assignment Chứa thông tin các bài tập tự luận của một khóa học

24 assignment_history Chứa lịch sử làm bài tập tự luận

25 forum_lecture Chứa các bình luận của người dùng trên diễn dàn bài giảng của một khóa học

26 comment_reply Chứa bình luận phản hội một nội dung trên diễn đàn bài giảng

27 course_review Chứa các của người dùng về các khóa học

28 ex_quiz Chứa các thông tin cơ bản về bài tập trắc nghiệm

29 question Chứa danh sách các câu hỏi của bài tập trắc nghiệm

30 user_ex_quiz Chứa lịch sử làm bài của người dùng về các bài tập trắc nghiệm

31 user_answer Chứa thông tin đáp án của người dùng về các câu hỏi trong bài tập trắc nghiệm

Bảng 1: Bảng mô tả các bảng trong cơ sở dữ liệu

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 email Địa chỉ email String

4 first_name Tên người dùng String

5 last_name Họ của người dùng String

8 telephone Số điện thoại String

9 username Tên đăng nhập String

10 created Thời gian tạo Long

11 updated Thời gian cập nhật Long

Bảng 2: Bảng mô tả bảng user

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

3 description Mô tả role String

4 created Thời gian tạo Long

5 updated Thời gian cập nhật Long

6 role_user Thuộc quyền nào trong ba quyền user, manager, admin

Bảng 3: Bảng mô tả bảng role

3.2.2.3 Mô tả bảng user_role

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 user_id Khóa của bảng user String

2 role_id Khóa của bảng role String

Bảng 4: Bảng mô tả bảng user_role

3.2.2.4 Mô tả bảng role_details

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 can_create Đánh dấu có quyền tạo Boolean

3 create_view Đánh dấu có quyền xem Boolean

4 can_update Đánh dầu có quyền sửa Boolean

5 can_delete Đánh dầu có quyền xóa Boolean

6 module_id Khóa của một module trong hệ thống để phân quyền cho module đó

7 role_id Khóa của bảng role String

8 updated Thời gian cập nhật Long

9 created Thời gian tạo Long

Bảng 5: Bảng mô tả bảng role_details

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 shipping_method Phương thức thanh toán

3 user_id Khóa của bảng User String

4 total_price Tổng đơn hàng Double

5 created Thời gian tạo Long

7 updated Thời gian cập nhật Long

Bảng 6: Bảng mô tả bảng order

3.2.2.6 Mô tả bảng order_items

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 course_id Khóa của khóa học Integer

3 price Giá tiền của khóa học String

4 order_id Khóa của bảng order String

5 created Thời gian tạo Long

6 updated Thời gian cập nhật Long

Bảng 7: Bảng mô tả bảng order_items

3.2.2.7 Mô tả bảng user_logs

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 action_key Khóa chính của record được thao tác

3 action_name Tên hành động thao tác trên dữ liệu

4 action_object Thực thể của tác động Enum

5 description Mô tả chi tiết String

6 user_name Tên người dùng String

Bảng 8: Bảng mô tả bảng user_logs

3.2.2.8 Mô tả bảng recent_search_history

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 keyword Từ khóa tìm kiếm String

3 keyword_type Loại từ khóa Enum

4 module_type Loại module thực hiện tìm kiếm

5 username Tên người dùng String

6 created Ngày thực hiện String

7 count_history Đếm số lần thực hiện tìm kiếm

Bảng 9: Bảng mô tả bảng recent_search_history

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 name Tên khóa học String

3 sub_title Mô tả khóa học String

4 price Giá của khóa học Double

5 url_courses_images Đường dẫn hình ảnh khóa học

6 url_promotion_videos Đường dẫn video giới thiệu

7 authorName Tên tác giả String

8 is_approved Khóa học đã phê duyệt

9 is_awaiting_approval Khóa học đang Boolean

10 ís_completed_content Khóa học đã hoàn thành nội dung

11 language_id Khóa bảng ngôn ngữ

12 level_id Khóa bảng cấp độ

13 topic_id Khóa bảng chủ đề

14 created Thời gian tạo Long

16 updated Thời gian cập nhật

17 modifier Người cập nhật String

Bảng 10: Bảng mô tả bảng course

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 name Tên chủ đề String

3 description Mô tả chủ đề String

4 category_id Khóa bảng danh mục String

5 created Thời gian tạo Long

6 updated Thời gian cập nhật Long

Bảng 11: Bảng mô tả bảng topic

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 course_id ID khóa học String

3 description_id ID mô tả khóa học String

4 created Thời gian tạo Long

6 updated Thời gian cập nhật Long

7 modifier Người cập nhật String

Bảng 12: Bảng mô tả bảng content

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 detail Mô khóa học học, nội dung đạt được

3 target_consumers Mô tả đối tượng phù hợp của khóa học

4 requirements Mô tả yêu cầu cho khóa học

6 updated Thời gian cập nhật Long

7 modifier Người cập nhật String

8 created Thời gian tạo Long

Bảng 13: Bảng mô tả bảng description

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 ordinal_number Số thứ tự của chương Integer

4 total_duration_video_lectures Tổng độ dài của tất cả video chương

5 content_id ID nội dung khóa học String

6 updated Thời gian cập nhật Long

7 modifier Người cập nhật String

8 created Thời gian tạo Long

Bảng 14: Bảng mô tả bảng section

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 name Tên bài giảng String

3 ordinal_number Thứ tự bài giảng Integer

4 url Đường dẫn bài giảng String

5 file_name Tên file String

6 section_id Khóa chính của chương

7 video_duration Độ dài video String

8 updated Thời gian cập nhật Long

9 modifier Người cập nhật String

10 created Thời gian tạo Long

Bảng 15: Bảng mô tả bảng lecture

3.2.2.15 Mô tả bảng course_progress

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 current_progress Tiến độ học hiện tại Integer

3 rate_progress Tỉ lệ hoàn thành Double

4 total_amount_lecture Tổng bài giảng trong khóa học Integer

5 user_id ID của User String

6 course_id ID của khóa học String

7 modifier Người cập nhật String

8 created Thời gian tạo Long

10 removed Đánh dấu xóa Boolean

11 updated Thời gian cập nhật Long

Bảng 16: Bảng mô tả bảng course_progress

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 estimated_duration Thời gian phải hoàn thành Long

4 question Thông tin câu hỏi String

5 text_instructions Hướng dẫn bằng văn bản String

6 url_file_resource Đường dẫn file tài liệu câu hỏi String

7 url_file_solution Đường dẫn chứa đáp án bằng file tài liệu

8 url_video_instructions Đường dẫn video hướng dẫn câu hỏi

9 url_video_solution Đường dẫn chứa đáp án bằng video

10 lecture_id Khóa của bài giảng String

11 text_solution Đáp án bằng văn bảng Long

Bảng 17: Bảng mô tả bảng assignment

3.2.2.17 Mô tả bảng assignment_history

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

4 evalution Đánh giá bài String

5 score Điểm của bài Float

6 text_answer Câu trả lời của bài String

7 username Tên người dùng String

8 assignment_id Khóa chính bài tự luận String

9 original_number Số thứ tự Int

10 time_submit Thời gian submit bài Long

Bảng 18: Bảng mô tả bảng assignment_history

3.2.2.18 Mô tả bảng ex_quiz

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 category Loại bài trắc nghiệm String

5 limit_time Thời gian làm bài Long

6 max_attempt_number Số lần làm tối đa Int

7 Required_score Điểm tối thiếu để pass String

Bảng 19: Bảng mô tả bảng ex_quiz

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 answer_explantion Giải thích đáp án String

4 options Các lựa chọn String

5 orginal_number Số thứ tự Int

6 quiz_type Loại câu hỏi trắc nghiệm Int

7 right_answer Đáp án đúng String

Bảng 20: Bảng mô tả bảng question

3.2.2.20 Mô tả bảng user_ex_quiz

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 attempt_number Thứ tự lần làm Int

4 count_answer_corrent Số đáp án đúng Int

5 ex_quiz_id Khóa chính của bảng ex_quiz String

6 is_completed Đánh dấu đã pass Boolean

7 limit_time Thời gian làm tối đa Long

9 start_time Thời gian bắt đầu làm Long

10 user_id Khóa của user String

Bảng 21: Bảng mô tả bảng user_ex_quiz

3.2.2.21 Mô tả bảng user_answer

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 current_answer Đáp án của người dùng String

4 is_correct Đánh dấu câu trả lời đúng Boolean

5 question_id Khóa của bảng question String

6 user_quiz_id Khóa của bảng user_quiz_id String

Bảng 22: Bảng mô tả bảng user_answer

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 content Nội dung thông báo String

4 is_viewed Đánh dấu đã xem Boolean

5 link Link dẫn tới đường dẫn liên quan String

Bảng 23: Bảng mô tả bảng notifications

3.2.2.23 Mô tả bảng forum_lecture

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 avatar_url Đường dẫn avatar của người dùng String

4 comment Nội dung bình luận String

5 lecture_id Khóa của bài giảng String

6 user_id Khóa của user String

7 username Tên người dùng String

Bảng 24: Bảng mô tả bảng forum_lecture

3.2.2.24 Mô tả bảng ảng comment_reply

STT Tên thuộc tính Mô tả Kiểu dữ liệu

1 id Mã phân biệt String

2 created Thời gian tạo Long

3 avatar_url Đường dẫn avatar của người dùng String

4 comment Nội dung bình luận String

5 forum_lecture_id Khóa của bảng forum_lecture String

6 user_id Khóa của user String

7 username Tên người dùng String

Bảng 25: Bảng mô tả bảng comment_reply

KIẾN TRÚC HỆ THỐNG VÀ CÁC CÔNG NGHỆ SỬ DỤNG

Sơ đồ kiến trúc hệ thống

Hình 78: Hình ảnh Sơ đồ kiến trúc của hệ thống.

CÀI ĐẶT VÀ KIỂM THỬ PHẦN MỀM

Thiết lập môi trường

- Để có thể chạy được ứng dụng, máy tính phải đảm bảo các yêu cầu sau:

+ Cài đặt Java (phiên bản tối thiểu là 17)

+ Cài đặt Apache Maven (phiên bản tối thiểu là 3.8.3)

+ Cài đặt Docker Desktop (phiên bản tối thiểu là 4.12.0)

+ Cài đặt IntelliJ IDEA và WebStorm (hoặc Visual Code).

Triển khai dự án

Bước 1: Tải source code bằng lệnh sau:

Git clone https://github.com/course-ecommerce/course-ecommerce-app

Bước 2: Truy cập folder BackEnd, mở bằng IntelliJ IDEA và tiến hành khởi chạy

Hình 96: Hình ảnh khởi chạy backend server

Bước 3: Truy cập FrontEnd và mở bằng VSCode và tiến hành chạy lệnh sau để cài đặt các thư viện cần thiết:

Sau khi cài đặt xong tiến hành khởi chạy FrontEnd bằng lệnh: npm run dev

Hình 97: Hình ảnh khởi Frontend thành công.

Triển khai dự án bằng Docker

Dự án đã được config docker-compose.yml Ta có thể triển khai bằng các bước sau:

Bước 2: Tải source code bằng lệnh sau: git clone https://github.com/course-ecommerce/course-ecommerce-app

Bước 3: Truy cập vào folder build và chạy lệnh:

Hình 98: Hình ảnh chạy docker compose

Hình 99: Hình ảnh triển khai dự án với các container docker.

Deploy dự án

Dịch vụ sử dụng cho deploy dự án

Bảng 48: Bảng mô tả deploy dự án

Với FrontEnd: Sử dụng nền tảng Vercel, hỗ trợ CI/CD khi có commit mới được đẩy lên

Bước 1: Cấu hình github action để nhận biết commit mới Khi nhận thấy có commit mới trên nhánh deploy ta sẽ thực hiện ssh vào server của Digital Ocean Cloud và thực hiện CD thông qua file build.sh

Hình 100: Hình ảnh cấu hình github action cho việc sử dụng CI/CD

Bước 2: File build.sh sẽ tiến hành build các service trong dự án

Hình 101: Hình ảnh build các service trong dự án bằng file build.sh

Bước 3: Sau khi build xong các service, github action sẽ chạy docker compose với source code mới được build

Hình 102: Hình ảnh cấu hình github action thành công

Sản phẩm đã deploy lên host

Hình 103: Hình ảnh deploy dự án lên host thành công

Kiểm thử

Trong dự án này sẽ áp dụng các phương pháp kiểm thử sau đây:

+ Kiểm thử tích hợp (Integration test): Tích hợp các module của ứng dụng và tiến hành kiểm thử để đảm bảo chúng hoạt động tốt cùng nhau

+ Kiểm thử hệ thống (System test): Kiểm thử toàn bộ hệ thống sau khi tích hợp để đảm bảo nó đáp ứng các yêu cầu đã đặt ra

+ Kiểm thử tính khả dụng (Usability test): Đánh giá tính dễ sử dụng của ứng dụng, đảm bảo rằng giao diện người dùng trực quan và thân thiện

5.5.1.2 Mục tiêu kiểm thử Đảm bảo các chức năng của ứng dụng (được xác định trong đặc tả dự án) hoạt động chính xác trong điều kiện thực tế

Các tiêu chí đánh giá trong quá trình kiểm thử bao gồm:

+ Tiêu chí tạm ngừng: Nếu có ít nhất 40% số test case gặp lỗi, quá trình kiểm thử sẽ tạm ngừng cho đến khi các lỗi hiện tại được khắc phục

+ Tiêu chí hoàn thành: Các tiêu chí xác định khi nào quá trình kiểm thử được xem là hoàn tất

+ Tỷ lệ thực hiện test case: Phải đạt 100% test case trừ khi có lý do cụ thể để không đạt được

+ Tỷ lệ thành công của test case: Phải đạt ít nhất 80% số test case thành công

Quy trình kiểm thử gồm 6 bước như sau:

1 Requirement Analysis (phân tích yêu cầu): nghiên cứu, phân tích yêu cầu dự án

2 Test Planning (lập kế hoạch kiểm thử):

– Xác định phạm vi dự án

– Xác định phương pháp tiếp cận

– Lên kế hoạch thiết kế công việc kiểm thử

3 Test Case Development (thiết kế test case):

– Chuẩn bị dữ liệu kiểm thử

4 Test Environment Setup (thiết lập môi trường kiểm thử): thiết lập và kiểm tra môi trường kiểm thử

5 Test Execution (tiến hành kiểm thử):

– Thực hiện kiểm thử phần mềm

– So sánh với kết quả mong đợi và báo cáo các lỗi xảy ra lên công cụ quản lý lỗi – Thực hiện re–test để xác định các lỗi đã được sửa và regression test khi có sự thay đổi liên quan

– Điều chỉnh, sửa chữa tài liệu tiến độ dự án theo tình hình thực tế

6 Test Cycle Closure (đóng chu trình kiểm thử):

– Tổng kết, báo cáo kết quả về việc thực thi test case

– Thảo luận và rút ra bài học kinh nghiệm

STT Mô tả Các bước thực hiện Kết quả mong đợi Kết quả thực tế Trạng thái

- Nhập đầy đủ thông tin đăng ký

Thông báo đăng ký thành công và

Thông báo đăng ký thành công và chuyển sang trang Đạt

- Nhập mã OTP được nhận từ email

- Nhấn nút Submit chuyển sang trang thông tin tài khoản thông tin tài khoản

- Nhấn nút LOGIN Đăng nhập thành công và điều hướng về trang home Đăng nhập thành công và điều hướng về trang home Đạt

- Chọn Forgot password ở trang đăng nhập

- Nhập địa chỉ email của tài khoản

- Nhập OTP đã nhận qua email

Hiện thị thông báo mật khẩu mới và điều hướng đến trang đăng nhập

Hiện thị thông báo mật khẩu mới và điều hướng đến trang đăng nhập Đạt

Thay đổi thông tin cá nhân

- Nhập các thông tin cần thay đổi

Thay đổi thông tin thành công

Thay đổi thông tin thành công Đạt

- Nhấn vào Change my password trong mục Profile

- Nhập mật khẩu cũ, mật khẩu mới và Đổi mật khẩu thành công Đổi mật khẩu thành công Đạt

124 xác nhận mật khẩu mới

Xem thông tin cá nhân

- Nhận vào thông tin cá nhân

Hiển thị đúng thông tin cá nhân của người dùng

Hiển thị đúng thông tin cá nhân của người dùng Đạt

Xem thông tin khóa học

- Nhấn vào một khóa học bất kỳ

Hiển thị thông tin chi tiết của một khóa học

Hiển thị thông tin chi tiết của một khóa học Đạt

- Trong trang thông tin chi tiết khóa học nhấn thêm vào giỏ hàng

Thêm khóa học vào giỏ hàng thành công

Thêm khóa học vào giỏ hàng thành công Đạt

- Nhấn vào icon giỏ hàng trên thanh Header Đi đến trang quản lý giỏ hàng và hiển thị giỏ hàng Đi đến trang quản lý giỏ hàng và hiển thị giỏ hàng Đạt

- Trong trang quản lý giỏ hàng chọn nút xóa ở một sản phẩm

Xóa sản phẩm ra khỏi giỏ hàng thành công

Xóa sản phẩm ra khỏi giỏ hàng thành công Đạt

Xem các khóa học đã mua

- Chọn lựa chọn khóa học của tôi trên thanh Header

Hiển thị danh sách khóa học đã mua thành công

Hiển thị danh sách khóa học đã mua thành công Đạt

- Chọn một bài giảng là video trong trang

Hệ thống hiển thị video

Hệ thống hiển thị video Đạt

Làm bài tập trắc nghiệm

- Chọn một bài tập trắc nghiệm trong khóa học

- Bài làm đã được hoàn thành

- Bài làm đã được hoàn thành Đạt

Làm bài tập tự luận

- Chọn một bài tập tự luận trong khóa học

- Bài làm đã được hoàn thành

- Bài làm đã được hoàn thành Đạt

- Click rating vào một khóa học đã mua

- Điền đánh giá và số sao Đánh giá khóa học thành công Đánh giá khóa học thành công Đạt

Xem thảo luận bài giảng

- Truy cập vào một bài học bất kỳ

Hiển thị các thảo luận

Hiển thị các thảo luận Đạt

Thêm thảo luận bài giảng

- Truy cập vào một một bài học bất kỳ

Thảo luận mới được thêm thành công

Thảo luận mới được thêm thành công Đạt

- Truy cập vào trang Manage Course với quyền Manager

- Khóa học mới được thêm thành công

- Khóa học mới được thêm thành công Đạt

- Nhập tên khóa học và tiến hành submit

Xem danh sách nộp bài tập tự luận

- Truy cập vào trang Manage Course với quyền Manager

Hiển thị danh sách bài tập tự luận thành công

Hiển thị danh sách bài tập tự luận thành công Đạt

Chấm bài tập tự luận

- Truy cập vào trang Manage Course với quyền Manager

- Click vào bài tập cần chấm

- Click add feedback và điền thông tin vào

Feedback được thêm thành công

Feedback được thêm thành công Đạt

- Truy cập trang admin/overview

- Chọn năm và tháng muốn xem thống kê

Hiển thị biểu đồ thống kê theo năm, tháng đã chọn

Hiển thị biểu đồ thống kê theo năm, tháng đã chọn Đạt

- Truy cập vào trang admin/user-history

Hiển thị danh sách theo điều kiện đã chọn

Hiển thị danh sách theo điều kiện đã chọn Đạt

127 nhập các điều kiện muốn tìm kiếm

- Truy cập vào trang admin/user

- Tại input search, nhập các điều kiện muốn tìm kiếm

Hiển thị danh sách theo điều kiện đã chọn

Hiển thị danh sách theo điều kiện đã chọn Đạt

- Truy cập vào trang admin/bill

- Tại input search, nhập các điều kiện muốn tìm kiếm

Hiển thị danh sách theo điều kiện đã chọn

Hiển thị danh sách theo điều kiện đã chọn Đạt

- Truy cập vào trang admin/bill

- Tại input search, nhập các điều kiện muốn tìm kiếm

Hiển thị danh sách theo điều kiện đã chọn

Hiển thị danh sách theo điều kiện đã chọn Đạt

- Truy cập vào trang nội dung khóa được cần được xét duyệt

- Nhấn vào Preview để xem nội dung với giao diện user

Hiển thị các bài học theo giao diện user

Hiển thị các bài học theo giao diện user Đạt

- Truy cập vào trang nội dung khóa được cần được xét duyệt

- Nhấn vào Xét Duyệt, và Chấp

Khóa học đã được duyệt thành công

Khóa học đã được duyệt thành công Đạt

- Truy cập vào trang nội dung khóa được cần được xét duyệt

- Click Xét Duyệt, và Không Chấp nhận, chọn lý do

Khóa học không được duyệt và chuyển trạng thái Chờ Xét Duyệt của khóa học thành false

Khóa học không được duyệt và chuyển trạng thái Chờ Xét Duyệt của khóa học thành false Đạt

- Click vào Icon Chuông để xem thông báo

Các thông báo của user sẽ được hiện ra

Các thông báo của user sẽ được hiện ra Đạt

- Truy cập vào trang admin/role

- Nhập thông tin tên, mô tả cho role mới và roleDetail

Role mới được tạo thành công

Role mới được tạo thành công Đạt

- Truy cập vào trang admin/role

- Click vào role cần chỉnh sửa

- Thay đổi các thông tin tên, mô tả và roleDetail

Role được cập nhật thành công

Role được cập nhật thành công Đạt

Bảng 49: Bảng mô tả kết quả kiểm thử

Đánh giá kết quả đã thực hiện được

Sau một thời gian nghiên cứu và hoàn thiện đề tài, nhóm đã thực hiện và đạt những mục tiêu đã đề ra sau:

1.1.1 Về lý thuyết và kỹ năng:

+ Nắm bắt được các công nghệ mới hiện nay như: Spring Boot, Docker, MySQL Typescript, ReactJS, NextJS, JWT

+ Rèn được kỹ năng làm việc nhóm cũng như giải quyết vấn đề

Xây dựng ứng dụng với các tính năng cơ bản:

Về mặt người dùng là người học:

+ Hệ thống học trực tuyến đa dạng gồm các video bài giảng, tài liệu file, các dạng bài tập tự luận, trắc nghiệm, diễn đàn học tập

+ Chức năng tìm kiếm, lọc sản phẩm

+ Quản lý giỏ hàng và các hình thức thanh toán online

+ Trang thông tin khóa học gồm đầy đủ thông tin cùng đánh giá của khách hàng + Chuông thông báo cho người dùng

+ Có các chức năng cơ bản liên quan đến đăng nhập, đăng ký, quên mật khẩu và quản lý thông tin người dùng

Về mặt sử dụng của người quản lý:

+ Quản lý khóa học mà mình đã tạo

Về mặt sử dụng của người quản trị:

+ Xem lịch sử người dùng

+ Quản lý khóa học và phê duyệt các khóa học

Phân tích kết quả

Nhìn chung nhóm đã phát triển dự án web bán khóa học với các chức năng cần thiết và đạt được mục tiêu đề ra ban đầu Thông qua đánh giá đề tài thì nhóm em thấy có những ưu điểm là:

+ Xây dựng một hê thống bán khóa học bao gồm các chức năng cần thiết để khách hàng có thể đăng tải sản phẩm là khóa học lên cho người dùng mua

+ Xây dựng một hệ thống học trực tuyến bao gồm nhiều dạng như video, tài liệu và các dạng bài tập

+ Tốc độ phản hồi video bài giảng nhìn chung khá ổn để đáp ứng nhu cầu khách hàng

+ Đã đóng gói chương trình bằng docker và triển khai được ứng dụng lên host

Tuy nhiên do giới hạn thời gian và nhân lực, ứng dụng vẫn còn những nhược điểm sau:

+ Giao diện chưa tối ưu, chưa responsive nhiều phần

+ Chưa có các dạng bài tập luyện tập lập trình.

Hướng phát triển

Trong tương lai, nhóm sẽ phát triển theo những hướng sau:

+ Xử lý những bug còn tồn động trong hệ thống

+ Thêm một số dạng bài tập rèn luyện code và bài tập sql

DANH MỤC TÀI LIỆU THAM KHẢO

[1] Spring Boot là gì? Những kiến thức cần chuẩn bị khi học Spring Boot, https://vietnix.vn/spring-boot-la-gi/, truy cập vào 21/12/2023

[2] Spring boot là gì? giải mã các thông tin về framework spring boot, https://t3h.com.vn/tin- tuc/spring-boot-la-gi, truy cập vào 21/12/2023

[3] Nâng cao bảo mật hệ thống với Spring Security, https://rabiloo.com/vi/blog/nang-cao-bao- mat-voi-spring-security, truy cập vào 21/12/2023

[4] Giới thiệu về Java, https://viblo.asia/p/gioi-thieu-ve-java-63vKjD8Vl2R, truy cập vào 21/12/2023

[5] Security with Spring Baeldung, https://www.baeldung.com/security-spring, truy cập vào 30/12/2023

[6] Docker là gì?, https://aws.amazon.com/vi/docker/, truy cập vào 21/12/2023

[7] Spring là gì? Lợi ích mà Spring mang lại cho người dùng, https://itnavi.com.vn/blog/spring-la-gi-spring-framework-cua-java, truy cập vào 21/12/2023

[8] React Js là gì? Đặc điểm và tính năng của framework ReactJs, https://bkhost.vn/blog/react-js/#reactjs_co_nhung_tinh_nang_nao, truy cập vào 12/01/2024

[9] ReactJS là gì? Những điều bạn chưa biết về ReactJS, https://aptech.fpt.edu.vn/reactjs-la- gi.html, truy cập vào 12/01/2024

[10] NEXTJS là gì? 1 vài ưu, nhược điểm của NEXTJS, https://kb.pavietnam.vn/nextjs-la-gi- 1-vai-uu-nhuoc-diem-cua-nextjs.html#I_NEXTJS_la_gi, truy cập vào 12/02/2024

[11] Tìm hiểu về Next.js (Phần 1), link truy cập, https://viblo.asia/p/tim-hieu-ve-nextjs-phan- 1-V3m5WQkwZO7 , truy cập vào 15/02/2024

[12] 5 mẫu kiến trúc phần mềm, hệ thống phổ biến hiện nay, https://blogchiasekienthuc.com/lap-trinh/mau-kien-truc-phan-mem-he-thong-pho-bien.html, truy cập vào 19/06

Ngày đăng: 19/11/2024, 08:41

HÌNH ẢNH LIÊN QUAN

Hình 9: Hình ảnh lược đồ usecase - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 9 Hình ảnh lược đồ usecase (Trang 24)
Hình 13: Hình ảnh lược đồ tuần tự chức năng Đổi mật khẩu - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 13 Hình ảnh lược đồ tuần tự chức năng Đổi mật khẩu (Trang 31)
Hình 14: Hình ảnh lược đồ tuần tự chức năng Thay đổi thông tin cá nhân - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 14 Hình ảnh lược đồ tuần tự chức năng Thay đổi thông tin cá nhân (Trang 32)
Hình 15: Hình ảnh lược đồ tuần tự chức năng Xem thông tin cá nhân. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 15 Hình ảnh lược đồ tuần tự chức năng Xem thông tin cá nhân (Trang 33)
Hình 16: Hình ảnh lược đồ tuần tự chức năng Xem thông tin khóa học. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 16 Hình ảnh lược đồ tuần tự chức năng Xem thông tin khóa học (Trang 34)
Hình 17: Hình ảnh lược đồ tuần tự chức năng thêm giỏ hàng - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 17 Hình ảnh lược đồ tuần tự chức năng thêm giỏ hàng (Trang 35)
Hình 18: Hình ảnh lược đồ tuần tự chức năng xem giỏ hàng - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 18 Hình ảnh lược đồ tuần tự chức năng xem giỏ hàng (Trang 36)
Hình 19: Hình ảnh lược đồ tuần tự chức năng xóa giỏ hàng - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 19 Hình ảnh lược đồ tuần tự chức năng xóa giỏ hàng (Trang 37)
Hình 20: Hình ảnh lược đồ tuần tự chức năng xem các khóa học đã mua. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 20 Hình ảnh lược đồ tuần tự chức năng xem các khóa học đã mua (Trang 38)
Hình 21: Hình ảnh lược đồ tuần tự chức năng xem video bài giảng. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 21 Hình ảnh lược đồ tuần tự chức năng xem video bài giảng (Trang 39)
Hình 23: Hình ảnh lược đồ tuần tự chức năng làm bài tập tự luận - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 23 Hình ảnh lược đồ tuần tự chức năng làm bài tập tự luận (Trang 41)
Hình 27: Hình ảnh lược đồ tuần tự chức năng thêm khóa học. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 27 Hình ảnh lược đồ tuần tự chức năng thêm khóa học (Trang 46)
Hình 28: Hình ảnh lược đồ tuần tự chức năng xem danh sách nộp bài tự luận. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 28 Hình ảnh lược đồ tuần tự chức năng xem danh sách nộp bài tự luận (Trang 47)
Hình 30: Hình ảnh lược đồ tuần tự chức năng Xem thống kê - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 30 Hình ảnh lược đồ tuần tự chức năng Xem thống kê (Trang 49)
Hình 42: Hình ảnh lược đồ cơ sở dữ liệu của course service. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 42 Hình ảnh lược đồ cơ sở dữ liệu của course service (Trang 61)
Hình 48: Hình ảnh trang xác thực OTP và nhập mật khẩu mới. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 48 Hình ảnh trang xác thực OTP và nhập mật khẩu mới (Trang 81)
Hình 72: Hình ảnh giao diện trang Admin và thống kê. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 72 Hình ảnh giao diện trang Admin và thống kê (Trang 100)
Hình 78: Hình ảnh Sơ đồ kiến trúc của hệ thống. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 78 Hình ảnh Sơ đồ kiến trúc của hệ thống (Trang 105)
Hình 91: Hình ảnh sử dụng App Router ReactJS trong dự án. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 91 Hình ảnh sử dụng App Router ReactJS trong dự án (Trang 116)
Hình 92: Hình ảnh sử dụng layout trong NextJS - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 92 Hình ảnh sử dụng layout trong NextJS (Trang 117)
Hình 97: Hình ảnh khởi Frontend thành công. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 97 Hình ảnh khởi Frontend thành công (Trang 121)
Hình 103: Hình ảnh deploy dự án lên host thành công. - Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng website bán khóa học lập trình online
Hình 103 Hình ảnh deploy dự án lên host thành công (Trang 124)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN