J2SE图书管理系统(2)——管理员登录功能实现

1.实体层:com.java.model;

先在实体层model里新建一个User类,封装了一些User的信息、get set方法以及构造方法:

package com.java.model;

public class User {

	// 编号
	private int id;
	// 用户名
	private String userName;
	// 密码
	private String passWord;

	public User() {
		super();
		// TODO Auto-generated constructor stub
	}

	public User(String userName, String passWord) {
		super();
		this.userName = userName;
		this.passWord = passWord;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	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;
	}

}

2.数据访问层:com.java.dao; 

我们先在数据库db_book里面新建一个t_user表,存储了登录界面的用户名和密码信息:

在数据访问层Dao里面新建用户的数据访问类UserDao,主要是登录验证的信息:

package com.java.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.java.model.User;

public class UserDao {

	/**
	 * 登录验证
	 * 
	 * @param con
	 * @param user
	 * @return
	 * @throws Exception
	 */

	public User login(Connection con, User user) throws Exception {
		// 登录正确,返回用户的所有实体信息
		User resultUser = null;
		String sql = "select * from t_user where userName=? and passWord=?";
		// 获取PreparedStatement接口
		PreparedStatement pstmt = con.prepareStatement(sql);
		// 设置未知量的值
		pstmt.setString(1, user.getUserName());
		pstmt.setString(2, user.getPassWord());
		// 返回ResultSet结果集
		ResultSet rs = pstmt.executeQuery();

		// rs.next()指向表中第一行数据 若第一行有效,则返回true,并继续指向第二行
		if (rs.next()) {
			// 对用户进行实例化,取其中的set方法;
			resultUser = new User();
			// 取第一行id这个属性的数据,将结果返回给User实体的信息
			resultUser.setId(rs.getInt("id"));
			// 取第一行UserName这个属性的数据,将结果返回给User实体的信息
			resultUser.setUserName(rs.getString("userName"));
			// 取第一行PassWord这个属性的数据,将结果返回给User实体的信息
			resultUser.setPassWord(rs.getString("passWord"));
		}
		return resultUser;
	}
}

3.视图层:com.java.view;

在视图层里面写登录的界面,这里要用到WindowBuilder这个插件;

在view里面新建一个LogOnFrm类:右键点击view包->new->Other->WindowBuilder->Swing Designer->JFrame类;

 建好以后在Designer上面添加一些功能控件:

 这里都是一些基本的控件和按钮,图标可以用我们之前的images包里面导入的图标;

给JTextField框进行重命名,命名为:userName_txt;

给JPasswordFiled框进行重命名,命名为:  passWord_txt;

控件功能代码:

(1) 首先是重置按钮功能:

右键重置按钮->Add event handler->action->actionPerformed;

然后会在Source里面自动生成一个方法:

这里我们在actionPerformed()方法里面写一个resetValueActionPerformed(e)方法,

将实现重置的代码写在这个方法里面,并将方法的定义写在系统自动生成的actionPerformed()方法的外部;

用快捷方式(第四个)可以自动生成该方法对应的函数体:

 

 在方法体里面,我们写上如下代码:

/**
	 * 重置事件处理
	 * 
	 */
	private void resetValueActionPerformed(ActionEvent evt) {
		// 将用户名和密码都设置为空
		this.userName_txt.setText("");
		this.passWord_txt.setText("");
	}

用文本自带的setText方法将框里面的内容设置为空!这样就可以了; 

(2)登录功能按钮:

右键登录按钮->Add event handler->action->actionPerformed;

然后会在Source里面自动生成一个方法:

这里我们在actionPerformed()方法里面写一个loginActionPerformed(e)方法,

将实现重置的代码写在这个方法里面,并将方法的定义写在系统自动生成的actionPerformed()方法的外部;

用快捷方式(第四个)可以自动生成该方法对应的函数体: 

 在方法体里面,我们写上如下代码: 

首先要判断用户输入的用户名和密码是否为空;

// 从界面获取用户名和密码
		String userName = this.userName_txt.getText();
		String passWord = new String(this.passWord_txt.getPassword());
		// 判断用户名和密码是否为空
		if (StringUtil.isEmpty(userName)) {
			JOptionPane.showMessageDialog(null, "用户名不能为空!");
			return;// 结束方法,不再继续执行
		}
		if (StringUtil.isEmpty(passWord)) {
			JOptionPane.showMessageDialog(null, "密码不能为空!");
			return;
		}

当然,这里我们要写一个判断字符串是否为空的StringUtil工具类(写在com.java.util包里面):

package com.java.util;

public class StringUtil {

	/**
	 * 判断是否为空
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isEmpty(String str) {
		if (str == null || "".equals(str.trim())) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 判断是否不是空
	 */
	public static boolean isNotEmpty(String str) {
		if (str != null && "".equals(str.trim())) {
			return true;
		} else {
			return false;
		}
	}
}

再连接一下数据库 :

// 进行数据库连接
		User user=new User(userName,passWord);
		Connection con = null;
		try {
			con=dbUtil.getCon();
			/**
			 * 将从数据库中获取的用户信息保存在currentUser里面,
			 * 若为null,则表示从数据库里获取的信息和从用户登陆界面获取的信息不一致,
			 * 即登录失败
			 */
			User currentUser=userDao.login(con, user);
			if(currentUser!=null){
				JOptionPane.showMessageDialog(null, "登录成功!");
			}else{
				JOptionPane.showMessageDialog(null, "用户名或密码错误!");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

即loginActionPerformed(e)方法体里面的代码为:

/**
	 * 登录事件处理
	 * 
	 */
	private void loginActionPerformed(ActionEvent evt) { 
		// 从界面获取用户名和密码
		String userName = this.userName_txt.getText();
		String passWord = new String(this.passWord_txt.getPassword());
		// 判断用户名和密码是否为空
		if (StringUtil.isEmpty(userName)) {
			JOptionPane.showMessageDialog(null, "用户名不能为空!");
			return;// 结束方法,不再继续执行
		}
		if (StringUtil.isEmpty(passWord)) {
			JOptionPane.showMessageDialog(null, "密码不能为空!");
			return;
		}
		
		// 进行数据库连接
		User user=new User(userName,passWord);
		Connection con = null;
		try {
			con=dbUtil.getCon();
			/**
			 * 将从数据库中获取的用户信息保存在currentUser里面,
			 * 若为null,则表示从数据库里获取的信息和从用户登陆界面获取的信息不一致,
			 * 即登录失败
			 */
			User currentUser=userDao.login(con, user);
			if(currentUser!=null){
				JOptionPane.showMessageDialog(null, "登录成功!");
			}else{
				JOptionPane.showMessageDialog(null, "用户名或密码错误!");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

 4.测试环节;

点开LogOnFrm类,运行这个类:

运行成功!

到这里,管理员的登录界面就完结了! 

猜你喜欢

转载自blog.csdn.net/qq_37084904/article/details/86503053