博客
关于我
java图书管理系统(界面版本)
阅读量:585 次
发布时间:2019-03-11

本文共 10639 字,大约阅读时间需要 35 分钟。

目录

 


运行效果:

注册登陆界面

注册存在的账户时

登陆之后主界面如下

点击图书管理-图书更新界面如下

图书列表

项目说明:

        由于平时工作比较忙,也没时间写,可是我在公众号后台看见好多小伙伴讨论,我就抽时间写个当作参考。本系统界面我个人就从简设计了,本来打算使用windowbuilder插件设计的,可想到使用windowbuilder插件之后导致代码冗余,会影响到代码可读性,可能对小白不友好。虽然界面设计简单,但是功能上我会尽量想着写全,当然对于页面你可以增加自己的设计,比如增加一个背景图片等,网上都有指导,对于界面美观度从简了。

关键代码:

用户登陆

package bookmanage.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import bookmanage.model.User;import bookmanage.utils.DbUtil;/** * @Description 连接数据库工具类 * @author com.javayihao.top */public class UserDao {	/**	 * 根据用户账号查询用户	 * 	 * @param accout	 *            入参:用户账号	 * @return 查找的用户	 */	public User getUserByAccout(String accout) {		Connection connection = DbUtil.getConnection();		String sql = "select accout,pass from t_user where accout=?";		try {			PreparedStatement ps = connection.prepareStatement(sql);			ps.setString(1, accout);			ResultSet rs = ps.executeQuery();			if (rs.next()) {// 存在用户,封装用户返回				User user = new User(rs.getString("accout"), rs.getString("pass"));				DbUtil.close(connection, ps);// 关闭连接				return user;			}		} catch (SQLException e) {			e.printStackTrace();		}		return null;	}	public boolean insertUser(User user) {		Connection connection = DbUtil.getConnection();// 获得数据库连接对象		String sql = "insert into t_user(accout,pass)values(?,?)";		try {			PreparedStatement ps = connection.prepareStatement(sql);			ps.setString(1, user.getAccout());			ps.setString(2, user.getPass());			if (!ps.execute()) {// 成功				DbUtil.close(connection, ps);// 关闭连接				return true;			}		} catch (SQLException e) {			e.printStackTrace();		}		return false;// 失败	}}

 

图书更新

package bookmanage.view;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import bookmanage.dao.BookDao;import bookmanage.model.Book;/** * @Description 用于图书增删改查面板 * @author com.javayihao.top */public class CrudBookPanel extends JPanel implements ActionListener {	// 定义首页按钮、图书列表按钮、 其他功能按钮,增加图书、删除图书、修改图书、查询图书	private JButton addBtn, deleteBtn, updateBtn, findBtn;	// 定义标签 底部信息标签、 图书编号、 图书名称、 图书数量、 图书价格	private JLabel idLabel, nameLabel, numLabel, priceLabel;	// 定义图书编号、 名称、 数量、 价格文本框	private JTextField idJTextField, nameJTextField, numJTextField, priceJTextField;	// 定义文本对象	private String bookIdText;	private String bookNameText;	private String bookNumText;	private String bookPriceText;	// 图书数量和价格	private Integer numBook;	private Float priceBook;	// 定义对象BookDao	private BookDao bookDao;	public CrudBookPanel() {		bookDao = new BookDao();//实例化图书操作对象		// 实例化增删改查按钮		addBtn = new JButton("增加图书");		addBtn.addActionListener(this);// 设置图书增加按钮监听		addBtn.setActionCommand("addbook");		deleteBtn = new JButton("删除图书");		deleteBtn.addActionListener(this);// 设置图书删除按钮监听		deleteBtn.setActionCommand("deletebook");		updateBtn = new JButton("修改图书");		updateBtn.addActionListener(this);// 设置图书修改按钮监听		updateBtn.setActionCommand("updatebook");		findBtn = new JButton("查询图书");		findBtn.addActionListener(this);// 设置图书查询按钮监听		findBtn.setActionCommand("findbook");		// 实例化图书编号 名称 数量 价格标签		idLabel = new JLabel("图书编号");		nameLabel = new JLabel("图书名称");		priceLabel = new JLabel("图书价格");		numLabel = new JLabel("图书数量");		// 实例化文本框		idJTextField = new JTextField(12);		nameJTextField = new JTextField(12);		numJTextField = new JTextField(12);		priceJTextField = new JTextField(12);		this.setLayout(new GridLayout(6, 2, 2, 2));		// 给增删改查面板添加图书编号 名称 数量 价格标签以及文本框		this.add(idLabel);		this.add(idJTextField);		this.add(nameLabel);		this.add(nameJTextField);		this.add(priceLabel);		this.add(priceJTextField);		this.add(numLabel);		this.add(numJTextField);		// 给增删改查面板添加图书编号 名称 数量 价格按钮		this.add(addBtn);		this.add(deleteBtn);		this.add(updateBtn);		this.add(findBtn);	}	@Override	public void actionPerformed(ActionEvent e) {		if (e.getActionCommand().equals("addbook")) {// 添加图书			addbook();		} else if (e.getActionCommand().equals("deletebook")) {// 删除图书			deleteBook();		} else if (e.getActionCommand().equals("updatebook")) {// 修改图书			updateBook();		} else if (e.getActionCommand().equals("findbook")) {// 查询图书			findBook();		}	}	/**	 * 查询图书	 */	private void findBook() {		bookIdText = idJTextField.getText().trim().toString();		Book book = bookDao.getBookById(bookIdText);		if (bookIdText.equals("")) {			JOptionPane.showMessageDialog(this, "图书编号不能为空");		} else if (book != null) {// 当前输入的图书编号存在			try {				nameJTextField.setText(book.getName());// 填充图书名称文本框				numJTextField.setText(book.getNum() + "");// 将数字类型转成字符串并填充文本框				priceJTextField.setText(book.getPrice() + "");// 将数字类型转成字符串并填充文本框			} catch (Exception e) {				JOptionPane.showMessageDialog(this, "图书查询异常  请联系管理员");			}		} else {			JOptionPane.showMessageDialog(this, "图书不存在");		}	}	/**	 * 修改图书	 */	private void updateBook() {		bookIdText = idJTextField.getText().trim().toString();		bookNameText = nameJTextField.getText().trim().toString();		bookNumText = numJTextField.getText().trim().toString();		bookPriceText = priceJTextField.getText().trim().toString();		if (bookIdText.equals("")) {			JOptionPane.showMessageDialog(this, "图书编号不能为空");		} else if (bookNameText.equals("")) {			JOptionPane.showMessageDialog(this, "图书名称不能为空");		} else if (bookNumText.equals("")) {			JOptionPane.showMessageDialog(this, "图书数量不能为空");		} else if (bookPriceText.equals("")) {			JOptionPane.showMessageDialog(this, "图书价格不能为空");		} else {			// 将图书数量和图书价格转成对应的数字类型			if (bookDao.getBookById(bookIdText) == null) {// 图书不存在				JOptionPane.showMessageDialog(this, "输入正确的图书编号");			} else {				try {					numBook = Integer.parseInt(bookNumText);					priceBook = Float.parseFloat(bookPriceText);					bookDao.updateBook(new Book(bookIdText, bookNameText, numBook, priceBook));					JOptionPane.showMessageDialog(this, "图书修改成功");				} catch (Exception e) {					JOptionPane.showMessageDialog(this, "输入正确的图书数量和价格");					e.printStackTrace();				}			}		}	}	/**	 * 删除图书	 */	private void deleteBook() {		bookIdText = idJTextField.getText().trim().toString();		if (bookIdText.equals("")) {			JOptionPane.showMessageDialog(this, "图书编号不能为空");		} else if (bookDao.getBookById(bookIdText) != null) {// 当前输入的图书编号是否存在			try {				bookDao.deleteBootByid(bookIdText);				JOptionPane.showMessageDialog(this, "图书删除成功");			} catch (Exception e) {				JOptionPane.showMessageDialog(this, "图书删除异常  请联系管理员");			}		} else {			JOptionPane.showMessageDialog(this, "图书不存在");		}	}	/**	 * 增加图书	 */	private void addbook() {		bookIdText = idJTextField.getText().trim().toString();		bookNameText = nameJTextField.getText().trim().toString();		bookNumText = numJTextField.getText().trim().toString();		bookPriceText = priceJTextField.getText().trim().toString();		if (bookIdText.equals("")) {			JOptionPane.showMessageDialog(this, "图书编号不能为空");		} else if (bookNameText.equals("")) {			JOptionPane.showMessageDialog(this, "图书名称不能为空");		} else if (bookNumText.equals("")) {			JOptionPane.showMessageDialog(this, "图书数量不能为空");		} else if (bookPriceText.equals("")) {			JOptionPane.showMessageDialog(this, "图书价格不能为空");		} else {			// 将图书数量和图书价格转成对应的数字类型			if (bookDao.getBookById(bookIdText) != null) {// 编号重复				JOptionPane.showMessageDialog(this, "图书编号重复");			} else {				try {					numBook = Integer.parseInt(bookNumText);					priceBook = Float.parseFloat(bookPriceText);					bookDao.insertBoot(new Book(bookIdText, bookNameText, numBook, priceBook));					JOptionPane.showMessageDialog(this, "图书增加成功");				} catch (Exception e) {					JOptionPane.showMessageDialog(this, "输入正确的图书数量和价格");					e.printStackTrace();				}			}		}	}}

 

图书列表

package bookmanage.view;import java.awt.BorderLayout;import java.util.ArrayList;import java.util.Vector;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import bookmanage.dao.BookDao;import bookmanage.model.Book;/** * 自定义图书列表面板 * @author com.javayihao.top */public class ListPanel extends JPanel {	// 从数据库中取出信息	// rowData用来存放行数据	// columnNames存放列名	Vector rowData, columnNames;	JTable jt = null;	JScrollPane jsp = null;	// 构造函数	public ListPanel() {		ArrayList
books = new BookDao().getBookList(); columnNames = new Vector(); // 设置列名 columnNames.add("图书编号"); columnNames.add("图书名称"); columnNames.add("图书价格"); columnNames.add("图书数量"); rowData = new Vector(); for (int i = 0; i < books.size(); i++) { //实例化每一行数据 Vector hang = new Vector(); hang.add(books.get(i).getId()); hang.add(books.get(i).getName()); hang.add(books.get(i).getPrice()); hang.add(books.get(i).getNum()); // 加入到rowData rowData.add(hang); } // 初始化Jtable jt = new JTable(rowData, columnNames); // 初始化 jsp jsp = new JScrollPane(jt); this.add(jsp); }}

数据库

/*Navicat MySQL Data TransferSource Server         : localhostSource Server Version : 50527Source Host           : localhost:3306Source Database       : db_bookTarget Server Type    : MYSQLTarget Server Version : 50527File Encoding         : 65001Date: 2019-12-23 13:01:43*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for t_book-- ----------------------------DROP TABLE IF EXISTS `t_book`;CREATE TABLE `t_book` (  `id` varchar(20) NOT NULL,  `name` varchar(255) NOT NULL,  `num` int(11) NOT NULL,  `price` float(10,2) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of t_book-- ----------------------------INSERT INTO `t_book` VALUES ('123456', 'java入门到精通', '100', '22.00');INSERT INTO `t_book` VALUES ('123457', 'c++实战', '100', '50.00');INSERT INTO `t_book` VALUES ('123458', '微服务电商实战', '22', '1.00');-- ------------------------------ Table structure for t_user-- ----------------------------DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` (  `accout` varchar(255) NOT NULL,  `pass` varchar(255) NOT NULL,  PRIMARY KEY (`accout`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of t_user-- ----------------------------INSERT INTO `t_user` VALUES ('123', '123');INSERT INTO `t_user` VALUES ('123456', '123456');INSERT INTO `t_user` VALUES ('1234567', '123456');INSERT INTO `t_user` VALUES ('admin', 'admin');INSERT INTO `t_user` VALUES ('dsfasdfa', 'afasdf');INSERT INTO `t_user` VALUES ('fdsaf', 'adfas');

源码获取:

本来打算放在github上的,考虑到许多小伙伴不会用github,就放在我个人公众号,关注公众号 java一号 回复 “图书” 即可

如何运行:

1. 先说下运行环境吧,java+eclipse+mysql,所以首先java环境得有,本地安装了mysql数据库,关于数据库图形化界面工具我用得是navicat;

2. 创建数据库db_book,在获取代码文件中有个db_book.sql文件,记事本打开复制到刚才创建得db_book数据库直接查询运行即可

3. 打开eclipse

点击运行

友情提示

项目主要是用来练习java的面向对象思想,至于java中的swing编程知识,也就是界面编程建议不要花过多时间美化设计,完全没有必要,市场上很少会使用java Swing去编cs软件。

帮到了  评论一波666666哦

有问题可以联系  公众号   java一号

 

 

转载地址:http://muytz.baihongyu.com/

你可能感兴趣的文章
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>
MySQL DELETE 表别名问题
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>