运行效果:

注册登陆界面

注册存在的账户时

登陆之后主界面如下

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

图书列表

项目说明:

        由于平时工作比较忙,也没时间写,可是我在公众号后台看见好多小伙伴讨论,我就抽时间写个当作参考。本系统界面我个人就从简设计了,本来打算使用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<Book> 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 Transfer

Source Server         : localhost
Source Server Version : 50527
Source Host           : localhost:3306
Source Database       : db_book

Target Server Type    : MYSQL
Target Server Version : 50527
File Encoding         : 65001

Date: 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一号

12-18 01:32