圖書管理系統

圖書管理系統

 

目錄結構java

 

代碼sql

/圖書管理系統10.23/src/com/fry/model/Book.java數據庫

 1 package com.fry.model;
 2 
 3 public class Book {
 4     private int bookNum;
 5     private String bookName;
 6     private String author;
 7     private String publishment;
 8     private String buyTime;
 9     private String borrowed;
10     private String Ordered;
11     
12     
13     public int getBookNum() {
14         return bookNum;
15     }
16     public void setBookNum(int bookNum) {
17         this.bookNum = bookNum;
18     }
19     public String getBookName() {
20         return bookName;
21     }
22     public void setBookName(String bookName) {
23         this.bookName = bookName;
24     }
25     public String getAuthor() {
26         return author;
27     }
28     public void setAuthor(String author) {
29         this.author = author;
30     }
31     public String getPublishment() {
32         return publishment;
33     }
34     public void setPublishment(String publishment) {
35         this.publishment = publishment;
36     }
37     public String getBuyTime() {
38         return buyTime;
39     }
40     public void setBuyTime(String buyTime) {
41         this.buyTime = buyTime;
42     }
43     public String getBorrowed() {
44         return borrowed;
45     }
46     public void setBorrowed(String borrowed) {
47         this.borrowed = borrowed;
48     }
49     public String getOrdered() {
50         return Ordered;
51     }
52     public void setOrdered(String ordered) {
53         Ordered = ordered;
54     }
55     
56     
57     
58 }

 

/圖書管理系統10.23/src/com/fry/model/Database.javaide

  1 package com.fry.model;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.util.Map;
  9 import java.util.Vector;
 10 
 11 public class Database {
 12     PreparedStatement ps = null; // (這裏也可使用statement,視狀況而定)
 13     Connection ct = null;
 14     ResultSet rs = null;
 15 
 16     public Database() {
 17         try {
 18             // 1.加載驅動
 19             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
 20             String url = "jdbc:sqlserver://localhost:1433;databaseName=libraryManagement";
 21             String user = "sa";// sa超級管理員
 22             String password = "1314";// 密碼
 23 
 24             // 2.鏈接
 25             ct = DriverManager.getConnection(url, user, password);
 26         } catch (Exception e) {
 27             e.printStackTrace();
 28         }
 29 
 30     }
 31 
 32     // 查詢
 33     /**
 34      * 參數的話,應該是要一個sql,一個map的參數 返回的話,就是一個Vector<Vector>
 35      */
 36     public Vector<Vector> query(String sql,Map<String,String> args,int n) {
 37         try {
 38             // 3.建立發送端
 39             ps = ct.prepareStatement(sql);
 40             // 4.獲取結果集
 41             ps.setString(1, args.get("BookNO"));
 42             rs = ps.executeQuery();
 43             // 遍歷輸出結果集
 44             Vector<Vector> data=new Vector<Vector>();
 45             while (rs.next()) {
 46                 Vector record=new Vector();
 47                 //System.out.println(args.size());
 48                 for(int i=1;i<=n;i++){
 49                     String str=rs.getString(i)+"";
 50                     record.add(str);
 51                     //System.out.print(str+" ");
 52                 }
 53                 data.add(record);
 54                 //System.out.println();
 55             }
 56             return data;
 57         } catch (SQLException e) {
 58             e.printStackTrace();
 59         }
 60         return null;
 61     }
 62 
 63     public Vector<Vector> query(String sql) {
 64         try {
 65             // 3.建立發送端
 66             ps = ct.prepareStatement(sql);
 67             // 4.獲取結果集
 68             rs = ps.executeQuery();
 69             // 遍歷輸出結果集
 70             Vector<Vector> data=new Vector<Vector>();
 71             while (rs.next()) {
 72                 Vector record=new Vector();
 73                 for(int i=1;i<=7;i++){
 74                     String str=rs.getString(i)+"";
 75                     record.add(str);
 76                     //System.out.print(str+" ");
 77                 }
 78                 data.add(record);
 79                 //System.out.println();
 80             }
 81             return data;
 82         } catch (SQLException e) {
 83             e.printStackTrace();
 84         }
 85         return null;
 86     }
 87     
 88     public void connectDB(String sql, String args[]) {
 89         try {
 90             // 1.加載驅動
 91             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
 92             String url = "jdbc:sqlserver://localhost:1433;databaseName=libraryManagement";
 93             String user = "sa";// sa超級管理員
 94             String password = "1314";// 密碼
 95 
 96             // 2.鏈接
 97             ct = DriverManager.getConnection(url, user, password);
 98 
 99             // 3.建立發送端
100 
101             ps = ct.prepareStatement("select * from book");
102             // 4.獲取結果集
103             rs = ps.executeQuery();
104             // 經過PreparedStatement對象裏的set方法去設置插入的具體數值
105 
106             // pstmt.setString(1, newen);
107 
108             // 遍歷輸出結果集
109             while (rs.next()) {
110                 String str=null;
111                 //str=rs.getString("BookNO");
112                 str=rs.getString(1);
113                 System.out.println(str);
114                 
115             }
116         } catch (Exception e) {
117             e.printStackTrace();
118         } finally {
119 
120             // 關閉資源,增強程序的健壯性
121             try {
122                 if (rs != null) {
123                     rs.close();
124                 }
125                 if (ps != null) {
126                     ps.close();
127                 }
128                 if (ct != null) {
129                     ct.close();
130                 }
131             } catch (Exception e) {
132                 e.printStackTrace();
133             }
134         }
135 
136     }
137 }

 

/圖書管理系統10.23/src/com/fry/view/StudentSystem.java函數

  1 package com.fry.view;
  2 
  3 import java.awt.*;
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 
  7 import javax.swing.*;
  8 import javax.swing.event.TreeSelectionEvent;
  9 import javax.swing.event.TreeSelectionListener;
 10 import javax.swing.tree.DefaultMutableTreeNode;
 11 
 12 
 13 public class StudentSystem extends JFrame implements TreeSelectionListener{
 14     //屬性
 15     //左邊
 16     private JTree tree;
 17     private DefaultMutableTreeNode root;
 18     private DefaultMutableTreeNode treeNode1;
 19     private DefaultMutableTreeNode treeNode2;
 20     private DefaultMutableTreeNode treeNode3;
 21     private DefaultMutableTreeNode treeNode4;
 22     //給樹添加滾動條
 23     private JScrollPane scrollPane;
 24     
 25     //整體
 26     private JSplitPane splitPane;
 27     
 28     //右邊
 29     private JPanel panel;
 30         //給panel添加一個cardLayout
 31     private CardLayout cardLayout;
 32     private JLabel label;
 33     //用來設置右邊cardLayout的替代品
 34     private JLabel label_1;
 35     private JLabel label_2;
 36     private JLabel label_3;
 37     
 38     //底部
 39     //給底部設置一個標籤文本
 40     
 41     
 42     public StudentSystem(){
 43         initTree();//
 44         initPanel();//
 45         initSplitPane();//
 46         initFrame();
 47     }
 48     
 49     
 50     public void initTree(){
 51         root=new DefaultMutableTreeNode("學生用戶管理系統");
 52         treeNode1=new DefaultMutableTreeNode("查詢圖書");
 53         treeNode2=new DefaultMutableTreeNode("預定圖書");
 54         treeNode3=new DefaultMutableTreeNode("掛失圖書");
 55         treeNode4=new DefaultMutableTreeNode("退出");
 56         root.add(treeNode1);
 57         root.add(treeNode2);
 58         root.add(treeNode3);
 59         root.add(treeNode4);
 60         //先建好節點,而後把節點加入樹中
 61         tree=new JTree(root);
 62         //顯示了root節點上面的小鑰匙
 63         tree.setShowsRootHandles(true);
 64         //給樹添加滾動條
 65         scrollPane=new JScrollPane(tree);
 66         //添加事件監聽
 67         tree.addTreeSelectionListener(this);
 68         
 69     }
 70     
 71     
 72     
 73     public void initSplitPane(){
 74         splitPane=new JSplitPane();
 75         splitPane.setLeftComponent(scrollPane);
 76         splitPane.setRightComponent(panel);
 77         //設置分割線寬度,大了太醜了
 78         splitPane.setDividerSize(4);
 79         splitPane.setDividerLocation(150);
 80     }
 81     
 82     public void initPanel(){
 83         panel=new JPanel();
 84         cardLayout=new CardLayout();
 85         panel.setLayout(cardLayout);
 86         panel.setBounds(200,50,300,400);
 87         label=new JLabel("歡迎來到學生管理界面");
 88         label.setHorizontalAlignment(JLabel.CENTER);
 89         label.setVerticalAlignment(JLabel.CENTER);
 90         panel.add(label, "root");
 91         
 92         //替代品
 93         label_1=new JLabel("查詢圖書");
 94         label_2=new JLabel("預定圖書");
 95         label_3=new JLabel("掛失圖書");
 96         panel.add(new SearchBook(), "findBook");
 97         panel.add(label_2, "orderBook");
 98         panel.add(label_3, "loseBook");
 99         
100     }
101     public void initFrame(){
102         this.add(splitPane);
103         int width=500;
104         int height=400;
105         this.setSize(width, height);
106         this.setTitle("學生管理系統");
107         this.setVisible(true);
108         this.setExtendedState(JFrame.MAXIMIZED_BOTH);
109         this.setDefaultCloseOperation(EXIT_ON_CLOSE);
110     }
111     
112     
113     public void valueChanged(TreeSelectionEvent e) {
114         DefaultMutableTreeNode tmpNode=(DefaultMutableTreeNode) e.getPath().getLastPathComponent();
115         String chooseName=(String) tmpNode.getUserObject();
116         if(chooseName.equals("學生用戶管理系統")){
117             cardLayout.show(panel, "root");
118         }else if(chooseName.equals("查詢圖書")){
119             cardLayout.show(panel, "findBook");
120         }else if(chooseName.equals("預定圖書")){
121             cardLayout.show(panel, "orderBook");
122         }else if(chooseName.equals("掛失圖書")){
123             cardLayout.show(panel, "loseBook");
124         }else if(chooseName.equals("退出")){
125             int i=JOptionPane.showConfirmDialog(StudentSystem.this, "是否退出系統?","消息",JOptionPane.YES_NO_OPTION);
126             if(i==JOptionPane.YES_OPTION){
127                 System.exit(0);
128             }
129         }
130     }
131     
132     public static void main(String[] args){
133         new StudentSystem();
134     }
135 
136 
137     
138 
139 
140 
141     
142 }

 

/圖書管理系統10.23/src/com/fry/view/SearchBook.javasqlserver

  1 package com.fry.view;
  2 
  3 import java.awt.GridLayout;
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 import java.util.Vector;
  7 
  8 import javax.swing.*;
  9 import javax.swing.table.DefaultTableModel;
 10 
 11 import com.fry.model.Database;
 12 
 13 public class SearchBook extends JPanel implements ActionListener{
 14     //
 15     private JPanel panelUp;
 16     //簡單查詢和高級查詢按鈕
 17     private ButtonGroup buttonGroup;
 18     private JRadioButton radioButton1;
 19     private JRadioButton radioButton2;
 20     //書名,做者,出版社
 21     private JLabel label1;
 22     private JLabel label2;
 23     private JLabel label3;
 24     //書名,做者,出版社後面對應的輸入框
 25     private JTextField textField1;
 26     private JTextField textField2;
 27     private JTextField textField3;
 28     //簡單查詢中的下拉列表框
 29     private JComboBox comboBox;
 30     private JTextField textField4;
 31     //肯定按鈕
 32     private JButton button;
 33     
 34     //
 35     private DefaultTableModel defaultTableModel;
 36     private JTable table;
 37     private JScrollPane scrollPane;
 38     //數據庫部分
 39     Vector<String> head;//表頭
 40     Database database;
 41     String sql = null;
 42     
 43     
 44     //
 45     private JSplitPane splitPane;
 46     
 47     
 48     public SearchBook(){
 49         
 50         initPanelUp();
 51         initTabel();
 52         initSplitPane();
 53         initPanel();
 54     }
 55     
 56     //總體的那個panel,this指代的那個
 57     public void initPanel(){
 58         this.setLayout(new GridLayout(1,1));//設置查詢圖書界面爲網格佈局
 59         this.add(splitPane);
 60         this.setVisible(true);
 61         this.setBounds(3, 100, 600, 400);
 62     }
 63     
 64     //上面的panel
 65     public void initPanelUp(){
 66         panelUp=new JPanel();
 67         panelUp.setSize(600, 500);
 68         panelUp.setLayout(null);
 69         
 70         //簡單查詢和高級查詢按鈕
 71         buttonGroup=new ButtonGroup();
 72         radioButton1 = new JRadioButton("簡單查詢",true);
 73         radioButton2 = new JRadioButton("高級查詢");
 74         radioButton1.setBounds(20, 20, 100, 20);
 75         radioButton2.setBounds(20, 60, 100, 20);
 76         radioButton1.addActionListener(this);
 77         radioButton2.addActionListener(this);
 78         buttonGroup.add(radioButton1);
 79         buttonGroup.add(radioButton2);
 80         panelUp.add(radioButton1);
 81         panelUp.add(radioButton2);
 82         
 83         //書名,做者,出版社
 84         label1=new JLabel("書名");
 85         label2=new JLabel("做者");
 86         label3=new JLabel("出版社");
 87         label1.setBounds(120,60, 80, 20);
 88         label2.setBounds(320,60, 80, 20);
 89         label3.setBounds(520,60, 80, 20);
 90         panelUp.add(label1);
 91         panelUp.add(label2);
 92         panelUp.add(label3);
 93         //書名,做者,出版社後面對應的輸入框
 94         textField1=new JTextField();
 95         textField2=new JTextField();
 96         textField3=new JTextField();
 97         textField1.setBounds(155,60, 80, 20);
 98         textField2.setBounds(355,60, 80, 20);
 99         textField3.setBounds(565,60, 80, 20);
100         panelUp.add(textField1);
101         panelUp.add(textField2);
102         panelUp.add(textField3);
103         //設置複雜查詢的三個文本框爲false
104         textField1.setEditable(false);
105         textField2.setEditable(false);
106         textField3.setEditable(false);
107         
108         //簡單查詢中的下拉列表框
109         String[] str={"書名","出版社","做者","購買時間"};
110         comboBox=new JComboBox(str);
111         comboBox.setBounds(120, 20, 150, 20);
112         textField4=new JTextField();
113         textField4.setBounds(285,20, 150, 20);
114         textField4.requestFocus();
115         panelUp.add(comboBox);
116         panelUp.add(textField4);
117         
118         //肯定按鈕
119         button=new JButton("提交");
120         button.setBounds(520, 20, 150, 20);
121         button.addActionListener(this);
122         panelUp.add(button);
123     }
124     
125     //下面的Tabel
126     public void initTabel(){
127         //表頭部分
128         head=new Vector<String>();
129         head.add("書號");
130         head.add("書名");
131         head.add("做者");
132         head.add("出版社");
133         head.add("購進時間");
134         head.add("是否借閱");
135         head.add("是否預定");
136         
137         //數據部分
138         database=new Database();
139         Vector<Vector> data=database.query("select * from book");
140 
141         //表格部分
142         defaultTableModel=new DefaultTableModel(data,head);
143         table=new JTable(defaultTableModel);
144         scrollPane=new JScrollPane(table);
145         
146     }
147     
148     public void initSplitPane(){
149         splitPane=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true);
150         splitPane.setTopComponent(panelUp);
151         splitPane.setBottomComponent(scrollPane);
152         splitPane.setDividerSize(4);
153         splitPane.setDividerLocation(100);
154     }
155 
156     public void actionPerformed(ActionEvent e) {
157         if(radioButton1.isSelected()){
158             //設置複雜查詢的三個文本框爲false
159             textField1.setEditable(false);
160             textField2.setEditable(false);
161             textField3.setEditable(false);
162             //設置簡單查詢的文本框爲true
163             textField4.setEditable(true);
164             textField4.requestFocus();
165             //若是點提交,則檢索
166             if(e.getSource()==button){
167                 String str=textField4.getText().toString().trim();
168                 
169                 if(str.equals("")){
170                     JOptionPane.showMessageDialog(this, "請輸入必要的信息!!!","消息",JOptionPane.INFORMATION_MESSAGE);
171                     return;
172                 }
173                 if(comboBox.getSelectedIndex()==0){//根據書名進行查詢
174                     sql="select * from book where BookName='"+str+"'";
175                     textField4.setText("");
176                 }else if(comboBox.getSelectedIndex()==1){//根據出版社進行查詢
177                     sql="select * from book where Publishment='"+str+"'";
178                     textField4.setText("");
179                 }else if(comboBox.getSelectedIndex()==2){//根據做者進行查詢
180                     sql="select * from book where Author='"+str+"'";
181                     textField4.setText("");
182                 }else if(comboBox.getSelectedIndex()==3){//根據購進時間進行查詢
183                     sql="select * from book where ButTime='"+str+"'";
184                     textField4.setText("");
185                 }
186                 //System.out.println(sql);
187                 updateTable(sql);
188                 
189             }
190         }else if(radioButton2.isSelected()){
191             System.out.println("你選擇了高級查詢");
192         }
193     }
194     
195     public void updateTable(String sql){
196         //數據部分
197         database=new Database();
198         Vector<Vector> data=database.query(sql);
199         //System.out.println(data.elementAt(0).elementAt(0).toString());
200         //表格部分
201         DefaultTableModel defaultTableModel2=(DefaultTableModel) table.getModel();
202         defaultTableModel2.setDataVector(data, head);
203         table=new JTable(defaultTableModel);
204         table.updateUI();
205     }
206 }

 

注意點:佈局

學生管理系統測試

 

1、界面this

 

一、 取名(文件名)url

二、 把界面相關的函數放進構造函數裏面,初始化這個類便可啓動界面

三、 用Junit測試不出窗口,在main裏面new一個對象就有窗口

四、 只有樹目錄結構沒有邊界線的時候特別醜

五、 樹的用法,建好類型爲DefaultMutableTreeNode的根節點,就能夠用這個根節點來構造樹了,根下的其它節點(類型爲DefaultMutableTreeNode)直接add進根就好,因此這個樹能夠一直延伸。

六、 用一個JSpiteSpan來分割這個界面,會好看一點

七、 我使用JScollPane給JTree顯示不出來東西,後面在添加了JSpiteSpan以後又好了

八、 右邊是一個JPanel,cardLayout是給JPanel設置的

九、 添加JLabel在有CardLayout加持的JPanel上的時候,必定要給Label上的文字設置水平和垂直居中。label.setHorizontalAlignment(JLabel.CENTER); label.setVerticalAlignment(JLabel.CENTER);

 

十、在CardLayout裏面show東西的時候,cardLayout.show(panel, "loseBook");這裏前一個參數是CardLayout的父親。

11 退出界面的話,一句話就成了:System.exit(0);不過能夠加個確認框:JOptionPane.showConfirmDialog。

12  作樹的事件監聽的時候就繼承TreeSelectionListener便可,添加事件監聽的時候就能夠直接添加這個。

13

 

 

SearchBook界面

2、界面

1 界面繼承JPanel,由於要放進JFrame中

2 數據庫的數據傳到這邊表格顯示

3 還有表頭的設置

4 JSplitPane的設置垂直分割以後JSplitPane.VERTICAL_SPLIT,能夠splitPane.setTopComponent(panelUp);splitPane.setBottomComponent(scrollPane);

5 JTable加了JScrollPane再放進JPanel中,再把這個JPanel放到其餘的JPanel中,顯示不了,JScrollPane直接放在JPanel中便可。

6 DefaultTableModel,這個東西真的是賊好用,defaultTableModel=new DefaultTableModel(null,head);前面的數據部分是一個Vector<Vector> ,後面的head部分是一個Vector<String>

7 JradioButton須要設置一個ButtonGroup給它框起來

8 那些複雜的界面,你把東西一個個加進去,也就很是簡單了

9 下拉列表框JComboBox的使用,comboBox=new JComboBox(str);comboBox.setBounds(120, 20, 150, 20);

10 出現了很難受詭異的東西,把SplitPanel放進JPanel裏面的時候。this.setLayout(new GridLayout(1,1));//設置查詢圖書界面爲網格佈局

是由於他把JPanel設置成了一個網格佈局1*1,而我沒有設置,因此放進去的東西能佔所有,不然,不能佔所有

 

這樣的圖,超級難受

11 JTabel的updateUI和repaint方法

12 用Vector<Vector>來放回數據時真的超級棒,Vector<Vector> data=database.query("select * from book");

13 事件監聽要注意,兩種方式均可以,radioButton1.isSelected()和e.getSource()==radioButton1,推薦選擇第二種,由於事件的種類你很差肯定 ,這裏選擇前一種,由於開始的時候就有被選了,這兩個要根據狀況選擇。

14 JTable的更新須要好好注意一下

相關文章
相關標籤/搜索