美文网首页
Java 案例一 随机点名系统(使用List集合、MySQL实现

Java 案例一 随机点名系统(使用List集合、MySQL实现

作者: lcyex蓝天 | 来源:发表于2019-08-06 21:12 被阅读0次
    一、案例要求

    1)展示数据库中多个学生信息

    2)随机点出某个学生,并在该学生的对应次数中+1

    3)判断是否继续点名

    4)返回最终的统计结果

    二、操作步骤

    1. 建立一个名为 t_student 的数据表,结构如下图:

    t_student数据表结构

    2. 往 t_student 数据表中输入一些测试数据,如下图

    t_student数据表

    3. 创建 Student 实体类,用于存放学生信息,****属性对应于t_student表中的字段

    package com.lcyex.demo1;
     
    public class Student {
        private int id;
        private String name;
        private int count;
        
        public Student() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        public Student(int id, String name, int count) {
            super();
            this.id = id;
            this.name = name;
            this.count = count;
        }
     
        public int getId() {
            return id;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public int getCount() {
            return count;
        }
     
        public void setCount(int count) {
            this.count = count;
        }
     
        @Override
        public String toString() {
            return name+"\t\t\t"+count;
        }
    }
    
    4. 创建 RandomRollCall 测试类

    1)创建getDataList()方法,用于从t_student数据表中获取学生信息,并返回List集合对象

    2)创建ArrayList集合用于接收getDataList()方法返回的集合对象

    3)使用foreah遍历ArrayList集合

    4)实例化Random对象,使用nextInt()方法返回随机下标

    5)通过List集合的get()方法获取对象,在使用getName()方法获取对象属性,输出本次中标学员姓名

    6)创建updateDataList(String name)方法,用于更新学员的中标次数,形参String name为本次中标学员姓名

    7)判断是否继续点名

    8)结束点名,通过getDataList()方法,输出所有信息

    //RandomRollCall测试类
     
    package com.lcyex.demo1;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.util.Scanner;
     
    import b_study_utils.CloseUtils;
    import b_study_utils.DBUtils;
     
     
    public class RandomRollCall {
        
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            //循环点名
            do {
                //显示所有学生信息
                System.out.println("当前所有学生的信息:");
                List<Student> list = getDataList();
                for(Student student : list) {
                    System.out.print(student.getName()+"\t");   
                }
     
                //随机点名
                Random random = new Random();
                int index = random.nextInt(list.size());    
                String name = list.get(index).getName();
                System.out.println("\n本次抽取的学员:"+name);
                
                //累加点中次数
                updateDataList(name);
                
                //是否继续
                System.out.println("是否继续抽取(y/n)");
                String flag = scanner.next();
                if(!"y".equals(flag)) {
                    break;
                }
                
            }while(true);
            
            //输出学生姓名及点中次数
            List<Student> list = getDataList();
            System.out.println("姓名\t\t\t次数");
            for(Student student : list) {
                System.out.println(student);
            }
        }
        
        //获取学生信息
        public static List<Student> getDataList() {
            Connection conn = null;
            PreparedStatement prst = null;
            ResultSet rs = null;
            List<Student> list = new ArrayList<>();
            try {
                //使用DBUtils工具类建立数据库连接
                conn = DBUtils.getConnection();
                String sql = "select * from t_Student";
                prst = conn.prepareStatement(sql);
                rs = prst.executeQuery();
                while(rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    int count = rs.getInt("count");
                    list.add(new Student(id, name, count));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                //使用CloseUtils工具类统一关闭数据库资源
                CloseUtils.closeAll(rs,prst,conn);
            }
            return list;
        }
        
        //累加点中次数
        public static void updateDataList(String name) {
            Connection conn = null;
            PreparedStatement prst = null;
            try {
                //使用DBUtils工具类建立数据库连接
                conn = DBUtils.getConnection();
                String sql = "update t_Student set count=count+1 where name=?";
                prst = conn.prepareStatement(sql);
                prst.setString(1, name);
                prst.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                //使用CloseUtils工具类统一关闭数据库资源
                CloseUtils.closeAll(prst,conn);
            }
        }
    }
    
    5. 创建CloseUtils工具类和DBUtils工具类,为JDBC提供服务

    1)CloseUtils工具类:用于统一关闭数据库资源
    2)DBUtils工具类:用于建立数据库连接

    //CloseUtils工具类:用于统一关闭数据库资源
     
    package com.lcyex.utils;
     
    public class CloseUtils {
        //可变参数:本质上数组
        public static void closeAll(AutoCloseable... cs) {
            for(AutoCloseable c : cs) {
                if(c != null) {
                    try {
                        c.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    //DBUtils工具类:用于创建数据库连接
     
    package com.lcyex.utils;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
     
    public class DBUtils {
        //将加载驱动放入静态代码块中,只需要加载一次
        static {
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        
        //获取连接对象
        public static Connection getConnection() {
            Connection  connection = null;
            try {
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
     
    }
    
    三、测试结果
    运行结果

    相关文章

      网友评论

          本文标题:Java 案例一 随机点名系统(使用List集合、MySQL实现

          本文链接:https://www.haomeiwen.com/subject/lxrgdctx.html