using System; using System.Collections.Generic; using System.Linq; using System.Web; using WeiSha.Common; using Song.ServiceInterfaces; using VTemplate.Engine; using Song.Extend; namespace Song.Site { /// /// 练习题,用于在章节学习时的习题练习 /// public class Exercises : BasePage { //章节id ,题型,难度,题量 int olid = WeiSha.Common.Request.QueryString["olid"].Int32 ?? 0; int type = WeiSha.Common.Request.QueryString["type"].Int32 ?? 0; int diff = WeiSha.Common.Request.QueryString["diff"].Int32 ?? 0; int count = WeiSha.Common.Request.QueryString["count"].Int32 ?? int.MaxValue; //试题的启始索引与当前取多少条记录 protected string indexPara = WeiSha.Common.Request.QueryString["index"].String; protected int index = 1; protected int size = 1; //题型分类汉字名称 protected string[] typeStr = App.Get["QuesType"].Split(','); //当前学员收藏的试题 Song.Entities.Questions[] collectQues = null; protected override void InitPageTemplate(HttpContext context) { if (olid < 1) return; //登录且学员必须通过审核 if (!(Extend.LoginState.Accounts.IsLogin && Extend.LoginState.Accounts.CurrentUser.Ac_IsPass)) { return; } #region 基本信息布局 //题型 this.Document.SetValue("quesType", WeiSha.Common.App.Get["QuesType"].Split(',')); //难度 Tag diffTag = this.Document.GetChildTagById("diff"); if (diffTag != null) { string tm = diffTag.Attributes.GetValue("level", ""); this.Document.SetValue("diff", tm.Split(',')); } //每页的题量*********** //总题数 int sumCount = 0; Song.Entities.Outline outline = Business.Do().OutlineSingle(olid); if (outline != null) { bool isBuy = Business.Do().IsBuy(outline.Cou_ID, Extend.LoginState.Accounts.UserID); if (isBuy) { sumCount = Business.Do().QuesOfCount(Organ.Org_ID, 0, 0, olid, type, diff, true); } else { //是否在试用中 bool istry = Business.Do().IsTryout(outline.Cou_ID, this.Account.Ac_ID); Song.Entities.Course course = Business.Do().CourseSingle(outline.Cou_ID); if (course.Cou_IsTry) { sumCount = Business.Do().QuesOfCount(Organ.Org_ID, 0, 0, olid, type, diff, true); //sumCount = sumCount > course.Cou_TryNum ? course.Cou_TryNum : sumCount; } this.Document.Variables.SetValue("isTry", istry); } } //计算分页,200个记录不分页,每页默认100条,最多10页 QuestionPagerItem qpi = new QuestionPagerItem(200, 100, 10); //sumCount = WeiSha.Common.Request.QueryString["sum"].Int32 ?? 0; //仅供测试 List pager = qpi.Builder(sumCount); this.Document.SetValue("pager", pager); this.Document.SetValue("sumCount", sumCount); //与当前索引页码与取值长度 if (!string.IsNullOrWhiteSpace(indexPara)) { if (indexPara.IndexOf("-") > -1) { int.TryParse(indexPara.Substring(0, indexPara.IndexOf("-")), out index); int.TryParse(indexPara.Substring(indexPara.IndexOf("-") + 1), out size); } } else { index = pager.First().Index; size = pager.First().Size; } this.Document.SetValue("index", index); #endregion // //自定义配置项 WeiSha.Common.CustomConfig config = CustomConfig.Load(Organ.Org_Config); //如果需要学员登录后才能学习 bool isTraningLogin = config["IsTraningLogin"].Value.Boolean ?? false; this.Document.SetValue("isTraningLogin", isTraningLogin); //试题 Song.Entities.Questions[] ques = null; if (isTraningLogin) { //登录且学员必须通过审核 if (Extend.LoginState.Accounts.IsLogin && Extend.LoginState.Accounts.CurrentUser.Ac_IsPass) { ques = Business.Do().QuesCount(Organ.Org_ID, 0, 0, olid, type, diff, true, index - 1, size); //ques = Business.Do().QuesRandom(Organ.Org_ID, -1, -1, olid, type, diff, diff, true, count); } } else { ques = Business.Do().QuesCount(Organ.Org_ID, 0, 0, olid, type, diff, true, index - 1, size); //ques = Business.Do().QuesRandom(Organ.Org_ID, -1, -1, olid, type, diff, diff, true, count); } if (ques != null) { for (int i = 0; i < ques.Length; i++) { ques[i] = Extend.Questions.TranText(ques[i]); ques[i].Qus_Title = ques[i].Qus_Title.Replace("<", "<"); ques[i].Qus_Title = ques[i].Qus_Title.Replace(">", ">"); ques[i].Qus_Title = Extend.Html.ClearHTML(ques[i].Qus_Title, "p", "div", "font", "pre"); ques[i].Qus_Title = ques[i].Qus_Title.Replace("\n", "
"); } } this.Document.SetValue("ques", ques); this.Document.RegisterGlobalFunction(this.GetTypeName); this.Document.RegisterGlobalFunction(this.AnswerItems); this.Document.RegisterGlobalFunction(this.GetAnswer); this.Document.RegisterGlobalFunction(this.GetOrder); this.Document.RegisterGlobalFunction(this.IsCollect); } /// /// 获取试题的类型名称 /// /// /// protected object GetTypeName(object[] type) { int tp = 1; if (type.Length > 0) int.TryParse(type[0].ToString(), out tp); if (tp > 0 && tp <= typeStr.Length) { return typeStr[tp - 1].Trim(); } return "未知题型"; } /// /// 当前试题的选项,仅用于单选与多选 /// /// protected object AnswerItems(object[] p) { Song.Entities.Questions qus = null; if (p.Length > 0) qus = (Song.Entities.Questions)p[0]; //当前试题的答案 Song.Entities.QuesAnswer[] ans = Business.Do().QuestionsAnswer(qus, null); for (int i = 0; i < ans.Length; i++) { ans[i] = Extend.Questions.TranText(ans[i]); //ans[i].Ans_Context = ans[i].Ans_Context.Replace("<", "<"); //ans[i].Ans_Context = ans[i].Ans_Context.Replace(">", ">"); } return ans; } /// /// 试题的答案 /// /// /// protected object GetAnswer(object[] objs) { //当前试题 Song.Entities.Questions qus = (Song.Entities.Questions)objs[0]; string ansStr = ""; if (qus.Qus_Type == 1) { //当前试题的答案 Song.Entities.QuesAnswer[] ans = Business.Do().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().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().QuestionsAnswer(qus, null); for (int i = 0; i < ans.Length; i++) ansStr += (char)(65 + i) + "、" + ans[i].Ans_Context + "
"; } return ansStr; } /// /// 试题是否被当前学员收藏 /// /// /// protected object IsCollect(object[] objs) { int qid = 0; if (objs.Length > 0) qid = Convert.ToInt32(objs[0]); //当前收藏 if (collectQues == null) { if (Extend.LoginState.Accounts.IsLogin) { Song.Entities.Accounts st = Extend.LoginState.Accounts.CurrentUser; if (st != null) collectQues = Business.Do().CollectAll4Ques(st.Ac_ID, 0, -1, 0); } } if (collectQues != null) { foreach (Song.Entities.Questions q in collectQues) { if (qid == q.Qus_ID) return true; } } return false; } /// /// 将选择题选项,由数字序号转为字母 /// /// /// protected object GetOrder(object[] index) { int tax = 0; if (index.Length > 0) int.TryParse(index[0].ToString(), out tax); return (char)(tax - 1 + 65); } } }