SpringBoot实现扫码登录的示例代码
308
2022-08-21
Java实现简易图书借阅系统
在简单学习java的基础知识点后,动手做了一个十分简陋的图书馆借阅系统,作为对所学知识的综合应用,有不足的地方希望大家多多评论,会积极进行改正。
1.先附上总的效果
一开始的登录界面
登录界面
注册界面
登录进去后的个人主页
(本来想在上方插入一张图片,但是刚学swing部分,搞不懂图片的插入方式,搞了很久还是没懂,就暂时放下了)
借书页面
输入关键词后搜索的结果
还书界面,点击自动显示未还书籍
查询未还书籍的具体信息
2.贴上源代码
1).这里简单说一下与数据库的操作,注册用户时在表person_information插入个人信息,注册的同时创建专属个人的 账号+密码_no_book_information 表记录未还书籍 ,还有 账号+密码_already_book_information 表记录已还书籍的信息记录,在借书时将书籍的信息插入账号+密码_no_book_information 表,在还书时在账号+密码_already_book_information 表插入已还书籍的信息,删除账号+密码_no_book_information 表中对应的借阅记录。
2).首先做了一个初始化连接数据库的类,方便在需要时调用。(涉及数据库方面只是简单的增删查改,本人也是刚学,不做过多的说明)
package booksystem;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/*
* 用于初始化连接数据库
*/
public class jdbcConnection
{
public stLInTRGnaatic Connection getConnection()throws SQLException
{
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
System.exit(0);
}
return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/book_system?characterEncoding=UTF-8","root","123456789");
}
}
登录界面
主要思路:
登录时在数据库中搜索是否存在该账户,存在进入主页,不存在则提示错误,注册时在数据库的用户列表插入新用户的信息。
package booksystem;
import javax.swing.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*
* 图书馆登录界面的设计
* 包括 登录和注册两部分
*
*/
@SuppressWarnings("serial")
public class jieMian extends JFrame //总页面
{
public jieMian()
{
super();
JLabel label=new JLabel("欢迎来到图书馆借阅系统");
label.setFont(new Font("宋体", 0 ,25));
label.setBounds(100,50,300,150);
JButton button=new JButton("登录");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
new dengLu();
}
});
JButton button1=new JButton("注册");
button1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
new zhuCe();
}
});
Box box=Box.createVerticalBox();
box.add(button);
box.add(Box.createVerticalStrut(50));
box.add(button1);
box.setBounds(200,250,100,150);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(500,500);
setResizable(false);
setLocation(700,200);
setVisible(true);
setLayout(null);
add(label);
add(box);
}
//注册页面
class zhuCe extends JFrame implements ActionListener
{
private JTextField zhangHao2;
private JPasswordField password2;
public zhuCe()
{
super();
Box box=Box.createHorizontalBox();
zhangHao2=new JTextField(15);
box.add(new JLabel("账号:"));
box.add(Box.createHorizontalStrut(10));
box.add(zhangHao2);
Box box1=Box.createHorizontalBox();
password2=new JPasswordField(15);
box1.add(new JLabel("密码:"));
box1.add(Box.createHorizontalStrut(10));
box1.add(password2);
JButton button=new JButton("确认");
button.addActionListener(this);
JButton button1=new JButton("重置");
button1.addActionListener(this);
Box box2=Box.createHorizontalBox();
box2.add(Box.createHorizontalStrut(30));
box2.add(button);
box2.add(Box.createHorizontalStrut(70));
box2.add(button1);
Box box3=Box.createVerticalBox();
box3.add(box);
box3.add(Box.createVerticalStrut(10));
box3.add(box1);
box3.add(Box.createVerticalStrut(10));
box3.add(box2);
box3.setBounds(100,50,250,100);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(500,250);
setLayout(null);
setVisible(true);
setLocation(700,300);
add(box3);
}
//事件处理
@Override
public void actionPerformed(ActionEvent e)
{
String ret=e.getActionCommand();
if(ret.equals("确认"))
{
//需要插入一个检验数据合理性并更新数据库的操作
String insertzh=zhangHao2.getText();
String insertpw=new String(password2.getPassword());
insert(insertzh,insertpw); //点击确认后插入数据自动关闭
this.dispose();
}
else
{
zhangHao2.setText("");
password2.setText("");
}
}
//处理注册账号密码并插入数据库
//这里只是简单地将账号密码插入数据库,没有考虑若账号不能与之前的用户相同还有不能用空格注册。
//处理空格的方法:提取原始账号密码,用trim()除去前后空格比较长度做第一轮筛选,再逐个字符进行比较
private void insert(String zh,String pw)
{
try(
Statement statement=jdbcConnection.getConnection().createStatement();
)
{
String sqlsentence="insert into person_information values('"+zh+"','"+pw+"',now());";
statement.execute(sqlsentence);
String sqlsentence1="create table "+zh+pw+"_no_book_information(书名 varchar(20) not null," //建立一个个人的借书未还表
+ "借书时间 datetime not null,"
+ "借阅天数 int unsigned not null,"
+ "应还时间 datetime not null);";
statement.execute(sqlsentence1);
//建立已还书籍记录
String sqlsentence2="create table "+zh+pw+"_already_book_information(书名 varchar(20) not null," //建立一个个人的借书未还表
+ "借书时间 datetime not null,"
+ "借阅天数 int unsigned not null,"
+ "应还时间 datetime not null,"
+ "归还时间 datetime not null);";
statement.execute(sqlsentence2);
}
catch(SQLException e)
{
System.out.println("注册账号更新数据库时出错!");
e.printStackTrace();
System.exit(0);
}
}
}
//登录界面
class dengLu extends JFrame implements ActionListener
{
private JTextField zhangHao1;
private JPasswordField password1;
public dengLu
()
{
super();
Box box=Box.createHorizontalBox();
zhangHao1=new JTextField(15);
box.add(new JLabel("账号:"));
box.add(Box.createHorizontalStrut(10));
box.add(zhangHao1);
Box box1=Box.createHorizontalBox();
password1=new JPasswordField(15);
box1.add(new JLabel("密码:"));
box1.add(Box.createHorizontalStrut(10));
box1.add(password1);
JButton button=new JButton("确认");
button.addActionListener(this);
Box box2=Box.createHorizontalBox();
box2.add(Box.createHorizontalStrut(30));
box2.add(button);
Box box3=Box.createVerticalBox();
box3.add(box);
box3.add(Box.createVerticalStrut(10));
box3.add(box1);
box3.add(Box.createVerticalStrut(10));
box3.add(box2);
box3.setBounds(100,50,250,100);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(500,250);
setLayout(null);
setVisible(true);
setLocation(700,300);
add(box3);
}
@Override
public void actionPerformed(ActionEvent e)
{
//需要插入一个检验数据合理性并更新数据库的操作
String select=zhangHao1.getText();
String select1=new String(password1.getPassword()); //注意getPassword方法返回的时char数组
select(select,select1); //处理事件
}
private void select(String zh1,String pw1)
{
try(
Statement statement1=jdbcConnection.getConnection().createStatement();
)
{
String sqlsentence1="select * from person_information where 账号='"+zh1+"';";
System.out.println(sqlsentence1);
ResultSet set=statement1.executeQuery(sqlsentence1);
if(!set.next())
{
zhangHao1.setText("无此账号!"); //查询数据库发现无此账号记录
}
else
if(set.getString("密码").equals(pw1))
{
new zhuYe(zh1,pw1);//这里应该新建一个账号主页
this.dispose(); //若输入正确的账号密码,则次登录窗口消失,进入账号主页
}
else
{
zhangHao1.setText("密码错误!"); //显示密码错误
}
}
catch(SQLException e)
{
System.out.println("注册账号更新数据库时出错!");
e.printStackTrace();
System.exit(0);
}
}
}
}
主页部分
主要思路:
主要包括三个按钮对应三个功能块
package booksystem;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*
* 个人主页
*
*/
@SuppressWarnings("serial")
public class zhuYe extends JFrame
{
static String zh;
static String pw;
public zhuYe(String zh,String pw)
{
super(zh+"的主页");
zhuYe.zh=zh;
zhuYe.pw=pw;
JButton button=new JButton("借书");
button.setBounds(450,550,150,50);
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
new selectBook();
}
});
JButton button1=new JButton("还书");
buttonhttp://1.setBounds(450,650,150,50);
button1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
new returnBook();
}
});
JButton button2=new JButton("查询");
button2.setBounds(450,750,150,50);
button2.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
new findNoReturnBook();
}
});
add(button);
add(button1);
add(button2);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(1000,1000);
setLocation(400,30);
setLayout(null);
setVisible(true);
}
}
借书部分
输入关键词,搜索数据库的图书列表,将相关的书籍显示于列表框上,借阅天数默认为10天。
package booksystem;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@SuppressWarnings("serial")
public class selectBook extends JFrame
{
private JTextField textSelect; //用户输入关键词搜索的文本框
private JTextField textDay; //用户输入借阅天数的文本框
private JList
private Vector
private String bookName; //在输入关键字查询列表中被选中的书名
private String borrowDay="10"; //借阅天数默认为10天
public selectBook()
{
super();
textSelect=new JTextField();
textSelect.setPreferredSize(new Dimension(500,30));
bookSelect=new Vector
JButton button=new JButton("搜索"); //搜索按钮
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
String keyBookName=textSelect.getText().trim(); //获取用户输入关键词,然后对关键词去除前后空格
selectBookName(keyBookName); //调用函数
list.setListData(bookSelect); //添加搜索的数据
list.repaint(); //重绘列表
}
});
Box box=Box.createHorizontalBox();
box.add(textSelect);
box.add(Box.createHorizontalStrut(30));
box.add(button);
box.setBounds(180,100,600,30);
add(box);
Font font=new Font("宋体",0,20);
list=new JList
list.setPreferredSize(new Dimension(200, 100));
list.setFont(font);
list.setListData(bookSelect);
list.addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent arg0)
{
bookName=list.getSelectedValue(); //bookName为用户点击可能借阅的书名
}
});
//添加滚动条
jscrollPane scroll=new JScrollPane(list,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setBounds(100,150,800,500);
add(scroll);
JLabel label=new JLabel("天数:");
label.setBounds(350,650,100,50);
add(label);
textDay=new JTextField();
textDay.setBounds(400,665,50,20);
add(textDay);
JButton button1=new JButton("借阅");
button1.setBounds(380,700,70,35);
button1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
if(bookName!=null) //调用更新数据库的信息
{
String tempt=textDay.getText(); //判断用户是否有输入借阅天数,没有默认为10天
if(!tempt.equals(""))
{
borrowDay=tempt;
}
System.out.println(tempt);
updateInformation();
}
else
{
System.out.println("还未确定借阅的书籍!");
}
}
});
add(button1);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(1000,800);
setLocation(400,200);
setLayout(null);
setVisible(true);
}
//连接数据库
private void selectBookName(String name)
{
String[] tempt=name.split(""); //对用户输入的关键字进行简单的除去空格处理
name="%";
for(int i=0;i { if(!tempt[i].equals(" ")) { name=name+tempt[i]+"%"; } } try ( Statement statement=jdbcConnection.getConnection().createStatement(); ) //连接数据,搜索数据库返回搜索结果 { String sql="select * from book_information where 书名 like '"+name+"';"; ResultSet set=statement.executeQuery(sql); while(set.next()) { bookSelect.add(set.getString("书名")); } for(int i=0;i { System.out.println(bookSelect.get(i)); } if(bookSelect==null) { bookSelect.add("暂无该书籍!"); } } catch(SQLException e) { System.out.println("根据关键字模糊查询时出错!"); e.printStackTrace(); System.exit(0); } } //点击借阅按钮后更新数据库的信息 /* * 先将图书馆中对应的书籍数量减一 * 再将借阅的记录更新至个人的借阅未还记录表中 */ private void updateInformation() { try ( Statement statement=jdbcConnection.getConnection().createStatement(); ) { String sql="select * from book_information where 书名='"+bookName+"';"; ResultSet set=statement.executeQuery(sql); if(set.next()) //搜索不到这种书的信息,退出系统 { Integer number=set.getInt("数量")-1; String sql1="update book_information set 数量="+number+" where 书名='"+bookName+"';"; statement.execute(sql1); System.out.println(sql1); } else { System.out.println("没有这种书的记录!"); System.exit(0); } String sql2="insert into "+zhuYe.zh+zhuYe.pw+"_no_book_information values('"+bookName+"',now(),"+borrowDay+",now()+interval "+borrowDay+" day);"; System.out.println(sql2); statement.execute(sql2); } catch(SQLException e) { System.out.println("借阅更新书籍时出错!"); e.printStackTrace(); System.exit(0); } } } 还书部分 自动查询该账户未还书籍显示在列表框中,可以点击对应书籍还书。 package booksystem; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.ResultSet; import javax.swing.*; /* * 还书 * * 当界面做好后,在还书时若没有查询到书本的信息说明书名输入错误,这里直接退出程序,可以优化为提示输入错误并重新输入书名 */ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /* * 还书 * */ @SuppressWarnings("serial") public class returnBook extends JFrame { private String bookName; //书名 private String borrowTime; //借阅天数 private JList private Vector //窗口界面初始化 public returnBook() { super(); bookSelect=new Vector findBook(zhuYe.zh,zhuYe.pw); //初始化bookSelect作为JList的内容参数 Font font=new Font("宋体",0,20); list=new JList list.setPreferredSize(new Dimension(200, 100)); list.setListData(bookSelect); list.setFont(font); list.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent arg0) { String[] tempt=list.getSelectedValue().split(">>"); //将用户选中的书名和借书时间分开存放 if(tempt[0]!=null) //判断字符串处理是否有异常,有异常则退出程序 { bookName=tempt[0]; } else { System.out.println("书名为空!"); System.exit(0); } if(tempt[1]!=null) { borrowTime=tempt[1]; } else { System.out.println("借书时间为空!"); System.exit(0); } System.out.println(bookName+borrowTime); } }); JScrollPane scroll=new JScrollPane(list,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.setBounds(100,150,800,500); JButton button1=new JButton("归还"); //点击按钮,归还书籍 button1.setBounds(400,670,70,35); button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if(bookName!=null) updateNumber(); //list.repaint(); //想要再归还书籍后刷新页面,不成功 } }); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setSize(1000,800); setLocation(400,200); setLayout(null); setVisible(true); add(scroll); add(button1); } /* * 在图书馆总图书目录中更新书籍的数量 * 然后在个人借阅未还记录中删除记录,再在个人已还记录中插入记录 * */ private void updateNumber() { try( Statement statement=jdbcConnection.getConnection().createStatement(); //直接调用函数连接数据库 ) { String sql1="select * from book_information where 书名='"+bookName+"';"; //这里的数量和书名有待检查修改 System.out.println(sql1); ResultSet set=statement.executeQuery(sql1); if(set.next()) //搜索不到这种书的信息,退出系统 { Integer number=set.getInt("数量")+1; String sql2="update book_information set 数量="+number+" where 书名='"+bookName+"';"; statement.execute(sql2); System.out.println(sql2); } else { System.out.println("没有这种书的记录!"); System.exit(0); } String sql="select * from "+zhuYe.zh+zhuYe.pw+"_no_book_information where 书名='"+bookName+"' and 借书时间='"+borrowTime+"';"; ResultSet set1=statement.executeQuery(sql); if(set1.next()) { String sql3="insert into "+zhuYe.zh+zhuYe.pw+"_already_book_information values('"+set1.getString("书名")+"','"+set1.getString("借书时间")+"',"+set1.getString("借阅天数")+",'"+set1.getString("应还时间")+"',"+"now());"; System.out.println(sql3); statement.execute(sql3); String sql4="delete from "+zhuYe.zh+zhuYe.pw+"_no_book_information where 书名='"+bookName+"' and 借书时间='"+borrowTime+"';"; System.out.println(sql4); statement.execute(sql4); } else { System.out.println(zhuYe.zh+"没有这种书的借阅记录!"); System.exit(0); } } catch(SQLException g) { System.out.println("更新数据时出错!"); g.printStackTrace(); System.exit(0); } } private void findBook(String zh,String pw) //从数据库中搜索表返回未归还书名初始化bookSelect { try ( Statement statement1=jdbcConnection.getConnection().createStatement(); ) { String sql5="select * from "+zh+pw+"_no_book_information;"; ResultSet returnSet=statement1.executeQuery(sql5); while(returnSet.next()) { String name=returnSet.getString("书名")+">>"+returnSet.getString("借书时间"); //显示书名和借书时间,这样允许不同时间借同一本书 bookSelect.add(name); } if(bookSelect.size()==0) //如果没有借阅记录 { bookSelect.add("暂无借阅记录!"); } } catch(SQLException e) { System.out.println("还书搜索未还书籍出错!"); e.printStackTrace(); System.exit(0); } } } 查询部分 查询个人账号的未还书籍具体信息,显示在表格中。 package booksystem; import java.awt.*; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; import javax.swing.*; /* * * 查询还未归还的书籍 */ @SuppressWarnings("serial") public class findNoReturnBook extends JFrame { private Vector public findNoReturnBook() { super(); rowData=new Vector Vector columnNames.add("书名"); columnNames.add("借书时间"); columnNames.add("借阅天数"); columnNames.add("应还时间"); findBook(); //初始化rowData JTable table=new JTable(rowData,columnNames); JScrollPane pane=new JScrollPane(table); table.setPreferredScrollableViewportSize(new Dimension(400, 300)); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setSize(800,600); setLayout(new BorderLayout()); add(pane,BorderLayout.CENTER); setLocation(500,200); setVisible(true); } private void findBook() //查询数据,并用容器收集起来 { try( Statement statement=jdbcConnection.getConnection().createStatement(); ) { String sql="select * from "+zhuYe.zh+zhuYe.pw+"_no_book_information;"; ResultSet result=statement.executeQuery(sql); while(result.next()) { Vector tempt.add(result.getString("书名")); tempt.add(result.getString("借书时间")); tempt.add(result.getString("借阅天数")); tempt.add(result.getString("应还时间")); if(tempt!=null) rowData.add(tempt); } if(rowData==null) { Vector tempt.add("暂无借阅数据"); rowData.add(tempt); } } catch(SQLException |NullPointerException a) { System.out.println("查询数据出错!"); a.printStackTrace(); System.exit(0); } } } 总结: 1).swing的界面设计很不熟练。(个人也觉得用这个工具包设计界面很是麻烦)2).做项目的过程将界面和功能的实现混在一起,不利于后期的修改。
{
if(!tempt[i].equals(" "))
{
name=name+tempt[i]+"%";
}
}
try
( Statement statement=jdbcConnection.getConnection().createStatement(); ) //连接数据,搜索数据库返回搜索结果
{
String sql="select * from book_information where 书名 like '"+name+"';";
ResultSet set=statement.executeQuery(sql);
while(set.next())
{
bookSelect.add(set.getString("书名"));
}
for(int i=0;i { System.out.println(bookSelect.get(i)); } if(bookSelect==null) { bookSelect.add("暂无该书籍!"); } } catch(SQLException e) { System.out.println("根据关键字模糊查询时出错!"); e.printStackTrace(); System.exit(0); } } //点击借阅按钮后更新数据库的信息 /* * 先将图书馆中对应的书籍数量减一 * 再将借阅的记录更新至个人的借阅未还记录表中 */ private void updateInformation() { try ( Statement statement=jdbcConnection.getConnection().createStatement(); ) { String sql="select * from book_information where 书名='"+bookName+"';"; ResultSet set=statement.executeQuery(sql); if(set.next()) //搜索不到这种书的信息,退出系统 { Integer number=set.getInt("数量")-1; String sql1="update book_information set 数量="+number+" where 书名='"+bookName+"';"; statement.execute(sql1); System.out.println(sql1); } else { System.out.println("没有这种书的记录!"); System.exit(0); } String sql2="insert into "+zhuYe.zh+zhuYe.pw+"_no_book_information values('"+bookName+"',now(),"+borrowDay+",now()+interval "+borrowDay+" day);"; System.out.println(sql2); statement.execute(sql2); } catch(SQLException e) { System.out.println("借阅更新书籍时出错!"); e.printStackTrace(); System.exit(0); } } } 还书部分 自动查询该账户未还书籍显示在列表框中,可以点击对应书籍还书。 package booksystem; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.ResultSet; import javax.swing.*; /* * 还书 * * 当界面做好后,在还书时若没有查询到书本的信息说明书名输入错误,这里直接退出程序,可以优化为提示输入错误并重新输入书名 */ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /* * 还书 * */ @SuppressWarnings("serial") public class returnBook extends JFrame { private String bookName; //书名 private String borrowTime; //借阅天数 private JList private Vector //窗口界面初始化 public returnBook() { super(); bookSelect=new Vector findBook(zhuYe.zh,zhuYe.pw); //初始化bookSelect作为JList的内容参数 Font font=new Font("宋体",0,20); list=new JList list.setPreferredSize(new Dimension(200, 100)); list.setListData(bookSelect); list.setFont(font); list.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent arg0) { String[] tempt=list.getSelectedValue().split(">>"); //将用户选中的书名和借书时间分开存放 if(tempt[0]!=null) //判断字符串处理是否有异常,有异常则退出程序 { bookName=tempt[0]; } else { System.out.println("书名为空!"); System.exit(0); } if(tempt[1]!=null) { borrowTime=tempt[1]; } else { System.out.println("借书时间为空!"); System.exit(0); } System.out.println(bookName+borrowTime); } }); JScrollPane scroll=new JScrollPane(list,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.setBounds(100,150,800,500); JButton button1=new JButton("归还"); //点击按钮,归还书籍 button1.setBounds(400,670,70,35); button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if(bookName!=null) updateNumber(); //list.repaint(); //想要再归还书籍后刷新页面,不成功 } }); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setSize(1000,800); setLocation(400,200); setLayout(null); setVisible(true); add(scroll); add(button1); } /* * 在图书馆总图书目录中更新书籍的数量 * 然后在个人借阅未还记录中删除记录,再在个人已还记录中插入记录 * */ private void updateNumber() { try( Statement statement=jdbcConnection.getConnection().createStatement(); //直接调用函数连接数据库 ) { String sql1="select * from book_information where 书名='"+bookName+"';"; //这里的数量和书名有待检查修改 System.out.println(sql1); ResultSet set=statement.executeQuery(sql1); if(set.next()) //搜索不到这种书的信息,退出系统 { Integer number=set.getInt("数量")+1; String sql2="update book_information set 数量="+number+" where 书名='"+bookName+"';"; statement.execute(sql2); System.out.println(sql2); } else { System.out.println("没有这种书的记录!"); System.exit(0); } String sql="select * from "+zhuYe.zh+zhuYe.pw+"_no_book_information where 书名='"+bookName+"' and 借书时间='"+borrowTime+"';"; ResultSet set1=statement.executeQuery(sql); if(set1.next()) { String sql3="insert into "+zhuYe.zh+zhuYe.pw+"_already_book_information values('"+set1.getString("书名")+"','"+set1.getString("借书时间")+"',"+set1.getString("借阅天数")+",'"+set1.getString("应还时间")+"',"+"now());"; System.out.println(sql3); statement.execute(sql3); String sql4="delete from "+zhuYe.zh+zhuYe.pw+"_no_book_information where 书名='"+bookName+"' and 借书时间='"+borrowTime+"';"; System.out.println(sql4); statement.execute(sql4); } else { System.out.println(zhuYe.zh+"没有这种书的借阅记录!"); System.exit(0); } } catch(SQLException g) { System.out.println("更新数据时出错!"); g.printStackTrace(); System.exit(0); } } private void findBook(String zh,String pw) //从数据库中搜索表返回未归还书名初始化bookSelect { try ( Statement statement1=jdbcConnection.getConnection().createStatement(); ) { String sql5="select * from "+zh+pw+"_no_book_information;"; ResultSet returnSet=statement1.executeQuery(sql5); while(returnSet.next()) { String name=returnSet.getString("书名")+">>"+returnSet.getString("借书时间"); //显示书名和借书时间,这样允许不同时间借同一本书 bookSelect.add(name); } if(bookSelect.size()==0) //如果没有借阅记录 { bookSelect.add("暂无借阅记录!"); } } catch(SQLException e) { System.out.println("还书搜索未还书籍出错!"); e.printStackTrace(); System.exit(0); } } } 查询部分 查询个人账号的未还书籍具体信息,显示在表格中。 package booksystem; import java.awt.*; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; import javax.swing.*; /* * * 查询还未归还的书籍 */ @SuppressWarnings("serial") public class findNoReturnBook extends JFrame { private Vector public findNoReturnBook() { super(); rowData=new Vector Vector columnNames.add("书名"); columnNames.add("借书时间"); columnNames.add("借阅天数"); columnNames.add("应还时间"); findBook(); //初始化rowData JTable table=new JTable(rowData,columnNames); JScrollPane pane=new JScrollPane(table); table.setPreferredScrollableViewportSize(new Dimension(400, 300)); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setSize(800,600); setLayout(new BorderLayout()); add(pane,BorderLayout.CENTER); setLocation(500,200); setVisible(true); } private void findBook() //查询数据,并用容器收集起来 { try( Statement statement=jdbcConnection.getConnection().createStatement(); ) { String sql="select * from "+zhuYe.zh+zhuYe.pw+"_no_book_information;"; ResultSet result=statement.executeQuery(sql); while(result.next()) { Vector tempt.add(result.getString("书名")); tempt.add(result.getString("借书时间")); tempt.add(result.getString("借阅天数")); tempt.add(result.getString("应还时间")); if(tempt!=null) rowData.add(tempt); } if(rowData==null) { Vector tempt.add("暂无借阅数据"); rowData.add(tempt); } } catch(SQLException |NullPointerException a) { System.out.println("查询数据出错!"); a.printStackTrace(); System.exit(0); } } } 总结: 1).swing的界面设计很不熟练。(个人也觉得用这个工具包设计界面很是麻烦)2).做项目的过程将界面和功能的实现混在一起,不利于后期的修改。
{
System.out.println(bookSelect.get(i));
}
if(bookSelect==null)
{
bookSelect.add("暂无该书籍!");
}
}
catch(SQLException e)
{
System.out.println("根据关键字模糊查询时出错!");
e.printStackTrace();
System.exit(0);
}
}
//点击借阅按钮后更新数据库的信息
/*
* 先将图书馆中对应的书籍数量减一
* 再将借阅的记录更新至个人的借阅未还记录表中
*/
private void updateInformation()
{
try
( Statement statement=jdbcConnection.getConnection().createStatement(); )
{
String sql="select * from book_information where 书名='"+bookName+"';";
ResultSet set=statement.executeQuery(sql);
if(set.next()) //搜索不到这种书的信息,退出系统
{
Integer number=set.getInt("数量")-1;
String sql1="update book_information set 数量="+number+" where 书名='"+bookName+"';";
statement.execute(sql1);
System.out.println(sql1);
}
else
{
System.out.println("没有这种书的记录!");
System.exit(0);
}
String sql2="insert into "+zhuYe.zh+zhuYe.pw+"_no_book_information values('"+bookName+"',now(),"+borrowDay+",now()+interval "+borrowDay+" day);";
System.out.println(sql2);
statement.execute(sql2);
}
catch(SQLException e)
{
System.out.println("借阅更新书籍时出错!");
e.printStackTrace();
System.exit(0);
}
}
}
还书部分
自动查询该账户未还书籍显示在列表框中,可以点击对应书籍还书。
package booksystem;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import javax.swing.*;
/*
* 还书
*
* 当界面做好后,在还书时若没有查询到书本的信息说明书名输入错误,这里直接退出程序,可以优化为提示输入错误并重新输入书名
*/
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/*
* 还书
*
*/
@SuppressWarnings("serial")
public class returnBook extends JFrame
{
private String bookName; //书名
private String borrowTime; //借阅天数
private JList
private Vector
//窗口界面初始化
public returnBook()
{
super();
bookSelect=new Vector
findBook(zhuYe.zh,zhuYe.pw); //初始化bookSelect作为JList的内容参数
Font font=new Font("宋体",0,20);
list=new JList
list.setPreferredSize(new Dimension(200, 100));
list.setListData(bookSelect);
list.setFont(font);
list.addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent arg0)
{
String[] tempt=list.getSelectedValue().split(">>"); //将用户选中的书名和借书时间分开存放
if(tempt[0]!=null) //判断字符串处理是否有异常,有异常则退出程序
{
bookName=tempt[0];
}
else
{
System.out.println("书名为空!");
System.exit(0);
}
if(tempt[1]!=null)
{
borrowTime=tempt[1];
}
else
{
System.out.println("借书时间为空!");
System.exit(0);
}
System.out.println(bookName+borrowTime);
}
});
JScrollPane scroll=new JScrollPane(list,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setBounds(100,150,800,500);
JButton button1=new JButton("归还"); //点击按钮,归还书籍
button1.setBounds(400,670,70,35);
button1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
if(bookName!=null)
updateNumber();
//list.repaint(); //想要再归还书籍后刷新页面,不成功
}
});
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(1000,800);
setLocation(400,200);
setLayout(null);
setVisible(true);
add(scroll);
add(button1);
}
/*
* 在图书馆总图书目录中更新书籍的数量
* 然后在个人借阅未还记录中删除记录,再在个人已还记录中插入记录
*
*/
private void updateNumber()
{
try(
Statement statement=jdbcConnection.getConnection().createStatement(); //直接调用函数连接数据库
)
{
String sql1="select * from book_information where 书名='"+bookName+"';"; //这里的数量和书名有待检查修改
System.out.println(sql1);
ResultSet set=statement.executeQuery(sql1);
if(set.next()) //搜索不到这种书的信息,退出系统
{
Integer number=set.getInt("数量")+1;
String sql2="update book_information set 数量="+number+" where 书名='"+bookName+"';";
statement.execute(sql2);
System.out.println(sql2);
}
else
{
System.out.println("没有这种书的记录!");
System.exit(0);
}
String sql="select * from "+zhuYe.zh+zhuYe.pw+"_no_book_information where 书名='"+bookName+"' and 借书时间='"+borrowTime+"';";
ResultSet set1=statement.executeQuery(sql);
if(set1.next())
{
String sql3="insert into "+zhuYe.zh+zhuYe.pw+"_already_book_information values('"+set1.getString("书名")+"','"+set1.getString("借书时间")+"',"+set1.getString("借阅天数")+",'"+set1.getString("应还时间")+"',"+"now());";
System.out.println(sql3);
statement.execute(sql3);
String sql4="delete from "+zhuYe.zh+zhuYe.pw+"_no_book_information where 书名='"+bookName+"' and 借书时间='"+borrowTime+"';";
System.out.println(sql4);
statement.execute(sql4);
}
else
{
System.out.println(zhuYe.zh+"没有这种书的借阅记录!");
System.exit(0);
}
}
catch(SQLException g)
{
System.out.println("更新数据时出错!");
g.printStackTrace();
System.exit(0);
}
}
private void findBook(String zh,String pw) //从数据库中搜索表返回未归还书名初始化bookSelect
{
try
( Statement statement1=jdbcConnection.getConnection().createStatement(); )
{
String sql5="select * from "+zh+pw+"_no_book_information;";
ResultSet returnSet=statement1.executeQuery(sql5);
while(returnSet.next())
{
String name=returnSet.getString("书名")+">>"+returnSet.getString("借书时间"); //显示书名和借书时间,这样允许不同时间借同一本书
bookSelect.add(name);
}
if(bookSelect.size()==0) //如果没有借阅记录
{
bookSelect.add("暂无借阅记录!");
}
}
catch(SQLException e)
{
System.out.println("还书搜索未还书籍出错!");
e.printStackTrace();
System.exit(0);
}
}
}
查询部分
查询个人账号的未还书籍具体信息,显示在表格中。
package booksystem;
import java.awt.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.*;
/*
*
* 查询还未归还的书籍
*/
@SuppressWarnings("serial")
public class findNoReturnBook extends JFrame
{
private Vector
public findNoReturnBook()
{
super();
rowData=new Vector
Vector
columnNames.add("书名");
columnNames.add("借书时间");
columnNames.add("借阅天数");
columnNames.add("应还时间");
findBook(); //初始化rowData
JTable table=new JTable(rowData,columnNames);
JScrollPane pane=new JScrollPane(table);
table.setPreferredScrollableViewportSize(new Dimension(400, 300));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(800,600);
setLayout(new BorderLayout());
add(pane,BorderLayout.CENTER);
setLocation(500,200);
setVisible(true);
}
private void findBook() //查询数据,并用容器收集起来
{
try(
Statement statement=jdbcConnection.getConnection().createStatement();
)
{
String sql="select * from "+zhuYe.zh+zhuYe.pw+"_no_book_information;";
ResultSet result=statement.executeQuery(sql);
while(result.next())
{
Vector
tempt.add(result.getString("书名"));
tempt.add(result.getString("借书时间"));
tempt.add(result.getString("借阅天数"));
tempt.add(result.getString("应还时间"));
if(tempt!=null)
rowData.add(tempt);
}
if(rowData==null)
{
Vector
tempt.add("暂无借阅数据");
rowData.add(tempt);
}
}
catch(SQLException |NullPointerException a)
{
System.out.println("查询数据出错!");
a.printStackTrace();
System.exit(0);
}
}
}
总结:
1).swing的界面设计很不熟练。(个人也觉得用这个工具包设计界面很是麻烦)2).做项目的过程将界面和功能的实现混在一起,不利于后期的修改。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~