一, 需求分析及概要设计
初步计划,该图书管理系统应实现管理员的登录,图书的增删改查等相应的常规功能。所利用的技术及工具有mySql数据库,eclipse等,由于对Java的swing界面的设计并非重点,故可采用windowbuilder工具进行图形界面的设计。
二,编码
1,首先建立一个数据库db_book,继而建表t_user(id,user,password);
2,在eclipse建立数据库连接,即设计数据库工具类,并测试数据库是否连接成功。
package com.kunfeng.util;
import java.sql.Connection;
import java.sql.DriverManager;
/**
* 数据库工具类
* @author kfc
*
*/
public class DbUtil {
private String dbUrl="jdbc:mysql://localhost:3306/db_book";
private String dbUserName="root";//用户名
private String dbPassword="1234";//密码
private String jdbcName="com.mysql.jdbc.Driver";//驱动名称
/**
* 获取数据库连接
* @return
* @throws Exception
*/
public Connection getCon() throws Exception{
Class.forName(jdbcName);
Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
return con;
}
/**
* 关闭数据库连接
* @param con
* @throws Exception
*/
public void closeCon(Connection con) throws Exception{
if(con!=null){
con.close();
}
}
public static void main(String[] args) {
DbUtil dbUtil=new DbUtil();
try {
dbUtil.getCon();
System.out.println("数据库连接成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库连接失败");
}
}
}
3,编写关于用户的model
package com.kunfeng.model;
/**
* 用户实体
* @author kfc
*
*/
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;
}
}
4.编写dao类,实现Java语言与数据库的数据交互,验证登录。
package com.kunfeng.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.kunfeng.model.User;
/**
* 用户Dao类
* @author kfc
*
*/
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 pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassWord());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
resultUser=new User();
resultUser.setId(rs.getInt("id"));
resultUser.setUserName("userName");
resultUser.setPassWord("password");
}
return resultUser;
}
}
5.利用windowbuilder工具,实现首页界面的的设计及相应的点击,代码如下
package com.kunfeng.view;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import com.kunfeng.dao.UserDao;
import com.kunfeng.model.User;
import com.kunfeng.util.DbUtil;
import com.kunfeng.util.StringUtil;
public class LogOnFrm extends JFrame {
private JPanel contentPane;
private JTextField userNameTxt;
private JTextField passwordTxt;
private DbUtil dbUtil=new DbUtil();
private UserDao userDao=new UserDao();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
LogOnFrm frame = new LogOnFrm();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public LogOnFrm() {
//改变系统默认字体
Font font = new Font("Dialog", Font.PLAIN, 12);
java.util.Enumeration keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof javax.swing.plaf.FontUIResource) {
UIManager.put(key, font);
}
}
setResizable(false);
setTitle("\u7BA1\u7406\u5458\u767B\u5F55 ");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 481, 327);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JLabel label = new JLabel("\u56FE\u4E66\u7BA1\u7406\u7CFB\u7EDF");
label.setFont(new Font("宋体", Font.BOLD, 19));
label.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/logo.png")));
JLabel lblNewLabel = new JLabel("\u7528\u6237\u540D");
lblNewLabel.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/userName.png")));
JLabel lblNewLabel_1 = new JLabel("\u5BC6\u7801");
lblNewLabel_1.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/password.png")));
userNameTxt = new JTextField();
userNameTxt.setColumns(10);
passwordTxt = new JTextField();
passwordTxt.setColumns(10);
JButton btnNewButton = new JButton("\u767B\u5F55");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loginActionPerformed(e);
}
});
btnNewButton.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/login.png")));
JButton btnNewButton_1 = new JButton("\u91CD\u7F6E");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetValueActionPerformd(e);
}
});
btnNewButton_1.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/reset.png")));
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
.addContainerGap(121, Short.MAX_VALUE)
.addComponent(label, GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE)
.addGap(103))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(72)
.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 56, GroupLayout.PREFERRED_SIZE)
.addGap(28))
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(btnNewButton)
.addPreferredGap(ComponentPlacement.RELATED))
.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
.addComponent(lblNewLabel_1)
.addGap(30))))
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING, false)
.addComponent(passwordTxt)
.addComponent(userNameTxt, GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(48)
.addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 76, GroupLayout.PREFERRED_SIZE)))
.addContainerGap(185, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(20)
.addComponent(label, GroupLayout.PREFERRED_SIZE, 87, GroupLayout.PREFERRED_SIZE)
.addGap(29)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel)
.addComponent(userNameTxt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(34)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel_1)
.addComponent(passwordTxt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(btnNewButton)
.addComponent(btnNewButton_1))
.addGap(27))
);
contentPane.setLayout(gl_contentPane);
}
/**
* 登录事件处理
* @param e
*/
private void loginActionPerformed(ActionEvent evt) {
String userName=this.userNameTxt.getText();
String password=this.passwordTxt.getText();
//因为返回的数据不能为空,故需要加一个判空处理util
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();
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();
}
}
/**
* 重置事件处理
* @param e
*/
private void resetValueActionPerformd(ActionEvent evt) {
this.userNameTxt.setText("");
this.passwordTxt.setText("");
}
}
在验证用户登录时,还应处理字符串的验证
package com.kunfeng.util;
/**
* 字符串工具类
* @author kfc
*
*/
public class StringUtil {
/**
* 判断是否为空
* @param str
* @return
*/
public static boolean isEmpty(String str){
if(str==null||"".equals(str.trim())){
return true;
}else{
return false;
}
}
/**
* 判断是否不是空
* @param str
* @return
*/
public static boolean isNotEmpty(String str){
if(str!=null && "".equals(str.trim())){
return true;
}
else{
return false;
}
}
}