基于.NET的考试系统核心问题设计与实现

来源 :硅谷 | 被引量 : 0次 | 上传用户:weifeng151
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要: 介绍.NET技术下开发考试系统中随机抽题、在线答题、评卷等一些关键问题的设计分析,以及C#代码实现。
  关键词: DotNET技术;C#语言; SQL server2005
  中图分类号:TP311.1 文献标识码:A 文章编号:1671-7597(2011)0210072-02
  
  0 引言
  系统使用的开发语言:C#;开发平台:Microsoft Visual Studio 2005;数据库:Microsoft SQL Server 2005;开发技术:DotNET;数据库访问技术:ADO.NET。
  传统考试的过程是:出题、答题、评卷。在线考试系统中关键的部分就是:实现随机抽题功能;实现答题功能;实现判题功能,下面分析这几部分代码实现。
  1 设计分析与代码实现
  1.1 实现随机抽题功能
  假设试题共有7道题目,现在要随机抽取3道题目的步骤如下:
  第一步,将7道题目的Id全部取出,放在allQuestionIds数组中,注意,这些Id是标识,由于题目信息的增删可能会造成Id不连续。
  第二步,为了避免重复抽取题目,用selectedStates数组来表示对应索引的题目是否被抽中过,false表示没被抽中,所以初始值都为false。
  第三步,在allQuestionIds索引0-6中随机抽取3个数,假设1、2、5被抽中。每抽中一个,就将抽中的索引对因的题目Id取出来,放在selectedQuestionIds数组中,并把该题目的抽中状态置为true。
  第四步,根据selectedQuestionIds数组中的题目Id,取出这些题目的标准答案,放在correctAnswers数组中。
  第五步,将考生用户答案数组studentAnswers初始值置为“未回答”。
  实现代码如下:
  // 抽取试题
  private void SetSelectedQuestionIds()
  {
  Random random = new Random();
  int questionIndex = 0; // 随机产生的问题的索引值
  // 抽取每一道题并保存抽出的题目的Id
  int i = 0; // 记录抽取了几道题
  while (i < QuizHelper.questionNum)
  {
  // 在所有题目的数量范围内抽题产生随机数
   questionIndex = random.Next(Quiz
  Helper.allQuestionIds.Length);
   if (QuizHelper.selectedStates[questionIndex] == false)// 如果没有被选中过,可以选择
  {
  QuizHelper.selectedQuestionIds[i] = QuizHelper.allQuestionIds[questionIndex];
  QuizHelper.selectedStates[questionIndex] = true;
  i++;
  }
  }
  }
  // 取出試题的标准答案
  private void SetRightAnswers()
  {
  string sql = ""; // 查询用sql语句
  SqlCommand command = new SqlCommand();
  command.Connection = DBHelper.connection;
  DBHelper.connection.Open();
  for (int i = 0;i < QuizHelper.selectedQuestionIds.Length;i++)
  {
  sql = string.Format("SELECT Answer FROM Question WHERE QuestionId={0}",
  QuizHelper.selectedQuestionIds[i]);
  command.CommandText = sql;
  // 为标准答案数组赋值
  QuizHelper.correctAnswers[i] = command.ExecuteScalar().ToString();
  }
   DBHelper.connection.Close();
  }
  1.2 实现答题功能
  这部分以选择题为例说明,其它题型参考。
  1)窗体Load事件处理的事务
  在窗体出现时,要启动倒计时的计时器。还要显示需要的题目的信息。如果是从答题卡返回的,那么可能题目已经做答过,要把用户选择的答案对应的选项选中。
  如下代码所示。
  private void AnswerQuestionForm_Load(object sender,EventArgs e)
  {
  tmrCostTime.Start();// 启动计时器
  GetQuestionDetails(); // 显示题目信息
  CheckOption();// 如果题目已经答过,让相应的选项选中
  CheckBtnNext();// 确定是否到了最后一题
  }
  2)检查选项是否应被选中// 如果已经答了题目,选中相应的选项
  private void CheckOption()
  {
   Switch (QuizHelper.studentAnswers[questionIndex])
  {
  case "A":
  rdoOptionA.Checked = true;
  break;
  case "B":
  rdoOptionB.Checked = true;
  break;
  case "C":
  rdoOptionC.Checked = true;
  break;
  case "D":
  rdoOptionD.Checked = true;
  break;
  default:
  rdoOptionA.Checked = false;
  rdoOptionB.Checked = false;
  rdoOptionC.Checked = false;
  rdoOptionD.Checked = false;
  break;
  }
  3)记录学生的答案
  四个单选按钮共用一个 Click 事件处理方法。
   // 选项单选按钮的单击事件处理,选择答案时,记录答案
  private void rdoOption_Click(object sender,EventArgs e)
  {
  QuizHelper.studentAnswers[questionIndex] = Convert.ToString(((RadioButton)sender).Tag);
  }
  1.3 实现判题功能
  将用户答案数组与标准答案数组比较来计算答对题目的数量。按答對题目按每道题的分值来计算得分。
   // 计算答对的题目数量
  int correctNum = 0;
  for (int i = 0;i < QuizHelper.questionNum;i++)
  {
  if (QuizHelper.studentAnswers[i] == QuizHelper.correctAnswers[i])
  {
  correctNum++;
  }
  }
  // 计算得分
   // QuizHelper.questionScore 记录每道题的分值
  int score = correctNum *QuizHelper.questionScore;
  // 显示分数
  lblMark.Text = score.ToString()+"分";
  2 结论
  这个系统是基于C/S架构开发的,在计算机相关课程考试中经过了实践应用。但实际项目设计时,需要在题目表中加入试题难度以及试题所属章节,在抽题算法中应考虑这两项内容的百分比。这样组卷才更科学。
  
  参考文献:
  [1]徐祗祥,使用C#开发数据库应用程序[M].北京:科学技术文献出版社,2008,172-196.
  [2]张光建,浅谈无纸化考试[J].中国教育教学杂志,2006(4)132-133.
  
  作者简介:
  张光建,四川建筑职业技术学院讲师,研究方向:IT教育、软件开发。
其他文献
国务院同意教育部、国家计委、国家经委、劳动人事部、财政部《关于成立管理干部学院问题的请示》,现发给你们,望参照执行。关于成立管理干部 The State Council agrees wi
事件继“4·25”非法聚集事件之后,今年农历除夕,正当千家万户忙着挂灯笼、贴春联,欢欢喜喜迎接新世纪第一个春节的时候,几名“法轮功”痴迷者又在李洪志“升天圆满”妖言的
0前言人类的历史是一部与水共舞的历史.而江南这块土地,更是与水一直保持着亲密的联系,没有水,就不是江南。 0 Foreword The history of mankind is a history of dances wi
摘要: 虚拟机技术、垃圾回收机制简化了Java软件的设计与开发,提高软件生产的效率和质量。针对智能设备软、硬件资源受限的特点,结合JPDA平台提供的完善功能,利用TPTP测试工具,对Java示例软件进行性能测试,在对测试结果进行分析和对比后,得出资源受限Java程序设计的两个原则。  关键词: 性能测试;JPDA;TPTP;Java  中图分类号:TP302.7 文献标识码:A 文章编号:1671
如果路过商铺店家时稍微注意一下,我们会常常发现,贴在墙头、货柜各种大字体的“重装上阵”正在招揽顾客:某某商店要重装上阵了,某某产品又重装上阵了。不一而足的“重装上阵”一直都是商家们的挚爱,正在成为广告宣传中的热门词语。关注一下电视广播的广告和新闻,就会发现“重装上阵”还有两个读音,一个读为“重(zhòng)装上阵”,一个读为“重(chóng)装上阵”,例如:  (1)首次以主办单位身份出现,并首次
期刊
日前,我到一所小学听了两节二年级语文课,两位教者讲的都是《黄果树瀑布》。第一位教者首先用谜语导入新课“:悬崖挂块大白布,千手万脚捉不住。远听千军万马吼,近看银泉飞下谷。”
期刊
这段时间在准备《水》的公开课。过去执教时,主要抓住“雨天狂欢”和“勺水冲凉”两个画面,让学生体会水给人带来的真切感受。然后引导学生对比这两个画面,感受它们一个是从“动
期刊
努力办好各级各类职业技术教育是一篇大文章。中等职业技术教育虽然已经有了发展,但总体来说,还刚刚开始做。各地各部门要狠狠抓它十年,二十年,必会大见成效。江总书记在第三次全
2015年3 月,能源需求减少,下游采购动力不足,沿海散货运输市场需求无明显改善,运价低位振荡。3月27日,上海航运交易所发布的沿海(散货)综合运价指数报收于818.35点,较上月同期下跌3.3%,3月平均综合指数较2月下跌3.2%。煤炭、金属矿石、粮食货种运价指数月平均值较上月有不同程度下跌,原油、成品油货种运价指数月平均值与上月持平。  1 煤炭运输  3月,我国沿海地区气温陆续回升,民用电负
一、葡萄套袋的优点葡萄果穗套袋能有效地防止或减轻黑痘病、白腐病、炭疽病和日灼病的感染和危害(尤其是炭疽病);并能有效地防止或减轻各种害虫,如蜂、蝇、蚊、粉蚧、蓟马、