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中输出转义JavaScript代码的实现代码
Apr 22 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
php实现读取和写入tab分割的文件
Jun 01 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
利用Laravel事件系统如何实现登录日志的记录详解
May 20 PHP
php实现网页端验证码功能
Jul 11 PHP
PDO::errorInfo讲解
Jan 28 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
Jun 12 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版(4)
2006/10/09 PHP
php debug 安装技巧
2011/04/30 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
JS 事件绑定函数代码
2010/04/28 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
JS交换变量的方法
2015/01/21 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
Python列表元素常见操作简单示例
2019/10/25 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
肯尼迪就职演说稿
2013/12/31 职场文书
大学毕业感言200字
2014/03/09 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
英语专业自荐书
2014/06/13 职场文书
党支部三会一课计划
2014/09/24 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
演讲比赛主持词
2015/06/29 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript