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
Trang 1TÀI LI U D ÁN Ệ Ự
GIẢNG VIÊN: NGUYỄN THỊ THANH XUÂNSINH VIÊN: ĐÀO TUẤN ĐIỆP – PS27897
NGUYỄN THÀNH TRUNG – PS27883
LÊ HỒNG TRUNG QUÝ – PS27901PHẠM HỮU TRƯỜNG – PS27854HUỲNH QUANG KHẢI – PS27904NGÀNH – LỚP: CNTT – WD18302
6/11/2023
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 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ôngnghiệ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ÀNG
2.1 SƠ ĐỒ USE – CASE.
https://drive.google.com/file/d/1S51XLFREZaXuKr7p7fkCH3h_SsCLtg9d/view
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ê danhsá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ồngố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ể
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 ứngdụ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ỘT KIỂU DỮ
LIỆU RÀ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ỘT KIỂU DỮ
LIỆU RÀ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ỘT KIỂU DỮ
LIỆU RÀNG BUỘC MÔ TẢ
Trang 153.2.2.4 ĐƠN HÀNG
TÊN CỘT KIỂU DỮ
LIỆU RÀ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ỂU DỮ
LIỆU RÀ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ỂU DỮ
LIỆU RÀNG BUỘC MÔ TẢ
tự sinh
3.2.2.7 BÌNH LUẬN
TÊN CỘT KIỂU DỮ
LIỆU RÀ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 19n
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 @ID S 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 Ạ
O GIAO DI N Ệ
O MÔ T HO T Đ NG Ả Ạ Ộ
TT @ID S 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Ả
O GIAO 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"
android:layout_height="wrap_content"DrawerLayout @+id/drawerLayout android:layout_width="match_parent"
android:layout_height="match_parent"FrameLayout @+id/frameLayout android:layout_width="match_parent"
android:layout_height="match_parent"
NavigationView @+id/
navigationView android:layout_width="wrap_content"android:layout_height="match_parent"
app:menu="@menu/drawermenu"app:headerLayout="@layout/
header_navigation"
4.1.2 CÁC MÀN HÌNH QUẢN LÝ
4.1.2.1 Màn hình Home (fragment_home)
GIAO DIỆN
Trang 35 ĐẶT TÊN CÁC ĐIỀU KHIỂN
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
RecyclerView @+id/recyclerSach android:layout_width="match_parent"
android:layout_width="match_parent"ImageView @+id/btnSuaSach android:layout_width="36dp"
android:layout_height="36dp"
ImageView @+id/btnXoaSach android:layout_width="36dp"
android:layout_height="36dp"
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
Trang 42android:layout_height="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
RecyclerView @+id/recyclerTG android:layout_width="match_parent"
android:layout_width="match_parent"ImageView @+id/btnSuaTG android:layout_width="36dp"
android:layout_height="36dp"
ImageView @+id/btnXoaTG android:layout_width="36dp"
android:layout_height="36dp"
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
RecyclerView @+id/recyclerNXB android:layout_width="match_parent"
android:layout_width="match_parent"ImageView @+id/btnSuaNXB android:layout_width="36dp"
android:layout_height="36dp"
ImageView @+id/btnXoaNXB android:layout_width="36dp"
android:layout_height="36dp"
Trang 48 ĐẶT TÊN CÁC ĐIỀU KHIỂN
RecyclerView @+id/recyclerTV android:layout_width="match_parent"
android:layout_width="match_parent"ImageView @+id/btnXoaTV android:layout_width="36dp"
android:layout_height="36dp"
FloatingAction
Button @+id/ThemTV android:layout_width=" wrap_content"android:layout_height="wrap_content"
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
RecyclerView @+id/recyclerUser android:layout_width="match_parent"
android:layout_width="match_parent"ImageView @+id/btnXoaUser android:layout_width="36dp"
android:layout_height="36dp"
FloatingAction
Button @+id/ThemUser android:layout_width=" wrap_content"android:layout_height="wrap_content"
Trang 52android:layout_width="60dp"app:menu="@menu/menu_icon"
Trang 54 ĐẶT TÊN CÁC ĐIỀU KHIỂN
EditText @+id/etUsername android:layout_width="match_parent"
android:layout_width="wrap_content"EditText @+id/etPassword android:layout_width="wrap_content"
android:layout_width="wrap_content"CheckBox @+id/checkRemember android:layout_width="wrap_content"
android:layout_width="wrap_content"
Trang 55Button @+id/btnLogin android:layout_width="150dp"
android:layout_width="60dp"Button @+id/btnForgot 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)";
db.execSQL(table_PhieuMuon);
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[]
"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[] { obj.maSach});
db.execSQL("SELECT * FROM Sach");
4.2.2.3 Bảng LoaiSach
MÃ L NH T O B NG Ệ Ạ Ả
String table_LoaiSach=
"create table Sach (" +
"id_loai INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
" +
"ten_loai TEXT NOT NULL)";
db.execSQL(table_LoaiSach);
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)";
db.execSQL(table_TacGia);
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[] { obj.maTG});
db.execSQL("SELECT * FROM TacGia");
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)";
db.execSQL(table_ThanhVien);
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[]{ obj.maTV});
db.execSQL("SELECT * FROM ThanhVien");
4.2.2.7 Bảng User
MÃ L NH T O B NG Ệ Ạ Ả
String table_User=
"create table User (" +
"id_user INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
" +
"ten_user TEXT, " +