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

2019-08-06  本文已影响0人  Alex_无理
一、案例要求

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;
    }
 
}
三、测试结果
运行结果
上一篇下一篇

猜你喜欢

热点阅读