在線考試系統(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 }

該項目已被學姐要走。=_=!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM