24/05/14总结

签到2:
签到界面上有时间显示,签到码输入框,开始签到,当倒计时结束,老师端和学生端都会显示签到结果,所以签到结果需要建表:(签到了的学生和未签到的学生,
这次签到的时间和签到码,班级号,)
签到有已签到,未签到
判断是否签的是以前的到就是看有没有结束时间
随机选人:
两遍遍历数据库,第一遍从数据库里把班级里所有学生挑出来,并定义一个变量每挑一个记录变量加1,然后使用redom随机数随机1-n这个范围内的数
第二遍再定义一个变量然后再遍历一遍直到数字等于随机数,然后把名字随机出来

if(receive.equals("Release success")){Alert alert = new Alert(Alert.AlertType.INFORMATION);alert.setTitle("Information Dialog");alert.setHeaderText(null);alert.setContentText("发布签到成功");// 显示提醒框并等待用户关闭alert.showAndWait();initializeTableView_second();tabpane.getSelectionModel().select(Check_in);Socket socket3 = new Socket("127.0.0.1", 10090);String judgment3 = "update_check_in";ObjectOutputStream oos3 = new ObjectOutputStream(socket3.getOutputStream());oos3.writeObject(judgment3);      //传送标志oos3.writeObject(formattedTime);ObjectInputStream ois3 = new ObjectInputStream(socket3.getInputStream());Object obj = ois3.readObject();if (studentsList != null && !studentsList.isEmpty()) {studentsList.clear();}if (obj instanceof ArrayList<?>) {studentsList = (ArrayList<String>) obj;}Map<String, String> studentStatusMap = new HashMap<>();for (String student : studentsList) {studentStatusMap.put(student, "未签到");}socket4 = new Socket("127.0.0.1", 10090);judgment4 = "update_examine_check_in";oos4 = new ObjectOutputStream(socket4.getOutputStream());oos4.writeObject(judgment4);Thread countdownThread = new Thread(() -> {int totalSeconds = Integer.parseInt(minute) * 60 + Integer.parseInt(second_clock);while (totalSeconds > 0) {try {// 将 totalSeconds 转换为分钟和秒钟int minutes = totalSeconds / 60;int seconds = totalSeconds % 60;// 更新界面上的显示(这里使用 Platform.runLater 来在 JavaFX 应用程序线程中更新 UI)Platform.runLater(() -> {minutetext.setText(String.valueOf(minutes));second_clocktext.setText(String.valueOf(seconds));});for (String student : studentsList) {oos4.writeObject(student);oos4.writeObject(formattedTime);// 获取当前签到状态ois4= new ObjectInputStream(socket4.getInputStream());String  status  = (String) ois4.readObject();if (!status.equals(studentStatusMap.get(student))) {// 如果签到状态发生变化,更新 Map,并输出该学生的名字studentStatusMap.put(student, status);if (status.equals("已签到")) {System.out.println(111);success_name=student+" "+success_name;// 在这里执行更新 TableView 的操作Platform.runLater(() -> {updateTableView(check_in_table, "已签到", success_name, formattedTime);initializeTableView_second();initializeTableView_second();System.out.println(23);});}}}// 每隔一秒钟减少一秒Thread.sleep(1000);totalSeconds--;} catch (InterruptedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}if(totalSeconds <= 0){try {LocalDateTime currentTime2 = LocalDateTime.now();// 格式化当前系统时间,显示年、月、日、时、分和秒DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formattedTime2 = currentTime2.format(formatter2);oos4.writeObject("111");minutetext.setText("0");second_clocktext.setText("0");Socket socket4 = new Socket("127.0.0.1", 10090);String judgment4 = "teacher_end_check_in";ObjectOutputStream oos4 = new ObjectOutputStream(socket4.getOutputStream());oos4.writeObject(judgment4);      //传送标志oos4.writeObject(formattedTime);oos4.writeObject(formattedTime2);ObjectInputStream ois4 = new ObjectInputStream(socket4.getInputStream());String fail_name = (String) ois4.readObject();Platform.runLater(() -> {updateTableView(check_in_table, "未签到", fail_name, formattedTime2);initializeTableView_second();initializeTableView_second();System.out.println(23);});} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}// 倒计时结束后执行的逻辑// 这里你可以添加倒计时结束后需要执行的代码});// 启动倒计时线程countdownThread.start();}

签到功能:

随机抽人:





 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/701619.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch优化手段

ES 的默认配置已经提供了良好的开箱即用的体验&#xff0c;但是仍有一些优化手段去继续提升它的使用性能。 一 General recommendations 通用建议。 01 Dont return large result sets 不要返回大量的结果集。ES 是一个搜索引擎&#xff0c;擅长于返回匹配度较高的几个文…

1.柔性数组

1.柔性数组 我们先来介绍一下什么是柔性数组&#xff1a; 在C语言中&#xff0c;柔性数组&#xff08;Flexible Array&#xff09;并不是一个标准的术语&#xff0c;但它通常指的是结构体中最后一个元素是一个没有指定大小的数组。这种结构体设计允许在运行时动态分配数组的大…

ES6之正则扩展

正则表达式扩展 u修饰符&#xff08;Unicode模式&#xff09;y修饰符&#xff08;Sticky或粘连模式&#xff09;s修饰符&#xff08;dotAll模式&#xff09;Unicode属性转义正则实例的flags属性字符串方法与正则表达式的整合 javascript的常用的正则表达式 验证数字邮箱验证手机…

Linux 第三十一章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

TortoiseGit的安装

TortoiseSvn和TortoiseGit都是针对代码进行版本管理的工具&#xff0c;又俗称小乌龟&#xff0c;简洁而可视化的操作界面&#xff0c;免去繁琐的命令行输入。只需要记住常用的几个操作步骤就能快速上手。 TortoiseGit安装 1、TortoiseGit作为git的版本管理工具 &#xff0c;但…

零基础10 天入门 Web3之第3天

10 天入门 Web3之第3天 什么是以太坊&#xff0c;以太坊能做什么&#xff1f;Web3 是互联网的下一代&#xff0c;它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术&#xff0c;该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划&…

粮油码垛机:自动化与智能化仓储的关键角色

在快速发展的现代化仓储物流领域&#xff0c;粮油码垛机正逐渐成为自动化与智能化仓储的关键角色。它以其高效、精准、节省人力的特点&#xff0c;赢得了众多粮油生产企业的青睐&#xff0c;成为仓储管理升级换代的明星产品。 一、粮油码垛机的技术革新 随着科技的发展&#…

【C语言】4.C语言数组(2)

文章目录 6. 二维数组的创建6.1 ⼆维数组的概念6.2 ⼆维数组的创建 7. 二维数组的初始化7.1 不完全初始化7.2 完全初始化7.3 按照⾏初始化7.4 初始化时省略⾏&#xff0c;但是不能省略列 8. 二维数组的使用8.1 ⼆维数组的下标8.2 ⼆维数组的输⼊和输出 9. 二维数组在内存中的存…

string功能介绍(普及版)

目录 1。初始化&#xff08;好几种方式&#xff09;&#xff0c;npos和string的使用说明 2。string的拷贝&#xff0c;隐式类型转换&#xff0c;[]&#xff0c;size&#xff0c;iterator&#xff0c;begin&#xff0c;end&#xff0c;reverse&#xff0c;reverse_iterator&am…

网络安全快速入门(十二)(下) 目录结构相关命令补充

12.4 补充命令 我们已经了解了linux的目录结构&#xff0c;接下来我们大概看一下针对目录及文件的一些相关命令&#xff0c; 我们本章只讲三个目录及文件相关的命令&#xff0c;分别是tree&#xff0c;find及校验文件命令&#xff0c;我们一个一个来看这些命令。 12.4.1 tree命…

Leetcode2105. 给植物浇水 II

Every day a Leetcode 题目来源&#xff1a;2105. 给植物浇水 II 解法1&#xff1a;双指针 设 Alice 当前下标为 i&#xff0c;初始化为 0&#xff0c;水量为 a&#xff0c;初始化为 capacityA&#xff1b;Bob 当前下标为 j&#xff0c;初始化为 n-1&#xff0c;水量为 b&am…

【AI】DeepStream(03):deepstream_test1_app

1、简介 deepstream-test1:演示各种 DeepStream 插件构建 GStreamer 管道。从文件中获取视频、解码、批处理,然后进行对象检测,最后在屏幕上渲染框。 源码路径:/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1 先看下效果 2、编译 1)…