本文的目的就是通過圖書管理系統掌握數據庫編程技術,能正確連接數據庫,能對數據庫中信息進行查詢、插入、刪除、修改。
內容:在數據庫中創建一張書目信息表,包括書名、作者、出版社、出版日期、書號、價格字段。設計一個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 ); } } } |
程序運行結果:主界面:
查詢界面:
添加圖書界面:
修改界面:
刪除操作:
數據庫界面:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。