根据不同的角色进入不同的面板:以下主界面的图标没变,最好写一个BaseFrame。
1.登陆模块 dao层: login (查找功能) --> service:登陆 login
2.注册(增),修改(改),删除(删),找,搜(查找)
dao层:添加add-->service:注册 regist
修改update -->service:改 update/edit(编辑)
删除delete --> service: 删 delete
查找 select / find -->service findAll查所有 findOne查单个 findByLike模糊查
在初级阶段:dao层和service层写一样的名字,没有关系。
dao层中member表在项目中承担的功能
3.1 登陆
思路:用户填写了用户名和密码,获取用户名和密码,去和数据库中的member表进行查询,如果查得到,说明用户名和密码正确,登陆成功,否则,登陆失败。
select * from member where username = ? and password = ?
select * from member where username = 'user1' and password = '111111'
方法设计:
方法名: login
返回类型:Member (一条记录)
参数:String username,String password
Member login(String username,String password);
2service设计:
调dao层,service最终的目标:是成功或失败。
Member login(String username,String password);
//如果返回对象为null,说明失败,如果返回不为null说明成功。
3.3 ui设计
获取用户名,获取密码,调service的login方法,进行判断。
如果返回对象为null,说明失败,如果返回不为null说明成功。
注意:
退出时,有些从菜单退出,有些点X关闭退出。
项目结构
package com.store.db;
import java.sql.*;
/**
* @ClassName DBHelper
* @Description: TODO
* @Author 汤永红
* @Date 2020/8/22 0022-10:42
* @Version V1.0
**/
public class DBHelper {
protected static Connection conn;
protected PreparedStatement pstmt;
protected ResultSet rs;
//
private static final String URL = "jdbc:mysql://localhost:3306/s1?useUnicode=true&characterEncoding=utf-8&useSSL=false";
private static final String USER_NAME = "root";
private static final String PASSWORD = "52Java";
public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
System.out.println("连接数据成功");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
getConnection();
}
}
package com.store.entity;
/**
* @ClassName Member
* @Description: TODO
* @Author 汤永红
* @Date 2020/8/31 0031-9:08
* @Version V1.0
**/
public class Member {
/**
* 会员编号
*/
private Integer memberId;
/**
* 会员帐号
*/
private String username;
/**
* 会员密码
*/
private String password;
/**
* 会员
*/
private String name;
/**
* 会员角色0收银员1仓管2管理员
*/
private Integer role;
/**
* 是否在岗: 如果登陆了说明在上班,还得修改它的状态,0不上班,1在上班
*/
private Integer isWork;
public Member() {
}
public Member(Integer memberId, String username, String password, String name, Integer role, Integer isWork) {
this.memberId = memberId;
this.username = username;
this.password = password;
this.name = name;
this.role = role;
this.isWork = isWork;
}
public Member(String username, String password, String name, Integer role, Integer isWork) {
this.username = username;
this.password = password;
this.name = name;
this.role = role;
this.isWork = isWork;
}
public Integer getMemberId() {
return memberId;
}
public void setMemberId(Integer memberId) {
this.memberId = memberId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getRole() {
return role;
}
public void setRole(Integer role) {
this.role = role;
}
public Integer getIsWork() {
return isWork;
}
public void setIsWork(Integer isWork) {
this.isWork = isWork;
}
@Override
public String toString() {
return "Member{" +
"memberId=" + memberId +
", username='" + username + '\'' +
", password='" + password + '\'' +
", name='" + name + '\'' +
", role=" + role +
", isWork=" + isWork +
'}';
}
}
package com.store.dao;
import com.store.entity.Member;
public interface MemberDao {
/**
* 登录功能
*
* @param username 用户名
* @param password 密码
* @return Members对象
*/
Member login(String username, String password);
/**
* 修改员工的工作状态
*
* @param username 用户名
* @param state 1代表在岗(上班),0代表不在岗(下班)
* @return
*/
int updateWorkState(String username, int state);
}
package com.store.dao.impl;
import com.store.dao.MemberDao;
import com.store.db.DBHelper;
import com.store.entity.Member;
import java.sql.SQLException;
/**
* @ClassName MemberDaoImpl
* @Description: TODO
* @Author 汤永红
* @Date 2020/8/31 0031-9:14
* @Version V1.0
**/
public class MemberDaoImpl extends DBHelper implements MemberDao {
@Override
public Member login(String username, String password) {
conn = getConnection();
String sql = "select * from member where username = ? and password = ?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if (rs != null) {
while (rs.next()) {
Member member = new Member();
//装
member.setMemberId(rs.getInt("memberId"));
member.setUsername(rs.getString("username"));
member.setName(rs.getString("name"));
member.setPassword(rs.getString("password"));
//角色很重要,因为不同的角色会加载不同的选项卡
member.setRole(rs.getInt("role"));
member.setIsWork(rs.getInt("isWork"));
return member;
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//节约资源
closeAll(rs, pstmt, conn);
}
return null;
}
@Override
public int updateWorkState(String username, int state) {
conn = getConnection();
String sql = "update member set isWork=? where username = ?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, state);
pstmt.setString(2, username);
int i = pstmt.executeUpdate();
return i;
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(rs, pstmt, conn);
}
return 0;
}
}
package com.store.service;
import com.store.entity.Member;
public interface MemberService {
Member login(String username, String password);
boolean updateWorkState(String username, int state);
}
package com.store.service.impl;
import com.store.dao.MemberDao;
import com.store.dao.impl.MemberDaoImpl;
import com.store.entity.Member;
import com.store.service.MemberService;
/**
* @ClassName MemberServiceImpl
* @Description: TODO
* @Author 汤永红
* @Date 2020/8/31 0031-9:29
* @Version V1.0
**/
public class MemberServiceImpl implements MemberService {
private MemberDao memberDao = new MemberDaoImpl();
@Override
public Member login(String username, String password) {
return memberDao.login(username, password);
}
@Override
public boolean updateWorkState(String username, int state) {
return memberDao.updateWorkState(username, state) > 0;
}
}
package com.store.ui;
import com.store.entity.Member;
import com.store.service.MemberService;
import com.store.service.impl.MemberServiceImpl;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @ClassName LoginFrame
* @Description: TODO
* @Author 汤永红
* @Date 2020/8/31 0031-9:30
* @Version V1.0
**/
public class LoginFrame extends JFrame {
//用服务层
private MemberService memberService = new MemberServiceImpl();
//1.声明要什么
JLabel lblId;
JLabel lblPassword;
JTextField txtId;
JPasswordField txtPassword;
JButton btnLogin;
JButton btnCancel;
public LoginFrame() {
setTitle("用户登录");
setSize(400, 300);
//图标
//1.ImageIcon对象--Image--
ImageIcon imageIcon = new ImageIcon("store\\images\\logo.png");
Image image = imageIcon.getImage();
setIconImage(image);
//2.画界面
setLayout(null);//设置绝对布局
//3.实例化
lblId = new JLabel("登录帐号:");
lblPassword = new JLabel("登录密码:");
txtId = new JTextField();
txtPassword = new JPasswordField();
btnLogin = new JButton("登 录");
btnCancel = new JButton("退 出");
//4.放位置
lblId.setBounds(70, 40, 80, 30);
txtId.setBounds(160, 40, 150, 30);
lblPassword.setBounds(70, 100, 80, 30);
txtPassword.setBounds(160, 100, 150, 30);
btnLogin.setBounds(70, 160, 115, 30);
btnCancel.setBounds(195, 160, 115, 30);
//5.放面板
add(lblId);
add(txtId);
add(lblPassword);
add(txtPassword);
add(btnLogin);
add(btnCancel);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//加事件监听
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//1.获取用户名
String username = txtId.getText();
String password = txtPassword.getText();
if (username == null || "".equals(username.trim())) {
JOptionPane.showMessageDialog(null, "用户名不能为空");
return;
}
//2.获取密码
if (password == null || "".equals(password.trim())) {
JOptionPane.showMessageDialog(null, "密码不能为空");
return;
}
//3.调服务层
Member member = memberService.login(username, password);
if (member == null) {
JOptionPane.showMessageDialog(null, "用户名或密码错误");
} else {
JOptionPane.showMessageDialog(null, "欢迎光临");
//更改用户的工作状态
memberService.updateWorkState(username, 1);
//去主界面,构造方法传参
new MainFrame(member);
dispose();//关自己
}
}
});
setVisible(true);
}
public static void main(String[] args) {
new LoginFrame();
}
}
package com.store.ui;
import com.store.entity.Member;
import javax.swing.*;
/**
* @ClassName MainFrame
* @Description: TODO
* @Author 汤永红
* @Date 2020/8/31 0031-10:29
* @Version V1.0
**/
public class MainFrame extends JFrame {
//1.声明
JTabbedPane jTabbedPane;
UserPanel userPanel;
GoodsPanel goodsPanel;
SalePanel salePanel;
StorePanel stroePanel;
InStorePanel inStorePanel;
GetMoneyPanel getMoneyPanel;
public MainFrame(Member member) {
setTitle("主界面 >>> 尊贵的" + member.getName() + "您好");
setSize(800, 600);
//2.实例化(最好在case里面写哦)
jTabbedPane = new JTabbedPane();
userPanel = new UserPanel();
goodsPanel = new GoodsPanel();
stroePanel = new StorePanel();
inStorePanel = new InStorePanel();
getMoneyPanel = new GetMoneyPanel();
//根据角色不同,看到的面板不同
Integer role = member.getRole();
switch (role) {
case 0:
jTabbedPane.addTab("收银员", null, getMoneyPanel, "收银系统");
break;
case 1:
jTabbedPane.addTab("仓库管理", null, stroePanel, "仓库管理");
jTabbedPane.addTab("进货管理", null, inStorePanel, "仓库管理");
break;
case 2:
jTabbedPane.addTab("用户管理", null, userPanel, "用户管理");
jTabbedPane.addTab("商品管理", null, goodsPanel, "商品管理");
jTabbedPane.addTab("销售管理", null, salePanel, "销售管理");
break;
default:
}
add(jTabbedPane);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
// new MainFrame();
}
}
JPanel自己具体实现。都是一些空壳。
package com.store.ui;
import javax.swing.*;
/**
* @ClassName UserPanel
* @Description: TODO
* @Author 汤永红
* @Date 2020/8/31 0031-10:36
* @Version V1.0
**/
public class UserPanel extends JPanel {
public UserPanel() {
}
}
sql语句
/*
Navicat Premium Data Transfer
Source Server : mysql
Source Server Type : MySQL
Source Server Version : 50717
Source Host : localhost:3306
Source Schema : s1
Target Server Type : MySQL
Target Server Version : 50717
File Encoding : 65001
Date: 31/08/2020 11:37:46
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for member
-- ----------------------------
DROP TABLE IF EXISTS `member`;
CREATE TABLE `member` (
`memberId` int(11) NOT NULL AUTO_INCREMENT COMMENT '会员编号',
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '会员帐号',
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '会员密码',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '会员',
`role` tinyint(2) NOT NULL COMMENT '会员角色0收银员1仓管2管理员',
`isWork` tinyint(2) NULL DEFAULT 1,
PRIMARY KEY (`memberId`) USING BTREE,
UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of member
-- ----------------------------
INSERT INTO `member` VALUES (1, 'user1', '111111', '张无忌', 0, 1);
INSERT INTO `member` VALUES (2, 'user2', '111111', '乔峰', 1, 1);
INSERT INTO `member` VALUES (3, 'user3', '111111', '周芷若', 2, 1);
INSERT INTO `member` VALUES (4, 'user4', '111111', '段正淳', 1, 1);
INSERT INTO `member` VALUES (5, '11', '11', '岳不群', 0, 0);
SET FOREIGN_KEY_CHECKS = 1;