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 相关文章推荐
第三节--定义一个类
Nov 16 PHP
特转载一高手总结PHP学习资源和链接.
Dec 05 PHP
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
php实现面包屑导航例子分享
Dec 19 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
详解PHP实现定时任务的五种方法
Jul 25 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
PHP程序员学习使用Swoole的理由
Jun 24 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 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生成月历代码
2007/06/14 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
JavaScript生成简单等差数列
2017/11/28 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
python使用分治法实现求解最大值的方法
2015/05/12 Python
python开发之thread线程基础实例入门
2015/11/11 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
python os.fork() 循环输出方法
2019/08/08 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
python实现计算器功能
2019/10/31 Python
python异步Web框架sanic的实现
2020/04/27 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
Python读取yaml文件的详细教程
2020/07/21 Python
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
市场营销毕业求职信
2014/08/07 职场文书
谢师宴家长致辞
2015/07/27 职场文书
初一英语教学反思
2016/02/15 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
Pandas自定义选项option设置
2021/07/25 Python