ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
-----🙚🙚🙚🙚🙚-----
BÁO CÁO ĐỒ ÁN 2
SE122.L11
ĐỀ TÀI:
ỨNG DỤNG TRỢ LÝ THÚ CƯNG
Giảng viên hướng dẫn:
ThS. Huỳnh Hồ Thị Mộng Trinh
Sinh viên thực hiện:
NGUYỄN QUANG HUY
17520583
PHẠM PHÚC KHẢI
17520081
Tp. Hồ Chí Minh, 22/01/2020
Lời cảm ơn
Đầu tiên, nhóm tác giả xin gửi lời cảm ơn chân thành đến
tập thể quý Thầy Cô Trường Đại học Công nghệ thông tin – Đại học
Quốc gia TP.HCM và quý Thầy Cô khoa Công nghệ phần mềm đã
giúp cho nhóm tác giả có những kiến thức cơ bản làm nền tảng để
thực hiện đề tài này.
Đặc biệt, nhóm tác giả xin gửi lời cảm ơn và lịng biết ơn
sâu sắc nhất tới cô Huỳnh Hồ Thị Mộng Trinh (Giảng viên môn đồ án
2). Cô đã hướng dẫn, hỗ trợ nhóm hồn thành đồ án này.
Trong thời gian một học kỳ thực hiện đề tài, nhóm tác giả
đã vận dụng những kiến thức nền tảng đã tích lũy đồng thời kết hợp
với việc học hỏi và nghiên cứu những kiến thức mới. Từ đó, nhóm
vận dụng tối đa những gì đã thu thập được để hồn thành một báo cáo
đồ án tốt nhất. Tuy nhiên, trong quá trình thực hiện, nhóm tác giả
khơng tránh khỏi những thiếu sót. Chính vì vậy, nhóm tác giả rất
mong nhận được những sự góp ý từ phía các Thầy Cơ nhằm hồn
thiện những kiến thức mà nhóm tác giả đã học tập và là hành trang để
nhóm tác giả thực hiện tiếp các đề tài khác trong tương lai.
Xin chân thành cảm ơn các quý Thầy Cô!
Mục Lục
Chương 1. Giới thiệu đề tài
1.1. Dẫn nhập
Xã hội ngày càng phát triển, nhu cầu của con người ngày càng được đáp
ứng đầy đủ. Tuy nhiên khoảng cách giữa con người với con người dần bị thu hẹp
do sự phát triển đó của xã hội. Những người cơ đơn tìm đến cho mình những loại
động vật dễ thương để bầu bạn. Từ đó phong trào ni thú cưng ngày càng được
mở rộng từ thành thị cho đến nông thôn. Những chiếc Pet dễ thương ngồi bầu bạn
cịn đem đến nhiều niềm vui cho Sen. Tuy nhiên làm thế nào để chăm sóc thật tốt
cho thú cưng của chúng ta. Nhận thấy được yêu cầu rất khách quan trên cùng với
sự yêu thương với các boss nên chúng em đã chọn và thực hiện đề tài.
1.2. Tổng quan các vấn đề chính
1.2.1. Bài tốn
Bài tốn đặt ra là xây dựng ứng dụng trợ lý thú cưng giúp quản lí thú cưng như
cân nặng, lịch tiêm chủng, …. Ngồi ra cịn giúp thú cưng hẹn hò hay đăng bài
sống ảo.
1.2.2. Giới hạn phạm vi
Hệ thống được xây dựng đáp ứng được những yêu cầu dưới đây:
● Đăng nhập, xác thực người dùng
● Quản lý người dùng
● Quản lý thú cưng (PET)
● Quản lý mạng xã hội thú cưng
● Quản lý các bài Wiki, kinh nghiệm nuôi, các bài báo khoa
học.
1.2.3. Các nội dung nghiên cứu thực hiện
● Học Nodejs và framework Expressjs: Tìm event loop, routing
và xử lý bất đồng trong Expressjs.
● Tìm hiểu Graphql và apollo server để viết API.
● Tìm hiểu React và xây dựng DashBoard cho ứng dụng.
● Tìm hiểu Flutter để xây dựng app cho ứng dụng.
1.2.4. Kết quả hướng tới
Hướng tới việc xây dựng app mobile đa nền tảng đồng thời có dashboard là
web quản lí ứng dụng. Khai thác triệt để lợi thế của nền tảng nodejs. Đồng
thời tạo ra ứng dụng có khả năng dễ dàng nâng cấp sau này.
Chương 2. Các kiến thức công nghệ, nền
tảng
2.1. Nodejs và framework Expressjs
a) Nodejs
Node.js là một JavaScript runtime được build dựa trên Chrome’s V8
JavaScript engine. Node.js sử dụng mơ hình event-driven, non-blocking I/O khiến
nó trở nên nhẹ và hiệu quả.
b) Framework Expressjs
Expressjs là một web framework mã nguồn mở dành cho Nodejs, được thiết
kế để xây dựng web application và API. Express là framework Nodejs phổ biến
nhất.
2.2. Mongodb
a) NoSql
-
NoSQL là 1 dạng CSDL mã nguồn mở và được viết tắt bởi: NoneRelational SQL hay có nơi thường gọi là Not-Only SQL.
-
NoSQL được phát triển trên Javascript Framework với kiểu dữ liệu là
JSON và dạng dữ liệu theo kiểu key và value.
-
NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm và thiếu xót
cũng như hạn chế của mơ hình dữ liệu quan hệ RDBMS (Relational
Database Management System - Hệ quản trị cơ sở dữ liệu quan hệ) về
tốc độ, tính năng, khả năng mở rộng,...
-
Với NoSQL bạn có thể mở rộng dữ liệu mà không lo tới những việc như
tạo khóa ngoại, khóa chính, kiểm tra ràng buộc .v.v ...
-
NoSQL bỏ qua tính tồn vẹn của dữ liệu và transaction để đổi lấy hiệu
suất nhanh và khả năng mở rộng.
-
NoSQL được sử dụng ở rất nhiều công ty, tập đồn lớn, ví dụ như
FaceBook sử dụng Cassandra do FaceBook phát triển, Google phát triển
và sử dụng BigTable,...
b) Mongodb
-
MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở, là CSDL
thuộc NoSql và được hàng triệu người sử dụng.
-
MongoDB là một database hướng tài liệu (document), các dữ liệu được
lưu trữ trong document kiểu JSON thay vì dạng bảng như CSDL quan
hệ nên truy vấn sẽ rất nhanh.
-
Với CSDL quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan
hệ (như MySQL hay SQL Server...) sử dụng các bảng để lưu dữ liệu thì
với MongoDB chúng ta sẽ dùng khái niệm là collection thay vì bảng
-
So với RDBMS thì trong MongoDB collection ứng với table, còn
document sẽ ứng với row , MongoDB sẽ dùng các document thay cho
row trong RDBMS.
-
Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép
các dữ liệu lưu trữ không cần tuân theo một cấu trúc nhất định.
-
Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh
thông qua ngôn ngữ truy vấn MongoDB
-
2.3. Reactjs
React là một thư viện Javascript nhằm đơn giản hóa việc phát triển giao
diện trực quan được phát triển tại facebook và phát hành vào năm 2013, React
được sử dụng làm thư viện font-end chính của facebook và instagram từ khi nó ra
mắt. Hiện nay số lượng ứng dụng React đang tăng lên rất nhanh.
Mục tiêu chính của nó là làm cho chúng ta dễ dàng hình dung về một giao
diện và trạng thái của nó tại bất kỳ thời điểm nào, bằng cách chia UI thành một bộ
các “Component”.
React được sử dụng để xây dựng các ứng dụng single page
application.
2.4. GraphQL
GraphQL là một Graph Query Language được dành cho API. Nó được phát
triển bởi Facebook và hiện tại nó được duy trì bởi rất nhiều cơng ty lớn, và
mọi cá nhân trên khắp thế giới. GraphQL từ khi ra đời đã gần như thay thế
hoàn toàn REST bởi sự hiệu quả, mạnh mẽ và linh hoạt hơn rất nhiều.
-
Quan phân tích, chúng tơi lựa chọn noSQL database cụ thể là mongoDB
để triển khai dự án này bởi những ưu điểm sau:
•
Document oriented
•
Hiệu suất cao
•
Tính sẵn sàng cao – Nhân rộng
•
Khả năng mở rộng cao – Sharding
•
Năng động – Khơng có lược đồ cứng nhắc.
•
Linh hoạt – thêm / xóa trường có ít hoặc khơng ảnh hưởng đến ứng
dụng
•
Dữ liệu khơng đồng nhất
•
Khơng joins
•
Phân phối được
•
Biểu diễn dữ liệu trong JSON hoặc BSON
•
Hỗ trợ khơng gian địa lý (Geospatial)
•
Tích hợp dễ dàng với BigData Hadoop
•
Ngơn ngữ truy vấn dựa trên tài liệu mạnh mẽ như SQL
•
Các bản phân phối cloud như AWS, Microsoft, RedHat, dotCloud và
SoftLayer, v.v … Trên thực tế, MongoDB được xây dựng cho cloud. Kiến
trúc mở rộng quy mơ tự nhiên của nó, được kích hoạt bởi sharding, liên kết
tốt với quy mô và sự nhanh nhẹn có được nhờ điện tốn đám mây.
2.5. Flutter
Để lập trình ứng dụng (app), chúng tôi lựa chọn Flutter là nền tảng phát
triển ứng dụng đa nền tảng cho iOS và Android do Google phát triển.
Tại sao lại là flutter?
-
Tính nhanh chóng: Tính năng hot reload của nó giúp bạn nhanh
chóng và dễ dàng thử nghiệm, xây dựng giao diện người dùng, thêm tính
năng và sửa lỗi nhanh hơn. Trải nghiệm tải lại lần thứ hai, mà không làm
mất trạng thái, trên emulator, simulator và device cho iOS và Android.
-
Tính thẩm mĩ: Thỏa mãn người dùng của bạn với các widget built-in
đẹp mắt theo Material Design và Cupertino (iOS-flavor), các API chuyển
động phong phú, scroll tự nhiên mượt mà và tự nhận thức được nền tảng.
-
Tính chính thống: Làm cho ứng dụng của bạn trở nên sống động với
API của platform, SDK của bên thứ ba và native code. Nó cho phép bạn sử
dụng lại mã Java, Swift và ObjC hiện tại của mình và truy cập các tính
năng và SDK native trên iOS và Android.
-
Tính thống nhất: Flutter có các cơng cụ và thư viện để giúp bạn dễ
dàng đưa ý tưởng của mình vào cuộc sống trên iOS và Android. Nếu bạn
chưa có kinh nghiệm phát triển trên thiết bị di động, thì Flutter là một cách
dễ dàng và nhanh chóng để xây dựng các ứng dụng di động tuyệt đẹp. Nếu
bạn là một nhà phát triển iOS hoặc Android có kinh nghiệm, bạn có thể sử
dụng Flutter cho các View của bạn và tận dụng nhiều code Java / Kotlin /
ObjC / Swift hiện có của bạn.
Chương 3. Xây dựng ứng dụng
3.1. Tổng quan khảo sát ứng dụng liên quan
Pet Assistant, Pet Diary Assistant, Maddie's Pet Assistant
3.2. Xác định yêu cầu
3.2.1. Usecase
a) Tổng quát
b) Đăng nhập hệ thống
c) Quản lý người dùng
d) Quản lý thú cưng
e) Quản lý bài đăng
f) Quản lý các bài báo (Wiki)
3.2.2. Mô tả usecase
a) Actor
● Người quản lý : Quản lí người dùng, các bài viết hệ thống,…
● Người dùng: Quản lí PET, quản lí các bài đăng của PET…
b) Usecase
Usecase
Mơ tả
Main Flow
Đăng nhập
Đăng nhập người dùng vào hệ thống
● Người dùng nhập email và mật khẩu
● Nhấn nút đăng nhập
● Hệ thống xác thực thông tin đăng nhập
● Nếu thông tin đăng nhập đúng thì cho phép đăng
nhập người dùng vào hệ thống
● Nếu thơng tin đăng nhập sai thì thơng báo lỗi ra
Alternative
màn hình
● Nếu nhập thiếu email hoặc mật khẩu, thơng báo lỗi
Flow(s)
Usecase
Mô tả
Main Flow
Quản lý người dùng
Quản lý tất cả thông tin từ người dùng
● Chọn chức năng muốn sử dụng
● Điều hướng đến màn hình chức năng tương ứng
Alternative Flow(s)
Usecase
Mô tả
Main Flow
Quản lý thú cưng
Quản lý các thông tin thú cưng
● Chọn chức năng muốn sử dụng
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Điều hướng đến màn hình chức năng tương ứng
● Nếu hệ thống xảy ra lỗi thì hiển thị thông báo
Quản lý các bài đăng (post)
Quản lý các bài post
● Chọn chức năng muốn sử dụng
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Điều hướng đến màn hình chức năng tương ứng
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Quản lí các bài báo (Wiki)
Quản lí nội dung các bài báo
● Chọn chức năng muốn sử dụng
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Nếu xảy ra lỗi, thông báo
● Điều hướng đến màn hình chức năng tương ứng
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Thêm thú cưng
Tạo thơng tin thú cưng
● Nhấn nút tạo thú cưng
● Nhập thông tin thú cưng
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Sửa thú cưng
Sửa thông tin thú cưng
● Chọn thú cưng
● Nhấn nút sửa thú cưng
● Nhập thông tin thú cưng muốn sửa
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Tìm kiếm thú cưng
Tìm kiếm thú cưng
● Nhập các thơng tin tìm kiếm vào các mục tương
ứng
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Nhấn nút tìm kiếm
● Nếu hệ thống xảy ra lỗi thì hiển thị thông báo
Thêm bài đăng
Tạo thông tin bài đăng
● Nhấn nút tạo bài viết
● Nhập thông tin bài viết
Alternative Flow(s)
Usecase
Mô tả
Pre - Conditions
Post - Conditions
Main Flow
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Xóa bài đăng
Xóa thơng tin bài đăng
Bài đăng đã được tạo
● Chọn bài viết
● Nhấn nút xóa
Alternative Flow(s)
Usecase
Mơ tả
Main Flow
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Sửa bài đăng
Sửa thơng tin bài đăng
● Chọn bài đăng
● Nhấn nút sửa bài đăng
● Nhập thông tin muốn sửa
Alternative Flow(s)
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Usecase
Mô tả
Main Flow
Thêm bài báo (Wiki)
Tạo thông tin bài báo
● Nhấn nút tạo bài báo
● Nhập thông tin bài
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Xóa bài báo (Wiki)
Xóa thơng tin bài báo
● Chọn bài báo
● Nhấn nút xóa
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Sửa bài báo (Wiki)
Sửa thông tin bài báo
● Chọn bài báo
● Nhấn nút sửa bài báo
● Nhập thông tin muốn sửa
Alternative Flow(s)
Usecase
Mô tả
Main Flow
● Nhấn nút đồng ý
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
Tìm kiếm bài báo
Tìm kiếm bài báo
● Nhập các thơng tin tìm kiếm vào các mục tương
ứng
Alternative Flow(s)
● Nhấn nút tìm kiếm
● Nếu hệ thống xảy ra lỗi thì hiển thị thơng báo
3.2.3. Thiết kế database
a) Sơ đồ ERD
b) Danh sách các bảng
STT
Tên bảng
Ý nghĩa
1
users
Chứa thông tin của “Sen”
2
pets
Chứa thông tin của “Boss”
3
races
Lưu thông tin giống của Boss
4
postcategories
Lưu trữ các bài báo
5
postcategories
Chứa thông tin chủ đề của các bài báo
6
typeofwikis
Loại của bài báo
7
Post
Bài đăng trên mạng xã hội của “Sen”
c) Mô tả chi tiết các bảng
● Bảng users (người dùng hệ thống)
STT
Tên thuộc tính
Kiểu dữ liệu
Ý nghĩa
1
_id
objectId
Mã tài khoản
2
uid
string
Mã định danh xác minh firebase
3
password
string
Mật khẩu tài khoản được mã hóa
4
role
string
Vai trị trong hệ thống
5
name
string
Tên “Sen”
6
phone
string
Số điện thoại “Sen”
7
email
string
Địa chỉ mail
8
follows
string[]
Danh sách người theo dõi
9
createdAt
date
Ngày tạo
10
updatdAt
date
Ngày cập nhật gần đây
● Bảng pets
STT
Tên thuộc tính
Kiểu dữ liệu
Ý nghĩa
1
_id
objectId
Mã “Boss”
2
name
string
Tên “Boss”
3
raceId
objectId
Mã giống
4
birthday
date
Ngày sinh của “Boss”
5
gender
string
Giới tính
6
character
string
Tính cách của “Boss”
7
userId
string
“Sen” của “Boss”
8
images
string[]
Ảnh của “Boss”
9
videos
string[]
Video của “Boss”
10
updatdAt
date
Ngày cập nhật
11
createAt
date
Ngày tạo
12
avatar
string
Ảnh đại diện của Boss
13
coverImage
string
Ảnh cover
● Bảng races
STT
Tên thuộc tính
Kiểu dữ liệu
Ý nghĩa
1
_id
objectId
Mã giống của pet
2
name
string
Tên giống
3
image
string
Ảnh nhận diện
4
type
string
Loại PET
5
createdAt
datetime
Ngày tạo
6
updatdAt
datetime
Ngày cập nhật gần đây
● Bảng typeofwikis
STT
Tên thuộc tính
Kiểu dữ liệu
Ý nghĩa
1
_id
objectId
Mã loại wiki
2
name
string
Tên loại wiki
3
createdAt
datetime
Ngày tạo
4
updatdAt
datetime
Ngày cập nhật gần đây
● Bảng wikicategories
STT
Tên thuộc tính
Kiểu dữ liệu
Ý nghĩa
1
_id
title
Mã phân loại bài báo
2
title
string
Tiêu đề phân loại bài báo
3
image
string
Ảnh
4
typeOfWikiId
objectId
Mã loại Wiki
5
createdAt
date
Ngày tạo
6
updatdAt
date
Ngày cập nhật gần đây
● Bảng postcategories
STT
Tên thuộc tính
Kiểu dữ liệu
Ý nghĩa
1
_id
objectId
Mã bài post wiki
2
title
string
Tiêu đề bài báo
3
content
string
Nội dung bài báo
4
link
string
Đường dẫn bài báo
5
wikiCategoryId
objectId
Mã phân loại bài báo
6
like
int
Số lượng lượt thích
7
seen
int
Số lượng lượt xem
8
share
int
Số lượng lượt chia sẽ
9
createdAt
datetime
Ngày tạo
10
updatedAt
datetime
Ngày cập nhật gần đây
3.2.4. Mô tả giao diện
a) Giao diện đăng nhập hệ thống
Người dùng cần tiến đến giao diện đăng ký tài khoản nếu chưa có tài khoản
đăng nhập.
Hoặc đăng nhập nếu đã có tài khoản
Người dùng gõ chính xác email và password để đăng nhập và có thể
tìm lại mật khẩu khi qn.
b) Giao diện tab Story