zoukankan      html  css  js  c++  java
  • 图书管理系统

    图书管理系统

    目录结构

    代码

    /图书管理系统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的更新需要好好注意一下

     

     

     

     

     

     

  • 相关阅读:
    题解 P2168 【[NOI2015]荷马史诗】
    题解 P2607 【[ZJOI2008]骑士】
    题解 P4323 【[JSOI2016]独特的树叶】
    题解 P4074 【[WC2013]糖果公园】
    题解 P4552 【[Poetize6] IncDec Sequence】
    题解 P3469 【[POI2008]BLO-Blockade】
    题解 P5058 【[ZJOI2004]嗅探器】
    题解 P4767 【[IOI2000]邮局】
    题解 CF463D 【Gargari and Permutations】
    TensorFlow学习笔记之二——安装和运行
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7732365.html
Copyright © 2011-2022 走看看