Java Swing 图书管理系统
2023-01-13 04:36
浏览:696次
简介
# 基于swing的图书管理系统 ## 项目描述 本项目主要运用了java中的swing、awt包和MySQL数据库实现了图书管理系统。该系统最初是实现了图书添加和管理,图书类别添加和管理的功能,我在此基础上添加了图书借阅和归还的功能。欢迎大家fork该项目的代码来学习。 ## 新增项目功能展示 ### 1.借书功能 1、实现的功能: 通过填写“图书编号”、“借书人姓名”、“归还日期”可完成借书操作。借书时会判定输入的“图书编号”和“日期”是否合理,若合理,则借书成功;反之,则会弹出提示框显示借书失败。 “借书日期”输入框会自动填入本机时间,且不能修改。"还书日期"输入框会自动填入“本机时间+30天”,但是可以修改。 2、组件功能描述: 按下“确定”按钮可执行借书操作,按下“重置”按钮会将文本框还原为初始状态。 ### 2.还书功能 1、实现的功能: 最上面一栏实现查找功能,可以通过“借书人”、“书名”、“图书编号”来查找借书记录。 中间部分显示了借书的记录。 中下部分可以显示选中的借书记录的信息。 最下面一栏是通过填写“归还日期”输入框来进行还书操作,刚开始会自动填入本机时间。 2、组件功能描述: “查询”按钮被按下时会根据文本框中的信息将对应的记录显示在中间部分。 “重置”按钮被按下时会清空查询文本框中的内容,并将所有借书信息显示在中间部分。 “归还”按钮被按下时会先检测填入的归还日期是否合法,若不合法则弹出提示框,反之则还书成功。 ### 3.图书数量查询功能 1、实现的功能: 最上面一栏实现了查找功能,可以通过“图书编号”、“书名”来查找图书库中对应的书的数量。 中间部分显示了图书库中的图书以及其数量。 中下部分显示选中图书的信息。 最下面一栏可以更新选中图书的总数量。 2、组件功能描述: “查询”按钮和“清除”按钮的功能同上 假设更新后的图书数量为N2,更新前的图书数量为N1,更新前图书的现有数量为M1。当“修改”按钮被按下后,先会判定N2-N1是否小于M1。若是,则更新成功;否则,更新失败。 ## 新增功能图片展示 1、主界面 ![image.jpg](https://i.ibb.co/q7ftfFN/image.jpg) 2、借书系统 ![image.jpg](https://i.ibb.co/g3szXTh/image.jpg) 3、还书系统 ![image.jpg](https://i.ibb.co/Kq3mP0H/image.jpg) 4、图书数量查询系统 ![image.jpg](https://i.ibb.co/LzkbVhN/image.jpg) ## 数据库MySQL的使用 该项目中用到的数据库操作一共有4种,分别是“获取”,“插入”,“删除”,“更新”。 数据库的基本语法可以参考以下链接:https://blog.csdn.net/liustreh/article/details/123411958 ## 项目结构分析 ### 程序启动及登录: src/bookManageSystem目录下的**Main.java**文件是程序入口,用于实例化该目录下的view文件夹下的**LogupFrame.java**。**LogupFrame.java**实现了登录界面。 ### 程序主界面: 输入**用户名:admin,密码:123456**后成功登录。此时**LogupFrame.java**实例化同目录下的**MainFrame.java**文件。**MainFrame.java**实现了主界面。 ### 菜单栏: 主页面下的菜单栏实现了各页面切换的功能,总共有8个页面和“退出”: 1.图书类别添加 —— **BookTypeAddPanel.java** 2.图书类别维护 —— **BookTypeManagePanel.java** 3.图书添加 —— **BookAddPanel.java** 4.图书维护 —— **BookManagePanel.java** 5.借书 —— **BookBorrowPanel.java** 6.还书 —— **BookReturnPanel.java** 7.图书数量 —— **BookAmountPanel.java** 8.关于软件 —— **AboutSoftDialog.java** 9.退出 —— **终止程序** 通过点击不同的菜单选项切换到不同的界面 ### bean文件: bean文件夹下的文件是储存从数据表中获取到的信息的模板。通过实例化bean文件,可将数据库中的数据储存到对应的bean文件中。 为提高数据的安全性,bean文件中的变量均被private修饰,须通过set和get方法分别来修改和获取这些变量。 ### dao文件: dao文件夹下有两类文件。 一类文件实现了修改数据库信息和获取数据库信息的功能,可被称为dao文件。每个dao文件中有三个方法,分别是: 1.**public boolean dataChange(String sql)** —— 实现了根据sql语句执行相应的数据库操作的功能(插入,删除,修改) 2.**public List getRecordsDataBySql(String sql)** —— 实现了根据sql语句从数据库中读入数据的功能,读入的数据被存入bean文件中。 3.**public String[][] ListToArray(List<> list)** —— 实现了将储存数据的list转换成二维数组的形式输出。 另一类文件其实是一个文件 —— **JDBCUtils.java**。该文件下有两个方法: 1.**public static Connection getConnection() throws SQLException, ClassNotFoundException** —— 与数据库建立连接 2.**public static void release(ResultSet rs, Statement stmt, Connection conn)** —— 与数据库断开连接 ### tools文件: tools文件夹下有两个文件: 1.**ComponentTools.java** —— 含有对组件操作的常用方法 2.**SimpleTools.java** —— 含有其他常用方法 ## 项目用到的swing组件和方法 ### 1.标签 —— **JLabel** 通过 **JLabel label = new JLabel("My Label");** 来创建一个名为label的Label.label中的内容为"My Label". ### 2.文本框 —— **JTextField** 通过 **JTextField textField = new JTextField(15);** 来创建一个宽度为15的textField. 通过 **textField.setText("My Text");** 把textField中显示的文本修改为"My Text". 通过 **textField.setEditable(false);** 把textField设置为不可更新. ### 3.按钮 —— **JButton** 通过 **JButton button = new JButton("My Button");** 来创建一个JButton类型的button.button上显示的内容为“My Button”. 通过 **button.addActionListener(ActionListener action)** 为button创建监听事件**action**,当按钮被触发时,会根据传入的**ActionListener**类型的参数**action**来执行相应的操作. ### 4.文本域 —— **JTextArea** 通过 **JTextArea textArea = new JTextArea(7,40)** 来创建高为7,宽为40的textArea. 通过 **textArea.setEditable(false)** 把textArea设置为不可更新. ### 5.Box容器 —— **Box** 通过 **Box totalBox = Box.createVerticalBox()** 来创建一个竖直排列的totalBox(即加入totalBox的组件是竖直排列的). 通过 **Box compBox = Box.createHorizontalBox()** 来创建一个水平排列的compBox(即加入compBox组件是水平排列的). 通过 **totalBox.add(compBox)** 往totalBox中加入compBox. 通过 **compBox.add(comp)** 往compBox中加入comp组件. 通过 **Box.createVerticalStruct(30)** 创建竖直排列的30个字符的空间. 通过 **Box.createHorizontalStruct(30)** 创建水平排列的30个字符的空间. **水平Box和竖直Box的组合可以构成复杂结构** ### 6.表格和表格模板 —— **JTable** && **DefaultTableModel** 通过 **JTable table = new table()** 创建一个表格. 通过 **DefaultTableModel tableModel = new DefaultTableModel()** 来创建一个表格模板. 通过 **tableModel.setDataVector(rowdatas,headers)** 设置表格模板的内容。其中 **rowdatas** 为二维数组,储存需要展示的数据; **headers** 为一维数组,储存表格的列名. 通过 **table.setModel(tableModel)** 将 **table** 的内容更新为 **tableModel** 中的内容. ### 7.滚动面板 —— **JScrollPane** 通过 **JScrollPane scrollPane = new JScrollPane(comp)** 将组件 **comp** 通过滚动面板展示出来. 通过 **scrollPane.setViewPortView(comp)** 将 **scrollPane** 展示的组件更新为 **comp**. ### 8.事件监听 —— **ActionListener**,**ListSelectionListener** ```java class ListenerDemo implements ActionListener,ListSelectionListener{ @Override public void actionPerformed(ActionEvent e){ //当按钮被按下,键盘被按下等时间发生时,执行这段代码 //e.getSource()可以获取触发事件的组件对象 if(e.getSource() == button){ //如果触发事件的对象为button,则执行这段代码 } } @Override public void valueChanged(ListSelectionEvent e){ //当Tabel中一行被选中时,执行这段代码 int selectedRowIndex = table.getSelectedRow();//获取被选中的行的行号 } } class JFrameDemo extends JFrame{ JButton button; JTable table; public JFrameDemo(){ button = new JButton("MyButton"); table = new JTable(); /* 为button,table添加监听事件 */ button.addActionListener(new ListenerDemo()); table.getSelectionModel().addListSelectionListener(new ListenerDemo()); } } ``` ## 项目总结 本项目基于swing实现了简单的图书管理系统。 本项目让我们基本了解了**JFrame**,**JPanel**,**JLabel**,**JTextField**,**JTextArea**,**JTable**,**JButton**等组件的使用方法。 对于一个新的知识只有自己上手操作才能发现自己的不足,从而才能熟练掌握这个知识。这个项目为我们提供了很好的上手操作来了解swing包的平台,真心希望大家可以自己动手试一试。本项目也欢迎大家继续更新!!!
一起来交流一下吧~
评论加载中...
Copyright © 2022-2024 1024Code 粤ICP备19030132号-9