• 在线考试系统(Online Exam System)--ASP.NET


    用户设计

        -|学生

        -|老师

        -|管理员

    学生结构设计

        -|个人信息管理

           -|修改个人信息

           -|修改登录密码

        -|选课中心

           -|显示所有老师所开课的信息可进行选课

           -|显示自己已选课程

        -|在线考试

           -|对已选老师开设的课程选择进行考试

        -|成绩查询

           -|查看自己考试成绩

     

      老师结构设计

        -|个人信息管理

           -|修改个人信息

           -|修改登录密码

        -|课程管理

           -|显示学校开设的课程(老师可选择添加课程)

           -|显示老师开设的课程

        -|考试管理

           -|显示老师自己开设的课程

           -|对课程添加试题(选择、填空、简答)

           -|查看所开设课程的考试信息(查看该课程学生考试情况)

    管理员结构设计**

        -|初始教师信息(写入老师编号,老师根据编号才能注册)

        -|初始课程信息(写入课程信息,老师可选择课程进行开设)

    数据库支撑:

    管理员表

    老师表

    学生表

    选择题表 XZe_yi存放正确答案,在前台进行调整选项,减少数据冗余。

    XZe_Type:该选择题属于哪个科目,直接写课程ID。XZe_Zl:是真题还是练习题。XZe_Zj:题目章节。

    填空题表 这里TK_k1, 该题第一个空的答案,TK_k2 第二个空的答案,类推

    【这里TK_F字段,判断这几个答案是否可以乱序回答,例如,请说出四书是那四书,那么此时的答案可能是乱序的。答辩时碰到导师问道这个问题//0.0,后加上的】

    简答题表

     课程表

    老师选课表

    学生选课表

    界面支撑:

     

    其他页面不在展示......

     总结点(大牛勿喷):

    在本次实训中,对学过的ASP.net进行了实践,个人感觉关键点:对整体考试系统的把握、数据库的分析与创建、在线考试页面的技术支撑。

    再细一点,整个系统运行的流程,三个不同角色的功能。数据库表的分析,尽量的“优”。各个页面技术的实现细节。

    整个系统不再赘述。数据库要分析好【如果读者觉得本次数据库设计还有什么好的意见请留言博主,先谢谢】。

    各页面技术的实现。

    对数据的操作封装,代码设计细节参见:http://www.cnblogs.com/A--Q/p/5172009.html

    前台三个角色的登录,设计细节参见:http://www.cnblogs.com/A--Q/p/5323971.html

    在线考试页面,设计细节:

    附加函数:

     1         public Random a = new Random();//对试卷选项进行排序生成随机顺序
     2         public int[] PaiXu() //随机排序,返回一个整形数组,长度为4,值为3 4 5 6,不确定值的顺序,用于选择题的选项排序
     3         {
     4             int[] i = new int[4];
     5 
     6             i[0] = a.Next(3, 6);
     7             switch (i[0])
     8             {
     9                 case 3: i[1] = a.Next(4, 5); i[2] = 6; i[3] = 9 - i[1]; break;
    10                 case 4: i[1] = a.Next(5, 6); i[2] = 3; i[3] = 11 - i[1]; break;
    11                 case 5: i[1] = a.Next(3, 4); i[2] = 7 - i[1]; i[3] = 6; break;
    12                 case 6: i[1] = a.Next(3, 4); i[2] = 5; i[3] = 7 - i[1]; break;
    13             }
    14             return i;
    15         }
    16         

    页面代码:

      1 using System;
      2 using System.Collections;
      3 using System.Configuration;
      4 using System.Data;
      5 using System.Linq;
      6 using System.Web;
      7 using System.Web.Security;
      8 using System.Web.UI;
      9 using System.Web.UI.HtmlControls;
     10 using System.Web.UI.WebControls;
     11 using System.Web.UI.WebControls.WebParts;
     12 using System.Xml.Linq;
     13 using MySql.Data.MySqlClient;
     14 using DB_;
     15 
     16 public partial class student3 : System.Web.UI.Page
     17 {
     18     static int[] da = new int[6];//存放答案 xz
     19     int daa = 0;//记录第几条 ,答案选项0123  xz
     20     public static string[,] tkda = new string[10, 3];//存放答案 tk 最多十条填空,3用来标识关键字只有k1-k3
     21     public static string[,] jdda = new string[10, 6];//存放答案 jd 同填空题
     22     DB db = new DB();//创建对象
     23     //------
     24     //生成试卷 选择5 50 填空5 25 简答题 2 25
     25     //
     26     int xzt = 5, tkt = 5, jdt = 2, xzf = 50, tkf = 25, jdf = 25;
     27     int jdcj = 0, tkcj = 0, xzcj = 0;
     28     static int tkkk = 0;//填空题记录有几个空 填空
     29     static string Kid = "", Tid = "";
     30     protected void Page_Load(object sender, EventArgs e)
     31     {
     32         try
     33         {
     34 
     35             if (!IsPostBack)
     36             {
     37                 if (Request["kid"] != null && Request["tid"] != null)
     38                 {
     39                     Kid = Request["kid"].ToString();
     40                     Tid = Request["tid"].ToString();
     41                 }
     42                 XZZ();
     43                 TKK();
     44                 JDD();
     45             }
     46         }
     47         catch
     48         { Response.Write("<script>alert('载入有误请重新登录!');window.location.href='Login.aspx';</script>"); }
     49 
     50         
     51     }
     52     protected void XZZ()
     53     {
     54       //  MySqlConnection con=null;
     55         try
     56         {
     57             int tm = 1;
     58             string sqlstr = "SELECT * from XZe_ where XZe_Type='"+Kid+"' and XZe_TeaId='"+Tid+"' order by rand() limit "+xzt; 
     59             // con = db.conntent();
     60             MySqlDataReader selectcom = db.Select1(sqlstr);//, con
     61             while (selectcom.Read())
     62             {
     63                 Label j1 = new Label();
     64                 RadioButtonList i1 = new RadioButtonList();
     65                 //i1.ID = js.ToString();
     66                 j1.Text = tm.ToString()+". "+selectcom.GetString("XZe_T");//题目
     67                 tm++;//1.  2.  3. 
     68                 int[] a1 = new int[4];//存放随机结果 a[0-3]=>3-6
     69                 RepeatDirection Horizontal = new RepeatDirection();//设置单选按钮组为横排
     70                 i1.RepeatDirection = Horizontal;//设置单选按钮组为横排+
     71                 
     72                 a1 = db.PaiXu();//使用排序得到随机的3456
     73                 for (int j = 0; j < 4; j++)
     74                 {
     75                     if (a1[j] == 3) { da[daa++] = j; }
     76                     ListItem a22 = new ListItem();//建立列表组
     77                     a22.Value = j.ToString();//用于取出value 值与答案比较
     78                     a22.Text = selectcom.GetString(a1[j]);//将数据付给listItem 对象
     79                     i1.Items.Add(a22);//添加数据到列表项
     80                 }
     81                 XZ.Controls.Add(j1);
     82                 XZ.Controls.Add(i1);
     83             }
     84         }
     85         catch(Exception e) { Response.Write("取数据有错误"); }
     86         finally {   }
     87 
     88     }
     89     protected void TKK()
     90     {
     91         tkkk = 0;
     92         int a = 0;
     93         string sqlstr ="SELECT * from tk_ where TK_Type='"+Kid+"' and TK_TeaId='"+Tid+"' order by rand() limit "+tkt;
     94         MySqlDataReader selectcom = db.Select1(sqlstr);
     95         while (selectcom.Read())
     96         {
     97             for (int j = 0, i = 3; i < 6; i++)//数据库中答案字段 3-6
     98             {
     99                 tkda[a, j++] = selectcom.GetString(i);
    100             }
    101             Label j1 = new Label();//存放题目
    102             string abc = selectcom.GetString("TK_T");
    103             string[] arr = abc.Split('_');//用 _ 来分割有几个空
    104             j1.Text = "<br />"+ (++a).ToString()+"."+selectcom.GetString("TK_T")+"<br />";//题目
    105             TK.Controls.Add(j1);//添加题目到网页中
    106             for (int i = 0; i < arr.Length - 1; i++)
    107             {
    108                 tkkk++;
    109                 TextBox q = new TextBox();
    110                 TK.Controls.Add(q);
    111                 //生成相应的填空
    112             }
    113         }
    114     }
    115     protected void JDD()
    116     {
    117         int j = 0;
    118         string sqlstr = "SELECT * from jd_ where JD_Type='" + Kid + "' and JD_TeaId='" + Tid + "' order by rand() limit "+jdt;
    119         MySqlDataReader selectcom = db.Select1(sqlstr);//, con
    120         while (selectcom.Read())
    121         {
    122 
    123             for (int a = 0, i = 3; i < 9; i++)
    124             {
    125                 jdda[j, a++] = selectcom.GetString(i);//i用来取数,a用来写入数组,j用来表示第几条数据
    126             } 
    127             Label j1 = new Label();//存放题目
    128             j1.Text = "<br />"+ (++j).ToString()+"."+selectcom.GetString("JD_T")+"<br />";//题目
    129             TextBox a1 = new TextBox();
    130             a1.TextMode = TextBoxMode.MultiLine;///设置文本框为多行输入
    131             a1.Rows = 4;//设置文本框的行数
    132             JD.Controls.Add(j1);//添加题目到网页中
    133             JD.Controls.Add(a1);//添加文本框
    134         }
    135     }
    136     protected void LOOK_Click(object sender, EventArgs e)
    137     {
    138         XZCJ(); TKCJ(); JDCJ();
    139         int zz = xzcj + tkcj + jdcj;
    140         string cjj = "insert into xsks_ values('"+Session["id"]+"','" + Tid + "','" + Kid + "',CURDATE( ),'" + zz + "')";
    141         if (db.ZSG(cjj)) { Response.Write("<script>alert('成绩提交成功!你的成绩是 "+zz.ToString()+"');window.location.href='students.aspx'</script>"); }
    142         else{ Response.Write("<script>alert('成绩提交失败!');</script>"); }
    143     }
    144     protected void XZCJ()
    145     {
    146         int j = xzt, i = 0;
    147         try
    148         {
    149             while (i < xzt)
    150             {
    151                 int xzx = Convert.ToInt32(Request.Form[j++].ToString());//*得到选择项
    152                 if (da[i++] == xzx)
    153                     xzcj += (xzf / xzt);
    154             }
    155 
    156         }
    157         catch
    158         {
    159 
    160         }
    161     }
    162     protected void TKCJ()
    163     {
    164 
    165         int xx = xzt*2;
    166         try
    167         {
    168             for (int i = 0; i < tkt; i++)
    169             {
    170                 for (int j = 0; j < 3; j++)
    171                 {
    172                     if (tkda[i, j] == " ") continue;
    173                     if (tkda[i, j] == Request.Form[xx++].ToString())
    174                         tkcj += (tkf / tkkk);
    175                 }
    176             }
    177 
    178         }
    179         catch
    180         {
    181 
    182         }
    183     }
    184     protected void JDCJ()
    185     {
    186 
    187         int xx = 2*xzt+tkcj;
    188         try
    189         {
    190             for (int i = 0; i < tkt; i++)
    191             {
    192                 for (int j = 0; j < 6; j++)
    193                 {
    194                     if (jdda[i, j] == " ") continue;
    195                     if (Request.Form[xx].ToString().IndexOf(jdda[i, j]) + 1 >= 1)
    196                     { if (jdcj < (jdf / jdt))jdcj += 3; else break; }
    197                 }
    198                 xx++;
    199             }
    200 
    201         }
    202         catch(Exception e)
    203         {        }
    204 
    205     }
    206 }

    该项目已被学姐要走。=_=!

  • 相关阅读:
    es6学习笔记--let和const
    最新数组方法(包括es6)
    es6学习笔记--模板字符串
    版本控制工具--svn和git的使用(三) -----git的使用(2)
    版本控制工具--svn和git的使用(三) -----git的使用(1)
    版本控制工具--svn和git的使用(二) -----SVN的操作
    版本控制工具--svn和git的使用(一) -----版本控制的好处以及分类
    e.preventDefault()和e.stopPropagation()以及return false的作用和区别
    Mybatis之SessionFactory原理
    Mybatis架构简介
  • 原文地址:https://www.cnblogs.com/A--Q/p/5877437.html
Copyright © 2020-2023  润新知