思路:

  • 把长连接弄好
  • 课堂详细页面可以看到班级的所有学生,双击学生弹窗,可以确认从该课程中移除学生
  • 教师可以在班级详细页面通过输入学生的id,将学生加入该班级
  • 做好签到的页面,输入签到标题,选择签到的结束时间,点击确认签到
  • 老师可以添加学生,可以移除学生
  • 创建班级的时候,用一个成员变量记录当前的时间,加入课程的时候

最近完成了:

  • 教师双击课程页面中的课程,进入课堂活动页面。其中实现了发布随机选人。

接下来是实现:学生在课堂里面可以查看随机选人的结果

正则表达式:

http://t.csdn.cn/xgyrZ

JavaFX 中 ListView的用法:

        //可以在Listview上显示1ObservableList<String>list= FXCollections.observableArrayList();list.add("1");courseListView1.setItems(list);courseListView1.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

其中的courseListview1是定义在fx :id处的

JavaFX给ListView添加点击事件:

//双击事件courseListView1.setOnMouseClicked(new EventHandler<MouseEvent>() {@Overridepublic void handle(MouseEvent event) {if (event.getButton().equals(MouseButton.PRIMARY)) {State stage=new Stage;stage.show();}}}});

雪花算法:

//新建一个类
public class SnowflakeIdGenerator {private final long twepoch = 1288834974657L;private final long workerIdBits = 5L;private final long datacenterIdBits = 5L;private final long maxWorkerId = -1L ^ (-1L << workerIdBits);private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);private final long sequenceBits = 12L;private final long workerIdShift = sequenceBits;private final long datacenterIdShift = sequenceBits + workerIdBits;private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;private final long sequenceMask = -1L ^ (-1L << sequenceBits);private long workerId;private long datacenterId;private long sequence = 0L;private long lastTimestamp = -1L;public SnowflakeIdGenerator(long workerId, long datacenterId) {if (workerId > maxWorkerId || workerId < 0) {throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));}if (datacenterId > maxDatacenterId || datacenterId < 0) {throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));}this.workerId = workerId;this.datacenterId = datacenterId;}public synchronized long nextId() {long timestamp = timeGen();if (timestamp < lastTimestamp) {throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));}if (lastTimestamp == timestamp) {sequence = (sequence + 1) & sequenceMask;if (sequence == 0) {timestamp = tilNextMillis(lastTimestamp);}} else {sequence = 0L;}lastTimestamp = timestamp;return ((timestamp - twepoch) << timestampLeftShift) |(datacenterId << datacenterIdShift) |(workerId << workerIdShift) |sequence;}private long tilNextMillis(long lastTimestamp) {long timestamp = timeGen();while (timestamp <= lastTimestamp) {timestamp = timeGen();}return timestamp;}private long timeGen() {return System.currentTimeMillis();}
}

在要获取id的地方,新建一个方法:

    public static String createCode(){SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(1, 1);long id = idGenerator.nextId();String username = String.format("%011d", id % 100000000000L);return username;}

双击事件:

courseListView1.setOnMouseClicked(new EventHandler<MouseEvent>() {@Overridepublic void handle(MouseEvent event) {//在里面写要进行的操作//显示新页面stage.setScene(new Scene());stage.show();}});

警告及提示的使用:

新建一个类:

public class Warning {public static void page(Alert.AlertType alertType,String title,String content){Alert alert = new Alert(alertType);alert.setTitle(title);alert.setHeaderText(null);alert.setContentText(content);alert.showAndWait();}
}

调用时使用:

//警告
Warning.page(Alert.AlertType.ERROR,"Waring","User1 does not exist or email does not match");//传入的第一个是警告,第二个是窗口标题,第三个是提示信息
//提示
Warning.page(Alert.AlertType.CONFIRMATION,"Success","Created successfully");
//传入的第一个是提示,第二个是窗口标题,第三个是提示信息

发送邮箱:

先新建一个类,用来发送邮箱:

public class SendEmail {public static void sendEmail(String sendAddress, String title, String contend, String copySendAddress) throws MessagingException {Properties properties=new Properties();//设置服务器名称properties.setProperty("mail.host","smtp.qq.com");//设置邮箱的传输协议properties.setProperty("mail.transport.protocol","smtp");//设置是否要验证服务器用户名和密码properties.setProperty("mail.smtp.auth","true");//1.创建客户端和邮箱服务器对象Session session=Session.getInstance(properties);//2.开启session的debug模式,方便查看发送的email的运行状态session.setDebug(true);//3.用过session得到transport传输对象Transport transport=session.getTransport();//4.使用用户名密码连接邮箱服务器transport.connect("smtp.qq.com","2171204141@qq.com","quydlpssavwwdhhg");//5.创建邮件Message message=createSimpleMail(session,sendAddress,title,contend,copySendAddress);//6.发送邮件transport.sendMessage(message,message.getAllRecipients());transport.close();}private static Message createSimpleMail(Session session, String sendAddress, String title, String content, String copySendAddress) throws MessagingException {//创建邮件对象MimeMessage message=new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress("2171204141@qq.com"));//指明邮件的收件人message.setRecipients(Message.RecipientType.TO, String.valueOf(new InternetAddress(sendAddress)));//邮件的标题message.setSubject(title);//邮件的内容message.setContent(content,"text/html;charset=UTF-8");//设置抄送人message.setRecipients(Message.RecipientType.CC,InternetAddress.parse(copySendAddress));return message;}public  void main(String[] args) throws MessagingException {sendEmail("2171204141@qq.com","验证码","con","2171204141@qq.com");}
}

新建一个类用来获取随机验证码,并且调用上一个类中的方法:

public class ObtainCode {public static String obtainCode(String emailField) throws MessagingException {Random r=new Random();int random = r.nextInt(1000000);String strCode=String.format("%06d", random);String str="验证码为:"+strCode+",此验证码三分钟内有效。";System.out.println("发送邮箱前");SendEmail.sendEmail(emailField,"学习通",str,emailField);System.out.println(strCode);return strCode;}}

使用时要传入接受者的邮箱:

String strCode= ObtainCode.obtainCode("*********");

序列化和反序列化:

在User类中加入要传输的变量,实现的功能是:通过序列化将客户端的变量一次传个服务端(也可以反过来,将服务端的信息(比如服务端读取数据课库中的信息)传给客户端)。

             //序列化Gson gson = new Gson();user = gson.fromJson(responseParts[1], User.class);System.out.println("反序列化后: " + user);//反序列化Gson gson = new Gson();user = gson.fromJson(userJson, User1.class);//User1.class自动赋值

解析:将User类中的其中User是创建在客户端的一个类,User1是创建在服务端的一个类,这两段分别放在客户端和服务端。其中User类和User1类最好是一样的,当中都是成员变量和get、set方法,也可以将接收端的set方法删去,因为用不到。

隐藏的方法:

在客户端中,教师和学生的功能不相同,所以在学生端需要隐藏某些按键(比如我教的课,发布签到,作业等)。

    public class MainInterfaceController implements Initializable{@FXMLprivate Tab test;@FXMLprivate TabPane test1;public void initialize(URL location, ResourceBundle resourceBundle){test1.getTabs().remove(test);}}

其中URL选择第一个类。

学习通项目需要用到的相关推荐

  1. 23.5.7总结(学习通项目思路)

    项目思路: 注册:输入邮箱(判重),两次输入密码,获得的正确的验证码,获得不重复的用户名. 登录:输入用户名和密码登录. 忘记密码:输入邮箱(和用户名),获得正确的验证码,两次输入修改的密码. 个人资 ...

  2. 23.5.14总结(学习通项目)

    已经实现: 查看班级详细 把班级名和课程名显示在首页 教师:在活动页面进入 首页 查看老师: 从ActivityTest传入classId,className,courseId,CourseName, ...

  3. 23.5.16总结(学习通项目)

    这两天完成了: 发布资料 资料名判重 教师.学生查看资料列表 学生下载资料 教师在查看已签学生和未签学生页面,可以帮学生补签 学生通过签到码在有效时间内签到 作业的部分: 用Listview显示作业的 ...

  4. 尚医通项目学习笔记Part1

    尚医通项目学习笔记 前言 一.目前学习进度 二.学习记录 1.项目简介 1.1 项目所会用到的技术栈 1.2 业务流程 2.项目学习笔记 2.1MyBatis-Plus相关 2.2搭建项目框架 2.3 ...

  5. Java学习笔记 --- 零钱通项目

    一,项目开发流程说明 1.项目需求: 使用Java开发 零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能 2.项目界面: 二.使用面向过程编程实现: package com.javase. ...

  6. 如何学习开源项目及Ceph的浅析

    摘要:开源技术的学习和采用确实存在着一定门槛,然而学习各种开源项目已经成为许多开发者不可回避的工作内容.那么,对于类似OpenStack的大型开源项目,开发者该如何着手,这里我们看章宇的分享. [编者 ...

  7. 尚医通项目101-123:前台用户系统、登录注册、邮箱登录

    开始时间:2022-05-30 课程链接:课程链接:[尚医通] 前端页面 需要完成医院等级.地区查询.医院列表.医院名称模糊查询等功能 按等级查询 按地区查询 模糊查询 并能跳转到具体详情页面 跳转到 ...

  8. 转: 学习开源项目的若干建议(infoq)

    转: http://www.infoq.com/cn/news/2014/04/learn-open-source 学习开源项目的若干建议 作者 崔康 发布于 2014年4月11日 | 注意:GTLC ...

  9. 【无标题】如何在C#中使用Dapper ORM学习通http://www.bdgxy.com/

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 表格制作excel教程h ...

最新文章

  1. 初级和高级产品运营的分水岭指标:大局观和节奏感
  2. pycharm更换源(换源)(镜像源)
  3. 【转】ROWNUM与ORDER BY先后关系
  4. lr中winsock协议的脚本(转载51testing)
  5. pat 团体天梯赛 L2-012. 关于堆的判断
  6. LeetCode 第 207 场周赛(245/4115,前5.95%)
  7. Python: classmethod staticmethod 区别
  8. mybatis update 不为空的_详解MyBatis-Plus updateById方法更新不了空字符串/null解决方法...
  9. Monte Carlo采样
  10. iphone如何删除“不可删除”的描述文件?(桌面快捷方式web clib)
  11. 腾讯云游戏多媒体解决方案
  12. GoTop给网站加一个悬挂猫效果上吊猫
  13. 多想和你拉手跳恰恰恰
  14. Android app后台服务在锁屏情况下一直运行的方法
  15. imx6 uboot splash image
  16. 静态文档,动态文档和活动文档
  17. LoRaWAN 帧计数机制及典型问题分析
  18. DES加密算法的C++实现
  19. 习题9-3 平面向量加法 (15 分)
  20. 奖状自定义生成(可生成多张)

热门文章

  1. CMMI—产品集成(PI)
  2. MT6572 Extend Key driver tool introduction
  3. FTP暴力破解登陆漏洞复现(Windows Server 2003)
  4. maven项目 报错 Lifecycle mapping quot;org.eclipse.m2e.jdt.JarLifecycleMappingquot; is not available.
  5. 虚拟仿真实验平台 密立根油滴实验(附计算代码)
  6. 南京数字孪生智能工厂,3d可视化工业建模,数字工厂智能车间建设
  7. Ztorg木马分析: 从Android root木马演变到短信吸血鬼
  8. 打通微信小程序自动化部署最后一步-微信第三方平台
  9. JAVA中怎么去掉字符串中间的空格?
  10. xampp的mysql版本_xampp 升级 mysql 版本的经历