ZhiYeJianKang_PeiXun/Song.Site/TestView.ashx.cs
2025-02-20 15:41:53 +08:00

422 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WeiSha.Common;
using Song.ServiceInterfaces;
using Song.Entities;
using System.Xml;
namespace Song.Site
{
/// <summary>
/// 测试成绩回顾
/// </summary>
public class TestView : BasePage
{
//测试成绩记录的Id
int trid = WeiSha.Common.Request.QueryString["trid"].Int32 ?? 0;
XmlDocument resXml = new XmlDocument();
protected override void InitPageTemplate(HttpContext context)
{
Song.Entities.TestResults result = Business.Do<ITestPaper>().ResultsSingle(trid);
if (result == null) return;
this.Document.Variables.SetValue("result", result);
//试卷
Song.Entities.TestPaper tp = Business.Do<ITestPaper>().PagerSingle((int)result.Tp_Id);
if (tp == null) return;
this.Document.Variables.SetValue("pager", tp);
//考生
Song.Entities.Accounts st = Business.Do<IAccounts>().AccountsSingle((int)result.Ac_ID);
this.Document.Variables.SetValue("st", st);
//加载答题信息
resXml.LoadXml(result.Tr_Results, false);
//获取试题项
Song.Entities.TestPaperItem[] tpi = getTpi(tp);
this.Document.Variables.SetValue("tpi", tpi);
//计算得分
this.Document.RegisterGlobalFunction(this.getTypeName);
this.Document.RegisterGlobalFunction(this.getTypeNumber);
this.Document.RegisterGlobalFunction(this.getAnswerCount);
this.Document.RegisterGlobalFunction(this.getSucessCount);
this.Document.RegisterGlobalFunction(this.getErrorCount);
//展示答题状态
this.Document.RegisterGlobalFunction(this.getQues);
this.Document.RegisterGlobalFunction(this.getItems);
//计算答题状态等
this.Document.RegisterGlobalFunction(this.getAnswerState);
//获取学生答题内容与正确答案
this.Document.RegisterGlobalFunction(this.getResult);
this.Document.RegisterGlobalFunction(this.getSucessAnswer);
this.Document.RegisterGlobalFunction(this.getQuesScore);
}
/// <summary>
/// 获取试题的大项
/// </summary>
/// <returns></returns>
private Song.Entities.TestPaperItem[] getTpi(Song.Entities.TestPaper tp)
{
Song.Entities.TestPaperItem[] tpi = Business.Do<ITestPaper>().GetItemForAny(tp);
List<TestPaperItem> list = new List<TestPaperItem>();
XmlNodeList quesNodes = resXml.LastChild.ChildNodes; //当前答案中的试题分类项
foreach (Song.Entities.TestPaperItem t in tpi)
{
for (int i = 0; i < quesNodes.Count; i++)
{
int type = Convert.ToInt32(quesNodes[i].Attributes["type"].Value);
if (t.TPI_Type == type)
{
list.Add(t);
break;
}
}
}
return list.ToArray();
}
#region
/// <summary>
/// 获取类型名
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private string getTypeName(object[] id)
{
int type = 0;
if (id.Length > 0 && id[0] is int) type = Convert.ToInt32(id[0]);
return WeiSha.Common.App.Get["QuesType"].Split(',')[type-1];
}
/// <summary>
/// 该类型得分
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private string getTypeNumber(object[] id)
{
int type = 0;
if (id.Length > 0 && id[0] is int) type = Convert.ToInt32(id[0]);
XmlNode root = resXml.LastChild;
XmlNodeList quesNodes = root.ChildNodes;
double score = 0;
for (int i = 0; i < quesNodes.Count; i++)
{
int tp = Convert.ToInt32(quesNodes[i].Attributes["type"].Value);
if (tp == type)
{
//小题的节点
XmlNodeList qnode = quesNodes[i].ChildNodes;
for (int j = 0; j < qnode.Count; j++)
{
bool isSuccess = false;
bool.TryParse(qnode[j].Attributes["sucess"].Value, out isSuccess);
if (isSuccess)
{
double num = 0;
double.TryParse(qnode[j].Attributes["score"].Value, out num);
score += num;
}
}
}
}
return score.ToString();
}
/// <summary>
/// 答题数
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private string getAnswerCount(object[] id)
{
int type = 0;
if (id.Length > 0 && id[0] is int) type = Convert.ToInt32(id[0]);
XmlNode root = resXml.LastChild;
XmlNodeList quesNodes = root.ChildNodes;
int count = 0;
for (int i = 0; i < quesNodes.Count; i++)
{
int tp = Convert.ToInt32(quesNodes[i].Attributes["type"].Value);
if (tp == type)
{
//小题的节点
XmlNodeList qnode = quesNodes[i].ChildNodes;
for (int j = 0; j < qnode.Count; j++)
{
string ans="";
ans = type == 1 || type == 2 || type == 3 ? qnode[j].Attributes["ans"].Value : qnode[j].InnerText;
ans = ans.Replace(",","");
if (!(string.IsNullOrWhiteSpace(ans) || ans == "" || ans == "")) count++;
}
}
}
return count.ToString();
}
/// <summary>
/// 答对的数目
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private string getSucessCount(object[] id)
{
int type = 0;
if (id.Length > 0 && id[0] is int) type = Convert.ToInt32(id[0]);
XmlNode root = resXml.LastChild;
XmlNodeList quesNodes = root.ChildNodes;
int count = 0;
for (int i = 0; i < quesNodes.Count; i++)
{
int tp = Convert.ToInt32(quesNodes[i].Attributes["type"].Value);
if (tp == type)
{
//小题的节点
XmlNodeList qnode = quesNodes[i].ChildNodes;
for (int j = 0; j < qnode.Count; j++)
{
string sucess = qnode[j].Attributes["sucess"].Value;
if (sucess=="true") count++;
}
}
}
return count.ToString();
}
/// <summary>
/// 答错的数目
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private string getErrorCount(object[] id)
{
int type = 0;
if (id.Length > 0 && id[0] is int) type = Convert.ToInt32(id[0]);
XmlNode root = resXml.LastChild;
XmlNodeList quesNodes = root.ChildNodes;
int count = 0;
for (int i = 0; i < quesNodes.Count; i++)
{
int tp = Convert.ToInt32(quesNodes[i].Attributes["type"].Value);
if (tp == type)
{
//小题的节点
XmlNodeList qnode = quesNodes[i].ChildNodes;
for (int j = 0; j < qnode.Count; j++)
{
string sucess = qnode[j].Attributes["sucess"].Value;
if (sucess == "false") count++;
}
}
}
return count.ToString();
}
#endregion
#region
/// <summary>
/// 返回当前大题下的试题
/// </summary>
/// <param name="id">试题分类</param>
/// <returns></returns>
private List<Song.Entities.Questions> getQues(object[] id)
{
int type = 0;
if (id.Length > 0 && id[0] is int) type = Convert.ToInt32(id[0]);
List<Song.Entities.Questions> list = new List<Entities.Questions>();
XmlNode root = resXml.LastChild;
XmlNodeList quesNodes = root.ChildNodes;
for (int i = 0; i < quesNodes.Count; i++)
{
int tp = Convert.ToInt32(quesNodes[i].Attributes["type"].Value);
if (tp == type)
{
//小题的节点
XmlNodeList qnode = quesNodes[i].ChildNodes;
for (int j = 0; j < qnode.Count; j++)
{
int qid = Convert.ToInt32(qnode[j].Attributes["id"].Value);
Song.Entities.Questions ques = Business.Do<IQuestions>().QuesSingle(qid);
if (ques != null)
{
ques = Extend.Questions.TranText(ques);
ques.Qus_Title = Extend.Html.ClearHTML(ques.Qus_Title, "pre", "p");
ques.Qus_Explain = Extend.Html.ClearHTML(ques.Qus_Explain, "pre", "p");
list.Add(ques);
}
}
}
}
return list;
}
/// <summary>
/// 获取试题的答案选项
/// </summary>
/// <param name="id">uid</param>
/// <returns></returns>
private List<Song.Entities.QuesAnswer> getItems(object[] p)
{
Song.Entities.Questions qus = null;
if (p.Length > 0)
qus = (Song.Entities.Questions)p[0];
//当前试题的答案
Song.Entities.QuesAnswer[] ans = Business.Do<IQuestions>().QuestionsAnswer(qus, null);
List<Song.Entities.QuesAnswer> list = new List<Entities.QuesAnswer>();
for (int i = 0; i < ans.Length; i++)
{
ans[i] = Extend.Questions.TranText(ans[i]);
list.Add(ans[i]);
}
return list;
}
#endregion
#region
/// <summary>
/// 计算答题状态0为正确1为错误2为未答题
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private string getAnswerState(object[] obj)
{
string id = "";
if (obj.Length > 0 && obj[0] is int) id = obj[0].ToString();
XmlNode root = resXml.LastChild;
XmlNodeList xnl = ((XmlElement)root).GetElementsByTagName("q");
int state = 2;
foreach (XmlNode q in xnl)
{
string qid = q.Attributes["id"].Value;
if (qid == id)
{
int type = Convert.ToInt32(q.ParentNode.Attributes["type"].Value);
bool sucess = false;
bool.TryParse(q.Attributes["sucess"].Value, out sucess);
if (sucess) { state = 0; }
else
{
string ans = "";
//如果是填空与简答
if (type == 4 || type == 5)
{
ans = q.InnerText;
}
else
{
ans = q.Attributes["ans"].Value;
}
ans = ans.Replace(",", "");
if (!string.IsNullOrWhiteSpace(ans)) state = 1;
}
break;
}
}
return state.ToString();
}
/// <summary>
/// 获取用户答题信息
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private string getResult(object[] obj)
{
string id = "";
if (obj.Length > 0 && obj[0] is int) id = obj[0].ToString();
XmlNode root = resXml.LastChild;
XmlNodeList xnl = ((XmlElement)root).GetElementsByTagName("q");
string ans = "";
foreach (XmlNode q in xnl)
{
string qid = q.Attributes["id"].Value;
if (qid == id)
{
int type = Convert.ToInt32(q.ParentNode.Attributes["type"].Value);
//如果是填空与简答
if (type == 4 || type == 5)
ans = q.InnerText;
else
ans = q.Attributes["ans"].Value;
break;
}
}
string[] tm = ans.Split(',');
ans = "";
for (int i = 0; i < tm.Length; i++)
{
if (tm[i].Trim() == "") continue;
ans += tm[i] + "、";
}
if (ans.IndexOf("、") > -1 && ans.Substring(ans.Length - 1) == "、")
{
ans = ans.Substring(0, ans.Length - 1);
}
return ans;
}
/// <summary>
/// 获取试题的得分
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private string getQuesScore(object[] obj)
{
string id = "";
if (obj.Length > 0 && obj[0] is int) id = obj[0].ToString();
XmlNode root = resXml.LastChild;
XmlNodeList xnl = ((XmlElement)root).GetElementsByTagName("q");
double score = 0;
foreach (XmlNode q in xnl)
{
string qid = q.Attributes["id"].Value;
if (qid == id)
{
if (q.Attributes["score"] != null)
double.TryParse(q.Attributes["score"].Value, out score);
break;
}
}
return score.ToString();
}
/// <summary>
/// 试题的答案
/// </summary>
/// <param name="objs"></param>
/// <returns></returns>
protected string getSucessAnswer(object[] obj)
{
Song.Entities.Questions qus = (Song.Entities.Questions)obj[0];
if (qus == null) return "";
string ansStr = "";
if (qus.Qus_Type == 1)
{
//当前试题的答案
Song.Entities.QuesAnswer[] ans = Business.Do<IQuestions>().QuestionsAnswer(qus, null);
for (int i = 0; i < ans.Length; i++)
{
if (ans[i].Ans_IsCorrect)
ansStr += (char)(65 + i);
}
}
if (qus.Qus_Type == 2)
{
Song.Entities.QuesAnswer[] ans = Business.Do<IQuestions>().QuestionsAnswer(qus, null);
for (int i = 0; i < ans.Length; i++)
{
if (ans[i].Ans_IsCorrect)
ansStr += (char)(65 + i) + "、";
}
ansStr = ansStr.Substring(0, ansStr.LastIndexOf("、"));
}
if (qus.Qus_Type == 3)
ansStr = qus.Qus_IsCorrect ? "正确" : "错误";
if (qus.Qus_Type == 4)
{
if (qus != null && !string.IsNullOrEmpty(qus.Qus_Answer))
ansStr = qus.Qus_Answer;
}
if (qus.Qus_Type == 5)
{
//当前试题的答案
Song.Entities.QuesAnswer[] ans = Business.Do<IQuestions>().QuestionsAnswer(qus, null);
for (int i = 0; i < ans.Length; i++)
ansStr += (char)(65 + i) + "、" + ans[i].Ans_Context + "&nbsp;&nbsp;";
}
return ansStr;
}
#endregion
}
}