Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 56

TÀI LIỆU DỰ ÁN

QUẢN LÝ THƯ VIỆN - LIBMANA

GIẢNG VIÊN : TRẦN THỊ HƯỜNG


HỌC VIÊN : LÊ NHẬT DUY
LỚP/MSSV/KỲ : CP18102/PS26023/FA20

JANUARY 3, 2023
PHƯƠNG NAM LIBRARY
MỤC LỤC
1 Giới thiệu dự án 3
1.1 Giới thiệu PNLib 3
1.2 Yêu cầu của PNLib 3
1.3 Lập kế hoạch dự án 3
2 Phân tích yêu cầu khách hàng 3
2.1 Sơ đồ Use Case 3
2.2 Đặc tả yêu cầu hệ thống (SRS) 3
2.2.1 Quản lý THÀNH VIÊN 4
2.2.2 Quản lý LOẠI SÁCH 4
2.2.3 Quản lý SÁCH 4
2.2.4 Quản lý PHIẾU MƯỢN 4
2.2.5 thống kê 4
2.2.6 Đăng nhập 4
2.2.7 Đổi mật khẩu 4
2.3 Sơ đồ triển khai và yêu cầu hệ thống 4
2.3.1 Sơ đồ triển khai 4
2.3.2 Yêu cầu hệ thống 5
3 Thiết kế ứng dụng 5
3.1 Mô hình công nghệ ứng dụng 5
3.2 Thực thể 5
3.2.1 Sơ đồ quan hệ thực thể (ERD) 5
3.2.2 Chi tiết thực thể 6
3.3 Giao diện 7
3.3.1 Sơ đồ tổ chức giao diện 7
3.3.2 Giao diện MÀN HÌNH CHÍNH 7
3.3.3 Giao diện quản lý 8
3.3.4 Các giao diện hỗ trợ khác 10
4 Thực hiện dự án 11
4.1 Tạo giao diện 11
4.1.1 Màn hình chính (MainActivity) 11
4.1.2 Các màn hình quản lý 12
4.1.3 Màn hình thống kê top 10 (fragment_top) 13
4.1.4 Màn hình thống kê doanh thu (fragment_doanh_thu) 13
4.1.5 Các giao diện hỗ trợ khác 13
4.2 Tạo CSDL với SQLITE 14
4.2.1 Sơ đồ quan hệ 14
4.2.2 Chi tiết các bảng 15
4.3 Lập trình CSDL (SQLiteOpenHelper+Model+DAO) 16
4.3.1 SQLiteOpenHelper 16
4.3.2 Model Class và DAO 16
4.4 Lập trình chức năng 17
4.4.1 Màn hình chính (MainActivity) 17
4.4.2 Các giao diện hỗ trợ 18
4.4.3 Các màn hình quản lý 18
4.4.4 MÀN HÌNH THỐNG KÊ 18
5 Kiểm thử phần mềm và sửa lỗi 19
5.1 LoginActivity 19
5.2 AddUserFragment 19
5.3 … 19
6 Đóng gói và triển khai 19
6.1 Sản phẩm phần mềm 19
6.2 Hướng dẫn cài đặt 19
7 KẾT LUẬN 20
7.1 Khó khăn 20
7.2 Thuận lợi 20
1 GIỚI THIỆU DỰ ÁN
1.1 GIỚI THIỆU PNLIB
Công việc quản lí thư viện trở thành một chuỗi công việc rất vất vả và tốn
nhiều công sức. Vì vậy mà PNLib sẽ giúp cho việc quản lí thư viện trở nên đơn
giản.
 Đặc biệt và có tính chính xác cao. PNLib với chức năng tạo tài khoản, đăng
nhập đăng xuất, quản lí loại sách và loại sách, quản lí phiếu mượn, quản lí thành
viên, quản lí thủ thư, thống kê 10 sách bán chạy nhất, doanh thu.

1.2 YÊU CẦU CỦA PNLIB


1.3 LẬP KẾ HOẠCH DỰ ÁN
 Nghiệp vụ:
Quản lí: thành viên, sách, loại sách, phiếu mượn.
Tổng hợp: top, doanh thu.
 Bảo mật:
Phải có đăng nhập(account).
Admin: tất cả.
Thủ thư: không được tạo tài khoản người dùng.
 Hệ thống:
Android
SQLite
JDK 1.8+
Có thể hoàn thành 90% yêu cầu của khách hàng

TT HẠNG MỤC BẮT ĐẦU KẾT THÚC KẾT QUẢ


1 Phân tích yêu cầu khách hàng 03/01/2023 05/01/2023 Hoàn thành
1.1 Vẽ sơ đồ use cases 03/01/2023 05/01/2023 Hoàn thành

2 Thiết kế ứng dụng 03/01/2023 05/01/2023 Hoàn thành


2.1 Thiết kế mô hình công nghệ 03/01/2023 05/01/2023 Hoàn thành
3 Thực hiện dự án 03/01/2023 05/01/2023 Hoàn thành
3.1 Tạo giao diện 03/01/2023 05/01/2023 Hoàn thành

4 Kiểm thử
4.1 Xây dựng kịch bảng kiểm thử

5 Đóng gói & triển khai


5.1 Đóng gói sản phẩm

2 PHÂN TÍCH YÊU CẦU KHÁCH HÀNG


2.1 SƠ ĐỒ USE CASE
2.2 ĐẶC TẢ YÊU CẦU HỆ THỐNG (SRS)
2.2.1 QUẢN LÝ THÀNH VIÊN
 MÔ TẢ CHỨC NĂNG:
Chức năng quản lý thành viên được sử dụng để tạo :
1. Yêu cầu của cho mỗi thành viên
2. Thêm thành viên mới, 
3. Cập nhật thông tin
4. Xóa thành viên đã tồn tại.

 DỮ LIỆU LIÊN QUAN:


Thông tin của mỗi thành viên gồm: họ tên thành viên, năm sinh thành
viên.
 ĐỐI TƯỢNG SỬ DỤNG:
Sau khi đăng nhập thì tất cả người dùng có thể sử dụng chức năng này.
2.2.2 QUẢN LÝ LOẠI SÁCH
 Mô tả chức năng:
Chức năng này được dùng để quản lí thông tin loại sách. Chức năng này liệt kê danh sách
loại sách, xem thông tin chi tiết cũ. Thêm mới loại sách, cập nhật thông tin hoặc xóa loại
sách cũ.
 Dữ liệu quan trọng:
Thông tin của mỗi loại sách gồm: mã loại sách tên loại sách
 Đối tượng sử dụng:
Admin, thủ thư.

2.2.3 QUẢN LÝ SÁCH


 Mô tả chức năng:
Chức năng này được dùng để quản lí thông tin sách. Chức năng này liệt kê
danh sách các sách, xem thông tin chi tiết cũ. Thêm mới sách, cập nhật thông
tin hoặc xóa sách cũ.
 Dữ liệu quan trọng:
Thông tin của mỗi sách gồm: mã sách, mã loại sách, giá thuế.
 Đối tượng sử dụng:
Admin, thủ thư.
2.2.4 QUẢN LÝ PHIẾU MƯỢN
 Mô tả chức năng:
Chức năng này được dùng để quản lí thông phiếu mượn. Chức năng này liệt kê
danh sách phiếu mượn, xem thông tin chi tiết cũ. Thêm mới phiếu mượn, cập
nhật thông tin hoặc xóa phiếu mượn cũ.
 Dữ liệu quan trọng:
Thông tin của mỗi phiếu mượn gồm: mã phiếu mượn, mã sách , mã loại sách,
mã thủ thư, ngày, tiền thuê, trả sách.
 Đối tượng sử dụng:
Admin

2.2.5 THỐNG KÊ
 Mô tả chức năng:
Chức năng này dùng để thống kê doanh thu và top 10 sách thịnh hành nhất.
 Dữ liệu quan trong:
 Đối tưởng sử dụng:
Sau khi đăng nhập mọi người có thể sử dụng chức năng này.
2.2.6 ĐĂNG NHẬP
 Mô tả chức năng:
Chức năng này cho phải ai đã được admin cung cấp tài khoản có thể đăng nhập
và sử dụng từ chức năng cơ bản đến nâng cao.
 Dữ liệu quan trọng: tài khoản , mật khẩu.
 Đối tưởng sử dụng: Tất cả mọi người.
2.2.7 ĐỔI MẬT KHẨU
 Mô tả chức năng:
Chức năng này cho phải ai đã được admin cung cấp tài khoản có thể đăng nhập
và đổi mật khẩu.
 Dữ liệu quan trọng: tài khoản , mật khẩu.
 Đối tưởng sử dụng: người sở hữu tài khoản của chính mình
2.3 SƠ ĐỒ TRIỂN KHAI VÀ YÊU CẦU HỆ THỐNG
2.3.1 SƠ ĐỒ TRIỂN KHAI
2.3.2 YÊU CẦU HỆ THỐNG

3 THIẾT KẾ ỨNG DỤNG


3.1 MÔ HÌNH CÔNG NGHỆ ỨNG DỤNG
3.2 THỰC THỂ
3.2.1 SƠ ĐỒ QUAN HỆ THỰC THỂ (ERD)
3.2.2 CHI TIẾT THỰC THỂ
3.2.2.1 Thực thể Thủ Thư

THUỘC TÍNH KIỂU DỮ MÔ TẢ


LIỆU

MaTT String Mã thủ thư


MatKhau String Mật khẩu
HoTen String Họ và tên thủ thư
3.2.2.2 Thực thể Phiếu Mượn

THUỘC TÍNH KIỂU DỮ MÔ TẢ


LIỆU

MaPhieuMuon String Mã phiếu mượn


MaTV String Mã thành viên
MaTT String Mã thủ thư
MaSach String Mã sách
Ngay date Ngày mượn
TienThue int Tiền thuê
TraSach date Ngày trả sách
3.2.2.3 Thực thể Thành viên

THUỘC TÍNH KIỂU DỮ MÔ TẢ


LIỆU

MaTV String Mã thành viên


HoTen String Họ và tên
NamSinh date Năm Sinh

3.2.2.4 Thực thể Loại Sách

THUỘC TÍNH KIỂU DỮ MÔ TẢ


LIỆU

MaLoaiSach String Mã loại sách


TenLoaiSach String Tên loại sách
3.2.2.5 Thực thể Sách

THUỘC TÍNH KIỂU DỮ MÔ TẢ


LIỆU

MaSach String Mã sách


TenSach String Tên Sách
GiaThue Int GiaThue
MaLoaiSach String Mã loại sách

3.3 GIAO DIỆN


3.3.1 SƠ ĐỒ TỔ CHỨC GIAO DIỆN
3.3.2 GIAO DIỆN MÀN HÌNH CHÍNH
GIAO DIỆN:
MÔ TẢ HOẠT ĐỘNG:

TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG


1 Navigation Vuốt từ trái/ Show Navigation Drawer
Drawer Click Menu icon
2 [nav_PhieuMuon] Click Chuyển Fragment_PhieuMuon
3 [nav_LoaiSach] Click Chuyển Fragment_LoaiSach
4 [nav_Sach] Click Chuyển Fragment_Sach
5 [nav_thànhviên] Click Chuyển Fragment_Thanhvien

3.3.3 GIAO DIỆN QUẢN LÝ


3.3.3.1 Màn hình quản lý Thành Viên
GIAO DIỆN
MÔ TẢ HOẠT ĐỘNG
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 btnPen Click Hiện dialog thông tin người dùng
2 btnXoa Click Hiện dialog xoá
3.3.3.2 Màn hình quản lý Loại Sách
GIAO DIỆN:

MÔ TẢ HOẠT ĐỘNG:
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 BTNADD CLICK HIỆN DIALOG THÔNG TIN VÀ THÊM VÀO FRAGMENT SÁCH
2

3.3.3.3Màn hình quản lý Sách


GIAO DIỆN:

MÔ TẢ HOẠT ĐỘNG:
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 BTNTRA CLICK HIỆN DIALOG THÔNG TIN VÀ XOÁ KHỎI FRAGMENT
2
3.3.3.4Màn hình quản lý Phiếu Mượn
GIAO DIỆN:

MÔ TẢ HOẠT ĐỘNG:
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 BTNADD CLICK HIỆN DIALOG THÔNG TIN VÀ THÊM VÀO LIST
2

3.3.3.5Màn hình thống kê


GIAO DIỆN:
MÔ TẢ HOẠT ĐỘNG:
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 TXTSORT CLICK SẮP XẾP LẠI DOANH THU THEO THỨ TỰ GIẢM DẦN

2 TXTLICH CLICK HIỂN THỊ CALENDARVIEW


3 BTNADD CLICK SHOW DIALOG THÊM THÔNG TIN DOANH THU MỚI

3.3.4 CÁC GIAO DIỆN HỖ TRỢ KHÁC


3.3.3.3 Màn hình chào
GIAO DIỆN
MÔ TẢ HOẠT ĐỘNG
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 BTNSTART CLICK CHUYỂN VỀ MÀN HÌNH LOGIN
2
3.3.4.2 Màn hình đăng nhập
GIAO DIỆN:

MÔ TẢ HOẠT ĐỘNG
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 TXTREGIS CLICK CHUYỂN VỀ MÀN HÌNH ĐĂNG KÍ

2 BTNLOGIN CLICK CHUYỂN VỀ MÀN HÌNH CHÍNH


3.3.4.2.1 Màn hình đăng kí
GIAO DIỆN:

MÔ TẢ HOẠT ĐỘNG
TT @ID SỰ KIỆN MÔ TẢ HOẠT ĐỘNG
1 BTNSIGNUP CLICK TẠO TÀI KHOẢN VÀ VỀ LẠI MÀN HÌNH LOGIN

2 BTNBACK CLICK QUAY VỀ MÀN HÌNH LOGIN


4 THỰC HIỆN DỰ ÁN
4.1 TẠO GIAO DIỆN

4.1.1MÀN HÌNH CHÍNH (MAINACTIVITY)


GIAO DIỆN

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH

DRAWERLAYOUT DRAWER_LAYOUT LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"
LINEARLAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

TOOLBAR TOOBAR LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="WRAP CONTENT"

FRAMELAYOUT FLCONTENT LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

NAVIGATIONVIEW NVVIEW MENU="@MENU/MENU"


HEADERLAYOUT="@LAYOUT/ HEADER_LAYOUT"

4.1.2CÁC MÀN HÌNH QUẢN LÝ


4.1.2.1 Màn hình quản lý Phiếu mượn (fragment_phieu_muon)

ĐẶT TÊN CÁC ĐIỀU KHIỂN


VIEW ID CÁC THUỘC TÍNH

RELATVELAYOUT RELATVELAYOUT LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

RECYCLERVIEW RECYCLERPHIEUMUON LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

FLOATING ACTIONBUTTUN FLOATADD LAYOUT_WIDTH="WRAP_CONTENT"


LAYOUT_HEIGHT=" WRAP_CONTENT "
4.1.2.1 Màn hình quản lý Loại sách (fragment_loai_sach)

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH

LINEARLAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT=" WRAP_CONTENT ""

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "

EDIT TEXT EDTLOAISACH LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT=" WRAP_CONTENT ""

BUTTON BTNTHEM LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT=" WRAP_CONTENT ""

BUTTON BTNSUA LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT=" WRAP_CONTENT ""

CARDVIEW CARDVIEW LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "

RECYCLERVIEW RECYCLERLOAISACH LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"
4.1.2.1 Màn hình quản lý Sách (fragment_sach)
GIAO DIỆN

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH


RELATVELAYOUT RELATVELAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

RECYCLERVIEW RECYCLERSACH LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

FLOATING ACTIONBUTTUN FLOATADD LAYOUT_WIDTH="WRAP_CONTENT"


LAYOUT_HEIGHT=" WRAP_CONTENT "

4.1.2.1 Màn hình quản lý Thành viên (fragment_thanh_vien)


GIAO DIỆN

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH

RELATVELAYOUT RELATVELAYOUT LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

RECYCLERVIEW RECYCLERTHANHVIEN LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

FLOATING ACTIONBUTTUN FLOATADD LAYOUT_WIDTH="WRAP_CONTENT"


LAYOUT_HEIGHT=" WRAP_CONTENT "

4.1.2 MÀN HÌNH THỐNG KÊ TOP 10 (FRAGMENT_TOP)

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH

LINEARLAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT=" WRAP_CONTENT ""
RECYCLERVIEW RECYCLERTOP10 LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

4.1.2 MÀN HÌNH THỐNG KÊ DOANH THU (FRAGMENT_DOANH_THU)

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH

LINEARLAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT=" WRAP_CONTENT ""

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "

EDIT TEXT EDTSTART LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT=" WRAP_CONTENT ""

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "
EDIT TEXT EDTEND LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT=" WRAP_CONTENT ""

BUTTON BTNTHONGKE LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT=" WRAP_CONTENT ""

TEXTVIEW TXTKETQUA

4.1.2 CÁC GIAO DIỆN HỖ TRỢ KHÁC


4.1.2.1 Màn hình chào (activity_splash_screen)

5 ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH


LINEARLAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

IMAGEVIEW IVLOGO LAYOUT_WIDTH="WRAP_CONTENT"


LAYOUT_HEIGHT=" WRAP_CONTENT "

IMAGEVIEW IVLOGO LAYOUT_WIDTH="WRAP_CONTENT"


LAYOUT_HEIGHT=" WRAP_CONTENT "

4.1.2.1 Màn hình đăng nhập (activity_login)


GIAO DIỆN
ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH

CONSTRAINLAYOUT CONSTRAINLAYOUT LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "

EDIT TEXT EDTUSERNAME LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT=" WRAP_CONTENT ""

EDIT TEXT EDTPASSWORD LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT=" WRAP_CONTENT ""

BUTTON BTNLOGIN LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

IMAGEVIEW IMGVIEW LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "

TEXTVIEW LAYOUT_WIDTH="WRAP_CONTENT"
LAYOUT_HEIGHT=" WRAP_CONTENT "
4.1.2.1 Màn hình Thêm thủ thư (fragment_add_user)
GIAO DIỆN

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH


LINEARLAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

EDITTEXT EDTUSERNAME LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"
EDITTEXT EDTPASSWORD LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

BUTTON BTNTHEM LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

BUTTON BTNHUY LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

4.1.5.4Dialog đổi mật khẩu (fragment_change_pass)


GIAO DIỆN

ĐẶT ID CÁC VIEW

VIEW ID CÁC THUỘC TÍNH


CONSTRAINLAYOUT CONSTRAINLAYOUT LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

IMAGEVIEW IMGVIEW LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

TEXTVIEW LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

EDITTEXT EDTPASSOLD LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

TEXTVIEW LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

EDITTEXT EDTPASSWORDNEW LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

TEXTVIEW LAYOUT_WIDTH="MATCH_PARENT"
LAYOUT_HEIGHT="MATCH_PARENT"

EDITTEXT EDTRENEWPASS LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

BUTTON BTNDOIMATKHAU LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"

BUTTON BTNHUY LAYOUT_WIDTH="MATCH_PARENT"


LAYOUT_HEIGHT="MATCH_PARENT"
4.2 TẠO CSDL VỚI SQLITE
4.2.2 SƠ ĐỒ QUAN HỆ

4.2.3 CHI TIẾT CÁC BẢNG


4.2.3.1 Bảng ThuThu
CẤU TRÚC BẢNG
TÊN CỘT KIỂU DỮ LIỆU RÀNG BUỘC MÔ TẢ
MaTT TEXT PK Mã thủ thư
MatKhau TEXT NOT NULL Mật khẩu
HoTen TEXT NOT NULL Họ và tên

MÃ LỆNH TẠO BẢNG


//Tao bang Thu Thu
String createTableThuThu=
"create table ThuThu (" +
"maTT TEXT PRIMARY KEY, " +
"hoTen TEXT NOT NULL, " +
"matKhau TEXT NOT NULL)";
db.execSQL(createTableThuThu);

CÂU LỆNH SQL CƠ BẢN

sqLiteDatabase.execSQL("INSERT INTO THUTHU VALUES('thuthu-1','abc1','123'),


('thuthu2',’abc2’ ,'123')")
sqLiteDatabase.update("THUTHU ", values, "matt=?", new String[]{obj. matt });
sqLiteDatabase.delete("THUTHU ", "maTT=?", new String[]{id});
sqLiteDatabase.execSQL(“SELECT * FROM THUTHU WHERE matt=?", new String[]
{obj. matt });
sqLiteDatabase.execSQL(“SELECT * FROM matt”);

4.2.3.2 Bảng ThanhVien


CẤU TRÚC BẢNG
TÊN CỘT KIỂU DỮ LIỆU RÀNG BUỘC MÔ TẢ
MaTV Interger PK,AL Mã thành viên
MatKhau Text NOT NULL Mật khẩu
HoTen Text NOTNULL Họ và tên thành viên

MÃ LỆNH TẠO BẢNG


String createTableThanhVien =
"create table THANHVIEN (" +
"matv TEXT PRIMARY KEY, " +
"hoTen TEXT NOT NULL, " +
"namsinh TEXT NOT NULL)";
db.execSQL(createTableThanhVien);
CÂU LỆNH SQL CƠ BẢN
sqLiteDatabase.execSQL("INSERT INTO THANHVIEN VALUES(1,'Nguyễn Quốc
Duy','1999'),(2,'Nguyễn Hoàng Đăng Khôi','2000')");

sqLiteDatabase.update("THANHVIEN ", values, "matv=?", new String[]


{obj.matv});
sqLiteDatabase.delete("THANHVIEN ", "maTT=?", new String[]{id});

sqLiteDatabase.execSQL(“SELECT * FROM THANHVIEN WHERE maTT=?",


new String[]{obj.maTT});
sqLiteDatabase.execSQL(“SELECT * FROM ThuThu”);

4.2.3.3 Bảng Phiếu mượn


MÃ LỆNH TẠO BẢNG
String createTablePhieuMuon =
"create table PHIEUMUON (" +
"mapm TEXT PRIMARY KEY, " +
“matv integer references THANHVIEN(matv) ” +
“matt text references THUTHU(matt)” +
“ masach integer references SACH(masach)” +
“ngay text” +
“trasach integer” +
“tienthue integer”)”;
db.execSQL(createTablePhieumuon);

CÂU LỆNH SQL CƠ BẢN


sqLiteDatabase.execSQL("INSERT INTO PHIEUMUON
VALUES(1,1,'thuthu1',1,'02/02/2023',1,5000),
(2,1,'thuthu1',3,'03/08/2023',0,6000),(3,2,'thuthu2',1,'05/02/2023',1,5000)");
sqLiteDatabase.update("PHIEUMUON ", values, "mapm=?", new String[]
{obj.matv});
sqLiteDatabase.delete("PHIEUMUON ", "mapm=?", new String[]{id});
sqLiteDatabase.execSQL(“SELECT * FROM PHIEUMUON WHERE
mapm=?", new String[]{obj. mapm });
sqLiteDatabase.execSQL(“SELECT * FROM PhieuMuon”);
4.2.3.4 Bảng Loại Sách
MÃ LỆNH TẠO BẢNG
String dbLoai = "CREATE TABLE LOAISACH(maloai integer primary key
autoincrement ,tenloai text)";
sqLiteDatabase.execSQL(dbLoai);
CÂU LỆNH SQL CƠ BẢN
sqLiteDatabase.execSQL("INSERT INTO LOAISACH
VALUES(1,'Hoạt Hình'),(2,'Ý Tưởng Làm Giàu'),(3,'Tiếng
Anh')");
sqLiteDatabase.update("LOAISACH ", values, "maloai=?",
new String[]{obj.matv});
sqLiteDatabase.delete("LOAISACH ", " maloai =?", new
String[]{id});
sqLiteDatabase.execSQL(“SELECT * FROM LOAISACH
WHERE maloai = ?", new String[]{obj. maloai });
sqLiteDatabase.execSQL(“SELECT * FROM LoaiSach”);

4.2.3.5 Bảng Sách


MÃ LỆNH TẠO BẢNG
String dbSach = "CREATE TABLE SACH(masach integer primary key
autoincrement , tensach text, giathue integer ,maloai integer references
LOAISACH(maloai))";
sqLiteDatabase.execSQL(dbSach);
sqLiteDatabase.execSQL("INSERT INTO SACH
VALUES(1,'Doraemon',5000,1),(2,'Shark Phú',2000,2),(3,'Thành thạo tiếng
anh',6000,3)");
sqLiteDatabase.update("LOAISACH ", values, "maloai=?", new String[]
{obj.matv});
sqLiteDatabase.delete("LOAISACH ", " maloai =?", new String[]{id});
sqLiteDatabase.execSQL(“SELECT * FROM LOAISACH WHERE maloai = ?",
new String[]{obj. maloai });
sqLiteDatabase.execSQL(“SELECT * FROM LoaiSach”);

4.3 LẬP TRÌNH CSDL


(SQLITEOPENHELPER+MODEL+DAO)
4.3.2 SQLITEOPENHELPER
MÔ TẢ:
SQLiteOpenHelper là lớp tiện ích hỗ trợ lập trình Android với SQLite. Khi kế thừ
Lớp này cần ghi đè 2 phương thức được mô tả trong phần hướng dẫn sử dụng sau
đây.
HƯỚNG DẪN SỬ DỤNG:
✔ onCreate(SQLiteDatabase db): chứa các lệnh tạo table (có thể chèn dữ liệu
test)
✔ onUpgrade(SQLiteDatabase db, int i, int i1): chứa các lệnh xoá table và gọi
lại onCreate khi nâng version
CODE:
public void onCreate(SQLiteDatabase db) {
//nơi tạo bảng
String dbThuThu="CREATE TABLE THUTHU(matt text primary key, hoten text,
matkhau text)";
db.execSQL(dbThuThu);
String dbThanhVien ="CREATE TABLE THANHVIEN(matv integer primary key
autoincrement, hoten text, namsinh text)";
db.execSQL(dbThanhVien);
String dbLoai = "CREATE TABLE LOAISACH(maloai integer primary key
autoincrement, tenloai text)";
db.execSQL(dbLoai);
String dbSach = "CREATE TABLE SACH(masach integer primary key
autoincrement, tensach text, giathue integer, maloai integer references
LOAISACH(maloai))";
db.execSQL(dbSach);
String dbPhieuMuon = "CREATE TABLE PHIEUMUON(mapm integer primary key
autoincrement, matv integer references THANHVIEN(matv),matt text references
THUTHU(matt), masach integer references SACH(masach), ngay text, trasach
integer, tienthue integer)";
db.execSQL(dbPhieuMuon);

//datamau

db.execSQL("INSERT INTO LOAISACH VALUES (1,'Thiếu nhi'),(2,'Tình cảm'),


(3,'Giáo khoa')");
db.execSQL("INSERT INTO SACH VALUES(1,'Hãy đợi đấy', 2500 , 1),(2,'Hãy đợi
đấy2', 1000 , 1),(3,'Hãy đợi đấy3', 2000 , 3)");
db.execSQL("INSERT INTO THUTHU VALUES('thuthu01','duy1','abc1'),
('thuthu02','duy2','abc2'),('thuthu03','duy3','abc3')");
db.execSQL("INSERT INTO THANHVIEN VALUES(1,'Lê','2000'),(2,'Lê
Nhật','2002'),(3,'Lê Nhậtt','2004')");

//trả sách : 1:đã trả,0:chưa trả

db.execSQL("INSERT INTO PHIEUMUON


VALUES(1,1,'thuthu01',1,'19/03/2022',1,2500),
(2,1,'thuthu01',3,'19/03/2022',0,2000),
(3,2,'thuthu02',1,'19/03/2022',1,2500)");
//muốn ăn db mới thì đổi version hoặc xoá ứng dụng

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//chay khi version thay đổi
if(oldVersion!= newVersion){
db.execSQL("DROP TABLE IF EXISTS THUTHU");
db.execSQL("DROP TABLE IF EXISTS THANHVIEN");
db.execSQL("DROP TABLE IF EXISTS LOAISACH");
db.execSQL("DROP TABLE IF EXISTS SACH");
db.execSQL("DROP TABLE IF EXISTS PHIEUMUON");
onCreate(db);
}
}
}
4.3.3 MODEL CLASS VÀ DAO
4.3.3.1 ThuThu và ThuThuDAO

DIỄN GIẢI
THÀNH MÔ TẢ
PHẦN

ThuThu Là lớp thực thể mô tả dữ liệu thủ thư


ThuThuDAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với bảng
ThuThu

4.3.3.2 ThanhVien & ThanhVienDAO

THÀNH PHẦN MÔ TẢ
ThanhVien Là lớp thực thể mô tả dữ liệu Thành viên
ThanhVien DAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
bảng ThanhVien
4.3.3.3 LoaiSach & LoaiSachDAO

THÀNH PHẦN MÔ TẢ
LoaiSach Là lớp thực thể mô tả dữ liệu loại sách
LoaiSach DAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
bảng LoaiSach

4.3.3.4 Sach & SachDAO

THÀNH MÔ TẢ
PHẦN

Sach Là lớp thực thể mô tả dữ liệu sách


Sach DAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với bảng
Sach

4.3.3.5 PhieuMuon & PhieuMuonDAO

THÀNH PHẦN MÔ TẢ
PhieuMuon Là lớp thực thể mô tả dữ liệu phiếu mượn
PhieuMuon DAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
bảng PhieuMuon

4.3.3.6 ThongKe &ThongKeDAO


THÀNH PHẦN MÔ TẢ
ThongKe Là lớp thực thể mô tả dữ liệu thống kê
ThongKe DAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
bảng ThongKe

4.4 LẬP TRÌNH CHỨC NĂNG


4.4.2 MÀN HÌNH CHÍNH (MAINACTIVITY)
TT PHƯƠNG THỨC/ SỰ KIỆN MÔ TẢ
1 setNavigationItemSelectedListener( Điều hướng Navigation
)
2 setSupportActionBar() Sử dụng toolbar
3 .setNegativeButton Sử dụng Button Cập nhật
4 .setPositiveButton Sử dụng Button Hủy
5 .setOnClickListener Sử dụng AleartDiolog
6 .setFlags Sử dụng Flags
7 .setView Sử dụng view
8 .setHomeAsUpIndicator Sử dụng Actionbar
9 .setDisplayHomeAsUpEnabled Sử dụng bên trái Actionbar

4.4.3 CÁC GIAO DIỆN HỖ TRỢ


4.4.3.1 Màn hình chào (SplashScreenActivity)
TT PHƯƠNG THỨC MÔ TẢ
1 .setContentView Sử dụng ContentLayout

4.4.3.2 Màn hình đăng nhập (LoginActivity)


TT PHƯƠNG THỨC MÔ TẢ
1 . .setOnClickListene Sử dụng Login
r
4.4.3.3 Màn hình đổi mật khẩu (ChangePassFragment)
TT PHƯƠNG THỨC MÔ TẢ
1 .setOnClickListener Sử dụng AleartDiolog

4.4.4 CÁC MÀN HÌNH QUẢN LÝ


4.4.4.1 ThanhVienFragment
TT PHƯƠNG THỨC MÔ TẢ
1 loadData () cập nhật dữ liệu lên RecyclerView
2 .setNegativeButton Sử dụng Button Cập nhật
3 .setPositiveButton Sử dụng Button Hủy
4 .showDialog Sử dụng dialog thêm Thành viên

4.4.4.2 LoaiSachFragment
TT PHƯƠNG THỨC MÔ TẢ
1 loadData () cập nhật dữ liệu lên RecyclerView
2 .setOnClickListener Sử dụng Button Thêm
3 .setOnClickListener Sử dụng Button Sữa
4 .setAdapter Sử dụng Adapter

4.4.4.3 SachFragment
TT PHƯƠNG THỨC MÔ TẢ
1 loadData () cập nhật dữ liệu lên RecyclerView
2 .setOnClickListener Sử dụng Button Thêm
3 .setOnClickListener Sử dụng Button Sữa
4 .setAdapter Sử dụng Adapter

4.4.4.4 PhieuMuonFragment
TT PHƯƠNG THỨC MÔ TẢ
1 loadData () cập nhật dữ liệu lên RecyclerView
showDialog () Sử dụng dialog thêm Phiếu Mượn
.setNegativeButton Sử dụng Button Cập nhật
.setPositiveButton Sử dụng Button Hủy
.getDataThanhVien() Sử dung Spinner Thành Viên
.getDataSach() Sử dung Spinner Sách
.themphieumuon() Sử dụng SharePreference thêm Phiếu Mượn

4.4.5 MÀN HÌNH THỐNG KÊ


4.4.5.1 TopFragment
TT PHƯƠNG THỨC MÔ TẢ
1 .setAdapter Sử dụng Adapter

4.4.5.2 DoanhThuFragment
TT PHƯƠNG THỨC MÔ TẢ
1 .setOnClickListener Sử dụng EditText Ngày Bắt đầu
.setOnClickListener Sử dụng EditText Ngày Kết thúc
.setOnClickListener Sử dụng Button Thống Kê

5 KIỂM THỬ PHẦN MỀM VÀ SỬA LỖI


5.1 LOGINACTIVITY
T MÔ TẢ TÌNH HUỐNG DỮ LIỆU MẪU KẾT QUẢ TRÔNG ĐỢI FIX
H
1 Đăng nhập để trống tên và mật Thông báo: Yêu cầu nhập
khẩu Username và PassWord
2 Đăng nhập sai tên Teo, admin Thông báo: Sai Username
3 Đăng nhập sai mật khẩu admin, add Thông báo: Sai PassWord
4 Đăng nhập đúng với quyền thủ thư Tài Thông báo: Đăng nhập thành
Khoản :thuhu2 công MainActivity: hiển thị
quyền Thủ Thư
Mật khẩu: 1234
5 Đăng nhập đúng với quyền admin Tài Thông báo: Đăng nhập thành
Khoản :thuhu1 công MainActivity hiển thị
quyền Admin
Mật khẩu: 123
6 Giao diện Khác với thiết kế , giống chức
năng

5.2 ADDLOAISACHFRAGMENT
T MÔ TẢ TÌNH HUỐNG DỮ LIỆU MẪU KẾT QUẢ TRÔNG ĐỢI FIX
H
1 Thêm để trống tên Thông báo : Thêm thất bại
2 Sửa đê trống tên Thông báo : Thay đổi thất bại
3 Thêm đúng tên loại Sách English Thông báo : Thêm Thành công
và sửa tên Loại Sách
4 Thêm loại sách đã tồn tại Thông báo: Đã có loại sách tồn
tại
5 Xóa Loại Sách Thông báo : Xóa loại Sách
Thành công
6 Xóa Sách Thất bại Thông báo :Xóa thất bại
7 Giao diện Giống với thiết kế

5.3 ADDPHIEUMUONFRAMENT
T MÔ TẢ TÌNH HUỐNG DỮ LIỆU MẪU KẾT QUẢ TRÔNG ĐỢI FIX
H
1 Thêm để trống tên Thông báo : Thêm thất bại
2 Sửa đê trống tên Thông báo : Thay đổi thất bại
3 Thêm đúng tên Phiếu mượn thuthu1 Thông báo : Thêm Thành công
và sửa tên Phiếu Mượn
4 Trả Sách thành công Thông báo : Trả Sách thành
công và sữa Phieu mượn
5 Trả Sách thất bại Thông báo : Trả Sách thất bại
6 Giao diện Giống với thiết kế

5.4 ADDSACH
T MÔ TẢ TÌNH HUỐNG DỮ LIỆU MẪU KẾT QUẢ TRÔNG ĐỢI FIX
H
1 Thêm để trống tên Thông báo : Thêm Sách thất bại
2 Thêm Sách đã tồn tại Thông báo : Sách đã tồn tại
3 Xóa Sách Thành công Thông báo :Xóa thành công và
cập nhật lại Sách
Xóa Sách Thất bại Thông báo :Xóa thất bại
4 Sửa đê trống tên Thông báo : Thay đổi Sách thất
bại
4 Thêm đúng tên Sách Doraemon Thông báo : Thêm Sách Thành
công và sửa tên Phiếu Mượn
5 Giao diện Giống với thiết kế

5.5 ADDTHANHVIEN
T MÔ TẢ TÌNH HUỐNG DỮ LIỆU MẪU KẾT QUẢ TRÔNG ĐỢI FIX
H
1 Thêm để trống tên Thông báo : Thêm Thành viên
thất bại
2 Thêm Thành viên đã tồn tại Thông báo : Thành viên đã tồn
tại
3 Xóa Thành Viên Thành công Thông báo :Xóa thành công và
cập nhật lại DS Thành viên
4 Xóa Thành Viên Thất bại Thông báo :Xóa thất bại
5 Sửa đê trống tên Thông báo : Thay đổi Thành
viên thất bại
6 Sửa Thành Viên thành công Thông báo thành viên thành
công và cập nhật lại DS Thành
viên
7 Thêm đúng tên Thành viên Lê Nhật Duy Thông báo : Thêm Thành viên
Thành công và sửa tên Thành
viên
8 Giao diện Giống với thiết kế

5.6 ĐỔI MẬT KHẨU


T MÔ TẢ TÌNH HUỐNG DỮ LIỆU MẪU KẾT QUẢ TRÔNG ĐỢI FIX
H
1 Nhập mật khẩu cũ để trống Thông báo :Bạn cần
nhập mật khẩu cũ
2 Nhập mật khẩu cũ sai 123444 Thông báo :Mật khẩu
cũ không đúng
3 Nhập mật khẩu mới để trống Thông báo :Bạn cần
nhập mật khẩu mới
4 Nhập mật khẩu cũ sai 12 Thông báo: Nhập sai
mật khẩu mới
5 Nhập đúng 123 Thông báo : Đổi mật
khẩu thành công

6 ĐÓNG GÓI VÀ TRIỂN KHAI


6.1 SẢN PHẨM PHẦN MỀM
TT THÀNH PHẦN MÔ TẢ
1 LibMana.apk https://drive.google.com/drive/folders/
157-vhKiqXA9cLRR-
v5DuS40_xBo433v1?usp=sharing
2 Readme.txt Hướng dẫn cài đặt
3 Guide.docx Hướng dẫn sử dụng
7 KẾT LUẬN
7.1 KHÓ KHĂN
Khó khăn trong quá trình thiết kế slqite và phần giới hạn chức năng của thủ thư,
thành viên.
Thời gian còn hạn chế
Kiến thức về figma chưa được thông thạo

7.2 THUẬN LỢI


Thuận lợi trong việc thết kế layout, adapter,DAO và các fragment vì đã được giảng
viên giảng dạy khá kỹ ở môn android cơ bản và thiết kế giao diện trên android.

You might also like