C#+JavaScript+SQL Server实现Web端在线考试系统 五:考试模块设计(附源码和资源)

Posted showswoller

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#+JavaScript+SQL Server实现Web端在线考试系统 五:考试模块设计(附源码和资源)相关的知识,希望对你有一定的参考价值。

需要源码请点赞关注收藏后评论区留言私信~~~

一、考试模块概述

在线考试系统中的考试模块主要包括阅读考试规则,选择考试科目,随机抽取试题,答题计时器以及自动交卷并评分等功能

在开发考试系统过程中,需要考虑的一点是如何将试题显示在页面上,如何将试题从数据库中读取出来,比较合理的做法是将所有试题信息存储在数据库中,然后随机抽取若干试题,动态的显示在页面中

在线考试系统和普通考试的流程是一样的,考生答卷完毕后要对考生的答案评分,根据实际的需要,在线考试系统加入了自动评分模块,当考生答题完毕提交试卷后,系统会根据考生选择的答案与正确答案进行比较,最后进行评分

 二、选择考试科目

在随机抽取试题之前,考生要选择考试的科目,然后根据选择的科目随机从数据库中抽取试题给考生

程序首先根据考生选择的科目对数据库进行检索,查看数据库中是否有相关的试题,如果存在试题则随机抽取试题,否则提示考生选择的考试科目在数据库中没有试题,开始考试按钮的Click事件代码如下

protected void Button2_Click(object sender, EventArgs e)

    string StuID = Session["ID"].ToString();				//考生的编号
    string StuKC = ddlKm.SelectedItem.Text;				//选择的考试科目
    SqlConnection conn = BaseClass.DBCon();				//连接数据库
    conn.Open();											//打开连接
    SqlCommand cmd = new SqlCommand("select count(*) from tb_score where StudentID='" + StuID 
+ "' and LessonName='" + StuKC + "'", conn);				//执行SQL语句
    int i = Convert.ToInt32(cmd.ExecuteScalar());			//获取返回值
    if (i > 0)											//如果返回值大于0
    
        MessageBox.Show("你已经参加过此科目的考试了");
    
    else
    
        cmd = new SqlCommand("select count(*) from tb_test where testCourse='" + StuKC + "'", 
conn);
        int N = Convert.ToInt32(cmd.ExecuteScalar());		//获取返回值
        if (N > 0)										//如果返回值大于0
        
            //执行SQL语句
            cmd = new SqlCommand("insert into tb_score(StudentID,LessonName,StudentName) 
values('" + StuID + "','" + StuKC + "','" + lblName.Text + "')", conn);                             
           cmd.ExecuteNonQuery();
           conn.Close();									//关闭连接
           Session["KM"] = StuKC;
Response.Write("<script>window.open('StartExam.aspx','newwindow','status=1,scrollbars=1,re
sizable=1')</script>");
            Response.Write("<script>window.opener=null;window.close();</script>");
        
        else
        
            MessageBox.Show("此科目没有考试题");				//弹出提示信息
            return;
        
    

 三、设计考试页面

新建一个网页作为考试页面,它的主要控件如下

四、随机抽取试题

 当开始考试页面加载时,根据考生选择的科目在数据库中随机抽取试题,并显示在Panel控件中

public string Ans = null;								//建立存储正确答案的公共变量
public int tNUM;										//记录考题数量
protected void Page_Load(object sender, EventArgs e)

    lblEndtime.Text = "考试时间为10分钟,每小题5分,考试已用时:";			//显示考试提示
    lblStuNum.Text = Session["ID"].ToString();							//显示考生编号
    lblStuName.Text = Session["name"].ToString();						//显示考生姓名
    lblStuSex.Text = Session["sex"].ToString();							//显示考生性别
    lblStuKM.Text = "[" + Session["KM"].ToString() + "]" + "考试试题";	//显示考试科目
    int i = 1;														//初始化变量
    SqlConnection conn = BaseClass.DBCon();							//连接数据库
    conn.Open();														//打开连接
    SqlCommand cmd = new SqlCommand("select top 10 * from tb_test where testCourse='" + 
Session["KM"].ToString() + "' order by newid()", conn);
    SqlDataReader sdr = cmd.ExecuteReader();			//创建记录集
    while (sdr.Read())
    
        Literal littxt = new Literal();				//创建Literal控件
        Literal litti = new Literal();					//创建Literal控件
        RadioButtonList cbk = new RadioButtonList();	//创建RadioButtonList控件
        cbk.ID = "cbk" + i.ToString();
        littxt.Text = i.ToString() + "、" + Server.htmlEncode(sdr["testContent"].ToString()) 
+ "<br>ckquote>";
        litti.Text = "</Blockquote>";
        cbk.Items.Add("A. " + Server.HtmlEncode(sdr["testAns1"].ToString()));	//添加选项A
        cbk.Items.Add("B. " + Server.HtmlEncode(sdr["testAns2"].ToString()));	//添加选项B
        cbk.Items.Add("C. " + Server.HtmlEncode(sdr["testAns3"].ToString()));	//添加选项C
        cbk.Items.Add("D. " + Server.HtmlEncode(sdr["testAns4"].ToString()));	//添加选项D
        cbk.Font.Size = 11;							//设置文字大小
        for (int j = 1; j <= 4; j++)
        
            cbk.Items[j - 1].Value = j.ToString();
        
        Ans += sdr[6].ToString();						//获取试题的正确答案
        if (Session["a"] == null)						//判断是否第一次加载
        
            //如果第一次加载则将正确答案赋值给Session["Ans"]
            Session["Ans"] = Ans;
        
        Panel1.Controls.Add(littxt);					//将控件添加到Panel中
        Panel1.Controls.Add(cbk);						//将控件添加到Panel中
        Panel1.Controls.Add(litti);					//将控件添加到Panel中
        i++;											//使i递增
        tNUM++;										//使tNUM递增
    
    sdr.Close();
    conn.Close();										//关闭连接
    Session["a"] = 1;

五、计时器功能的实现

在考试页面中具有考试计时的功能,该功能是通过javascript脚本实现的

<script language="javascript">
    var sec = 0;
    var min = 0;
    var hou = 0;
    flag = 0;
    idt = window.setTimeout("countDown();", 1000);
    function countDown() 
        sec++;
        if (sec == 60)  sec = 0; min += 1; 
        if (min == 60)  min = 0; hou += 1; 
        document.getElementById("lbltime").innerText = min + "分 " + sec + " 秒";
        idt = window.setTimeout("countDown();", 1000);
        if (min == 10) 
            document.getElementById("btnsubmit").click();
        
    
</script>

六、交卷功能的实现

考生在规定的时间内进行考试,当考生答题完毕后,单击交卷功能,提交试卷,此时系统会将该考生的答题结果提交给自动评分模块,交卷按钮的Click事件代码如下

protected void btnsubmit_Click(object sender, EventArgs e)

    string msc = "";									//建立变量msc存储考生答案
    for (int i = 1; i <= 10; i++)
    
        RadioButtonList list = (RadioButtonList)Panel1.FindControl("cbk" + i.ToString());
        if (list != null)
        
            if (list.SelectedValue.ToString() != "")
                msc += list.SelectedValue.ToString();	//存储考生答案
            else
                msc += "0";							//如果没有选择则为0
        
    
    Session["Sans"] = msc;							//考生答案
    string sql = "update tb_score set RigthAns='" + Ans + "',StudentAns='" + msc + "' where 
StudentID='" + lblStuNum.Text + "'";					//更新考试结果数据表
    BaseClass.OperateData(sql);
    Response.Redirect("result.aspx?BInt=" + tNUM.ToString());

七、自动评分功能的实现

考生将试题提交到自动评分模块,该模块对考生答案进行评分,并将考生的成绩添加到数据表中

protected void Page_Load(object sender, EventArgs e)

    string Rans = Session["Ans"].ToString();					//获取正确答案
    int j = Convert.ToInt32(Request.QueryString["BInt"]);		//获取试题数量
    string Sans = Session["Sans"].ToString();					//获取考生答案
    int StuScore = 0;											//将考试成绩初始化为0
    for (int i = 0; i < j; i++)
    
        if (Rans.Substring(i, 1).Equals(Sans.Substring(i, 1)))	//将考生答案与正确答案作比较
        
            StuScore += 5;										//如果答案正确加5分
        
    
    this.lblResult.Text = StuScore.ToString();					//显示考试成绩
    this.lblkm.Text = Session["KM"].ToString();					//显示考试科目
    this.lblnum.Text = Session["ID"].ToString();				//显示考生编号
    this.lblname.Text = Session["name"].ToString();				//显示考生姓名
    //更新考试结果数据表
    string strsql = "update tb_score set score='" + StuScore.ToString() + "' where StudentID='" 
+ Session["ID"].ToString() + "' and LessonName='" + Session["KM"].ToString() + "'";
    BaseClass.OperateData(strsql);

创作不易  觉得有帮助请点赞关注收藏~~~

MySQL 到 SQL Server 实时数据同步实操分享

摘要:很多 DBA 和开发同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据、表多、数据量大等情况就难以同步。最近了解到一款实时数据同步工具 Tapdata Cloud,可以非常方便地完成 MySQL 数据实时同步到SQL Server,跟大家分享一下,希望对你有帮助。

本次 MySQL 数据实时同步到 SQL Server 大概只花了几分钟就完成。使用的工具是 Tapdata Cloud ,这个工具是永久免费的。

第一步:配置MySQL 连接

1.点击 Tapdata Cloud 操作后台左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择MySQL

2.在打开的连接信息配置页面依次输入需要的配置信息

【连 接 名 称】:设置连接的名称,多个连接的名称不能重复

【数据库地址】:数据库 IP / Host

【端 口】:数据库端口

【数据库名称】:tapdata 数据库连接是以一个 db 为一个数据源。这里的 db 是指一个数据库实例中的 database,而不是一个 mysql 实例。

【账 号】:可以访问数据库的账号

【密 码】:数据库账号对应的密码

【时 间 时 区】:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置

第二步:配置 SQL Server 连接

3.同第一步操作,点击左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择 SQL Server

4.在打开的连接信息配置页面依次输入需要的配置信息,配置完成后测试连接保存即可。

第三步:选择同步模式-全量/增量/全+增

进入Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程

根据刚才建好的连接,选定源端与目标端。

根据数据需求,选择需要同步的库、表,如果你对表名有修改需要,可以通过页面中的表名批量修改功能对目标端的表名进行批量设置。

在以上选项设置完毕后,下一步选择同步类型,平台提供全量同步、增量同步、全量+增量同步,设定写入模式和读取数量。

如果选择的是全量+增量同步,在全量任务执行完毕后,Tapdata Agent 会自动进入增量同步状态。在该状态中,Tapdata Agent 会持续监听源端的数据变化(包括:写入、更新、删除),并实时的将这些数据变化写入目标端。

点击任务名称可以打开任务详情页面,可以查看任务详细信息。

点击任务监控可以打开任务执行详情页面,可以查看任务进度/里程碑等的具体信息。

第四步:进行数据校验

一般同步完成后,我都习惯性进行一下数据校验,防止踩坑。

Tapdata Cloud 有三种校验模式,我常用最快的快速count校验 ,只需要选择到要校验的表,不用设置其他复杂的参数和条件,简单方便。

如果觉得不够用,也可以选择表全字段值校验 ,这个除了要选择待校验表外,还需要针对每一个表设置索引字段。

在进行表全字段值校验时,还支持进行高级校验。通过高级校验可以添加JS校验逻辑,可以对源和目标的数据进行校验。

还有一个校验方式关联字段值校验 ,创建关联字段值校验时,除了要选择待校验表外,还需要针对每一个表设置索引字段。

以上就是 MySQL数据实时同步到 SQL Server 的操作分享,希望上面的操作分享对你有帮助!码字不易,转载请注明出处~

其他数据库的同步操作

其他数据库数据实时同步到 Oracle、MySQL、PG、SQL Server、MongoDB、ES 、达梦、Kafka、GP、MQ、ClickHouse、Hazelcast Cloud、ADB MySQL、ADB PostgreSQL、KunDB、TiDB、Dummy DB 的方式也都是先配置源和目标的连接,然后新建任务选择同步模式:全量/增量/全量+增量,因为步骤相同,其他就不再贴图说明了。创建连接的时候,有没有发现:DB2、Sybase、Gbase 几个数据库现在是灰色锁定状态,应该是在开发中了,可能后续也会支持这些数据库的同步功能。Tapdata Cloud 是承诺永久免费使用的,不过要求更高、有预算的朋友也可以使用企业版,具体可访问Tapdata 官网:tapdata.net ,还可以申请试用。如果你觉得有用请收藏点赞和评论,有数据库相关的问题随时联系我~!

MySQL 到 ADB MySQL 实时数据同步实操分享
MySQL 到 ADB PostgreSQL 实时数据同步实操分享
MySQL 到 ClickHouse 实时数据同步实操分享
MySQL 到 DM DB 达梦数据库实时数据同步实操分享
MySQL 到 Elasticsearch 实时数据同步实操分享
MySQL 到 GreenPlum 实时数据同步实操分享
MySQL 到 Hazelcast Cloud 实时数据同步实操分享
MySQL 到 Kafka 实时数据同步实操分享
MySQL 到 KunDB 实时数据同步实操分享
MySQL 到 MongoDB 实时数据同步实操分享
MySQL 到 MQ 实时数据同步实操分享
MySQL 到 MySQL 实时数据同步实操分享
MySQL 到 PostgreSQL 实时数据同步实操分享
MySQL 到 SQL Server 实时数据同步实操分享
MySQL 到 Oracle 实时数据同步实操分享

以上是关于C#+JavaScript+SQL Server实现Web端在线考试系统 五:考试模块设计(附源码和资源)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 到 SQL Server 实时数据同步实操分享

C#+JavaScript+SQL Server实现Web端在线考试系统 五:考试模块设计(附源码和资源)

C# MVC5 JavaScript Chart.js 饼图,无需刷新即可从 SQL Server 数据库实时更新

电算化软件SQL Server的超级用户口令修改过,用友网络财务软件不能连接到SQL Server,请输入其超级用户(s

sql server 按时间段查询

请教SQL Server 高手