Beispiel #1
0
        public JsonResult Sub_Ans(string ans, long pqid, long cost, string ecid)
        {
            ans = ans.Replace("\r\n", " ");
            ans = ans.Replace("###", "select");
            ans = ans.Replace("!!!", "delete");
            long   id        = (long)Session["id"];
            string account   = (string)Session["account"];
            long   ec_id     = long.Parse(ecid);
            string username  = (string)Session["account"];
            var    dbq       = db.paper_ques.Find(pqid);
            var    q         = dbq.question;
            var    back      = q.qbase_chapter.background;
            string back_name = back.name;
            var    log       = new stu_ans_log();
            var    res       = new Tuple <string, bool>("", false);

            if (back.db == "Kingbase")
            {
                KingbaseConn conn = new KingbaseConn();
                res = conn.JudgeSql(username, q, ans, back_name);
                conn.Dispose();
            }
            else if (back.db == "Mysql")
            {
                MysqlConn conn = new MysqlConn(username);
                res = conn.JudgeSql($"Student_{username}", q, ans, back_name);
                conn.Dispose();
            }
            else if (back.db == "MSSQL")
            {
                MSSQLConn conn = new MSSQLConn(username);
                res = conn.JudgeSql($"Student_{username}", q, ans, back_name);
                conn.Dispose();
            }
            log.ans        = ans;
            log.paper_ques = dbq;
            log.stu_info   = db.stu_info.Find(id);
            log.wronginfo  = res.Item1;
            log.cost       = new TimeSpan(cost);
            log.exam_class = db.exam_class.Find(ec_id);
            Save_Ans(ans, pqid, res.Item2);
            db.stu_ans_log.Add(log);
            db.SaveChanges();
            var json = new {
                message = res.Item1,
                judge   = res.Item2
            };

            return(Json(json, JsonRequestBehavior.AllowGet));
        }
Beispiel #2
0
        public async Task <ActionResult> Sub_Ans_Exam(long ecid, long[] pqid, string[] anss, long[] costs)
        {
            long id        = (long)Session["id"];
            var  examclass = db.exam_class.Find(ecid);
            var  stuinfo   = db.stu_info.Find(id);
            var  logs      = new List <stu_ans_log>();
            var  ress      = new List <Task <Tuple <double, string> > >();

            for (var i = 0; i < anss.Length; i++)
            {
                anss[i] = anss[i].Replace("###", "select");
                anss[i] = anss[i].Replace("!!!", "delete");
                var log = new stu_ans_log();
                log.ans        = anss[i];
                log.paper_ques = db.paper_ques.Find(pqid[i]);
                log.exam_class = examclass;
                log.cost       = TimeSpan.FromSeconds(costs[i]);
                var qid = log.paper_ques.question.id;
                var bid = log.paper_ques.question.qbase_chapter.background.id;
                log.stu_info = stuinfo;
                logs.Add(log);
                ress.Add(GetScoreAsync(qid, bid, log));
            }
            for (var i = 0; i < anss.Length; i++)
            {
                var log = logs[i];
                var res = await ress[i];
                log.wronginfo = res.Item2;
                log.score     = (decimal)res.Item1;
            }
            string except = "";

            db.stu_ans_log.AddRange(logs);
            try { db.SaveChanges(); }
            catch (DbEntityValidationException e) {
                except = tf.AnalyseError(e);
            }
            return(Content(except));
        }
Beispiel #3
0
 public async Task <Tuple <double, string> > GetScoreAsync(long qid, long bid, stu_ans_log log)
 {
     /*var res = new Tuple<double, string>(0, "超时");
      * var tsk = new Task(() =>
      * {
      *  var question = db.question.Find(qid);
      *  var background = db.background.Find(bid);
      *
      *  if (question.q_type <= 2) {
      *      res = Judge_sql(question, background, log.ans);
      *  } else if (question.q_type >= 3 && question.q_type <= 5) {
      *      res = new Tuple<double, string>(0, "答案错误");
      *      if (question.right_answer == log.ans) {
      *          res = new Tuple<double, string>(10, "congratulations!!");
      *      }
      *  }
      * });
      * var cts = new CancellationTokenSource();
      * tsk.Start();
      * cts.CancelAfter(2000);
      * return res;*/
     return(await Task.Run(() =>
     {
         var question = db.question.Find(qid);
         var background = db.background.Find(bid);
         var res = new Tuple <double, string>(0, "答案错误");
         if (question.q_type <= 2)
         {
             res = Judge_sql(question, background, log.ans);
         }
         else if (question.q_type >= 3 && question.q_type <= 5)
         {
             res = new Tuple <double, string>(0, "答案错误");
             if (question.right_answer == log.ans)
             {
                 res = new Tuple <double, string>(10, "congratulations!!");
             }
         }
         return res;
     }));
 }