ZhiYeJianKang_PeiXun/Song.Site/TestView.ashx.cs

422 lines
16 KiB
C#
Raw Permalink Normal View History

2025-02-20 15:41:53 +08:00
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
}
}