Java实现简易图书借阅系统

网友投稿 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 list; //显示搜索结果的文本列表

private Vector bookSelect; //根据关键字在数据库中搜寻得到的书列表,作为JList的参数

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 list; //未还书籍的列表

private Vector bookSelect; //未还书籍列表,作为JList的参数

//窗口界面初始化

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> rowData;

public findNoReturnBook()

{

super();

rowData=new Vector>();

Vector columnNames=new 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=new 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=new 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 list; //未还书籍的列表

private Vector bookSelect; //未还书籍列表,作为JList的参数

//窗口界面初始化

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> rowData;

public findNoReturnBook()

{

super();

rowData=new Vector>();

Vector columnNames=new 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=new 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=new 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 list; //未还书籍的列表

private Vector bookSelect; //未还书籍列表,作为JList的参数

//窗口界面初始化

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> rowData;

public findNoReturnBook()

{

super();

rowData=new Vector>();

Vector columnNames=new 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=new 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=new 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小时内删除侵权内容。

上一篇:Mybatis中updateBatch实现批量更新
下一篇:java异步调用的4种实现方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~