/// <summary> /// 计算考试成绩 /// </summary> /// <returns></returns> public static TestPaperInfo CalcTestResult(int companyID, int userID, int productID) { TestPaperInfo PaperModel = new TestPaperInfo(); string filePath = ReadTestPaperPath(userID, productID); TestPaperReportInfo testPaper = ReadTheLatestPaper(userID, productID); TestSettingInfo testSetting = TestSettingBLL.ReadTestSetting(companyID, productID); if (File.Exists(filePath) && (testPaper.TestDate == DateTime.MinValue || (DateTime.Now - testPaper.TestDate).TotalHours >= testSetting.TestInterval)) { XmlHelper XmlDoc = new XmlHelper(filePath); int QuestionNum = int.Parse(XmlDoc.ReadAttribute("TestPaper", "QuestionNum")); decimal Scorse = 0; //试卷得分 int RightNum = 0; //正确的题目数量 //从xml里读取答案,进行校卷 string QuestionList = string.Empty; string UserAnswerList = string.Empty; for (int StyleId = 1; StyleId <= 3; StyleId++) { string NodeName = GetTestPaperStyleNodeName(StyleId); //判断题型库里是否有考题 XmlNode Node = XmlDoc.ReadNode(NodeName); if (Node != null && Node.HasChildNodes) { XmlNodeList NodeList = XmlDoc.ReadChildNodes(NodeName); //遍历节点 foreach (XmlNode node in NodeList) { QuestionList = QuestionList + "," + node.ChildNodes[9].InnerText; UserAnswerList = UserAnswerList + "," + node.ChildNodes[6].InnerText; if (node.ChildNodes[6].InnerText.ToLower() == node.ChildNodes[5].InnerText.ToLower()) { RightNum = RightNum + 1; } } } } //UserInfo user = UserBLL.ReadUser(userID); //TestSettingInfo testSetting = TestSettingBLL.ReadTestSetting(companyID, productID); if (QuestionNum == 0) { Scorse = 0; } else { Scorse = Convert.ToDecimal(Math.Round((decimal.Parse(testSetting.PaperScore.ToString()) * RightNum / QuestionNum), 1));//这样计算的总分更准备 } if (QuestionList != string.Empty && QuestionList.StartsWith(",")) { QuestionList = QuestionList.Substring(1); UserAnswerList = UserAnswerList.Substring(1); } PaperModel.CateId = productID; PaperModel.PaperName = ProductBLL.ReadProduct(productID).Name; PaperModel.CompanyId = companyID; PaperModel.UserId = userID; PaperModel.QuestionId = QuestionList; PaperModel.Answer = UserAnswerList; PaperModel.Scorse = Scorse; if (Scorse >= testSetting.LowScore) { PaperModel.Point = 2; PaperModel.IsPass = 1; } else { PaperModel.IsPass = 0; } UserLogBLL.AddUserLog(ShopLanguage.ReadLanguage("ApplyTest"), ShopLanguage.ReadLanguage("TestPaper"), ProductBLL.ReadProduct(productID).Name); TestPaperBLL.AddPaper(PaperModel); File.SetLastWriteTime(filePath, DateTime.Now); } if ((testPaper.TestDate > DateTime.MinValue && (DateTime.Now - testPaper.TestDate).TotalHours < testSetting.TestInterval)) { PaperModel.Scorse = testPaper.Score; } //解除本课程的考试限制 //TestSettingBLL.TestEnd(userID, productID); return(PaperModel); }
/// <summary> /// 根据productId读取符合条件随机抽取指定数量的考题创建xml文档 /// </summary> /// <param name="productId"></param> /// <param name="CourseId">题库ID</param> /// <param name="companyId">用户的公司ID</param> public static void ReadQuestionXmlList(int productId, string CourseId, int companyId, int userId) { TestSettingInfo TestSettingModel = TestSettingBLL.ReadTestSetting(companyId, productId); QuestionInfo Model = new QuestionInfo(); Model.QuestionNum = " Top " + TestSettingModel.TestQuestionsCount.ToString() + " * "; Model.IdCondition = CourseId; Model.Condition = CompanyBLL.SystemCompanyId.ToString();//默认情况下都读取系统考题 Model.Field = "CompanyId"; List <QuestionInfo> TempQuestionList = ReadList(Model); //写入xml文件 XmlHelper xmldoc = new XmlHelper(); xmldoc.InsertNode("TestPaper"); xmldoc.InsertElement("TestPaper", "CateId", productId.ToString()); xmldoc.InsertNode("TestPaper", "Single", ""); xmldoc.InsertNode("TestPaper", "Multi", ""); xmldoc.InsertNode("TestPaper", "PanDuan", ""); int QuestionIndex = 0; int SingleNum = 0; int MultiNum = 0; int PanDuanNum = 0; foreach (QuestionInfo Item in TempQuestionList) { string NodeName = "TestPaper"; QuestionIndex = QuestionIndex + 1; if (Item.Style == "1") { SingleNum = SingleNum + 1; NodeName = NodeName + "/Single/QuestionInfo" + SingleNum.ToString(); xmldoc.InsertElement("TestPaper/Single", "QuestionInfo" + SingleNum.ToString(), "id", Item.QuestionId.ToString(), ""); } else if (Item.Style == "2") { MultiNum = MultiNum + 1; NodeName = NodeName + "/Multi/QuestionInfo" + MultiNum.ToString(); xmldoc.InsertElement("TestPaper/Multi", "QuestionInfo" + MultiNum.ToString(), "id", Item.QuestionId.ToString(), ""); } else if (Item.Style == "3") { PanDuanNum = PanDuanNum + 1; NodeName = NodeName + "/PanDuan/QuestionInfo" + PanDuanNum.ToString(); xmldoc.InsertElement("TestPaper/PanDuan", "QuestionInfo" + PanDuanNum.ToString(), "id", Item.QuestionId.ToString(), ""); } xmldoc.InsertNode(NodeName, "Question", Item.Question);//.Replace("~","") //单项选择题四个选项随机排序 string answer = Item.Answer.ToUpper(); if (Item.Style == "1") { string[,] optionArrray = new string[4, 2] { { "A", Item.A }, { "B", Item.B }, { "C", Item.C }, { "D", Item.D } }; optionArrray = RandomHelper.GetRandomOptionArray <string>(optionArrray, ref answer); for (int i = 0; i <= optionArrray.GetUpperBound(0); i++) { xmldoc.InsertNode(NodeName, optionArrray[i, 0], optionArrray[i, 1]); } } else { xmldoc.InsertNode(NodeName, "A", Item.A); xmldoc.InsertNode(NodeName, "B", Item.B); xmldoc.InsertNode(NodeName, "C", Item.C); xmldoc.InsertNode(NodeName, "D", Item.D); } xmldoc.InsertNode(NodeName, "Answer", answer); xmldoc.InsertNode(NodeName, "CustomerAnswer", ""); xmldoc.InsertNode(NodeName, "Style", Item.Style); xmldoc.InsertNode(NodeName, "CompanyId", Item.CompanyId.ToString()); xmldoc.InsertNode(NodeName, "QuestionId", Item.QuestionId.ToString()); } xmldoc.InsertElement("TestPaper", "QuestionNum", QuestionIndex.ToString()); xmldoc.InsertElement("TestPaper", "SingleNum", SingleNum.ToString()); xmldoc.InsertElement("TestPaper", "MultiNum", MultiNum.ToString()); xmldoc.InsertElement("TestPaper", "PanDunNum", PanDuanNum.ToString()); //保存创建好的XML文档 if (Directory.Exists(ServerHelper.MapPath("~/xml")) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(ServerHelper.MapPath("~/xml")); } xmldoc.Save(ServerHelper.MapPath("~/xml/") + userId.ToString() + "_" + productId.ToString() + ".xml"); }