在線考試系統 我了個去 總算折騰出了個樣子

       整死我了 今天下午搞那啥下拉框 挑了半天的  來了箇中意的 結果被俺改壞了~ 結果就重搞了個頁面 單獨搞好了再放進原來的頁面   那些邊邊框框 俺給定好了位 就不敢瞎動了 因爲咱一改 我靠 怎麼這個框跑那去了~~ 最煩這個啦 這東西寫一個要發好幾天牢騷吶

      現在把考試部分完成了 邏輯不要太簡單吶 而且還有點小地方 偶還沒高興改來 前臺的先放放 後面管理員部分還沒咋寫 不過gridview咱相對其它的 而且經過上次瞎折騰了回repeater 大概有個小數了 要熟悉些 可能寫起來會比較舒暢 添加修改查找咱最熟悉不過了 就是前臺這數據啊跳轉啊再加點ajax啊啥的 咱以前沒大搞過 一會這一個bug 那一個bug 拼命百度找 零碎 但是卻也不是很困難 就是覺得麻煩 煩躁 感覺自己整天把時間花上面 還不如把那大話設計模式再多看掉幾章吶

       這個在線考試系統應該改名成在線單選系統吶 不過的確是好寫 米有啥麻煩的地方 直接上radiobutton 俺一大早就把後臺給先寫了 前臺就在那死磨 各種bug 一個接一個被俺東查西查給解決了

       實話說這是咱第一個分層的...以前幫別人寫課設 哪管分層呀重構呀 時間壓根不夠 直接ctrl+c/v 寫得自己要吐 而且咱是能寫winform的 堅決不用webform的 這導致俺寫過學生管理系統,圖書管理系統,工資管理系統,人事管理系統,超市管理系統,小區管理系統 等等等 這個寫太多了... 卻米有一個在前臺花過任何工夫 很多地方都是在做重複的事  倒是寫了一個水果判斷的小東西 數據庫用到了樹型的結構 裏面搞了點小遞歸 還有那個訂單管理 裏面用到了主從表 而且俺這個是用LinQ To Entity寫的 還引發了一些C#基礎的問題 這兩個感覺收穫比較大 其它的很多東西都是雷同的...數據庫設計咱也只能到滿足三範式的程度 數據量嘛也不是很大 毫無技術水平在裏面 的確是低水平的事....  話說看過不少人的畢業設計 數據庫的確設計的不行 現在的教育就是最沒水平的事 很多人也是做不來 真是一個悲劇

       這次第一次分層 還是菜菜給咱的要求 咱還很囧地不敢把數據訪問層和業務邏輯層給分開來 數據訪問層直接一個DBHelp  說到這個DBHelp 真是懷念咱大二寒假第一次寫的那個 雖然寫得很搓 很不規範 但是也算是咱自己寫了N多代碼後 反覆寫一段代碼寫到想吐後 自己突發奇想給抽出來的一個類 也是咱第一次把東西從一個整體中抽出來封裝  一直到後來才發現 原來就是要這樣寫呀 人生啊 就是反覆折騰 折騰到了一個境界 就開始思考一些問題 然後就想辦法去解決它 咱自學的時候真的走了很多彎路 但是其實每一次碰壁 都是一種成長吧 所以有時候 感觸還真是挺深的 至少是我自己思考出來的

        俺把這次一個簡單的課設 定位於俺寫了這麼多課設(我了個去 這個真的有點太多了..)裏成長最大的一次 爲嘛呢? 時間充足 俺想怎麼折騰就怎麼折騰... 而且菜菜也沒很大的限制我 導致我折騰完了 再折騰  結果就是-----------------反覆地改啊 抽啊      說到這 偶想 菜菜你一定在哭了吧^ ^......

      以下 上關鍵代碼 老規矩 紀念一下俺這兩天瞎折騰的結果


 

Code:
  1. MarkControl.cs   
  2.   
  3.   
  4.   
  5. using System;   
  6. using System.Collections.Generic;   
  7. using System.Linq;   
  8. using System.Text;   
  9. using OnlineTestModel;   
  10. using OnlineTextDAL;   
  11.   
  12. namespace OnlineTestBLL   
  13. {   
  14.     public class MarkControl   
  15.     {   
  16.   
  17.         //答案   
  18.         List<AnswerModel> anserModel = new List<AnswerModel>();   
  19.         //總分   
  20.         readonly int allScore = 100;   
  21.   
  22.         public MarkControl(List<AnswerModel> am,string studentID)   
  23.         {   
  24.             anserModel = am;   
  25.             int score = MarkScore(allScore);   
  26.             DataAccess da = new DataAccess();   
  27.             string sqlstr = "UPDATE Students SET score="+ score.ToString() + "  WHERE studentID='" + studentID + "'";   
  28.             da.ExecuteSQL(sqlstr);   
  29.         }   
  30.   
  31.   
  32.         /// <summary>   
  33.         /// 評分   
  34.         /// </summary>   
  35.         /// <returns></returns>   
  36.         public int MarkScore(int score)   
  37.         {   
  38.             int eachScore = 100 / anserModel.Count;   
  39.             
  40.             foreach (AnswerModel am in anserModel)   
  41.             {   
  42.                 if (Judge(am) == false)   
  43.                 {   
  44.                     score -= eachScore;   
  45.                 }   
  46.             }   
  47.   
  48.             return score;   
  49.         }   
  50.   
  51.   
  52.         /// <summary>   
  53.         /// 判斷   
  54.         /// </summary>   
  55.         /// <param name="answer"></param>   
  56.         /// <param name="correctAnswer"></param>   
  57.         /// <returns></returns>   
  58.         private bool Judge(AnswerModel am)   
  59.         {   
  60.             if (am.ProblemAnswer==am.ProblemKey)   
  61.             {   
  62.                 return true;   
  63.             }   
  64.             else  
  65.             {   
  66.                 return false;   
  67.             }   
  68.         }   
  69.   
  70.     }   
  71. }   
  72.   
  73.   
  74.   
  75.   
  76. TestControl.cs   
  77.   
  78.   
  79.   
  80.   
  81. using System;   
  82. using System.Collections.Generic;   
  83. using System.Linq;   
  84. using System.Text;   
  85. using OnlineTestModel;   
  86. using OnlineTextDAL;   
  87. using System.Data;   
  88.   
  89. namespace OnlineTestBLL   
  90. {   
  91.     public class TestControl   
  92.     {   
  93.         /// <summary>   
  94.         /// 獲取試題   
  95.         /// </summary>   
  96.         /// <returns></returns>   
  97.         public List<ProblemModel> GetTest(int problemAmount)   
  98.         {   
  99.             List<int> problemIDArray = new List<int>();   
  100.             List<ProblemModel> problemModelArray = new List<ProblemModel>();   
  101.             int maxNum = GetMaxID();   
  102.             while (problemAmount != 0)   
  103.             {   
  104.                 int? problemID = GetRandom(problemIDArray,maxNum);   
  105.                 if (problemID != null)   
  106.                 {   
  107.                     int ID = (int)problemID;   
  108.                       
  109.                     ProblemModel pm = GetProblem(ID);   
  110.                     if (pm != null)//取到試題   
  111.                     {   
  112.                         problemIDArray.Add(ID);   
  113.                         problemModelArray.Add(pm);   
  114.                         problemAmount--;   
  115.                     }   
  116.                 }   
  117.             }   
  118.   
  119.             return problemModelArray;   
  120.         }   
  121.   
  122.   
  123.         /// <summary>   
  124.         /// 獲取隨機數   
  125.         /// </summary>   
  126.         /// <param name="problemArray"></param>   
  127.         /// <returns></returns>   
  128.         private int? GetRandom(List<int> problemArray,int maxNum)   
  129.         {   
  130.             Random rd = new Random();   
  131.             int randomNum = rd.Next(1, maxNum);   
  132.             if (problemArray.Contains(randomNum) != true)   
  133.             {   
  134.   
  135.                     return randomNum;   
  136.             }   
  137.             else  
  138.             {   
  139.                 return null;   
  140.             }   
  141.         }   
  142.   
  143.   
  144.         /// <summary>   
  145.         /// 獲取最大試題號   
  146.         /// </summary>   
  147.         /// <returns></returns>   
  148.         private int GetMaxID()   
  149.         {   
  150.             string sqlstr = "SELECT MAX(problemID) FROM Problem";   
  151.             DataAccess da = new DataAccess();   
  152.             DataRow dr = da.GetDataRow(sqlstr);   
  153.             int maxNum;   
  154.             maxNum = Int32.Parse(dr[0].ToString());   
  155.             maxNum++;   
  156.             return maxNum;   
  157.         }   
  158.   
  159.   
  160.         /// <summary>   
  161.         /// 獲得題目   
  162.         /// </summary>   
  163.         /// <param name="problemID"></param>   
  164.         /// <returns></returns>   
  165.         private ProblemModel GetProblem(int problemID)   
  166.         {   
  167.             string sqlstr = "SELECT * FROM Problem WHERE problemID=" + problemID.ToString() + " AND IsPub='True'";   
  168.             DataAccess da = new DataAccess();   
  169.             DataRow dr = da.GetDataRow(sqlstr);   
  170.             ProblemModel pm = new ProblemModel();   
  171.             if (dr == null)   
  172.             {   
  173.                 return null;   
  174.             }   
  175.             else  
  176.             {   
  177.   
  178.                 pm.problemID = dr["problemID"].ToString().Trim();   
  179.                 pm.Type = dr["Type"].ToString().Trim();   
  180.                 pm.Title = dr["Title"].ToString().Trim();   
  181.                 pm.Ans1 = dr["Ans1"].ToString().Trim();   
  182.                 pm.Ans2 = dr["Ans2"].ToString().Trim();   
  183.                 pm.Ans3 = dr["Ans3"].ToString().Trim();   
  184.                 pm.Ans4 = dr["Ans4"].ToString().Trim();   
  185.                 pm.AnsKey = dr["AnsKey"].ToString().Trim();   
  186.   
  187.                 return pm;   
  188.             }   
  189.         }   
  190.     }   
  191. }   
  192.   
  193.   
  194.   
  195.   
  196.   
  197. StudentTest.aspx.cs   
  198.   
  199.   
  200.   
  201.   
  202. using System;   
  203. using System.Collections.Generic;   
  204. using System.Linq;   
  205. using System.Web;   
  206. using System.Web.UI;   
  207. using System.Web.UI.WebControls;   
  208. using OnlineTestBLL;   
  209. using OnlineTestModel;   
  210.   
  211. public partial class StudentTest : System.Web.UI.Page   
  212. {   
  213.     static List<ProblemModel> problemArray;   
  214.     static string userID;   
  215.   
  216.     protected void Page_Load(object sender, EventArgs e)   
  217.     {   
  218.           
  219.         if (IsPostBack == false)   
  220.         {   
  221.             if (Session["userid"] != null)   
  222.             {   
  223.                 userID = Session["userid"].ToString();   
  224.             }   
  225.             else  
  226.             {   
  227.                 Response.Write(WebControl.ToWeb("您還沒有登陸!""Login.aspx"));   
  228.             }   
  229.                
  230.             TestControl tc = new TestControl();   
  231.             //取試題   
  232.             problemArray = tc.GetTest(5);   
  233.             //綁定數據   
  234.             rptTest.DataSource = problemArray;   
  235.             rptTest.DataBind();   
  236.   
  237.             for (int i = 0; i < rptTest.Items.Count; i++)   
  238.             {   
  239.                 RepeaterItem ri = rptTest.Items[i];   
  240.                 ProblemModel pm = problemArray[i];   
  241.                 //給problemITEM賦值   
  242.                 SetProblem(ri, pm, i);   
  243.             }   
  244.         }   
  245.     }   
  246.   
  247.     protected void btnSummit_Click(object sender, EventArgs e)   
  248.     {   
  249.         if (AllSelected() == true)   
  250.         {   
  251.             List<AnswerModel> amArray = new List<AnswerModel>();   
  252.             for (int i = 0; i < rptTest.Items.Count; i++)   
  253.             {   
  254.                 RepeaterItem ri = rptTest.Items[i];   
  255.                 ProblemModel pm = problemArray[i];   
  256.                 //將答案添加到答案模型列表   
  257.                 amArray.Add(GetAnswer(ri, pm));   
  258.             }   
  259.             //評分   
  260.             MarkControl mc = new MarkControl(amArray, userID);   
  261.   
  262.             //Session["userid"] = null;   
  263.             WebControl.AjaxToWeb(this,"已完成考試","Login.aspx");   
  264.   
  265.         }   
  266.         else  
  267.         {   
  268.             WebControl.ShowAjaxDialog(this"alert(/"請全部作答!/")");   
  269.             // ScriptManager.RegisterClientScriptBlock(this,typeof(Page),DateTime.Now.ToString().Replace(":"," "),"alert(/"請全部作答!/")",true);   
  270.         }   
  271.     }   
  272.   
  273.   
  274.     /// <summary>   
  275.     /// 給Item賦值   
  276.     /// </summary>   
  277.     /// <param name="ri"></param>   
  278.     /// <param name="pm"></param>   
  279.     private void SetProblem(RepeaterItem ri, ProblemModel pm,int i)   
  280.     {   
  281.         Label lblCount = ri.Controls[1] as Label;   
  282.         lblCount.Text = (i + 1).ToString();   
  283.         Label lblTitle = ri.Controls[3] as Label;   
  284.         lblTitle.Text = pm.Title;   
  285.   
  286.        /* RadioButton rdobtnA = ri.Controls[5] as RadioButton;  
  287.         rdobtnA.Text = pm.Ans1;  
  288.         RadioButton rdobtnB = ri.Controls[7] as RadioButton;  
  289.         rdobtnB.Text = pm.Ans2;  
  290.         RadioButton rdobtnC = ri.Controls[9] as RadioButton;  
  291.         rdobtnC.Text = pm.Ans3;  
  292.         RadioButton rdobtnD = ri.Controls[11] as RadioButton;  
  293.         rdobtnD.Text = pm.Ans4;*/  
  294.   
  295.         List<RadioButton> rbArray = GetRadioButton(ri);   
  296.   
  297.         rbArray[0].Text = pm.Ans1;   
  298.         rbArray[1].Text = pm.Ans2;   
  299.         rbArray[2].Text = pm.Ans3;   
  300.         rbArray[3].Text = pm.Ans4;   
  301.     
  302.     }   
  303.   
  304.   
  305.     /// <summary>   
  306.     /// 取得答案模型   
  307.     /// </summary>   
  308.     /// <param name="ri"></param>   
  309.     /// <param name="pm"></param>   
  310.     /// <returns></returns>   
  311.     private AnswerModel GetAnswer(RepeaterItem ri,ProblemModel pm)   
  312.     {   
  313.         AnswerModel am = new AnswerModel();   
  314.         //取得答案選項   
  315.         string ansStr = GetAnswerKey(ri);   
  316.   
  317.         am.ProblemID = pm.problemID;   
  318.         am.ProblemAnswer = pm.AnsKey;   
  319.         am.ProblemKey = ansStr;   
  320.   
  321.         return am;   
  322.     }   
  323.   
  324.   
  325.     /// <summary>   
  326.     /// 判斷是否全寫了答案    
  327.     /// </summary>   
  328.     /// <returns></returns>   
  329.     private bool AllSelected()   
  330.     {   
  331.         foreach (RepeaterItem ri in rptTest.Items)   
  332.         {   
  333.             if (GetAnswerKey(ri) == null)   
  334.             {   
  335.                 return false;   
  336.             }   
  337.         }   
  338.         return true;   
  339.     }   
  340.   
  341.   
  342.     /// <summary>   
  343.     /// 取得答案選項   
  344.     /// </summary>   
  345.     /// <param name="ri"></param>   
  346.     /// <returns></returns>   
  347.     private string GetAnswerKey(RepeaterItem ri)   
  348.     {   
  349.       /*  RadioButton rdobtnA = ri.Controls[5] as RadioButton;  
  350.         RadioButton rdobtnB = ri.Controls[7] as RadioButton;  
  351.         RadioButton rdobtnC = ri.Controls[9] as RadioButton;  
  352.         RadioButton rdobtnD = ri.Controls[11] as RadioButton;*/  
  353.         List<RadioButton> rbArray = GetRadioButton(ri);   
  354.           
  355.   
  356.         string ansStr = "";   
  357.   
  358.         if (rbArray[0].Checked == true)   
  359.         {   
  360.             ansStr = "A";   
  361.         }   
  362.         else if (rbArray[1].Checked == true)   
  363.         {   
  364.             ansStr = "B";   
  365.         }   
  366.         else if (rbArray[2].Checked == true)   
  367.         {   
  368.             ansStr = "C";   
  369.         }   
  370.         else if (rbArray[3].Checked == true)   
  371.         {   
  372.             ansStr = "D";   
  373.         }   
  374.         else  
  375.         {   
  376.             ansStr = null;   
  377.         }   
  378.        /* if (rdobtnA.Checked == true)  
  379.         {  
  380.             ansStr = "A";  
  381.         }  
  382.         else if (rdobtnB.Checked == true)  
  383.         {  
  384.             ansStr = "B";  
  385.         }  
  386.         else if (rdobtnC.Checked == true)  
  387.         {  
  388.             ansStr = "C";  
  389.         }  
  390.         else if (rdobtnD.Checked == true)  
  391.         {  
  392.             ansStr = "D";  
  393.         }  
  394.         else  
  395.         {  
  396.             ansStr = null;  
  397.         }*/  
  398.   
  399.         return ansStr;   
  400.     }   
  401.   
  402.   
  403.     /// <summary>   
  404.     /// 取得RadionButton列表   
  405.     /// </summary>   
  406.     /// <param name="ri"></param>   
  407.     /// <returns></returns>   
  408.     private List<RadioButton> GetRadioButton(RepeaterItem ri)   
  409.     {   
  410.         List<RadioButton> rbArray = new List<RadioButton>();   
  411.         RadioButton rdobtnA = ri.FindControl("rdoAnsA"as RadioButton;   
  412.         RadioButton rdobtnB = ri.FindControl("rdoAnsB"as RadioButton;   
  413.         RadioButton rdobtnC = ri.FindControl("rdoAnsC"as RadioButton;   
  414.         RadioButton rdobtnD = ri.FindControl("rdoAnsD"as RadioButton;   
  415.   
  416.         rbArray.Add(rdobtnA);   
  417.         rbArray.Add(rdobtnB);   
  418.         rbArray.Add(rdobtnC);   
  419.         rbArray.Add(rdobtnD);   
  420.   
  421.         return rbArray;   
  422.     }   
  423.   
  424.   
  425.      
  426. }  

 

 
 
 

 


 

發佈了52 篇原創文章 · 獲贊 15 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章