• 抽题系统核心。


    前一阵子开发了一个小项目,做了一个抽题系统,主要功能就是根据题目类型、难易程度、题量和分数来抽取对应的题目,生成一套带有答案的试题,话不多说先看实例:

    function super(){
    		for($i=0;$i<101;$i++)
    			$sum[]=$i;
    		$keres=Db::table('ke')->select();
    		if(isset($_POST['sub'])){
    			//接收难度系数比,判断是否和为1
    			$nan=$_POST['nan']/10;
    			$zhong=$_POST['zhong']/10;
    			$yi=$_POST['yi']/10;
    			if($nan+$zhong+$yi!=1)
    				echo "<script>alert('难度系数比错误,请重新选择!');location.href='super/super'</script>";
    			//判断是否选择了科目
    			if(empty($_POST['ke']))
    				echo "<script>alert('请选择科目!');location.href='super/super'</script>";
    			//每个题目的数量
    			$danxuansum=$_POST['danxuan'];
    			$duoxuansum=$_POST['duoxuan'];
    			$panduansum=$_POST['panduan'];
    			$tiankongsum=$_POST['tiankong'];
    			$datisum=$_POST['dati'];
    			$shuliang=$danxuansum;
    			$shuliang.=','.$duoxuansum;
    			$shuliang.=','.$panduansum;
    			$shuliang.=','.$tiankongsum;
    			$shuliang.=','.$datisum;
    			//判断是否选择了题型
    			if($danxuansum==0&&$duoxuansum==0&&$panduansum==0&&$tiankongsum==0&&$datisum==0)
    				echo "<script>alert('请至少选择一种题型!');location.href='super/super'</script>";
    			//接受所有题目的分数
    			$danxuanfs=$_POST['danxuanfs'];
    			$duoxuanfs=$_POST['duoxuanfs'];
    			$panduanfs=$_POST['panduanfs'];
    			$tiankongfs=$_POST['tiankongfs'];
    			$datifs=$_POST['datifs'];
    			//计算分数是否正确
    			$zongfen=$_POST['zongfen'];
    			$zf=$zongfen;
    			$jianyan=$danxuansum*$danxuanfs+$duoxuansum*$duoxuanfs+$panduansum*$panduanfs+$tiankongsum*$tiankongfs+$datisum*$datifs;
    			if($zongfen!=$jianyan)
    				echo "<script>alert('每题分数和总分不符!');location.href='super/super'</script>";
    			if($_POST['text']=="")
    				echo "<script>alert('请输入考试题目!');location.href='super/super'</script>";
    			if($_POST['ktime']=="")
    				echo "<script>alert('请输入考试时间!');location.href='super/super'</script>";
    			//把接受的科目id转化成字符串,方便查找
    			$ke=implode(",",$_POST['ke']);
    			//计算每个难度对应的分数
    			$nansum=$nan*$zongfen;
    			$zhongsum=$zhong*$zongfen;
    			$yisum=$yi*$zongfen;
    			//定义存储随机数字的数组
    			$copy=array();
    			//计算题库tid的最大值
    			$aaa=Db::table('test')->field('count(tid) as max')->find();
    			$max=$aaa['max'];
    			//给定重点题分数
    			$key=ceil($zongfen/2);
    			//定义存储题库tid的数组
    			$tid=array();
    			for($abc=1;$abc>0;$abc++){
    				if($zongfen==0){
    					$tid=implode(',',$tid);
    					$defen=$danxuanfs;
    					$defen.=','.$duoxuanfs;
    					$defen.=','.$panduanfs;
    					$defen.=','.$tiankongfs;
    					$defen.=','.$datifs;
    					$res=Db::table('guodu')->where('id',1)->update(['zongfen'=>$zf,'text'=>input('text'),'ktime'=>input('ktime'),'tihao'=>$tid,'uid'=>Session::get('uid'),'shuliang'=>$shuliang,'defen'=>$defen,'time'=>date('Y-m-d H:i:s',time())]);
    					if($res||$res==0){
    						$this->success('生成中……',url('index/super/xs'));
    					}else
    						$this->error('生成失败!');
    					break;
    				}
    				if(count($copy)==$max){
    					echo "<script>alert('题目数量不足!');location.href='super/super'</script>";
    					break;
    				}
    				//生成随机数字,随机查询题目
    				$sj=rand(1,$max);
    				$res=Db::table('test')
    					->join('jie','jie.jieid=test.jieid')
    					->join('zhang','zhang.zhangid=jie.zhangid')
    					->join('ke','ke.keid=zhang.keid')
    					->where(['tid'=>['=',$sj],'ke.keid'=>['in',$ke]])
    					->field('keyid,nanid,lid')
    					->find();
    				//优先循环重点题目
    				if($res['keyid']!=1&&$key>0)
    					continue;
    				//判断该随机数字是否被抽到过
    				if(in_array($sj,$copy))
    					continue;
    				//储存随机数
    				$copy[]=$sj;
    				//判断某个字段是否有值,如果空则无该题
    				if(empty($res['keyid']))
    					continue;
    				//如果难题分数已够,则跳出循环
    				if($nansum<=0&&$res['nanid']==1)
    					continue;
    				//如果中等题分数已够,则跳出循环
    				if($zhongsum<=0&&$res['nanid']==2)
    					continue;
    				//如果简单题分数已够,则跳出循环
    				if($yisum<=0&&$res['nanid']==3)
    					continue;
    				/******************************************单选筛选***********************************/
    				if($res['lid']==1&&$danxuansum!=0){
    					if($res['nanid']==1){
    						$nansum-=$danxuanfs;
    						$danxuansum--;
    						$zongfen-=$danxuanfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==2){
    						$zhongsum-=$danxuanfs;
    						$danxuansum--;
    						$zongfen-=$danxuanfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==3){
    						$yisum-=$danxuanfs;
    						$danxuansum--;
    						$zongfen-=$danxuanfs;
    						$tid[]=$sj;
    					}
    					if($res['keyid']==1)
    						$key-=$danxuanfs;
    				}
    				/******************************************多选筛选***********************************/
    				if($res['lid']==2&&$duoxuansum!=0){
    					if($res['nanid']==1){
    						$nansum-=$duoxuanfs;
    						$duoxuansum--;
    						$zongfen-=$duoxuanfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==2){
    						$zhongsum-=$duoxuanfs;
    						$duoxuansum--;
    						$zongfen-=$duoxuanfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==3){
    						$yisum-=$duoxuanfs;
    						$duoxuansum--;
    						$zongfen-=$duoxuanfs;
    						$tid[]=$sj;
    					}
    					if($res['keyid']==1)
    						$key-=$duoxuanfs;
    				}
    				/******************************************判断筛选***********************************/
    				if($res['lid']==3&&$panduansum!=0){
    					if($res['nanid']==1){
    						$nansum-=$panduanfs;
    						$panduansum--;
    						$zongfen-=$panduanfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==2){
    						$zhongsum-=$panduanfs;
    						$panduansum--;
    						$zongfen-=$panduanfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==3){
    						$yisum-=$panduanfs;
    						$panduansum--;
    						$zongfen-=$panduanfs;
    						$tid[]=$sj;
    					}
    					if($res['keyid']==1)
    						$key-=$panduanfs;
    				}
    				/******************************************填空筛选***********************************/
    				if($res['lid']==4&&$tiankongsum!=0){
    					if($res['nanid']==1){
    						$nansum-=$tiankongfs;
    						$tiankongsum--;
    						$zongfen-=$tiankongfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==2){
    						$zhongsum-=$tiankongfs;
    						$tiankongsum--;
    						$zongfen-=$tiankongfs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==3){
    						$yisum-=$tiankongfs;
    						$tiankongsum--;
    						$zongfen-=$tiankongfs;
    						$tid[]=$sj;
    					}
    					if($res['keyid']==1)
    						$key-=$tiankongfs;
    				}
    				/******************************************大题筛选***********************************/
    				if($res['lid']==5&&$datisum!=0){
    					if($res['nanid']==1){
    						$nansum-=$datifs;
    						$datisum--;
    						$zongfen-=$datifs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==2){
    						$zhongsum-=$datifs;
    						$datisum--;
    						$zongfen-=$datifs;
    						$tid[]=$sj;
    					}
    					if($res['nanid']==3){
    						$yisum-=$datifs;
    						$datisum--;
    						$zongfen-=$datifs;
    						$tid[]=$sj;
    					}
    					if($res['keyid']==1)
    						$key-=$datifs;
    				}
    			}
    		}
    		return view('super',['keres'=>$keres,'sum'=>$sum]);
    	}
    
    博客园:https://www.cnblogs.com/huixincode
    如果此文章对您有所帮助记得打赏哦,一分也是对我的支持和鼓励,谢谢!
    转载文章请务必保留出处和署名,谢谢!
  • 相关阅读:
    大前端工具集
    Python黑魔法,一行实现并行化
    MRPT
    ./configure 交叉编译库时所最常用到的配置
    Ubuntu16.04 ARM 编译 编译器版本和unordered_map map问题
    ubuntu 16.04 ARM glog移植
    Ubuntu16.04 ARM平台移植libcurl curl-7.63.0
    ubuntu16.04 ARM平台移植xmlrpc-c1.39.12
    ubunt 14.04 Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. Modul
    ubuntu PCL的使用
  • 原文地址:https://www.cnblogs.com/shx1024/p/11931255.html
Copyright © 2020-2023  润新知