用戶設計
-|學生
-|老師
-|管理員
學生結構設計
-|個人信息管理
-|修改個人信息
-|修改登錄密碼
-|選課中心
-|顯示所有老師所開課的信息可進行選課
-|顯示自己已選課程
-|在線考試
-|對已選老師開設的課程選擇進行考試
-|成績查詢
-|查看自己考試成績
老師結構設計
-|個人信息管理
-|修改個人信息
-|修改登錄密碼
-|課程管理
-|顯示學校開設的課程(老師可選擇添加課程)
-|顯示老師開設的課程
-|考試管理
-|顯示老師自己開設的課程
-|對課程添加試題(選擇、填空、簡答)
-|查看所開設課程的考試信息(查看該課程學生考試情況)
管理員結構設計**
-|初始教師信息(寫入老師編號,老師根據編號才能注冊)
-|初始課程信息(寫入課程信息,老師可選擇課程進行開設)
數據庫支撐:
管理員表
老師表
學生表
選擇題表 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 }
該項目已被學姐要走。=_=!