笔试考试系统 ____学生考试

  • A+
所属分类:.NET技术
摘要

1.今日任务学生考试考试列表:显示正在进行或者已经结束的考试  查看已经考过的试卷

1.今日任务

学生考试

考试列表:显示正在进行或者已经结束的考试

笔试考试系统 ____学生考试

 

 查看已经考过的试卷

笔试考试系统 ____学生考试

 

 

 

 正在进行的考试 

笔试考试系统 ____学生考试

 

 

提交试卷:

笔试考试系统 ____学生考试

 

 

完成考试即可查看试卷 获取成绩:

笔试考试系统 ____学生考试

 

 

控制器代码:

  1 public class ExamController : Controller   2     {   3         private static Dictionary<int, List<Exam_Answer>> listanswer = new Dictionary<int, List<Exam_Answer>>();   4         // GET: Exam   5         public ActionResult Index(int page = 1)   6         {   7             var currentuser = Session[CommonFeild.SessionName] as Exam_User;   8             ViewBag.ID = currentuser.UserID;   9             IPagedList list = PaperRuleService.GetListEnable(page);  10             return View(list);  11         }  12         [HttpGet]  13         /// <summary>  14         /// 开始考试  15         /// </summary>  16         /// <param name="ruleid"></param>  17         /// <returns></returns>  18         public ActionResult BeginExam(int ruleid)  19         {            20             var currentuser = Session[CommonFeild.SessionName] as Exam_User;  21             var data = PaperRuleService.FindPaperRuleByID(ruleid);  22             ViewBag.Rule = data;  23             ViewBag.date = data.RuleEndDate.ToString("yyyy/MM/dd HH:mm:ss");  24               25             var list = ExamPaperService.GeneratePaper(ruleid, currentuser.UserID);  26             if(!listanswer.ContainsKey(currentuser.UserID))  27             {  28                 listanswer.Add(currentuser.UserID, list);  29             }             30             //获取questioID数组  31             List<Exam_Question> questionlist = new List<Exam_Question>();  32             List<ExamPaperBLL> paperbll = new List<ExamPaperBLL>();  33             foreach (var item in listanswer[currentuser.UserID])  34             {  35                 ExamPaperBLL examPaperBLL = new ExamPaperBLL();  36                 examPaperBLL.Exam_Question = QuestionService.GetdataByID(item.QuestionID);  37                 examPaperBLL.AnswerOptionID = item.AnswerOptionID;  38                 paperbll.Add(examPaperBLL);  39                 // questionlist.Add(QuestionService.GetdataByID(item.QuestionID));  40             }  41             return View(paperbll);  42         }  43         /// <summary>  44         /// 单选题  45         /// </summary>  46         /// <param name="data"></param>  47         public void GetRadioData(string data)  48         {  49             var currentuser = Session[CommonFeild.SessionName] as Exam_User;  50             string[] arry = data.Split(',');  51             string optionid = arry[0];  52             int questionid = Convert.ToInt32(arry[1]);  53             //防止并发  54             lock (this)  55             {  56                 var answer = listanswer[currentuser.UserID].Where(x => x.QuestionID == questionid).FirstOrDefault();  57                 answer.AnswerOptionID = optionid;  58             }  59   60         }  61         /// <summary>  62         /// 多选题  63         /// </summary>  64         /// <param name="data"></param>  65         /// <param name="check"></param>  66         public void GetChechData(string data, bool check)  67         {  68             var currentuser = Session[CommonFeild.SessionName] as Exam_User;  69             string[] arry = data.Split(',');  70             string optionid = arry[0];  71             int questionid = Convert.ToInt32(arry[1]);  72             //判断是否是选中 或者取消  73             if (check)  74             {  75                 //防止并发  76                 lock (this)  77                 {  78                     var answer = listanswer[currentuser.UserID].Where(x => x.QuestionID == questionid).FirstOrDefault();  79                     answer.AnswerOptionID += optionid + ",";  80   81                 }  82             }  83             else  84             {  85                 //防止并发  86                 lock (this)  87                 {  88                     var answer = listanswer[currentuser.UserID].Where(x => x.QuestionID == questionid).FirstOrDefault();  89                     string temp = answer.AnswerOptionID;  90                     if (temp.Contains(optionid))  91                     {  92                         int index = temp.IndexOf(optionid);  93                         string newstr = temp.Remove(index, optionid.Length + 1);  94                         answer.AnswerOptionID = newstr;  95                     }  96                 }  97             }  98         }  99         /// <summary> 100         /// 保存 101         /// </summary> 102         /// <returns></returns> 103         [HttpPost] 104         public ActionResult Save() 105         { 106             var currentuser = Session[CommonFeild.SessionName] as Exam_User; 107  108             try 109             { 110                 foreach (var item in listanswer[currentuser.UserID]) 111                 { 112                     if (item.AnswerOptionID != "") 113                     { 114                         if (item.AnswerOptionID.EndsWith(",")) 115                         { 116                             string temp = item.AnswerOptionID; 117                             item.AnswerOptionID = temp.Remove(temp.Length - 1, 1); 118                         } 119                     } 120                     AnswerService.Update(item); 121                 } 122             } 123             catch (Exception ex) 124             { 125  126                 return Json(new { success = false, msg = "保存失败" + ex }); 127             } 128             return Json(new { success = true, msg = "保存成功"}); 129  130         } 131         [HttpPost] 132         public ActionResult GetCount() 133         { 134             var currentuser = Session[CommonFeild.SessionName] as Exam_User; 135             int count = listanswer[currentuser.UserID].Where(x => x.AnswerOptionID == "").Count(); 136              137             return Json(new { success = true,num=count }); 138  139         } 140  141         /// <summary> 142         /// 提交 143         /// </summary> 144         /// <returns></returns> 145         [HttpPost] 146         public ActionResult Conmit() 147         { 148             var currentuser = Session[CommonFeild.SessionName] as Exam_User; 149             int paperid = 0; 150             try 151             { 152                 foreach (var item in listanswer[currentuser.UserID]) 153                 { 154                     paperid = item.PaperID; 155                     if (item.AnswerOptionID != "") 156                     { 157                         if (item.AnswerOptionID.EndsWith(",")) 158                         { 159                             string temp = item.AnswerOptionID; 160                             item.AnswerOptionID = temp.Remove(temp.Length - 1, 1); 161                         } 162                     } 163                     //提交试卷 164                     AnswerService.Update(item); 165                 } 166                 //更新试卷状态 获取分数 167                 AnswerService.GetScore(paperid, currentuser.UserID); 168             } 169             catch (Exception ex) 170             { 171  172                 return Json(new { success = false, msg = "提交失败" + ex }); 173             } 174             return Json(new { success = true, msg = "提交成功" }); 175         } 176         /// <summary> 177         /// 试卷详情 178         /// </summary> 179         /// <param name="PaperID">试卷编号</param> 180         /// <returns></returns> 181         public ActionResult ExamDetail(int ruleid) 182         { 183             var currentuser = Session[CommonFeild.SessionName] as Exam_User; 184  185             //获取考试信息 186             var paper = ExamPaperService.CheckPaper(ruleid,currentuser.UserID); 187  188             ViewBag.User = currentuser; 189             ViewBag.Rule = PaperRuleService.FindPaperRuleByID(paper.RuleID); 190             ViewBag.Score = paper.UserScore; 191             //获取答题信息  192             List<Exam_Answer> list = AnswerService.GetAnswer(currentuser.UserID,paper.PaperID); 193             //加载试卷模型 194             List<ExamPaperBLL> paperbll = new List<ExamPaperBLL>(); 195             foreach (var item in list) 196             { 197                 ExamPaperBLL examPaperBLL = new ExamPaperBLL(); 198                 examPaperBLL.Exam_Question = QuestionService.GetdataByID(item.QuestionID); 199                 examPaperBLL.AnswerOptionID = item.AnswerOptionID; 200                 paperbll.Add(examPaperBLL); 201                 202             } 203             return View(paperbll); 204         } 205     }

service方法

  1 public class ExamPaperService   2     {   3         /// <summary>   4         /// 根据试卷规则编号生成试卷,并将题目生成到答题信息表中   5         /// </summary>   6         /// <param name="ruleid"></param>   7         /// <param name="UserID"></param>   8         public static List<Exam_Answer> GeneratePaper(int ruleid, int UserID)   9         {  10             //定义答题卡  11             List<Exam_Answer> AnswerList = new List<Exam_Answer>();  12             //定义试卷变量  13             List<Exam_Question> QuestionList = new List<Exam_Question>();  14             //定义组卷详情变量  15             List<Exam_RuleDetail> RuledetailList = RuleDetailService.GetDetailQuestion(ruleid);  16             int answercount = 0;  17             //查询试卷总题目数量  18             int num = PaperRuleService.FindPaperRuleByID(ruleid).QuestionNum;  19             //判断试卷信息表是否已经存在,如果不存在需要创建(需要考虑中途退出的同学)  20             Exam_Paper paper = CheckPaper(ruleid, UserID);  21             if (paper == null)  22             {  23                 paper = CreatePaper(ruleid, UserID);  24                 //生成答题卡             25             }  26             //判断答题卡是否存在信息  27             answercount = AnswerService.GetUserQuestionCount(UserID, paper.PaperID);  28             //如果存在的话 将试卷信息加载出来  29             if (answercount == num)  30             {  31                 var data = AnswerService.GetAnswer(UserID, paper.PaperID);  32                 AnswerList.AddRange(data);  33             }  34             ///如果不存在  随机生成试题  35             else  36             {  37                 using (ExamSysDBContext db = new ExamSysDBContext())  38                 {  39                     //先将答题卡清空  40                     AnswerService.Clear(UserID, paper.PaperID);  41                     //根据规则详情 随机生成试题  42                     foreach (var item in RuledetailList)  43                     {  44                         var temp = db.Exam_Question.Where(x => x.LibraryID == item.LibraryID).OrderBy(x => Guid.NewGuid()).Take(item.QuestionNum).ToList();  45                         QuestionList.AddRange(temp);  46                     }  47                     //将试题 添加到答题卡  48                     foreach (var question in QuestionList)  49                     {  50   51                         Exam_Answer answer = new Exam_Answer  52                         {  53                             AnswerOptionID = "",  54                             LibraryID = question.LibraryID,  55                             PaperID = paper.PaperID,  56                             UserID = UserID,  57                             QuestionID = question.QuestionID,  58                             OptionID = QuestionOptionsService.GetOptionID(question.QuestionAnswer, question.QuestionID),  59                         };  60   61                         AnswerList.Add(answer);  62                     }  63                     //将答题信息添加到数据库  64                     db.Exam_Answer.AddRange(AnswerList);  65                     db.SaveChanges();  66                 }  67             }  68             return AnswerList;  69         }  70         /// <summary>  71         /// 检查试卷是否已经生成,将试卷信息返回  72         /// </summary>  73         /// <param name="ruleid"></param>  74         /// <param name="UserID"></param>  75         /// <returns></returns>  76         public static Exam_Paper CheckPaper(int ruleid, int userid)  77         {  78             using (ExamSysDBContext db = new ExamSysDBContext())  79             {  80                 return db.Exam_Paper.Where(x => x.RuleID == ruleid && x.UserID == userid).FirstOrDefault();  81             }  82         }  83         /// <summary>  84         ///   创建试卷  85         /// </summary>  86         /// <param name="ruleid"></param>  87         /// <param name="userid"></param>  88         /// <returns></returns>  89         public static Exam_Paper CreatePaper(int ruleid, int userid)  90         {  91             //获取试卷规则信息  92             var rule = PaperRuleService.FindPaperRuleByID(ruleid);  93   94             //获取用户信息  95             var user = UsersService.GetUserByID(userid);  96             //添加试卷规则  97             Exam_Paper paper = new Exam_Paper { States = false, RealName = user.RealName, UserID = user.UserID, RuleID = rule.PaperRuleID, TotalScore = rule.Score, UserScore = 0 };  98             var Newpaper = AddPaper(paper);  99             return Newpaper; 100  101         } 102         /// <summary> 103         /// 添加试卷 104         /// </summary> 105         /// <param name="paper"></param> 106         /// <returns></returns> 107         public static Exam_Paper AddPaper(Exam_Paper paper) 108         { 109             using (ExamSysDBContext db = new ExamSysDBContext()) 110             { 111                 db.Exam_Paper.Add(paper); 112                 db.SaveChanges(); 113                 return paper; 114             } 115         } 116         /// <summary> 117         /// 更新试卷分数 118         /// </summary> 119         /// <param name="paperid"></param> 120         /// <param name="score"></param> 121         public static void UpdateScore(int paperid, int score) 122         { 123             using (ExamSysDBContext db = new ExamSysDBContext()) 124             { 125                 var data = db.Exam_Paper.Where(x => x.PaperID == paperid).FirstOrDefault(); 126                 data.UserScore = score; 127                 db.SaveChanges(); 128             } 129         } 130         /// <summary> 131         /// 获取试卷规则编号 132         /// </summary> 133         /// <param name="paperid"></param> 134         /// <returns></returns> 135         public static Exam_Paper GetPaper(int paperid) 136         { 137             using (ExamSysDBContext db = new ExamSysDBContext()) 138             { 139                 var data = db.Exam_Paper.Where(x => x.PaperID == paperid).FirstOrDefault(); 140                 return data; 141  142             } 143         } 144         /// <summary> 145         /// 获取试卷状态 已提交还是未提交 146         /// </summary> 147         /// <param name="ruleid"></param> 148         /// <param name="userid"></param> 149         /// <returns></returns> 150         public static bool CkeckScore(int ruleid, int userid) 151         { 152             using (ExamSysDBContext db = new ExamSysDBContext()) 153             { 154                 var data = db.Exam_Paper.Where(x => x.RuleID == ruleid && x.UserID == userid).FirstOrDefault(); 155                 if(data==null) 156                 { 157                     return false; 158                 } 159                 else 160                 { 161                     return data.States; 162                 }                163             } 164         } 165  166         /// <summary> 167         /// 统计成绩信息 168         /// </summary> 169         /// <param name="ruleid"></param> 170         /// <returns></returns> 171         public static ScoreTotleModel GetScoreModel(int ruleid) 172         { 173             ScoreTotleModel score = new ScoreTotleModel(); 174             using (ExamSysDBContext db = new ExamSysDBContext()) 175             { 176                 score.MaxScore = db.Exam_Paper.Where(x => x.RuleID == ruleid).Select(x => x.UserScore).Max(); 177  178                 score.MinScore = db.Exam_Paper.Where(x => x.RuleID == ruleid).Select(x => x.UserScore).Min(); 179  180                 score.ScoreAvg = db.Exam_Paper.Where(x => x.RuleID == ruleid).Select(x => x.UserScore).Average(); 181                 score.Score60 = db.Exam_Paper.Where(x => x.RuleID == ruleid && x.UserScore < 60).Count(); 182                 score.Score6070 = db.Exam_Paper.Where(x => x.RuleID == ruleid && 60 <= x.UserScore && x.UserScore < 70).Count(); 183                 score.Score7080 = db.Exam_Paper.Where(x => x.RuleID == ruleid && 70 <= x.UserScore && x.UserScore < 80).Count(); 184                 score.Score8090 = db.Exam_Paper.Where(x => x.RuleID == ruleid && 80 <= x.UserScore && x.UserScore < 90).Count(); 185                 score.Score90100 = db.Exam_Paper.Where(x => x.RuleID == ruleid && 90 <= x.UserScore && x.UserScore < 100).Count(); 186                 score.Score100 = db.Exam_Paper.Where(x => x.RuleID == ruleid && 100 <= x.UserScore).Count(); 187  188                 score.StudentNum = db.Exam_Paper.Where(x => x.RuleID == ruleid).Count(); 189                 return score; 190  191             } 192         } 193  194     }

3.遇到问题:

4.解决方案