TÀI LI U D ÁNỆỰ
GIẢNG VIÊN: NGUYỄN THỊ THANH XUÂN SINH VIÊN: ĐÀO TUẤN ĐIỆP – PS27897
Trang 2MỤC LỤC
2.2.5.1 Thống kê top 10 sản phẩm bán nhiều nhất 10
Trang 34.1.2.2 Màn hình quản lý Sản Phẩm (fragment_ san_pham) 39 4.1.2.3 Màn hình quản lý Chi tiết sản Phẩm (fragment_ct_san_pham) 41 4.1.2.4 Màn hình quản lý Danh mục sản phẩm (fragment_danh_muc) 43 4.1.2.5 Màn hình quản lý Giỏ hàng (fragment_gio_hang) 46 4.1.2.6 Màn hình quản lý Đơn hàng (fragment_don_hang) 48 4.1.2.7 Màn hình quản lý Bình luận (fragment_binh_luan) 50
Trang 44.3.2.3 ChiTietSanPham & ChiTietSanPhamDAO 64
Trang 67.2 THUẬN LỢI 81
Trang 71 GIỚI THIỆU DỰ ÁN
1.1GIỚI THIỆU RAU CỦ QUẢ XANH
Rau củ quả xanh là 1 website chuyên bán các loại thực phẩm, sản phẩm nông nghiệp sạch Chúng tôi hiểu rằng việc chọn lựa rau củ quả là một phần quan trọng của lối sống lành mạnh và chăm sóc sức khỏe cá nhân Vì vậy, trang web của chúng tôi không chỉ cung cấp sản phẩm tốt nhất mà còn cung cấp thông tin hữu ích về cách chọn lựa, bảo quản và nấu ăn các loại rau củ quả một cách tối ưu.
1.2YÊU CẦU CỦA RAU CỦ QUẢ XANH
Yêu cầu:
o Quản lý:
Quản lý các loại mặt hàng: thêm, xóa, sửa.
Quản lý hàng hóa, số lượng hàng hóa: tăng giảm số lượng, thêm giảm giá cho sản phẩm tồn kho.
Quản lý user: quản lý tên TK MK.
Quản lý các đơn hàng: Quản lý thông tin đơn hàng.
Admin có quyền tạo tài khoản Người dùng có quyền đổi mật khẩu.
Trang 85 Kiểm thử và sửa lỗi 05/06/2023 07/06/2023
5.1 Xây dựng kịch bản kiểm thử 05/06/2023 06/06/2023 Done 5.2 Hoàn tất kiểm thử và sửa lỗi 06/06/2023 07/07/2023 Done 6 Đóng gói & triển khai 12/06/2023 14/06/2023
6.2 Triển khai, hướng dẫn cài
Trang 92 PHÂN TÍCH YÊU CẦU KHÁCH HÀNG2.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 để
quản lý thông tin thành viên Chức năng này liệt kê danh sách thành viên, thêm, xóa, cập nhật thông tin thành viên và tìm kiếm thành viên theo tên.
DỮ LIỆU LIÊN QUAN: Thông tin của mỗi thành viên gồm: mã thành
viên, họ và tên, ngày sinh, địa chỉ.
ĐỐ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.
Trang 102.2.2 QUẢN LÝ LOẠI SẢN PHẨM, NGUỒN GỐC
MÔ TẢ CHỨC NĂNG: Chức năng quản lý loại sản phẩm được sử dụng để
quản lý thông tin sản phẩm, xuất xứ, nguồn gốc Chức năng này liệt kê danh sách các loại sản phẩm Thêm, xóa, cập nhật thông tin loại sản phẩm, nguồn gốc và tìm kiếm theo tên.
DỮ LIỆU LIÊN QUAN: Thông tin của mỗi loại sản phẩm, nguồn gốc gồm:
mã và tê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.3 QUẢN LÝ SẢN PHẨM
MÔ TẢ CHỨC NĂNG: Chức năng quản lý sản phẩm được sử dụng để
quản lý thông sản phẩm Chức năng này liệt kê danh sách các sản phẩm, thêm, xóa, cập nhật thông tin sản phẩm và tìm kiếm sản phẩm theo tên.
DỮ LIỆU LIÊN QUAN: Thông tin của mỗi sản phẩm bao gồm: tên sản
phẩm, giá, ngày nhập hàng, mô tả sản phẩm.
ĐỐ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.4 QUẢN LÝ NGƯỜI DÙNG
MÔ TẢ CHỨC NĂNG: Chức năng quản lý người dùng cho phép admin
quản lý danh sách người dùng Chức năng này liệt kê danh sách người dùng, thêm, xóa người dùng và tìm kiếm người dùng theo tài khoản.
DỮ LIỆU LIÊN QUAN: Thông tin của người dùng: mã người dùng, họ và
tên, email, số điện thoại, địa chỉ, tài khoản, mật khẩu.
ĐỐI TƯỢNG SỬ DỤNG: Admin. 2.2.5 THỐNG KÊ
2.2.5.1 Thống kê top 10 sản phẩm bán chạy nhất tháng
MÔ TẢ CHỨC NĂNG: Chức năng thống kê top 10 sản phẩm có lượt bán
Trang 11ĐỐI TƯỢNG SỬ DỤNG: Khi đăng nhập người dùng có thể xem.
2.2.6.1 Thống kê sản phẩm sắp hết HSD để sale
MÔ TẢ CHỨC NĂNG: Chức năng này thống kê sản phẩm có HSD < 3
ngày để sale
DỮ LIỆU LIÊN QUAN: Thông tin sản phẩm sắp hết hạn: Id sanpham, Tên
sản phẩm, giá, giá sale
ĐỐI TƯỢNG SỬ DỤNG: Admin 2.2.7 ĐĂNG NHẬP
MÔ TẢ CHỨC NĂNG: Chức năng đăng nhập cho phép người dùng đăng
nhập tài khoản để truy cập vào giao diện chính.
DỮ LIỆU LIÊN QUAN: Giao diện đăng nhập gồm: nơi nhập tài khoản,
mật khẩu, nút đăng nhập và nút quên mật khẩu.
ĐỐI TƯỢNG SỬ DỤNG: Sau khi admin tạo tài khoản thì người dùng có
thể sử dụng tài khoản để đăng nhập.
2.2.8 CẬP NHẬT THÔNG TIN NGƯỜI DÙNG
MÔ TẢ CHỨC NĂNG: Chức năng này cho phép người dùng cập nhật
thông tin.
DỮ LIỆU LIÊN QUAN: Thông tin của người dùng: mã người dùng (không
được thay đổi), họ và tên, email, avatar, tài khoản (không được thay đổi), mật khẩu.
ĐỐ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.3 SƠ ĐỒ TRIỂN KHAI VÀ YÊU CẦU HỆ THỐNG2.3.1 SƠ ĐỒ TRIỂN KHAI
2.3.2 YÊU CẦU HỆ THỐNG
Min SDK: 16 JDK: 1.8+ SQLite.
Trang 123 THIẾT KẾ ỨNG DỤNG
3.1 MÔ HÌNH CÔNG NGHỆ ỨNG DỤNG
GUI: Graphic User Interface: Thiết kế giao diện cho người sử dụng.
Business Logic Programming: Lập trình các chức năng nghiệp vụ trong ứng dụng.
o Controllers: Xử lý nghiệp vụ (Business Logic) o Entity, DAO: Thực thể và Data Access Object o SQLiteOpenHelper: Class hỗ trợ SQLite SQL: Database: Thiết kế CSDL cho ứng dụng.
Trang 133.2.2.1 USER
TÊN CỘTKIỂU DỮ
LIỆURÀNG BUỘC MÔ TẢ
AI Mã thành viên, khóa chính, tựsinh
Trang 143.2.2.2 SẢN PHẨM
TÊN CỘTKIỂU DỮ
LIỆURÀNG BUỘC MÔ TẢ
MaLoaiSach int PK, not null Mã loại sách, khóa chính, tự sinh
3.2.2.3 DANH MỤC
TÊN CỘTKIỂU DỮ
LIỆURÀNG BUỘC MÔ TẢ
Trang 153.2.2.4 ĐƠN HÀNG
TÊN CỘTKIỂU DỮ
LIỆURÀNG BUỘC MÔ TẢ
MaTG int PK, not null Mã tác giả, khóa chính, tự sinh
3.2.2.5 CHI TIẾT SẢN PHẨM
TÊN CỘT KIỂUDỮ
LIỆURÀNG BUỘC MÔ TẢ
MaSach int PK, not null Mã sách, khóa chính, tự sinh
Trang 163.2.2.6 GIỎ HÀNG
TÊN CỘT KIỂUDỮ
LIỆURÀNG BUỘC MÔ TẢ
tự sinh
3.2.2.7 BÌNH LUẬN
TÊN CỘT KIỂUDỮ
LIỆURÀNG BUỘC MÔ TẢ
Trang 17MaUser int PK, not null Mã user, khóa chính, tự sinh
3.3 GIAO DIỆN
3.3.1 SƠ ĐỒ TỔ CHỨC GIAO DIỆN
Trang 18Click Menu Show Navigation Drawer
Trang 19quanlythanhvie n
quanlyuser Click Chuyển FragmentUser 7 @+id/thongke Click Chuyển FragmentThongKe
3.3.3 GIAO DIỆN QUẢN LÝ
3.3.3.1 Màn hình Home
GIAO DIỆN
MÔ TẢ HOẠT ĐỘNG
TT@IDS KI NỰỆMÔ T HO T Đ NGẢẠỘ
Trang 20change_avatar Click Hiện dialog đổi avatar
3 @+id/update Click Hiện dialog cập nhật thông tin
Trang 21Ẩn nút thêm, trượt lên trên cùng hiện ra (không che nút xóa và sửa)
Hiện dialog xác nhận xóa Hiện dialog sửa phiếu mượn
Trang 23Ẩn nút thêm, trượt lên trên cùng hiện ra (không che nút xóa và sửa)
Hiện dialog xác nhận xóa Hiện dialog sửa sách.
3 @+id/search Click Tìm kiếm sách theo tên sách
MÀN HÌNH LO I SÁCHẠ
OGIAO DI NỆ
OMÔ T HO T Đ NGẢẠỘ
TT@IDS KI NỰỆMÔ T HO T Đ NGẢẠỘ
Trang 24Ẩn nút thêm, trượt lên trên cùng hiện ra (không che nút xóa và sửa)
Hiện dialog xác nhận xóa Hiện dialog sửa loại sách.
3 @+id/search Click Tìm kiếm loại sách theo tên
MÀN HÌNH TÁC GIẢ
OGIAO DI NỆ
Trang 25Ẩn nút thêm, trượt lên trên cùng hiện ra (không che nút xóa và sửa)
Hiện dialog xác nhận xóa Hiện dialog sửa tác giả 3 @+id/search Click Tìm kiếm tác giả theo tên
MÀN HÌNH NHÀ XU T B NẤẢ
Trang 26Ẩn nút thêm, trượt lên trên cùng hiện ra (không che nút xóa và sửa)
Hiện dialog xác nhận xóa Hiện dialog sửa NXB.
Trang 273 @+id/search Click Tìm kiếm NXB theo tên
Ẩn nút thêm, trượt lên trên cùng hiện ra (không che nút xóa và sửa)
Hiện dialog xác nhận xóa
Trang 28btnXoaTV Click Hiện dialog sửa thành viên. 3 @+id/search Click Tìm kiếm thành viên theo tên
Trang 293 @+id/search Click Tìm kiếm user theo username
menu_top10 Click Chuyển Fragment thống kê top 10 sáchcó doanh thu cao nhất.
Trang 314 @+id/btnLogin Click Nếu tài khoản mật khẩu chính xác chuyển đến màn hình chính, nếu sai báo
Trang 33Toolbar @+id/toolbar android:layout_width="match_parent"
Trang 35 ĐẶT TÊN CÁC ĐIỀU KHIỂN
LinearLayout @+id/
change_password android:layout_width="match_parent"android:layout_height="wrap_content" LinearLayout @+id/change_avatar android:layout_width="match_parent"
android:layout_height="wrap_content" LinearLayout @+id/update android:layout_width="match_parent"
android:layout_height="wrap_content"
Trang 36LinearLayout @+id/logout android:layout_width="match_parent" android:layout_height="wrap_content" RecyclerView @+id/
recyclerDanhMuc android:layout_width="match_parent"android:layout_height="300dp"
4.1.2.2 Màn hình quản lý Phiếu Mượn(fragment_phieu_muon)
GIAO DIỆN
Trang 37 ĐẶT TÊN CÁC ĐIỀU KHIỂN
Trang 38Button @+id/ThemPhieuMuon android:layout_width=" wrap_content"android:layout_height="wrap_content"
4.1.2.3 Màn hình quản lý Sách (fragment_sach)
GIAO DIỆN
Trang 39 ĐẶT TÊN CÁC ĐIỀU KHIỂN
Trang 40Button @+id/ThemSach android:layout_width=" wrap_content"android:layout_height="wrap_content"
4.1.2.4 Màn hình quản lý Loại Sách (fragment_loai_sach)
GIAO DIỆN
Trang 41 ĐẶT TÊN CÁC ĐIỀU KHIỂN
RecyclerView @+id/
recyclerLoaiSach android:layout_width="match_parent"android:layout_width="match_parent" ImageView @+id/btnSuaLoaiSach android:layout_width="36dp"
android:layout_height="36dp" ImageView @+id/ android:layout_width="36dp"
Trang 43ImageView @+id/btnXoaNXB android:layout_width="36dp" android:layout_height="36dp" FloatingAction
Button @+id/ThemNXB android:layout_width=" wrap_content"android:layout_height="wrap_content"
4.1.2.5 Màn hình quản lý Tác giả (fragment_tac_gia)
GIAO DIỆN
Trang 44 ĐẶT TÊN CÁC ĐIỀU KHIỂN
Trang 45Button @+id/ThemTG android:layout_width=" wrap_content"android:layout_height="wrap_content"
4.1.2.6 Màn hình quản lý Nhà xuất bản (fragment_nxb)
GIAO DIỆN
Trang 46 ĐẶT TÊN CÁC ĐIỀU KHIỂN
Trang 48 ĐẶT TÊN CÁC ĐIỀU KHIỂN
Trang 494.1.2.8 Màn hình quản lý User (fragment_user)
GIAO DIỆN
Trang 50 ĐẶT TÊN CÁC ĐIỀU KHIỂN
Trang 51frameLayoutThongKe android:layout_width="match_parent"android:layout_width="match_parent" BottomNavigat @+id/naviga android:layout_width="match_parent"
Trang 54 ĐẶT TÊN CÁC ĐIỀU KHIỂN
Trang 55Button @+id/btnLogin android:layout_width="150dp"
Trang 56String table_PhieuMuon=
"create table PhieuMuon (" +
"id_phieumuon INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
"id_user INTEGER NOT NULL, " + "id_tv INTEGER NOT NULL, " +
"id_sach INTEGER NOT NULL, " +
"ngay_thu INTEGER NOT NULL, " +
"thang_thu INTEGER NOT NULL, " +
"nam_thu INTEGER NOT NULL, " +
"trang_thai INTEGER NOT NULL, " +
"ngay_tra TEXT)";
CÂU L NH SQL C B NỆƠ Ả
db.insert("PhieuMuon", null, values);
db.update("PhieuMuon", values, "id_phieumuon=?", new String[]{obj.maPhieuMuon});
db.delete("PhieuMuon", "id_phieumuon=?", new String[]{obj.maPhieuMuon});
db.execSQL("SELECT * FROM PhieuMuon WHERE id_phieumuon=?" , newString[]{ obj.maPhieuMuon});
db.execSQL("SELECT * FROM PhieuMuon");
4.2.2.2 Bảng Sach
MÃ L NH T O B NGỆẠẢ
String table_Sach=
"create table Sach (" +
"id_sach INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
"ten_sach TEXT NOT NULL, " +
Trang 57"id_TG INTEGER NOT NULL, " +
"id_NXB INTEGER NOT NULL, " +
"id_loai INTEGER NOT NULL, " +
"gia_thue REAL NOT NULL)";db.execSQL(table_Sach);
CÂU L NH SQL C B NỆƠ Ả
db.insert("Sach", null, values);
db.update("Sach", values, "id_sach=?", new String[]{obj.maSach});
db.delete("Sach", "id_sach=?", new String[]{obj.maSach});
db.execSQL("SELECT * FROM Sach WHERE id_sach=?" , newString[]
"create table Sach (" +
"id_loai INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
"ten_loai TEXT NOT NULL)";
CÂU L NH SQL C B NỆƠ Ả
db.insert("LoaiSach", null, values);
db.update("LoaiSach", values, "id_loai=?", new String[]{obj.maLoaiSach});
db.delete("LoaiSach", "id_sach=?", new String[]{obj.maLoaiSach});
db.execSQL("SELECT * FROM LoaiSach WHERE id_loai=?" , newString[]{
db.execSQL("SELECT * FROM LoaiSach");
Trang 584.2.2.4 Bảng TacGia
MÃ L NH T O B NGỆẠẢ
String table_TacGia=
"create table TacGia (" +
"id_TG INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
"ten_TG TEXT NOT NULL)";
CÂU L NH SQL C B NỆƠ Ả
db.insert("TacGia", null, values);
db.update("TacGia", values, "id_TG=?", new String[]{obj.maTG});
db.delete("TacGia", "id_TG=?", new String[]{obj.maTG});
db.execSQL("SELECT * FROM TacGia WHERE id_TG=?" , newString[]
db.insert("NXB", null, values);
db.update("NXB", values, "id_nxb=?", new String[]{obj.maNXB});
db.delete("NXB", "id_nxb=?", new String[]{obj.maNXB});
Trang 59db.execSQL("SELECT * FROM NXB WHERE id_nxb=?" , newString[]
"create table ThanhVien (" +
"id_tv INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
"ten_tv TEXT NOT NULL, " +
"ngay_sinh TEXT NOT NULL, " +
"dia_chi TEXT NOT NULL)";
CÂU L NH SQL C B NỆƠ Ả
db.insert("ThanhVien", null, values);
db.update("ThanhVien", values, "id_tv=?", new String[]{obj.maTV});
db.delete("ThanhVien", "id_tv=?", new String[]{obj.maTV});
db.execSQL("SELECT * FROM ThanhVien WHERE id_tv=?" , newString[]{
"create table User (" +
"id_user INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
"ten_user TEXT, " +
Trang 60"email TEXT, " +
"avatar INTEGER, " +
"user_name TEXT NOT NULL, " +
"password TEXT NOT NULL)" ;db.execSQL(table_User);
CÂU L NH SQL C B NỆƠ Ả
db.insert("User", null, values);
db.update("User", values, "id_user=?", new String[]{obj.maUser});
db.delete("User", "id_user=?", new String[]{obj.maUser});
db.execSQL("SELECT * FROM User WHERE id_user=?" , newString[]
o 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ẪỬ Ụ
o onCreate (SQLiteDatabase db): chứa các lệnh tạo table (có thể chèn dữ liệu test).
o onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion): chứa các lệnh xoá table và gọi lại onCreate khi nâng version.
4.3.2 MODEL CLASS VÀ DAO
4.3.2.1 PhieuMuon và PhieuMuonDAO
SƠ ĐỒ
Trang 61 DI N GI IỄẢ
THÀNH PH NẦMÔ TẢ
PhieuMuon Là lớp thực thể mô tả dữ liệu phiếu mượn
PhieuMuonDAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
Sach Là lớp thực thể mô tả dữ liệu sách
SachDAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với bảng Sach
Trang 624.3.2.3 LoaiSach & LoaiSachDAO
SƠ ĐỒ
DI N GI IỄẢ
THÀNH PH NẦMÔ TẢ
LoaiSach Là lớp thực thể mô tả dữ liệu thể loại sách
LoaiSachDAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
LoaiSach Là lớp thực thể mô tả dữ liệu thể loại sách
LoaiSachDAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với bảng LoaiSach
Trang 63ThanhVien Là lớp thực thể mô tả dữ liệu thành viên
ThanhVienDAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
Trang 64User Là lớp thực thể mô tả dữ liệu user
UserDAO Là lớp DAO cụ thể hóa các hoạt động truy xuất CSDL với
Trang 653 SachMau () Nếu sách không có dữ liệu thì thêm dữ liệu mẫu 4 ThanhVienMau () Nếu thành viên sách không có dữ liệu thì thêm dữ
setOnClicklistener Hiện dialog thêm phiếu mượn
2 xoa.onClicklistener Hiện dialog xác nhận xóa phiếu mượn 3 sua.onClicklistener Hiện dialog sửa phiếu mượn
4 search.setOnQueryTex
tListener Tìm kiếm phiếu mượn theo mã
4.4.3.3 FragmentLoaiSach
TT METHOD/EVENTMÔ TẢ