图书管理系统

图书管理系统

 

目录结构

 

代码

/图书管理系统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.java

  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.java

  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、 取名(文件名)

2、 把界面相关的函数放进构造函数里面,初始化这个类即可启动界面

3、 用Junit测试不出窗口,在main里面new一个对象就有窗口

4、 只有树目录结构没有边界线的时候特别丑

5、 树的用法,建好类型为DefaultMutableTreeNode的根节点,就可以用这个根节点来构造树了,根下的其它节点(类型为DefaultMutableTreeNode)直接add进根就好,所以这个树可以一直延伸。

6、 用一个JSpiteSpan来分割这个界面,会好看一点

7、 我使用JScollPane给JTree显示不出来东西,后面在添加了JSpiteSpan之后又好了

8、 右边是一个JPanel,cardLayout是给JPanel设置的

9、 添加JLabel在有CardLayout加持的JPanel上的时候,一定要给Label上的文字设置水平和垂直居中。label.setHorizontalAlignment(JLabel.CENTER); label.setVerticalAlignment(JLabel.CENTER);

 

10、在CardLayout里面show东西的时候,cardLayout.show(panel, "loseBook");这里前一个参数是CardLayout的父亲。

11 退出界面的话,一句话就成了:System.exit(0);不过可以加个确认框:JOptionPane.showConfirmDialog。

12  做树的事件监听的时候就继承TreeSelectionListener即可,添加事件监听的时候就可以直接添加这个。

13

 

 

SearchBook界面

二、界面

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的更新需要好好注意一下

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值