1.4 Mô tả yêu cầu chức năng 1.4.1 Phân tích yêu cầu của hệ thống - Người dùng có thể thay đổi thông tin cá nhân như hình ảnh, tên, giới tính… - Người dùng thực hiện chat trên ứng dụng,
Trang 1NGUYỄN MINH THUẬN - 51702192
XÂY DỰNG ỨNG DỤNG CHAT TRỰC TUYẾN CHO SINH VIÊN
DỰ ÁN CÔNG NGHỆ THÔNG TIN
KỸ THUẬT PHẦN MỀM
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2024
Trang 2KHOA CÔNG NGHỆ THÔNG TIN
NGUYỄN MINH THUẬN - 51702192
XÂY DỰNG ỨNG DỤNG CHAT TRỰC
TUYẾN CHO SINH VIÊN
DỰ ÁN CÔNG NGHỆ THÔNG TIN
KỸ THUẬT PHẦN MỀM
Người hướng dẫn
ThS Doãn Xuân Thanh
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2024
Trang 3Chúng em xin chân thành cảm ơn ………
………
………
………
………
………
………
………
TP Hồ Chí Minh, ngày 17 tháng 03 năm 2024
Tác giả Thuan Nguyễn Minh Thuận
Trang 4CÔNG TRÌNH ĐƯỢC HOÀN THÀNH
TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và được sựhướng dẫn khoa học của ThS Doãn Xuân Thanh Các nội dung nghiên cứu, kếtquả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nàotrước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhậnxét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõtrong phần tài liệu tham khảo
Ngoài ra, trong Dự án còn sử dụng một số nhận xét, đánh giá cũng như
số liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thíchnguồn gốc
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm về nội dung Dự án của mình Trường Đại học Tôn Đức Thắng không
liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trìnhthực hiện (nếu có)
TP Hồ Chí Minh, ngày 17 tháng 3 năm 2024
Tác giả Thuan Nguyễn Minh Thuận
Trang 5TÓM TẮT
(Time New Romans – 13)
Trang 6TITLE ABSTRACT
(Time New Romans – 13)
Trang 7DANH MỤC HÌNH VẼ
DANH MỤC BẢNG BIỂU viii
DANH MỤC CÁC CHỮ VIẾT TẮT
CHƯƠNG 1 MỞ ĐẦU VÀ TỔNG QUAN ĐỀ TÀI
1.1 Tổng quan
1.2 Mục tiêu đề tài
1.3 Phạm vi đề tài
1.3.1 Chức năng dành cho người dùng:
1.3.2 Chức năng dành cho người quản trị
1.4 Mô tả yêu cầu chức năng
1.4.1 Phân tích yêu cầu của hệ thống
1.4.2 Mô tả hoạt động của hệ thống
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1 NestJS
2.1.1 NestJS là gì?
2.1.2 Cấu trúc của NestJS
2.1.3 Các tính năng của NestJS
2.2 MongoDB
2.2.1 5 2.2.2 Các tính năng của MongoDB
2.3 Kotlin
2.3.1 Koitlin là gì?
Trang 82.3.2 Điểm nổi bật của Kotlin
2.4 Android Studio
2.4.1 Android Studio là gì?
2.4.2 Các tính năng của Android Studio
CHƯƠNG 3 CHƯƠNG 3 – PHÂN TÍCH THIẾT KẾ HỆ THỐNG
3.1 Yêu cầu chức năng
3.1.1 Đối với người dùng
3.1.2 Đối với quản lý
3.1 Cài đặt thực nghiệm
CHƯƠNG 4 HIỆN THỰC
4.1 Cấu hình phần cứng, phần mềm
4.2 Giao diện của hệ thống
TÀI LIỆU THAM KHẢO
Trang 9Hình 2.1: Scaled Dot-Product Attention
Trang 10DANH MỤC BẢNG BIỂU
Bảng 4.1: Thống kê kiểu thực thể trong tập VLSP 2016
Trang 11BERT Bidirectional Encoder Representations from
Transformers
Trang 12CHƯƠNG 1 MỞ ĐẦU VÀ TỔNG QUAN ĐỀ TÀI
- Dựa vào những tiêu chí trên, cùng với sự góp ý từ thầy bộ môn, nhóm đã chọn đề tài quán lý dự án “Xây đựng ứng dụng chat trực tuyến” Dự án hoàn thành sẽ cung cấp tiện ích chat trực tuyến trên nền tảng mobile, giúp người dùng có thể trao đổi thông tin nhanh chóng trực quan
1.2 Mục tiêu đề tài
Mục tiêu chính của dự án là cung cấp cho sinh viên một nền tảng giao tiếp thuậntiện, nhanh chóng và an toàn Ứng dụng sẽ hỗ trợ các tính năng cơ bản như gửi tin nhắn, tạo nhóm trò chuyện, tìm kiếm bạn bè Đồng thời, chúng tôi cũng muốn tạo ra một môi trường giao tiếp tích cực, thú vị và độc đáo, giúp sinh viêncảm thấy gần gũi và kết nối hơn với nhau
1.3 Phạm vi đề tài
1.3.1 Chức năng dành cho người dùng:
- Giao diện dễ sử dụng và thân thiện, dễ thao tác và sử dụng
- Cho phép khách hàng đăng kí tài khoản
- Chat nhóm và chat cá nhân
- Xem danh sách nhóm chat, danh sách bạn bè
Trang 131.3.2 Chức năng dành cho người quản trị
Ngoài các yêu cầu giống như của khách hàng, thì hệ thống phải đảm bảo những yêu cầu sau:
- Cập nhật được trạng thái hoạt động của người dùng
- Thống kê và tìm kiếm được tất cả người dùng theo số điện thoại
1.4 Mô tả yêu cầu chức năng
1.4.1 Phân tích yêu cầu của hệ thống
- Người dùng có thể thay đổi thông tin cá nhân như hình ảnh, tên, giới tính…
- Người dùng thực hiện chat trên ứng dụng, hệ thống sẽ tiếp nhận tin nhắn và gửi cho đối tượng chỉ định
- Cho phép người dùng gửi tin nhắn, hình ảnh và video
- Người dùng có thể tạo nhóm chat, ghim cuộc trò chuyện
- Từ mô tả trên, có thể đưa ra yêu cầu của hệ thống với hai đối tượng chính tương tác với hệ thống như sau:
Đối với hệ thống:
- Quản lý thông tin của người dùng và thay đổi trạng thái hoạt động
- Tìm kiếm thông tin người dùng dựa trên số điện thoại
Đối với người dùng:
- Tạo tài khoản, xem và chỉnh sửa thông tin cá nhân
- Chat cá nhân hoặc chat nhóm
- Ghim cuộc trò chuyện
- Gửi tin nhắn, hình ảnh và video…
- Xem danh sách bạn bè
Trang 14- Kết bạn bằng số điện thoại.
1.4.2 Mô tả hoạt động của hệ thống
- Người dùng cần phải đăng ký 1 tài khoản gồm số điện thoại và mật khẩu trước khi
sử dùng ứng dụng chat
- Người dùng có thể kết bạn dựa trên số điện thoại, sau khi có bạn bè trong danh sách, người dùng có thể chat với bạn bè của mình
- Thành viên trong hộp thoại chat có thể gửi tin nhắn văn bản, đi kèm với hình ảnh
- Ngoài ra, người dùng có thể tạo group chat để tiện trong việc trao đổi thông tin theo nhóm, với cách thức hoạt động tương tự như chat đơn
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1 NestJS
2.1.1 NestJS là gì?
NestJS là một framework mã nguồn mở để phát triển ứng dụng server-side (backend applications) bằng ngôn ngữ TypeScript hoặc JavaScript Nó được xây dựng trên cơ sở Node.js và sử dụng các khái niệm từ TypeScript để tạo ra một môi trường phát triển hiện đại và mạnh mẽ cho việc xây dựng ứng dụng web và API
Trang 15Mục tiêu chính của NestJS là cung cấp một cấu trúc ứng dụng rõ ràng và dễ quản lý,giúp tăng tính bảo trì và sự tổ chức trong mã nguồn Để đạt được điều này, NestJS triển khai mô hình kiến trúc lõi (core architecture) dựa trên các nguyên tắc của Angular, đặc biệt là sử dụng Dependency Injection (DI) và Modules (Các module).
2.1.2 Cấu trúc của NestJS
NestJS được xây dựng từ nhiều yếu tố khác nhau, tuy nhiên quan trọng nhất là bathành phần chính sau:
Modules
Modules: được sử dụng để tổ chức code và chia các tính năng thành các đơn vị cóthể tái sử dụng hợp lý Các tệp TypeScript được nhóm bằng Decorator “@Module”.Decorator “@Module” cung cấp siêu dữ liệu cho NestJS giúp nó xác định các thànhphần, bộ điều khiển hay những tài nguyên khác để sắp xếp cấu trúc ứng dụng khoahọc, hiệu quả
Providers
Một thành phần không thể thiếu ở NestJS đó là Providers Nó tương tự như mộtdịch vụ giúp xử lý những tác vụ mang tính phức tạp, logic mà các trình xử lý
Trang 16Controller không thể làm được Providers có thể được tạo và đưa vào Controllershoặc Providers khác.
Controllers
Chức năng chính của Controllers là xử lý các yêu cầu gửi đến và đáp trả lại choclient-side Sau khi nhận được yêu cầu HTTP nó sẽ soạn thảo câu trả lời chính xác,phù hợp nhất để gửi đi Mỗi Controllers sẽ có bộ lộ trình riêng để giúp nó thực hiệntốt các tác vụ khác nhau
2.1.3 Các tính năng của NestJS
NestJS framework được người dùng sử dụng cực kỳ phổ biến bởi nó sở hữu những tính năng hữu ích như:
- Sử dụng TypeScript và cho phép ngôn ngữ lập trình này thích ứng nhanh để đáp ứng mọi thay đổi của JavaScript
- Cài đặt đơn giản, dễ sử dụng, không mất nhiều thời gian để học hỏi, nghiên cứu
- Tăng hiệu suất và dễ dàng phát triển nhờ giao diện dòng lệnh CLI mạnh mẽ
- Nguồn tài liệu đa dạng, phong phú, chi tiết và được duy trì tốt
- Khả năng mở rộng, phát triển và bảo trì cơ sở mã đang hoạt động
- Là mã nguồn mở của Node.js phát triển mạnh mẽ vượt bậc nhất trong vài năm trở lại đây
- Hỗ trợ mô đun giúp các ứng dụng tích hợp các công nghệ và khái niệm phổ biến như Caching, WebSockets, Logging, Validation, TypeORM, Mongoose…
- Được tạo cho Micro-services và Monoliths
2.2 MongoDB
2.2.1 MongoDB là gì?
MongoDB, được biết đến như cơ sở dữ liệu NoSQL phổ biến nhất, là cơ sở dữ liệu định hướng tài liệu mã nguồn mở Thuật ngữ 'NoSQL' có nghĩa là 'không có mối quan hệ' (Non-relational) Điều đó có nghĩa là MongoDB không dựa trên cấu trúc
Trang 17lưu trữ và truy xuất dữ liệu Định dạng lưu trữ này được gọi là BSON (tương tự nhưđịnh dạng JSON).
2.2.2 Các tính năng của MongoDB
Scalability
Trang 18MongoDB mở rộng quy mô theo chiều ngang bằng cách sử dụng sharding (phân vùng dữ liệu trên các máy chủ khác nhau) Dữ liệu được phân vùng thành các khối
dữ liệu bằng “shard key” và các khối dữ liệu này được phân phối đều trên các phân đoạn nằm trên nhiều máy chủ vật lý Ngoài ra, các máy mới có thể được thêm vào
cơ sở dữ liệu đang chạy
Replication and High Availability
MongoDB tăng tính khả dụng của dữ liệu với nhiều bản sao dữ liệu trên các máy chủ khác nhau Bằng cách cung cấp bản dự phòng, nó bảo vệ cơ sở dữ liệu khỏi các lỗi phần cứng Nếu một máy chủ gặp sự cố, dữ liệu có thể được truy xuất dễ dàng từcác máy chủ đang hoạt động khác cũng có dữ liệu tương tự được lưu trữ trên chúng
Aggregation Các hoạt động tổng hợp xử lý các bản ghi dữ liệu và trả về kết quả
tính toán Nó tương tự như mệnh đề GROUPBY trong SQL Một vài biểu thức tổnghợp là tổng, trung bình, tối thiểu, tối đa, v.v
2.3 Kotlin
2.3.1 Koitlin là gì?
Kotlin là ngôn ngữ lập trình mã nguồn mở được phát triển bởi JetBrains và công
bố trên thị trường vào năm 2011 Tương tự như các ngôn ngữ lập trình quen thuộc
C, C++, Java, Kotlin cũng thuộc danh mục ngôn ngữ lập trình kiểu tĩnh Điều nàyđồng nghĩa với việc các biến của ngôn ngữ không cần định nghĩa trước khi sửdụng
Kotlin dành cho Java Virtual Machine , phát hành chính thức phiên bản 1.0 Ngônngữ này chạy trên JVM và có khả năng sử dụng công cụ, thư viện hiện có của Java.Ngược lại, Java cũng có thể sử dụng những item có trong Kotlin Kotlin hiện đượcGoogle sử dụng làm ngôn ngữ lập trình chính thức cho máy ảo Java từ tháng5/2017
2.3.2 Điểm nổi bật của Kotlin
Trang 19Kotlin là một ngôn ngữ đa nền tảng, có thể chạy trên nhiều hệ điều hành nhưAndroid, iOS, Windows, Linux và nhiều hơn nữa Điều này cho phép lập trình viênviết mã một lần và sử dụng lại trên nhiều nền tảng khác nhau
Tương thích với Java
Kotlin hoàn toàn tương thích với Java, điều này có nghĩa là bạn có thể tích hợp mã Java hiện có vào dự án Kotlin của mình mà không gặp vấn đề Vì Kotlin chia sẻ cùng một máy ảo Java (JVM) với Java, nên các thư viện và framework Java có thể được sử dụng trong mã Kotlin
An toàn kiểu dữ liệu
Kotlin cung cấp kiểm tra kiểu tĩnh mạnh mẽ, giúp ngăn chặn lỗi kiểu dữ liệu phổ biến từ quá trình biên dịch Kiểm tra kiểu dữ liệu tĩnh cũng giúp tăng tính tin cậy và hiệu suất của mã
Cú pháp gọn gàng
Kotlin có cú pháp rõ ràng, đơn giản và ngắn gọn hơn so với Java Việc này giúp cải thiện khả năng đọc và hiểu mã, đồng thời làm giảm lượng mã cần viết để thực hiện các tác vụ thông thường
Hỗ trợ chính thức cho Android
Kotlin được công nhận là ngôn ngữ lập trình chính thức cho việc phát triển ứng dụng Android bởi Google vào năm 2017 Điều này đã tạo ra sự lan rộng nhanh chóng của Kotlin trong cộng đồng phát triển Android
Cộng đồng phát triển mạnh mẽ
Trang 20Kotlin có một cộng đồng phát triển lớn và năng động, với nhiều tài liệu, ví dụ và thư viện khác nhau Điều này giúp lập trình viên tiếp cận thông tin hữu ích và nhận được hỗ trợ từ cộng đồng khi gặp vấn đề.
2.4 Android Studio
2.4.1 Android Studio là gì?
Android Studio là môi trường tích hợp IDE* để viết code và phát triển ứng dụngtrên nền tảng hệ điều hành Android, dành cho Google Android Development được
ra mắt vào ngày 16 tháng 5 năm 2013, trong sự kiện I/O 2013 của Google
Android Studio chứa tất cả các công cụ để hỗ trợ việc phát hành ứng dụng Androidnhư: thiết kế, kiểm tra, gỡ lỗi và cấu hình ứng dụng Android Studio sửdụng Gradle để quản lý dự án của bạn
IDE viết tắt của Integrated Development Environment, được gọi là “Môi trườngthiết kế hợp nhất" hay "Môi trường gỡ lỗi hợp nhất" (tiếng Anh: IntegratedDebugging Environment) là một loại phần mềm máy tính có công dụng giúp đỡ cáclập trình viên trong việc phát triển phần mềm
Trang 21nền tảng ưa thích (Windows, Mac OS X hoặc Linux) từ trang web dành cho nhàphát triển Android Android Studio có thể hỗ trợ phát triển và thử nghiệm ứng dụngcủa bạn trên thiết bị thực hoặc trình giả lập.
2.4.2 Các tính năng của Android Studio
Chạy ứng dụng tức thì
Công nghệ này tích hợp hỗ trợ các thay đổi được thực hiện trong quá trình phát triểnứng dụng và hỗ trợ người dùng chạy thử ngay lập tức mà không mất thời gian để xây dựng lại APK và cài đặt
Bộ cục ứng dụng trực quan
Giao diện chỉnh sửa và phát triển xây dựng bố cục một cách nhanh chóng bằng cácthao tác kéo thả nhanh chóng Bản xem trước các ứng dụng có thể xem được trênmàn hình và thay đổi tương ứng với các kích thước động Điều này sẽ làm cho quátrình thử nghiệm ứng dụng dễ dàng và toàn diện hơn
Trình mô phỏng nhanh
Trang 22Android Studio có một tính năng mô phỏng hiển thị giống như điện thoại Android
để kiểm tra các ứng dụng đang trông như thế nào trong các thiết bị vật lý
Nó mang lại trải nghiệm thời gian thực cho các ứng dụng Android, cho phép bạnkiểm tra các ứng dụng của mình nhanh hơn trên các thiết bị cấu hình khác nhaunhư máy tính bảng, điện thoại Đồng thời, Android Studio sẽ hỗ trợ vòng đời pháttriển ứng dụng của mình ngắn và hiệu quả hơn
Trình chỉnh sửa mã code thông minh
Android Studio cung cấp cho bạn trình chỉnh sửa mã code thông minh và nhanh chóng Các mã gợi ý với các thư viện có sẵn nhằm tăng tốc độ viết mã và độ chính xác Các đoạn mã gợi ý sẽ giúp bạn hoàn thành trước và phân tích dữ liệu cũ của bạn trong quá trình xây dựng ứng dụng
Xây dựng ứng dụng cho tất cả thiết bị
Android Studio xây dựng các ứng dụng cho mọi kích thước màn hình, cho các thiết
bị đeo và trên cả các thiết bị giả lập với độ phân giải và kích thước màn hình khác nhau Nó cũng có thể giả lập được các loại tính năng khác nhau, mà phần cứng thực
sự chưa có như theo dõi vị trí GPS, cảm ứng đa điểm
Trang 23Android Studio giúp mang lại trải nghiệm thời gian thực với phát triển dự án dựa trên IOT với các nâng cấp trong ứng dụng.
Kết nối Firebase giúp tạo các bản cập nhật trực tiếp và cung cấp kết nối với cơ sở
dữ liệu được cập nhật liên tục Để có được các ứng dụng chất lượng cao, các nhà phát triển sử dụng kết nối Firebase, nó giúp xây dựng cơ sở hạ tầng để mở rộng xây dựng ứng dụng
Hỗ trợ KOTLIN
Kotlin là ngôn ngữ chính thức chỉ dành cho Android Nó là một ngôn ngữ không có bất kỳ hạn chế mới và có nhiều lợi thế cho quá trình phát triển ứng dụng Tính năng tuyệt vời của Kotlin là khi chạy các ứng dụng mà không có bất kỳ sự xáo trộn nào trong các phiên bản Android cũ hơn, cũng như không có vấn đề gì với các phiên bản Android cụ thể
Xem trước màu sắc, chạy thử
Android Studio giúp xem trước phần mã XML trong bản xem trước để các nhà phát triển ứng dụng biết có lỗi hay không trước khi khởi chạy ứng dụng Tính năng này
Trang 24cung cấp chức năng mạnh mẽ và các tính năng nâng cao về kéo và thả hoặc thay đổikích thước ứng dụng.
Kho lưu trữ Maven
Trong Android Studio, có thể thực hiện tích hợp Maven cùng với kho lưu trữ các tính năng tích hợp của nó, bên trong các thư viện hỗ trợ trình quản lý SDK của IDE được sử dụng Đó là một loại kho lưu trữ có một thư mục chứa nhiều tệp jar khác nhau như dự án jar cùng các plugin
CHƯƠNG 3 – PHÂN TÍCH THIẾT KẾ HỆ THỐNG
3.1 Yêu cầu chức năng
3.1.1 Đối với người dùng
- Chức năng đăng ký, đăng nhập, đăng xuất
- Chức năng xem danh sách cuộc trò chuyện
- Chức năng tạo cuộc trò chuyện cá nhân, cuộc trò chuyện nhóm
- Chức năng xem chi tiết cuộc trò chuyện
Trang 25phản hồi kết bạn
- Chức năng tìm kiếm bằng số điện thoại
- Chức năng chat tin nhắn, hình ảnh, video
- Chức năng xem thông tin cá nhân, thông tin người khác
- Chức năng ghim cuộc trò chuyện
- Chức năng xóa cuộc trò chuyện
- Chức năng thêm thành viên, xóa thành viên, xem danh sách thành viên
- Chức năng chuyển quyền trường nhóm, phó nhóm, member
- Chức năng rời nhóm, giải tán nhóm
3.1.2 Đối với quản lý
- Chức năng đăng ký, đăng nhập, đăng xuất
- Chức năng quản lý user (update trạng thái user)
3.2 Phân tích yêu cầu
3.2.1 Sơ đồ Usecase
Trang 26Hình: Usecase tổng quát
Hình: Usecase quản lý người dùng