Tài liệu dự án1 UseCase Hệ Thốngb.Usecase Quản lý nhân viên2 UseCase Quản Lý Nhân Viênc.Usecase Quản lý kho hàng... Các chức năng của các bảng Quản lý Thêm: thêm các dữ liệu ghi trên
Trang 1ĐÀ NẴNG
Đề tài:
Xây dựng và thiết kế phần mềm quản lý siêu thị mini
GIẢNG VIÊN HƯỚNG DẪN: Nguyễn Văn Định
SINH VIÊN THỰC HIỆN: Trần Đình Quang HuyMÃ SỐ SINH VIÊN: PD05078
Đà Nẵng ngày 3 tháng 11 năm 2021
Trang 2a.Usecase hệ thống siêu thị mini 5
b.Usecase Quản lý nhân viên 5
c.Usecase Quản lý kho hàng 6
b.Thiết kế chi tiết các thực thể 9
3.Thiết kế giao diện 11
a.Sơ đồ tổ chức giao diện 11
b.Thiết kế giao diện cho các chức năng nghiệp vụ 12
III.Thực hiện viết mã 20
b.Model class-Các lớp mô tả dữ liệu 25
c.DAO class-Các lớp truy xuất dữ liệu 29
Trang 3V Đóng gói và triển khai 41
1.Hướng dẫn chuyển đổi jar thành exe 41
2.Hướng dẫn cài đặt triển khai 45
3.Hướng dẫn sử dụng phần mềm 45
VI.Kết Luận 45
Trang 4Tài liệu dự ánI.Phân tích
1 Hiện trạng
Hiện nay có rất nhiều siêu thị mini trên toàn quốc và hệ thống bán hàng vẫn đang sử dụng trên excel trong khi nguồn khách hàng ngày một gia tăng dẫn đến khả
năng lưu trữ thông tin còn hạn chế Khả năng bảo mật chưa cao do đó Dự Án 1:
Xây dựng quản lý siêu thị mini sẽ giải quyết các vấn đề đó
Mọi thống kê phải viết bằng tay không tự động Cần rất nhiều nhân viên để làm nhiều công việc
khác nhau
b.Hệ Thống Mới1 Ưu điểm
Bảo mật tốt
Tìm kiếm và thống kê nhanh chóng Không cần nhiều nhân viên
Too long to read onyour phone? Save to
read later on your computer
Save to a Studylist
Trang 5b.Yêu cầu của người dùng1 Yêu cầu lưu trữ
Thông tin nhân viên Thông tin hoá đơn
Thông tin mặt hàng
2 Yêu cầu quản lý
Quản lý nhân viên Quản lý bán hàng Quản lý mặt hàng
3 Yêu cầu thống kê
Thống kê doanh thu tuần, tháng, năm Thống kê hàng bán tuần, tháng,năm Thống kê mặt hàng tuần,tháng,năm
4 Yêu cầu bảo mật
Tất cả thành viên phải đăng nhập mới được sử dụng phần mềm
Quản lý mới có thể xem được thống kê Doanh thu Nhân viên không được phép thêm sửa xoá thông
tin của nhân viên khác
3 Use case
a.Usecase hệ thống siêu thị mini
Trang 6Tài liệu dự án
1 UseCase Hệ Thống
b.Usecase Quản lý nhân viên
2 UseCase Quản Lý Nhân Viên
c.Usecase Quản lý kho hàng
Trang 73 UseCase Quản Lý Kho Hàng
d.Usecase Quản lý bán hàng
4 UseCase Bán Hàng
e.Usecase Thống kê
Trang 8 Các chức năng của các bảng Quản lý
Thêm: thêm các dữ liệu ghi trên bảng vào CSDL
Sửa: sửa các dữ liệu đang xem trên bảng Xoá: xoá các dữ liệu đang xem trên bảng Tìm kiếm: tìm kiếm các dữ liệu trong CSDL Điều hướng: di chuyển trước và sau Các chức năng(Thêm,sửa,xoá) cần được
kiểm lỗi hợp lý với dữ liệu
2 Các Usecase Thống kê(Doanh thu, Hàng hoá,Kho hàng)
Thống kê Doanh thu(chỉ có tài khoản Quản lý được xem)
Thống kê Hàng hoá(Hàng hoá bán nhiều và bán ít trong tuần, tháng, năm)
Thống kê Kho hàng(Các hàng còn tồn kho và các hàng hết nhanh nhất kể từ khi nhập)
3 Chi tiết về yêu cầu bảo mật
Trang 9 Tất cả chức năng phải đăng nhập mới được sử dụng
Quản lý: được phép sử dụng tất cả chức năng Nhân viên:
Không được xem Thống kê doanh thu Không được Thêm sửa xoá thông tin của các
nhân viên khác
II.Thiết kế
1 Mô hình triển khai
Ứng dụng sẽ được cài lên một máy tính hoặc laptop với yêu cầu máy tính/laptop phải có từ 4gb Ram trở lên và cài SQL Server 2008 trở lên
Admin sẽ đăng nhập vào hệ thống với tài khoản có quyền quản trị cao nhất và mọi thao tác thêm sửa xoá Admin trên ứng dụng sẽ lưu vào Database
Nhân viên sẽ đăng nhập vào hệ thống với tài khoản do Admin cung cấp và có thể đổi lại mật khẩu và mọi thao tác thêm sửa xoá của nhân viên trên ứng dụng sẽ lưu vào Database
Trang 10Tài liệu dự án
6 Mô Hình Triển Khai
2 Thiết kế CSDL
a.Sơ đồ quan hệ thực thể
Trang 117 Sơ Đồ ERD
b.Thiết kế chi tiết các thực thể1 Nhân Viên
Nhân Viên
2 Loại HàngLoại Hàng
Trang 12Tài liệu dự án
3 Kho HàngMặt Hàng
not null
Mã loại
4 Hoá ĐơnHoá Đơn
Viên), not null
Mã nhân viên
5 Hoá Đơn Chi TiếtHoá Đơn ChiTiết
Trang 13MaSanPhamVarchar(10)FK(Kho Hàng), not null
Mã sản phẩm
3 Thiết kế giao diện
a.Sơ đồ tổ chức giao diện
8 Sơ Đồ Tổ Chức Giao Diện
b.Thiết kế giao diện cho các chức năng nghiệp vụ1 Màn hình chào
Trang 1511 Màn Hình Đổi Mật Khẩu
4 Màn hình chính
Trang 16Tài liệu dự án
12 Màn Hình Chính
5 Màn hình Quản lý nhân viên
13Màn Hình QL Nhân Viên
Trang 1714 Màn Hình QL Nhân Viên 2
6 Màn hình Quản lý Mặt Hàng
15 Màn Hình Mặt Hàng
Trang 18Tài liệu dự án
16 Màn Hình Mặt Hàng2
7 Màn hình Bán hàng
Trang 1917 Màn Hình Bán Hàng
Trang 20Tài liệu dự án
18 Màn Hình Bán Hàng 2
8 Màn hình Thống kê báo cáo
Trang 21create table NhanVien(
MaNhanVien varchar(10)notnull,
MatKhau varchar(15)notnull,
VaiTro bitnotnull,
TenNhanVien nvarchar(50)notnull,
Trang 22Tài liệu dự án
NgaySinh datenotnull,
GioiTinh bitnotnull,
SoDienThoai intnotnull,
HinhAnh varchar(50)null, primary key(MaNhanVien), );
create table LoaiHang(
MaLoai varchar(10)notnull,
TenLoai nvarchar(10)notnull,
ChuThich Nvarchar(Max)null, primarykey (MaLoai) );
create table MatHang(
MaSanPham varchar(10)notnull,
MaLoai varchar(10)notnull,
TenSanPham Nvarchar(50)notnull,
GiaNhapVe floatnotnull,
SoLuong intnotnull,
GiaBan floatnotnull,
HinhAnh varchar(50)null, primarykey (MaSanPham),
constraint FK_MaLoai foreignkey (MaLoai)references LoaiHang(MaLoai) );
create table HoaDon(
MaHoaDon varchar(10)notnull,
MaNV varchar(10)notnull,
NgayMua DatenotnulldefaultgetDate(),
TenKhachHang nvarchar(50)notnull,
TrangThai bitnotnull, primary key(MaHoaDon),
constraint FK_MaNV foreignkey (MaNV)references NhanVien(MaNhanVien) );
create table ChiTietHoaDon(
MaHoaDon varchar(10)notnull,
MaSanPham varchar(10)notnull,
SoLuong Intnotnull,
TongTien floatnotnull, primarykey (MaHoaDon),
constraint FK_MaHoaDon foreignkey (MaHoaDon )references HoaDon(MaHoaDon), constraint FK_MaSanPham foreignkey (MaSanPham )references MatHang(MaSanPham) );
b.SQL truy vấn và thao tác1 Quản lý nhân viênThao tácCâu lệnh truy vấn
Thêm Insert into NhanVien(MaNhanVien, MatKhau, VaiTro, TenNhanVien, NgaySinh, GioiTinh,
SoDienThoai, HinhAnh )values('NV01',123 1, ,N'Trần Đình Quang Huy',2002 04 20 1 0762639348/ / , , ,'huy.jpg')
Trang 23Sửa Update NhanVien set MatKhau=123, VaiTro=1, TenNhanVien=N'Huy', NgaySinh=2002/20 04/ ,
GioiTinh=1, SoDienThoai=0762639348, HinhAnh='Huy.jpg' where MaNhanVien='NV01';
Xoá Delete from NhanVien where MaNhanVien ='NV01';
Select from * NhanVien where MaNhanVien ='NV01'; Select from * NhanVien where TenNhanVien LIKE'H';
2 Quản lý mặt hàngThao tácCâu lệnh truy vấn
Thêm Insert Into MatHang(MaSanPham MaLoai TenSanPham GiaNhapVe SoLuong HinhAnh GiaBan, , , , , , ) values('SP01' 'Loai01' 'Pepsi', , ,10000 50, ,'Pepsi.jpg',15000);
Sửa Update MatHang set MaLoai='Loai02', TenSanPham=N'Bánh Gấu', GiaNhapVe='20000',
SoLuong 50= , HinhAnh='BanhGau.jpg', GiaBan='22000'where MaSanPham='SP01'
Xoá Delete from MatHang where MaSanPham ='SP01';
Select from * MatHang where MaSanPham ='SP01'; Select from * MatHang where TenSanPham LIKE'B';
3 Quản lý bán hàng(HoaDon, ChiTietHoaDon)Thao tácCâu lệnh truy vấn
Thêm create proc sp_TruSoLuong
@maHD varchar(10) @MaNV Nvarchar(10), @TenKH nvarchar( ),50 @TrangThai bit,
@MaSP varchar( ),10 @Soluong int, @TongTien float
insert into ChiTietHoaDon(MaHoaDon MaSanPham SoLuong TongTien, , , ) values (@maHD,@MaSP,@Soluong,@TongTien)
update MatHang set soluong soluong = - (Select soluong from ChiTietHoaDon
where MaSanPham=@masp)where MaSanPham = @masp
end else begin
insert into HoaDon(MaHoaDon,MaNV,TenKhachHang,TrangThai)values (@maHD,@MaNV @TenKH @TrangThai, , )
insert into ChiTietHoaDon(MaHoaDon MaSanPham SoLuong TongTien, , , ) values (@maHD,@MaSP,@Soluong,@TongTien)
Trang 24Tài liệu dự án
update MatHang set soluong soluong = - (Select soluong from ChiTietHoaDon
where MaSanPham=@masp)where MaSanPham = @masp Thao tácCâu lệnh truy vấn
Thêm Insert into LoaiHang (MaLoai TenLoai, )values ('Loai01',N'Bánh') Insert into LoaiHang (MaLoai TenLoai, )values ('Loai02',N'Kẹo') Insert into LoaiHang (MaLoai TenLoai, )values ('Loai03',N'Nước') public class User {
public static NhanVien user = null; public static void clear(){ User.user=null; }
public static boolean isLogin(){ return User.user != null; }
public static boolean isManager(){ return User.isLogin() && user.getVaiTro();
Trang 25import java.sql.SQLException;
public class DatabaseConnection {
private static String driver ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; private static String dburl ="jdbc:sqlserver://localhost:1433;database=QLSieuThi"; private static String username="sa";
private static String password="123";
public static PreparedStatement getStmt(String sql, Object args) throws SQLException{ Connection connection = DriverManager.getConnection(dburl,username,password);
Trang 26public class MatHang {
private String MaSanPham; private String MaLoai; private String TenSanPham; private int SoLuong; private String HinhAnh; private float GiaBan;
Trang 27private float GiaNhap;
public MatHang(String MaSanPham, String MaLoai, String TenSanPham, int SoLuong, String HinhAnh, float GiaBan, float GiaNhap) {
Trang 28public class NhanVien { private String MaNhanVien; private String MatKhau; private boolean VaiTro = false; private String HoTen; private Date NgaySinh; private boolean GioiTinh; private String SoDienThoai; private String HinhAnh; public NhanVien() { }
public NhanVien(String MaNhanVien, String MatKhau,String HoTen, Date NgaySinh, boolean GioiTinh, String SoDienThoai, String HinhAnh) {
Trang 30abstract public class Dao <EntityType, KeyType> {//generic
abstract public void insert(EntityType entity);//EntityType: NhanVien, KhoaHoc abstract public void update(EntityType entity);
abstract public void delete(KeyType id);//KeyType: String, Integer, Double abstract public EntityType selectById(KeyType id);
abstract public List<EntityType> selectAll();
abstract protected List<EntityType> selectBySql(String sql, Object args);}
Trang 31public void insert(MatHang model) { String sql = "Insert Into
public void update(MatHang model) {
String sql = "Update MatHang set MaLoai=?, TenSanPham=?, GiaNhapVe=?, SoLuong=?, HinhAnh=?, GiaBan=? where MaSanPham=?";
public void delete(String MASP) {
String sql = "Delete from MatHang where MaSanPham =?"; DatabaseConnection.update(sql, MASP);
}
Trang 32Tài liệu dự án
@Override
public MatHang selectById(String masp) {
String sql = "Select * from MatHang where MaSanPham = ?"; List<MatHang> list = this.selectBySql(sql, masp); return list.size() > 0 ? list.get(0) : null; }
@Override
public List<MatHang> selectAll() { String sql ="Select * from MatHang"; return this.selectBySql(sql); }
@Override
protected List<MatHang> selectBySql(String sql, Object args) { List<MatHang> list = new ArrayList<>();
// public List<MatHang> selectByLoaiHang(String malh) {// String sql = "Select * from MatHang where MaLoai=?";// return this.selectBySql(sql, malh);
// }
public List<MatHang> selectByKeyWord(String keyword){ String sql ="Select * from MatHang where TenSanPham LIKE ?"; return this.selectBySql(sql, "%"+keyword+"%");
} }
Trang 33public void insert(NhanVien model) {
String sql = "Insert into NhanVien(MaNhanVien, MatKhau, VaiTro, TenNhanVien, NgaySinh, GioiTinh, SoDienThoai, HinhAnh ) values(?,?,?,?,?,?,?,?) ";
public void update(NhanVien model) {
String sql = "Update NhanVien set MatKhau=?, VaiTro=?, TenNhanVien=?, NgaySinh=?, GioiTinh=?, SoDienThoai=?, HinhAnh=? where MaNhanVien=? ";
public void delete(String MaNV) {
String sql = "Delete from NhanVien where MaNhanVien =?"; DatabaseConnection.update(sql, MaNV);
} @Override
Trang 34Tài liệu dự án
public NhanVien selectById(String manv) {
String sql = "Select * from NhanVien where MaNhanVien = ?"; List<NhanVien> list = this.selectBySql(sql, manv); return list.size() > 0 ? list.get(0) : null; }
@Override
public List<NhanVien> selectAll() { String sql = "Select * From NhanVien"; return this.selectBySql(sql); }
@Override
protected List<NhanVien> selectBySql(String sql, Object args) { List<NhanVien> list = new ArrayList<>();
public List<NhanVien> selectByKeyWord(String keyword){ String sql ="Select * from NhanVien where TenNhanVien LIKE ?"; return this.selectBySql(sql, "%"+keyword+"%");
Trang 35DefaultTableModel model = (DefaultTableModel) tblDanhSachNhanVien.getModel(); model.setRowCount(0);
try {
String keyword = txtTimKiem.getText();
List<NhanVien> list = dao.selectByKeyWord(keyword); for (NhanVien nv : list) {
Trang 36MessBox.alert(this, "Bạn không được xóa chính bạn!"); } else if (MessBox.confirm(this, "Bạn thực sự muốn xóa nhân viên có "
Trang 37model.setRowCount(0); try {
String keyword = txtTimKiem.getText();
List<MatHang> list = mhdao.selectByKeyWord(keyword); for (MatHang mh : list) {
List<LoaiHang> list = lhdao.selectAll(); for (LoaiHang loaiHang : list) {
Trang 38if (MessBox.confirm(this, "Bạn thực sự muốn xóa mặt hàng: " + txtTenSanPham.getText() + " ?")) { String MaSP = txtMaSanPham.getText();
Trang 391Kiểm thử giao diện
2 Kiểm thử form NhanViena.Kiểm thử giao diện
-Kiểm tra font chữ có đúng định dạng Tahoma không
hay không
-Kiểm tra các tên của các trường có đúng cỡ chữ 11 không
định dạng [0,0,0] không
-Kiểm tra màu sắc của các tiêu đề có đúng định dạng màu [153,204,255] không
với nhau không
b.Kiểm thử chức năng
-nhập 1 trường dữ liệu và ấn thêm -nhập tất cả dữ liệu và ấn thêm
-nhập dữ liệu trường MaNV và ấn sửa
-thay đổi dữ liệu các trường trừ MaNV và ấn sửa
-nhập dữ liệu trường MaNV và ấn xoá
-nhập tất dữ liệu các trường trừ MaNV và ấn xoá
Trang 40Tài liệu dự án
kiếm đúng với từ khoá không
c.Kiểm tra tính hợp lệ
-Kiểm tra MaNV tối thiểu bao nhiêu ký tự -Kiểm tra MaNV tối đa bao nhiêu ký tự
-Kiểm tra mật khẩu tối thiểu bao nhiêu ký tự -Kiểm tra mật khẩu tối đa bao nhiêu ký tự
-Kiểm tra mật khẩu có cho viết chữ hoặc ký tự đặc biệt không
-Kiểm tra XNMK có trùng với MK hay không -Kiểm tra mật khẩu có cho viết chữ hoặc ký tự đặc biệt không
ứng hay không
-Kiểm tra có thể một lúc tích cả hai vai trò hay không
-Kiểm tra có cho phép viết số vào tên hay không
tương ứng hay không
-Kiểm tra có thể một lúc tích cả hai vai trò hay không
-Kiểm tra có đúng định dạng dd/MM/yyyy hay không
3 Kiểm thử form Bán Hànga.Kiểm thử giao diện
-Kiểm tra font chữ có đúng định dạng Tahoma không
Trang 41Cỡ Chữ-Kiểm tra các tiêu đề có đúng cỡ chữ 18 và đươc in đậm hay không
-Kiểm tra các tên của các trường có đúng cỡ chữ 11 không
định dạng [0,0,0] không
-Kiểm tra màu sắc của các tiêu đề có đúng định dạng màu [153,204,255] không
với nhau không
b.Kiểm thử các chức năng
-nhập 1 trường dữ liệu và ấn thêm -nhập tất cả dữ liệu và ấn thêm
-Nhập mã hoá đơn đã thanh toán và Thanh Toán -Nhập mã hoá đơn chưa thanh toán và Thanh Toán
c.Kiểm thử dữ liệu
-Kiểm tra MaHD tối thiểu bao nhiêu ký tự -Kiểm tra MaHD tối đa bao nhiêu ký tự
nhập vào ứng dụng không
-Kiểm tra có lưu đúng MaNV hay không
-Kiểm tra có đúng ngày hiện tại không
-Kiểm tra có cho phép viết số vào tên hay không