项目分析:
1.用户共有的:
登录,注册,忘记密码,个人资料,修改密码
个人资料:包括生日(日期栏选择),手机号,邮箱,学号,姓名
登录需要实现:一个账号只能登录一次,可以通过发送
项目分析(老师端)
老师端:
大致功能点:
- 课程
- 课堂活动(基于我教的课实现)
- 作业(基于我教的课实现)
- 发布资料(基于我教的课实现)
(1)查看课程
- 课程新设界面:可查看该老师已有班级
- 课程可以通过点击进入,实现发布课堂活动,作业,资料功能
- 老师可以查看课程已有学生
- 老师可以删除课程学生
(2)创建课程
- 老师设置课程名(根据不同的专业,年级)
- 随机生成一个邀请码,返回给老师界面
- 老师可查看课程申请加入通知,有同意和拒绝的权利,通过邀请码的可以直接添加
(3)删除课程
- 老师拥有删除课程的权利
课程管理功能:
(1)课程可点击,点击之后开启新页面
- 显示专业+年级+课程名称
- 课堂活动
- 发布作业
- 发布资料
⑵课堂活动:
①课堂签到:
- 老师设置签到的截止时间,可设置小时,分钟,秒数。
- 签到发布成功后开始计时,并且随机生成签到码,同时可让老师选择签到码是否在一定时间内改变的选项
- 设置五分钟间隔时间,五分钟过后可重新发布课堂签到,如果同一个课程已有一个正在执行的签到,上一个签到设置自动废止。(不同课程之间互不影响)
- 老师界面设置签到,未签到同学的查看,在未签页面为同学设置补签按钮,设置补签选择框,选择未签同学的名字帮同学补签
②课堂随机选人
- 获得这个班级所有的成员id后放进一个集合,获得集合的数量,然后根据random函数从0-n随机生成一个下标,去集合中返回对应的学生
- 避免多次随机选人,设置按钮可见或不可见,只有当上一次随机选人完成之后才能执行下一次随机选人。(不同课程之间互不影响)
(3)作业:
①发布作业
- 设计班级菜单栏,添加对应的班级选项
- 老师设置作业的标题,作业内容(目前只实现主观题,可以发布文字,图片或者是文件的方式代替),截止日期
- 设置作业发布视图,老师可查看已经发布的作业,并且可以删除已发布的作业或者延长时间
②批改作业
- 设计班级菜单栏,添加对应的班级选项
- 老师可以查看已完成同学和未完成的同学
- 老师可在已完成同学的界面点开同学,查看已完成同学具体的作业详情,并且实现打分和老师批语
(4)发布资料
- 设计班级菜单栏,添加对应的班级选项
- 老师选择需要上传的资料,以文件的形式发布到班级中
项目分析(学生端)
学生端:
大致功能点:
- 加入课程
- 课堂活动(基于我学的课实现)
- 完成作业(基于我学的课实现)
- 下载资料(基于我学的课实现)
(1)加入课程
- 输入课程邀请码,不需要经过老师的同意
- 通过选择专业,年级,输入课程名之后查找课程名称加入(需要经过老师的同意)
我学的课:
(1)课程可点击,点击之后开启新页面
- 显示老师:这门课程
- 课堂活动
- 作业
- 下载资料
⑵课堂活动:
①课堂签到:
- 显示课堂签到活动的截止时间和倒计时,签到必须输入正确的签到码
- 签到截止前显示:签到成功 截止后签到自动显示:未签到
- 签到之后,设置该按钮禁用,直到班级老师重新发布签到
②课堂随机选人
- 查看界面:显示该同学的名字和头像
③课堂问题抢答
- 显示课堂抢答的标题,内容
- 设置一个抢答的按钮,设置抢答禁用按钮,未发布或者已完成抢答禁用按钮
(3)作业:
①查看作业
- 设置消息栏,不同的课程给不同的作业通知和作业查看,根据点击作业查看具体内容
- 截止时间已过,如果老师已批改,可查看对应的分数
②完成作业
- 显示课程的作业内容,截止时间
- 给出一个文本输入框和功能框,功能框中含有图片和附件,完成作业可以文本输入,图片,或者文件上传
- 在截止时间之前可以修改答案
(4)下载资料
- 预览界面:可以显示该资料的具体内容
- 下载按钮,将文件下载到本地
首先是重新优化了项目分析和ER图
项目进展:
已经是实现了个人修改资料,在资料里面修改密码,老师创建课程,学生添加课程,老师删除课程,退出系统关闭socket,结束进程。
还有就是通过ListView会将在页面初始化的时候将老师和学生已有的课程显示出来,
就是还没实现双击点击进入课程。
还有一个最大的问题,上面所有发请求 都是基于短连接,而不是基于长连接。这个是很大的一个问题,由于登录之后开启的是长连接,上面的功能点应该都是基于长连接实现而不是短连接。但是长连接我目前写的有一点不对,服务端应该要重新在写一个新线程来跟客户端通信。所以这几天先把长连接做好再继续进行下面的项目。
学习:JavaFX日历组件的使用:
这个我用在了个人资料的生日的获取,有一个很重要的点就是,日历能加载的时间不能过于离谱,所以学习了日历限制:
/**
* 限制 DatePicker 控件只能选择不超过最大可选日期的日期。
*
* @param datePicker
*/
public static void limitDate(DatePicker datePicker) {
// 将 DatePicker 的最大可选日期设置为当天
datePicker.setValue(LocalDate.now());
// 禁止选择比最大可选日期更晚的日期
datePicker.setDayCellFactory(picker -> new DateCell() {
@Override
public void updateItem(LocalDate item, boolean empty) {
super.updateItem(item, empty);
LocalDate maxDate = picker.getValue();
if (item.isAfter(maxDate)) {
setDisable(true);
}
}
});
}