1、系统框架
Java jdk+ eclipse + mysql数据库
2、系统结构图

3、各模块详细设计
由于这次我们的项目主要是用来熟悉软件工程的流程,所以难度不大。主要模块介绍如下:
1、帐号
package cn.edu.sau.model;
public class User {
private int id;
private String userName;
private String userPassword;
private int role = 0; //默认为0->读者 、 1->图书管理员
private String pname;
public User(){
this.id = -1;
}
public User(int id, String userName) {
super();
this.id = id;
this.userName = userName;
}
public User(String userName, String userPassword) {
super();
this.userName = userName;
this.userPassword = userPassword;
}
public User(int id,String userName, String userPassword, int role,String pname) {
super();
this.id = id;
this.userName = userName;
this.userPassword = userPassword;
this.role = role;
this.pname = pname;
}
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 getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
}
cn.edu.sau.model.User
User类实现了对帐号的抽象描述,主要包括用户名,密码,帐号角色以及账号所有人名称。
1 package cn.edu.sau.dao;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6
7 import cn.edu.sau.model.User;
8
9 public class UserDao {
10 public User login(Connection con,User user) throws Exception{
11 User returnUser = null;
12 String sql = "select * from t_user where userName=? and password=?";
13 PreparedStatement pstmt = con.prepareStatement(sql);
14 pstmt.setString(1, user.getUserName());
15 pstmt.setString(2, user.getUserPassword());
16 ResultSet rs = pstmt.executeQuery();
17 if(rs.next()){
18 returnUser = new User(rs.getString("userName"),rs.getString("password"),rs.getInt("role"));
19 }
20 return returnUser;
21 }
22 }
cn.edu.sau.dao.UserDao
UserDao提供帐号验证的方法并返回帐号对象,为空则帐号不存在。
package cn.edu.sau.view;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import cn.edu.sau.dao.UserDao;
import cn.edu.sau.model.User;
import cn.edu.sau.util.DbUtil;
import cn.edu.sau.util.StringUtil;
import javax.swing.ImageIcon;
public class LogonFrm extends JFrame {
private JPanel contentPane;
private JTextField userNameTxt;
private JPasswordField userPasswordTxt;
/**
* 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() {
setTitle("\u56FE\u4E66\u7BA1\u7406\u7CFB\u7EDF");
UserDao userDao = new UserDao();
DbUtil dbUtil = new DbUtil();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
//设置frame居中
this.setLocationRelativeTo(null);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
init();
}
private void reset(){
userNameTxt.setText("");
userPasswordTxt.setText("");
}
private void init() {
DbUtil dbUtil = new DbUtil();
UserDao userDao = new UserDao();
JLabel lb_userName = new JLabel("\u7528\u6237\u540D\uFF1A");
lb_userName.setBounds(102, 75, 54, 15);
contentPane.add(lb_userName);
userNameTxt = new JTextField();
userNameTxt.setBounds(166, 72, 152, 21);
contentPane.add(userNameTxt);
userNameTxt.setColumns(10);
JLabel lb_userPassword = new JLabel("\u5BC6 \u7801\uFF1A");
lb_userPassword.setBounds(102, 129, 54, 15);
contentPane.add(lb_userPassword);
JButton jb_login = new JButton("\u767B\u5F55");
jb_login.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\login.png"));
jb_login.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String userName = userNameTxt.getText();
String userPassword = new String(userPasswordTxt.getPassword());
if(StringUtil.isEmpty(userName)){
JOptionPane.showMessageDialog(null, "用户名不能为空");
return;
}
if(StringUtil.isEmpty(userPassword)){
JOptionPane.showMessageDialog(null, "密码不能为空");
return;
}
User user = new User(userName,userPassword);
Connection con = null;
try {
con = dbUtil.getCon();
User reUser = userDao.login(con, user);
if(reUser != null){
dispose();//销毁登录框
if(1 == reUser.getRole()){
new MainFrm().setVisible(true);//创建管理员主界面Firme
}
else if(0 == reUser.getRole()){
new UserMainFrm(reUser).setVisible(true);
}
}else{
JOptionPane.showMessageDialog(null, "用户名或密码不正确");
}
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "登录失败");
e1.printStackTrace();
} finally{
try {
con.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
});
jb_login.setBounds(102, 191, 93, 23);
contentPane.add(jb_login);
JButton jb_reset = new JButton("\u91CD\u7F6E");
jb_reset.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\reset.png"));
jb_reset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
reset();
}
});
jb_reset.setBounds(225, 191, 93, 23);
contentPane.add(jb_reset);
userPasswordTxt = new JPasswordField();
userPasswordTxt.setBounds(166, 126, 152, 21);
contentPane.add(userPasswordTxt);
JLabel lblNewLabel = new JLabel(" ");
lblNewLabel.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\logo.png"));
lblNewLabel.setBounds(182, 10, 99, 52);
contentPane.add(lblNewLabel);
}
}
cn.edu.sau.view.LogonFrm
登录框界面通过验证逻辑层返回的帐号数据判断帐号是否存在,以及判断帐号权限,打开新的界面。
2、图书类别维护
package cn.edu.sau.model;
public class BookType {
private int id;
private String bookTypeName;
private String bookTypeDesc;
public BookType() {
super();
}
public BookType(String bookTypeName, String bookTypeDesc) {
super();
this.bookTypeName = bookTypeName;
this.bookTypeDesc = bookTypeDesc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookTypeName() {
return bookTypeName;
}
public void setBookTypeName(String bookTypeName) {
this.bookTypeName = bookTypeName;
}
public String getBookTypeDesc() {
return bookTypeDesc;
}
public void setBookTypeDesc(String bookTypeDesc) {
this.bookTypeDesc = bookTypeDesc;
}
@Override
public String toString() {
return this.getBookTypeName();
}
}
cn.edu.sau.model.BookType
BookType类实现了对图书类别的对象描述,主要有图书类别名称以及图书类别的描述。
package cn.edu.sau.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import cn.edu.sau.model.BookType;
import cn.edu.sau.util.StringUtil;
public class BookTypeDao {
public int bookTypeAdd(Connection con, BookType bookType) throws Exception{
String sql = "insert into t_booktype values(null,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,bookType.getBookTypeName());
pstmt.setString(2,bookType.getBookTypeDesc());
return pstmt.executeUpdate();
}
public ResultSet bookTypeList(Connection con , BookType bookType) throws Exception{
StringBuffer sb = new StringBuffer("select * from t_booktype");
String bookTypeName = bookType.getBookTypeName();
if(!StringUtil.isEmpty(bookTypeName)){
sb.append(" and bookTypeName like '%"+bookType.getBookTypeName()+"%'");
}
PreparedStatement pstmt = con.prepareStatement(sb.toString().replaceAll("and", "where"));
return pstmt.executeQuery();
}
public int bookTypeModify(Connection con,BookType bookType) throws Exception{
String sql = "update t_bookType set booktypename=? , booktypedesc=? where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, bookType.getBookTypeName());
pstmt.setString(2, bookType.getBookTypeDesc());
pstmt.setInt(3, bookType.getId());
return pstmt.executeUpdate();
}
public int bookTypeDelete(Connection con,String id) throws Exception{
String sql = "delete from t_bookType where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,id);
return pstmt.executeUpdate();
}
}
cn.edu.sau.dao.BookTypeDao
BookTypeDao类提供了添加图书类别,获取图书类别列表,更改图书类别以及删除图书类别方法。
String bookTypeName = bookTypeNameTxt.getText();
String bookTypeDesc = bookTypeDescTxt.getText();
if(StringUtil.isEmpty(bookTypeName)){
JOptionPane.showMessageDialog(null,"图书类别名称不能为空");
}else{
Connection con = null;
try {
con = dbUtil.getCon();
BookType bookType = new BookType(bookTypeName,bookTypeDesc);
int ret = bookTypeDao.bookTypeAdd(con, bookType);
if(1 == ret){
JOptionPane.showMessageDialog(null, "图书类别添加成功");
reset();
}else{
JOptionPane.showMessageDialog(null, "图书类别添加失败");
}
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "图书类别添加失败");
e1.printStackTrace();
}
}
}
cn.edu.sau.view.BookTypeAddInterFrm
图书类别添加界面获取用户输入,进行图书类别的添加。
private void fillTable(BookType bookType){
DefaultTableModel dtm = (DefaultTableModel)bookTypeTable.getModel();
dtm.setRowCount(0);
Connection con = null;
try {
con = dbUtil.getCon();
ResultSet res = bookTypeDao.bookTypeList(con, bookType);
while(res.next()){
Vector v = new Vector();
v.add(res.getString("id"));
v.add(res.getString("bookTypeName"));
v.add(res.getString("bookTypeDesc"));
dtm.addRow(v);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//鼠标点击表格填充内容至相应位置
bookTypeTable.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int row = bookTypeTable.getSelectedRow();
idTxt.setText((String)bookTypeTable.getValueAt(row, 0));
bookTypeNameTxt.setText((String)bookTypeTable.getValueAt(row, 1));
bookTypeDescTxt.setText((String)bookTypeTable.getValueAt(row, 2));
}
});
//修改图书类别函数体
String bookTypeName = bookTypeNameTxt.getText();
String bookTypeDesc = bookTypeDescTxt.getText();
if(StringUtil.isEmpty(bookTypeName)){
JOptionPane.showMessageDialog(null, "图书类别名称不能为空");
}
BookType bookType = new BookType(bookTypeName,bookTypeDesc);
bookType.setId(Integer.parseInt(idTxt.getText()));
Connection con = null;
try {
con = dbUtil.getCon();
int re = bookTypeDao.bookTypeModify(con, bookType);
if(1 == re){
JOptionPane.showMessageDialog(null, "修改成功");
fillTable(new BookType("",""));
reset();
}else{
JOptionPane.showMessageDialog(null, "修改失败");
}
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "修改失败");
e1.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e1) {
e1.printStackTrace();
}
}
//删除图书类别函数体
String id = idTxt.getText();
Connection con = null;
try {
con = dbUtil.getCon();
int re = bookTypeDao.bookTypeDelete(con, id);
if(1 == re){
JOptionPane.showMessageDialog(null, "删除成功");
fillTable(new BookType("",""));
reset();
}else{
JOptionPane.showMessageDialog(null, "删除失败");
}
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "删除失败");
e1.printStackTrace();
} finally{
try {
dbUtil.closeCon(con);
} catch (Exception e1) {
e1.printStackTrace();
}
}
cn.edu.sau.view.BookTypeManageInterFrm
fillTable为图书类别管理界面函数,填充界面表格元素的内容。其余函数在代码中有注释,分别为表格的点击自动填充、修改图书类别、删除图书类别代码实现
3、图书维护
package cn.edu.sau.model;
/**
* 图书类
* */
public class Book {
private int id;
private String bookName;
private String bookAuthor;
private float bookPrice;
private String bookDesc;
private int bookTypeId;
private String bookTypeName;
public Book() {
super();
this.id = -1;
this.bookName = "";
this.bookAuthor = "";
this.bookPrice = 0;
this.bookDesc = "";
this.bookTypeId = -1;
}
public Book(int id, String bookName) {
super();
this.id = id;
this.bookName = bookName;
}
public Book(int id, String bookName, String bookAuthor, float bookPrice,
String bookDesc, int bookTypeId) {
super();
this.id = id;
this.bookName = bookName;
this.bookAuthor = bookAuthor;
this.bookPrice = bookPrice;
this.bookDesc = bookDesc;
this.bookTypeId = bookTypeId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookAuthor() {
return bookAuthor;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
public float getBookPrice() {
return bookPrice;
}
public void setBookPrice(float bookPrice) {
this.bookPrice = bookPrice;
}
public String getBookDesc() {
return bookDesc;
}
public void setBookDesc(String bookDesc) {
this.bookDesc = bookDesc;
}
public int getBookTypeId() {
return bookTypeId;
}
public void setBookTypeId(int bookTypeId) {
this.bookTypeId = bookTypeId;
}
public String getBookTypeName() {
return bookTypeName;
}
public void setBookTypeName(String bookTypeName) {
this.bookTypeName = bookTypeName;
}
}
cn.edu.sau.model.Book
该类为图书的抽象类,完成了对图书的抽象描述。
package cn.edu.sau.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import cn.edu.sau.model.Book;
import cn.edu.sau.model.BookType;
import cn.edu.sau.util.StringUtil;
public class BookDao {
public static int bookAdd(Connection con , Book book) throws Exception{
String sql = "insert into t_book values(null,?,?,?,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,book.getBookName());
pstmt.setString(2,book.getBookAuthor());
pstmt.setFloat(3,book.getBookPrice());
pstmt.setString(4,book.getBookDesc());
pstmt.setInt(5,book.getBookTypeId());
return pstmt.executeUpdate();
}
public ResultSet bookList(Connection con,Book book)throws Exception{
StringBuffer sb=new StringBuffer("select * from t_book b,t_bookType bt where b.bookTypeId=bt.id");
if(StringUtil.isNotEmpty(book.getBookName())){
sb.append(" and b.bookName like '%"+book.getBookName()+"%'");
}
if(StringUtil.isNotEmpty(book.getBookAuthor())){
sb.append(" and b.author like '%"+book.getBookAuthor()+"%'");
}
if(book.getBookTypeId()!=-1){
sb.append(" and b.bookTypeId = "+book.getBookTypeId());
}
PreparedStatement pstmt=con.prepareStatement(sb.toString());
return pstmt.executeQuery();
}
public int bookDelete(Connection con,String id)throws Exception{
String sql="delete from t_book where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, id);
return pstmt.executeUpdate();
}
public int bookModify(Connection con,Book book) throws Exception{
String sql="update t_book set bookName=?,author=?,price=?,bookDesc=?,bookTypeId=? where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, book.getBookName());
pstmt.setString(2, book.getBookAuthor());
pstmt.setFloat(3, book.getBookPrice());
pstmt.setString(4, book.getBookDesc());
pstmt.setInt(5, book.getBookTypeId());
pstmt.setInt(6, book.getId());
return pstmt.executeUpdate();
}
public boolean getBookByBookTypeId(Connection con,String bookTypeId)throws Exception{
String sql="select * from t_book where bookTypeId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, bookTypeId);
ResultSet rs=pstmt.executeQuery();
return rs.next();
}
}
cn.edu.sau.dao.BookDao
该类和图书类别维护的Dao层类相似,实现了图书添加,图书类别,图书修改以及图书删除的方法。
package cn.edu.sau.view;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import cn.edu.sau.dao.BookDao;
import cn.edu.sau.dao.BookTypeDao;
import cn.edu.sau.model.Book;
import cn.edu.sau.model.BookType;
import cn.edu.sau.util.DbUtil;
import cn.edu.sau.util.StringUtil;
import javax.swing.ImageIcon;
public class BookAddInterFrm extends JInternalFrame {
DbUtil dbUtil = new DbUtil();
BookTypeDao bookTypeDao = new BookTypeDao();
BookDao bookDao = new BookDao();
private JTextField bookNameTxt;
private JTextField bookAuthorTxt;
private JTextField bookPriceTxt;
private JComboBox jcb_bookType;
private JTextArea bookDescTxt;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
BookAddInterFrm frame = new BookAddInterFrm();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public BookAddInterFrm() {
setClosable(true);
setIconifiable(true);
setTitle("\u56FE\u4E66\u6DFB\u52A0");
setBounds(100, 100, 474, 443);
setLocation(500, 100);
getContentPane().setLayout(null);
init();
fillBookType();
}
private void init() {
JLabel lb_bookName = new JLabel("\u56FE\u4E66\u540D\u79F0\uFF1A");
lb_bookName.setBounds(29, 39, 72, 15);
getContentPane().add(lb_bookName);
bookNameTxt = new JTextField();
bookNameTxt.setBounds(112, 36, 106, 21);
getContentPane().add(bookNameTxt);
bookNameTxt.setColumns(10);
JLabel lb_bookAuthor = new JLabel("\u56FE\u4E66\u4F5C\u8005\uFF1A");
lb_bookAuthor.setBounds(236, 39, 72, 15);
getContentPane().add(lb_bookAuthor);
bookAuthorTxt = new JTextField();
bookAuthorTxt.setBounds(304, 36, 101, 21);
getContentPane().add(bookAuthorTxt);
bookAuthorTxt.setColumns(10);
JLabel lb_bookPrice = new JLabel("\u56FE\u4E66\u4EF7\u683C\uFF1A");
lb_bookPrice.setBounds(29, 100, 72, 15);
getContentPane().add(lb_bookPrice);
bookPriceTxt = new JTextField();
bookPriceTxt.setBounds(112, 97, 106, 21);
getContentPane().add(bookPriceTxt);
bookPriceTxt.setColumns(10);
JLabel lb_bookType = new JLabel("\u56FE\u4E66\u7C7B\u522B\uFF1A");
lb_bookType.setBounds(236, 100, 74, 15);
getContentPane().add(lb_bookType);
jcb_bookType = new JComboBox();
jcb_bookType.setBounds(304, 97, 101, 21);
getContentPane().add(jcb_bookType);
JLabel lb_bookDesc = new JLabel("\u56FE\u4E66\u7B80\u4ECB\uFF1A");
lb_bookDesc.setBounds(28, 176, 73, 15);
getContentPane().add(lb_bookDesc);
bookDescTxt = new JTextArea();
bookDescTxt.setBounds(112, 172, 297, 127);
getContentPane().add(bookDescTxt);
JButton jb_bookAdd = new JButton("\u6DFB\u52A0");
jb_bookAdd.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\add.png"));
jb_bookAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String bookName = bookNameTxt.getText();
String bookAuthor = bookAuthorTxt.getText();
String bookPrice = bookPriceTxt.getText();
String bookDesc = bookDescTxt.getText();
if(StringUtil.isEmpty(bookName)){
JOptionPane.showMessageDialog(null, "图书名称不能为空");
return;
}
if(StringUtil.isEmpty(bookAuthor)){
JOptionPane.showMessageDialog(null, "图书作者不能为空");
return;
}
if(StringUtil.isEmpty(bookPrice)){
JOptionPane.showMessageDialog(null, "图书价格不能为空");
return;
}
BookType bookType = (BookType)jcb_bookType.getSelectedItem();
int bookTypeId = bookType.getId();
Book book = new Book(-1,bookName,bookAuthor,Float.parseFloat(bookPrice),bookDesc,bookTypeId);
Connection con = null;
try{
con = dbUtil.getCon();
int addNum = BookDao.bookAdd(con,book);
if(1 == addNum){
JOptionPane.showMessageDialog(null, "添加成功");
resetValue();
}else{
JOptionPane.showMessageDialog(null, "添加失败");
}
}catch(Exception ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "添加失败");
}finally{
try {
con.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
});
jb_bookAdd.setBounds(115, 339, 93, 23);
getContentPane().add(jb_bookAdd);
JButton jb_bookReset = new JButton("\u91CD\u7F6E");
jb_bookReset.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\reset.png"));
jb_bookReset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetValue();
}
});
jb_bookReset.setBounds(264, 339, 93, 23);
getContentPane().add(jb_bookReset);
}
private void fillBookType(){
Connection con = null;
BookType bookType = null;
try{
con = dbUtil.getCon();
ResultSet rs = bookTypeDao.bookTypeList(con, new BookType("",""));
while(rs.next()){
bookType = new BookType();
bookType.setId(rs.getInt("id"));
bookType.setBookTypeName(rs.getString("bookTypeName"));
jcb_bookType.addItem(bookType);
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void resetValue(){
bookNameTxt.setText("");
bookAuthorTxt.setText("");
bookPriceTxt.setText("");
jcb_bookType.setSelectedIndex(0);
bookDescTxt.setText("");
}
}
cn.edu.sau.view.BookAddInterFrm
界面中提供了添加图书的具体实现,以及其中将图书类别添加进下拉框的方法。
package cn.edu.sau.view;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import cn.edu.sau.dao.BookDao;
import cn.edu.sau.dao.BookTypeDao;
import cn.edu.sau.model.Book;
import cn.edu.sau.model.BookType;
import cn.edu.sau.util.DbUtil;
import cn.edu.sau.util.StringUtil;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
public class BookManageInterFrm extends JInternalFrame {
DbUtil dbUtil = new DbUtil();
BookTypeDao bookTypeDao = new BookTypeDao();
BookDao bookDao = new BookDao();
private JTextField s_bookNameTxt;
private JTextField s_bookAuthorTxt;
private JTable bookTable;
private JTextField idTxt;
private JTextField bookNameTxt;
private JTextField bookAuthorTxt;
private JTextField bookPriceTxt;
private JTextArea bookDescTxt;
private JScrollPane scrollPane;
private JComboBox<BookType> s_jcbBookType;
private JComboBox<BookType> jcb_bookType;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
BookManageInterFrm frame = new BookManageInterFrm();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public BookManageInterFrm() {
setClosable(true);
setIconifiable(true);
setTitle("\u56FE\u4E66\u7BA1\u7406");
setBounds(100, 100, 812, 618);
setLocation(300, 20);
getContentPane().setLayout(null);
init();
fillTable(new Book());
this.fillBookType("search");
this.fillBookType("modify");
}
private void fillBookType(String type) {
Connection con = null;
BookType bookType = null;
try {
con = dbUtil.getCon();
ResultSet rs = bookTypeDao.bookTypeList(con, new BookType());
if ("search".equals(type)) {
bookType = new BookType();
bookType.setBookTypeName("请选择...");
bookType.setId(-1);
this.s_jcbBookType.addItem(bookType);
}
while (rs.next()) {
bookType = new BookType();
bookType.setId(rs.getInt("id"));
bookType.setBookTypeName(rs.getString("bookTypeName"));
if ("search".equals(type)) {
this.s_jcbBookType.addItem(bookType);
} else if ("modify".equals(type)) {
this.jcb_bookType.addItem(bookType);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void fillTable(Book book) {
DefaultTableModel dtm = (DefaultTableModel)bookTable.getModel();
dtm.setRowCount(0);
Connection con = null;
try {
con = dbUtil.getCon();
ResultSet rs = bookDao.bookList(con, book);
while (rs.next()) {
Vector v = new Vector();
v.add(rs.getInt("id"));
v.add(rs.getString("bookName"));
v.add(rs.getString("author"));
v.add(rs.getFloat("price"));
v.add(rs.getString("bookDesc"));
v.add(rs.getString("bookTypeName"));
dtm.addRow(v);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void init() {
scrollPane = new JScrollPane();
scrollPane.setToolTipText("");
scrollPane.setBounds(30, 91, 732, 178);
getContentPane().add(scrollPane);
bookTable = new JTable();
bookTable.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int row = bookTable.getSelectedRow();
idTxt.setText((Integer)bookTable.getValueAt(row, 0)+"");
bookNameTxt.setText((String) bookTable.getValueAt(row, 1));
bookAuthorTxt.setText((String) bookTable.getValueAt(row, 2));
bookPriceTxt.setText((Float) bookTable.getValueAt(row, 3) + "");
bookDescTxt.setText(bookTable.getValueAt(row, 4) + "");
String bookTypeName = (String) bookTable.getValueAt(row, 5);
int n = jcb_bookType.getItemCount();
for (int i = 0; i < n; i++) {
BookType item = (BookType) jcb_bookType.getItemAt(i);
if (item.getBookTypeName().equals(bookTypeName)) {
jcb_bookType.setSelectedIndex(i);
}
}
}
});
bookTable.setToolTipText("\u56FE\u4E66");
bookTable.setSurrendersFocusOnKeystroke(true);
bookTable.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null, null, null},
},
new String[] {
"\u56FE\u4E66\u7F16\u53F7", "\u56FE\u4E66\u540D\u79F0", "\u56FE\u4E66\u4F5C\u8005", "\u56FE\u4E66\u4EF7\u683C", "\u56FE\u4E66\u63CF\u8FF0", "\u56FE\u4E66\u7C7B\u522B"
}
) {
boolean[] columnEditables = new boolean[] {
true, false, false, false, false, false
};
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
bookTable.getColumnModel().getColumn(1).setPreferredWidth(100);
bookTable.getColumnModel().getColumn(2).setPreferredWidth(92);
bookTable.getColumnModel().getColumn(3).setPreferredWidth(94);
bookTable.getColumnModel().getColumn(4).setPreferredWidth(164);
bookTable.getColumnModel().getColumn(5).setPreferredWidth(97);
scrollPane.setViewportView(bookTable);
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(null, "\u641C\u7D22\u6761\u4EF6", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel.setToolTipText("\u641C\u7D22\u6761\u4EF6");
panel.setBounds(31, 14, 732, 68);
getContentPane().add(panel);
panel.setLayout(null);
JLabel label = new JLabel("\u56FE\u4E66\u7C7B\u522B\uFF1A\r\n");
label.setBounds(410, 29, 72, 15);
panel.add(label);
JLabel lblNewLabel_1 = new JLabel("\u56FE\u4E66\u4F5C\u8005\uFF1A");
lblNewLabel_1.setBounds(209, 29, 72, 15);
panel.add(lblNewLabel_1);
JLabel lblNewLabel = new JLabel("\u56FE\u4E66\u540D\u79F0\uFF1A");
lblNewLabel.setBounds(10, 29, 67, 15);
panel.add(lblNewLabel);
s_bookNameTxt = new JTextField();
s_bookNameTxt.setBounds(84, 26, 114, 21);
panel.add(s_bookNameTxt);
s_bookNameTxt.setColumns(10);
s_bookAuthorTxt = new JTextField();
s_bookAuthorTxt.setBounds(285, 26, 114, 21);
panel.add(s_bookAuthorTxt);
s_bookAuthorTxt.setColumns(10);
JButton jb_search = new JButton("\u67E5\u8BE2");
jb_search.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\search.png"));
jb_search.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Book book = new Book();
String bookName = s_bookNameTxt.getText();
String bookAuthor = s_bookAuthorTxt.getText();
BookType bookType = (BookType)s_jcbBookType.getSelectedItem();
int bookTypeId = bookType.getId();
book.setBookName(bookName);
book.setBookAuthor(bookAuthor);
book.setBookTypeId(bookTypeId);
fillTable(book);
}
});
jb_search.setBounds(629, 25, 93, 23);
panel.add(jb_search);
s_jcbBookType = new JComboBox<BookType>();
s_jcbBookType.setBounds(472, 26, 131, 21);
panel.add(s_jcbBookType);
panel.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{label, lblNewLabel_1, lblNewLabel, s_bookNameTxt, s_bookAuthorTxt, jb_search, s_jcbBookType}));
JPanel panel_1 = new JPanel();
panel_1.setBorder(new TitledBorder(null, "\u8868\u5355\u64CD\u4F5C", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel_1.setToolTipText("\u8868\u5355\u64CD\u4F5C");
panel_1.setBounds(32, 283, 732, 274);
getContentPane().add(panel_1);
panel_1.setLayout(null);
JLabel label_1 = new JLabel("\u7F16\u53F7\uFF1A");
label_1.setBounds(10, 41, 57, 15);
panel_1.add(label_1);
idTxt = new JTextField();
idTxt.setEditable(false);
idTxt.setBounds(96, 38, 118, 21);
panel_1.add(idTxt);
idTxt.setColumns(10);
JLabel label_2 = new JLabel("\u56FE\u4E66\u540D\u79F0\uFF1A");
label_2.setBounds(10, 81, 76, 15);
panel_1.add(label_2);
bookNameTxt = new JTextField();
bookNameTxt.setBounds(96, 78, 118, 21);
panel_1.add(bookNameTxt);
bookNameTxt.setColumns(10);
JLabel label_3 = new JLabel("\u56FE\u4E66\u4F5C\u8005\uFF1A");
label_3.setBounds(224, 81, 65, 15);
panel_1.add(label_3);
bookAuthorTxt = new JTextField();
bookAuthorTxt.setColumns(10);
bookAuthorTxt.setBounds(299, 78, 118, 21);
panel_1.add(bookAuthorTxt);
JLabel label_4 = new JLabel("\u56FE\u4E66\u4EF7\u683C\uFF1A");
label_4.setBounds(10, 160, 76, 15);
panel_1.add(label_4);
bookPriceTxt = new JTextField();
bookPriceTxt.setBounds(96, 157, 117, 21);
panel_1.add(bookPriceTxt);
bookPriceTxt.setColumns(10);
JLabel label_5 = new JLabel("\u56FE\u4E66\u7C7B\u522B\uFF1A");
label_5.setBounds(224, 160, 65, 15);
panel_1.add(label_5);
jcb_bookType = new JComboBox<BookType>();
jcb_bookType.setBounds(299, 157, 118, 21);
panel_1.add(jcb_bookType);
JLabel label_6 = new JLabel("\u56FE\u4E66\u63CF\u8FF0\uFF1A");
label_6.setBounds(439, 81, 65, 15);
panel_1.add(label_6);
bookDescTxt = new JTextArea();
bookDescTxt.setBounds(514, 77, 208, 98);
panel_1.add(bookDescTxt);
JButton jb_modify = new JButton("\u4FEE\u6539");
jb_modify.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\modify.png"));
jb_modify.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String id = idTxt.getText();
if (StringUtil.isEmpty(id)) {
JOptionPane.showMessageDialog(null, "请选择要修改的记录!");
return;
}
String bookName=bookNameTxt.getText();
String author=bookAuthorTxt.getText();
String price=bookPriceTxt.getText();
String bookDesc=bookDescTxt.getText();
if(StringUtil.isEmpty(bookName)){
JOptionPane.showMessageDialog(null, "图书名称不能为空!");
return;
}
if(StringUtil.isEmpty(author)){
JOptionPane.showMessageDialog(null, "图书作者不能为空!");
return;
}
if(StringUtil.isEmpty(price)){
JOptionPane.showMessageDialog(null, "图书价格不能为空!");
return;
}
BookType bookType=(BookType) jcb_bookType.getSelectedItem();
int bookTypeId=bookType.getId();
Book book=new Book(Integer.parseInt(id),bookName,author,Float.parseFloat(price), bookDesc, bookTypeId);
Connection con = null;
try {
con = dbUtil.getCon();
int modifyNum = bookDao.bookModify(con, book);
if (modifyNum == 1) {
JOptionPane.showMessageDialog(null, "修改成功");
resetValue();
fillTable(new Book());
} else {
JOptionPane.showMessageDialog(null, "修改失败");
}
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "修改失败");
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception ec) {
ec.printStackTrace();
}
}
}
});
jb_modify.setBounds(66, 225, 93, 23);
panel_1.add(jb_modify);
JButton jb_delete = new JButton("\u5220\u9664");
jb_delete.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\delete.png"));
jb_delete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String id = idTxt.getText();
if (StringUtil.isEmpty(id)) {
JOptionPane.showMessageDialog(null, "请选择要删除的记录!");
return;
}
int n = JOptionPane.showConfirmDialog(null, "确定要删除这条记录吗?");
if (n == 0) {
Connection con=null;
try {
con = dbUtil.getCon();
int re = bookDao.bookDelete(con, id);
if(1 == re){
JOptionPane.showMessageDialog(null, "删除成功");
resetValue();
fillTable(new Book());
}else
JOptionPane.showMessageDialog(null, "删除失败");
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "删除失败");
e1.printStackTrace();
}
}
}
});
jb_delete.setBounds(257, 225, 93, 23);
panel_1.add(jb_delete);
}
private void resetValue() {
this.idTxt.setText("");
this.bookNameTxt.setText("");
this.bookAuthorTxt.setText("");
this.bookPriceTxt.setText("");
this.bookDescTxt.setText("");
if (jcb_bookType.getItemCount() > 0) {
jcb_bookType.setSelectedIndex(0);
}
}
}
cn.edu.sau.view.BookManageInterFrm
提供图书管理功能,主要功能和图书类别管理类似,这里不再赘述。
4、读者借阅图书
package cn.edu.sau.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import cn.edu.sau.model.Book;
import cn.edu.sau.model.User;
import cn.edu.sau.util.StringUtil;
public class UserDao {
public User login(Connection con, User user) throws Exception {
User returnUser = 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.getUserPassword());
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
returnUser = new User(rs.getInt("id"), rs.getString("userName"),
rs.getString("password"), rs.getInt("role"),
rs.getString("pname"));
}
return returnUser;
}
// 借书
public int lendBook(Connection con, int userId, int bookId)
throws Exception {
String sql = "insert into t_lendbook values(null,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, userId);
pstmt.setInt(2, bookId);
return pstmt.executeUpdate();
}
// 还书
public int returnBook(Connection con, String id) throws Exception {
String sql = "delete from t_lendbook where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
return pstmt.executeUpdate();
}
public ResultSet lendBookList(Connection con, User user, Book book)
throws Exception {
StringBuffer sb = new StringBuffer("select * from t_lendbook ");
if(user!=null && user.getId()!= -1){
sb.append(" and userid = "+user.getId());
}
if(book!=null && book.getId()!=-1){
sb.append(" and bookid ="+book.getId());
}
PreparedStatement pstmt = con.prepareStatement(sb.toString().replaceFirst("and", "where"));
return pstmt.executeQuery();
}
public String getPnameById(Connection con, int userId) throws Exception {
String sql = "select * from t_user where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, userId);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
return rs.getString("pname");
else
return null;
}
}
提供借书,还书,读取借书类别清单,以及辅助函数(根据用户id获取用户姓名)等方法。
package cn.edu.sau.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import cn.edu.sau.dao.BookDao;
import cn.edu.sau.dao.BookTypeDao;
import cn.edu.sau.dao.UserDao;
import cn.edu.sau.model.Book;
import cn.edu.sau.model.BookType;
import cn.edu.sau.model.User;
import cn.edu.sau.util.DbUtil;
import java.awt.Window.Type;
import javax.swing.ImageIcon;
public class UserMainFrm extends JFrame {
private User user;
DbUtil dbUtil = new DbUtil();
BookDao bookDao = new BookDao();
BookTypeDao bookTypeDao = new BookTypeDao();
UserDao userDao = new UserDao();
private JPanel contentPane;
private JPanel panel;
private JTextField bookNameTxt;
private JTextField bookAuthorTxt;
private JComboBox<BookType> jcb_bookType;
private JButton jb_search;
private JTable table;
private JTextField s_idTxt;
private JButton jb_lendBook;
private JTextField s_bookNameTxt;
/**
* Launch the application.
*/
/*public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UserMainFrm frame = new UserMainFrm();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}*/
/**
* Create the frame.
*/
public UserMainFrm(User user) {
setTitle("\u501F\u9605\u7CFB\u7EDF");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 835, 445);
this.user = user;
JOptionPane.showMessageDialog(null, "欢迎"+user.getPname()+"使用我们的系统");
init();
fillTable(new Book());
this.fillBookType("search");
this.fillBookType("modify");
}
private void fillBookType(String type) {
Connection con = null;
BookType bookType = null;
try {
con = dbUtil.getCon();
ResultSet rs = bookTypeDao.bookTypeList(con, new BookType());
if ("search".equals(type)) {
bookType = new BookType();
bookType.setBookTypeName("请选择...");
bookType.setId(-1);
this.jcb_bookType.addItem(bookType);
}
while (rs.next()) {
bookType = new BookType();
bookType.setId(rs.getInt("id"));
bookType.setBookTypeName(rs.getString("bookTypeName"));
if ("search".equals(type)) {
this.jcb_bookType.addItem(bookType);
} else if ("modify".equals(type)) {
this.jcb_bookType.addItem(bookType);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void fillTable(Book book) {
DefaultTableModel dtm = (DefaultTableModel)table.getModel();
dtm.setRowCount(0);
Connection con = null;
try {
con = dbUtil.getCon();
ResultSet rs = bookDao.bookList(con, book);
while (rs.next()) {
Vector v = new Vector();
v.add(rs.getInt("id"));
v.add(rs.getString("bookName"));
v.add(rs.getString("author"));
v.add(rs.getFloat("price"));
v.add(rs.getString("bookDesc"));
v.add(rs.getString("bookTypeName"));
String state = rs.getInt("state")==1?"借阅中":"正常";
v.add(state);
dtm.addRow(v);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void init() {
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
panel = new JPanel();
panel.setLayout(null);
panel.setToolTipText("\u641C\u7D22\u6761\u4EF6");
panel.setBorder(new TitledBorder(null, "\u641C\u7D22\u6761\u4EF6", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel.setBounds(43, 28, 732, 68);
contentPane.add(panel);
JLabel label = new JLabel("\u56FE\u4E66\u7C7B\u522B\uFF1A\r\n");
label.setBounds(410, 29, 72, 15);
panel.add(label);
JLabel label_1 = new JLabel("\u56FE\u4E66\u4F5C\u8005\uFF1A");
label_1.setBounds(209, 29, 72, 15);
panel.add(label_1);
JLabel label_2 = new JLabel("\u56FE\u4E66\u540D\u79F0\uFF1A");
label_2.setBounds(10, 29, 67, 15);
panel.add(label_2);
bookNameTxt = new JTextField();
bookNameTxt.setColumns(10);
bookNameTxt.setBounds(84, 26, 114, 21);
panel.add(bookNameTxt);
bookAuthorTxt = new JTextField();
bookAuthorTxt.setColumns(10);
bookAuthorTxt.setBounds(285, 26, 114, 21);
panel.add(bookAuthorTxt);
jb_search = new JButton("\u67E5\u8BE2");
jb_search.setIcon(new ImageIcon("D:\\java\\MyBookManager\\image\\search.png"));
jb_search.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Book book = new Book();
String bookName = bookNameTxt.getText();
String bookAuthor = bookAuthorTxt.getText();
BookType bookType = (BookType)jcb_bookType.getSelectedItem();
int bookTypeId = bookType.getId();
book.setBookName(bookName);
book.setBookAuthor(bookAuthor);
book.setBookTypeId(bookTypeId);
fillTable(book);
}
});
jb_search.setBounds(629, 25, 93, 23);
panel.add(jb_search);
jcb_bookType = new JComboBox<BookType>();
jcb_bookType.setBounds(472, 26, 131, 21);
panel.add(jcb_bookType);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setToolTipText("");
scrollPane.setBounds(43, 120, 732, 178);
contentPane.add(scrollPane);
table = new JTable();
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int row = table.getSelectedRow();
s_idTxt.setText((Integer)table.getValueAt(row, 0)+"");
s_bookNameTxt.setText(table.getValueAt(row, 1)+"");
}
});
table.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null, null, null, null},
},
new String[] {
"\u56FE\u4E66\u7F16\u53F7", "\u56FE\u4E66\u540D\u79F0", "\u56FE\u4E66\u4F5C\u8005", "\u56FE\u4E66\u4EF7\u683C", "\u56FE\u4E66\u63CF\u8FF0", "\u56FE\u4E66\u7C7B\u522B", "\u56FE\u4E66\u72B6\u6001"
}
));
table.setToolTipText("\u56FE\u4E66");
table.setSurrendersFocusOnKeystroke(true);
scrollPane.setViewportView(table);
jb_lendBook = new JButton("\u501F\u4E66");
jb_lendBook.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
String state = table.getValueAt(row,6)+"";
if("借阅中".equals(state)){
JOptionPane.showMessageDialog(null, "该书已经被借走,请选择其他书籍");
}else{
Connection con=null;
try {
con = dbUtil.getCon();
int bookId = (Integer)table.getValueAt(row,0);
int ret = userDao.lendBook(con, user.getId(), bookId);
if(1 == ret){
fillTable(new Book());
JOptionPane.showMessageDialog(null, "借阅成功");
bookDao.bookLend(con, bookId);
}
else
JOptionPane.showMessageDialog(null, "借阅失败");
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "借阅失败");
e1.printStackTrace();
} finally{
try {
dbUtil.closeCon(con);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
});
jb_lendBook.setBounds(615, 322, 160, 23);
contentPane.add(jb_lendBook);
JLabel label_3 = new JLabel("\u56FE\u4E66\u7F16\u53F7\uFF1A");
label_3.setBounds(43, 326, 66, 15);
contentPane.add(label_3);
s_idTxt = new JTextField();
s_idTxt.setEnabled(false);
s_idTxt.setBounds(119, 323, 135, 21);
contentPane.add(s_idTxt);
s_idTxt.setColumns(10);
JLabel label_4 = new JLabel("\u56FE\u4E66\u540D\u79F0\uFF1A");
label_4.setBounds(340, 326, 66, 15);
contentPane.add(label_4);
s_bookNameTxt = new JTextField();
s_bookNameTxt.setEnabled(false);
s_bookNameTxt.setColumns(10);
s_bookNameTxt.setBounds(427, 323, 135, 21);
contentPane.add(s_bookNameTxt);
}
}
cn.edu.sau.view.UserMain
这里书的状态主要由book表的state字段决定,为0正常,为1表示被借走。
5、管理员借阅情况管理
package cn.edu.sau.view;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import cn.edu.sau.dao.BookDao;
import cn.edu.sau.dao.UserDao;
import cn.edu.sau.model.Book;
import cn.edu.sau.model.User;
import cn.edu.sau.util.DbUtil;
import cn.edu.sau.util.StringUtil;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class LendBookManageInterFrm extends JInternalFrame {
DbUtil dbUtil = new DbUtil();
UserDao userDao = new UserDao();
BookDao bookDao = new BookDao();
private JTextField userIdTxt;
private JTextField bookIdTxt;
private JTable table;
private JTextField s_idTxt;
private JTextField s_userNameTxt;
private JTextField s_bookNameTxt;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
LendBookManageInterFrm frame = new LendBookManageInterFrm();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public LendBookManageInterFrm() {
setIconifiable(true);
setClosable(true);
setTitle("\u56FE\u4E66\u501F\u9605\u7BA1\u7406");
setBounds(100, 100, 691, 448);
getContentPane().setLayout(null);
init();
fillTable(null,null);
}
//填充借书记录表格
private void fillTable(User user,Book book){
DefaultTableModel dtm = (DefaultTableModel)table.getModel();
dtm.setRowCount(0);
Connection con = null;
try {
con = dbUtil.getCon();
ResultSet rs = userDao.lendBookList(con, user, book);
while (rs.next()) {
Vector v = new Vector();
v.add(rs.getInt("id"));
v.add(userDao.getPnameById(con, rs.getInt("userid"))+"("+rs.getInt("userid")+")");
v.add(bookDao.getBookNameById(con, rs.getInt("bookid"))+"("+rs.getInt("bookid")+")");
dtm.addRow(v);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void init() {
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "\u641C\u7D22\u6761\u4EF6", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
panel.setToolTipText("\u641C\u7D22\u6761\u4EF6");
panel.setBounds(10, 24, 655, 58);
getContentPane().add(panel);
panel.setLayout(null);
JLabel lblid = new JLabel("\u7528\u6237Id\uFF1A");
lblid.setBounds(10, 20, 70, 15);
panel.add(lblid);
userIdTxt = new JTextField();
userIdTxt.setBounds(78, 17, 150, 21);
panel.add(userIdTxt);
userIdTxt.setColumns(10);
JLabel lblid_1 = new JLabel("\u56FE\u4E66Id\r\n\uFF1A");
lblid_1.setBounds(238, 20, 70, 15);
panel.add(lblid_1);
bookIdTxt = new JTextField();
bookIdTxt.setBounds(318, 17, 155, 21);
panel.add(bookIdTxt);
bookIdTxt.setColumns(10);
//搜索按钮
JButton jb_search = new JButton("\u641C\u7D22");
jb_search.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Connection con=null;
try {
con = dbUtil.getCon();
String userId = userIdTxt.getText();
String bookId = bookIdTxt.getText();
Book book = new Book();
User user = new User();
if(StringUtil.isNotEmpty(bookId)){
book.setId(Integer.parseInt(bookId));
}
if(StringUtil.isNotEmpty(userId))
user.setId(Integer.parseInt(userId));
fillTable(user,book);
} catch (Exception e1) {
e1.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
jb_search.setBounds(510, 16, 93, 23);
panel.add(jb_search);
panel.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{lblid, userIdTxt, lblid_1, bookIdTxt, jb_search}));
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 92, 655, 174);
getContentPane().add(scrollPane);
//借书记录表格
table = new JTable();
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int row = table.getSelectedRow();
s_idTxt.setText(table.getValueAt(row, 0)+"");
String userName = table.getValueAt(row, 1)+"";
s_userNameTxt.setText(userName.replaceAll("\\(\\d*\\)", ""));
String bookName = table.getValueAt(row, 2)+"";
s_bookNameTxt.setText(bookName.replaceAll("\\(\\d*\\)", ""));
}
});
table.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null},
},
new String[] {
"\u7F16\u53F7", "\u501F\u9605\u4EBA", "\u501F\u9605\u56FE\u4E66"
}
));
table.getColumnModel().getColumn(0).setPreferredWidth(83);
table.getColumnModel().getColumn(1).setPreferredWidth(162);
table.getColumnModel().getColumn(2).setPreferredWidth(187);
scrollPane.setViewportView(table);
JPanel panel_1 = new JPanel();
panel_1.setBorder(new TitledBorder(null, "\u8868\u5355\u64CD\u4F5C", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel_1.setBounds(10, 276, 655, 101);
getContentPane().add(panel_1);
panel_1.setLayout(null);
JLabel label_2 = new JLabel("\u7F16\u53F7\uFF1A");
label_2.setBounds(10, 33, 60, 15);
panel_1.add(label_2);
s_idTxt = new JTextField();
s_idTxt.setBounds(91, 30, 66, 21);
panel_1.add(s_idTxt);
s_idTxt.setColumns(10);
JLabel label_3 = new JLabel("\u501F\u9605\u4EBA\uFF1A");
label_3.setBounds(195, 33, 65, 15);
panel_1.add(label_3);
s_userNameTxt = new JTextField();
s_userNameTxt.setBounds(270, 30, 132, 21);
panel_1.add(s_userNameTxt);
s_userNameTxt.setColumns(10);
JLabel label_4 = new JLabel("\u56FE\u4E66\u540D\u79F0\uFF1A");
label_4.setBounds(432, 33, 71, 15);
panel_1.add(label_4);
s_bookNameTxt = new JTextField();
s_bookNameTxt.setBounds(513, 30, 132, 21);
panel_1.add(s_bookNameTxt);
s_bookNameTxt.setColumns(10);
//还书按钮
JButton jb_return = new JButton("\u5F52\u8FD8");
jb_return.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Connection con = null;
try {
con = dbUtil.getCon();
String id = s_idTxt.getText();
String bookName = s_bookNameTxt.getText();
if(StringUtil.isEmpty(bookName)){
JOptionPane.showMessageDialog(null, "请选择要归还书籍记录");
return ;
}
userDao.returnBook(con, id);
bookDao.bookReturn(con, bookName);
fillTable(null, null);
} catch (Exception e1) {
e1.printStackTrace();
} finally{
try {
dbUtil.closeCon(con);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
jb_return.setBounds(10, 68, 635, 23);
panel_1.add(jb_return);
}
}
cn.edu.sau.view.LendBookManageInterFrm
界面提供了多级连表查询以及还书接口。
6、数据库设计
1)user表
2)booktype表
3)book表
4)lendbook表
根据数据库所学知识,我们将数据库分为4张表,user表中记录用户信息;booktype表中记录图书分类信息;book表中记录图书信息,同时将book表中的booktypeId关联到booktype表的id上;lendbook为借书信息,其中userid和bookid为两个外键,分别对应user表的id和book表的id。这里应该感谢这学期的数据库课程,让我们在设计表结构的时候免去了不少的麻烦。
注:代码注释不是很详细,传至coding时会添加完整注释内容以及数据库文件等(虽然我现在不知道这种工程应该怎么传送到coding T T )。
Conding地址:https://coding.net/u/2013040101068/p/alarm-work/git