基于ASP.NET开发网上客观题测试系统

基于ASP.NET开发网上客观题测试系统

夏敏捷

(中原工学院计算机科学系 河南 郑州 450007

    摘要:本文说明ASP. NETASP的主要区别,介绍和图示ADO.NET对数据库操作的参考模型以及网上测试系统实现的主要技术,最后给出具体编程代码。

  关键字:ASP.NETNET框架;ADO.NET

一、ASP.NET技术

ASP.NET是微软推出的当前设计交互、动态网页的强有力工具,以前ASP也能实现。ASP使用Vbscript / Javascript这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

    1、代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

    2、代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

3、弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

ASP.NET抛弃了VBSCRIPTJSCRIPT,而使用.NET Framework所支持的VB.NETC#等语言做为其开发语言,这些语言生成的网页在后台被转换成了类并编译成了一个DLL。由于ASP.NET是编译执行的,所以它比ASP拥有了更高的效率。当然,最合适的编程语言还是微软为.NET Framework专门推出的C# (csharp),它可以看作是vcjava的混合体。它首先是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的asp的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.NET上就可以使业务逻辑和html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;并且提供了完善的调试纠错体系。

二、ADO.NET参考模型

ASP.NET采用ADO.NET 提供的对 Microsoft SQL Server 等数据源以及通过 OLE DB XML 公开的数据源的一致访问。应用程序可以使用 ADO.NET 来连接到这些数据源,并检索、操作和更新数据。

ADO.NET参考模型如图1

1  A DO.NET参考模型

本测试系统采用ADO.NET来访问试题数据库,题型有单选题、多选题。后者与单选题类同,故本文主要说明单选题设计思想。

三、测试系统实现

本系统从单选题库中取出时试题。在对单选题处理上,每题四个选项使用四个单选按钮,其id不同,但通过Groupname相同可以将四个单选按钮归为一组。在显示题目时,采用DataGridRepeater都可以。本系统Repeater控件,通过ItemTemplate模板中定义四个单选按钮,来实现显示题目。

显示字段数据,采用<%# DataBinder.Eval(Container.DataItem," 字段名") %>形式,这是使用DataBind技术的一种标准格式。为Repeater控件设置数据源后,在使用采用DataBind技术,就可以将字段的值显示出来。在对多选题处理上,同样通过ItemTemplate模板来实现显示题目,每题四个选项使用四个复选框,每个复选框名称不一样。

当提交试卷时,通过Repeater.Items.Count可知记录数目, Repeater.Items[i].FindControl(单选按钮id)方法,可以得到每条记录的相应单选按钮,从而经判断Checked属性可知是否选择相应单选按钮。单选题测试运行结果如图2:

                     2  单选题测试部分

单选题测试源程序文件:

<%@ Import Namespace="System.Data.OleDb" %>

<%@ Import Namespace="System.Data" %>

<HTML>

<script language="C#" runat="server">

void Page_Load(Object sender, EventArgs e)

{

   if(!this.IsPostBack){

   // 连接到sShops数据库

    OleDbConnection cn=new OleDbConnection();

   // 设置连接字符串,以便访问Microsoft AccesseShops.mdb数据库

   cn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+

                       "Data Source="+Server.MapPath("test.mdb");

   // 构造SQL语句,该语句用于从客户表中选出所有记录

   String strSQL="select * from single2";

   // 创建DataAdapter对象

   OleDbDataAdapter da=new OleDbDataAdapter(strSQL,cn);

   // 创建并填充Dataset

   DataSet ds=new DataSet();

   da.Fill(ds);

   // Repeater控件绑定到DataSet

   rpCust.DataSource=ds;

   rpCust.DataBind();

   cn.Close();

   }

}

 

void n1_click(Object sender, EventArgs e)

{

OleDbConnection cn=new OleDbConnection();

cn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+Server.MapPath("test.mdb");

   cn.Open();

   String strSQL="select * from single2";

   OleDbCommand cm=new OleDbCommand(strSQL,cn);

   OleDbDataReader dr=cm.ExecuteReader();

 System.Web.UI.WebControls.RadioButton radiobutton;

 string str="结果:";

 for(int i=0;i<rpCust.Items.Count;i++)

 {

   dr.Read();

   string control_name;

   for(int j=1;j<=4;j++)

   { control_name="my";

     control_name=control_name+j.ToString();

     radiobutton=(RadioButton)rpCust.Items[i].FindControl(control_name);

     if (radiobutton!=null && radiobutton.Checked)

       { char n=(char)(64+j);

        str=str+(i+1).ToString()+n.ToString();

        if(dr["答案"].ToString().Trim()==n.ToString())

         str=str+"  right  ";

        else

         str=str+"  error"+"/n";

        }

    }

 }

 label1.Text=str;

}

</script>

<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">

<form runat="server">

<asp:Repeater id="rpCust" runat="server">

<HeaderTemplate>

    <Table width="80%" style="font: 8pt verdana">

     <tr style="background-color:DFA894">单选题</tr>

</HeaderTemplate>

<ItemTemplate>

<tr style="background-color:FFECD8">

<td><%# DataBinder.Eval(Container.DataItem,"ID") %>

            ><%# DataBinder.Eval(Container.DataItem,"题目") %></td> </tr>

    <tr style="background-color:FFECD8">

      <td><asp:radiobutton id="my1" groupname="aa" runat="server" text="A."/>

              <%# DataBinder.Eval(Container.DataItem, "选项A") %></td>

      <td><asp:radiobutton id="my2" groupname="aa" runat="server" text="B."/>

          <%# DataBinder.Eval(Container.DataItem, "选项B") %> </td> </tr>

    <tr style="background-color:FFECD8">

      <td><asp:radiobutton id="my3" groupname="aa" runat="server" text="C."/>

              <%# DataBinder.Eval(Container.DataItem, "选项C") %> </td>

       <td> <asp:radiobutton id="my4" groupname="aa" runat="server" text="D."/>

           <%# DataBinder.Eval(Container.DataItem, "选项D") %></td></tr>

</ItemTemplate>

<FooterTemplate>  </Table></FooterTemplate>

</asp:Repeater>

      <asp:button id="Submit" Text="提交试卷" OnClick="n1_click" runat="server" />

      <asp:label id="label1" text="label1" runat="server" />

    </form> </body></HTML>

多选题测试时,显示时需将ItemTemplate模板中的radiobutton改为CheckBox,同时去掉groupname="aa"。结果判断时,void n1_click(Object sender, EventArgs e)中的

System.Web.UI.WebControls.RadioButton改为System.Web.UI.WebControls.CheckBox  ;因为控件改为复选框。以下是主要不同部分:

System.Web.UI.WebControls.CheckBox CB;

 for(int i=0;i<rpCust.Items.Count;i++)

 {

   dr.Read();

   string d_result="";  

   Response.Write(i+1);

   CB=(CheckBox)rpCust.Items[i].FindControl("my1");

   if (CB!=null && CB.Checked)    d_result=d_result+"A";       

   CB=(CheckBox)rpCust.Items[i].FindControl("my2");

   if (CB!=null && CB.Checked)    d_result=d_result+"B";  

   CB=(CheckBox)rpCust.Items[i].FindControl("my3");

   if (CB!=null && CB.Checked)    d_result=d_result+"C";  

   CB=(CheckBox)rpCust.Items[i].FindControl("my4");

   if (CB!=null && CB.Checked)    d_result=d_result+"D";       

    Response.Write("答案 is");

    Response.Write(dr["答案"]);

    if(dr["答案"].ToString()==d_result)        Response.Write("right");

    Response.Write("<BR>"); 

 }

参考文献:

[1]木林森. C#ASP.NET程序设计教程.北京;清华出版社,2002.1

[2]王易. ASP.NET网站设计实例通;清华出版社,2002.1

 

一、 需求分析 随着人事考核制度的逐渐科学化、规范化、日常化,组织机构越来越多地要求能够对被考核侯选人实行全面的考核,其中,考核候选人周围的同事、领导及其被管理的员工对候选人的评价(所谓360度考核)是一个重要的参考依据。 但是,针对不同的员工组织可能采用不同的考核标准,同时,作为组织中的一员,所有的员工都有可能成为被考核候选人。并且,对员工的360度考核可能会有大量的数据,举例说,如某公司有员工1000人,现希望给10个被考评候选人进行测评打分,每个候选人需要考评10项内容,如此,将会产生10万条数据,这显然是巨大的,并且对数据的处理将是费时费力的,当将考核制度日常化之后,如果不能采用有效的考核手段,这种对时间、人员精力的占用将会是相当巨大的。 另一个方面,考虑到员工集中对侯选测评人进行打分时,可能会因为种种顾虑,而有失公允,故,应能将系统开发成基于Internet网络的在线测评系统。 二、开发工具及数据库管理系统 主要基于Internet技术同时兼顾Window应用来实现软件的创建、部署、使用的.net框架是微软21世纪主推的开发平台,并且,也是微软下一代操作系统策略的核心。 相比于JAVA是一个标准,.Net是一个架构,它包含了在操作系统上开发软件的所有层次,为集成任意平台上的显示技术、组件技术、数据驱动技术提供了丰富的层次。.net实际上封装了操作系统的部分功能,如文件处理和内存分配,这就为软件的移植奠定了良好的基础。 .net总体分为三层体系结构,底层是公共语言运行库(CLR),它是.net的核心,是驱动关键功能的引擎,它包括数据类型的公共系统,这些公共标准和标准接口约定使跨语言继承成为可能,除了内存的分配和管理之外,CLR还负责对象的跟踪、垃圾回收等。中间层包括一些重要的系统服务,如ADO.Net,XML类,组件模型,安全性等,这些服务在总架构的控制之下,可以在各处通用,而且调用方式与语言无关。顶层主要提供给程序开发开发Window窗体和WEB表单,WEB服务、应用服务。其中,WEB服务为程序使用SOAP在Internet上通信提供了一种机制,这也是未来网络信息处理的一个主要方向。 综观.net体系,它在软件项目开发中具有以下一些值得关注的优点。 1) 语言集成。可以使程序人员真正实现跨语言编程,而且相当多对下层对象的调用方法是统一的,且所有.Net支持的语言都被编译为标准的字节代码,所以语言之间的性能和差异变小了。因而,使用什么语言编程已不是重要问题。 2) 与数据库特别SQL_server数据库良好接口,以及在Internet下编程的突破,使得开发WEB下的管理信息系统更加容易。 3) 提供对WEB服务的支持,且平台自动完成WEB服务的建设,隐藏了SOAP 、WSDL 、XML的复杂性。 4)CLR集成了内存和过程的管理从而实现了系统的可伸缩性,而绝大多数系统的功能都集中在CLR中,因此,不需要再付出任何代价,即可获得应用程序的较大伸缩性。 5)秉承了微软的一贯作风:一个良好的IDE环境,即使开发人员可能需要适当地手工编写代码,但集成的开发环境为项目开发、调试、部署都带来了极大的方便。 数据库管理系统选用SQL_server2000,SQL_server2000是Microsoft推出的高性能关系数据库管理系统,是Microsoft公司在大型数据库领域的最新版本和旗舰产品,也是Microsoft公司争夺电子商务领域最重要的核心部件市场——网络数据库平台的一大利器。 SQL_server2000是建立在SQL_server6.5和7.0坚固而雄厚的技术基础之上,是公论的运行在Window平台的最佳数据库。SQL_server2000已经在性能和可扩展性方面建立了世界领先的地位,是一套完全的数据库和数据分析解决方案。 另一方面,作为Microsoft公司的同一家公司的两个不同领域的产品,.net与SQL_server2000具有及其良好的接口,Ado.net中很多的数据库访问对象是专门针对SQL_server2000进行开发的,对SQL_server2000有极好的操控性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值