Tải bản đầy đủ (.docx) (37 trang)

đồ án ỨNG DỤNG TRỢ LÝ THÚ CƯNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.04 MB, 37 trang )

ĐẠ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ô!


Nhận xét của giảng viên

……………………………………………………………
…………………………………………………………………………
……………
……………………………………………………………
…………………………………………………………………………
……………
……………………………………………………………
…………………………………………………………………………
……………
……………………………………………………………
…………………………………………………………………………
……………
……………………………………………………………
…………………………………………………………………………

……………
……………………………………………………………
…………………………………………………………………………
……………
……………………………………………………………
…………………………………………………………………………
……………


……………………………………………………………
…………………………………………………………………………
……………
……………………………………………………………
…………………………………………………………………………
……………


Mục Lục
Chương 1. Giới thiệu đề tài

6

1.1. Dẫn nhập

6

1.2. Tổng quan các vấn đề chính

6


1.2.1. Bài tốn

6

1.2.2. Giới hạn phạm vi

6

1.2.3. Các nội dung nghiên cứu thực hiện

6

1.2.4. Kết quả hướng tới

7

Chương 2. Các kiến thức công nghệ, nền tảng
2.1. Nodejs và framework Expressjs

8
8

a) Nodejs

8

b) Framework Expressjs

8


2.2. Mongodb

8

a) NoSql

8

b) Mongodb

9

2.3. Reactjs

9

2.4. GraphQL

10

2.5. Flutter

10

Chương 3. Xây dựng ứng dụng

12

3.1. Tổng quan khảo sát ứng dụng liên quan


12

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

12

3.2.1. Usecase

12

a) Tổng quát

12

b) Đăng nhập hệ thống

13

c) Quản lý người dùng

13

d) Quản lý thú cưng

14

e) Quản lý bài đăng

14


f) Quản lý các bài báo (Wiki)

15


3.2.2. Mô tả usecase

15

a) Actor

15

b) Usecase

15

3.2.3. Thiết kế database

19

a) Sơ đồ ERD

19

b) Danh sách các bảng

20

c) Mô tả chi tiết các bảng


20

3.2.4. Mơ tả giao diện

25

3.2.5. Các áp dụng chính của Framework Expressjs vào đề tài

34

Chương 4: Thử nghiệm, đánh giá

36

4.1. Môi trường thử nghiệm

36

4.2. Kết quả thử nghiệm

36

4.3. Đánh giá kết quả sản phẩm

36

Chương 5: Kết luận và hướng phát triển

37


5.1. Kết quả đạt được

37

5.2. Hạn chế và hướng phát triển

37

5.2.1. Hạn chế

37

5.2.2. Hướng phát triển

37


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
Alternative Flow(s)
Usecase

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
● Nếu xảy ra lỗi, thông báo
Quản lý thú cưng


Mô tả
Main Flow

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

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

● Đ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

● Đ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)

● 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

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ả

● 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


Main Flow

● 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)

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

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
● Nhấn nút đồng ý


Alternative Flow(s)
Usecase
Mô tả
Main Flow

● 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.


×