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执行速度全攻略(上)
Oct 09 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
php图片上传存储源码并且可以预览
Aug 26 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
php引用传值实例详解学习
Nov 06 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 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 批量更新网页内容实现代码
2010/01/05 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
PHP中的session安全吗?
2016/01/22 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
深入分析PHP设计模式
2020/06/15 PHP
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
python 图片验证码代码分享
2012/07/04 Python
python 多线程应用介绍
2012/12/19 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
一份python入门应该看的学习资料
2018/04/11 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
python 循环数据赋值实例
2019/12/02 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
python字典按照value排序方法
2020/12/28 Python
华三通信H3C面试题
2015/05/15 面试题
光盘行动倡议书
2014/02/02 职场文书
护林防火标语
2014/06/27 职场文书
入党转正申请书范文
2019/05/20 职场文书
Python机器学习之基础概述
2021/05/19 Python