学习网站作业 测试功能 思路与实现

最近在做一个关于学习的网站,有一个作业 测试的功能, 想记录一下:
用的 thinkphp3.2
这是界面


QQ截图20170929114111.png

控制器:

//测试
public function ztest(){
        //课时id
        $id = I("hour_id");
        $field = "test";
        $uid = $_SESSION['user_id'];
        $page = 0;
        $section = M('course_section')->field($field.',sc_name')->where("id = '$id'")->find();
        $arr = explode(',', $section[$field]);
        $count = count($arr);
        foreach($arr as $k => $v){
            $ti = M('exam_shiti')->where("id = '$v'")->find();
            $old = M('course_test')->where("uid = '$uid' and tid = '$v' and type = '2'")->find();
            if($old){
                $ti['old'] = 1;
                $ti['old_val'] = $old['val'];
                if($ti['typeid'] < 4){
                    if($ti['daan'] == $old['val']){
                        $yesstr .= "1".',';
                        $ti['jie'] = '<span style="color:green;">正确</span>。'.htmlspecialchars_decode($ti['analysis']);
                    }else{
                        $yesstr .= "0".',';
                        $ti['jie'] = '<span style="color:red;">错误</span>。正确答案:'.$ti['daan'].htmlspecialchars_decode($ti['analysis']);
                    }
                }else{
                    $yesstr .= "1".',';
                    $ti['jie'] = '<span style="color:green;">正确</span>。'.htmlspecialchars_decode($ti['analysis']);
                }
            }else{
                $ti['old'] = 2;
            }
            if($k == $count-1){
                $ti['ready'] = 1;
            }
            $tiarr[] = $ti;
        }
        if(substr($yesstr, -1) == ','){
            $yesstr = substr($yesstr, 0,-1);
        }
        if(isset($_POST['page'])){  // 类似于上一页下一页   ajax下一题上一题处理地点
            if($_POST['page'] > count($tiarr)){
                echo 'no';die;
            }
            $page = $_POST['page']-1;
        }
        if(isset($_POST['val'])){  //  判断正确与否  ajax提交处理地点
            $val = $_POST['val'];
            $tid = $_POST['id'];
            $dati = M('exam_shiti')->field('daan,analysis')->where("id = '$tid'")->find();
            if($_POST['xing'] < 4){
                if($dati['daan'] == $val){
                    $res['da'] = '正确';
                }else{
                    $res['da'] = '错误';
                }
            }else{
                $res['da'] = '正确';
            }
            $res['txt'] = '正确答案:'.$dati['daan'].htmlspecialchars_decode($dati['analysis']);
            echo json_encode($res);die;
        }
        
        //查询是否已收藏
        $ttid = $tiarr[$page]['id'];
        $uid = $_SESSION['user_id'];
        $coll = M('exam_collect')->where("exam_id = '$ttid' and uid = '$uid' and type = '1'")->find();
        
        $this->assign('yesstr',$yesstr);
        $this->assign('coll',$coll);
        $this->assign('hour_id',$id);
        $this->assign('section',$section);
        $this->assign('page',$page+1);
        $this->assign('ti',$tiarr[$page]);   //以数组下标做分页显示
        $this->assign('webname','我的课程');
        $this->display();
    }

    //储存答案
    public function subti(){
        $val = I('val');
        $id = I('id');
        $sid = I('sid');
        $type = I('type');
        $uid = $_SESSION['user_id'];
        $data['val'] = $val;
        $data['tid'] = $id;
        $data['uid'] = $uid;
        $data['sid'] = $sid;
        $data['type'] = $type;
        
        $add = M('course_test')->add($data);
    }
    //删除答案
    public function delti(){
        $id = I('id');
        $uid = $_SESSION['user_id'];
        $del = M('course_test')->where("uid = '$uid' and sid = '$id' and type = '2'")->delete();
    }

首先是提交功能,分辨题型,去数据库比对对错,返回答案,显示:
注,客户要求,问答题和材料题直接返回正确

//作业提交答案
//xing 题型  1选择  2填空  3判断  4 问答  5材料题
// e 点击对象,id 题ID,path  ajax地址(判断正确与否),cunpath ajax地址(保存答案),sid 课时ID
//Fraction  有是测试   测试需要返回分数,且可以重复做题   、无是作业,  只能做一次,不需要打分
function subti(e,id,xing,path,cunpath,sid,Fraction){
    var val,type;
    if(xing == 1){//选择题
        val = $("input[name='daan']:checked").val();
    }else if(xing == 2){//填空题
        val = $("input[name='daan']").val();
    }else if(xing == 3){//判断题
        val = $("input[name='daan']:checked").val();
    }else if(xing == 4 || xing == 5){
        val = $("textarea[name='daan']").val();
    }
    if(Fraction){
        type = 2;
    }else{
        type = 1;
    }
    $.post(cunpath,{id:id,val:val,type:type,sid:sid},function(data){  //保存答案到数据库
        console.log(data);
    })
    $.post(path,{val:val,id:id,xing:xing},function(data){  //判断返回内容
        var res = JSON.parse(data);
        if(res.da == '正确'){
            if(Fraction){
                var f = $("#Fraction").val();
                if(f != ''){  //页面储存正确与否,打分用
                    $("#Fraction").val(f+','+'1');
                }else{
                    $("#Fraction").val('1');
                }
            }
            var html = "<span style='color:green;'>"+res.da+"</span>";
        }else{
            if(Fraction){
                var f = $("#Fraction").val();
                if(f != ''){  //页面储存正确与否,打分用
                    $("#Fraction").val(f+','+'0');
                }else{
                    $("#Fraction").val('0');
                }
            }
            var html = "<span style='color:red;'>"+res.da+"</span>";
        }
        html += "。"+res.txt;
        $("#daancontent").html(html);
        $("#daancontent").show();
        $(e).hide();
        $(e).next().show()
    })
}

点击提交后,显示对错,并且显示正确答案与解析。 提交按钮变成下一题


image.png

点击下一题

//作业测试上一题下一题
// e 本对象  , type  作业or测试  ,id  课时ID  ,path ajax发送地址(上下题)
//endpath  ajax发送地址(测试的话测试完成需要删除答案记录)
// Fraction  有就是测试   无就是作业
function nextti(e,type,page,id,path,endpath,Fraction){
    if(type == 'next'){//下一题
        page += 1;
    }else if(type == 'prev'){
        page = page-1;
    }
    $.post(path,{page:page,hour_id:id},function(data){
        if(data == 'no'){  //返回no  没有下一题了
            if(Fraction){
                var f = $("#Fraction").val();
                var arr = f.split(",");
                var j = 0;
                for(var i=0;i<arr.length;i++){
                    if(arr[i] == 1){
                        j++;
                    }
                }
//              console.log(j);
                var zf =  Math.ceil((100/arr.length)*j);
                layer.open({
                    title:'提示',
                    shadeClose: false, //点击遮罩关闭
                    content: "最终得分"+ zf,
                    end: function(index, layero){
                        $.post(endpath,{id:id},function(){
                            href('/index.php?g=portal&m=MyCourse&a=mycourse');
                        })
                    }
                });
            }else{
                layer.open({
                    title:'提示',
                    shadeClose: false, //点击遮罩关闭
                    content: "作业做完啦",
                    end: function(index, layero){
                        href('/index.php?g=portal&m=MyCourse&a=mycourse');
                    }
                });
                
            }
        }else{
            var i = $("#aaaa",data);
            $("#aaa").html(i);
        }
    })
//  console.log(val);/
}

点击下一题

image.png
image.png
image.png
image.png

大概就是个这, 能参考的参考一下吧~~
可能有点乱,不太容易看,。。。
反正我也就是记录一下, 万一以后用的着呢。~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容