JavaSwing进销存之登录功能分析设计与实现(项目第二天)

效果图

JavaSwing进销存之登录功能分析设计与实现(项目第二天)_第1张图片

JavaSwing进销存之登录功能分析设计与实现(项目第二天)_第2张图片

根据不同的角色进入不同的面板:以下主界面的图标没变,最好写一个BaseFrame。

JavaSwing进销存之登录功能分析设计与实现(项目第二天)_第3张图片

JavaSwing进销存之登录功能分析设计与实现(项目第二天)_第4张图片

JavaSwing进销存之登录功能分析设计与实现(项目第二天)_第5张图片

一、用户模块

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层写一样的名字,没有关系。

  1. 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);

    1. 2service设计:

      调dao层,service最终的目标:是成功或失败。

      Member login(String username,String password);

      //如果返回对象为null,说明失败,如果返回不为null说明成功。

    3.3 ui设计

    获取用户名,获取密码,调service的login方法,进行判断。

如果返回对象为null,说明失败,如果返回不为null说明成功。

 

注意:

业务1:当用户登 陆成功,工作状态要改为1,当用户退出界面工作状态为0.

退出时,有些从菜单退出,有些点X关闭退出。

业务2:根据不用的角色看到不同的界面。

项目结构

JavaSwing进销存之登录功能分析设计与实现(项目第二天)_第6张图片

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自己具体实现。都是一些空壳。

JavaSwing进销存之登录功能分析设计与实现(项目第二天)_第7张图片

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;

 

你可能感兴趣的:(JavaSwing进销存项目,JavaSwing,swng,jdbc,java)