ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

笔试考试系统 ____学生考试

2021-03-21 20:34:18  阅读:1620  来源: 互联网

标签:Exam ruleid 笔试 UserID ____ item var new 考试


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.解决方案

标签:Exam,ruleid,笔试,UserID,____,item,var,new,考试
来源: https://blog.csdn.net/qq_45534118/article/details/115055112

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有