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
Phân tích
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 đề đó a Hệ Thống Cũ
Quản lý các hàng hoá và tài liệu về các hàng hoá rõ ràng
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ới
Tìm kiếm và thống kê nhanh chóng
Không cần nhiều nhân viên
Bán hàng một cách nhanh chóng
Các nhân viên mới cần kiến thức cơ bản về việc sử dụng máy tính
Yêu cầu hệ thống
1 Yêu cầu về phần cứng
2 Yêu cầu về công nghệ
Ngôn ngữ lập trình: Java
Phần mềm lập trình:Netbean và SQL server
Too long to read on your phone? Save to read later on your computer
Save to a Studylist b Yêu cầu của người dùng
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
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
Use case
a Usecase hệ thống siêu thị mini
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
3 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ê
5 UseCase Thống Kê f Đặc tả Usecase
1 Các Usecase bảng Quản lý(Nhân viên, Kho hàng,Hàng hoá)
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
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
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
Thiết kế
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
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
Thiết kế CSDL
a Sơ đồ quan hệ thực thể
7 Sơ Đồ ERD b Thiết kế chi tiết các thực thể
Trường Kiểu dữ liệu Ràng buộc Mô tả
MaNV Varchar(10) PK,not null Mã nhân viên
MatKhau Varchar(15) not null Mật khẩu
VaiTro Bit Not null Vai trò
TenNhanVien Nvarchar(50) not null Tên nhân viên
NgaySinh Date not null Ngày sinh
GioiTinh Bit not null Giới tính
SoDienThoai Int not null Số điện thoại
HinhAnh Varchar(30) null Hình ảnh
Trường Kiểu dữ liệu Ràng buộc Mô tả
MaLoai Varchar(10) PK, not null Mã loại
TenLoai Nvarchar(50) not null Tên loại
ChuThich Nvarchar(Max) null Chú thích
Trường Kiểu dữ liệu Ràng buộc Mô tả
MaSanPham Varchar(10) PK, not null Mã sản phẩm
MaLoai Varchar(10) FK(Loại Hàng), not null
TenSanPham Nvarchar(50) not null Tên sản phẩm
GiaNhapVe Float not null Giá nhập hàng về
SoLuong Int not null Số lượng
HinhAnh Varchar(50) null Hình ảnh sản phẩm
Trường Kiểu dữ liệu Ràng buộc Mô Tả
MaHoaDon Varchar(10) PK, not null Mã hoá đơn
NgayMua Date not null Ngày mua
TenKhachHang Nvarchar(50) not null Tên khách hàng
TrangThai bit not null Trạng thái
Trường Kiểu dữ liệu Ràng buộc Mô Tả
MaHoaDon Varchar(10) PK, not null Mã hoá đơn
GiaBan Float not null Giá bán
SoLuong Int not null Số lượng
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ụ
11 Màn Hình Đổi Mật Khẩu
5 Màn hình Quản lý nhân viên
13 Màn Hình QL Nhân Viên
14 Màn Hình QL Nhân Viên 2
6 Màn hình Quản lý Mặt Hàng
8 Màn hình Thống kê báo cáo
Thực hiện viết mã
Viết mã tạo CSDL
a Tạo CSDL create database QLSieuThi go use QLSieuThi go create table NhanVien(
HinhAnh varchar(50) null, primary key(MaNhanVien),
ChuThich Nvarchar(Max) null, primary key (MaLoai)
HinhAnh varchar(50) null, primary key (MaSanPham), constraint FK_MaLoai foreign key (MaLoai) references LoaiHang(MaLoai)
NgayMua Date not null default getDate(),
TrangThai bit not null, primary key(MaHoaDon), constraint FK_MaNV foreign key (MaNV) references NhanVien(MaNhanVien)
TongTien float not null, primary key (MaHoaDon), constraint FK_MaHoaDon foreign key (MaHoaDon )references HoaDon(MaHoaDon), constraint FK_MaSanPham foreign key (MaSanPham )references MatHang(MaSanPham) );
GO b SQL truy vấn và thao tác
Thao tác Câ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
Sửa Update NhanVien set MatKhau3, VaiTro=1, TenNhanVien=N'Huy', NgaySinh 02/20 04,/
GioiTinh=1, SoDienThoai62639348, 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';
Thao tác Câ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ác Câu lệnh truy vấn
Thêm create proc sp_TruSoLuong
@maHD varchar(10) , @MaNV Nvarchar(10), @TenKH nvarchar( ),50 @TrangThai bit,
If the specified invoice exists, a new record is added to the invoice details table with the provided parameters The quantity of the purchased product is reduced accordingly in the product table If the invoice does not exist, both the invoice table and invoice details table are updated with the given values The quantity of the purchased product is also adjusted in the product table These operations are executed by calling a stored procedure with the specified parameters, resulting in the successful creation of an invoice and the adjustment of product inventory.
Thao tác Câ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') c Các thủ tục lưu tổng hợp thống kê
Lập trình JDBC
1 User package com.huytdq.pd05078.utils; import com.huytdq.pd05078.entity.NhanVien; public class User { public static NhanVien user = null; public static void clear(){
} public static boolean isLogin(){ return User.user != null;
} public static boolean isManager(){ return User.isLogin() && user.getVaiTro();
2 DatabaseConnection package com.huytdq.pd05078.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import 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"; static{ try {
} catch (ClassNotFoundException e) { throw new RuntimeException(e);
} public static PreparedStatement getStmt(String sql, Object args) throws SQLException{ Connection connection = DriverManager.getConnection(dburl,username,password); PreparedStatement pstmt = null; if(sql.trim().startsWith("{")){ pstmt = connection.prepareStatement(sql);//store procedure
}else{ pstmt = connection.prepareStatement(sql);
} for(int i=0; i= 0){ return 1;
} catch (SQLException e) { throw new RuntimeException(e);
} public static ResultSet query(String sql, Object args){ try {
PreparedStatement stmt = DatabaseConnection.getStmt(sql, args); return stmt.executeQuery();
} catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e);
} public static Object value(String sql, Object args){ try {
ResultSet rs = DatabaseConnection.query(sql, args); if (rs.next()) { return rs.getObject(0);
} rs.getStatement().getConnection().close(); return null;
} catch (Exception e) { throw new RuntimeException(e);
} b Model class-Các lớp mô tả dữ liệu
1 Mặt hàng package com.huytdq.pd05078.entity; public class MatHang { private String MaSanPham; private String MaLoai; private String TenSanPham; private int SoLuong; private String HinhAnh; private float GiaBan; private float GiaNhap;
@Override public String toString(){// do du lieu ra combobox return this.TenSanPham;
} public MatHang(String MaSanPham, String MaLoai, String TenSanPham, int SoLuong, String HinhAnh, float GiaBan, float GiaNhap) { this.MaSanPham = MaSanPham; this.MaLoai = MaLoai; this.TenSanPham = TenSanPham; this.SoLuong = SoLuong; this.HinhAnh = HinhAnh; this.GiaBan = GiaBan; this.GiaNhap = GiaNhap;
} public String getMaSanPham() { return MaSanPham;
} public void setMaSanPham(String MaSanPham) { this.MaSanPham = MaSanPham;
} public String getMaLoai() { return MaLoai;
} public void setMaLoai(String MaLoai) { this.MaLoai = MaLoai;
} public String getTenSanPham() { return TenSanPham;
} public void setTenSanPham(String TenSanPham) { this.TenSanPham = TenSanPham;
} public int getSoLuong() { return SoLuong;
} public void setSoLuong(int SoLuong) { this.SoLuong = SoLuong;
} public String getHinhAnh() { return HinhAnh;
} public void setHinhAnh(String HinhAnh) { this.HinhAnh = HinhAnh;
} public float getGiaBan() { return GiaBan;
} public void setGiaBan(float GiaBan) { this.GiaBan = GiaBan;
} public float getGiaNhap() { return GiaNhap;
} public void setGiaNhap(float GiaNhap) { this.GiaNhap = GiaNhap;
2 Nhân viên package com.huytdq.pd05078.entity; import java.util.Date; public 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) { this.MaNhanVien = MaNhanVien; this.MatKhau = MatKhau; this.HoTen = HoTen; this.NgaySinh = NgaySinh; this.GioiTinh = GioiTinh; this.SoDienThoai = SoDienThoai; this.HinhAnh = HinhAnh;
} public String getMaNhanVien() { return MaNhanVien;
} public void setMaNhanVien(String MaNhanVien) { this.MaNhanVien = MaNhanVien;
} public String getMatKhau() { return MatKhau;
} public void setMatKhau(String MatKhau) { this.MatKhau = MatKhau;
} public boolean getVaiTro() { return VaiTro;
} public boolean isVaiTro() { return VaiTro;
} public void setVaiTro(boolean VaiTro) { this.VaiTro = VaiTro;
} public String getHoTen() { return HoTen;
} public void setHoTen(String HoTen) { this.HoTen = HoTen;
} public Date getNgaySinh() { return NgaySinh;
} public void setNgaySinh(Date NgaySinh) { this.NgaySinh = NgaySinh;
} public boolean getGioiTinh(){ return GioiTinh;
} public boolean isGioiTinh() { return GioiTinh;
} public void setGioiTinh(boolean GioiTinh) { this.GioiTinh = GioiTinh;
} public String getSoDienThoai() { return SoDienThoai;
} public void setSoDienThoai(String SoDienThoai) { this.SoDienThoai = SoDienThoai;
} public String getHinhAnh() { return HinhAnh;
} public void setHinhAnh(String HinhAnh) { this.HinhAnh = HinhAnh;
} c DAO class-Các lớp truy xuất dữ liệu
1 Dao package com.huytdq.pd05078.dao; import java.util.List; abstract public class Dao {//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 selectAll(); abstract protected List selectBySql(String sql, Object args);
2 MatHangDao package com.huytdq.pd05078.dao; import com.huytdq.pd05078.entity.MatHang; import com.huytdq.pd05078.utils.DatabaseConnection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class MatHangDao extends Dao {
@Override public void insert(MatHang model) {
MatHang(MaSanPham,MaLoai,TenSanPham,GiaNhapVe,SoLuong,HinhAnh,GiaBan) values(?,?,?,?,?,?,?)";
DatabaseConnection.update(sql, model.getMaSanPham(), model.getMaLoai(), model.getTenSanPham(), model.getGiaNhap(), model.getSoLuong(), model.getHinhAnh(), model.getGiaBan()
@Override public void update(MatHang model) {
String sql = "Update MatHang set MaLoai=?, TenSanPham=?, GiaNhapVe=?, SoLuong=?, HinhAnh=?, GiaBan=? where MaSanPham=?";
DatabaseConnection.update(sql, model.getMaLoai(), model.getTenSanPham(), model.getGiaNhap(), model.getSoLuong(), model.getHinhAnh(), model.getGiaBan(), model.getMaSanPham()
@Override public void delete(String MASP) {
String sql = "Delete from MatHang where MaSanPham =?";
@Override public MatHang selectById(String masp) {
String sql = "Select * from MatHang where MaSanPham = ?";
List list = this.selectBySql(sql, masp); return list.size() > 0 ? list.get(0) : null;
@Override public List selectAll() {
String sql ="Select * from MatHang"; return this.selectBySql(sql);
@Override protected List selectBySql(String sql, Object args) {
List list = new ArrayList(); try {
ResultSet rs = null; try { rs = DatabaseConnection.query(sql, args); while (rs.next()) {
MatHang entity = new MatHang(); entity.setMaSanPham(rs.getString("MaSanPham")); entity.setMaLoai(rs.getString("MaLoai")); entity.setTenSanPham(rs.getString("TenSanPham")); entity.setGiaNhap(rs.getFloat("GiaNhapVe")); entity.setSoLuong(rs.getInt("SoLuong")); entity.setHinhAnh(rs.getString("HinhAnh")); entity.setGiaBan(rs.getFloat("GiaBan")); list.add(entity);
} finally { rs.getStatement().getConnection().close();
} catch (SQLException e) { throw new RuntimeException(e);
// public List selectByLoaiHang(String malh) {
// String sql = "Select * from MatHang where MaLoai=?";
// return this.selectBySql(sql, malh);
// } public List selectByKeyWord(String keyword){
String sql ="Select * from MatHang where TenSanPham LIKE ?"; return this.selectBySql(sql, "%"+keyword+"%");
3 NhanVienDao package com.huytdq.pd05078.dao; import com.huytdq.pd05078.entity.NhanVien; import com.huytdq.pd05078.utils.DatabaseConnection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class NhanVienDao extends Dao{
@Override public void insert(NhanVien model) {
String sql = "Insert into NhanVien(MaNhanVien, MatKhau, VaiTro, TenNhanVien, NgaySinh, GioiTinh, SoDienThoai, HinhAnh ) values(?,?,?,?,?,?,?,?) ";
DatabaseConnection.update(sql, model.getMaNhanVien(), model.getMatKhau(), model.getVaiTro(), model.getHoTen(), model.getNgaySinh(), model.getGioiTinh(), model.getSoDienThoai(), model.getHinhAnh());
@Override public void update(NhanVien model) {
String sql = "Update NhanVien set MatKhau=?, VaiTro=?, TenNhanVien=?, NgaySinh=?, GioiTinh=?, SoDienThoai=?, HinhAnh=? where MaNhanVien=? ";
DatabaseConnection.update(sql, model.getMatKhau(), model.getVaiTro(), model.getHoTen(), model.getNgaySinh(), model.getGioiTinh(), model.getSoDienThoai(), model.getHinhAnh(), model.getMaNhanVien());
@Override public void delete(String MaNV) {
String sql = "Delete from NhanVien where MaNhanVien =?";
@Override public NhanVien selectById(String manv) {
String sql = "Select * from NhanVien where MaNhanVien = ?";
List list = this.selectBySql(sql, manv); return list.size() > 0 ? list.get(0) : null;
@Override public List selectAll() {
String sql = "Select * From NhanVien"; return this.selectBySql(sql);
@Override protected List selectBySql(String sql, Object args) {
List list = new ArrayList(); try {
ResultSet rs = null; try { rs = DatabaseConnection.query(sql, args); while (rs.next()) {
NhanVien entity = new NhanVien(); entity.setMaNhanVien(rs.getString("MaNhanVien")); entity.setMatKhau(rs.getString("MatKhau")); entity.setHoTen(rs.getString("TenNhanVien")); entity.setVaiTro(rs.getBoolean("VaiTro")); entity.setNgaySinh(rs.getDate("NgaySinh")); entity.setGioiTinh(rs.getBoolean("GioiTinh")); entity.setSoDienThoai(rs.getString("SoDienThoai")); entity.setHinhAnh(rs.getString("HinhAnh")); list.add(entity);
} finally { rs.getStatement().getConnection().close();
} catch (SQLException e) { throw new RuntimeException(e);
} public List selectByKeyWord(String keyword){
String sql ="Select * from NhanVien where TenNhanVien LIKE ?"; return this.selectBySql(sql, "%"+keyword+"%");
Viết mã cho ứng dụng
a Xử lý Form Quản lý nhân viên void fillTable() {
DefaultTableModel model = (DefaultTableModel) tblDanhSachNhanVien.getModel(); model.setRowCount(0); try {
List list = dao.selectByKeyWord(keyword); for (NhanVien nv : list) {
Object[] row = { nv.getMaNhanVien(), nv.getMatKhau(), nv.getVaiTro() ? "Admin" : "Nhân viên", nv.getHoTen(), nv.getNgaySinh(), nv.getGioiTinh() ? "Nam" : "Nữ", nv.getSoDienThoai(), nv.getHinhAnh()
MessBox.alert(this, "Truy vấn thất bại !");
String mk2 = new String(txtXNMK.getPassword()); if (!mk2.equals(nv.getMatKhau())) {
MessBox.alert(this, "Xác nhận mật khẩu không đúng"); txtXNMK.setBackground(Color.pink);
} else { try { dao.insert(nv); this.fillTable(); this.clearForm();
MessBox.alert(this, "Thêm mới thành công !");
MessBox.alert(this, "Thêm mới thất bại !"); e.printStackTrace();
String mk2 = new String(txtXNMK.getPassword()); if (!mk2.equals(nv.getMatKhau())) {
MessBox.alert(this, "Xác nhận mật khẩu không đúng!");
} else { try { dao.update(nv); this.fillTable();
MessBox.alert(this, "Cập nhật thành công!");
MessBox.alert(this, "Cập nhật thất bại!"); e.printStackTrace();
} void delete() { if (!User.isManager()) {
MessBox.alert(this, "Bạn không có quyền xóa nhân viên!");
String manv = txtMaNV.getText(); if (manv.equals(User.user.getMaNhanVien())) {
MessBox.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ó "
+ "mã: " + txtMaNV.getText() + " ?")) { try { dao.delete(manv); this.fillTable(); this.clearForm();
MessBox.alert(this, "Xóa thành công!");
MessBox.alert(this, "Xóa thất bại!"); e.printStackTrace();
} b Xử lý Form Quản lý mặt hàng void fillTable() {
DefaultTableModel model = (DefaultTableModel) tblMatHang.getModel(); model.setRowCount(0); try {
List list = mhdao.selectByKeyWord(keyword); for (MatHang mh : list) {
Object[] row = { mh.getMaSanPham(), mh.getMaLoai(), mh.getTenSanPham(), mh.getGiaNhap(), mh.getSoLuong(), mh.getGiaBan(), mh.getHinhAnh()
MessBox.alert(this, "Truy vấn thất bại !");
DefaultComboBoxModel model = (DefaultComboBoxModel) cbbTenLoai.getModel(); model.removeAllElements();
List list = lhdao.selectAll(); for (LoaiHang loaiHang : list) { model.addElement(loaiHang);
LoaiHang loaiHang = (LoaiHang) cbbTenLoai.getSelectedItem();
} private void timKiem() { this.fillTable(); this.clearForm(); this.row = -1; this.updateStatus();
MatHang mh = this.getForm(); try { mhdao.insert(mh); this.fillTable(); this.clearForm();
MessBox.alert(this, "Thêm mới thành công");
MessBox.alert(this, "Thêm mới thất bại"); e.printStackTrace();
MatHang model = getForm(); try { mhdao.update(model); this.fillTable();
MessBox.alert(this, "Cập nhật thành công");
MessBox.alert(this, "Cập nhật thất bại"); e.printStackTrace();
} void delete() { if (MessBox.confirm(this, "Bạn thực sự muốn xóa mặt hàng: " + txtTenSanPham.getText() + " ?")) { String MaSP = txtMaSanPham.getText(); try { mhdao.delete(MaSP); this.fillTable(); this.clearForm();
MessBox.alert(this, "Xóa thành công!");
MessBox.alert(this, "Xóa thất bại!");
Kiểm thử
Danh sách
3 Kiểm thử dữ liệu truyền vào
Kiểm thử form NhanVien
Font Chữ -Kiểm tra font chữ có giống nhau không
-Kiểm tra font chữ có đúng định dạng Tahoma không
Cỡ 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 Màu sắc -Kiểm tra màu sắc của tên các trường có đúng màu đen đị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
Icon -Kiểm tra các icon có tương đồng về màu sắc và kích thước với nhau không b Kiểm thử chức năng
Thêm -không nhập dữ liệu và ấn thêm
-nhập 1 trường dữ liệu và ấn thêm -nhập tất cả dữ liệu và ấn thêm Sửa -không nhập dữ liệu trường MaNV và ấn sửa
-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 Xoá -không nhập dữ liệu trường MaNV và ấn xoá
- Nhập dữ liệu vào trường Mã nhân viên (MaNV) và nhấn nút "Xóa" để kiểm tra.- Nhập dữ liệu vào tất cả các trường, trừ MaNV, và nhấn nút "Xóa" để kiểm tra.- Nhấn nút "Mới" để kiểm tra xem tất cả các trường có được xóa trắng hay không.- Nhấn vào nút "Thêm ảnh" để kiểm tra xem JFileChooser có mở ra hay không.- Nhập từ khóa cần tìm kiếm vào ô tìm kiếm và kiểm tra xem kết quả tìm kiếm có chính xác với từ khóa không.- Kiểm tra tính hợp lệ của dữ liệu nhập vào.
Mã nhân viên -Kiểm tra cho phép để trống hay không
-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ự Mật khẩu -Kiểm tra cho phép để trống hay không
-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
Xác nhận mật khẩu -Kiểm tra cho phép để trống hay 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
Vai trò - Kiểm tra tích vào vai trò có lưu vào cơ sở dữ liệu vai trò tương ứng hay không - Kiểm tra có thể một lúc tích cả hai vai trò hay không.
Họ tên -Kiểm tra cho phép để trống hay không
-Kiểm tra có cho phép viết số vào tên hay không Giới tính -Kiểm tra tích vào vai trò có lưu vào Database giới tính tương ứng hay không -Kiểm tra có thể một lúc tích cả hai vai trò hay không Ngày sinh -Kiểm tra cho phép để trống hay không
-Kiểm tra có đúng định dạng dd/MM/yyyy hay không
Kiểm thử form Bán Hàng
Font Chữ -Kiểm tra font chữ có giống nhau không
-Kiểm tra font chữ có đúng định dạng Tahoma không
Cỡ 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 Màu sắc -Kiểm tra màu sắc của tên các trường có đúng màu đen đị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
Icon -Kiểm tra các icon có tương đồng về màu sắc và kích thước với nhau không b Kiểm thử các chức năng
Thêm -không nhập dữ liệu và ấn thêm
-nhập 1 trường dữ liệu và ấn thêm -nhập tất cả dữ liệu và ấn thêm Thanh toán -Không nhập mã hoá đơn và Thanh Toán
-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 Mới -ấn Mới và xem tất cả các trường có được xoá trắng không? c Kiểm thử dữ liệu
Mã hoá đơn -Kiểm tra cho phép để trống hay không
-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ự Tên sản phẩm -Kiểm tra chọn đúng tên sản phẩm không
- Mã nhân viên: Kiểm tra mã nhân viên có đúng là mã của nhân viên đang đăng nhập vào ứng dụng hay không, đồng thời kiểm tra xem mã nhân viên có được lưu trữ chính xác hay không.- Ngày mua: Kiểm tra xem ngày mua có đúng định dạng dd/MM/yyyy hay không.
-Kiểm tra có đúng ngày hiện tại không Tên khách hàng -Kiểm tra cho phép để trống hay không
-Kiểm tra có cho phép viết số vào tên hay không
Giá bán -Kiểm tra giá bán có đúng là giá của Sản phẩm được chọn không
Số lượng -Kiểm tra cho phép để trống hay không
-Kiểm tra cho phép nhập chữ hay không -Kiểm tra cho phép nhập số lương bé hơn 0 không
V Đóng gói và triển khai
Hướng dẫn chuyển đổi jar thành exe
Bước 1: chuột phải vào Project và chọn Clean and Build
20 Thao tác Clean And Build
Bước 2: Vào thư mục chứa Project và tìm đến thư mục Dist
Bước 3: Copy file icon của ứng dụng có đuôi ico và Patse và thư mục
Bước 4: Cài Launch4j và khởi động Launch4j
Bước 5: Mở Launch4j và tại OutPut File chọn đến đường dẫn muốn xuất file và đặt tên cho ứng dụng và đuôi phải có exe (VD:
Bước 6: Tại mục Jar trong Launch4j chọn đến đường dẫn có chứa file Jar (ở trong thư mục Dist vừa làm ở Bước 2)
Bước 7: Tại mục Icon trong Launch4j chọn đến đường dẫn có chứa file ico (ở trong thư mục Dist vừa làm ở Bước 3)
Bước 8: Tại thanh công cụ ở Launch4j chọn JRE và tìm đến Min JRE version tại đây gõ vào phiên bản JRE tối thiểu là 1.8
Bước 9:Chọn vào Build Wrapper và đợi phần mềm Build
Hướng dẫn sử dụng phần mềm
29 File Sau Khi Đã Build Thành Công