本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询、插入、删除、修改。
内容:在数据库中创建一张书目信息表,包括书名、作者、出版社、出版日期、书号、价格字段。设计一个GUI界面进行书目管理。在该界面上有四个选项卡,分别是查询、插入、删除、修改。点击查询选项卡,出现的界面上有书名、作者、出版社、书号四个文本框,一个按钮和一个只读文本区。文本框内容可以为空,输入相应的查询信息后(例如根据书名查询可以仅输入书名),点击界面上的“查询”按钮,可以在界面下方的文本区中显示出符合条件的书目详细信息。点击插入选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。在文本框中输入信息后,点击“插入”按钮,该书目信息插入数据库表中。点击删除选项卡,出现的界面上有书名文本框和一个按钮,输入书名后点击“删除”按钮,该书目信息从数据库表中删除。点击修改选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。输入的书名必须是已存在的,否则会弹出消息框显示出错信息。输入信息后,点击“修改”按钮,数据库表中的相应书目信息被修改为新值。
源码:
BookInfo.java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
* 项目名称:图书管理系统 * 版本: 1.0 * 创建者: 张俊强 * 创建时间: 2016 / 5 / 26 * */ package librarySystem; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.sql.*; @SuppressWarnings ( "serial" ) public class BookInfo extends JFrame implements ActionListener{ //主角面上的控件 private JLabel inputLabel; private JTextField inputText; private JButton searchBut; private JTable bookTable; private JScrollPane bookScroll; private JButton addBut; private JButton modifyBut; private JButton deleteBut; private JButton refreshBut; private BookTableModel bookTableModel; public static void main(String[] args) throws SQLException { // TODO Auto-generated method stub BookInfo bookInfo= new BookInfo(); bookInfo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); bookInfo.setBounds( 350 , 150 , 600 , 400 ); bookInfo.setVisible( true ); // bookInfo.importSQL();//导出数据 bookInfo.setMinWindowLayout(); //设置数据 } public BookInfo() throws SQLException{ //创建主界面上的控件 inputLabel= new JLabel( "请输入书名:" ); inputText= new JTextField( 10 ); searchBut= new JButton( "查询" ); bookTableModel= new BookTableModel(); bookTable= new JTable(bookTableModel); bookScroll= new JScrollPane(bookTable); addBut= new JButton( "添加" ); modifyBut= new JButton( "修改" ); deleteBut= new JButton( "删除" ); refreshBut= new JButton( "刷新" ); searchBut.addActionListener( this ); addBut.addActionListener( this ); refreshBut.addActionListener( this ); modifyBut.addActionListener( this ); deleteBut.addActionListener( this ); } void setMinWindowLayout(){ //主界面布局 Container con1= new Container(); con1.setLayout( new FlowLayout()); con1.add(inputLabel); con1.add(inputText); con1.add(searchBut); con1.add(refreshBut); Container con2= new Container(); con2.setLayout( new FlowLayout()); con2.add(addBut); con2.add(modifyBut); con2.add(deleteBut); this .setLayout( new BorderLayout()); this .add(con1,BorderLayout.NORTH); this .add(bookScroll,BorderLayout.CENTER); this .add(con2,BorderLayout.SOUTH); this .validate(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (e.getSource()==searchBut){ if (! this .inputText.getText().equals( "" )){ String bookName= this .inputText.getText(); String sql= "SELECT * FROM book_info WHERE book_name ='" +bookName+ "'" ; try { bookTableModel= new BookTableModel(sql); bookTable.setModel(bookTableModel); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } else { JOptionPane.showMessageDialog( this , "输入不能为空" , "提示" ,JOptionPane.PLAIN_MESSAGE); } } else if (e.getSource()==addBut){ @SuppressWarnings ( "unused" ) AddBookDialog addWin= new AddBookDialog( this , "添加图书" , true ); this .refreshTable(); } else if (e.getSource()==refreshBut){ this .refreshTable(); } else if (e.getSource()==deleteBut){ int rowNum=bookTable.getSelectedRow(); if (rowNum< 0 ||rowNum>bookTable.getRowCount()){ JOptionPane.showMessageDialog( this , "未选中" , "提示" ,JOptionPane.PLAIN_MESSAGE); } else { //System.out.print(bookName); int n = JOptionPane.showConfirmDialog( null , "确认删除吗?" , "确认删除框" , JOptionPane.YES_NO_OPTION); if (n == JOptionPane.YES_OPTION) { String bookNum=(String) bookTable.getValueAt(rowNum, 0 ); String sql= "DELETE FROM book_info WHERE book_num= '" +bookNum+ "'" ; bookTableModel.deleteBook(sql); this .refreshTable(); JOptionPane.showMessageDialog( this , "删除成功" , "提示" ,JOptionPane.PLAIN_MESSAGE); } else if (n == JOptionPane.NO_OPTION) { return ; } } } else if (e.getSource()==modifyBut){ bookTable.setModel(bookTableModel); int rowNum=bookTable.getSelectedRow(); if (rowNum< 0 ||rowNum>bookTable.getRowCount()){ JOptionPane.showMessageDialog( this , "未选中" , "提示" ,JOptionPane.PLAIN_MESSAGE); } else { @SuppressWarnings ( "unused" ) ModifyBook modifyWin= new ModifyBook( this , "修改信息" , true ,bookTableModel,rowNum); this .refreshTable(); } } } public void refreshTable(){ BookTableModel searchBook; try { searchBook = new BookTableModel( "SELECT * FROM book_info" ); bookTable.setModel(searchBook); bookTableModel=searchBook; } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } |
BookTableModel.java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
package librarySystem; import java.sql.*; import java.util.*; /* * 图书表模型 * */ import javax.swing.table.*; @SuppressWarnings("serial") public class BookTableModel extends AbstractTableModel{ //表的元素 private Vector<Vector<String>> rowData; private Vector<String> colName; // 数据库 private PreparedStatement stmt; private ResultSet result; public BookTableModel(String sql) throws SQLException{ this.initData(sql); } public BookTableModel() throws SQLException{ this.initData("SELECT * FROM book_info"); } public void initData(String sql) throws SQLException{ setRowData(new Vector<Vector<String>>()); setColName(new Vector<String>()); getColName().add("书号"); getColName().add("书名"); getColName().add("作者"); getColName().add("出版社"); getColName().add("出版时间"); getColName().add("价格"); /* * 数据库的导入 * */ try { Class.forName( "com.mysql.jdbc.Driver" ); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } String url= "jdbc:mysql://localhost:3306/device" ; String user= "root" ; String password= "zjq1314520" ; Connection con=DriverManager.getConnection(url,user,password); stmt = con.prepareStatement(sql); result=stmt.executeQuery(); importSQL(); } void importSQL() throws SQLException{ // TODO Auto-generated method stub @SuppressWarnings ( "unused" ) boolean signNull= true ; while (result.next()){ Vector<String> item= new Vector<String>(); for ( int i= 1 ;i< 7 ;i++){ item.add(result.getString(i)); } getRowData().add(item); signNull= false ; } result.close(); } @Override public int getColumnCount() { //得到列数 // TODO Auto-generated method stub return this .colName.size(); } @Override public int getRowCount() { //得到行数 // TODO Auto-generated method stub return this .rowData.size(); } @Override public Object getValueAt( int row, int col) { //得到某行某列的数据 // TODO Auto-generated method stub return ( this .rowData.get(row)).get(col); } @Override public String getColumnName( int column) { // TODO Auto-generated method stub return this .colName.get(column); } public Vector<Vector<String>> getRowData() { return rowData; } public void setRowData(Vector<Vector<String>> rowData) { this .rowData = rowData; } public Vector<String> getColName() { return colName; } public void setColName(Vector<String> colName) { this .colName = colName; } public void addBook(String sql){ try { stmt.executeUpdate(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } // initData("SELECT * FROM book_info"); } public void deleteBook(String sql){ try { stmt.executeUpdate(sql); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } |
AddBookDialog.java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
package librarySystem; import java.awt.*; import java.awt.event.*; import java.sql.SQLException; import javax.swing.*; @SuppressWarnings ( "serial" ) public class AddBookDialog extends JDialog implements ActionListener{ private JLabel bookNumLabel; private JLabel bookNameLabel; private JLabel bookWriterLabel; private JLabel bookPublishLabel; private JLabel bookPriceLabel; private JLabel bookTimeLabel; private JTextField bookNumText; private JTextField bookNameText; private JTextField bookWriterText; private JTextField bookPublishText; private JTextField bookPriceText; private JTextField bookTimeText; private JButton submitBut; private JButton cancelBut; public AddBookDialog(Frame owner,String title, boolean model){ //父窗口,窗口名,是否是模式窗口 super (owner,title,model); bookNumLabel= new JLabel( "书 号:" ); bookNameLabel= new JLabel( "书 名:" ); bookWriterLabel= new JLabel( "作 者:" ); bookPublishLabel= new JLabel( "出版社:" ); bookPriceLabel= new JLabel( "价 格:" ); bookTimeLabel= new JLabel( "出版时间:" ); bookNumText= new JTextField( 10 ); bookNameText= new JTextField( 10 ); bookWriterText= new JTextField( 10 ); bookPublishText= new JTextField( 10 ); bookPriceText= new JTextField( 10 ); bookTimeText= new JTextField( 9 ); submitBut= new JButton( "确认" ); cancelBut= new JButton( "取消" ); submitBut.addActionListener( this ); cancelBut.addActionListener( this ); this .setBounds( 350 , 150 , 400 , 260 ); this .setResizable( false ); this .setLayout( new BorderLayout()); initLayout(); } public void initLayout(){ Container[] con1= new Container[ 6 ]; for ( int i= 0 ;i< 6 ;i++) con1[i]= new Container(); con1[ 0 ].setLayout( new FlowLayout()); con1[ 0 ].add(bookNumLabel); con1[ 0 ].add(bookNumText); con1[ 1 ].setLayout( new FlowLayout()); con1[ 1 ].add(bookNameLabel); con1[ 1 ].add(bookNameText); con1[ 2 ].setLayout( new FlowLayout()); con1[ 2 ].add(bookWriterLabel); con1[ 2 ].add(bookWriterText); con1[ 3 ].setLayout( new FlowLayout()); con1[ 3 ].add(bookPublishLabel); con1[ 3 ].add(bookPublishText); con1[ 4 ].setLayout( new FlowLayout()); con1[ 4 ].add(bookPriceLabel); con1[ 4 ].add(bookPriceText); con1[ 5 ].setLayout( new FlowLayout()); con1[ 5 ].add(bookTimeLabel); con1[ 5 ].add(bookTimeText); Container con2= new Container(); con2.setLayout( new BorderLayout()); con2.add(con1[ 0 ],BorderLayout.NORTH); con2.add(con1[ 1 ],BorderLayout.CENTER); con2.add(con1[ 2 ],BorderLayout.SOUTH); Container con3= new Container(); con3.setLayout( new BorderLayout()); con3.add(con1[ 3 ],BorderLayout.NORTH); con3.add(con1[ 4 ],BorderLayout.CENTER); con3.add(con1[ 5 ],BorderLayout.SOUTH); Container con4= new Container(); con4.setLayout( new FlowLayout()); con4.add(submitBut); con4.add(cancelBut); Container con5= new Container(); con5.setLayout( new BorderLayout()); con5.add(con2,BorderLayout.NORTH); con5.add(con3,BorderLayout.CENTER); con5.add(con4,BorderLayout.SOUTH); this .add(con5,BorderLayout.CENTER); this .validate(); this .setVisible( true ); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (e.getSource()==submitBut){ if (bookNumText.getText().equals( "" )||bookNameText.getText().equals( "" )|| bookWriterText.getText().equals( "" )||bookPublishText.getText().equals( "" )|| bookPriceText.getText().equals( "" )||bookTimeText.getText().equals( "" )){ //System.out.println("输入失败"); JOptionPane.showMessageDialog( this , "输入不能有空" , "提示" ,JOptionPane.PLAIN_MESSAGE); } else { //System.out.println("输入成功"); String sql= "insert into " + "book_info(book_num,book_name,book_writer,publish_house,book_price,publish_time)" + "values('" +bookNumText.getText()+ "','" +bookNameText.getText()+ "','" +bookWriterText.getText()+ "','" +bookPublishText.getText()+ "','" +bookPriceText.getText()+ "','" +bookTimeText.getText()+ "')" ; try { BookTableModel book= new BookTableModel(); book.addBook(sql); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } JOptionPane.showMessageDialog( this , "添加成功" , "提示" ,JOptionPane.PLAIN_MESSAGE); this .setVisible( false ); } } if (e.getSource()==cancelBut){ this .setVisible( false ); } } } |
ModifyBook.java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
package librarySystem; import java.awt.*; import java.awt.event.*; import java.sql.SQLException; import javax.swing.*; @SuppressWarnings ( "serial" ) public class ModifyBook extends JDialog implements ActionListener{ private JLabel bookNumLabel; private JLabel bookNameLabel; private JLabel bookWriterLabel; private JLabel bookPublishLabel; private JLabel bookPriceLabel; private JLabel bookTimeLabel; private JTextField bookNumText; private JTextField bookNameText; private JTextField bookWriterText; private JTextField bookPublishText; private JTextField bookPriceText; private JTextField bookTimeText; private JButton submitBut; private JButton cancelBut; private BookTableModel bookModel; private int rowNum; public ModifyBook(Frame owner,String title, boolean type,BookTableModel model, int row){ super (owner,title,type); bookModel=model; rowNum=row; bookNumLabel= new JLabel( "书 号:" ); bookNameLabel= new JLabel( "书 名:" ); bookWriterLabel= new JLabel( "作 者:" ); bookPublishLabel= new JLabel( "出版社:" ); bookPriceLabel= new JLabel( "价 格:" ); bookTimeLabel= new JLabel( "出版时间:" ); bookNumText= new JTextField( 10 ); bookNameText= new JTextField( 10 ); bookWriterText= new JTextField( 10 ); bookPublishText= new JTextField( 10 ); bookPriceText= new JTextField( 10 ); bookTimeText= new JTextField( 9 ); submitBut= new JButton( "确认修改" ); cancelBut= new JButton( "取消" ); submitBut.addActionListener( this ); cancelBut.addActionListener( this ); this .setBounds( 350 , 150 , 400 , 260 ); this .setResizable( false ); this .setLayout( new BorderLayout()); this .setValue(); this .initLayout(); } public void initLayout(){ Container[] con1= new Container[ 6 ]; for ( int i= 0 ;i< 6 ;i++) con1[i]= new Container(); con1[ 0 ].setLayout( new FlowLayout()); con1[ 0 ].add(bookNumLabel); con1[ 0 ].add(bookNumText); con1[ 1 ].setLayout( new FlowLayout()); con1[ 1 ].add(bookNameLabel); con1[ 1 ].add(bookNameText); con1[ 2 ].setLayout( new FlowLayout()); con1[ 2 ].add(bookWriterLabel); con1[ 2 ].add(bookWriterText); con1[ 3 ].setLayout( new FlowLayout()); con1[ 3 ].add(bookPublishLabel); con1[ 3 ].add(bookPublishText); con1[ 4 ].setLayout( new FlowLayout()); con1[ 4 ].add(bookPriceLabel); con1[ 4 ].add(bookPriceText); con1[ 5 ].setLayout( new FlowLayout()); con1[ 5 ].add(bookTimeLabel); con1[ 5 ].add(bookTimeText); Container con2= new Container(); con2.setLayout( new BorderLayout()); con2.add(con1[ 0 ],BorderLayout.NORTH); con2.add(con1[ 1 ],BorderLayout.CENTER); con2.add(con1[ 2 ],BorderLayout.SOUTH); Container con3= new Container(); con3.setLayout( new BorderLayout()); con3.add(con1[ 3 ],BorderLayout.NORTH); con3.add(con1[ 4 ],BorderLayout.CENTER); con3.add(con1[ 5 ],BorderLayout.SOUTH); Container con4= new Container(); con4.setLayout( new FlowLayout()); con4.add(submitBut); con4.add(cancelBut); Container con5= new Container(); con5.setLayout( new BorderLayout()); con5.add(con2,BorderLayout.NORTH); con5.add(con3,BorderLayout.CENTER); con5.add(con4,BorderLayout.SOUTH); this .add(con5,BorderLayout.CENTER); this .validate(); this .setVisible( true ); } public void setValue(){ this .bookNumText.setText((String) bookModel.getValueAt(rowNum, 0 )); this .bookNumText.setEditable( false ); this .bookNameText.setText((String) bookModel.getValueAt(rowNum, 1 )); this .bookWriterText.setText((String) bookModel.getValueAt(rowNum, 2 )); this .bookPublishText.setText((String) bookModel.getValueAt(rowNum, 3 )); this .bookTimeText.setText((String) bookModel.getValueAt(rowNum, 4 )); this .bookPriceText.setText((String) bookModel.getValueAt(rowNum, 5 )); this .validate(); } @Override public void actionPerformed(ActionEvent e) { // System.out.println(bookPriceText.getText()); // TODO Auto-generated method stub if (e.getSource()==submitBut){ if (bookNumText.getText().equals( "" )||bookNameText.getText().equals( "" )|| bookWriterText.getText().equals( "" )||bookPublishText.getText().equals( "" )|| bookPriceText.getText().equals( "" )||bookTimeText.getText().equals( "" )){ //System.out.println("输入失败"); JOptionPane.showMessageDialog( this , "修改不能有空" , "提示" ,JOptionPane.PLAIN_MESSAGE); } else { int n = JOptionPane.showConfirmDialog( null , "确认修改吗?" , "确认修改框" , JOptionPane.YES_NO_OPTION); if (n == JOptionPane.YES_OPTION) { String sql= "UPDATE book_info SET book_name ='" +bookNameText.getText()+ "', book_writer= '" +bookWriterText.getText()+ "',publish_house='" +bookPublishText.getText()+ "',book_price='" +bookPriceText.getText()+ "',publish_time='" +bookTimeText.getText()+ "' WHERE book_num = '" +bookNumText.getText()+ "' " ; try { BookTableModel book= new BookTableModel(); book.addBook(sql); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } JOptionPane.showMessageDialog( this , "修改成功" , "提示" ,JOptionPane.PLAIN_MESSAGE); this .setVisible( false ); } else if (n == JOptionPane.NO_OPTION) { return ; } } } if (e.getSource()==cancelBut){ this .setVisible( false ); } } } |
程序运行结果:主界面:
查询界面:
添加图书界面:
修改界面:
删除操作:
数据库界面:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。