Mô tả dữ liệu của màn hình danh sách hóa đơn của một phòng .... Mô tả dữ liệu màn hình danh sách thành viên trong một phòng .... Mô tả dữ liệu trong item một thành viên trong danh sách c
Trang 1TRƯỜNG ĐẠI HỌC BÀ RỊA-VŨNG TÀU
ĐỒ ÁN TỐT NGHIỆP Ứng dụng “Quản lý phòng trọ”
Trình độ đào tạo: Đại học chính quy
Ngành: Công nghệ thông tin
Chuyên ngành: Lập trình ứng dụng di động và game
Giảng viên hướng dẫn: ThS Nguyễn Thị Minh Nương Sinh viên thực hiện: Lê Thành Trung
Trang 2LỜI CAM ĐOAN
Đồ án này là quá trình nghiên cứu và xây dựng của cá nhân tôi, dưới sự hướng dẫn của giáo viên ThS Nguyễn Thị Minh Nương Các số liệu, những kết luận nghiên cứu được trình bày trong đồ án này là do tôi tự tìm hiểu và hoàn toàn trung thực Ngoài ra, trong bài báo cáo có
sử dụng một số nguồn tài liệu tham khảo đã được trích dẫn nguồn và chú thích rõ ràng
Tôi xin hoàn toàn chịu trách nhiệm về lời cam đoan này
Vũng Tàu,Ngày 01 tháng 01 năm 2021
Sinh viên thực hiện
Lê Thành Trung
Trang 3LỜI CẢM ƠN
Trong khoảng thời gian học tập tại Trường Đại Học Bà Rịa – Vũng Tàu, tôi đã nhận được
sự hướng dẫn, giúp đỡ quý báu của các thầy cô Điều đó giúp tôi tạo điều kiện tích lũy vốn kiến thức bổ ích từ những bài giảng, kiến thức thực tế của các thầy cô
Tôi xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc đối với quý thầy cô Trường Đại Học
Bà Rịa Vũng Tàu nói chung và các thầy cô khoa Công Nghệ Kỹ Thuật – Nông Nghiệp – Công Nghệ Cao của trường nói riêng đã tạo điều kiện thuận lợi để tôi hoàn thành tốt đồ án Đặc biệt tôi cũng xin chân thành cảm ơn đến cô ThS Nguyễn Thị Minh Nương – người đã tận tình hướng dẫn, giúp đỡ tôi hoàn thành đồ án tốt nghiệp
Tôi xin kính chúc quý thầy cô có nhiều sức khỏe, gặt hái được nhiều thành công trên con đường giảng dạy, chúc Trường Đại Học Bà Rịa – Vũng Tàu sẽ là lựa chọn hàng đầu của các thế
hệ sinh viên để học tập và nâng cao trình độ của bản thân
Với điều kiện thời gian và kinh nghiệm còn hạn chế nên bài báo cáo này không thể tránh được những thiếu sót Tôi rất mong nhận được sự góp ý kiến của các quý thầy cô để tôi có thể học thêm nhiều kinh nghiệm, nâng cao kiến thức
Tôi xin chân thành cảm ơn!
Trang 4NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Vũng Tàu, ngày … tháng … năm 20…
Người hướng dẫn
ThS Nguyễn Thị Minh Nương
Trang 5MỤC LỤC
DANH MỤC CÁC TỪ VIẾT TẮT i
DANH MỤC BẢNG ii
DANH MỤC SƠ ĐỒ iv
DANH MỤC HÌNH v
LỜI NÓI ĐẦU ix
Chương 1 Cơ sở lý thuyết 1
1.1 Hệ điều hành Android 1
1.1.1 Giới thiệu về Android 1
1.1.2 Lịch sử phát triển Android 1
1.1.3 Các thành phần của một ứng dụng 2
1.2 Ngôn ngữ Kotlin 7
1.2.1 Giới thiệu về Kotlin 7
1.2.2 Kotlin trong Android 8
1.2.3 Lịch sử phát triển Kotlin 8
1.2.4 Ưu và nhược điểm của Kotlin so với Java 9
1.3 Firebase của Google 13
1.3.1 Giới thiệu 13
1.3.2 Lịch sử phát triển 13
1.3.3 Các dịch vụ của Firebase 14
1.4 Thư viện MPAndroidChart 16
1.4.1 Giới thiệu 16
1.4.2 Các dạng biểu đồ 17
1.5 Thư viện ZXing 19
1.5.1 Giới thiệu 19
1.5.2 Lịch sử hình thành 20
Trang 6Chương 2 Phân tích hệ thống 21
2.1 Mô tả các chức năng chi tiết 21
2.1.1 Quản lý tài khoản trên Firebase Authenticator 21
2.1.2 Quản lý cơ sở dữ liệu trên Firebase Realtime Database 22
2.1.3 Quản lý nội dung các phương tiện của người dùng 23
2.2 Xác định các tác nhân 24
2.2.1 Tác nhân Admin 24
2.2.2 Tác nhân user người cho thuê phòng 25
2.2.3 Tác nhân người thuê phòng 25
2.3 Đặc tả các use case 26
2.3.1 Đăng nhập vào hệ thống 26
2.3.2 Thống kê 28
2.3.3 Tìm kiếm dữ liệu 29
2.3.4 Xem thông tin tài khoản 30
2.3.5 Cập nhật dữ liệu 31
2.4 Xây dựng cơ sở dữ liệu 32
2.4.1 Các thực thể và các thuộc tính 32
2.4.2 Sơ đồ ER 34
2.4.3 Sơ đồ quan hệ 34
Chương 3 Xây dựng phần mềm Motel Management 35
3.1 Danh sách các màn hình 35
3.2 Màn hình chờ 36
3.3 Đăng nhập hệ thống 38
3.4 Màn hình đăng ký tài khoản 42
3.5 Màn hình quên mật khẩu 49
3.6 Màn hình chính 52
Trang 73.7 Màn hình khu vực quản lý chính – Dashboard 57
3.8 Màn hình đổi mật khẩu 68
3.9 Màn hình thông tin chi tiết phòng 70
3.10 Giao diện chi tiết hóa đơn 77
3.11 Giao diện chi tiết người ở trọ 80
3.12 Giao diện thêm/ cập nhật người ở trọ 82
3.13 Giao diện thêm dịch vụ 84
3.14 Giao diện thêm hóa đơn 88
3.15 Giao diện ghi chỉ số điện nước 91
3.16 Giao diện popup hiển thị thông tin phòng 93
3.17 Giao diện popup hiển thị thông tin hóa đơn 95
Chương 4 Xây dựng phần mềm Search Motel Information 97
4.1 Danh sách các màn hình 97
4.2 Màn hình chờ 97
4.3 Màn hình quét mã truy cập hệ thống 98
4.4 Màn hình chính 101
4.4.1 Thẻ home – Màn hình thông tin phòng 102
4.4.2 Thẻ bills – Màn hình danh sách các hóa đơn 102
4.4.3 Thẻ lodgers - Màn hình danh sách thành viên 103
4.4.4 Thẻ report – Màn hình thống kê 105
Chương 5 Kết luận 106
5.1 Kết quả đạt được 106
5.2 Hướng phát triển 106
Tài liệu tham khảo 107
Phụ lục 109
Trang 8DANH MỤC CÁC TỪ VIẾT TẮT
Trang 9DANH MỤC BẢNG
Bảng 2.1 Bảng mô tả các chức năng có trong trang quản lý tài khoản Firebase 21
Bảng 2.2 Bảng mô tả chức năng của trang quản lý cơ sở dữ liệu 22
Bảng 2.3 Mô tả chức năng của trang quản lý dữ liệu Firebase Storage 23
Bảng 2.4 Bảng mô tả các thuộc tính của thực thể 32
Bảng 3.1 Danh sách các màn hình trong phần mềm Motel Management 35
Bảng 3.2 Bảng mô tả màn hình chờ 36
Bảng 3.3 Bảng mô tả màn hình đăng nhập 39
Bảng 3.4 Bảng mô tả màn hình đăng kí 43
Bảng 3.5 Bảng mô tả màn hình khôi phục mật khẩu 49
Bảng 3.6 Bảng mô tả màn hình chính 52
Bảng 3.7 Mô tả chi tiết của từng dòng trong danh sách phòng 54
Bảng 3.8 Mô tả các chức năng trong màn hình dashboard 58
Bảng 3.9 Bảng mô tả màn hình thông tin tài khoản 59
Bảng 3.10 Bảng mô tả danh sách hóa đơn 61
Bảng 3.11 Mô tả dữ liệu item tiêu đề hóa đơn 62
Bảng 3.12 Mô tả dữ liệu trong item hóa đơn 63
Bảng 3.13 Bảng mô tả màn hình danh sách dịch vụ 64
Bảng 3.14 Mô tả thông tin của item chi tiết dịch vụ 64
Bảng 3.15 Bảng mô tả màn hình thống kê 66
Bảng 3.16 Mô tả dữ liệu trên màn hình thông tin phòng 70
Bảng 3.17 Mô tả dữ liệu của màn hình danh sách hóa đơn của một phòng 73
Bảng 3.18 Mô tả dữ liệu màn hình danh sách thành viên trong một phòng 74
Bảng 3.19 Mô tả dữ liệu trong item một thành viên trong danh sách các thành viên trong một phòng 75
Bảng 3.20 Mô tả dữ liệu trong màn hình thống kê điện nước 76
Bảng 3.21 Mô tả dữ liệu trong màn hình chi tiết hóa đơn 78
Bảng 3.22 Mô tả dữ liệu màn hình chi tiết của thành viên trong một phòng 80
Bảng 3.23 Bảng mô tả màn hình thêm thành viên trong phòng 83
Bảng 3.24 Bảng mô tả màn hình tạo mới dịch vụ 85
Bảng 3.25 Bảng mô tả màn hình thêm hóa đơn 88
Trang 10Bảng 3.26 Bảng mô tả thiết kế màn hình popup 3.54 94 Bảng 4.1 Bảng mô tả các màn hình trong ứng dụng Search Motel Information 97 Bảng 4.2 Mô tả chi tiết màn hình quét mã Qr code 98
Trang 11DANH MỤC SƠ ĐỒ
Sơ đồ 2.1 Mô tả usecase của user Admin 24
Sơ đồ 2.2 Mô tả usecase của user - người cho thuê phòng 25
Sơ đồ 2.3 Mô tả sơ đồ tuần tự của quá trình đăng nhập thành công 26
Sơ đồ 2.4 Mô tả sơ đồ hợp tác của quá trình đăng nhập thành công 26
Sơ đồ 2.5 Mô tả sơ đồ tuần tự của quá trình đăng nhập thất bại 27
Sơ đồ 2.6 Mô tả sơ đồ hợp tác của quá trình đăng nhập thất bại 27
Sơ đồ 2.7 Mô tả sơ đồ tuần tự của quá trình thống kê 28
Sơ đồ 2.8 Mô tả sơ đồ hợp tác của quá trình thống kê 28
Sơ đồ 2.9 Mô tả sơ đồ hợp tác của quá trình thống kê 29
Sơ đồ 2.10 Mô tả sơ đồ hợp tác của quá trình tìm kiếm 29
Sơ đồ 2.11 Mô tả sơ đồ tuần từ của quá trình xem thông tin tài khoản 30
Sơ đồ 2.12 Mô tả sơ đồ hợp tác của quá trình xem thông tin tài khoản 30
Sơ đồ 2.13 Mô tả sơ đồ tuần tự của quá trình cập nhật dữ liệu 31
Sơ đồ 2.14 Mô tả sơ đồ hợp tác của quá trình cập nhật dữ liệu 31
Sơ đồ 2.15 Sơ đồ ER 34
Sơ đồ 2.16 Mô tả sơ đồ quan hệ 34
Trang 12DANH MỤC HÌNH
Hình 1.1 Logo Hệ điều hành android 1
Hình 1.2 Phiên bản android 11 1
Hình 1.3 Bốn thành phần trong ứng dụng android 2
Hình 1.4 Mô tả vòng đời của Activity 4
Hình 1.5 Mô tả service trong android 5
Hình 1.6 Mô tả vòng đời của service 6
Hình 1.7 Ví dụ mô tả về Android Broadcase Receiver 6
Hình 1.8 Mô tả quá trình truyền tải của Content Provider 7
Hình 1.9 Loogo ngôn ngữ Kotlin 7
Hình 1.10 Mô tả các ứng dụng của ngôn ngữ Java 9
Hình 1.11 Ví dụ code giữa Java và Kotlin 10
Hình 1.12 Ứng dụng đa nền tảng của ngôn ngữ Kotlin 12
Hình 1.13 Logo của dịch vụ Firebase 13
Hình 1.14 Mô tả các dịch vụ trong Firebase 14
Hình 1.15 Dịch vụ xác thực người dùng qua dịch vụ thứ 3 15
Hình 1.16 Dịch vụ Firebasbe Realtime Database 15
Hình 1.17 Dịch vụ Storage của Firebase 16
Hình 1.18 Logo thư viện MPAndroidChart 16
Hình 1.19 Biểu đồ dạng LineChart trong thư viện MPAndroidChart(1) 17
Hình 1.20 Biểu đồ dạng LineChart trong thư viện MPAndroidChart(2) 17
Hình 1.21 Biểu đồ dạng LineChart trong thư viện MPAndroidChart(3) 17
Hình 1.22 Biểu đồ dạng BarChart trong thư viện MPAndroidChart(1) 18
Hình 1.23 Biểu đồ dạng BarChart trong thư viện MPAndroidChart(2) 18
Hình 1.24 Biểu đồ dạng Combined-Chart trong thư viện MPAndroidChart 18
Hình 1.25 Biểu đồ dạng PieChart trong thư viện MPAndroidChart 19
Hình 1.26 Logo của thư viện ZXing 19
Hình 2.1 Trang quản lý tài khoản của Firebase 21
Hình 2.2 Trang quản lý cơ sở dữ liệu Firebase Realtime Database 22
Hình 2.3 Trang quản lý dữ liệu trên Firebase Storage 23
Hình 2.4 Mô tả các thực thể của hệ thống 32
Trang 13Hình 3.1 Màn hình chờ của app Motel Management 36
Hình 3.2 Màn hình thông báo lỗi kết nối mạng 37
Hình 3.3 Màn hình đăng nhập hệ thống 38
Hình 3.4 Giao diện thông báo lỗi khi đăng nhập 39
Hình 3.5 Màn hình đăng nhập qua tài khoản Google 42
Hình 3.6 Màn hình đăng kí tài khoản mới 43
Hình 3.7 Màn hình lựa chọn phương thức cập nhật ảnh đại diện 45
Hình 3.8 Màn hình yêu cầu truy cập quyền của android 45
Hình 3.9 Màn hình thông báo lỗi khi người dùng chặn quyền truy cập camera 47
Hình 3.10 Màn hình cho người dùng lựa chọn ứng dụng quản lý file 47
Hình 3.11 Màn hình cắt ảnh trước khi tải lên ứng dụng 48
Hình 3.12 Màn hình đăng ký và hình đại diện vừa được thay đổi 48
Hình 3.13 Màn hình quên mật khẩu chờ nhập email 50
Hình 3.14 Màn hình quên mật khẩu xác nhận email đã được gửi 50
Hình 3.15 Email hệ thống - thiết lập mật khẩu mới 51
Hình 3.16 Giao diện đổi mật khẩu mới 51
Hình 3.17 Màn hình chính của ứng dụng Motel Management 52
Hình 3.18 Phím chức năng thêm phòng 53
Hình 3.19 Các hàng trong danh sách phòng của màn hình chính 54
Hình 3.20 Hình ảnh chi tiết về hai chức năng khi lướt item qua bên trái 55
Hình 3.21 Hình ảnh chi tiết về hai chức năng khi lướt item qua bên phải 55
Hình 3.22 Màn hình tìm kiếm phòng 56
Hình 3.23 Màn hình dashboard của ứng dụng motel management 57
Hình 3.24 Màn hình thông tin tài khoản 58
Hình 3.25 Màn hình danh sách hóa đơn 61
Hình 3.26 Item tiêu đề của hóa đơn 62
Hình 3.27 Item chi tiết hóa đơn 62
Hình 3.28 Màn hình danh sách dịch vụ 63
Hình 3.29 Item chi tiết của dịch vụ 64
Hình 3.30 Mô tả chức năng của item dịch vụ 65
Hình 3.31 Thông báo khi thực hiện xóa một dịch vụ 65
Trang 14Hình 3.33 Màn hình thay đổi mật khẩu 68
Hình 3.34 Màn hình thông tin phòng 70
Hình 3.35 Màn hình thông tin phòng 71
Hình 3.36 Màn hình lấy mã Qr code 72
Hình 3.37 Màn hình danh sách hóa đơn của một phòng 73
Hình 3.38 Màn hình danh sách thành viên trong một phòng 74
Hình 3.39 Item một thành viên trong danh sách các thành viên trong một phòng 75
Hình 3.40 Hai phím chức năng của item thành viên trong danh sách thành viên trong một phòng 75
Hình 3.41 Màn hình thống kê điện nước của một phòng 76
Hình 3.42 Màn hình chi tiết hóa đơn đã thanh toán 77
Hình 3.43 Màn hình chi tiết hóa đơn chưa thanh toán 78
Hình 3.44 Màn hình chi tiết của thành viên trong một phòng 80
Hình 3.45 Màn hình tạo mới một thành viên trong phòng 82
Hình 3.46 Màn hình cập nhật thông tin cho thành viên 84
Hình 3.47 Màn hình tạo mới một dịch vụ 85
Hình 3.48 Màn hình cập nhật một dịch vụ 87
Hình 3.49 Màn hình chính thêm hóa đơn 88
Hình 3.50 Hộp thoại thêm thông tin của hóa đơn 89
Hình 3.51 Màn hình chính thêm hóa đơn 90
Hình 3.52 Thông báo hiển thị quá trình tải dữ liệu lên firebase 90
Hình 3.53 Màn hình ghi chỉ số điện nước hàng tháng 91
Hình 3.54 Popup hiển thị nhanh thông tin cơ bản về phòng 94
Hình 3.55 Popup hiển thị thông tin cơ bản của một hóa đơn 96
Hình 4.1 Màn hình chờ của ứng dụng Search Motel Infomation 97
Hình 4.2 Màn hình quét mã Qr code 98
Hình 4.3 Màn hình thống báo lỗi kết nối mạng 100
Hình 4.4 Thông báo lỗi khi quét mã Qr code không hợp lệ 101
Hình 4.5 Màn hình thông tin phòng 101
Hình 4.6 Màn hình thông tin phòng 102
Hình 4.7 Màn hình danh sách hóa đơn 103
Hình 4.8 Màn hình danh sách thành viên trong phòng 104
Trang 15Hình 4.9 Màn hình thống kê 105
Trang 16LỜI NÓI ĐẦU
1 Tính cấp thiết của đề tài
Theo thống kê mới nhất, tính đến chiều ngày 09/08/2019 dân số thành phố Vũng Tàu là 351,300 người với 101,347 hộ đang sinh sống, làm việc và học tập Các nhu cầu ăn uống, du lịch, nghỉ ngơi ngày càng tăng trưởng để đáp ứng con người Đặc biệt tại Vũng Tàu, dịch vụ du lịch, nghỉ dưỡng, thuê phòng phục vụ nghỉ ngơi và làm việc có tốc độ tăng trưởng trong những năm trở lại đây
Với các nhà trọ, nhà nghỉ có số lượng phòng đủ lớn hay đặt biệt là một ký túc xá cho sinh viên có số lượng lên đến vài trăm phòng thì việc quản lý, lưu trữ thông tin trở nên khó khăn Điều
đó thúc đẩy việc xây dựng một phần mềm chuyên dụng để giải quyết các vấn đề trên Lợi ích mà các phần mềm quản lý đem lại khiến ta không thể không thừa nhận tính hiệu quả của nó
Trong thực tế, vì muốn tiết kiệm chi phí nên một số chủ nhà trọ, nhà nghỉ sử dụng các giấy
tờ để lưu trữ thông tin khách hàng Việc lưu trữ giấy tờ còn gặp nhiều bất cập nếu số lượng khách ngày một đông, giấy tờ hóa đơn ngày càng nhiều từ đó việc lưu trữ trở thành một bài toán khó Đồng thời nó còn dẫn đến khó khăn trong việc kiểm soát, tra cứu, làm thống kê doanh thu
2 Tình hình nghiên cứu
Trong thời đại kỷ nguyên số, việc nghiên cứu và phát triển một phần mềm ứng dụng không còn xa lạ Hiện nay, có nhiều phần mềm hỗ trợ việc quản lý phòng trên thiết bị di động Bằng việc sử dụng các công cụ này, doanh nghiệp hay chủ nhà có thể lưu trữ các thông tin phòng, người thuê phòng một cách dễ dàng Các ứng dụng hiện tại đều hướng đến các chức năng như lưu trữ thông tin về phòng, người thuê phòng, hóa đơn, thực hiện truy xuất các thông tin và tạo các thống kê
Các ứng dụng có các chứng năng tương đồng
Trang 173 Mục đính nghiên cứu
Mục đích xây dựng ứng dụng là để phục vụ các chủ nhà nghỉ, ký túc xá nói chung và các chủ các dãy phòng trọ nói riêng nhằm giải quyết các vấn đề vừa nêu phía trên Đồng thời thông qua việc sử dụng ứng dụng sẽ giúp giảm tải công việc, nâng cao hiệu suất, giảm thiểu rủi ro mất mát dữ liệu
4 Nhiệm vụ nghiên cứu
Để thực hiện mục tiêu vừa nêu phía trên, phần mềm được tiến hành nghiên cứu xây dựng theo trình tự như sau:
✓ Nghiên cứu cách thức hoạt động, nghiệp vụ của một dãy trọ để xây dựng cơ sở dữ liệu phù hợp cho ứng dụng
✓ Nghiên cứu và tích hợp MPAndroidChart vào ứng dụng với mục đích để hiển thị thống
kê dữ liệu thông qua các sơ đồ nhằm tăng cường trải nghiệm người dùng
✓ Nghiên cứu và tích hợp ZXing vào ứng dụng để xử lý các mã vạch 1D/ 2D
✓ Nghiên cứu và tích hợp Firebase vào ứng dụng Cụ thể sử dụng các tính năng: Auth (xác thực người dùng), Realtime Database (cơ sở dữ liệu theo dạng thời gian thực), Storage (nơi lưu trữ các dữ liệu người dùng)
✓ Nghiên cứu thiết kế giao diện, ngôn ngữ lập trình Kotlin để xây dựng ứng dụng
Trang 185 Phương pháp nghiên cứu
✓ Phần mềm Android Studio với ngôn ngữ Kotlin để lập trình, xây dựng cấu trúc của ứng dụng
✓ Sử dụng phần mềm chuyên dụng để thiết kế các icon, background cho ứng dụng như:
Adobe Illustrator, Adobe Photoshop
6 Các kết quả đạt được của đề tài
Thông qua đề tài sẽ xây dựng hai ứng dụng:
✓ Ứng dụng Motel Management có chức năng chính là quản lý thông tin phòng ở (người thuê phòng, các chỉ số điện nước, hóa đơn thanh toán) tại kí túc xá, phòng trọ
✓ Ứng dụng Search Motel Information dành cho người thuê phòng Người thuê phòng
có thể tra cứu thông tin phòng, hóa đơn của phòng mình thông qua một mã do chủ cho thuê phòng cung cấp
Hai ứng dụng đều được liên kết chung một dịch vụ cơ sở dữ liệu là Firebase của Google Đồng thời hai ứng dụng đều chạy trên hệ điều hành là Android
Trang 19Chương 1 Cơ sở lý thuyết
1.1 Hệ điều hành Android
1.1.1 Giới thiệu về Android
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng Ban đầu, Android được phát triển bởi Android, Inc Với sự hỗ trợ tài chính từ Google và sau này được chính Google mua lại vào năm 2005
Hình 1.1 Logo Hệ điều hành android
Android ra mắt vào năm 2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm các công ty phần cứng, phần mềm, và viễn thông với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động Chiếc điện thoại đầu tiên chạy Android được bán vào năm
2008
1.1.2 Lịch sử phát triển Android
Hình 1.2 Phiên bản android 11
Trang 20Từ tháng 10 năm 2003 đến tháng 12 năm 2020, hệ điều hành Android được phát triển qua nhiều phiên bản Trong đó có các phiên bản nổi bật như sau:
➢ Tháng 10 năm 2003, Android, Inc được thành lập tại Palo Alto, California
➢ Ngày 17 tháng 8 năm 2005, Google mua lại Android
➢ Từ năm 2008, Android đã trải qua nhiều lần cập nhật để dần dần cải tiến hệ điều hành, bổ sung các tính năng mới và sửa các lỗi trong những lần phát hành trước Tính tới ngày 9 tháng 9 năm 2020 phiên bản Android 11 là phiên bản mới nhất 1.1.3 Các thành phần của một ứng dụng
Một ứng dụng trên Android được cấu thành từ bốn thành phần cơ bản sau:
Các thành phần trong hình 1.3 không nhất thiết phải có mặt đầy đủ trong ứng dụng Chúng
ta có thể xem các thành phần nào được sử dụng trong ứng dụng bằng việc xem khai báo trong file AndroidManifest.xml
Trang 21a) Activity
⁂ Khái niệm
Một Activity được xem như một điểm tiếp xúc với người dùng Nó là một màn hình đơn với giao diện trên đó Ví dụ, khi cài và chạy lên ứng dụng này thì màn hình chạy lên các bạn sẽ thấy giao diện hiện thị cho chúng ta xem, đó là một Activity Activty giúp người dùng tương tác với hệ thống, thực hiện các chức năng cần thiết trên đó, chuyển đổi qua lại giữa các màn hình giao diện/ chức năng
Mỗi hoạt động có một cửa sổ để vẽ lên Thông thường cửa sổ này phủ đầy màn hình, ngoài
ra nó cũng có thể có thêm các cửa sổ con khác như là hộp thoại Nội dung của cửa sổ của hoạt động được cung cấp bởi một hệ thống cấp bậc các View (là đối tượng của lớp Views)
⁂ Vòng đời hoạt động
Các hoạt động trong hệ thống được quản lý bởi một cấu trúc dữ liệu ngăn xếp Khi có một hoạt động được khởi tạo, nó được đẩy vào trong ngăn xếp, chuyển sang trạng thái thực thi và hoạt trộng trước đó sẽ chuyển sang trạng thái chờ Hoạt động này chỉ trở lại trang thái kích hoạt khi
mà hoạt động vừa khởi tạo kết thúc việc thực thi
Trang 22Vòng đời của một hoạt động có thể được thể hiện trong những quá trình sau:
Hình 1.4 Mô tả vòng đời của Activity
Trang 23b) Services
Service có chức năng giúp ứng dụng vẫn chạy được, nhưng không cần hiện thị trên giao diện (gọi là chạy ngầm bên dưới )
Hình 1.5 Mô tả service trong android
Ví dụ khi dùng các ứng nghe nhạc, mặc dù đã tắt ứng dụng nhưng vẫn nghe được nhạc (đó
là vì nó đang chạy dưới nền /background) Chúng ta có thể liên kết/ kết nối giữa một Activity với một service Khi tải một file từ trên mạng, việc tải thực hiện ở service, sau đó sẽ trả kết quả phần trăm tải lên activity để hiện thị cho người dùng biết
Trang 24Vòng đời của Service được thể hiển qua hình dưới dây:
Hình 1.6 Mô tả vòng đời của service
c) Broadcast Receivers
Hình 1.7 Ví dụ mô tả về Android Broadcase Receiver
Broadcast receiver được sử dụng trong nhiều trường hợp, ví dụ: để chuyển dữ liệu từ service lên activity (ngoài sử dụng binding) chúng ta có thể sử dụng broadcast để gửi dữ liệu Hoặc trong các ứng dụng như hẹn giờ, khi đến giờ hẹn, ứng dụng sẽ sử dụng broadcast báo thức, tạo ra notification trên màn hình để báo cho người dùng biết
Trang 25d) Content Provider
Content provider quản lý các cách để ứng dụng có thể lưu trữ dữ liệu trên hệ thống Chúng
ta sẽ biết cụ thể về thành phần này khi xây dựng các ứng dụng cần lưu trữ vào SQLite
Hình 1.8 Mô tả quá trình truyền tải của Content Provider
Ví dụ trong các ứng dụng từ điển, dữ liệu, từ vựng được lưu trữ trong SQlite và Content provider gọi để lấy ra cho người dùng xem Ngoài ra thành phần này còn thực hiện các chức năng, thêm, sửa, xóa dữ liệu…
1.2 Ngôn ngữ Kotlin
1.2.1 Giới thiệu về Kotlin
Kotlin là một ngôn ngữ lập trình kiểu tĩnh chạy trên máy ảo Java (Java Virtual Machine)
và có thể được biên dịch sang mã nguồn Java Kotlin được tạo ra bởi JetBrains và xuất hiện lần đầu tiên vào năm 2011 và được Google thông báo là “Android official language” (Tạm dịch là ngôn ngữ chính thức của Android) vào sự kiện Google I/O năm 2017
Trang 26Theo website JetBrains, mục tiêu quan trọng của Kotlin là tính hữu dụng Từ khi mới xuất hiện vào năm 2011 cho đến phiên bản 1.0 (15/02/2016), JetBrains luôn chú trọng đến tính tương hợp với Java Kotlin ra đời để khắc phục lỗi bug điển hình là null pointer reference và giảm tính dài dòng của ngôn ngữ Java
1.2.2 Kotlin trong Android
Trước khi Kotlin xuất hiện để xây dựng và phát triển một phần mềm di động, các lập trình viên không có sự lựa chọn khác ngoài Java Mặc dù Java xuất hiện sớm và được sử dụng rộng rãi Tuy nhiên trong quá trình hoạt động Java sinh ra rất nhiều file rác Kotlin không chỉ giải quyết được vấn đề xử lý file rác mà còn giảm số lượng mã code, mã code dễ đọc, dễ hiểu hơn Kotlin
có khả năng tận dụng các thư viện hiện có của JVM (Java Virtual Machine) và có khả năng tương tác với Java 100%
Kể từ Android Studio 3.0 (được phát hành vào tháng 10 năm 2017), nó được nhúng trực tiếp vào IDE Android Studio Kotlin ra đời được JetBrains hy vọng sẽ được sử dụng trong các lĩnh vực khác.Từ ngày xuất đến tới tháng 12 năm 2020 Kotlin đã được phát triển và cập nhật được qua nhiều phiên bản
➢ Vào ngày 28 tháng 11 năm 2017, Kotlin v1.2 được phát hành Tính năng chia sẻ
mã nguồn giữa nền tảng JVM và JavaScript mới được thêm vào bản này
➢ Vào ngày 29 tháng 10 năm 2018, Kotlin v1.3 được phát hành Các coroutine API cho lập trình bất đồng bộ
➢ Vào ngày 17 tháng 8 năm 2020, Kotlin v1.4 được phát hành Với phiên bản này JetBrains tập trung vào chất lượng và hiệu suất
Trang 271.2.4 Ưu và nhược điểm của Kotlin so với Java
Java cũng là một ngôn ngữ lập trình Trong việc phát triển ứng dụng di động cho hệ điều hành Android, Java là ngôn ngữ lựa chọn số 1 trước khi Kotlin được phát triển rộng rãi
Hình 1.10 Mô tả các ứng dụng của ngôn ngữ Java
Java được nhiều người sử dụng bởi vì:
✓ Cú pháp dễ hiểu, lập trình được nhiều thứ-Web, mobile, …
✓ Code Android từ Java tương thích rất tốt, rất ít lỗi
✓ Có cộng đồng lớn, nhiều hướng dẫn và thư viện
✓ Có nhiều công ty tuyển dụng
Tuy có nhiều ưu điểm như thế, nhưng Java cũng có những nhược điểm chí mạng như:
Trang 28Vì Kotlin sinh sau đẻ muộn cho nên nó được cải tiến khá nhiều và khắc phục được nhiều bất cập còn tồn động trong Java Cụ thể như sau:
a) Sự tương thích
Một trong những ưu điểm của Kotlin là Kotlin và Java có thể chứa cùng chung một dự án Đồng thời, hai ngôn ngữ Kotlin, Java có thể gọi phương thức giữa các class với nhau Về tính tương tác giữa Java và Kotlin là tuyệt đối
b) Kotlin ngắn gọn hơn Java
Có thể nói đây là một lợi ích lớn nhất khi so với Java Cũng là một bài toán logic, tuy nhiên bên Java số lượng tạo ra nhiều hơn so Kotlin
Hình 1.11 Ví dụ code giữa Java và Kotlin
Trang 29c) Extension function
Chức năng này có thể thêm một function (tạm dịch là chức năng) cho một class
mà không cần kế thừa lại class đó
Để hiểu rõ Extension là gì ta xem qua ví dụ dưới đây:
// Extension function Ý nghĩa của hàm là để lấy từ đầu tiên của câu
fun String.getFirstWordOfSentences(): String = this.split(" ").get(0)
// Khai báo biến tên testSentences, giá trị là chuỗi "Kotlin is so cool" var testSentences ="Kotlin is so cool"
testSentences.getFirstWordOfSentences() // Kết quả là “Kotlin”
Thông qua ví dụ trên thấy chúng ta không hề kế thừa một class nào từ String, nhưng thông qua Extension ta xây dựng một function mở rộng cho class String d) Hàm lồng nhau
Trong Kotlin, một function được định nghĩa hay được viết trong một function được gọi là hàm lồng nhau Sau đây là một số ví dụ về hàm lòng nhau:
//Tạo một class Object User có 3 trường dữ liệu
class User(val id: Int, val name: String, val address: String)
//Tạo một hàm lưu object user vào cơ sở dữ liệu
fun saveUserToDb(user: User) {
//Xây dựng thêm một hàm xác thực value có đang bị trống không?
fun validate(user: User, value: String, fieldName: String) {
if (value.isEmpty()) {
throw IllegalArgumentException("Can't save user ${user.id}: empty $fieldName")
} }
validate(user, user.name, "Name")
validate(user, user.address, "Address")
// Save user to the database
}
Trang 30Một ví dụ khác sử dụng hàm lồng hàm khi sử dụng các Collection có trong Kotlin
//khởi tạo một danh sách với kiểu dữ liệu là chuỗi có 4 giá trị ban đầu
val numbers = listOf("one", "two", "three", "four")
//Sử dụng một hàm filter để lọc dữ liệu từ danh sách ban đầu ra một danh dánh sách mới
val longerThan3 = numbers.filter { it.length > 3 }
f) Đa nền tảng
Với tham vọng lớn là sử dụng ngôn ngữ Kotlin có thể biên dịch ra nhiều nền tảng khác nhau: Android, IOS, Window, … Nhưng nó chỉ đang trong giai đoạn chạy thử nghiệm
Hình 1.12 Ứng dụng đa nền tảng của ngôn ngữ Kotlin
Trang 311.3 Firebase của Google
và đồng bộ dữ liệu theo thời gian thực cho các trò chơi trực tuyến
Những người sáng lập Firebase evolved đã tách biệt hai mảng trò chuyện và động bộ dữ liệu theo thời gian thực để phát triển Vào tháng 09 năm 2011, họ thành lập Firebase như là một công ty riêng biệt và đến tháng 4 năm 2012 ra mắt công chúng
Trong năm 2014, Firebase tung ra hai vụ mới là Firebase Hosting, Firebase Authentication Đến tháng 10 năm 2014, Firebase đã bị mua lại bởi Google và phát triển nhanh chóng thành một mảng lưới cung cấp nhiều dịch vụ tiện ích
Trang 321.3.3 Các dịch vụ của Firebase
Hình 1.14 Mô tả các dịch vụ trong Firebase
Thực chất các mảng dịch của Firebase được chia làm 3 mảng nhỏ Các mảng dịch này tuy rằng nó tách biệt về mặt hình thức lẫn nội dung, nhưng mỗi dịch vụ dường như có sự gắn kết với nhau giúp ứng dụng của lập trình viên hoạt động trơn tru, tăng cường tính bảo mật và tăng cường trải nghiệm người dùng
✓ Xây dựng cho ứng dụng
✓ Các dịch vụ giúp tăng tương tác cho ứng dụng
✓ Các dịch vụ kiểm tra và đánh giá chất lượng ứng dụng
Trong đề tài này tôi sẽ trình bày các dịch vụ xây dựng cho ứng dụng gồm có các dịch vụ sau:
Trang 33Hình 1.15 Dịch vụ xác thực người dùng qua dịch vụ thứ 3
1.3.3.2 Firebase Realtime Database
Firebase Realtime Database là một trong những dịch vụ ra đời sớm nhất và đạt được rất nhiều thành công Nó là một cơ sở dữ liệu NoQuery lưu dưới dạng chuỗi JSON Khi có một trường dữ liệu được thay đổi (thêm, xóa, sửa) lập tức các máy khách đều được đồng
bộ
Hình 1.16 Dịch vụ Firebasbe Realtime Database
Nếu thiết bị của máy khách đang trong tình trạng ngoại tuyến – không có kết nối mạng thì Firebase Realtime Database sử dụng bộ đệm cục bộ trên thiết bị để phục vụ và lưu trữ các thay đổi của máy khách Khi máy khách trở lại trạng thái trực tuyến, dữ liệu được lưu trong bộ đệm sẽ được tự động đồng bộ
Trang 341.3.3.3 Firebase Storage
Firebase Storage là một giải pháp giúp người dùng có thể tải lên các nội dung như hình ảnh và video từ các thiết bị Android, IOS, Web
Hình 1.17 Dịch vụ Storage của Firebase
1.4 Thư viện MPAndroidChart
1.4.1 Giới thiệu
MPAndroidChart là một thư viện hỗ trợ cho lập trình viên tạo các biểu đồ MPAndroidChart được xây dựng bằng ngôn ngữ Java Ngoài xây dựng các biểu đồ nó còn hỗ trợ việc chia tỷ lệ, tạo các hiệu ứng cho biểu đồ
Hình 1.18 Logo thư viện MPAndroidChart
Trang 351.4.2 Các dạng biểu đồ
MPAndroidChart hỗ trợ khá nhiều dạng biểu đồ Tùy vào mục đích và dữ liệu mà ta chọn loại biểu đồ thích hợp Dưới đây là một số ví dụ về các loại biểu đồ có trong thư viên MPAndroidChart
Đầu tiên sẽ là các dạng biểu đồ LineChart Dạng biểu đồ này thường được sử dụng thể hiển doanh thu, sự tăng trưởng của tháng, năm hoặc quý
Hình 1.19 Biểu đồ dạng LineChart trong thư viện MPAndroidChart(1)
Hình 1.20 Biểu đồ dạng LineChart trong thư viện MPAndroidChart(2)
Trang 36Dạng biểu đồ thứ hai là dạng BarChart Các biểu đồ dạng này thể hiển tốc độ tăng trưởng, doanh thu từng tháng, từng năm hoặc so sách doanh thu của hai năm
Hình 1.22 Biểu đồ dạng BarChart trong thư viện MPAndroidChart(1)
Hình 1.23 Biểu đồ dạng BarChart trong thư viện MPAndroidChart(2)
Tiếp theo là loại biểu đồ kết hợp giữa LineChart và BarChart được gọi là Combined-Chart Trong một số trường hợp người dùng muốn kết hợp dữ liệu và hiển thị đồng thời hai trong một Các biểu đồ loại này thường hướng tới mục đích thể hiện hai trường dữ liệu trở lên Ví dụ, tại vũng tàu hiển thị lượng khách du lịch, doanh thu của từng tháng
Hình 1.24 Biểu đồ dạng Combined-Chart trong thư viện MPAndroidChart
Trang 37Dạng biểu đồ tiếp theo là PieChart Loại biểu đồ này thường được sử dụng khi thể hiển số phần doanh thu trong bốn quý Từ đó thể hiển quý nào chiểm doanh thu cao nhất, thấp nhất
Hình 1.25 Biểu đồ dạng PieChart trong thư viện MPAndroidChart
1.5 Thư viện ZXing
✓ Dễ dàng sử dụng khi ZXing được khởi tạo thông qua Intent
✓ Lập trình viên dễ dàng tùy chỉnh lại giao diện quét mã
✓ Chế độ quét mã có thể thay đổi theo chiều ngang hoặc dọc
✓ Thời gian khởi động nhanh vì được quản lý trong background thread
Trang 381.5.2 Lịch sử hình thành
ZXing được xây dựng tại Nhật Bản vào năm 1994, nó được sử dụng để theo dõi các bộ phận trong sản xuất xe Ngày nay, ZXing được sử dụng để định danh trong các sản phẩm, vật dụng trong đời sống nhằm lưu trữ và truy xuất diễn ra dễ dàng
ZXing khi được truy xuất sẽ trả về nội dung mà người đã tạo trước đó Nó có thể là đoạn text, một dãy số hoặc thậm chí là đoạn text có cấu trúc
Trang 39Chương 2 Phân tích hệ thống
2.1 Mô tả các chức năng chi tiết
2.1.1 Quản lý tài khoản trên Firebase Authenticator
Hình 2.1 Trang quản lý tài khoản của Firebase
Khi đăng nhập vào hệ thống trang web (https://console.firebase.google.com/) của Firebase
hỗ trợ cho admin có thể quản lý trực tiếp Còn với người dùng (user cho chủ thuê phòng) chỉ có
sử dụng được chức năng thêm tài khoản thông qua ứng dụng
Bảng 2.1 Bảng mô tả các chức năng có trong trang quản lý tài khoản Firebase
1 Thêm tài khoản Cho phép admin có thể tạo thêm một tài khoản mới
2 Khởi tạo lại mật
khẩu
Thực hiện tạo một mật khẩu mới cho tài khoản
3 Vô hiệu hóa tài
Trang 402.1.2 Quản lý cơ sở dữ liệu trên Firebase Realtime Database
Hình 2.2 Trang quản lý cơ sở dữ liệu Firebase Realtime Database
Tại chức năng này, khi đăng nhập vào hệ thống web của Firebase hỗ trợ cho admin quản
lý trực tiếp Còn user cho chủ thuê phòng thông qua ứng dụng có thể thêm, sửa và xóa cơ sở dữ liệu Riêng user của người thuê phòng chỉ đọc được dữ liệu thông qua ứng dụng
Bảng 2.2 Bảng mô tả chức năng của trang quản lý cơ sở dữ liệu
1 Thêm Cho phép thêm dữ liệu vào cơ sở dữ liệu
2 Xóa Cho phép xóa dữ liệu vĩnh viễn trong cơ sở dữ liệu
3 Cập nhật Cho phép cập nhật dữ liệu trong cơ sở dữ liệu
4 Xuất dữ liệu Xuất dữ liệu ra dưới dạng JSON
5 Nhập dữ liệu Nhập dữ liệu dưới dạng JSON vào cơ sở dữ liệu