lOMoARcPSD|15978022
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &s
TRUYỀN THÔNG VIỆT-HÀN
Khoa Khoa Học Máy Tính
ĐỒ ÁN CƠ SỞ 3
XÂY DỰNG ỨNG DỤNG GHI CHÚ
CÔNG VIỆC
Sinh viên thực hiện:
LÊ NGUYỄN QUANG VINH
Lớp:
20DA
Mã sinh viên:
20IT494
Giảng viên hướng dẫn: ThS. Trần Đình Sơn
Đà Nẵng, tháng 05 năm 2022
lOMoARcPSD|15978022
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYỀN THÔNG VIỆT-HÀN
Khoa Khoa Học Máy Tính
ĐỒ ÁN CƠ SỞ 3
XÂY DỰNG ỨNG DỤNG GHI CHÚ
CÔNG VIỆC
Sinh viên thực hiện:
LÊ NGUYỄN QUANG VINH
Lớp:
20DA
Mã sinh viên:
20IT494
Giảng viên hướng dẫn: ThS. Trần Đình Sơn
Đà Nẵng, tháng 05 năm 2022
lOMoARcPSD|15978022
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………
Giảng viên
ThS. Trần Đình Sơn
lOMoARcPSD|15978022
LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn sâu sắc đến quý thầy cô của Trường Đại học
Công nghệ Thông tin và Truyền thông Việt-Hàn nói chung và quý thầy cô của khoa
Khoa học máy tính nói riêng đã tận tình truyền đạt kiến thức trong bốn học kì vừa qua.
Nhờ sự chỉ dạy nhiệt tình từ quý thầy cô, em đã tích luỹ được vốn kiến thức cần thiết
cho các học kì tiếp theo và công việc trong tương lai.
Bên cạnh đó, em muốn gửi lời cảm ơn đặc biệt đến thầy – ThS. Trần Đình Sơn.
Thầy đã theo sát quá trình làm đồ án của chúng em trong suốt hơn hai tháng. Thầy
luôn nhắc nhở về các chi tiết, lỗi sai nhỏ trong phần đề cương chi tiết hay trong sản
phẩm đồ án của chúng em trong các buổi gặp mặt hướng dẫn để từ đó chúng em hoàn
thiện hơn sản phẩm của mình. Thầy cũng rất nhiệt tình giải đáp những thắc mắc của
chúng em khi gặp khó khăn.
Em xin chân thành cảm ơn!
Sinh viên
Lê Nguyễn Quang Vinh
lOMoARcPSD|15978022
MỤC LỤC
MỞ ĐẦU...........................................................................1
1. Giới thiệu........................................................................1
2. Mục tiêu của đề tài............................................................1
3. Nội dung và kế hoạch thực hiện............................................1
4. Bố cục báo cáo.............................................................2
Chương 1. TỔNG QUAN VỀ CÔNG CỤ, CÔNG
NGHỆ XÂY DỰNG ỨNG DỤNG.........................................3
1. Ngôn ngữ lập trình Java.....................................................3
1.1. Giới thiệu...................................................................3
1.2. Đặc điểm của ngôn ngữ lập trình Java.............................3
1.2.1. Tương tự C++, hướng đối tượng hoàn toàn......................3
1.3. Máy ảo Java...............................................................6
1.4. Các phiên bản của Java.................................................7
1.5. Các thành phần của Java SE Platform.............................7
2. XML..............................................................................7
2.1. XML là gì?.................................................................7
2.2. Ưu và nhược điểm của XML..........................................8
2.3. So sánh XML và HTML................................................8
2.4. Cú pháp của XML.......................................................9
3. Phần mềm Android Studio................................................13
3.1. Giới thiệu.................................................................13
3.2. Lịch sử hình thành.....................................................13
4. Room Database...............................................................13
lOMoARcPSD|15978022
4.1. Giới thiệu.................................................................13
4.2. Đặc điểm..................................................................13
4.3. Các thành phần chính trong Room Database...................14
4.4. DAO (Data Access Objects)..........................................14
Chương 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
ỨNG DỤNG..........................................................................15
1. Yêu cầu đối với một ứng dụng di động...............................15
1.1. Chức năng..............................................................15
1.2. Thiết kế đơn giản và thẩm mỹ.....................................15
1.3. Giải quyết vấn đề của người dùng................................15
1.4. Tính nhất quán........................................................16
1.5. Trải nghiệm người dùng............................................16
2. Thiết kế ứng dụng.........................................................17
Chương 3. XÂY DỰNG ỨNG DỤNG...........................18
1. Tổng quan về mô hình MVVM.........................................18
1.1. Giới thiệu...............................................................18
1.2. MVVM (Model-View-ViewModel) được hiểu như thế nào.18
2. Layout........................................................................19
2.1. Relative Layout.......................................................19
2.2. Linear Layout.........................................................21
2.2.1.
Thuộc tính Gravity....................................................22
2.2.2.
Thuộc tính trọng số...................................................22
3. Quá trình thiết kế giao diện.............................................22
3.1. Thiết kế màn hình bắt đầu (Splash Screen)....................22
lOMoARcPSD|15978022
3.2. Thiết kế màn hình chính............................................22
3.3. Thiết kế màn hình tạo ghi chú mới...............................23
3.4. Thiết kế màn hình xoá ghi chú....................................23
3.5. Thiết kế màn hình tìm kiếm ghi chú.............................24
4. Xây dựng chức năng của ứng dụng................................25
4.1. Tạo Model cho ứng dụng...........................................25
4.2. Tạo ViewModel........................................................25
4.3. DAO...................................................................... 25
4.4. Xây dựng cơ sở dữ liệu..............................................26
4.5. Chức năng tạo ghi chú mới.........................................26
4.6. Chức năng sửa ghi chú..............................................27
4.7. Chức năng xoá ghi chú..............................................27
4.8. Chức năng tìm kiếm ghi chú.......................................28
KẾT LUẬN.....................................................................29
1. Kết quả đạt được..........................................................29
1.1. Về mặt lý thuyết:......................................................29
1.2. Về mặt thực tiễn......................................................29
2. Vấn đề còn tồn tại............................................................29
3. Hướng giải quyết.............................................................29
TÀI LIỆU THAM KHẢO..............................................30
lOMoARcPSD|15978022
DANH MỤC CÁC TỪ VIẾT TẮT
lOMoARcPSD|15978022
DANH MỤC HÌNH VẼ
lOMoARcPSD|15978022
MỞ ĐẦU
1. Giới thiệu
Cuộc sống ngày càng hiện đại, các công việc có khối lượng ngày càng lớn, cộng
thêm các yếu tố gây nhiễu trong cuộc sống hằng ngày dễ khiến cho chúng ta quên đi các
công việc cần làm trong ngày, trong tuần, trong tháng, dẫn đến công việc bị trì trệ, không
đạt hiệu quả. Bên cạnh đó, thói quen ghi lại các công việc cần phải làm sẽ giúp ta có thêm
động lực để hoàn thành công việc như đúng thời hạn đã đặt ra. Vì vậy, ứng dụng ghi chú
công việc của chúng tôi ra đời để giúp các bạn ghi lại những việc cần làm một cách nhanh
chóng và hoàn thành công việc hiệu quả hơn.
2. Mục tiêu của đề tài
- Mục tiêu của đề tài nhằm tạo ra ứng dụng di động để ghi chú lại các công việc
trong ngày, tuần, tháng, giải quyết việc bị quên các công việc cần làm. Bên cạnh đó có thể
đưa ứng dụng lên kho ứng dụng Google Play.
- Nghiên cứu kiến trúc Android.
- Nghiên cứu các thành phần cơ bản trong Android.
- Nghiên cứu cách phát triển ứng dụng trên Android.
3. Nội dung và kế hoạch thực hiện
Thời gian
Công việc
Tuần 1 từ
Khảo sát nhu cầu người dùng và tìm hiểu các công nghệ
21/3 đến 27/3
liên quan (Room Database, mô hình MVVM, ngôn ngữ Java,
thư viện.)
Tuần 2, 3, 4
Thiết kế giao diện ứng dụng bằng XML.
từ 28/3 đến 17/4
Tuần 5, 6, 7
Xây dựng chức năng ứng dụng bằng Java và chạy thử.
từ 18/4 đến 8/5
Tuần 8 từ
Tối ưu giao diện và chức năng.
1
lOMoARcPSD|15978022
9/5 đến 15/5
Tuần 9, 10
từ 16/5 đến 31/5
Chuẩn bị bản báo cáo, slide thuyết trình, chuẩn bị bảo
vệ đồ án.
4. Bố cục báo cáo
Sau phần Mở đầu, báo cáo được trình bày trong ba chương, cụ thể như sau:
Chương 1. Tổng quan về các công cụ xây dựng nên ứng dụng. Trong chương này,
báo cáo trình bày các khái niệm, đặc điểm, tính năng của các công cụ, công nghệ được sử
dụng.
Chương 2. Phân tích thiết kế hệ thống ứng dụng. Nội dung chương bao gồm các
bước phân tích hệ thống từ nhu cầu của người dùng. Từ đó xây dựng nên giao diện và
chức năng phù hợp.
Chương 3. Xây dựng ứng dụng. Chương này tiến hành trình bày các bước xây dựng
giao diện và chức năng của ứng dụng.
Cuối cùng là Kết luận, Tài liệu tham khảo và Phụ lục liên quan đến đề tài.
2
lOMoARcPSD|15978022
Chương 1. TỔNG QUAN VỀ CÔNG CỤ, CÔNG NGHỆ
XÂY DỰNG ỨNG DỤNG
1. Ngôn ngữ lập trình Java
1.1. Giới thiệu
Java là một trong những ngôn ngữ lập trình hướng đối tượng. Nó được sử dụng
trong phát triển phần mềm, trang web, game hay ứng dụng trên các thiết bị di động.
Java được khởi đầu bởi James Gosling và bạn đồng nghiệp ở Sun MicroSystem năm
1991. Ban đầu Java được tạo ra nhằm mục đích viết phần mềm cho các sản phẩm gia
dụng, và có tên là Oak.
Java được phát hành năm 1994, đến năm 2010 được Oracle mua lại từ Sun
MicroSystem.
Java được tạo ra với tiêu chí “Viết (code) một lần, thực thi khắp nơi” (Write Once,
Run Anywhere –WORA). Chương trình phần mềm viết bằng Java có thể chạy trên mọi
nền tảng (platform) khác nhau thông qua một môi trường thực thi với điều kiện có môi
trường thực thi thích hợp hỗ trợ nền tảng đó.
1.2. Đặc điểm của ngôn ngữ lập trình Java
1.2.1. Tương tự C++, hướng đối tượng hoàn toàn
Trong quá trình tạo ra một ngôn ngữ mới phục vụ cho mục đích chạy được trên
nhiều nền tảng, các kỹ sư của Sun MicroSystem muốn tạo ra một ngôn ngữ dễ học và
quen thuộc với đa số người lập trình. Vì vậy họ đã sử dụng lại các cú pháp của C và C++.
Tuy nhiên, trong Java thao tác với con trỏ bị lược bỏ nhằm đảo bảo tính an toàn và
dễ sử dụng hơn. Các thao tác overload, goto hay các cấu trúc như struct và union cũng
được loại bỏ khỏi Java.
1.2.2. Độc lập phần cứng và hệ điều hành
3
lOMoARcPSD|15978022
Một chương trình viết bằng ngôn ngữ Java có thể chạy tốt ở nhiều môi trường khác
nhau. Gọi là khả năng “cross-platform”. Khả năng độc lập phần cứng và hệ điều hành
được thể hiện ở 2 cấp độ là cấp độ mã nguồn và cấp độ nhị phân.
Ở cấp độ mã nguồn: Kiểu dữ liệu trong Java nhất quán cho tất cả các hệ điều hành
và phần cứng khác nhau. Java có riêng một bộ thư viện để hỗ trợ vấn đề này. Chương
trình viết bằng ngôn ngữ Java có thể biên dịch trên nhiều loại máy khác nhau mà không
gặp lỗi.
Ở cấp độ nhị phân: Một mã biên dịch có thể chạy trên nhiều nền tảng khác nhau
mà không cần dịch lại mã nguồn. Tuy nhiên cần có Java Virtual Machine để thông dịch
đoạn mã này.
1.2.3. Ngôn ngữ thông dịch
Ngôn ngữ lập trình thường được chia ra làm 2 loại (tùy theo các hiện thực hóa
ngôn ngữ đó) là ngôn ngữ thông dịch và ngôn ngữ biên dịch.
- Thông dịch (Interpreter): Nó dịch từng lệnh rồi chạy từng lệnh, lần sau muốn
chạy lại thì phải dịch lại.
- Biên dịch (Compiler): Code sau khi được biên dịch sẽ tạo ra 1 file thường là .exe,
và file .exe này có thể đem sử dụng lại không cần biên dịch nữa.
Ngôn ngữ lập trình Java thuộc loại ngôn ngữ thông dịch. Chính xác hơn, Java là
loại ngôn ngữ vừa biên dịch vừa thông dịch. Cụ thể như sau
Khi viết mã, hệ thống tạo ra một tệp .java. Khi biên dịch mã nguồn của chương
trình sẽ được biên dịch ra mã byte code. Máy ảo Java (Java Virtual Machine) sẽ thông
dịch mã byte code này thành machine code (hay native code) khi nhận được yêu cầu chạy
chương trình.
4
lOMoARcPSD|15978022
1.2.4. Cơ chế thu gom rác tự động
Khi tạo ra các đối tượng trong Java, JRE sẽ tự động cấp phát không gian bộ nhớ
cho các đối tượng ở trên heap.
Với ngôn ngữ như C \ C++, bạn sẽ phải yêu cầu hủy vùng nhớ mà bạn đã cấp phát,
để tránh việc thất thoát vùng nhớ. Tuy nhiên vì một lý do nào đó, bạn không hủy một vài
vùng nhớ, dẫn đến việc thất thoát và làm giảm hiệu năng chương trình.
Ngôn ngữ lập trình Java hỗ trợ cho bạn điều đó, nghĩa là bạn không phải tự gọi hủy
các vùng nhớ. Bộ thu dọn rác của Java sẽ theo vết các tài nguyên đã được cấp. Khi không
có tham chiếu nào đến vùng nhớ, bộ thu dọn rác sẽ tiến hành thu hồi vùng nhớ đã được
cấp phát.
1.2.5. Đa luồng
Java hỗ trợ lập trình đa tiến trình (multithread) để thực thi các công việc đồng thời.
Đồng thời cũng cung cấp giải pháp đồng bộ giữa các tiến trình (giải pháp sử dụng
priority…).
1.2.6. Tính an toàn và bảo mật
Tính an toàn
- Ngôn ngữ lập trình Java yêu cầu chặt chẽ về kiểu dữ liệu.
- Dữ liệu phải được khai báo tường minh.
- Không sử dụng con trỏ và các phép toán với con trỏ.
5
lOMoARcPSD|15978022
- Java kiểm soát chặt chẽ việc truy nhập đến mảng, chuỗi. Không cho phép sử dụng
các kỹ thuật tràn. Do đó các truy nhập sẽ không vượt quá kích thước của mảng hoặc
chuỗi.
Quá trình cấp phát và giải phóng bộ nhớ được thực hiện tự động.
- Cơ chế xử lý lỗi giúp việc xử lý và phục hồi lỗi dễ dàng hơn.
Tính bảo mật
Java cung cấp một môi trường quản lý chương trình với nhiều mức khác nhau.
Mức 1: Chỉ có thể truy xuất dữ liệu cũng như phương phức thông qua giao diện mà
lớp cung cấp.
Mức 2: Trình biên dịch kiểm soát các đoạn mã sao cho tuân thủ các quy tắc của
ngôn ngữ lập trình Java trước khi thông dịch.
Mức 3: Trình thông dịch sẽ kiểm tra mã byte code xem các đoạn mã này có đảm bảo
được các quy định, quy tắc trước khi thực thi.
Mức 4: Java kiểm soát việc nạp các lớp vào bộ nhớ để giám sát việc vi phạm giới
hạn truy xuất trước khi nạp vào hệ thống.
1.3. Máy ảo Java
Để đảm bảo tính đa nền, Java sử dụng cơ chế Máy ảo của Java.
ByteCode là ngôn ngữ máy của Máy ảo Java tương tự như các lệnh nhị phân của các
máy tính thực.
Một chương trình sau khi được viết bằng ngôn ngữ Java (có phần mở rộng là .java)
phải được biên dịch thành tập tin thực thi được trên máy ảo Java (có phần mở rộng là
.class). Tập tin thực thi này chứa các chỉ thị dưới dạng mã Bytecode mà máy ảo Java hiểu
được phải làm gì.
Khi thực hiện một chương trình, máy ảo Java lần lượt thông dịch các chỉ thị dưới
dạng Bytecode thành các chỉ thị dạng nhị phân của máy tính thực và thực thi thực sự
chúng trên máy tính thực (còn gọi là khả năng khả chuyển).
Máy ảo thực tế đó là một chương trình thông dịch. Vì thế các hệ điều hành khác
nhau sẽ có các máy ảo khác nhau. Để thực thi một ứng dụng của Java trên một hệ điều
hành cụ thể, cần phải cài đặt máy ảo tương ứng cho hệ điều hành đó.
6
lOMoARcPSD|15978022
JVM cung cấp môi trường thực thi cho chương trình Java (còn gọi là khả năng độc
lập với nền).
Có nhiều JVM cho các nền tảng khác nhau chẳng hạn như: Windows, Liux, và Mac.
1.4. Các phiên bản của Java
Java Standard Edition (Java SE) – Là một nền tảng cơ bản cho phép phát triển giao
diện điều khiển, các ứng dụng mạng và các ứng dụng dạng Win Form.
Java Enterprise Edition (Java EE) – Được xây dựng trên nền tảng Java SE, giúp phát
triển các ứng dụng web, các ứng dụng ở cấp doanh nghiệp, …
Java Mobile Edition (Java ME) – Là một nền tảng cho phép phát triển các ứng dụng
nhúng vào các thiết bị điện tử như mobile…
1.5. Các thành phần của Java SE Platform
Gồm 2 thành phần:
JRE (Java Runtime Environment): cung cấp JVM (Java Virtual Machine) và thư
viện được sử dụng để chạy chương trình Java.
JDK (Java Development Kit): được biết đến như bộ cung cụ phát triển Java, bao
gồm: trình biên dịch và trình gỡ rối được sử dụng để phát triển các ứng dụng Java.
2. XML
2.1. XML là gì?
XML là từ viết tắt của từ Extensible Markup Language là ngôn ngữ đánh dấu mở
rộng. XML có chức năng truyền dữ liệu và mô tả nhiều loại dữ liệu khác nhau. Tác dụng
chính của XML là đơn giản hóa việc chia sẻ dữ liệu giữa các nền tảng và các hệ thống
được kết nối thông qua mạng Internet.
XML dùng để cấu trúc, lưu trữ và trong trao đổi dữ liệu giữa các ứng dụng và lưu
trữ dữ liệu. Ví dụ khi ta xây dựng một ứng dụng bằng Php và một ứng dụng bằng Java thì
hai ngôn ngữ này không thể hiểu nhau, vì vậy ta sẽ sử dụng XML để trao đổi dữ liệu.
7
lOMoARcPSD|15978022
Chính vì vậy, XML có tác dụng rất lớn trong việc chia sẻ, trao đổi dữ liệu giữa các hệ
thống.
2.2. Ưu và nhược điểm của XML
2.2.1. Ưu điểm
Ưu điểm lớn nhất của XML là sự độc lập. XML được sử dụng để mô tả dữ liệu dưới
dạng text, nên hầu hết các phần mềm hay các chương trình bình thường đều có thể đọc
được chúng.
XML có thể đọc và phân tích nguồn dữ liệu khá dễ dàng nên nó được sử dụng với
mục đích chính là trao đổi dữ liệu giữa các chương trình, các hệ thống khác nhau. XML
được sử dụng cho Remote Procedure Calls nhằm phục vụ cho các dịch vụ của website.
2.2.2. Nhược điểm
Tỷ lệ sai sót khi sử dụng XML để truyền dữ liệu khoảng từ 5-7%. Con số này tuy
không quá cao, nhưng trên thực tế, người ta vẫn cần cân nhắc trước khi sử dụng nó để trao
đổi thông tin.
2.3. So sánh XML và HTML
XML
HTML
XML cho phép người dùng tạo biểu
Được định nghĩa trước và người dùng
tượng đánh dấu riêng để mô tả nội dung, phải tuân thủ
tạo một biểu tượng không giới hạn và tự
định nghĩa
Được thiết kế để chuyển tải và lưu
Được thiết kế để hiển thị dữ liệu
trữ dữ liệu
Tuy nhiên XML không phải là sự thay thế cho HTML.
XML thường được sử dụng làm cơ sở cho các định dạng tài liệu khác. Dưới đây là
một số định dạng bạn có thể biết:
8
lOMoARcPSD|15978022
-
RSS
-
Microsoft .NET sử dụng XML cho các file cấu hình của nó.
-
Sitemap
2.4. Cú pháp của XML
Sơ đồ sau minh họa qui tắc cú pháp để viết các kiểu đánh dấu và text khác nhau
trong một tài liệu XML.
2.4.1. Khai báo XML
Tài liệu XML có thể tùy ý có một phần khai báo XML. Nó được viết như sau:
Ở đây, version là phiên bản XML và encoding xác định mã hóa ký tự được sử dụng
trong tài liệu.
2.4.2. Các qui tắc cú pháp để khai báo XML
-
Khai báo XML (XML declaration) là phân biệt kiểu chữ và phải bắt đầu với “
xml>” ở đây “xml” viết ở dạng chữ thường.
-
Nếu tài liệu chứa khai báo XML, thì nó phải là lệnh đầu tiên của tài liệu XML.
9
lOMoARcPSD|15978022
-
Khai báo XML phải là lệnh đầu tiên của tài liệu XML.
-
Một HTTP Protocol có thể ghi đè giá trị của encoding mà bạn đặt trong khai báo
XML.
2.4.3. Tags và Elements
Một XML file được cấu thành bởi một số phần tử XML (Element), còn được gọi là
XML-node hoặc XML-tags. Tên các phần tử XML được bao trong các dấu < > như sau:
2.4.4. Qui tắc cú pháp (Syntax Rules) cho các thẻ và phần tử
Cú pháp phần tử: Mỗi phần tử XML cần được bao trong hoặc với phần tử bắt đầu
hoặc kết thúc như sau:
....
Hoặc đơn giản theo cách:
Lồng các phần tử: Một phần tử XML có thể chứa nhiều phần tử XML khác như là
con của nó, nhưng các phần tử con này phải không đè lên nhau, ví dụ: Một thẻ đóng của
một phần tử phải có cùng tên như thẻ mở kết nối với nó.
Ví dụ sau minh họa các thẻ lồng nhau sai cú pháp:
TopDev
Ví dụ sau minh họa các thẻ lồng nhau đúng cú pháp:
10
lOMoARcPSD|15978022
TopDev
Phần tử gốc (Root Element): Một tài liệu XML có thể chỉ có một phần tử gốc. Ví
dụ sau minh họa một tài liệu XML sai cú pháp, bởi vì cả hai phần tử x và y xuất hiện ở
cấp cao nhất mà không phải là một phần tử gốc.
...
...
Còn đây là ví dụ về đúng cú pháp:
...
...
Phân biệt kiểu chữ: Tên của các phần tử XML là phân biệt kiểu chữ. Nghĩa là tên
của thẻ mở và thẻ đóng phải cùng kiểu.
Ví dụ, là khác với
2.4.5. Thuộc tính
Một thuộc tính xác định thuộc tính cho phần tử, sử dụng một cặp tên/giá trị. Một
phần tử XML có thể có một hoặc nhiều thuộc tính. Ví dụ:
TopDev
Ở đây href là tên thuộc tính và https://topdev.vn/ là giá trị thuộc tính.
2.4.6. Qui tắc cú pháp cho thuộc tính trong XML
Tên thuộc tính trong XML là phân biệt kiểu chữ (không giống như HTML). Tức là,
HREF và href là hai thuộc tính khác nhau trong XML.
11