java图书管理系统(桌面版本)

运行效果:

注册登陆界面

注册存在的账户时

登陆之后主界面如下

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

图书列表

项目说明:

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

猜你喜欢

转载自www.cnblogs.com/javayihao/p/12083255.html
今日推荐