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)); }
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)); }
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; })); }