计算机软件实习4-图书管理系统
课前预习内容
课程要求
- 设计一个简单的图书管理系统,图书管理人员能够使用图书管理系统程序对图书类型进行管理,包括数据的添加、修改、删除和浏览;能够对图书信息进行管理,包括添加相关的图书信息,并可以指定图书进行查看。
- 图书信息不能随意删除,拥有图书的图书类型不能随意删除,并且要给出相关的提示,但是没有图书的图书类型可以删除。
- 应用程序提供操作界面,可以方便用户进行功能选择,实现应用程序提供操作界面,可以方便用户进行功能选择,实现信息的管信息的管理和查询,理和查询,并可以清晰地显示相关信息。并可以清晰地显示相关信息。
课程难点
- 要实现相关内容的增删改查,包括图书类别和图书信息。
- 要正确连接处理图书类别及图书的关系(1:n),避免出现程序错误,逻辑关系混乱。
- 要设计友好交互界面,在增删改查的过程中给出相关的提示。
开发环境
本实验设计的图书管理系统是基于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;
}
}
- 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;
}
}
- 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里创建的
图书类别功能实现(图书类别)
界面设计
图书类别的功能设计是设置在图书类别管理之下的,主要包括图书类别添加和图书类别维护,这两个界面被作为内置界面添加在主界面内。
如图所示根据
- 图书类别添加
- 图书类别维护
增删改查
- 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();
}
}
- 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;
}
}
- 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);
}
图书功能实现(图书)
界面设计
- 图书添加
- 图书修改
增删改查
- 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();
}
}
- 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;
}
}
- 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);
}
成果展示
最后,我们进行成果展示。