1. Trang chủ
  2. » Luận Văn - Báo Cáo

(Luận văn) ứng dụng quản lý phòng trọ

146 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 146
Dung lượng 5,36 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÀ RỊA-VŨNG TÀU lu ĐỒ ÁN TỐT NGHIỆP an n va Ứng dụng “Quản lý phòng trọ” p ie gh tn to oa nl w Trình độ đào tạo: Đại học quy d Ngành: Cơng nghệ thơng tin lu nf va an Chuyên ngành: Lập trình ứng dụng di động game z at nh oi lm ul Giảng viên hướng dẫn: ThS Nguyễn Thị Minh Nương Lê Thành Trung gm @ Lớp: DH17LT m co l MSSV: 17031538 z Sinh viên thực hiện: an Lu n va ac th si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu LỜI CAM ĐOAN Đồ án trình nghiên cứu xây dựng cá nhân tôi, hướng dẫn giáo viên ThS Nguyễn Thị Minh Nương Các số liệu, kết luận nghiên cứu trình bày đồ án tơi tự tìm hiểu hoàn toàn trung thực Ngoài ra, báo cáo có sử dụng số nguồn tài liệu tham khảo trích dẫn nguồn thích rõ ràng Tơi xin hồn tồn chịu trách nhiệm lời cam đoan Vũng Tàu,Ngày 01 tháng 01 năm 2021 Sinh viên thực lu an va n Lê Thành Trung p ie gh tn to d oa nl w nf va an lu z at nh oi lm ul z m co l gm @ an Lu n va Sinh Viên:Lê Thành Trung ac th GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu LỜI CẢM ƠN Trong khoảng thời gian học tập Trường Đại Học Bà Rịa – Vũng Tàu, nhận hướng dẫn, giúp đỡ quý báu thầy Đ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ừ giảng, kiến thức thực tế thầy cô Tôi xin gửi lời cảm ơn chân thành tri ân sâu sắc quý thầy cô Trường Đại Học Bà Rịa Vũng Tàu nói chung thầy cô khoa Công Nghệ Kỹ Thuật – Nông Nghiệp – Cơng Nghệ Cao trường nói riêng tạo điều kiện thuận lợi để tơi hồn thành tốt đồ án Đặc biệt 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 hồn thành đồ án tốt nghiệp lu an Tơi xin kính chúc q thầy có nhiều sức khỏe, gặt hái nhiều thành công n va đường giảng dạy, chúc Trường Đại Học Bà Rịa – Vũng Tàu lựa chọn hàng đầu Với điều kiện thời gian kinh nghiệm hạn chế nên báo cáo tránh ie gh tn to hệ sinh viên để học tập nâng cao trình độ thân p thiếu sót Tơi mong nhận góp ý kiến q thầy để tơi oa nl w 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! d nf va an lu z at nh oi lm ul z m co l gm @ an Lu n va Sinh Viên:Lê Thành Trung ac th GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN lu an n va tn to gh p ie nl w d oa an lu nf va Người hướng dẫn z at nh oi lm ul Vũng Tàu, ngày … tháng … năm 20… z gm @ m co l ThS Nguyễn Thị Minh Nương an Lu n va Sinh Viên:Lê Thành Trung ac th GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu MỤ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 Cơ sở lý thuyết 1.1 Hệ điều hành Android 1.1.1 Giới thiệu Android lu an 1.1.2 Lịch sử phát triển Android va n 1.1.3 Các thành phần ứng dụng gh tn to 1.2 Ngôn ngữ Kotlin p ie 1.2.1 Giới thiệu Kotlin w 1.2.2 Kotlin Android oa nl 1.2.3 Lịch sử phát triển Kotlin d 1.2.4 Ưu nhược điểm Kotlin so với Java an lu nf va 1.3 Firebase Google 13 lm ul 1.3.1 Giới thiệu 13 1.3.2 Lịch sử phát triển 13 z at nh oi 1.3.3 Các dịch vụ Firebase 14 1.4 Thư viện MPAndroidChart 16 z @ 1.4.1 Giới thiệu 16 gm co l 1.4.2 Các dạng biểu đồ 17 m 1.5 Thư viện ZXing 19 an Lu 1.5.1 Giới thiệu 19 Sinh Viên:Lê Thành Trung ac th GVHD: ThS Nguyễn Thị Minh Nương n va 1.5.2 Lịch sử hình thành 20 si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Chương Phân tích hệ thống 21 2.1 Mô tả chức chi tiết 21 2.1.1 Quản lý tài khoản Firebase Authenticator 21 2.1.2 Quản lý sở liệu Firebase Realtime Database 22 2.1.3 Quản lý nội dung phương tiện người dùng 23 2.2 Xác định 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 lu an 2.3 Đặc tả use case 26 va n 2.3.1 Đăng nhập vào hệ thống 26 gh tn to 2.3.2 Thống kê 28 p ie 2.3.3 Tìm kiếm liệu 29 w 2.3.4 Xem thông tin tài khoản 30 oa nl 2.3.5 Cập nhật liệu 31 d 2.4 Xây dựng sở liệu 32 an lu nf va 2.4.1 Các thực thể thuộc tính 32 lm ul 2.4.2 Sơ đồ ER 34 2.4.3 Sơ đồ quan hệ 34 z at nh oi Chương Xây dựng phần mềm Motel Management 35 3.1 Danh sách hình 35 z @ 3.2 Màn hình chờ 36 gm co l 3.3 Đăng nhập hệ thống 38 m 3.4 Màn hình đăng ký tài khoản 42 an Lu 3.5 Màn hình quên mật 49 Sinh Viên:Lê Thành Trung ac th GVHD: ThS Nguyễn Thị Minh Nương n va 3.6 Màn hình 52 si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu 3.7 Màn hình khu vực quản lý – Dashboard 57 3.8 Màn hình đổi mật 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 số điện nước 91 lu an 3.16 Giao diện popup hiển thị thơng tin phịng 93 va n 3.17 Giao diện popup hiển thị thơng tin hóa đơn 95 to gh tn Chương Xây dựng phần mềm Search Motel Information 97 p ie 4.1 Danh sách hình 97 w 4.2 Màn hình chờ 97 d oa nl 4.3 Màn hình quét mã truy cập hệ thống 98 an lu 4.4 Màn hình 101 nf va 4.4.1 Thẻ home – Màn hình thơng tin phịng 102 lm ul 4.4.2 Thẻ bills – Màn hình danh sách hóa đơn 102 4.4.3 Thẻ lodgers - Màn hình danh sách thành viên 103 z at nh oi 4.4.4 Thẻ report – Màn hình thống kê 105 Chương Kết luận 106 z gm @ 5.1 Kết đạt 106 co l 5.2 Hướng phát triển 106 m Tài liệu tham khảo 107 an Lu Phụ lục 109 n va Sinh Viên:Lê Thành Trung ac th GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt Miêu tả Cmnd Chứng minh nhân dân Cccd Căn cước công dân lu an n va p ie gh tn to d oa nl w nf va an lu z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th i n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu DANH MỤC BẢNG Bảng 2.1 Bảng mô tả chức có trang quản lý tài khoản Firebase 21 Bảng 2.2 Bảng mô tả chức trang quản lý sở liệu 22 Bảng 2.3 Mô tả chức trang quản lý liệu Firebase Storage 23 Bảng 2.4 Bảng mơ tả thuộc tính thực thể 32 Bảng 3.1 Danh sách hình phần mềm Motel Management 35 Bảng 3.2 Bảng mơ tả hình chờ 36 Bảng 3.3 Bảng mơ tả hình đăng nhập 39 Bảng 3.4 Bảng mơ tả hình đăng kí 43 Bảng 3.5 Bảng mơ tả hình khôi phục mật 49 lu Bảng 3.6 Bảng mô tả hình 52 an Bảng 3.7 Mô tả chi tiết dòng danh sách phòng 54 n va Bảng 3.8 Mơ tả chức hình dashboard 58 to tn Bảng 3.9 Bảng mơ tả hình thơng tin tài khoản 59 ie gh Bảng 3.10 Bảng mô tả danh sách hóa đơn 61 p Bảng 3.11 Mô tả liệu item tiêu đề hóa đơn 62 w Bảng 3.12 Mơ tả liệu item hóa đơn 63 oa nl Bảng 3.13 Bảng mô tả hình danh sách dịch vụ 64 d Bảng 3.14 Mô tả thông tin item chi tiết dịch vụ 64 lu nf va an Bảng 3.15 Bảng mơ tả hình thống kê 66 Bảng 3.16 Mô tả liệu hình thơng tin phịng 70 lm ul Bảng 3.17 Mô tả liệu hình danh sách hóa đơn phòng 73 z at nh oi Bảng 3.18 Mơ tả liệu hình danh sách thành viên phòng 74 Bảng 3.19 Mô tả liệu item thành viên danh sách thành viên phòng 75 z Bảng 3.20 Mơ tả liệu hình thống kê điện nước 76 @ gm Bảng 3.21 Mô tả liệu hình chi tiết hóa đơn 78 co l Bảng 3.22 Mơ tả liệu hình chi tiết thành viên phòng 80 Bảng 3.23 Bảng mơ tả hình thêm thành viên phòng 83 m an Lu Bảng 3.24 Bảng mơ tả hình tạo dịch vụ 85 Bảng 3.25 Bảng mô tả hình thêm hóa đơn 88 Sinh Viên:Lê Thành Trung ac th ii n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Bảng 3.26 Bảng mơ tả thiết kế hình popup 3.54 94 Bảng 4.1 Bảng mơ tả hình ứng dụng Search Motel Information 97 Bảng 4.2 Mô tả chi tiết hình quét mã Qr code 98 lu an n va p ie gh tn to d oa nl w nf va an lu z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th iii n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Hình phụ lục Cấu trúc thư mục anim Trong thư mục gồm có hai class BaseViewAnimator, ZoomInDownAnimator Hai lu class có ý nghĩa class trừu tượng hiệu ứng, class lại class định nghĩa hiệu an ứng n va gh tn to Code class BaseViewAnimator sau: p ie abstract class BaseViewAnimator { val DURATION: Long = 1000 private var mAnimatorSet: AnimatorSet? = null private var mDuration = DURATION private var mRepeatTimes = private var mRepeatMode = ValueAnimator.RESTART init { mAnimatorSet = AnimatorSet() } protected abstract fun prepare(target: View) open fun setTarget(target: View): BaseViewAnimator? { reset(target) prepare(target) return this } open fun animate() { start() } open fun restart() { mAnimatorSet = mAnimatorSet!!.clone() start() } /** * reset the view to default status * * @param target */ open fun reset(target: View?) { ViewCompat.setAlpha(target, 1f) ViewCompat.setScaleX(target, 1f) ViewCompat.setScaleY(target, 1f) ViewCompat.setTranslationX(target, 0f) ViewCompat.setTranslationY(target, 0f) ViewCompat.setRotation(target, 0f) ViewCompat.setRotationY(target, 0f) ViewCompat.setRotationX(target, 0f) } /** * start to animate */ open fun start() { d oa nl w nf va an lu z at nh oi lm ul z m co an Lu n va Sinh Viên:Lê Thành Trung ac th 114 l gm @ GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu for (animator in mAnimatorSet!!.childAnimations) { if (animator is ValueAnimator) { animator.repeatCount = mRepeatTimes animator.repeatMode = mRepeatMode } } mAnimatorSet!!.duration = mDuration mAnimatorSet!!.start() lu an n va p ie gh tn to } open fun setDuration(duration: Long): BaseViewAnimator? { mDuration = duration return this } open fun setStartDelay(delay: Long): BaseViewAnimator? { getAnimatorAgent()!!.startDelay = delay return this } open fun getStartDelay(): Long { return mAnimatorSet!!.startDelay } open fun addAnimatorListener(l: Animator.AnimatorListener?): BaseViewAnimator? { mAnimatorSet!!.addListener(l) return this } open fun cancel() { mAnimatorSet!!.cancel() } open fun isRunning(): Boolean { return mAnimatorSet!!.isRunning } open fun isStarted(): Boolean { return mAnimatorSet!!.isStarted } open fun removeAnimatorListener(l: Animator.AnimatorListener) { mAnimatorSet!!.removeListener(l) } open fun removeAllListener() { mAnimatorSet!!.removeAllListeners() } open fun setInterpolator(interpolator: Interpolator): BaseViewAnimator { mAnimatorSet!!.interpolator = interpolator return this } open fun getDuration(): Long { return mDuration } open fun getAnimatorAgent(): AnimatorSet { return mAnimatorSet!! } open fun setRepeatTimes(repeatTimes: Int): BaseViewAnimator { mRepeatTimes = repeatTimes return this } open fun setRepeatMode(repeatMode: Int): BaseViewAnimator { mRepeatMode = repeatMode return this } d oa nl w nf va an lu z at nh oi lm ul } Code class ZoomInDownAnimator sau: z @ m co l gm class ZoomInDownAnimator: BaseViewAnimator() { override fun prepare(target: View) { getAnimatorAgent().playTogether( ObjectAnimator.ofFloat(target, "scaleX", 0.1f, 0.475f,1.0f), ObjectAnimator.ofFloat(target, "scaleY", 0.1f, 0.475f,1.0f), ObjectAnimator.ofFloat(target, "translationY", -target.bottom*1.0f, 60*1.0f,0f), ObjectAnimator.ofFloat(target, "alpha", 0.0f, 1.0f, 1.0f) ); } } an Lu Sinh Viên:Lê Thành Trung ac th 115 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Hình phụ lục Cấu trúc thư mục common Code class ValidationHelpers – có chức kiểm tra liệu đầu vào: lu an n va p ie gh tn to const val EMAIL_REGEX = "(?:[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#\$%&'*+/=?^_`{|}~]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][09]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])" const val MIN_CREDENTIAL_LENGTH = const val MIN_JOKE_LENGTH = 10 fun isEmailValid(email: String) = Pattern.matches(EMAIL_REGEX, email) fun isPasswordValid(password: String) = password.length >= MIN_CREDENTIAL_LENGTH fun isUsernameValid(username: String) = username.length >= MIN_CREDENTIAL_LENGTH fun arePasswordsSame(password: String, repeatPassword: String) = isPasswordValid(password) && isPasswordValid(repeatPassword) && password == repeatPassword fun isValidJoke(jokeText: String) = jokeText.length >= MIN_JOKE_LENGTH d oa nl w nf va an lu z at nh oi lm ul Hình phụ lục Cấu trúc thư mục event Code Class PaginationListener: z @ m co l gm abstract class PaginationListener(private val layoutManager: LinearLayoutManager): RecyclerView.OnScrollListener() { companion object{ const val PAGE_START = const val PAGE_SIZE = 10 } /** * Set scrolling threshold here (for now i'm assuming 10 item in one page) */ override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { super.onScrollStateChanged(recyclerView, newState) } override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) an Lu Sinh Viên:Lê Thành Trung ac th 116 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu val visibleItemCount = layoutManager.childCount val totalItemCount = layoutManager.itemCount val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition() if (!isLoading() && !isLastPage()) { if (visibleItemCount + firstVisibleItemPosition >= totalItemCount && firstVisibleItemPosition >= && totalItemCount >= PAGE_SIZE) { loadMoreItems() } } } protected abstract fun loadMoreItems() abstract fun isLastPage(): Boolean abstract fun isLoading(): Boolean } lu an n va p ie gh tn to w Hình phụ lục Cấu trúc thư mục fragment d oa nl Code class BottomSheetInfoBill, class BottomSheetInfoRoom xử lý tương tự: nf va an lu class BottomSheetInfoBill(val data: Bill): BottomSheetDialogFragment() { private lateinit var txtRoomName: TextView private lateinit var txtDescription: TextView private lateinit var txtTimeCreate: TextView private lateinit var txtTimePaid: TextView private lateinit var txtTotalBill: TextView private lateinit var txtBillStatus: TextView private lateinit var imgIconBill:ImageView private lateinit var btnPayment:Button private lateinit var btnClose:Button override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view:View=inflater.inflate(R.layout.bottom_sheet_info_bill, container, false) txtRoomName=view.findViewById(R.id.txtRoomName) txtDescription=view.findViewById(R.id.txtDescription) txtTimeCreate=view.findViewById(R.id.txtTimeCreate) txtTimePaid=view.findViewById(R.id.txtTimePaid) txtTotalBill=view.findViewById(R.id.txtTotalBill) txtBillStatus=view.findViewById(R.id.txtBillStatus) imgIconBill=view.findViewById(R.id.imgIconBill) btnPayment=view.findViewById(R.id.btnPayment) btnClose=view.findViewById(R.id.btnClose) return view } override fun getTheme(): Int = R.style.BottomSheetDialog override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) addControls() z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 117 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu lu addEvents() } private fun addControls() { if (data.id.isNotEmpty()){ val roomOfBill:Room=SplashScreenActivity.listRooms.filter { p->p.id==data.roomId }[0] txtRoomName.text=roomOfBill.roomName if (data.description.isNotEmpty()){ txtDescription.text=data.description } txtTimeCreate.text= MyString.convertLongToTime(data.createDateBill,"dd-MM-yyyy HH:mm") if (data.dateOfPayment!=0L){ txtTimePaid.text= MyString.convertLongToTime(data.createDateBill,"dd-MM-yyyy HH:mm") }else{ txtBillStatus.text="Unpaid" txtBillStatus.setTextColor(resources.getColor(R.color.colorRed)) btnPayment.visibility=View.VISIBLE } txtTotalBill.text=MyString.convertNumberFormat("%,.0f", data.total).plus( "đ" ) val totalBill:ArrayList = SplashScreenActivity.listDetailBills.filter { p->p.billId==data.id } as ArrayList if (context!=null){ if (totalBill.size==1){ an n va p ie gh tn to val service: Service = (SplashScreenActivity.listServices.filter { p>p.id==totalBill[0].serviceId })[0] val uri:String = "@drawable/".plus(service.imageName) // where myresource (without the extension) is the file var imageResource:Int = requireContext().resources.getIdentifier(uri, null, requireContext().packageName) val res: Drawable = requireContext().resources.getDrawable(imageResource, null) imgIconBill.setImageDrawable(res) }else{ imgIconBill.setImageResource(R.drawable.ic_bill) } } } } private fun addEvents() { btnClose.setOnClickListener { dialog?.dismiss() } btnPayment.setOnClickListener { if (data.dateOfPayment!=0L||data.id.isEmpty()){ return@setOnClickListener } var database:DatabaseReference= Firebase.database.reference val dateOfPayment:Long= Calendar.getInstance().timeInMillis data.dateOfPayment=dateOfPayment val myRef: DatabaseReference = database.child(Configs.TableName_Bill) myRef.child(data.id).setValue(data).addOnCompleteListener {task-> if (task.isSuccessful){ dialog?.dismiss() Toast.makeText(it.context,"Payment Successful!!",Toast.LENGTH_LONG).show() /* Snackbar.make(it, "Payment Successful!!", Snackbar.LENGTH_LONG) setAction("Action", null).show()*/ }else{ dialog?.dismiss() Toast.makeText(it.context,"Payment fail!!",Toast.LENGTH_LONG).show() /*Snackbar.make(it, "Payment fail!!", Snackbar.LENGTH_LONG) setAction("Action", null).show()*/ } } } } d oa nl w nf va an lu z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 118 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu lu an n va p ie gh tn to d oa nl w nf va an lu z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 119 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Code class HomeFragment, class ListBillFragment, ListLodgerFragment, ReportFragment xử lý tương tự: lu an n va p ie gh tn to class HomeFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null private lateinit var roomSelected: Room override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_home, container, false) } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) (requireActivity() as AppCompatActivity).supportActionBar?.hide() addControls() addEvents() } private fun addEvents() { btnGenerateQRCode.setOnClickListener { startActivity(Intent(activity, GenerateQrCodeActivity::class.java)) } imgEditRoom.setOnClickListener { val intent:Intent=Intent(activity, RoomActivity::class.java) intent.putExtra("RoomSelected", InfoRoomActivity.roomSelected) startActivity(intent) } btnAddLodger.setOnClickListener { val intent:Intent=Intent(activity, LodgerActivity::class.java) startActivity(intent) } btnConfirmCheckOut.setOnClickListener { val totalBillUnpaid:Int=(SplashScreenActivity.listBills.filter { p>(p.roomId==roomSelected.id&&p.dateOfPayment==0L) }).size if (totalBillUnpaid>0){ val builder = AlertDialog.Builder(context) builder.setTitle("Error!") builder.setMessage("Please payment all bill(unpaid)!") builder.setPositiveButton("Go to payment", DialogInterface.OnClickListener { dialog, which -> dialog.dismiss() val intent: Intent = Intent(context, BillActivity::class.java) intent.putExtra("RoomSelected", InfoRoomActivity.roomSelected) startActivity(intent) }) builder.setNegativeButton("No", DialogInterface.OnClickListener { dialog, which -> dialog.dismiss() }) builder.create().show() return@setOnClickListener } InfoRoomActivity.roomSelected.isFull=false val myRef2: DatabaseReference = Firebase.database.reference.child(Configs.TableName_Room) d oa nl w nf va an lu z at nh oi lm ul z co l gm @ m myRef2.child(InfoRoomActivity.roomSelected.id).setValue(InfoRoomActivity.roomSelected).addOnCo mpleteListener { task -> if (task.isSuccessful) { Toast.makeText(activity, "Room status is empty", Toast.LENGTH_LONG).show() } } val listLodger:ArrayList = SplashScreenActivity.listLodgers.filter { p>p.roomId==InfoRoomActivity.roomSelected.id } as ArrayList an Lu Sinh Viên:Lê Thành Trung ac th 120 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu lu an n va p ie gh tn to for (lodger:Lodger in listLodger){ val myRef3: DatabaseReference = Firebase.database.reference.child(Configs.TableName_Lodger) lodger.roomId="" myRef3.child(lodger.id).setValue(lodger) } val ft: FragmentTransaction = requireFragmentManager().beginTransaction() ft.detach(this).attach(this).commit() } } private fun addControls() { roomSelected = if (InfoRoomActivity.roomSelected!=null){ InfoRoomActivity.roomSelected }else{ Room() } txtRoomName.text=roomSelected.roomName txtRoomRate.text= MyString.Companion.convertNumberFormat("%,d", roomSelected.roomRate).plus( " đ" ) startCountAnimation(txtElectricityIndex, 0, roomSelected.electricityIndex) startCountAnimation(txtWaterIndex, 0, roomSelected.waterIndex) /*txtElectricityIndex.text=roomSelected.electricityIndex.toString() txtWaterIndex.text=roomSelected.waterIndex.toString()*/ if (!roomSelected.isFull){ txtRoomStatus.text= "Empty" // imgIconRoom.setImageResource(R.drawable.ic_room_empty) btnConfirmCheckOut.visibility=View.GONE btnAddLodger.visibility=View.VISIBLE } val totalLodger:Int=(SplashScreenActivity.listLodgers.filter { p>p.roomId==roomSelected.id }).size startCountAnimation(txtTotalLodger, 0, totalLodger) val totalBill:Int=(SplashScreenActivity.listBills.filter { p>p.roomId==roomSelected.id }).size startCountAnimation(txtTotalBill, 0, totalBill) txtRoomId.text=roomSelected.id val totalBillUnpaid:Int=(SplashScreenActivity.listBills.filter { p>(p.roomId==roomSelected.id&&p.dateOfPayment==0L) }).size startCountAnimation(txtTotalBillUnPaid, 0, totalBillUnpaid) } private fun startCountAnimation( view: TextView, numberStart: Int = 0, numberEnd: Int = 600, duration: Long = 1000L ) { val animator = ValueAnimator.ofInt(numberStart, numberEnd) //0 is number, 600 is max number animator.duration = duration //Duration is in milliseconds animator.addUpdateListener { animation -> view.text = animation.animatedValue.toString() } animator.start() } companion object { /** // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = HomeFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } } d oa nl w nf va an lu z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 121 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu lu an va n Hình phụ lục Cấu trúc thư mục model gh tn to Bảng phụ lục Bảng mô tả cấu trúc thư mục hình phụ lục Ý nghĩa STT Tên Class p ie Class trừu tượng hóa hóa đơn Bill nl w Class trừu tượng hóa chi tiết hóa đơn DetailBill DetailRoom Lodger Room Class trừu tượng hóa phịng Service Class trừu tượng hóa dịch vụ d oa nf va an lu Class trừu tượng hóa chi tiết phịng Class trừu tượng hóa người thuê phòng z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 122 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Code class Bill, class DetailBill, DetailRoom, Lodger, Room, Service xử lý tương tự: lu an n va p ie gh tn to class Bill:Serializable { private var _id:String="" private var _billName:String="" private var _createDateBill:Long = private var _dateOfPayment:Long =0 private var _total:Double=0.0 private var _roomId:String="" var _isSection:Boolean=false private var _description:String="" constructor(){} constructor(_id: String,_billName:String, _createDateBill: Long, _dateOfPayment: Long, _roomId: String,_isSection:Boolean=false,_total:Double, _description:String="") { this._id = _id this._billName = _billName this._createDateBill = _createDateBill this._dateOfPayment = _dateOfPayment this._roomId = _roomId this._isSection=_isSection this._total=_total this._description=_description } var id:String get() { return _id } set(value) { this._id=value } var billName:String get() { return _billName } set(value) { this._billName=value } var description:String get() { return _description } set(value) { this._description=value } var createDateBill: Long get() { return _createDateBill } set(value) { this._createDateBill=value } var total: Double get() { return _total } set(value) { this._total=value } var dateOfPayment: Long get() { return _dateOfPayment } set(value) { this._dateOfPayment=value } var roomId:String get() { return _roomId } set(value) { this._roomId=value d oa nl w nf va an lu z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 123 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu } override fun toString(): String { return this._billName } fun copy(bill:Bill, _isSection:Boolean=false):Bill{ return Bill(bill.id,bill.billName,bill.createDateBill,bill.dateOfPayment,bill.roomId,_isSection,bill total,bill.description) } } lu an n va p ie gh tn to d oa nl w nf va an lu Hình phụ lục Cấu trúc thư mục activity - hình z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 124 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Bảng phụ lục Bảng mô tả cấu trúc thư mục hình phụ lục Ý nghĩa STT Tên Class AddBillActivity Class xử lý hình thêm hóa đơn AddDetailBill Class xử lý hình thêm chi tiết hóa đơn AddServiceActivity Class xử lý hình thêm/ cập nhật dịch vụ BillActivity Class xử lý hình thêm/ cập nhật hóa đơn DashBoardActivity Class xử lý hình quản trị viên DetailBillActivity Class xử lý hình chi tiết hóa đơn DetailLodgerActivity Class xử lý hình thơng tin chi tiết người thuê GenerateQrCodeActivity Class xử lý hình khởi tạo mã Qr code InfoRoomActivity Class xử lý hình thơng tin phịng LodgerActivity Class xử lý hình người th phịng w Class xử lý hình đăng nhập lu an n va p ie gh tn to LoginActivity d oa nl 11 10 MainActivity Class xử lý hình 13 ProfileActivity 14 RegisterActivity 15 ReportActivity 16 ResetPasswordActivity 17 RoomActivity Class xử lý hình thêm/ cập nhật phịng 18 ServiceActivity Class xử lý hình danh sách dịch vụ 19 SplashScreenActivity Class xử lý hình chờ 20 WriteIndexActivity Class xử lý hình ghi số điện nước an lu 12 nf va Class xử lý hình hiển thị thơng tin tài khoản z at nh oi lm ul Class xử lý hình tạo tài khoản Class xử lý hình thống kê Class xử lý hình khơi phục mật z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 125 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Phụ lục B Cấu trúc ứng dụng Search Motel Information lu an n va p ie gh tn to d oa nl w Hình phụ lục 10 Cấu trúc chung ứng dụng Search Motel Information nf va an lu z at nh oi lm ul z gm @ Hình phụ lục 11 Cấu trúc thư mục com.thanhtrung m co l Bảng phụ lục Bảng mơ tả cấu trúc thư mục hình phụ lục 11 Ý nghĩa an Lu STT Tên thư mục Sinh Viên:Lê Thành Trung ac th 126 n va GVHD: ThS Nguyễn Thị Minh Nương si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu lu an n va adapters Thư mục chứa class giúp giao tiếp View liệu hệ thống Từ hiển thị lên hình người dùng common Thư mục chứa class sử dụng chung cho dự án event Thư mục chứa class tạo kiện RecyclerView fragment Thư mục chứa class xử lý hình fragment models Thư mục chứa class đối tượng ứng dụng motelroomttlodger Thư mục chứa class xử lý hình os Thư mục chưa class liên quan đến đọc ghi file others Thư mục chứa class xử lý khác view Thư mục chứa class View tự tùy chỉnh để phù hợp với ứng dụng p ie gh tn to d oa nl w nf va an lu Hình phụ lục 12 Cấu trúc thư mục adapters z at nh oi lm ul z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 127 n GVHD: ThS Nguyễn Thị Minh Nương va Hình phụ lục 13 Cấu trúc thư mục common, event, fragment si Đồ án tốt nghiệp đại học – Khóa 20117-2021 Trường Đại Học Bà Rịa Vũng Tàu Hình phụ lục 14 Cấu trúc thư mục models lu an n va to p ie gh tn Hình phụ lục 15 Cấu trúc thư mục motelroomttlodger d oa nl w nf va an lu lm ul Hình phụ lục 16 Cấu trúc thư mục os, others, view z at nh oi z m co l gm @ an Lu Sinh Viên:Lê Thành Trung ac th 128 n va GVHD: ThS Nguyễn Thị Minh Nương si

Ngày đăng: 17/07/2023, 09:49

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w