标题 | 基于.net的轻量化考试系统 |
范文 | 孙伟 摘要:.net技术为用户快速构建程序提供了很大便捷,该文使用.net框架开发了一款轻量化考试系统,针对小型考试提供应用,即考即用。减少传统考试的纸张和人力资源浪费,也符合如今绿色环保发展的新理念 关键词:.net;GridView控件;DataList控件 中图分类号:TP311 ? ? ? ?文献标识码:A 文章编号:1009-3044(2020)28-0088-05 本文面向于各种专业小型考试,结合微软的.net技术和SQL Server数据库技术,开发了一套小范围小体积、搭建简单、即用即考、即时评分汇总的轻量化在线考试系统。 本系统操作简单,可按需要的出题规则组卷,能进行多种学科、题型的考试。本系统操作上分为管理员操作与考生操作。管理员端负责导入管理考生数据、试题数据,生成试卷,开始考试,考试过程管理,成绩管理等操作。尽量简化操作,以最小功能实现一场考试。 1 本系统文件结构组成 数据库文件1个:存储登录信息、题库试卷信息、考试过程信息等,共6张数据表。 公共类文件1个:包含数据库连接、执行数据库Sql命令、绑定控件方法等。 样式表文件6个:管理整个系统外观,网页样式。 根目录文件2个:Web.config文件用于系统环境变量设置,如数据库连接字符串、数据库连接池大小;登录文件Default.aspx即为首页文件,用于考生登录验证。 前台文件3个:分别为考试需知页;考试页,随机抽题供考生答题;成绩显示页,考生交卷后显示该考生成绩。 后台文件11个:管理登錄页;考生导入页;考生管理页;过程管理页;成绩查询页;试题导入页;试题管理页;试卷管理页;此外还有管理员改密码、操作说明、班级成绩下载三个辅助页。 本系统使用流程:管理员登录后台页→导入考生数据→导入题库→生成套题→考生于首页登录→考生在线考试→考试过程管理(考生死机重新登录等操作)→考生交卷→成绩入库(所有考生交卷后)→结束考试(考生将不能再登录)→生成成绩文件(可供下载或打印)→完毕。 2 本系统代码实现 1)考生信息与试题信息导入页中,主要使用了Fileupload控件进行上传文件操作,只支持Excel文件,使用数据库控件DataTable读取文件,Excel文件按规定格式来填写,将出题权交给相关专业的老师,提高试题专业性。代码节选如下: Public DataTable GetExcelDatatable(string file_Url) {string Pro_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='excel 12.0.0; Hdr=NO; Imex=1'"; ?//忽略栏位、只读模式 // 请先安装Microsoft.ACE.OLEDB.12.0驱动 ? DataTable dt = null; OleDbConnection conn = new OleDbConnection(string.Format(Pro_String, file_Url)); ?conn.Open(); DataTable sTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); ? ? ?string strSql = "select * from [Sheet1$]"; OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; return dt; } 本段代码声名一个方法,功能为读取上传好的Excel文件内容,并生成一个DataTable提供给其它相关管理页绑定。如果未能读取成绩,需先安装驱动或重新设置规定样式。 上传事件代码中,将对文件类型,内容模式作出筛选判断,如果类型不对,内容为空或模式不符合将给出相应提示,代码略。 2)在后台各个管理页都使用了GridView控件。使用它的内置事件对数据进行管理操作。在页中,还使用了DropDownList控件、TextBox控件、Button控件进行数据查询操作,可以让管理员很方便地查找到要操作的数据。代码节选如下: protected void DropDlt1_SelectedIndexChanged(入口参数代码,略) //根据下拉列表框选择内容,可按班级来显示考生信息事件 { ?Bj1=true ; //标记变量,记录是否操作过下拉列表框和查询操作 Bj2 = false; ddlstr ?= string.Format("select id,Name,idCard,clName from Tb_XueShen where clName='{0}' order by id desc ", //用于记录查询命令,以便分页操作可以在查询到的结果中操作,其中id及以后的单词为字段名,Tb开头为数据表名字 DropDlt1.SelectedValue.ToString()); cl.tabbind(GridView1,ddlstr, "id"); ?//根据下拉列表的选择项,重新绑定GridView,显示所需信息 ?} protected void Btn_Clk1(入口参数代码,略) ?//通配符查询事件 { ? Bj2 = true;Bj1 = false; switch (DropDlt2 .SelectedIndex ) ?//可以按班级、学号、名字分别查询 { ? case 0: { textstr = string.Format("select id,Name,idCard,clName from Tb_XueShen where id like '%{0}%' order by id desc ", Tt_Box1.Text .ToString());break ?;} //使用通配符查詢,更精确 case 1: { textstr = string.Format("select id,Name,idCard,clName from Tb_XueShen where Name like '%{0}%' order by id desc ", Tt_Box1.Text.ToString()); break; ;} case 2: { textstr = string.Format("select id,Name,idCard,clName from Tb_XueShen where clName like '%{0}%' order by id desc ", Tt_Box1.Text.ToString()); break; ;} case 3: { textstr = string.Format("select id,Name,idCard,clName from Tb_XueShen where idCard like '%{0}%' order by id desc ", Tt_Box1.Text.ToString()); break; ;} } Tt_Box1.Text = null; cl.tabbind(GridView1, textstr , "id"); //查询成功,重新绑定显示数据 ? } GridView控件是一个很强大的数据源绑定控件,不但样式丰富,更内置了分页,更新,删除等事件,对数据库操作非常方便简单。在本系统中,大量使用了该控件来进行数据库信息管理。 3)成绩管理页中,当成绩入库后,会以班级为单位生成一个文本文件供用户下载,文件内容为该班参加考试学生,该科目成绩汇总。而文本文件作为最基础的windows文件,基本任何电脑都可以打开,方便了后期成绩的查看与打印,保存。该文件下载方式采用了分页技术,A页用户单击下载后将要下载的文件名传到B页,B页接收到后才进行下载操作,避免了链接暴露的危险。代码节选如下: protected void Btn_Clk2(入口参数代码,略)//成绩生成文本文件事件 { ? Random rd = new Random();//将信息写入数据库及文本文件中 DateTime sj=DateTime.Now; string file_Name = sj.Year.ToString() + sj.Month.ToString() + sj.Day.ToString() + sj.Hour.ToString() + sj.Minute.ToString() + sj.Second.ToString() + rd.Next(10, 99).ToString();//生成唯一文件名 FileInfo mf = new FileInfo(Server.MapPath("ks_file\\") + file_Name + ".txt"); StreamWriter sw = mf.CreateText();//以数据流方式写入 sw.WriteLine("成绩信息"); sw.WriteLine(); string sqlds = string.Format("select * from Tb_kscj where clName='{0}' and ttName='{1}'", DropDlt3.SelectedValue.ToString(), DropDlt4.SelectedValue.ToString()); DataSet ds = cl.ds(sqlds); if (ds == null) else { ? foreach(DataRow dh in ds.Tables[0].Rows) { ? string itmText = dh["id"].ToString(); itmText += dh["Name"].ToString(); itmText += dh["idCard"].ToString(); itmText += dh["ydScore"].ToString(); itmText += dh["ttName"].ToString(); |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。