Java Swing MySQL图书管理系统

这是一个使用swing框架写的图形界面图书管理系统,使用的数据库为mysql。

程序中实现了登录和对数据库图书类别表和图书表的增删查改功能,图书类别表的字段有:类别id、类别名称、类别描述,
图书表的字段有:图书id、图书名称、图书作者、图书价格、图书描述、图书类别id。

链接:https://pan.baidu.com/s/13oC_LgNzOhietWte9mQHXQ
提取码:1234

运行效果:






在图书管理界面和类别管理界面中,可以通过修改表格中的内容直接修改数据库中的内容,删除按钮则是删除当前选中行的信息。

图书管理界面的查询条件可以根据两个文本区和一个下拉列表中的内容联合确定。

程序实现则是将操作数据库的类和步骤进行封装,然后添加点击按钮的监听,执行相应的查询数据库或更新数据库的sql语句即可。


编译环境:
Windows JDK9 IDEA2020

代码:
下面是该程序部分代码,如果您想要查看该程序的完整代码,请前往我的个人网站http://150.158.165.239/#/resource以免费获取完整代码资源

登录界面类

import javax.swing.*;
import java.awt.*;//登录界面类,继承JFrame
class LoginFrame extends JFrame {private JTextField usernameTextField = null;        //用户名文本区private JTextField passwordTextField = null;        //密码文本区private JButton loginButton = null;                 //登录按钮private static final int FRAMEWIDTH = 700, FRAMEHEIGHT = 520;     //窗口宽高private static int frameX, frameY;                   //窗口位置//数据库操作对象//这里不需要进行获取查询结果的操作,所以不需要重写其中的函数private final DatabaseClass database = new DatabaseClass();//窗口初始化private void initFrame() {//设置窗口属性setTitle("登录界面");   //设置窗口标题//得到窗口位于屏幕居中的位置Point frameXY = FrameCommon.getScreenCentredPoint(FRAMEWIDTH, FRAMEHEIGHT);frameX = (int)frameXY.getX();frameY = (int)frameXY.getY();setBounds(frameX, frameY, FRAMEWIDTH, FRAMEHEIGHT);  //设置窗口位置、宽高setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //设置点击关闭按钮是隐藏窗口,并停止程序setResizable(false);    //设置不可改变窗口大小setLayout(null);        //设置绝对布局final int usernameLableWidth = 80, usernameLableHeight = 30;   //保存用户名标签宽高final int textFieldWidth = 200;                                //文本区宽度final int LabletextFieldSpacing = 20;                          //标签和文本区的间距final int usernameLableX =                                     //用户名标签位置(FRAMEWIDTH >> 1) - ((usernameLableWidth + LabletextFieldSpacing + textFieldWidth) >> 1), usernameLableY = 180;Font lableFont = new Font(null, Font.PLAIN, 18);    //标签文本属性//添加和设置组件JLabel usernameLable = new JLabel("用户名:");              //用户名标签组件usernameLable.setFont(lableFont);                               //设置文字属性usernameLable.setBounds(usernameLableX, usernameLableY, usernameLableWidth, usernameLableHeight);  //设置位置、宽高JLabel passwordLable = new JLabel("密码:");                //密码标签组件passwordLable.setFont(lableFont);passwordLable.setBounds(usernameLableX, usernameLableY + 56, usernameLableWidth, usernameLableHeight);Font textFieldFont = new Font(null, Font.BOLD, 16);   //文本区文本属性usernameTextField = new JTextField();        //用户名文本区usernameTextField.setFont(textFieldFont);usernameTextField.setBounds(usernameLableX + usernameLableWidth + LabletextFieldSpacing, usernameLableY, textFieldWidth, usernameLableHeight);passwordTextField = new JTextField();        //密码文本区passwordTextField.setFont(textFieldFont);passwordTextField.setBounds(usernameTextField.getX(), passwordLable.getY(), textFieldWidth, usernameLableHeight);loginButton = new JButton("登录");       //登录按钮final int buttonWidth = 100;    //按钮宽度loginButton.setFont(new Font("宋体", Font.BOLD, 22));loginButton.setBounds(usernameLableX + ((usernameLableWidth + LabletextFieldSpacing + textFieldWidth) >> 1) - (buttonWidth >> 1),passwordTextField.getY() + 70, buttonWidth, 50);JLabel MSLable = new JLabel("图书管理系统");  //"图书管理系统"标签MSLable.setFont(new Font("黑体", Font.BOLD, 46));final int MSLableWidth = 293;       //图书管理系统标签宽度MSLable.setBounds((FRAMEWIDTH >> 1) - (MSLableWidth >> 1), 60, MSLableWidth, 60);//将组件添加进窗口容器add(usernameLable);add(passwordLable);add(usernameTextField);add(passwordTextField);add(loginButton);add(MSLable);setVisible(true);       //设置显示窗口}//组件事件初始化private void componentEventInit() {//监听登录按钮点击loginButton.addActionListener(e -> {//将两个文本区中的内容作为要执行的sql语句的一部分,然后得到数据库中是否存在文本区内容输入的用户信息boolean flag = database.isResultExist("SELECT * FROM `user` WHERE user_name = \""+ usernameTextField.getText() +"\" AND `password` = \""+ passwordTextField.getText() +"\";");//如果输入信息不对则弹出提示对话框if(!flag) {new JDialog() { {setTitle("警告");setModal(true);setLayout(null);JLabel label = new JLabel("wrong user name or password!");label.setBounds(8, 20, 250, 50);label.setFont(new Font(null, Font.BOLD, 14));add(label);Point point = FrameCommon.getScreenCentredPoint(250, 150);setBounds(point.x, point.y, 250, 150);}}.setVisible(true);}else {new MainMenuFrame();dispose();  //关闭当前窗口}});}/*** 构造函数用于调用初始化函数,初始化程序*/public LoginFrame() {initFrame();            //窗口初始化componentEventInit();   //组件事件初始化}}

主菜单界面类

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/*** 主菜单界面类,在登录成功时创建对象** @see JFrame*/
public class MainMenuFrame extends JFrame
{private static final int FRAMEWIDTH = 1000, FRAMEHEIGHT = 700;private int frameX, frameY;private final JButton booksManageBut = new JButton("图书管理");      //图书管理按钮private final JButton booksAddBut = new JButton("图书添加");         //图书添加按钮private final JButton categoryManageBut = new JButton("类别管理");   //类别管理按钮private final JButton categoryAddBut = new JButton("类别添加");      //类别添加按钮//初始化界面private void initFrame(){//设置窗口口属性setTitle("主菜单界面");      //设置窗口标题//确定窗口位置Point frameXY = FrameCommon.getScreenCentredPoint(FRAMEWIDTH, FRAMEHEIGHT);frameX = (int) frameXY.getX();frameY = (int) frameXY.getY();setBounds(frameX, frameY, FRAMEWIDTH, FRAMEHEIGHT);  //设置窗口位置、宽高setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      //设置点击关闭按钮是隐藏窗口,并停止程序setResizable(false);    //设置不可改变窗口大小setLayout(null);        //设置绝对布局//设置组件final int BUTTONWIDTH = 150, BUTTONHEIGHT = 75;     //每个按钮宽高final int BUTTONMARGIN = 20;                        //按钮之间的距离final int BUTTONALLWIDTH = (BUTTONWIDTH << 2) + (BUTTONMARGIN * 3); //按钮总宽度(包括间距)//得到所有按钮位于窗口居中的位置final Point buttonAllXY = FrameCommon.getFrameCentredPoint(FRAMEWIDTH, FRAMEHEIGHT, BUTTONALLWIDTH, BUTTONHEIGHT);final int buttonAllX = (int) buttonAllXY.getX();final int buttonALLY = (int) buttonAllXY.getY();AbstractButton[] buttons = {booksManageBut, booksAddBut, categoryManageBut, categoryAddBut};Font buttonFont = new Font("宋体", Font.BOLD, 18);//设置四个按钮的坐标和字体属性for(int i = 0; i < 4; i++) {buttons[i].setBounds(buttonAllX + (BUTTONWIDTH + BUTTONMARGIN) * i, buttonALLY, BUTTONWIDTH, BUTTONHEIGHT);buttons[i].setFont(buttonFont);add(buttons[i]);    //添加按钮组件}setVisible(true);}//组件事件初始化private void componentEventInit(){//图书管理按钮点击booksManageBut.addActionListener(e -> {new BooksManageFrame(); //图书管理界面});//图书添加按钮点击booksAddBut.addActionListener(e -> {new BooksAddFrame();});//类别管理按钮点击categoryManageBut.addActionListener(e -> {new CategoryManageFrame();  //类别管理界面});//类别添加按钮点击categoryAddBut.addActionListener(e -> {new CategoryAddFrame();});}/*** 构造函数,初始化界面*/public MainMenuFrame() {initFrame();    //界面初始化componentEventInit();   //组件事件初始化}
}

图书管理界面

import javax.swing.*;
import java.awt.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;//图书管理界面
class BooksManageFrame extends JFrame
{//图书名称文本区private final JTextArea booksNameTextArea = new JTextArea();//图书作者文本区private final JTextArea bookAuthorTextArea = new JTextArea();//图书类别下拉列表private final JComboBox<String> bookTypeComboBox = new JComboBox<String>();//用于图书相关的数据库操作对象private final DatabaseClass booksDataBase = new DatabaseClass() {@Override//重写getFieldData函数,用于在查询时得到结果protected String[] getFieldData(ResultSet resultSet) throws SQLException {return new String[] {((Integer) resultSet.getInt("book_id")).toString(), //idresultSet.getString("book_name"),   //书名resultSet.getString("book_author"),  //书作者resultSet.getString("book_price"),  //书价格resultSet.getString("book_desc"),   //书描述((Integer) resultSet.getInt("book_type_id")).toString(),    //类别id};}};//用于保存类别名称和类别id映射关系mapprivate final HashMap<String, String> typeNameIdMap = new HashMap<String, String>();//查询按钮private final JButton queryButton = new JButton("查询");//删除按钮private final JButton deleteButton = new JButton("删除");//列名private final String[] tableColumnNames = {"图书id", "图书名", "图书作者", "图书价格", "图书描述", "图书类别id"};//表格private final MyTable myTable = new MyTable(new String[][]{}, tableColumnNames);private final JScrollPane scrollpane = new JScrollPane(myTable);    //显示表格的滚动窗格//界面初始化private void initFrame() {setTitle("图书管理窗口");     //设置标题FrameCommon.otFrameGeneralSettings(this);JLabel queryLable = new JLabel("搜索条件");   //搜索标签final int MODULE_ALL_WIDTH = 600, MODULE_ALL_HEIGHT = 500;      //全部组件宽度Point moduleAllXY = FrameCommon.getModuleCentredPoint(MODULE_ALL_WIDTH, MODULE_ALL_HEIGHT);     //全部组件居中位置//搜索标签位置、宽高queryLable.setBounds((int) moduleAllXY.getX(), (int) moduleAllXY.getY(), 80, 20);//图书名称标签JLabel booksNameLable = new JLabel("图书名称:");booksNameLable.setBounds(queryLable.getX(), queryLable.getY() + queryLable.getHeight() + 20, 80, 20);//图书名称文本区booksNameTextArea.setBounds(booksNameLable.getX() + booksNameLable.getWidth(), booksNameLable.getY() + 2, 140, 18);//图书作者标签JLabel booksAuthorLable = new JLabel("图书作者:");booksAuthorLable.setBounds(booksNameTextArea.getX() + booksNameTextArea.getWidth() + 40, booksNameTextArea.getY(), 80, 20);//图书作者文本区bookAuthorTextArea.setBounds(booksAuthorLable.getX() + booksAuthorLable.getWidth(), booksAuthorLable.getY() + 2, 140, 18);//图书类别标签JLabel booksTypeLable = new JLabel("图书类别:");booksTypeLable.setBounds(booksNameLable.getX(), booksNameLable.getY() + booksNameLable.getHeight() + 20, 80, 20);String[][] booksTypeQueryResult = FrameCommon.getBooksTypeInfo();//mapbookTypeComboBox.addItem("全部"); //额外添加一个全部for (String[] strings : booksTypeQueryResult) {bookTypeComboBox.addItem(strings[1]);       //将类别名称添加进下拉列表选项中typeNameIdMap.put(strings[1], strings[0]);  //保存类别名称和id的映射关系,键为名称}bookTypeComboBox.setBounds(booksTypeLable.getX() + booksTypeLable.getWidth(), booksTypeLable.getY(), 120, 24);//查询按钮queryButton.setBounds(bookTypeComboBox.getX() + bookTypeComboBox.getWidth() + 60, bookTypeComboBox.getY(), 80, 26);//删除按钮deleteButton.setBounds(queryButton.getX() + queryButton.getWidth() + 20, queryButton.getY(), queryButton.getWidth(), queryButton.getHeight());//表格myTable.updateAllRow(booksDataBase.getQueryResult("SELECT * FROM book;"));myTable.setRowHeight(28);//滚动窗格final int SCROLL_WIDTH = 640, SCROLL_HEIGHT = 320;          //滚动窗格的宽高final int SCROLL_X = FrameCommon.getOperatingFrameCenteredX(SCROLL_WIDTH);     //滚动窗格Xscrollpane.setBounds(SCROLL_X, booksTypeLable.getY() + booksTypeLable.getHeight() + 30, SCROLL_WIDTH, SCROLL_HEIGHT);  //设置滚动窗格的坐标、宽高add(queryLable);add(booksNameLable);add(booksNameTextArea);add(booksAuthorLable);add(bookAuthorTextArea);add(booksTypeLable);add(bookTypeComboBox);add(queryButton);add(deleteButton);add(scrollpane);setVisible(true);   //设置窗口显示}//组件事件初始化private void componentEventInit() {//查询按钮点击事件queryButton.addActionListener(e -> {//要执行的sql语句 (部分)StringBuilder sqlBuilder = new StringBuilder("SELECT * FROM book");/*查询规律:按照图书名称、图书作者、图书类别进行查询不填的项视为对其字段无要求*/boolean flag_WHERE = false; //是否添加WHERE标记//图书名文本区不为空if (!booksNameTextArea.getText().equals("")) {sqlBuilder.append(" WHERE " + "book_name LIKE '%"+ booksNameTextArea.getText() +"%'");flag_WHERE = true;}//图书作者文本区不为空if (!bookAuthorTextArea.getText().equals("")) {if(!flag_WHERE) {sqlBuilder.append(" WHERE ");flag_WHERE = true;}elsesqlBuilder.append(" AND ");sqlBuilder.append("book_author LIKE '%"+ bookAuthorTextArea.getText() +"%'");}//下拉列表框String selectbookType = (String) bookTypeComboBox.getSelectedItem();if(selectbookType == null) return;//不为全部时if (!selectbookType.equals("全部")) {if(!flag_WHERE) {sqlBuilder.append(" WHERE ");flag_WHERE = true;}elsesqlBuilder.append(" AND ");sqlBuilder.append("book_type_id = '"+ typeNameIdMap.get(selectbookType) +"'");}sqlBuilder.append(";");     //最后添加分号String sql = sqlBuilder.toString();     //得到需要执行的sql语句try {myTable.updateAllRow(booksDataBase.getQueryResult(sql));}catch (Exception se) {      //更新表格时出现异常说明要查询的图书类别名称不存在。将表格清空myTable.clearRow();}System.out.println(sql);});//删除按钮点击事件deleteButton.addActionListener(e -> {//将所选行的id的数据从数据库中删除final int selectRow = myTable.getSelectedRow();try {if(selectRow != -1) //选中行为-1代表没有选中{//执行删除数据sql语句booksDataBase.dExecuteUpdate("DELETE FROM `book` WHERE `book_id` = "+ myTable.getValueAt(selectRow, 0) +";");//从表格中删除该行myTable.removeRow(selectRow);}}catch (SQLException se) {throw new RuntimeException(se.toString());}});//显示列名和真实列名的mapfinal HashMap<String, String> columnNameMap = new HashMap<String, String>();//真实列名数组final String[] tableRealColumnNameStrings = new String[]{"book_id", "book_name", "book_author", "book_price", "book_desc", "book_type_id"};//循环设置列名的映射关系for(int i = 0, arrLen = tableRealColumnNameStrings.length; i < arrLen; i++)columnNameMap.put(tableColumnNames[i], tableRealColumnNameStrings[i]);//表格修改单元格事件myTable.getModel().addTableModelListener(e -> {if(e.getColumn() == -1 || e.getFirstRow() == -1)return;final String updatecCurrentColumnName;//得到改变行的列名updatecCurrentColumnName = myTable.getColumnName(e.getColumn());//得到修改列的真实列名final String updatecRealColumnName = columnNameMap.get(updatecCurrentColumnName);//执行sql修改语句try {final String sql = "UPDATE `book` SET "+updatecRealColumnName +" = '"+myTable.getValueAt(e.getFirstRow(), e.getColumn()) +"' WHERE book_id = '"+myTable.getValueAt(e.getFirstRow(), 0) +"';";System.out.println(sql);booksDataBase.dExecuteUpdate(sql);}catch (Exception se) {new JDialog() {{setTitle("异常");setModal(true);setLayout(null);JLabel label = new JLabel("fail to edit");label.setBounds(8, 20, 250, 50);label.setFont(new Font(null, Font.BOLD, 14));add(label);Point point = FrameCommon.getScreenCentredPoint(250, 150);setBounds(point.x, point.y, 250, 150);}}.setVisible(true);}});}public BooksManageFrame() {initFrame();    //界面初始化componentEventInit();}
}

如果您发现什么问题,也欢迎指出,感谢支持。

Java Swing MySQL图书管理系统相关推荐

  1. 基于Java+Swing+mysql图书管理系统

    基于Java+Swing+mysql图书管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.图书管理 3.图书添加 4.图书类别管理 5.图书类别添加 三.数据库 四.其它 1.其他系统实现 五. ...

  2. 基于Eclipse+Java Swing + Mysql图书管理系统

    一.项目概要: 基于Java Swing+Mysql(8.0)数据库的图书管理系统,具备登录.图书类别管理.图书管理功能. 二.获取方式: 有需要可以加QQ:571328502 点击下载 三.界面展示 ...

  3. 基于Eclipse+Java+Swing+Mysql图书信息管理系统

    基于Eclipse+Java+Swing+Mysql图书信息管理系统 一.系统介绍 二.功能展示 1.主页 2.新增图书信息 3.删除图书信息 三.数据库 四.其他系统实现 五.获取源码 一.系统介绍 ...

  4. 基于Java+Swing+mysql眼镜店管理系统

    基于Java+Swing+mysql眼镜店管理系统 一.系统介绍 二.功能展示 1.管理员登陆 2.眼镜信息查询 3.眼镜信息添加 4.眼镜信息修改 5.眼镜信息删除 三.项目相关 3.1 乱码问题 ...

  5. 基于java+mysql的Swing+MySQL图书管理系统(java+swing+gui+mysql)

    基于java+mysql的Swing+MySQL图书管理系统(java+swing+gui+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclip ...

  6. java Swing实现图书管理系统

    学习swing实现图书管理系统,本文实现该系统的功能截图,和数据库设计SQL语句供大家参考 1.图书管理系统技术架构 主要技术 Java Swing 开发工具和环境 Eclipse JDK 1.7 M ...

  7. java+ssm+mysql图书管理系统

    项目介绍: 一个图书管理系统,界面很精美. 包含普通用户和管理员用户, 普通用户可以注册.登录系统,修改密码,查看图书,借阅和退还,修改个人信息.借阅记录等等. 管理员用户主要包括用户管理.图书管理. ...

  8. 【Java课程设计】基于Java Swing 的图书管理系统

    文章目录 前言 一.功能结构 二.项目预览 三.数据库的设计 四.数据表的设计 五.代码实现 总结 前言

  9. 基于Java+Swing+Mysql员工信息管理系统

    基于Java+Swing+Mysql员工信息管理系统 一.系统介绍 二.功能展示 1.主页 2.查询员工信息 3.删除员工信息 三.数据库 四.其他系统实现 五.获取源码 一.系统介绍 该系统实现了查 ...

  10. 基于Java+Swing+Mysql项目信息管理系统

    基于Java+Swing+Mysql项目信息管理系统 一.系统介绍 二.功能展示 1.主页 2.新增项目信息 3.删除项目信息 三.数据库 四.其他系统实现 五.获取源码 一.系统介绍 该系统实现了查 ...

最新文章

  1. pycharm远程开发项目
  2. 语音识别:时间序列的Smith–Waterman对齐算法
  3. 蓝桥杯-9-2 文本加密
  4. 知乎发布“战疫”数据报告:“新型肺炎”相关回答获17.3亿次阅读
  5. c++ 输出string_来讲讲Java中String 类的知识点
  6. D. Little Artem and Dance
  7. 如何把一个运行完好的Kafka搞崩
  8. CSS学习 -- 3种命名方式及规则
  9. esxi时区设置 +8_ESXI安装OpenWRT amp; LEDE软路由部署指南(附镜像下载)
  10. ​老男孩教育每日一题-第73天 -基础命令点:可恶的^C
  11. java英文单词断行_CSS样式解决英文换行断词问题
  12. 计算机硬盘能改成移动硬盘,旧硬盘怎么改装成移动硬盘
  13. 家庭收支记账软件项目【Golang-面向对象】
  14. linux命令行测试上网,如何使用linux命令行来测试网速
  15. 游戏显示无法连接服务器怎么回事,Game Center无法连接服务器怎么办 五种方法任你选择...
  16. ArchLinux初次进入系统时触摸板可以移动鼠标但是无法点击的问题
  17. Get https://registry-1.docker.io/v2/library/tomcat/manifests/latest:timeout
  18. 支持向量机之线性可分支持向量机(一)
  19. 记录Guava版本冲突而出现项目启动失败的问题
  20. java long拼接,String类型集合元素分割和拼接,String类型集合转为Long类型集合

热门文章

  1. ArcScene:构建三维地图
  2. opencv C++ 旋转任意角度图片
  3. 动态cookie-ob混淆
  4. Proteus 8.13 安装教程
  5. 关于c语言从入门到精通那些事
  6. CCIE红头发讲解CCNA、CCNP视频教程
  7. 如何在windows10电脑上创建ftp站点
  8. coolfire的八篇入门文章(.txt)
  9. SQL挂起,需要重新启动计算机?
  10. 康华光电子技术基础第六版习题答案