运行效果:

注册登陆界面

注册存在的账户时

登陆之后主界面如下

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

图书列表

项目说明:

由于平时工作比较忙,也没时间写,可是我在公众号后台看见好多小伙伴讨论,我就抽时间写个当作参考。本系统界面我个人就从简设计了,本来打算使用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,就放在我个人公众号,关注公众号 程序三两行 回复 “图书” 即可

如何运行:

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

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

3. 打开eclipse

点击运行

有问题可以联系  公众号   程序三两行

java图书管理系统(桌面版本)的更多相关文章

  1. JAVA图书管理系统汇总共27个

    好多人都在搜索图书管理系统,感觉这个挺受欢迎的,所以整理了一系列的图书管理系统,让大家选择.java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/683 ...

  2. JAVA图书管理系统汇总共27个[转]

    java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/68350java+sql server图书管理系统 http://down.51cto.com/ ...

  3. Java图书管理系统(用Java常用集合实现)

    图书管理系统 一.需求说明 1.功能:登录,注册,忘记密码,管理员管理,图书管理. 2.管理员管理:管理员的增删改查. 3.图书管理:图书的增删改查. 4.管理员属性包括:id,姓名,性别,年龄,家庭 ...

  4. 随笔:Oracle实验课(软件系统开发综合实践)B/S结构;java——图书管理系统

    以上是我需要注意的要求 -------------------------------此处为放假分割线-1-20----------------------------------- 初步完成了整个程 ...

  5. 汇文Libsys图书管理系统全版本权限绕过+getshell

    由于一个很低级的代码错误,导致可以登录Libsys任意图书系统后台,并且由于代码未做过滤可直接getshell. 该图书管理系统的用户量很大,全国很大一部分院校都在使用此系统.经测试3.5-5.0版本 ...

  6. 图书管理系统总结——JAVA Swing控件简介

    断断续续学习JAVA语言,写了一个多月数据库大作业,终于在五一过后写完了.由于第一次使用JAVA和数据库,遇到了许多问题,记录下来,以备以后查看. 我使用的JAVA SE,说实话,在开发后期,觉得JA ...

  7. 基于Java swing+mysql+eclipse的【图书管理系统】

    本项目为Java swing项目,在工作环境中基本使用不到,但是很多学校把这个当做编程入门的项目来做,故分享出本项目供初学者参考. CSDN赞助下载:https://download.csdn.net ...

  8. 《图书管理系统——java》

    /* (程序头部凝视開始) * 程序的版权和版本号声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名:    < ...

  9. java web 项目 图书管理系统的设计与实现

     java web 项目 图书管理系统的设计与实现

  10. 基于Java SE集合的图书管理系统

    图书管理系统一.需求说明1.功能:登录,注册,忘记密码,管理员管理,图书管理.2.管理员管理:管理员的增删改查.3.图书管理:图书的增删改查.4.管理员属性包括:id,姓名,性别,年龄,家庭住址,手机 ...

随机推荐

  1. 【转帖】ARM 虚拟化技术简介

    一. 虚拟化技术二. 虚拟化技术的比较2.1 全虚拟化和二进制重写(Pure virtualization and binary rewriting)2.2 半虚拟化( Para-virtualiza ...

  2. 在线安装gfortran的方法-CentOS8 or 阿里龙蜥

    在线安装gfortran的方法-CentOS8 or 阿里龙蜥 背景 在阿里云上面进行了 speccpu2006的测试验证 但是发现总是很多包安装不过去 原因是阿里最小化安装的龙蜥系统. 缺少很多编译 ...

  3. [转帖]egrep 正则表达式

    https://www.cnblogs.com/ordili/p/9395735.html 一.功能 用正则表达式在文件或输入中搜索匹配的字符串,并打印出匹配的行.egrep匹配之前,会删除每行结尾的 ...

  4. [转帖]引人入胜,实战讲解“Java性能调优六大工具”之linux命令行工具

    Java性能调优六大工具之Linux命令行工具 为了能准确获得程序的性能信息,需要使用各种辅助工具.本章将着重介绍用于系统性能分析的各种工具.熟练掌握这些工具,对性能瓶颈定位和系统故障排查都很有帮助. ...

  5. [1036]kvm虚拟机访问时提示no route to host分析

    环境 宿主机: IP: 10.110.136.43 版本:Kylin Linux Advanced Server release V10 (Sword) KVM vm: IP: 10.110.136. ...

  6. 【dp,建模】AGC032D Rotation Sort

    Problem Link 有一个长为 \(n\) 的排列 \(p\),给定 \(A,B\),你每次可以做以下两种操作之一: 选取 \(l,r\),将 \(p[l:r]\) 循环右移,代价为 \(A\) ...

  7. golang实现的 https 协议的四层代理和七层代理

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 四层代理 在 tcp 这一层转发很简单. http 协议是 ...

  8. 19.4 Boost Asio 远程命令执行

    命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个run_command函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符 ...

  9. 2.13 PE结构:实现PE代码段加密

    代码加密功能的实现原理,首先通过创建一个新的.hack区段,并对该区段进行初始化,接着我们向此区段内写入一段具有动态解密功能的ShellCode汇编指令集,并将程序入口地址修正为ShellCode地址 ...

  10. Linux进程间通信 [补档-2023-07-27]

    Linux进程间通信 10-1 简介 ​ 在Linux下,进程之间相互独立,每个进程都有自己不同的用户地址空间.任何一个进程的全局变量在另 一个进程中都看不到,所以进程和进程之间不能相互访问.如果非要 ...