图书管理系统在生活和学校中是最为常见的,这学期的java课程设计题目中的其中一个就是实现图书管理系统,

做完课设后,在此记录下。

我的图书管理系统一共分为几个模块。图书查询模块,管理员模块(默认只有一个管理员),读者模块。

图书管理系统结构图如下所示:

1、管理员模块

管理员模块中一共包含三个部分,其一是管理员登录(此系统默认只有一个管理员),其二是图书入库管理,其三是用户借阅信息管理。

主窗口程序代码如下:主要执行查询操作和显示查询结果:

package per.tushu.frame;import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;import per.tushu.storage.FindBook;public class MainFrame extends JFrame{JLabel label1,label2,info;   JPanel jpanel,jp1,jp2,jp3;JTextField text;JButton button,admin,stu;JButton lend;DefaultTableModel tableModel;public MainFrame(){this.setLayout(new BorderLayout());this.setBounds(400, 200, 600, 450);this.setTitle("图书查询");//窗体最上面的部分label1 = new JLabel("图书查询",SwingConstants.CENTER);label1.setFont(new Font("楷体",Font.BOLD,40));     //设置字体和大小//窗体中间的部分label2 = new JLabel("书名:");text = new JTextField(15);button = new JButton("查询");jpanel = new JPanel();jpanel.setLayout(new BorderLayout());jp1 = new JPanel();jp2 = new JPanel();       //窗体最下面的部分(及显示查询内容的地方)
//      jp2.setBackground(Color.BLUE);stu = new JButton("用户登录");admin = new JButton("管理员");//     //测试
//      lend = new JButton("确认借阅");jp1.add(label2);jp1.add(text);jp1.add(button);
//      jp1.add(lend);jp3 = new JPanel();jp2.setLayout(new BorderLayout());jp3.setLayout(new FlowLayout(FlowLayout.RIGHT));jp3.add(stu);jp3.add(admin);jp2.add(jp3,BorderLayout.SOUTH);//      jp2.add(info,BorderLayout.SOUTH);jpanel.add(jp1,BorderLayout.NORTH);jpanel.add(jp2);this.add(label1,BorderLayout.NORTH);this.add(jpanel);MyEvent();this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void MyEvent(){// 查询按钮事件button.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubnew FindBook().findInfo(jp2,text);}});// 管理员按钮事件admin.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubnew LoginFrame().show();}});//用户按钮事件stu.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubnew UserLoginFrame().show();}});}public static void main(String[] args){new MainFrame();}
}

主窗口显示效果如下:

管理员登录:默认管理员账号为admin,若密码输入错误则有提示信息,密码正确则进入管理员管理界面。完整代码如下:

package per.tushu.frame;import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;// 管理员登录模块
public class LoginFrame extends JFrame{JLabel label,name,pass;JButton login;JTextField adminName;JPasswordField password;JPanel panel,jp1,jp2;public LoginFrame(){this.setBounds(400, 200, 300, 200);this.setTitle("图书馆管理系统登录");this.setLayout(new BorderLayout());label = new JLabel("登录",SwingConstants.CENTER);label.setFont(new Font("楷体",Font.BOLD,30));name = new JLabel("账 号");pass = new JLabel("密 码");adminName = new JTextField(12);adminName.setText("admin");adminName.setHorizontalAlignment(SwingConstants.CENTER);password = new JPasswordField(12);password.setHorizontalAlignment(SwingConstants.CENTER);password.setEchoChar('*');     //设置回显字符panel = new JPanel();jp1 = new JPanel();jp2 = new JPanel();panel.setLayout(new BorderLayout());jp1.add(adminName);jp1.add(name);jp1.add(password);jp1.add(pass);panel.add(jp1);login = new JButton("登录");jp2.add(login);panel.add(jp2,BorderLayout.SOUTH);this.add(label,BorderLayout.NORTH);this.add(panel);MyEvent();this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void MyEvent(){login.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString word = "123456";   // 正确密码String str = new String(password.getPassword());if(str.equals(word))new LendAdminFrame().show();
//                  new TableFrame().show();
//                  new RuKuFrame();else{String str1 = "你输入的密码不正确,原因可能是:\n" +  "1、忘记密码;\n" + "2、未开启小键盘;\n" + "3、大小写未区分。";JOptionPane.showMessageDialog(null, str1);
//                  new LoginErrorFrame().show();}LoginFrame.this.dispose();}});}public static void main(String[] args){new LoginFrame();}
}

代码执行后显示如下:

密码错误时:

图书入库管理:管理员在此界面内对图书信息进行管理。包括图书在馆内的图书号、图书名、撰写此书的作者、书的种类(可以是专业分类)、出版社、入库日期、借阅状态以及分布的校区(或分馆)。

用户借阅信息管理:管理员在此界面可以对用户的借阅信息进行管理。包括借阅者账号(默认为姓名)、所借图书编号、书名以及借书日期。此表会根据用户借阅图书以及归还图书动态变化。

图书入库管理和用户借阅信息管理的功能我用了一个类来实现。不过由另外一个类写了两个按钮,来保证究竟要哪一个功能起作用。用于管理这两个小模块的代码如下:

package per.tushu.frame;import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class LendAdminFrame extends JFrame{JPanel panel;JButton storage,lendInfo;public LendAdminFrame(){this.setTitle("管理员");this.setBounds(400,300,200,200);this.setLayout(new FlowLayout(FlowLayout.CENTER));storage = new JButton("图书入库管理");lendInfo = new JButton("借阅信息管理");this.add(storage);this.add(lendInfo);MyEvent();this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void MyEvent(){// 图书入库管理storage.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubnew TableFrame(storage.getText()).show();}});// 用户借阅信息管理lendInfo.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubnew TableFrame(lendInfo.getText()).show();}});}public static void main(String[] args){new LendAdminFrame();}
}

代码显示效果如下:

两个小模块实现功能的代码如下:

package per.tushu.frame;import java.awt.BorderLayout;
import java.awt.CheckboxGroup;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;import per.tushu.storage.PutinStorage;public class TableFrame extends JFrame{DefaultTableModel tableModel;Vector vector;JMenuBar menuBar;JButton add,del,exit,find,save;JTable table;JPanel panelUP,panelDown;   //增加信息的面板// 内部类中的变量JLabel[] label;
//  JLabel idLabel,titleLabel,authorLabel,typeLable,pressLable,storageTimeLabel,stateLabel,campuNameLabel;JComboBox typeBox,pressBox;JCheckBox campuNameCheck1,campuNameCheck2;JRadioButton stateRadio1,stateRadio2;JTextField idText,titleText,authorText;CheckboxGroup cg;ButtonGroup bg;JLabel year,mon,day;JComboBox yearText,monText,dayText;JPanel panel,panelSouth;JButton button;String[] str=null;JPanel[] panelLeft,panelRight;private String database = "bookstorage";
//  private String database = "haha";private String tablesName;public TableFrame(String title){
//      tablesName = tableName;this.setBounds(300, 200, 600, 450);this.setTitle(title);this.setLayout(new BorderLayout());add = new JButton("增加");del = new JButton("删除");save = new JButton("保存");find = new JButton("查找");exit = new JButton("退出");panelUP = new JPanel();panelUP.setLayout(new FlowLayout(FlowLayout.LEFT));panelUP.add(add);panelUP.add(del);panelUP.add(save);panelUP.add(find);panelUP.add(exit);Vector rowData = null;Vector columnNames = null;if(title.equals("图书入库管理")){rowData = PutinStorage.getRows("books");columnNames = PutinStorage.getHead("books");}else{rowData = PutinStorage.getRows("lendInfo");columnNames = PutinStorage.getHead("lendInfo");}/*      for(int i = 0; i < columnNames.size(); i++)System.out.println(columnNames.get(i));*/// 新建表格tableModel = new DefaultTableModel(rowData,columnNames);  table = new JTable(tableModel);//      for(int i = 0; i < columnNames.size(); i++){
//      int [] aa = {3,4,6};
//      for(int i = 0; i < aa.length; i++){
//          int t = aa[i];//           TableColumn tableColumn = table.getColumnModel().getColumn(3);
//          tableColumn.setCellRenderer(new MyRender());
//          tableColumn.setCellEditor(new MyEditor());
//      }table.setRowHeight(22);JScrollPane s = new JScrollPane(table);this.add(panelUP,BorderLayout.NORTH);this.add(s);MyEvent();this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}// 添加单元格的内部类class AddFrame extends JFrame{public AddFrame(){this.setBounds(300,200,500,350);
//          this.setLayout(new GridLayout(8,2));panel = new JPanel();panel.setLayout(new GridLayout(8,2));panelSouth = new JPanel();panelSouth.setLayout(new FlowLayout(FlowLayout.CENTER));button = new JButton("OK");panelSouth.add(button);label = new JLabel[8];label[0] = new JLabel("图书编号:");label[1] = new JLabel("图书名称:");label[2] = new JLabel("图书作者:");label[3] = new JLabel("图书类型:");label[4] = new JLabel("出版社:");label[5] = new JLabel("入库时间:");label[6] = new JLabel("借阅状态:");label[7] = new JLabel("所在校区:");idText = new JTextField(10);titleText = new JTextField(10);authorText = new JTextField(10);String[] types = {"计算机","英语","电气","机械","材料"};String[] press = {"人民邮电出版社","中国铁道出版社","清华大学出版社","工业出版社","电子工业出版社"};// 年集合(实现动态添加)ArrayList<String> yearArray = new ArrayList<String>();// 获取系统时间String time = new SimpleDateFormat("yyyy-mm-dd").format(new Date());String contentYear = time.split("-")[0];for(int i = 2000; i <= Integer.parseInt(contentYear); i++)yearArray.add(String.valueOf(i));String[] years = new String[yearArray.size()];for(int i = 0; i < yearArray.size(); i++)years[i] = yearArray.get(i);String[] month = {"1","2","3","4","5","6","7","8","9","10","11","12"};String[] days = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"};/*           ArrayList<ArrayList<String>> valueDay = new ArrayList<ArrayList<String>>();ArrayList<String> value;for(int i = 0; i < 12; i++){if(i == 1){value = new ArrayList<String>();for(int j = 0; j < 29; j++)value.add(String.valueOf(j + 1));}else if(i == 0 || i == 2 || i == 4 || i == 6 || i == 7 || i == 9 || i == 11){value = new ArrayList<String>();for(int j = 0; j < 31; j++)value.add(String.valueOf(j + 1));}else{value = new ArrayList<String>();for(int j = 0; j < 30; j++)value.add(String.valueOf(j + 1));}valueDay.add(value);}String[] days = null;for(int i = 0; i < month.length; i++){days = new String[valueDay.get(i).size()];for(int j = 0; j < valueDay.get(i).size(); j++){days[j] = valueDay.get(i).get(j);}}*/typeBox = new JComboBox(types);pressBox = new JComboBox(press);campuNameCheck1 = new JCheckBox("A");campuNameCheck2 = new JCheckBox("B");cg = new CheckboxGroup();stateRadio1 = new JRadioButton("借出");stateRadio2 = new JRadioButton("未借");bg = new ButtonGroup();bg.add(stateRadio1);bg.add(stateRadio2);year = new JLabel("年");mon = new JLabel("月");day = new JLabel("日");yearText = new JComboBox(years);monText = new JComboBox(month);dayText = new JComboBox(days);panelRight = new JPanel[8];panelLeft = new JPanel[8];for(int i = 0; i < panelRight.length; i++){panelRight[i] = new JPanel();panelRight[i].setLayout(new FlowLayout(FlowLayout.LEFT));}for(int i = 0; i < panelLeft.length; i++){panelLeft[i] = new JPanel();panelLeft[i].setLayout(new FlowLayout(FlowLayout.RIGHT));}for(int i = 0; i < panelLeft.length; i++)for(int j = i; j < label.length; j++)panelLeft[i].add(label[j]);panelRight[0].add(idText);panelRight[1].add(titleText);panelRight[2].add(authorText);panelRight[3].add(typeBox);panelRight[4].add(pressBox);panelRight[5].add(yearText);panelRight[5].add(year);panelRight[5].add(monText);panelRight[5].add(mon);panelRight[5].add(dayText);panelRight[5].add(day);panelRight[6].add(stateRadio1);panelRight[6].add(stateRadio2);panelRight[7].add(campuNameCheck1);panelRight[7].add(campuNameCheck2);panel.add(panelLeft[0]);panel.add(panelRight[0]);panel.add(panelLeft[1]);panel.add(panelRight[1]);panel.add(panelLeft[2]);panel.add(panelRight[2]);panel.add(panelLeft[3]);panel.add(panelRight[3]);panel.add(panelLeft[4]);panel.add(panelRight[4]);panel.add(panelLeft[5]);panel.add(panelRight[5]);panel.add(panelLeft[6]);panel.add(panelRight[6]);panel.add(panelLeft[7]);panel.add(panelRight[7]);this.add(panelSouth,BorderLayout.SOUTH);this.add(panel);MyEvent();//         this.setVisible(true);
//          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void MyEvent(){button.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString str1 = idText.getText();String str2 = titleText.getText();String str3 = authorText.getText();String str4 = typeBox.getSelectedItem().toString();String str5 = pressBox.getSelectedItem().toString();String str6 = yearText.getSelectedItem().toString();String str7 = monText.getSelectedItem().toString();String str8 = dayText.getSelectedItem().toString();String str9 = null;String first = null,second = null;String cam;if(stateRadio1.isSelected())str9 = stateRadio1.getText();else if(stateRadio2.isSelected())str9 = stateRadio2.getText();if(campuNameCheck1.isSelected())first = campuNameCheck1.getText();if(campuNameCheck2.isSelected())second = campuNameCheck2.getText();//                 String cam = first + ","+second;if(first == null && second != null)cam = second;else if(first != null && second == null)cam = first;elsecam = first + "," + second;String date = str6 + "-" + str7 + "-" + str8;String[] str = {str1,str2,str3,str4,str5,date,str9,cam};vector = new Vector();vector.add(str1);vector.add(str2);vector.add(str3);vector.add(str4);vector.add(str5);vector.add(date);vector.add(str9);vector.add(cam);//                    for(int i = 0; i < vector.size(); i++)
//                      System.out.println(vector.get(i).toString());int rowNum = table.getSelectedRow();if(rowNum == -1){String aa1 = str1.substring(0,1);String aa = str1.substring(1, str1.length());long bb = Long.parseLong(aa) + 1;String cc = aa1 + String.valueOf(bb);tableModel.addRow(vector);//加入表格后清除源数据idText.setText(cc);titleText.setText("");authorText.setText("");}
//                  Vector[][] mData = new Vector[table.getRowCount()][table.getColumnCount()];if(rowNum != -1){String aa = table.getValueAt(rowNum, 0).toString();String aa1 = aa.substring(0, 1);tableModel.insertRow(rowNum + 1, vector);for(int i = rowNum + 2; i < table.getRowCount(); i++){if(table.getValueAt(i, 0).toString().startsWith(aa1)){String ee = table.getValueAt(i, 0).toString();String ee1 = aa1 + String.valueOf(Long.parseLong(ee.substring(1, ee.length())) + 1);table.setValueAt(ee1, i, 0);}}}}});}}public void MyEvent(){// 增加add.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// 增加一行空白区域
//              tableModel.addRow(new Vector());new AddFrame().show();int rowNum = table.getSelectedRow();if(rowNum != -1){String aa = table.getValueAt(rowNum, 0).toString();String aa1 = aa.substring(0, 1);String aa2 = aa.substring(1, aa.length());long bb = Long.parseLong(aa2) + 1;String cc = aa1 + String.valueOf(bb);idText.setText(cc);}}});// 删除del.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stub// 按照从下到上逐行删除(需添加鼠标事件)int rowcount = table.getSelectedRow();
//              System.out.println(rowcount);if(rowcount >= 0){tableModel.removeRow(rowcount);String aa = table.getValueAt(rowcount, 0).toString().substring(0, 1);for(int i = rowcount; i < table.getRowCount(); i++){if(table.getValueAt(i, 0).toString().startsWith(aa)){String ee = table.getValueAt(i, 0).toString();String ee1 = aa + String.valueOf(Long.parseLong(ee.substring(1, ee.length())) - 1);table.setValueAt(ee1, i, 0);}}}
//              table.revalidate();}});// 保存save.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {  new PutinStorage().saveData(table);}});// 查找find.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stub}});// 退出exit.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.exit(0);}});}public static void main(String[] args){new TableFrame("图书入库管理");}
}

图书入库显示效果如下所示:

图书添加操作:

借阅信息管理显示如下:

2、图书查询模块

图书查询分为两个部分,一个是查询全部(查询框无内容时),另一个是按照关键字查询。

查询全部:查询框无查询内容时直接点击查询按钮,则会显示数据库中所有的图书数据。

按照关键字查询:查询框中有关键字时,则会显示与关键字相关的图书数据。

此模块用一个类来实现,需要连接数据库,由主页面的查询按钮控制代码如下:

package per.tushu.storage;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;public class FindBook {Vector tableName;// 拿到数据库中所有表的名字并储存到集合中private Vector getTableName(){tableName = new Vector();Connection conn;PreparedStatement preparedStatement;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//          if(!conn.isClosed())
//              System.out.println("成功打开数据库");String sql = "show tables";preparedStatement = conn.prepareStatement(sql);ResultSet result = preparedStatement.executeQuery();ResultSetMetaData metaData = result.getMetaData();while(result.next()){for(int i = 1; i <= metaData.getColumnCount(); i++){tableName.addElement(result.getString(i));}}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e.printStackTrace();}return tableName;}// 构造函数public FindBook(){}// 拿到要查询的信息并输出到主界面public void findInfo(JPanel panel,JTextField text){/*       for(int i = 0; i < names.size(); i++)System.out.println(names.get(i));*/ArrayList<ArrayList<String>> datas = new ArrayList<ArrayList<String>>(); // 数据库中所有的图书信息ArrayList<ArrayList<String>> outputDatas = new ArrayList<ArrayList<String>>();       // 记录需要输出的信息(中间量)ArrayList<ArrayList<String>> bookN = new ArrayList<ArrayList<String>>();    // 所有可借书籍的信息(在记录可借书的ID号时用到,属中间量)ArrayList<ArrayList<String>> outputBook = new ArrayList<ArrayList<String>>();     //记录所有可借书籍的ID号ArrayList<String> lendBooks = new ArrayList<String>();   //存储所有书籍的名称//       Vector headers = null;Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//              if(!conn.isClosed())
//                  System.out.println("成功打开数据库");String sql = "select * from books";preparedStatement = conn.prepareStatement(sql);ResultSet result = preparedStatement.executeQuery(); while(result.next()){ArrayList<String> al = new ArrayList<String>();ArrayList<String> al2 = new ArrayList<String>();al.add(result.getString("title"));al.add(result.getString("author"));al.add(result.getString("state"));
//                  if(result.getString("state").equals("未借")){al2.add(result.getString("id"));al2.add(result.getString("title"));al2.add(result.getString("state"));bookN.add(al2);}datas.add(al);//                 System.out.println(result);
//                      System.out.println(result.getString("title") + "\t" + result.getString("author") + "\t" +result.getString("press"));}
//              headers = new Vector();
//              ResultSetMetaData rsmd = result.getMetaData();
//              for(int k = 1; k <= rsmd.getColumnCount(); k++)
//                  headers.addElement(rsmd.getColumnName(k));//                    String[] head = new String[datas.get(0).size()];/*     System.out.println(datas.get(0).size());for(int i = 0; i < headers.size(); i++){System.out.println(headers.get(i).toString());
//              head[i] = headers.get(i).toString();}  */// 存储所有书籍的名称(不重复),以备后用for(int i = 0; i < datas.size(); i++)if(!lendBooks.contains(datas.get(i).get(0)))lendBooks.add(datas.get(i).get(0));/*       for(int i = 0; i < lendBooks.size(); i++)System.out.println(lendBooks.get(i));*/// 按要求输出内容String findName = text.getText();if(findName.equals("")){int row = datas.size();int columns = datas.get(0).size();Object[][] demo = new Object[row][columns + 1];for(int i = 0; i < row;i++){if(!outputDatas.contains(datas.get(i)) && datas.get(i).get(2).equals("未借"))outputDatas.add(datas.get(i));}Vector counter = new Vector();
//              System.out.println("size========"+outputDatas.size());for(int i = 0; i < outputDatas.size(); i++){int count = 0;for(int j = 0; j < datas.size(); j++){if(datas.get(j).equals(outputDatas.get(i)))count ++;}counter.add(count);}
//              System.out.println("counter========"+counter.size());//              // 输出同一本图书状态为“未借”的数量
//              for(int i = 0; i < counter.size(); i++)
//                  System.out.println(counter.get(i));//               //尝试输出没有重复项的图书库
//              for(int i = 0; i < outputDatas.size(); i++){
//                  for(int j = 0; j < outputDatas.get(0).size(); j++)
//                      System.out.print(outputDatas.get(i).get(j));
//                  System.out.println();
//              }
//              System.out.println(counter.size() + "===========" + outputDatas.size());for(int i = 0; i < outputDatas.size(); i++){ArrayList<String> mid = new ArrayList<String>();mid.add(outputDatas.get(i).get(0));for(int j = 0; j < bookN.size(); j++){if(bookN.get(j).get(1).equals(outputDatas.get(i).get(0))){mid.add(bookN.get(j).get(0));}}outputBook.add(mid);}/*for(int i = 0; i < outputBook.size(); i++){for(int j = 0; j < outputBook.get(i).size(); j++)System.out.print(outputBook.get(i).get(j) + "\t");System.out.println();}*/String[][] books = new String[outputBook.size()][2];for(int i = 0; i < outputBook.size(); i++){books[i][0] = outputBook.get(i).get(0);books[i][1] = "";for(int j = 1; j < outputBook.get(i).size(); j++){if(j < outputBook.get(i).size() - 1)books[i][1] = books[i][1] + outputBook.get(i).get(j) + "、" ;else if(j == outputBook.get(i).size() - 1)books[i][1] = books[i][1] + outputBook.get(i).get(j);}}/* for(int i = 0; i < books.length; i++){for(int j = 0; j < 2; j++)System.out.print(books[i][j] + "\t");System.out.println();}*/for(int i = 0; i < outputDatas.size(); i++)for(int j = 0; j < outputDatas.get(0).size(); j++){demo[i][0] = books[i][1];if(j == 2)demo[i][3] = counter.get(i) + "本可借";elsedemo[i][j + 1] = outputDatas.get(i).get(j);}//                System.out.println(outputDatas.size());String[] head = {"可借编号","书名","作者","借阅状态"};DefaultTableModel tableModel = new DefaultTableModel(demo,head);JTable table = new JTable(tableModel);JScrollPane scroll = new JScrollPane(table);panel.add(scroll);panel.revalidate();}else{//            System.out.println(datas.get(0).get(0));
//              for(int i = 0; i < datas.size(); i++){
//                  for(int j = 0; j < datas.get(i).size(); j++){
//                      if(datas.get(i).get(j).contains(findName)){
//                          outputDatas.add(datas.get(i));
//  //                      System.out.print(datas.get(i));
//                      }
//
//  //                  System.out.print(datas.get(i).get(j) + "\t");
//                  }
//  //              System.out.println();
//              }for(int i = 0; i < datas.size();i++){if(!outputDatas.contains(datas.get(i)) && datas.get(i).get(2).equals("未借") && datas.get(i).get(0).contains(findName))outputDatas.add(datas.get(i));}if(outputDatas.isEmpty())System.out.println("查找内容不存在");else{int row = outputDatas.size();int columns = outputDatas.get(0).size();Object[][] demo = new Object[row][columns + 1];/*  for(int i = 0; i < outputDatas.size(); i++){for(int j = 0; j < outputDatas.get(0).size(); j++){System.out.print(outputDatas.get(i).get(j) + "\t");}System.out.println();}*/Vector counter = new Vector();
//                  System.out.println("size========"+outputDatas.size());for(int i = 0; i < outputDatas.size(); i++){int count = 0;for(int j = 0; j < datas.size(); j++){if(datas.get(j).equals(outputDatas.get(i)))count ++;}counter.add(count);}//                 for(int i = 0; i < counter.size(); i++)
//                      System.out.println(counter.get(i));for(int i = 0; i < outputDatas.size(); i++){ArrayList<String> mid = new ArrayList<String>();mid.add(outputDatas.get(i).get(0));for(int j = 0; j < bookN.size(); j++){if(bookN.get(j).get(1).equals(outputDatas.get(i).get(0))){mid.add(bookN.get(j).get(0));}}outputBook.add(mid);}String[][] books = new String[outputBook.size()][2];for(int i = 0; i < outputBook.size(); i++){books[i][0] = outputBook.get(i).get(0);books[i][1] = "";for(int j = 1; j < outputBook.get(i).size(); j++){if(j < outputBook.get(i).size() - 1)books[i][1] = books[i][1] + outputBook.get(i).get(j) + "、" ;else if(j == outputBook.get(i).size() - 1)books[i][1] = books[i][1] + outputBook.get(i).get(j);}}/*            for(int i = 0; i < books.length; i++){for(int j = 0; j < 2; j++)System.out.print(books[i][j] + "\t");System.out.println();}*/for(int i = 0; i < outputDatas.size(); i++)for(int j = 0; j < outputDatas.get(0).size(); j++){demo[i][0] = books[i][1];if(j == 2)demo[i][3] = counter.get(i) + "本可借";elsedemo[i][j + 1] = outputDatas.get(i).get(j);}String[] head = {"可借编号","书名","作者","借阅状态"};DefaultTableModel tableModel = new DefaultTableModel(demo,head);JTable table = new JTable(tableModel);JScrollPane scroll = new JScrollPane(table);panel.add(scroll);panel.revalidate();}}
//          for(int i = 0; i < outputDatas.size(); i++)
//              System.out.println(outputDatas.get(i));}preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();}}// 拿到要查询的信息并输出到主界面public void numFindIndo(JPanel panel,JTextField text){ArrayList<String> array = new ArrayList<String>();Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//                  if(!conn.isClosed())
//                      System.out.println("成功打开数据库");String sql = "select * from books";preparedStatement = conn.prepareStatement(sql);ResultSet result = preparedStatement.executeQuery(); while(result.next()){if(result.getString("id").equals(text.getText())){array.add(result.getString("id"));array.add(result.getString("title"));array.add(result.getString("author"));}}Object[][] demo = new Object[1][array.size()];for(int i = 0; i < array.size(); i++)demo[0][i] = array.get(i);String[] head = {"编号","书名","作者"};DefaultTableModel tableModel = new DefaultTableModel(demo,head);JTable table = new JTable(tableModel);JScrollPane scroll = new JScrollPane(table);panel.add(scroll);panel.revalidate();preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();}}}

查询全部信息(查询文本框中无内容):

按关键字查询:

3、读者模块

读者模块包括四个操作,其一是用户注册与登录,其二是查询自身的借阅信息,其三是借阅图书,最后一个是归还图书。

用户注册与登录:用户若要借书,则需要先进行注册,然后登录。注册成功后则其注册信息会写入数据库以便以后登录使用。若登陆密码或账号错误,则会有相应提示信息。

查询自身的借阅信息:若用户已经注册并且登录成功,可以通过这一某块查看自己的借阅信息(一般是看是否借阅超期)。可以显示的内容有借阅的图书编号、图书名、借书时间、应还日期、距离应还日期的天数以及借阅状态(是否超期)。

借阅图书:在此模块可以根据想要借阅的图书编号借阅图书。

归还图书:在此模块可以根据想要归还的图书编号归还图书。

用户登录代码:

package per.tushu.frame;import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;public class UserLoginFrame extends JFrame{JLabel label,name,pass,identify;JButton login,register,modify;JTextField adminName;JPasswordField password;JPanel panel,jp1,jp2;JPanel[] panelLeft,panelRight;JComboBox personType;public UserLoginFrame(){this.setBounds(400, 200, 300, 200);this.setTitle("登录系统");this.setLayout(new BorderLayout());label = new JLabel("登录",SwingConstants.CENTER);label.setFont(new Font("楷体",Font.BOLD,30));name = new JLabel("账 号");pass = new JLabel("密 码");adminName = new JTextField(12);adminName.setHorizontalAlignment(SwingConstants.CENTER);password = new JPasswordField(12);password.setHorizontalAlignment(SwingConstants.CENTER);password.setEchoChar('*');     //设置回显字符panel = new JPanel();jp1 = new JPanel();jp2 = new JPanel();panel.setLayout(new BorderLayout());jp1.add(adminName);jp1.add(name);jp1.add(password);jp1.add(pass);panel.add(jp1);register = new JButton("注册");login = new JButton("登录");modify = new JButton("修改密码");jp2.add(register);jp2.add(login);jp2.add(modify);panel.add(jp2,BorderLayout.SOUTH);this.add(label,BorderLayout.NORTH);this.add(panel);MyEvent();this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void MyEvent(){// 注册事件处理register.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubnew RegisterFrame().show();}});// 登录事件处理login.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubConnection conn;PreparedStatement preparedStatement;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//                  if(!conn.isClosed())
//                      System.out.println("成功打开数据库");String sql = "select word from password where id='" + adminName.getText() + "'";preparedStatement = conn.prepareStatement(sql);ResultSet result = preparedStatement.executeQuery(); //                  if(result.next())
//                      System.out.println(result.getString("word"));String str1 = password.getText();if(result.next()){String str2 = result.getString("word");if(str1.equals(str2))new UserInfoFrame(adminName).show();else{String info = "你输入的密码不正确,原因可能是:\n" +  "1、忘记密码;\n" + "2、未开启小键盘;\n" + "3、大小写未区分。";JOptionPane.showMessageDialog(null, info,"系统信息",JOptionPane.INFORMATION_MESSAGE);
//                          new LoginErrorFrame().show();}}elseJOptionPane.showMessageDialog(null, "用户不存在,请先注册!!!","系统信息",JOptionPane.WARNING_MESSAGE);
//                      new NoExist().show();preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();}UserLoginFrame.this.dispose();}});// 修改密码modify.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stub}});}
//  public static void main(String[] args){new UserLoginFrame();}
}

代码执行后显示如下:

用户注册代码:

package per.tushu.frame;import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;import per.tushu.storage.PutinStorage;public class RegisterFrame extends JFrame{JPanel panel;JTextField text;JPasswordField password1,password2;JLabel title,user,pass1,pass2;JButton button;public RegisterFrame(){this.setBounds(400,200,300,200);this.setTitle("注册");this.setLayout(new BorderLayout());title = new JLabel("注册",SwingConstants.CENTER);title.setFont(new Font("楷体",Font.BOLD,30));panel = new JPanel();text = new JTextField(15);text.setHorizontalAlignment(SwingConstants.CENTER);password1 = new JPasswordField(15);password1.setEchoChar('*');password1.setHorizontalAlignment(SwingConstants.CENTER);password2 = new JPasswordField(15);password2.setEchoChar('*');password2.setHorizontalAlignment(SwingConstants.CENTER);user = new JLabel("用         户");pass1 = new JLabel("密         码");pass2 = new JLabel("确认密码");button = new JButton("注册成功");panel.add(text);panel.add(user);panel.add(password1);panel.add(pass1);panel.add(password2);panel.add(pass2);this.add(title,BorderLayout.NORTH);this.add(panel);this.add(button,BorderLayout.SOUTH);MyEvent();//      this.setVisible(true);
//      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void MyEvent(){button.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {String userPassword1 = password1.getText();
//              System.out.println(userPassword1);String userPassword2 = password2.getText();if(userPassword1.equals(userPassword2)){// TODO Auto-generated method stubnew PutinStorage().userInfo(userPassword1,userPassword2,text);new UserLoginFrame().show();}elseJOptionPane.showMessageDialog(null, "两次密码不一致,请重新输入密码!!!","系统信息",JOptionPane.WARNING_MESSAGE);
//                  new RegistError().show();}});}//    public static void main(String[] args){
//      new RegisterFrame();
//  }
}

注册窗体:

若用户不存在:

其他功能均在UserInfoFrame类中实现,代码如下:

package per.tushu.frame;import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;public class UserInfoFrame extends JFrame{JButton info,lend,returnBook;JLabel label;JPanel panel,panelButton,panelInfo,panelInfo1,panelInfo2,panelInfo3;CardLayout card;// 借书按钮面板信息所用变量JButton ensure,find;JTextField bookNum;JPanel jp1,jp2,jp3;JTextField textField;DefaultTableModel tableModel;JTable table ;public UserInfoFrame(JTextField text){textField = text;card = new CardLayout();this.setBounds(300,200,600,450);this.setTitle("借阅信息");label = new JLabel(text.getText() + "的借阅信息",SwingConstants.CENTER);label.setFont(new Font("楷体",Font.BOLD,30));panel = new JPanel();panel.setLayout(new BorderLayout());panelInfo = new JPanel();panelButton = new JPanel();panelInfo1 = new JPanel();panelInfo1.setLayout(new BorderLayout());panelInfo2 = new JPanel();panelInfo2.setLayout(new BorderLayout());panelInfo3 = new JPanel();panelInfo3.setLayout(new BorderLayout());panelInfo.setLayout(card);panelButton.setLayout(new FlowLayout(FlowLayout.CENTER));info = new JButton("借阅信息");lend = new JButton("借书");returnBook = new JButton("还书");panelButton.add(info);panelButton.add(lend);panelButton.add(returnBook);//      panelInfo1.setBackground(Color.red);
//      panelInfo2.setBackground(Color.blue);panelInfo.add(panelInfo1,"panelInfo1");panelInfo.add(panelInfo2,"panelInfo2");panelInfo.add(panelInfo3,"panelInfo3");panel.add(panelButton,BorderLayout.NORTH);panel.add(panelInfo);this.add(label,BorderLayout.NORTH);this.add(panel);MyEvent();this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}// 信息显示class  NumFindInfo{public NumFindInfo(JPanel panel,JTextField text,String tableName){ArrayList<String> array = new ArrayList<String>();Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//                  if(!conn.isClosed())
//                      System.out.println("成功打开数据库");String sql = null;if(tableName.equals("books"))sql = "select * from " + tableName;else sql = "select * from " + tableName;preparedStatement = conn.prepareStatement(sql);ResultSet result = preparedStatement.executeQuery(); while(result.next()){if(result.getString("id").equals(text.getText()) && tableName.equals("books")){array.add(result.getString("id"));array.add(result.getString("title"));array.add(result.getString("author"));}
//                  else if(result.getString("id").equals(text.getText()) && tableName.equals("lendInfo")){
//                      array.add(result.getString("id"));
//                      array.add(result.getString("title"));
//                      array.add(result.getString("time"));
//                  }}Object[][] demo = new Object[1][array.size()];for(int i = 0; i < array.size(); i++)demo[0][i] = array.get(i);//               for(int i = 0; i < array.size(); i++)
//                  System.out.println(array.get(i));//             if(tableName.equals("books"))String[] head1 = {"编号","书名","作者"};String[] head2 = {"编号","书名","借阅事件"};if(tableName.equals("books"))tableModel = new DefaultTableModel(demo,head1);elsetableModel = new DefaultTableModel(demo,head2);table = new JTable(tableModel);JScrollPane scroll = new JScrollPane(table);panel.add(scroll);panel.revalidate();preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();}}}public void MyEvent(){// 借书lend.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stub// 借书按钮所示卡片信息ensure = new JButton("确认借阅");find = new JButton("查找");bookNum = new JTextField(10);jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jp1.add(bookNum);jp1.add(find);jp2.add(ensure);panelInfo1.add(jp1,BorderLayout.NORTH);panelInfo1.add(jp2,BorderLayout.SOUTH);// 查找事件处理find.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubnew NumFindInfo(panelInfo1,bookNum,"books");}});// 确定借阅事件处理ensure.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stub// 获取系统时间(按照格式“年-月-日”)//                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//                      System.out.println(time);Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//                              if(!conn.isClosed())
//                                  System.out.println("成功打开数据库");String sql = "insert into lendInfo values ('" + textField.getText() + "','" + table.getValueAt(0, 0) + "','" + table.getValueAt(0, 1) + "','" + time + "')";preparedStatement = conn.prepareStatement(sql);preparedStatement.executeUpdate();String sql1 = "update books set state='借出' where id='" + bookNum.getText() + "'";preparedStatement = conn.prepareStatement(sql1);preparedStatement.executeUpdate();preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();}}});panelInfo1.validate();card.show(panelInfo, "panelInfo1");}});// 借阅信息info.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubArrayList<ArrayList<String>> array = new ArrayList<ArrayList<String>>();Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//                      if(!conn.isClosed())
//                          System.out.println("成功打开数据库");String sql = "select * from lendInfo where lendName='" + textField.getText() + "'";preparedStatement = conn.prepareStatement(sql);ResultSet result = preparedStatement.executeQuery(); //                   if(!result.next())
//                      JOptionPane.showMessageDialog(null, "结果集中无记录");
//                  else{while(result.next()){ArrayList<String> al = new ArrayList<String>();al.add(result.getString("id"));al.add(result.getString("title"));al.add(result.getString("time"));array.add(al);}int row = array.size();int column = array.get(0).size();Object[][] demo = new Object[row][column + 3];String[] times = new String[row];String[] days = new String[row];String[] overDays = new String[row];// 计算应还日期(以30天为期限)SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");for(int i = 0; i < row; i++){String firstTime = array.get(i).get(2);Date date = df.parse(firstTime);Calendar rightNow = Calendar.getInstance();rightNow.setTime(date);rightNow.add(Calendar.DAY_OF_YEAR,30);times[i] = df.format(rightNow.getTime());}// 计算还需多少天到还书日期(以天为计算单位)SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");for(int i = 0; i < row; i++){String firstTime = times[i];Date date = df1.parse(firstTime);long day = (date.getTime() - new Date().getTime())/(24*60*60*1000);days[i] = String.valueOf(day);if(day < 0)overDays[i] = "超期" + (0 - day) + "天";else if(day >= 0)overDays[i] = "未超期";}for(int i = 0; i < row; i++)for(int j = 0; j <= column + 2; j++){if(j < column)demo[i][j] = array.get(i).get(j);else if(j == column)demo[i][j] = times[i];else if(j == column + 1)demo[i][j] = days[i];elsedemo[i][j] = overDays[i];}String[] head = {"编号","书名","借书时间","应还日期","剩余天数","状态"};DefaultTableModel tableModelInfo = new DefaultTableModel(demo,head);JTable tableInfo = new JTable(tableModelInfo);JScrollPane s = new JScrollPane(tableInfo);panelInfo2.add(s);panelInfo2.revalidate();
//                  }preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}card.show(panelInfo, "panelInfo2");}});// 还书returnBook.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stub// 借书按钮所示卡片信息ensure = new JButton("确认还书");
//              find = new JButton("查找");bookNum = new JTextField(10);jp1 = new JPanel();jp1.add(bookNum);jp1.add(ensure);panelInfo3.add(jp1,BorderLayout.NORTH);// 确定还书事件处理ensure.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stub// 获取系统时间(按照格式“年-月-日”)//                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//                      System.out.println(time);Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//                              if(!conn.isClosed())
//                                  System.out.println("成功打开数据库");String sql = "delete from lendInfo where id='" + bookNum.getText() + "'";preparedStatement = conn.prepareStatement(sql);preparedStatement.executeUpdate();preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();}}});panelInfo3.revalidate();card.show(panelInfo, "panelInfo3");}});}
//  public static void main(String[] args){
//      JTextField text = new JTextField("张三");
//      new UserInfoFrame(text);
//  }
}

查阅自身借阅信息:

借书(按图书编号借书):

还书(按图书编号还书):

4、以上各功能所用到的数据库处理,除了上述提到的FindBook类后,还有一个是PutinStorage,代码如下:

package per.tushu.storage;import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;public class PutinStorage {// 将用户名和密码存放在password表中public void userInfo(String userPassword1,String userPassword2,JTextField text){Connection conn;PreparedStatement preparedStatement;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456");
//          if(!conn.isClosed())
//              System.out.println("成功打开数据库");String userName = text.getText();
//          System.out.println(userName);// 按账号查找
//          String sql2 = "select * from password where id='" + userName + "'";
//          preparedStatement = conn.prepareStatement(sql2);
//          ResultSet result = preparedStatement.executeQuery();//         if(!result.wasNull()){new DataRepeat().show();
//              System.out.println(result.getString("id") + "\t" + result.getString("password"));
//          }String sql = "insert into password values('" + userName + "','" + userPassword1 + "')";preparedStatement = conn.prepareStatement(sql);preparedStatement.executeUpdate();preparedStatement.close();conn.close();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库");e1.printStackTrace();}}// 将可视化界面中表的数据储存到数据库public void saveData(JTable table){int column = table.getColumnCount();int row = table.getRowCount();//      System.out.println("rows:" + row + "            coumns:" +column);String[][] value = new String[row][column];/*String[] name = new String[column];String[][] value = new String[row][column];for(int i = 0; i < column; i++){name[i] = table.getColumnName(i);}*//*for(int i = 0; i < column; i++){System.out.println(name[i]);}*///     System.out.println(table.getColumnCount());for(int i = 0; i < row; i++){for(int j = 0; j < column; j++){
//              System.out.println(table.getValueAt(i, j).toString());value[i][j] = table.getValueAt(i, j).toString();
//              System.out.println(value[i][j]);}}//        for(int i = 0; i < row; i++){
//          for(int j = 0; j < column; j++)
//              System.out.println(value[i][j]);
//      }// TODO Auto-generated method stubString sql_url = "jdbc:mysql://localhost:3306/bookstorage";   //数据库路径(一般都是这样写),test是数据库名称String name = "root";        //用户名String password = "123456"; //密码Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");      //连接驱动conn = DriverManager.getConnection(sql_url, name, password); //连接数据库
//          if(!conn.isClosed())
//              System.out.println("成功连接数据库");preparedStatement = conn.prepareStatement("delete from books where true");preparedStatement.executeUpdate();for(int i = 0; i < row; i++){
//              System.out.println("==========================");String sql = "insert into books values('" + value[i][0] + "','" + value[i][1] + "','"+ value[i][2] + "','"+ value[i][3] + "','"+ value[i][4] + "','"+ value[i][5] + "','"+ value[i][6] + "','"+ value[i][7] + "')";
//              System.out.println(sql);preparedStatement = conn.prepareStatement(sql);preparedStatement.executeUpdate();}} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动。");e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库。");e1.printStackTrace();}}// 得到数据库表数据public static Vector getRows(String tableName){String sql_url = "jdbc:mysql://localhost:3306/bookstorage";  //数据库路径(一般都是这样写),test是数据库名称String name = "root";        //用户名String password = "123456"; //密码Connection conn;PreparedStatement preparedStatement = null;Vector rows = null;Vector columnHeads = null;try {Class.forName("com.mysql.jdbc.Driver");       //连接驱动conn = DriverManager.getConnection(sql_url, name, password); //连接数据库
//          if(!conn.isClosed())
//              System.out.println("成功连接数据库");preparedStatement = conn.prepareStatement("select * from " + tableName);ResultSet result1 = preparedStatement.executeQuery();//            boolean moreRecords = result1.next();
//          if(result1.wasNull())
//              JOptionPane.showMessageDialog(null, "结果集中无记录");rows = new Vector();//            while(result1.next())
//              System.out.println(result1.getInt("id")+"\t"+result1.getString("name"));ResultSetMetaData rsmd = result1.getMetaData();while(result1.next()){rows.addElement(getNextRow(result1,rsmd));}preparedStatement.close();conn.close();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动。");e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库。");e.printStackTrace();}return rows;}// 得到数据库表头public static Vector getHead(String tableName){String sql_url = "jdbc:mysql://localhost:3306/bookstorage";  //数据库路径(一般都是这样写),test是数据库名称String name = "root";        //用户名String password = "123456"; //密码Connection conn;PreparedStatement preparedStatement = null;Vector columnHeads = null;try {Class.forName("com.mysql.jdbc.Driver");       //连接驱动conn = DriverManager.getConnection(sql_url, name, password); //连接数据库
//          if(!conn.isClosed())
//              System.out.println("成功连接数据库");preparedStatement = conn.prepareStatement("select * from " + tableName);
//          preparedStatement = conn.prepareStatement("select * from 计算机");ResultSet result1 = preparedStatement.executeQuery();boolean moreRecords = result1.next();if(!moreRecords)JOptionPane.showMessageDialog(null, "结果集中无记录");columnHeads = new Vector();ResultSetMetaData rsmd = result1.getMetaData();for(int i = 1; i <= rsmd.getColumnCount(); i++)columnHeads.addElement(rsmd.getColumnName(i));preparedStatement.close();conn.close();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动。");e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库。");e.printStackTrace();}return columnHeads;}// 得到数据库中下一行数据private static Vector getNextRow(ResultSet rs,ResultSetMetaData rsmd) throws SQLException{Vector currentRow = new Vector();for(int i = 1; i <= rsmd.getColumnCount(); i++){currentRow.addElement(rs.getString(i));}return currentRow;}/*//使用PreparedStatement对mysql数据库进行创建表,增加数据,查询数据和删除数据过程public static void process1(){System.out.println("process1");String sql_url = "jdbc:mysql://localhost:3306/test";  //数据库路径(一般都是这样写),test是数据库名称String name = "root";        //用户名String password = "123456"; //密码Connection conn;PreparedStatement preparedStatement = null;try {Class.forName("com.mysql.jdbc.Driver");      //连接驱动conn = DriverManager.getConnection(sql_url, name, password); //连接数据库if(!conn.isClosed())System.out.println("成功连接数据库");//新建表String sql = "create table aa(id int,name text)";preparedStatement = conn.prepareStatement(sql);        preparedStatement.executeUpdate();//在表中添加内容
//          preparedStatement.executeUpdate("insert into aa values(4,'amy')");preparedStatement = conn.prepareStatement("insert into aa values(1,'张三')");preparedStatement.executeUpdate();preparedStatement = conn.prepareStatement("insert into aa values(2,'李四')");preparedStatement.executeUpdate();preparedStatement = conn.prepareStatement("insert into aa values(3,'王五')");preparedStatement.executeUpdate();//查询表内容System.out.println("第一次查询表内容(删除前)");preparedStatement = conn.prepareStatement("select * from aa");ResultSet result1 = preparedStatement.executeQuery();while(result1.next())System.out.println(result1.getInt("id")+"\t"+result1.getString("name"));//删除表中数据preparedStatement = conn.prepareStatement("delete from aa where id = 2");preparedStatement.executeUpdate();//查询表中内容System.out.println("第二次查询表内容(删除后)");preparedStatement = conn.prepareStatement("select * from aa");ResultSet result2 = preparedStatement.executeQuery();while(result2.next())System.out.println(result2.getInt("id")+"\t"+result2.getString("name"));} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动。");e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库。");e.printStackTrace();}}//使用Statement对mysql数据库进行创建表,增加数据,查询数据和删除数据过程public static void process2(){System.out.println("process2");String sql_url = "jdbc:mysql://localhost:3306/test";   //数据库路径(一般都是这样写),test是数据库名称String name = "root";        //用户名String password = "123456"; //密码Connection conn;Statement statement = null;try {Class.forName("com.mysql.jdbc.Driver");      //连接驱动conn = DriverManager.getConnection(sql_url, name, password); //连接数据库if(!conn.isClosed())System.out.println("成功连接数据库");statement = conn.createStatement();//新建表String sql = "create table bb(id int,name text)";statement.executeUpdate(sql);//在表中添加内容statement.executeUpdate("insert into bb values(1,'张三')");statement.executeUpdate("insert into bb values(2,'李四')");statement.executeUpdate("insert into bb values(3,'王五')");//查询表内容System.out.println("第一次查询表内容(删除前)");ResultSet result1 = statement.executeQuery("select * from bb");while(result1.next())System.out.println(result1.getInt("id")+"\t"+result1.getString("name"));//删除表中数据statement.executeUpdate("delete from bb where id = 2");//查询表内容System.out.println("第二次查询表内容(删除后)");ResultSet result2 = statement.executeQuery("select * from bb");while(result2.next())System.out.println(result2.getInt("id")+"\t"+result2.getString("name"));} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("未成功加载驱动。");e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("未成功打开数据库。");e.printStackTrace();}}public static void main(String[] args){process1();
//      process2();}*//*//主函数public static void main(String[] args){
//      table("computer");
//      Find();getRows();}*/
}

这个系统没有用到windbuilder等可视化工具,也没有进行页面美化的操作,因此执行结果相对来说不太好看,仅是实现了基本功能,而且其中的极个别按键没有赋予功能,还需改善。完整工程我会上传到博客中的资源区,需要的可以下载。

用java的swing组件实现简易的图书管理系统相关推荐

  1. Java游戏开发组件LGame简易测试版发布(版本号 0 1 5)

    LGame-Simple-0.1.5组件下载地址:http://code.google.com/p/loon-simple/downloads/list 2009-09-13 更新内容: Java游戏 ...

  2. web图书销售管理系统_Java Web实现简易的图书管理系统

    Java Web实现简易的图书管理系统 这是一个使用Java Web相关的知识做出来的网页图书管理系统,使用的数据库为mysql. 程序中实现了登录功能和对图书表.图书类别表的增删查改功能. 因为我对 ...

  3. jsp简易的图书管理系统

    jsp简易的图书管理系统 用web链接数据库做一个简易的图书管理系统 1.以下是效果演示图 2.下面是jsp页面代码 下面是DBUtil类用于链接数据库 下面是接口与实现类 3.下面是查询的servl ...

  4. java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部 ...

  5. java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调 ...

  6. JAVA之Swing组件(常用)

    write:2022-3-28 文章目录 边框(Border) 文本框(JTextFied) 文本区域(JTextArea)与滚动面板(JScrollPane) 下拉列表(JComboBox) 菜单( ...

  7. JAVA中Swing组件的标签,组合框和列表

    依旧接着上一篇文章来介绍Swing组件: 一.JLabel: 标签就是一个静态文本,使用方法也是很简单: 我们看一下例子: public class Action extends JFrame{JLa ...

  8. java swing实训项目(图书管理系统)

    1.项目布局(供新手参考) 学校老师任务,因为我也是新手所以写的不是特别的好,所以可以提供参考. package GUI_Object.GUI;import GUI_Object.mysql.Data ...

  9. JAVA实现简易的图书管理系统(含过程)

    目录 设计背景 成果展示 设计思路 详细代码 book包 Book类 BookList类 operation包 IOperation接口 AddOperation类 BorrowOperation类 ...

最新文章

  1. 字符串的动态顺序结构(C/C++语言)
  2. 【新冠疫情】5G到底能为抗疫做点啥,这篇文章终于讲清楚了
  3. raml2html 安装,Raml实践
  4. 14013.petalinux操作GPIO
  5. 程序员如何成为一名自由职业者?
  6. 国际项目投标那些事(四)怎么读海外项目招标文件
  7. 冯诺依曼计算机的弱点,冯。诺依曼型计算机的缺点及改进方法.doc
  8. 美国恐怖故事第一季/全集American Horror Story 1全迅雷下载
  9. 学生党白嫖服务器-不会吧不会吧,你还在买学生机吗?
  10. Webpack 理解 Chunk
  11. c语言break后要分号吗,C语言程序每行结尾处都必须加分号(;)作为结束符号。
  12. 什么是双亲委派模型?双亲委派模型有何作用?
  13. 基于深度学习的花卉检测与识别系统(YOLOv5清新界面版,Python代码)
  14. 自定义光照烘焙和采样
  15. Splashtop 教育行业用户增加700%
  16. 基于(springmvc+tomcat+JavaScript)实现化妆品商城系统
  17. EXCEL删除重复数据的多种方法
  18. IOS类似图片验证码的实现
  19. php多站点cms,如何实现PHPCMS V9 多站点[站群功能]子站独立域名且动态URL
  20. 双十一第十年:新零售未来已来,消费分级成最大看点

热门文章

  1. [论文阅读] Curriculum Semi-supervised Segmentation
  2. CA(Certificate Authority)及其伪造的可能性分析
  3. 【C语言】按位运算符
  4. Springcloud微服务概述
  5. IBinder中linkToDeath的介绍
  6. js根据开始日期和相隔天数计算出结束日期
  7. 百度AI人脸识别怎么实现,图片识别,文字识别,活体检测
  8. 【老鸟进阶】deepfacelab训练参数详解
  9. windows下,对opencv进行gcc/g++编译
  10. Anaconda - 安装以及使用