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 相关文章推荐
php4的彩蛋
Oct 09 PHP
smarty的保留变量问题
Oct 23 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
PHP内置的Math函数效率测试
Dec 01 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
PHP安装BCMath扩展的方法
Feb 13 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 str_replace的替换漏洞
2008/03/15 PHP
php实现的农历算法实例
2015/08/11 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
vue实现多级菜单效果
2019/10/19 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
高三历史教学反思
2014/01/09 职场文书
运动会开幕式主持词
2014/03/28 职场文书
医德考评自我评价
2014/09/14 职场文书
春季运动会开幕词
2015/01/28 职场文书
索尼ICF-5900W收音机测评
2022/04/24 无线电
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android