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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
PHP4实际应用经验篇(4)
Oct 09 PHP
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
利用PHP制作简单的内容采集器的原理分析
Oct 01 PHP
PHP 采集程序中常用的函数
Dec 09 PHP
PHP CURL获取返回值的方法
May 04 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
php判断访问IP的方法
Jun 19 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
php中inlcude()性能对比详解
2012/09/16 PHP
php session的应用详细介绍
2017/03/22 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python中dir函数用法分析
2015/04/17 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
python实现图片识别汽车功能
2018/11/30 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
优秀员工自荐信范文
2013/10/05 职场文书
自我评价范文分享
2014/01/04 职场文书
健康教育评估方案
2014/05/25 职场文书
励志演讲稿200字
2014/08/21 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书