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

一、案例要求

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;
    }
 
}
三、测试结果
运行结果
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,076评论 1 32
  • 一. Java基础部分.................................................
    wy_sure阅读 3,780评论 0 11
  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 730评论 0 2
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,533评论 0 6
  • 本来摘抄自: <<CoreData 应用开发实践指南>>, 希望下面的复述能够提高自己的理解. *coreData...
    by小杰阅读 735评论 0 1