计算机软件实习4-图书管理系统

课前预习内容

课程要求

  1. 设计一个简单的图书管理系统,图书管理人员能够使用图书管理系统程序对图书类型进行管理,包括数据的添加、修改、删除和浏览;能够对图书信息进行管理,包括添加相关的图书信息,并可以指定图书进行查看。
  2. 图书信息不能随意删除,拥有图书的图书类型不能随意删除,并且要给出相关的提示,但是没有图书的图书类型可以删除。
  3. 应用程序提供操作界面,可以方便用户进行功能选择,实现应用程序提供操作界面,可以方便用户进行功能选择,实现信息的管信息的管理和查询,理和查询,并可以清晰地显示相关信息。并可以清晰地显示相关信息。

课程难点

  1. 要实现相关内容的增删改查,包括图书类别和图书信息。
  2. 要正确连接处理图书类别及图书的关系(1:n),避免出现程序错误,逻辑关系混乱。
  3. 要设计友好交互界面,在增删改查的过程中给出相关的提示。

开发环境

本实验设计的图书管理系统是基于Java的windowbuilder进行开发,数据库是基于MySql的。

课程设计

本系统需要设计三个表,分别是用户表,图书表及图书类别表。
其中图书和图书类别是系统的主体,因此我们需要弄清楚图书及图书列别之间的联系,因此我们先把图书及图书类别的关系整理清晰。
在这里插入图片描述
上述图片展示了两者之间的关系,我们根据上图设计数据库,并在Java里进行实现。
其次是用户表的设计,用户表的内容主要是用户id,用户名和密码。但是这一部分主要是用于系统的登录,因此和图书及图书类别的联系不是那么大。

图书馆系统实现

数据库

我们在数据库一共创建了3个表,分别是用户表、图书表和图书类别表。创建内容如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由于图书表和图书类别表是功能实现的重点,因此在这里我们创建这两个表的模型。具体实现如下图表示。
在这里插入图片描述

数据库与Java连接

我们创建了数据库,但是我们的系统开发是在Java上,因此需要连接数据库和Java。故我们在数据库创建包com.bookmanager.util用于数据库的连接。该包一共包括两部分内容。
第一部分为:DbUtil.java
主要包括三部分,打开、关闭数据库及主函数测试。

package com.bookmanager.util;
import java.sql.Connection;
import java.sql.DriverManager;

/**
 * 数据库工具类
 * @author WenRan
 *
 */
public class DbUtil {
	private String dbUrl="jdbc:mysql://localhost:3306/db_book?serverTimezone=UTC";//数据库连接地址
	private String dbUserName="root";//用户名
	private String dbPassword="123456";//密码
	private String jdbcName="com.mysql.cj.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();
		}
	}
	
	/**
	 * 主函数测试
	 * @param args
	 */
	public static void main(String[] args) {
		DbUtil dbUtil=new DbUtil();
		try {
			dbUtil.getCon();	
			System.out.println("数据库连接成功!");
		}catch(Exception e) {
			e.printStackTrace();
			System.out.println("数据库连接失败!");
		}		
	}
}

第二部分为:StringUtil.java
这部分内容是用来判断在登录过程中,输入的数据是否为空。

package com.bookmanager.util;

/**
 1. 字符串工具类
 2. @author WenRan
 3.  */
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;
		}			
	}
}

登陆界面设计

界面设计

首先我们先要设计用户登录界面,该界面主要用windowbuilder的JFrame完成设计,我们根据提供的按键设计如下图所示的界面。
在这里插入图片描述
登录完成后,我们进入主界面,因此我们还需要设置主界面。
主界面是连接各个其他界面的基础,我们在其中再添加一些内置界面,从而形成整个管理系统。
在这里插入图片描述

功能实现

登录事件:

/**
	 * 登录事件处理
	 * @param e
	 */
    private void loginActionPerformed(ActionEvent e) {
    	String userName=this.userNameTxt.getText();//获得对应的用户名
    	String password=new String(this.passwordTxt.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();//连接数据库
    		User currentUser=userDao.login(con,user);
    		if(currentUser!=null) {
    			dispose();//销毁当前窗体,进入主界面
    			new MainFrm().setVisible(true);
    		}else {
    			JOptionPane.showMessageDialog(null,"用户名密码错误!");
    		}
    	}catch(Exception m) {
    		m.printStackTrace();
    	}		    	
	}

主界面:
主界面写在MainFrm.java里,里面写着各个内置界面和主界面的连接。(主要是通过按键实现)

用户界面设计(用户)

为了系统实现,我们在Java中创建三个包,分别是
①com.bookmanager.dao
②com.bookmanager.model
③com.bookmanager.view
其中Dao(数据访问对象):data access object是一个面向对象的数据库接口,用于直接连接数据库的数据。
model层是实体层,用于写数据库的增删改查操作。
view层是视图层,用于写前端的页面。
我们给每一个表都各创建这三层。
在这里插入图片描述

界面设计

如图所示,设计界面提供相关的按键进行插入,然后根据要求进行用户界面设计。
在这里插入图片描述
在这里插入图片描述

功能实现

1.Dao

package com.bookmanager.dao;

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

import com.bookmanager.model.User;

/**
 1. 用户Dao类(Dao(数据访问对象):data access object)
 2. @author WenRan
 3.  */
public class UserDao {
	/**
	 * 登陆验证
	 * @param con
	 * @param user
	 * @return
	 * @throws Exception
	 */
	public User login(Connection con,User user)throws Exception{//user是界面传过来的用户信息
		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();//执行pstmt之后返回的结果集
		if(rs.next()) {//判断结果集是否有下一条记录
			resultUser=new User();//有记录就进行实例化并进行设置
			resultUser.setId(rs.getInt("id"));
			resultUser.setUserName(rs.getString("userName"));
			resultUser.setPassword(rs.getString("password"));				
		}		
		return resultUser;	
	}
}
  1. model
package com.bookmanager.model;

/**
 * 用户实体
 * @author WenRan
 *
 */
public class User {
	private int id;//编号
	private String userName;//用户名
	private String password;//密码
	
	//用来辅助LogOnFrm,连接到数据库
	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;
	}
}
  1. view
package com.bookmanager.view;

import java.awt.EventQueue;

import javax.swing.JInternalFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Color;
import javax.swing.border.BevelBorder;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;

public class UserInterFrm extends JInternalFrame {

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					UserInterFrm frame = new UserInterFrm();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public UserInterFrm() {
		getContentPane().setBackground(Color.GRAY);
		getContentPane().setLayout(new BorderLayout(0, 0));
		
		JLabel lblNewLabel = new JLabel("");
		lblNewLabel.setIcon(new ImageIcon(UserInterFrm.class.getResource("/images/java.png")));
		getContentPane().add(lblNewLabel, BorderLayout.CENTER);
		setClosable(true);
		setIconifiable(true);
		setTitle("\u5173\u4E8E\u7528\u6237");
		setBounds(100, 100, 593, 479);
	}
}

第三部分的view就是用于创建前端界面的,frame就是我们在windowbuilder里创建的

图书类别功能实现(图书类别)

界面设计

图书类别的功能设计是设置在图书类别管理之下的,主要包括图书类别添加和图书类别维护,这两个界面被作为内置界面添加在主界面内。
在这里插入图片描述
如图所示根据

  1. 图书类别添加
    在这里插入图片描述
  2. 图书类别维护
    在这里插入图片描述

增删改查

  1. Dao
package com.bookmanager.dao;

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

import com.bookmanager.model.BookType;
import com.bookmanager.util.StringUtil;

/**
 * 图书类别Dao类
 * @author WenRan
 *
 */
public class BookTypeDao {
	
	/**
	 * 图书类别添加
	 * @param con
	 * @param bookType
	 * @return
	 * @throws Exception
	 */
	public int add(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();
	}	
	
	/**
	 * 查询图书类别集合
	 * @param con
	 * @param bookType
	 * @return
	 * @throws Exception
	 */
	public ResultSet list(Connection con,BookType bookType)throws Exception{
		//因为此处为动态的,故选择StringBuffer
		StringBuffer sb=new StringBuffer("select * from t_bookType");
		if(StringUtil.isNotEmpty(bookType.getBookTypeName())) {
			sb.append(" and bookTypeName like '%"+bookType.getBookTypeName()+"%'");
			
		}
		PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and","where"));
		return pstmt.executeQuery();
	}
	
	/**
	 * 删除图书类别
	 * @param con
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public int delete(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();
		
	}
	
	/**
	 * 更新图书类别
	 * @param con
	 * @param bookType
	 * @return
	 * @throws Exception
	 */
	public int Update(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();
	}
}

  1. model
package com.bookmanager.model;

/**
 * 图书类别实体
 * @author WenRan
 *
 */
public class BookType {
	private int id;//编号
	private String bookTypeName;//图书类别名称
	private String bookTypeDesc;//备注
		
	public BookType() {
		super();
		// TODO Auto-generated constructor stub
	}

	public BookType(String bookTypeName, String bookTypeDesc) {
		super();
		this.bookTypeName = bookTypeName;
		this.bookTypeDesc = bookTypeDesc;
	}

	public BookType(int id, String bookTypeName, String bookTypeDesc) {
		super();
		this.id = id;
		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 bookTypeName;
	}
}

  1. view
    图书类别添加事件:
/**
	 * 图书类别添加事件处理
	 * @param e
	 */
	private void bookTypeAddActionPerformed(ActionEvent evt) {
		//获取文本
		String bookTypeName=this.bookTypeNameTxt.getText();
		String bookTypeDesc=this.bookTypeDescTxt.getText();
		//判断图书类别名称是否为空
		if(StringUtil.isEmpty(bookTypeName)) {
			JOptionPane.showMessageDialog(null,"图书类别名称不能为空!");
			return;
		}
		//封装实体
		BookType bookType=new BookType(bookTypeName,bookTypeDesc);
		//功能实现
		Connection con=null;
		try {
			con=dbUtil.getCon();
			int n=bookTypeDao.add(con,bookType);
			if(n==1) {
				JOptionPane.showMessageDialog(null,"图书类别添加成功!");
				resetValue();
			}else {
				JOptionPane.showMessageDialog(null,"图书类别添加失败!");
			}
		}catch(Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null,"图书类别添加失败!");
		}finally {
			try {
				dbUtil.closeCon(con);	//关闭数据库		
			}catch(Exception e) {
				e.printStackTrace();
			}					
		}				
	}

图书类别维护:

/**
	 * 图书类别删除事件处理
	 * @param e
	 */
	private void bookTypeDeleteActionEvent(ActionEvent e) {
		String id=idTxt.getText();//获取id
		if(StringUtil.isEmpty(id)) {//id为空
			JOptionPane.showMessageDialog(null,"请选择要删除的记录");
			return ;
		}
		//为防止用户误点,要进行一个确认设置
		int n=JOptionPane.showConfirmDialog(null,"确定要删除该记录吗?");
		if(n==0) {
			Connection con=null;//开始连接
			try {
				con=dbUtil.getCon();
				boolean flag=bookDao.existBookByBookTypeId(con,id);
				if(flag) {
					JOptionPane.showMessageDialog(null,"当前图书下类别有图书,不能删除此类别");
					return ;
				}
				int deleteNum=bookTypeDao.delete(con,id);
				if(deleteNum==1) {
					JOptionPane.showMessageDialog(null,"删除成功");
		            this.resetValue();
		            this.fillTable(new BookType());
				}else {
					JOptionPane.showConfirmDialog(null,"删除失败");	
				}
			}catch(Exception m) {
				m.printStackTrace(); 
				JOptionPane.showMessageDialog(null,"删除失败");
			}finally {
				try {
					dbUtil.closeCon(con);	//关闭数据库		
				}catch(Exception s) {
					s.printStackTrace();
				}			
			}			
		}		
	}

	/**
	 * 图书类别修改事件处理
	 * @param evt
	 */
	private void bookTypeUpdateActionEvent(ActionEvent evt) {
		//获取三个数据
		String id=idTxt.getText();
		String bookTypeName=bookTypeNameTxt.getText();
		String bookTypeDesc=bookTypeDescTxt.getText();
		//对id进行判断,如果id是空的,则不能进行修改
		if(StringUtil.isEmpty(id)) {
			JOptionPane.showMessageDialog(null,"请选择要修改的记录");
			return ;
		}
		//判断bookTypeName
		if(StringUtil.isEmpty(bookTypeName)) {
			JOptionPane.showMessageDialog(null,"图书类别名称不能为空");
			return ;
		}
		//实例化
		BookType bookType=new BookType(Integer.parseInt(id),bookTypeName,bookTypeDesc); 
		//功能实现
		Connection con=null;//开始连接
		try {
			con=dbUtil.getCon();
			int modifyNum=bookTypeDao.Update(con,bookType);
			if(modifyNum==1) {
				JOptionPane.showMessageDialog(null,"修改成功");
				this.resetValue();//重置
				this.fillTable(new BookType());//重现显示一个实例
			}else {
				JOptionPane.showMessageDialog(null,"修改失败");	
			}
		}catch(Exception e) {
			e.printStackTrace(); 
			JOptionPane.showMessageDialog(null,"修改失败");
		}finally {
			try {
				dbUtil.closeCon(con);	//关闭数据库		
			}catch(Exception e) {
				e.printStackTrace();
			}					
		}				
	}

 
	/**
	 * 图书类别搜索事件处理
	 * @param evt
	 */
	private void bookTypeSearchActionPerformed(ActionEvent evt) {
		
		String s_bookTypeName=this.s_bookTypeNameTxt.getText();//获取用户输入的图书类别
		BookType bookType=new BookType();
		bookType.setBookTypeName(s_bookTypeName);//把图书类别设置进去
		this.fillTable(bookType);		
	}

图书功能实现(图书)

在这里插入图片描述

界面设计

  1. 图书添加
    在这里插入图片描述
  2. 图书修改
    在这里插入图片描述

增删改查

  1. Dao
package com.bookmanager.dao;

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

import com.bookmanager.model.Book;
import com.bookmanager.util.StringUtil;
/**
 * 图书Dao类
 * @author WenRan
 *
 */
public class BookDao {
	
	/**
	 * 图书添加
	 * @param con
	 * @param book
	 * @return
	 * @throws Exception
	 */
	public int add(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.getAuthor());
		pstmt.setString(3,book.getSex());
		pstmt.setFloat(4,book.getPrice());
		pstmt.setInt(5,book.getBookTypeId());
		pstmt.setString(6,book.getBookDesc());
		return pstmt.executeUpdate();
	}
	
	
	/**
	 * 图书信息查询
	 * @param con
	 * @param book
	 * @return
	 * @throws Exception
	 */
	public ResultSet list(Connection con,Book book)throws Exception{
		//有数据拼接,因此在这里使用StringBuffer
		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.getAuthor())) {
			sb.append(" and b.bookauthor like '%"+book.getAuthor()+"%'");
		}
		if(book.getBookTypeId()!=null && book.getBookTypeId()!=-1) {
			sb.append(" and b.bookTypeId="+book.getBookTypeId());
		}
		//执行
		PreparedStatement pstmt=con.prepareStatement(sb.toString());
		return pstmt.executeQuery();
		
	}
	
	
	/**
	 * 图书信息删除
	 * @param con
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public int delete(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();
	}
	
	
	/**
	 * 图书信息修改
	 * @param con
	 * @param book
	 * @return
	 * @throws Exception
	 */
	public int update(Connection con,Book book)throws Exception{
		String sql="update t_book set bookName=?,author=?,sex=?,price=?,bookDesc=?,bookTypeId=? where id=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1,book.getBookName());
		pstmt.setString(2,book.getAuthor());
		pstmt.setString(3,book.getSex());
		pstmt.setFloat(4,book.getPrice());
		pstmt.setString(5,book.getBookDesc());
		pstmt.setInt(6,book.getBookTypeId());
		pstmt.setInt(7,book.getId());
		return pstmt.executeUpdate();
	}
	
	
	/**
	 * 指定图书类别下是否存在图书
	 * @param con
	 * @param bookTypeId
	 * @return
	 * @throws Exception
	 */
	public boolean existBookByBookTypeId(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();
		
	}

}

  1. model
package com.bookmanager.model;

/**
 * 图书实体
 * @author WenRan
 *
 */
public class Book {
	private int id;//编号
	private String bookName;//图书名称
	private String author;//作者
	private String sex;//性别
	private Float price;//价格
	private Integer bookTypeId;//图书类别Id
	private String bookTypeName;//图书类别名称
	private String bookDesc;//备注
	
	
	public Book() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
	public Book(String bookName, String author, Integer bookTypeId) {
		super();
		this.bookName = bookName;
		this.author = author;
		this.bookTypeId = bookTypeId;
	}


	public Book(String bookName, String author, String sex, Float price, Integer bookTypeId, String bookDesc) {
		super();
		this.bookName = bookName;
		this.author = author;
		this.sex = sex;
		this.price = price;
		this.bookTypeId = bookTypeId;
		this.bookDesc = bookDesc;
	}


	public Book(int id, String bookName, String author, String sex, Float price, Integer bookTypeId, String bookDesc) {
		super();
		this.id = id;
		this.bookName = bookName;
		this.author = author;
		this.sex = sex;
		this.price = price;
		this.bookTypeId = bookTypeId;
		this.bookDesc = bookDesc;
	}


	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 getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Float getPrice() {
		return price;
	}
	public void setPrice(Float price) {
		this.price = price;
	}
	public Integer getBookTypeId() {
		return bookTypeId;
	}
	public void setBookTypeId(Integer bookTypeId) {
		this.bookTypeId = bookTypeId;
	}
	public String getBookTypeName() {
		return bookTypeName;
	}
	public void setBookTypeName(String bookTypeName) {
		this.bookTypeName = bookTypeName;
	}
	public String getBookDesc() {
		return bookDesc;
	}
	public void setBookDesc(String bookDesc) {
		this.bookDesc = bookDesc;
	}
	
}

  1. view

图书添加:

/**
	 * 图书添加事件处理
	 * @param e
	 */
	private void bookAddActionPerformed(ActionEvent evt) {
		//获取数据(书名、作者、价格)
		String bookName=this.bookNameTxt.getText();
		String author=this.authorTxt.getText();
		String price=this.priceTxt.getText();
		String bookDesc=this.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;
		}
		
		//获取数据(性别)
		String sex="";
		if(manJrb.isSelected()) {
			sex="男";
		}else if(femaleJrb.isSelected()) {
			sex="女";
		}
		//获取数据(图书类别)
		BookType bookType=(BookType) bookTypeJcb.getSelectedItem();
		int bookTypeId=bookType.getId();
		
		Book book=new Book(bookName,author,sex,Float.parseFloat(price),bookTypeId,bookDesc);
		
		//调用数据库
		Connection con=null;
		try {
			con=dbUtil.getCon();	
			int addNum=bookDao.add(con,book);
			if(addNum==1) {
				JOptionPane.showMessageDialog(null,"图书添加成功");
				resetValue();
			}else {
				JOptionPane.showMessageDialog(null,"图书添加失败");
			}
		}catch(Exception m) {
			m.printStackTrace(); 
			JOptionPane.showMessageDialog(null,"图书添加失败");
		}finally {
			try {
				dbUtil.closeCon(con);	//关闭数据库		
			}catch(Exception s) {
				s.printStackTrace();
			}					
		}				
	}

图书维护:

/**
	 * 图书删除事件处理
	 * @param evt
	 */
	private void bookDeleteActionPerformed(ActionEvent evt) {
		String id=idTxt.getText();//获取id
		if(StringUtil.isEmpty(id)) {//id为空
			JOptionPane.showMessageDialog(null,"请选择要删除的记录");
			return ;
		}
		//为防止用户误点,要进行一个确认设置
		int n=JOptionPane.showConfirmDialog(null,"确定要删除该记录吗?");
		if(n==0) {
			Connection con=null;//开始连接
			try {
				con=dbUtil.getCon();	
				int deleteNum=bookDao.delete(con,id);
				if(deleteNum==1) {
					JOptionPane.showMessageDialog(null,"删除成功");
		            this.resetValue();
		            this.fillTable(new Book());
				}else {
					JOptionPane.showConfirmDialog(null,"删除失败");	
				}
			}catch(Exception m) {
				m.printStackTrace(); 
				JOptionPane.showMessageDialog(null,"删除失败");
			}finally {
				try {
					dbUtil.closeCon(con);	//关闭数据库		
				}catch(Exception s) {
					s.printStackTrace();
				}		
				
			}		
			
		}
		
	}

	
	/**
	 * 图书修改事件处理
	 * @param evt
	 */
	private void bookUpdateActionPerformed(ActionEvent evt) {
		String id=this.idTxt.getText();
		//如果用户一个一条记录都没选中
		if(StringUtil.isEmpty(id)) {
			JOptionPane.showMessageDialog(null,"请选择要修改的记录");
			return ;
		}
		//获取数据(书名、作者、价格)
		String bookName=this.bookNameTxt.getText();
		String author=this.authorTxt.getText();
		String price=this.priceTxt.getText();
		String bookDesc=this.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;
		}
		//获取数据(性别)
		String sex="";
		if(manJrb.isSelected()) {
			sex="男";
		}else if(femaleJrb.isSelected()) {
			sex="女";
		}
		//获取数据(图书类别)
		BookType bookType=(BookType) bookTypeJcb.getSelectedItem();
		int bookTypeId=bookType.getId();
		
		//封装
		Book book=new Book(Integer.parseInt(id),bookName,author,sex,Float.parseFloat(price),bookTypeId,bookDesc);
		//修改操作
		Connection con=null;
		try {
			con=dbUtil.getCon();	
			int addNum=bookDao.update(con,book);
			if(addNum==1) {
				JOptionPane.showMessageDialog(null,"图书修改成功");
				resetValue();
				this.fillTable(new Book());//没有这一条,修改过后的数据在表格上不更新
			}else {
				JOptionPane.showMessageDialog(null,"图书修改失败");
			}
		}catch(Exception m) {
			m.printStackTrace(); 
			JOptionPane.showMessageDialog(null,"图书修改失败");
		}finally {
			try {
				dbUtil.closeCon(con);	//关闭数据库		
			}catch(Exception s) {
				s.printStackTrace();
			}		
			
		}	
	}
	

	/**
	 * 图书查询事件处理
	 * @param e
	 */
	private void bookSearchActionPerformed(ActionEvent evt) {
		//获取查询参数
		String bookName=this.s_bookNameTxt.getText();
		String author=this.s_authorTxt.getText();
		BookType bookType=(BookType) this.s_bookTypeJcb.getSelectedItem();
		int bookTypeId=bookType.getId();
		
		//功能实现
		Book book=new Book(bookName,author,bookTypeId);//封装
		this.fillTable(book);
		
	}

成果展示

最后,我们进行成果展示。
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值