ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法


Posted in PHP onNovember 12, 2016

本文实例讲述了ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法。分享给大家供大家参考,具体如下:

在作业管理系统中,学生登陆到个人中心后可以通过左侧的菜单查看自己已经提交的作业和未提交作业。那么在系统中如何实现这些数据的查询的呢?首先我们需要弄清楚学生(Student)、班级(class)、作业提交表(Submit)这三个表之间的关系。

1. 每个学生都属于一个班级

2. 班级里的每个学生都会被布置同样的作业

3. 学生提交作业后会在作业提交表中添加响应的记录,如学生的ID,作业的ID,提交的内容等。

可以按照以下步骤获取学生已交作业和未交作业

1. 获取学生所在班级的所有作业

//获取学生所在班级的所有作业
 public function getTasks($stuno)
 {
 $stu=$this::get(['stu_no'=>$stuno]);
 $clas=Clas::get(['clas_id'=>$stu['clas_id']]);
 return $clas->task;
 }

由上述代码课看出,首先根据学号($stuno)获取学生信息,通过学生信息表保存的班级ID(clas_id)再获取学生所在班级信息,最后通过班级与作业表之间的多对多的关系(详见Thinkphp5官方手册关于模型的关联部分内容),获取该学生所在班级所布置的所有作业。

2. 获取学生未交作业

//获取某学生所有未交作业
 public function getUnSubmitTasks($stuno)
 {
 $stu=$this::get(['stu_no'=>$stuno]);
 $alltask=$this->getTasks($stuno);
 foreach($alltask as $key=>$value)
 {
  if(Submit::get(['task_id'=>$value['task_id'],'stu_id'=>$stu['stu_id']]))
  {
  unset($alltask[$key]);//删除已提交作业
  }
 }
 return $alltask;
 }

该函数首先调用获取全部作业的函数($this->getTasks($stuno))获得了学生所在班级的所有作业。这个数据集是一个二维数组,遍历这个二维数组,看看这个二维数组中是否有作业已经被该学生提交到了Submit中,如果提交了就删除该元素。

3.获得学生已交作业

有了上述两个函数,获取已交作业的事情就变的简单了,第一个函数获得的二维数组减去第二个函数所返回的数组就是学生已交作业的集合,做下二维数组的求差即可

//获取某学生所有已交作业(所有作业和未交作业的差集)
 public function getSubmitTasks($stuno)
 {
 $unsubmit=$this->getUnSubmitTasks($stuno);
 $alltasks=$this->getTasks($stuno);
 $submittasks=array();
 foreach ($alltasks as $key=>$value)
 {
  if(!in_array($value,$unsubmit))
  {
  $submittasks[]=$value;
  }
 }
 return $submittasks;
 }

以上就是我在使用ThinkPHP5建立学生作业管理系统实践中对学生作业列表的解决办法,如果您有更好的方法,欢迎批评指正!

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php仿discuz分页效果代码
Oct 02 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php知道与问问的采集插件代码
Oct 12 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
使用PHP生成PDF方法详解
Jan 23 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
PHP分页显示的方法分析【附PHP通用分页类】
May 10 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
实例分析10个PHP常见安全问题
Jul 09 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 #PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 #PHP
PHP上传图片、删除图片简单实例
Nov 12 #PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 #PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 #PHP
thinkPHP多语言切换设置方法详解
Nov 11 #PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 #PHP
You might like
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
python实现在IDLE中输入多行的方法
2018/04/19 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
什么是python的必选参数
2020/06/21 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
华为的Java面试题
2014/03/07 面试题
村干部培训方案
2014/05/02 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
市场营销计划书
2015/01/17 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
初中教师个人工作总结
2015/02/10 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python