zoukankan      html  css  js  c++  java
  • 实验8-学生管理系统-数据库应用开发

    一 实验内容

    本实验要求学生使用JDBC提供的接口和类编写一个Java应用程序,实现对学生数据信息的查询、删除、插入、更新等操作。

    学生数据库(student)在MySQL数据库服务器中创建。

    1. 在MySQL中创建学生数据库student,其中一个学生信息表stuinfo结构如下:

                             图1  stuinfo表结构

    2. 设计一个Java程序,界面如图2所示,实现以下功能:

    (1)点击“全部检索”按钮,检索stuinfo表的所有记录,显示在上面的JTable组件中;

    (2)输入查询学号,点击“查询”按钮,查询该学生信息显示在左边面板中,查询不到时弹出信息提示。

    (3)左边面板中输入学生信息,点击“添加”按钮,将此学生信息插入stuinfo表中,弹出插入是否成功的提示框。

    (4)点击“删除”按钮,依据上边学号值删除该学生记录,弹出删除是否成功的提示框。

    (5)点击“更新”按钮,依据上边学号值更新该学生的其它信息,弹出更新是否成功的提示框。

    *首先完成界面设计,然后逐项功能实现,可以选作部分功能。

                                                图2  学生数据管理

    二 实验思路

        1,画界面,
        2,连接数据库
        3,对数据库操作

    三 画界面

    四 连接数据库

    package studentsql;
    
    import java.sql.*;
    
    public class Test_connect_SQL {
        
        public static void main(String[] args) {
            String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
            String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=student";
            String userName = "lw";
            String userPwd = "123456";
            try {
                Class.forName(driverName);
                System.out.println("加载驱动成功!");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("加载驱动失败!");
            }
            try {
                Connection dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
                System.out.println("连接数据库成功!");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.print("SQL Server连接失败!");
            }
            ///new StudentJFrame(new StudentJPanel(),"studentim");
        }
    }

    五 对数据库操作

    -------------------------------------

    六 程序代码

    链接:http://pan.baidu.com/s/1eR97AkM 密码:otun

    StudentJFrame

    package studentsql;
    /*
     * 思路:1,画界面,
     *        2,连接数据库
     *         3,对数据库操作
     * */
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.DefaultTableModel;                                             
    public class StudentJFrame extends JFrame implements ActionListener, ListSelectionListener {//响应按钮动作和列表框选择事件
        protected StudentJPanel student;     // Student对象信息面板
        protected JTable jtable;            //表格
        public JButton inquire, allsearch;    //查询,全部检索按钮
        public JTextField number;            //学号
        JPanel rightpanel;                    //左边的StudentJPanel面板
        private JScrollPane scrollPane;        //滚动窗格
        public Connection conn;             //数据库连接对象
        String userName = "lw";                //数据库名字
        String userPwd = "123456";            //数据库密码
        /**
         * 整体的框架,
         * @param StudentJFrame 
         * */
        public StudentJFrame(StudentJPanel person, String driver, String url) throws ClassNotFoundException, SQLException {
            super("Student对象信息管理");                        //标题
            this.setSize(800, 300);                         // 设置组件尺寸
            this.setLocationRelativeTo(null);                 // 将窗口置于屏幕中央
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.student = person;                             // Person对象或其子类信息面板
            rightpanel = new JPanel(new BorderLayout());    // 面板边布局
            JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, this.student, rightpanel);
                                                            // 水平分割窗格,左右边各添加一个面板
            split.setDividerLocation(200);                     // 设置水平分隔条的位置
            this.getContentPane().add(split);                 // 框架内容窗格添加分割窗格
            Class.forName(driver);
            this.conn = DriverManager.getConnection(url, this.userName, this.userPwd); // 返回数据库连接对象
            jtable=new JTable();
            scrollPane = new JScrollPane(jtable);// 面板添加包含列表框的滚动窗格
            rightpanel.add(scrollPane,"Center");
            JPanel buttonpanel = new JPanel(); // 按钮面板,默认流布局
            rightpanel.add(buttonpanel, "South"); // 南边添加按钮面板
    
            buttonpanel.add(new Label("学号"));
            number=new JTextField("102012012", 10);
            buttonpanel.add(number);
            inquire=new JButton("查询");
            buttonpanel.add(inquire);
            this.inquire.addActionListener(this);
            this.allsearch = new JButton("全部检索");
            buttonpanel.add(this.allsearch);
            this.allsearch.addActionListener(this);
            this.setVisible(true);
        }
        /**
         * 获得表格模型
         * @param 
         * */
        public DefaultTableModel query(String table) throws SQLException {
            DefaultTableModel tablemodel = new DefaultTableModel();     // 表格模型
            String sql = "SELECT * FROM " + table + ";";
            Statement stmt = this.conn.createStatement();                // 1003,1007); //创建语句对象
            ResultSet rset = stmt.executeQuery(sql);                     // 执行数据查询SELECT语句
            // 获得表中列数及各列名,作为表格组件的标题
            ResultSetMetaData rsmd = rset.getMetaData();                 // 返回表属性对象
            int count = rsmd.getColumnCount();                             // 获得列数
            for (int j = 1; j <= count; j++)                             // 将各列名添加到表格模型作为标题,列序号≥1
                tablemodel.addColumn(rsmd.getColumnLabel(j));
            // 将结果集中各行数据添加到表格模型,一次遍历
            Object[] columns = new Object[count];                         // 创建列对象数组,数组长度为列数
            while (rset.next())                                         // 迭代遍历结果集,从前向后访问每行
            {
                for (int j = 1; j <= columns.length; j++)                 // 获得每行各列值
                    columns[j - 1] = rset.getString(j);
                tablemodel.addRow(columns);                             // 表格模型添加一行,参数指数各列值
    
            }
            rset.close();
            stmt.close();
            return tablemodel;                                             // 创建表格,指定表格模型
    
        }
    
        @Override
        public void valueChanged(ListSelectionEvent arg0) {
            // TODO Auto-generated method stub
    
        }
    /**
     * 查询,全部检索,按钮触发事件
     * @param
     * */
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == allsearch) {
                System.out.println(99);
                try {
                    
                    jtable.setModel(query("studentim"));
    
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
            if(e.getSource()==inquire)
            {
                try {
                    String num = "112";
                    String sql="SELECT* from studentim where stu_id='"+num+"'";
                    Statement stmt = this.conn.createStatement();// 1003,1007); //创建语句对象
                    ResultSet rset = stmt.executeQuery(sql); // 执行数据查询SELECT语句
    //                ResultSetMetaData rsmd=rset.getMetaData();
    //                int count=rsmd.getColumnCount();
    //                String result1 = null;
    //                String result2 = null;
    //                String result3 = null;
    //                
    //                while(rset.next())
    //                {    String result[] = new String[6];                        
    //                         result1 = rset.getString(1);
    //                         result2 = rset.getString(2);
    //                         result3 = rset.getString(3);
    //                        
    //                }
    //                //this.number.setText(re);
    //                new StudentJPanel().setString("1", "22", "33");
                    
                    rset.next();
                    student.texts[0].setText(rset.getString(1));
                } catch (SQLException e1) {
                
                    e1.printStackTrace();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
    
        }
        
        public static void main(String arg[]) throws ClassNotFoundException, SQLException {
    
            String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // 指定MySQL// JDBC驱动程序
            String url = "jdbc:sqlserver://localhost:1433;DatabaseName=student";
            new StudentJFrame(new StudentJPanel(), driver, url);
        }
    
    }

    StudentJPanel

    package studentsql;
    
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.swing.*;
    import javax.swing.border.TitledBorder;
    /**
     * studentJPanel 面板  
     * @param 
     * */
    public class StudentJPanel extends JPanel implements ActionListener// ,ItemListener
                                                                        // //Person对象信息面板
    {
        JTextField texts[];                             // 文本行数组,表示学号,姓名、出生日期
        JRadioButton radiobs[];                         // 性别按钮
        JTextField combox_province, combox_city;         // 省份、城市组合框
        JButton add, delete, update;                    //添加 删除 更新按钮
        Connection conn;                                 // 数据库连接对象
        String userName = "lw";                             //用户名
        String userPwd = "123456";                        //密码
        String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";             // 指定MySQL//
        String url = "jdbc:sqlserver://localhost:1433;DatabaseName=student";
        /**
         * 学生信息面板
         * */
        public StudentJPanel() throws ClassNotFoundException, SQLException            // 构造方法
        {
            Class.forName(this.driver);                                                //指定JDBC驱动程序
            this.conn = DriverManager.getConnection(url, this.userName, this.userPwd);//创建接口的连接对象
            this.setBorder(new TitledBorder("Student"));                             // 设置面板具有带标题的边框
            this.setLayout(new GridLayout(7, 1));                                     // 面板网格布局,行1列
            String str[][] = { { "学号","姓名", "1990年01月01日" }, { "男", "女" } };        //信息数组
            this.texts = new JTextField[str[0].length];
            for (int i = 0; i < this.texts.length; i++)                             // 面板添加两个文本行
                this.add(this.texts[i] = new JTextField(str[0][i]));
            JPanel panel_rb = new JPanel(new GridLayout(1, 2));                         // 性别面板,网格布局,1行2列,单选按钮
            this.add(panel_rb);
            ButtonGroup bgroup = new ButtonGroup();                                 // 按钮组
            this.radiobs = new JRadioButton[str[1].length];
            for (int i = 0; i < this.radiobs.length; i++) {
                panel_rb.add(this.radiobs[i] = new JRadioButton(str[1][i]));         // 创建单选按钮,默认不选中,添加到面板
                bgroup.add(this.radiobs[i]);                                         // 单选按钮添加到按钮组
            }
            this.radiobs[0].setSelected(true);                                         // 单选按钮选中
            this.add(this.combox_province = new JTextField("广东"));                    // 省份组合框
            this.add(this.combox_city = new JTextField("广州"));                        // 城市组合框
            this.combox_province.addActionListener(this);                             // 省份组合框注册单击事件监听器
            JPanel panel_bu = new JPanel(new GridLayout(1, 3));
            this.add(panel_bu);
            panel_bu.add(this.add = new JButton("添加"));                                //添加按钮
            this.add.addActionListener(this);                                        
            panel_bu.add(this.delete = new JButton("删除"));                            //删除按钮
            this.delete.addActionListener(this);
            panel_bu.add(this.update = new JButton("更新"));                            //更新按钮
            this.update.addActionListener(this);
        }
        /**
         * 添加  删除 更新按钮的触发事件
         * */    
        @Override
        public void actionPerformed(ActionEvent ex) {
            /**
             * 获得觉得输入的信息
             * */
            String numbers=texts[0].getText();
            String names=texts[1].getText();
            String brithday=texts[2].getText();
            String sex=radiobs[0].isSelected()?radiobs[0].getText():radiobs[1].getText();
            String prirvince=combox_province.getText();
            String city=combox_city.getText();
            if (ex.getSource() == this.add) {                //添加动作
                String sql = "INSERT INTO studentim(stu_id,stu_name,birthday,sex,province,city)" + "VALUES('"+numbers+"','"+names+"','"+brithday+"','"+sex+"','"+prirvince+"','"+city+"')";
                try {
                    Statement stmt = this.conn.createStatement();
                    int count = stmt.executeUpdate(sql);
                } catch (SQLException e) {
                    e.printStackTrace();
                }                         // 1003,1007); //创建语句对象
    
                System.out.println(2);
                JOptionPane.showMessageDialog(this, "添加成功");
            }
            if (ex.getSource() == this.delete) {             //删除动作    
                String sql = "DELETE FROM studentim WHERE(stu_id='"+numbers+"')";
                try {
                    Statement stmt = this.conn.createStatement();
                    int count = stmt.executeUpdate(sql);
                } catch (SQLException e) {
                    e.printStackTrace();
                } // 1003,1007); //创建语句对象
    
                System.out.println(4);
                JOptionPane.showMessageDialog(this, "删除成功");
            }
            if (ex.getSource() == this.update) {        //更新动作
                String sql = "update studentim set stu_name='"+names+"' where (stu_id='"+numbers+"')";
                try {
                    Statement stmt = this.conn.createStatement();
                    int count = stmt.executeUpdate(sql);
                } catch (SQLException e) {
                    e.printStackTrace();
                }                     // 1003,1007); //创建语句对象
    
                System.out.println(3);
                JOptionPane.showMessageDialog(this, "更新成功");
            }
    
        }
    
    }

     


    作者:8亩田
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

    本文如对您有帮助,还请多帮 【推荐】 下此文。
    如果喜欢我的文章,请关注我的公众号
    如果有疑问,请下面留言

    学而不思则罔 思而不学则殆
  • 相关阅读:
    Matlab怎么修改显示数值格式/精度/小数位数
    java matlab 混合编程 Failed to find the required library mclmcrrt9_2.dll on java.library.path.
    Java学习路线图
    解决Java getResource 路径中含有中文的情况
    深入jar包:从jar包中读取资源文件getResourceAsStream
    Matlab调用Java类
    java调用matlab绘图
    轮盘赌算法
    matlab中cumsum函数
    matlab运行出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题
  • 原文地址:https://www.cnblogs.com/liu-wang/p/6118641.html
Copyright © 2011-2022 走看看