欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

thinkphp关于考生信息相关统计

程序员文章站 2022-06-05 09:19:40
...

最近做的系统里面需要统计,写了一个案例,方便自己以后查看

相关数据表和字段名:

1.考生信息表(tb_examinee)

序号 字段名 数据类型 约束条件 备注
1 eid int

主键

自增
2 idnum char(18) 非空 身份证号码
3 truename varchar(50) 非空 姓名
4 category int 非空 毕业类别
1:普高
2:职高
5 examyear int 非空 考试年份
6 intent1 varchar(50) 非空 第一志愿
7 intent2 varchar(50)   第二志愿
8 ispass int 非空 审核状态
0:未通过审核
1:通过审核
9 isregister int   报道状态
0:未报到
1:报到
10 score float(5,2)   成绩
11 inter varchar(50) 非空 录取专业
12 status int 非空 是否被禁用
-1:被删除
0:禁用
1:正常使用

2.招生计划详情(tb_plan)

序号 字段名 数据类型 约束条件 备注
1 pid int 主键 自增
2 examyear int 非空 年份
3 major varchar(50) 非空 专业名称
4 department varchar(50) 非空 所属院系
5 num1 int   普高计划人数
6 num2 int   职高计划人数
7 status int   是否被禁用
-1:被删除
0:禁用
1:正常使用

因为统计的东西比较多,所以单独写了一个类文件

在Application/Admin/下---->新建Login文件夹---->新建ExamineeLogic.class.php类(类名必须对应一张数据表,即文件名为某张数据表的名字)

ExamineeLogic.class.php

该类的命名空间和继承:

<?php
namespace Admin\Logic;
use Think\Model;
class ExamineeLogic extends Model{
       /**
          年份详情
       **/	
	public function getExamyear(){
	    $Examinee=M('Examinee');
	    $condition['status']=1; //正常使用
	    $examyear=$Examinee->distinct(true)->field('examyear')->where($condition)->order('eid asc')->select();
	    foreach($examyear as $v){
		$examyearsArr[]=$v['examyear'];
	    }
	    return $examyearsArr;
	}
	/**
	   专业详情
	**/
	public function getMajorInfo(){
	    $Plan=M('Plan');
	    if($search_text=I("search_text")){//接收查询信息
		 $condition['major']=array("like","%$search_text%");//模糊查询
	    }
	    $condition['status']=1; //正常使用
	    $majorInfo=$Plan->distinct(true)->field('major')->where($condition)->order('pid asc')->select();
	    return $majorInfo;
	}
	/**
	   组建查询方法
	   @inter 专业	   
	   @examyear 年份
	   @type
	   @category 普高|职高 == 1|2	    
	**/
	public function getMajorCounts($inter,$examyear,$type,$category){	   
	   $Examinee=M('Examinee');
	   $conditions['status']=1; //正常使用	     
	   switch($type){
	       case 1:  //报名总人数		         		 
		       $condition1['intent1']=$inter;
		       $condition1['examyear']=$examyear;
		       $condition1['category']=$category;
		       $conditions=$condition1;
	               break;
	       case 2: //通过审核数		         		 
		       $condition2['intent1']=$inter;
		       $condition2['examyear']=$examyear;
		       $condition2['category']=$category;
		       $condition2['ispass']=1;
		       $conditions=$condition2;
	               break;
	       case 3: //已报到的人数		         				 
		         $condition3['intent1']=$inter;
			 $condition3['examyear']=$examyear;
			 $condition3['category']=$category;
			 $condition3['isregister']=1;
			 $conditions=$condition3;
	                 break;
	       case 4: //录取的人数		         
		         $condition4['inter']=$inter;
		         $condition4['examyear']=$examyear;		         
			 $condition4['category']=$category;
		         $conditions=$condition4;
	                 break;
	   }	
	   $examineeCounts=$Examinee->where($conditions)->count();
	   return $examineeCounts; 	 
	}
	/**
	   普高职高计划人数
	   @inter 专业	   
	   @examyear 年份
	   @type
	   @return nums 返回人数
	**/
	public function getMajorNums($inter,$examyear,$type){
		$Plan=M('Plan');
		$condition['status']=1;
		$condition['major']=$inter;
		$condition['examyear']=$examyear;
		switch($type){
		     case 1:  //普高计划人数
			   $nums=$Plan->where($condition)->getField('num1');
		           break;
		     case 2: //职高计划人数
			   $nums=$Plan->where($condition)->getField('num2');
		           break; 
		}
		return $nums;
	}
        /**
	   统计各专业人数并封装数组
	**/
        public function getExamineeCountsArr(){
	    $majorArr=$this->getMajorInfo();
	    $examyearArr=$this->getExamyear();
		$i=0;
		foreach($majorArr as $value){
		     $arr[$i]['major']=$value['major']; //专业
		     foreach($examyearArr as $v){ //年份
			     $arr[$i][$v]['nums1']=$this->getMajorNums($value['major'],$v,1); //普高计划人数 
			     $arr[$i][$v]['nums2']=$this->getMajorNums($value['major'],$v,2); //职高计划人数
			     $arr[$i][$v]['nums3']=$this->getMajorCounts($value['major'],$v,1,1);  //报名总人数 普高
			     $arr[$i][$v]['nums4']=$this->getMajorCounts($value['major'],$v,1,2);  //报名总人数 职高
			     $arr[$i][$v]['nums5']=$this->getMajorCounts($value['major'],$v,2,1);  //通过审核总人数 普高
			     $arr[$i][$v]['nums6']=$this->getMajorCounts($value['major'],$v,2,2);  //通过审核总人数 职高
			     $arr[$i][$v]['nums7']=$this->getMajorCounts($value['major'],$v,3,1);  //已报到人数 普高
			     $arr[$i][$v]['nums8']=$this->getMajorCounts($value['major'],$v,3,2);  //已报到人数 职高
			     $arr[$i][$v]['nums9']=$this->getMajorCounts($value['major'],$v,4,1);  //录取总人数 普高
			     $arr[$i][$v]['nums10']=$this->getMajorCounts($value['major'],$v,4,2); //录取总人数 职高
			 } 
		     $i++;		
		}	
	    return $arr;
	}
}
?>
SubtotalController.class.php  
该控制器调用以上统计的方法:

       /***
        专业人数统计,包括入学性质
	***/
	public function majorCounts()
	    $ExamineeLogic=D("Examinee","Logic");
	    $this->assign('examineeCountsArr',$ExamineeLogic->getExamineeCountsArr());
	    $this->display("Subtotal/majorCounts");
	}

majorCounts.html

模板页输出:

<table class="table table-bordered table-striped" id="table-info">    
    <thead><tr><th rowspan="2">序号</th><th rowspan="2">专业</th><th colspan="5" class="year">2016(普高|职高)</th><th colspan="5" class="year">2017(普高|职高)</th></tr>
           <tr><th class="planNum">计划数</th><th class="regNum">报名人数</th><th class="ispassNum">通过审核人数</th><th class="isregisterNum">已报到的人数</th><th class="enrollNum">录取人数</th>
           <th class="planNum">计划数</th><th class="regNum">报名人数</th><th class="ispassNum">通过审核人数</th><th class="isregisterNum">已报到的人数</th><th class="enrollNum">录取人数</th>
           </tr>
    </thead>
    <tbody>
        <volist name="examineeCountsArr" id="vo">
             <tr>
                <td>{$i}</td>
                <td>{$vo.major}</td>
                <td class="planNum">{$vo[2016].nums1}|{$vo[2016].nums2}</td>
                <td class="regNum">{$vo[2016].nums3}|{$vo[2016].nums4}</td>
                <td class="ispassNum">{$vo[2016].nums5}|{$vo[2016].nums6}</td>
                <td class="isregisterNum">{$vo[2016].nums7}|{$vo[2016].nums8}</td>
                <td class="enrollNum">{$vo[2016].nums9}|{$vo[2016].nums10}</td>
                
                <td class="planNum">{$vo[2017].nums1}|{$vo[2017].nums2}</td>
                <td class="regNum">{$vo[2017].nums3}|{$vo[2017].nums4}</td>
                <td class="ispassNum">{$vo[2017].nums5}|{$vo[2017].nums6}</td>
                <td class="isregisterNum">{$vo[2017].nums7}|{$vo[2017].nums8}</td>
                <td class="enrollNum">{$vo[2017].nums9}|{$vo[2017].nums10}</td>
             </tr>
        </volist>          
    </tbody>
</table>