版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)生晚歸與考勤管理信息系統(tǒng)開發(fā)系統(tǒng)分析及設(shè)計(jì)3.1 系統(tǒng)預(yù)期用戶本系統(tǒng)的預(yù)期用戶是任何想了解學(xué)生在校的考勤情況的用戶。3.2 功能說明學(xué)生晚歸與考勤管理系統(tǒng)是目前廣西機(jī)電職業(yè)技術(shù)校園網(wǎng)在線系統(tǒng)之一。本軟件將各個(gè)學(xué)院各個(gè)部門聯(lián)系到一起,便于學(xué)生晚歸、考勤的管理,同時(shí),還可以讓學(xué)生通過查詢自己的晚歸與考勤記錄,了解到自己的紀(jì)律情況。在線圖書銷售系統(tǒng)要實(shí)現(xiàn)的功能模塊主要有:該系統(tǒng)分為晚歸情況管理、考勤情況管理與后臺(tái)管理三大功能模塊。系統(tǒng)功能模塊的劃分圖1系統(tǒng)功能架構(gòu)圖(2)基本處理流程F圖是系統(tǒng)基本處理流程圖。圖2系統(tǒng)基本處理流程3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)本系統(tǒng)采用SQLServer2005作為后臺(tái)數(shù)據(jù)庫(kù)。
2、根據(jù)以上功能,新建一名為Attendance的數(shù)據(jù)庫(kù),其中共包括9個(gè)數(shù)據(jù)表,分別是部門表(department):班級(jí)信息表(class):衰dbo_class列名數(shù)據(jù)類型允許空class_idint邛jidintclass_namevarctiarfSG)H學(xué)生信息表(stuInfo):廣衰dbo.stu.Lnfd列名數(shù)據(jù)類出允許空idintElstu_narnechar(3rD:睥;stu_cctiari11),fldeptidint即jidInt0。后$5_kJintOrftomeft自r(舟困n區(qū)/門信息表(region):空許 口允,券dbo-regioxij畔卜?!rtgiDn_r
3、iinirgion_nanrevarctiarfSH)晚歸情況表(late):考勤情況表(attendance )蓑-dbo.列名n龍?jiān)S空IIHIIlliBillIlliIVIIlllUIIllll:llllllllllll卜津3ttsnd_idiniIi,mrawn>nnrc(rBiiiB-aiaarnu!?!tiiibii*stu_dchardl)typfi_idintHttend_bmedatetimesttend_iitrotextcountsint考勤類型表(attendtype):衰dbo_a+'t*nd'+ype陽(yáng):lyps_idinttype_namect
4、iar(4)用戶信息表(admin):爰dbo_允許空 Bnnn到考數(shù)據(jù)類型.曾!a4rnh_idinilil_«nr«rims-n,-lff,l.“«nr-th,,曾tajin_narnvardartogmjwdvarehsr(20)atmin_powerint各個(gè)數(shù)據(jù)表的關(guān)系(主要是主鍵與外鍵的約束關(guān)系)如下圖所示:數(shù)據(jù)庫(kù)創(chuàng)建腳本參考文件:“學(xué)生晚歸與考勤管理信息系統(tǒng)數(shù)據(jù)庫(kù)建庫(kù)腳步.sql”3.4數(shù)據(jù)庫(kù)連接1、建議將數(shù)據(jù)庫(kù)拷入網(wǎng)站內(nèi)的App_Data目錄內(nèi),然后將數(shù)據(jù)庫(kù)連接字符串寫入至“Web.config,參考代碼如下:<appSettings>
5、<addkey="'ConnectionStr"value="Server=.;AttachDbFilename=|DataDirectory|Attendance.mdf;IntegratedSecurity=True"/></appSettings>測(cè)試數(shù)據(jù)庫(kù)連接是否正常usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingS
6、ystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;publicpartialclassDBConnTest:System.Web.UI.PageprotectedvoidPage_Load(objectsender,EventArgse)stringconstr=ConfigurationManager.AppSettings"ConnectionSt
7、r"SqlConnectionconn=newSqlConnection(constr);conn.Open();/打開數(shù)據(jù)庫(kù)連接Response.Write("數(shù)據(jù)庫(kù)連接成功!");conn.Close();/關(guān)閉數(shù)據(jù)庫(kù)連接Response.Write("數(shù)據(jù)庫(kù)關(guān)1成功!");經(jīng)驗(yàn)證,Attendance.mdf數(shù)據(jù)庫(kù)連接正常2、將常用數(shù)據(jù)庫(kù)操作代碼寫入公共類DB中,其中包含以下各自定義方法,參考代碼如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.We
8、b;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;/<summary>/DB類為一個(gè)專門進(jìn)行數(shù)據(jù)庫(kù)操作的類/包括連接數(shù)據(jù)庫(kù),更新數(shù)據(jù)庫(kù),查詢數(shù)據(jù)庫(kù)這些操作/summarypublicclassDB(/<summary>/DB()為D談的構(gòu)造方法/</summary&g
9、t;publicDB()(/summary/定義返回?cái)?shù)據(jù)庫(kù)連接對(duì)象SqlConnection方法/summary/returns/SqlConnection對(duì)象/returnspublicSqlConnectiongetCon()StringstrCon=ConfigurationManager.AppSettings"ConnectionStr"/從配置文件web.cofig里面讀取數(shù)據(jù)庫(kù)的連接字符串returnnewSqlConnection(strCon);/返回?cái)?shù)據(jù)庫(kù)連接對(duì)象/summary/定義更新數(shù)據(jù)庫(kù)的方法/summary/<paramname=&quo
10、t;cmdStr"/參數(shù)cmdStr為要執(zhí)行更新數(shù)據(jù)庫(kù)的SQL吾句,包含增加,修改,刪除這三種SQL吾句/param/<returns>/數(shù)據(jù)庫(kù)更新成功則返回1,更新失敗則返回0/</returns>publicintsqlEx(stringcmdStr)SqlConnectioncon=getCon();con.Open();/打開數(shù)據(jù)庫(kù)連接SqlCommandcmd=newSqlCommanc(cmdStr,con);/創(chuàng)建執(zhí)行SQ1LI句的命令對(duì)象SqlCommandtrycmd.ExecuteNonQuery();return1;/成功返回1catch
11、return0;/失敗返回0finallycon.Dispose();/釋放資源/summary/定義查詢數(shù)據(jù)庫(kù)信息的方法/summary/<paramname="cmdStr">/參數(shù)cmdStr為執(zhí)行查詢時(shí)的書寫的SQ暗句/</param>/<returns></returns>publicDataTablereDt(stringcmdStr)SqlConnectioncon=getCon();/連接數(shù)據(jù)庫(kù)con.Open();SqlDataAdapterda=newSqlDataAdapter(cmdStr,con);/
12、創(chuàng)建數(shù)據(jù)適配器對(duì)象DataSetds=newDataSet();/創(chuàng)建數(shù)據(jù)集對(duì)象da.Fill(ds);/將保存在數(shù)據(jù)適配器對(duì)象中的數(shù)據(jù)填充到數(shù)據(jù)集對(duì)象中return(ds.Tables0);/返回?cái)?shù)據(jù)集對(duì)象中有記錄的那個(gè)表/summary/定義閱讀數(shù)據(jù)的方法/summary/paramname="str">/參數(shù)str為執(zhí)行查詢操作時(shí)的SQLI句/param/returns/返回一個(gè)數(shù)據(jù)閱讀對(duì)象/returnspublicSqlDataReaderreDr(stringstr)SqlConnectioncon=getCon();con.Open();SqlComma
13、ndcmd=newSqlCommanc(str,con);SqlDataReaderdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);/通過調(diào)用Command象的ExecuteReader()方法創(chuàng)建DataReader對(duì)象,CommandBehavior.CloseConnection表示?returndr;功能模塊的實(shí)現(xiàn)用戶注冊(cè)功能的實(shí)現(xiàn):實(shí)現(xiàn)邏輯:用戶注冊(cè)信息寫入到admin表,此注冊(cè)功能是專門針對(duì)本校的學(xué)生開發(fā)注冊(cè)的,如果不是本校的學(xué)生,是沒有注冊(cè)的權(quán)限的,所有注冊(cè)時(shí)要根據(jù)學(xué)生輸入的真實(shí)姓名和學(xué)號(hào)進(jìn)行注冊(cè),如果找不到對(duì)應(yīng)的學(xué)生的
14、名字,就不允許用戶進(jìn)行注冊(cè),如果用戶已經(jīng)注冊(cè)過一次了,就直接告訴用戶已經(jīng)注冊(cè)過了,無需再次注冊(cè)了,并自動(dòng)為用戶跳轉(zhuǎn)到登錄頁(yè)面,如果用戶是第一次注冊(cè),就把用戶的注冊(cè)信息寫入到admin表中,注冊(cè)成功后也跳轉(zhuǎn)到登錄頁(yè)面讓用戶進(jìn)行登錄用戶注冊(cè)頁(yè)面Register.aspx如下圖所示:廣力祝電職業(yè)技術(shù)學(xué)忱GUANGM7ECJ-WQL'OaC>«.COLLEGEDFWZtilXERT2ELEZTH-ldTf.學(xué)生晚歸與考勤管理系統(tǒng)-"都酬=學(xué)宅姓名|學(xué)位姓名將作為系統(tǒng)登錄時(shí)的用戶名,髭多為4個(gè)衩字.I苧生學(xué)號(hào)nihw號(hào)是用于疊量柒一時(shí)惟為盍碼用駒必須填馬正一6ZL9學(xué)生
15、進(jìn)入此頁(yè)面進(jìn)行注冊(cè),正確填寫了學(xué)生姓名和學(xué)生學(xué)號(hào)以及驗(yàn)證碼了以后,點(diǎn)擊提交按鈕完成帳戶注冊(cè),而在后臺(tái),要進(jìn)行數(shù)據(jù)的合法性判斷,首先進(jìn)行的是驗(yàn)證碼的正確性判斷,把用戶輸入的驗(yàn)證碼和保存的Session對(duì)象中的驗(yàn)證碼取出來作比較,如果驗(yàn)證碼輸入正確才繼續(xù)執(zhí)行檢查該注冊(cè)用戶是否是本校的學(xué)生,以及該用戶是否已經(jīng)被注冊(cè)了,后臺(tái)的處理代碼如下所示:Register.aspx.csusingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Secu
16、rity;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;publicpartialclassstudent_Register:System.Web.UI.PageDBdb=newDB();protectedvoidPage_Load(objectsender,EventArgse)this.ImageButton1.ImageUrl="
17、image.aspx"/image.aspx是個(gè)顯示驗(yàn)證碼的WelM面protectedvoidbtn_submit_Click(objectsender,EventArgse)stringcode=txtCheckCode.Text.Trim();if(code!=(string)Session"image")Response.Write("<Script>alert('驗(yàn)證碼輸入錯(cuò)誤,請(qǐng)檢查后重新輸入!')</Script>");javascript/Response.Redirect("R
18、egister.aspx");如果使用這種跳轉(zhuǎn)方式,那么上面的是無法運(yùn)行的,因?yàn)檫€沒有來得及運(yùn)行就頁(yè)面就已經(jīng)跳轉(zhuǎn)了Response.Write("<script>window.location.href='Register.aspx'</script>");else stringstu_Name = txtUserName.Text.Trim();stringstu_Id = txtstuID.Text.Trim();stringsql2 = "select stu_name from stuInfo where
19、stu_name='"+stu_Name4:"" ; / 使用這條SQ晤句檢查要注冊(cè)的人是否是本校的學(xué)生,如果是,才允許其注冊(cè),如果不是,就不允許其注冊(cè)SqlDataReader dr = db.reDr(sql2);if (dr.Read()dr.Close();/ 關(guān)閉 SqlDataReaderstring sq = "select * from admin where login_name='"+ stu_Name + ,"" ; / 如果已經(jīng)證實(shí)是本校的學(xué)生,就再判斷該學(xué)生是否已經(jīng)注冊(cè)過了dr=db
20、.reDr(sq);/ 再次使用 SqlDataReaderif (dr.Read()Response.Write("<Script>alert('你已經(jīng)注冊(cè)過了,不需要再次注冊(cè)了!直接為您跳轉(zhuǎn)到登錄頁(yè)面進(jìn)行登錄)</Script>");Response.Write("<script>window.location.href='logion.aspx'</script>");elseint power = 3;/如果已經(jīng)證實(shí)要注冊(cè)的人是本校的學(xué)生,就直接給該學(xué)生賦予使用權(quán)限strin
21、gsql="insertintoadmin(login_name,login_pwd,admin_power)values。"+ stuName +HI III+ stuId +"',"+power+")"/Response.Write(sql);/Response.End();tryintflag=db.sqlEx(sql);if(flag>0)Response.Write("<Script>alert('注冊(cè)成功了!馬上為您跳轉(zhuǎn)到登錄頁(yè)面進(jìn)行登錄')</Script>
22、");Response.Write( "<script>window.location.href='login.aspx'</script>");else Response.Write("<Script>alert('注冊(cè)失?。?</Script>");catch (System. Exception ee) Response.Write( "<script>alert('"+ee.Message.ToString()+ "
23、');</script>");else Response.Write("<Script>alert('你不是本校的學(xué)生,沒有注冊(cè)的權(quán)限!')</Script>");txtUserName.Text =,;;,;;txtstuID.Text =,;;txtUserName.Text =,;;txtstuID.Text=protectedvoidbtn_reset_Click(objectsender,EventArgse)用戶登錄功能的實(shí)現(xiàn)實(shí)現(xiàn)邏輯:用戶進(jìn)入登錄頁(yè)面后,輸入相關(guān)的用戶名和密碼進(jìn)行登錄,如果用
24、戶名和密碼都正確了,表示該用戶是合法用戶,就允許其進(jìn)入系統(tǒng)的主頁(yè)進(jìn)行相關(guān)的系統(tǒng)操作,如果用戶名和密碼的驗(yàn)證不通過,就不允許其進(jìn)入系統(tǒng),用戶輸入用戶名和密碼后,在后臺(tái)的處理過程中首先會(huì)從數(shù)據(jù)庫(kù)Attendance.mdf的admin表取出相應(yīng)的用戶名和用戶輸入的用戶名進(jìn)行匹配,如果用戶名匹配成功了,就把數(shù)據(jù)表中存儲(chǔ)的密碼和用戶輸入的密碼進(jìn)行比對(duì),如果密碼也驗(yàn)證通過了,才允許用戶進(jìn)入系統(tǒng)首頁(yè),用戶名和密碼中任意一項(xiàng)匹配如果不通過,都不允許其登錄。登錄該系統(tǒng)時(shí),有三種不同身份的使用者,分別為管理員,記錄員和學(xué)生,不同的身份就對(duì)應(yīng)著不同的使用權(quán)限。使用權(quán)限的限制根據(jù)不同身份的登錄者生成不同的動(dòng)態(tài)導(dǎo)航,
25、以此到達(dá)限定使用者的權(quán)限的目的。登錄頁(yè)面的設(shè)計(jì)如下:如果登錄的身份是管理員,則顯示如下的導(dǎo)航:G廣信機(jī)電職業(yè)技木學(xué)院Gun*&*JT£CbTSOiJ>.jiC-X«_L=GEQFma:-I、ERtASDELE:TRJCrr學(xué)生晚歸與考勒管理系統(tǒng)晚正音間ftflQJ噩里法山匕勒丁兌I於班級(jí)兆里護(hù)I區(qū)1維護(hù)I用戶管油I用省庠戶工匚匹;1|門I將后歡迎使用晚歸考勒管理信息系統(tǒng)如果登錄的身份是記錄員,則顯示如下的導(dǎo)航:G廣海機(jī)電取業(yè)技術(shù)號(hào)第GUMbJtJiUHULLLJbJbrJViCHHzHA>DRtlIf.善生晚歸與考勤管理系統(tǒng)-«w*i-&quo
26、t;9*-MTB*f.dfeMb»晚E-澗I晚歸匚豈I閆誓記|苦荀古囿1匯縣I泊桂拾甲士歡迎庫(kù)8E白”朋錄歡迎使用晚歸考勤管理信息系統(tǒng)如果登錄的身份是學(xué)生,則顯示如下的導(dǎo)航:廣命機(jī)電職業(yè)技末學(xué)悅6UrtC4fiFUukNGX)lECl-rJCiL&GlCALCOLLCQEOFMACtl*JEffVAWCLECTRierrV學(xué)生晚歸與考勤管理系統(tǒng)*-Ur,.卡fc.r.-舊古間如樂I5|黑勒古阿耳驕而而鞘用戶歡迎迷做蒼軀矍錄歡迎使用晚歸考勤管理信息系統(tǒng)對(duì)于管理員而言,其擁有的使用權(quán)限是最多的,但沒有晚歸登記和考勤登記的權(quán)限,登記權(quán)限只有記錄員才有,而對(duì)于學(xué)生而言,只有查看相關(guān)記
27、錄的權(quán)限,別的權(quán)限都沒有,因此通過這種根據(jù)不同登錄者的身份生成不同的導(dǎo)航就可以限定了登錄者的使用權(quán)限了。這里難就難在了如果根據(jù)登錄者的身份動(dòng)態(tài)生成不同的導(dǎo)航信息。相關(guān)代碼如下:用戶登錄的后臺(tái)代碼:login.aspx.csusingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.
28、WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;publicpartialclasslogin:System.Web.UI.PageDBdb=newDB();protectedvoidPage_Load(objectsender,EventArgse)ImageButton1.ImageUrl="image.aspx"讓頁(yè)面加載時(shí)就顯示驗(yàn)證碼圖片protectedvoidbtnRegister_Click(objectsender,EventArgse)Respo
29、nse.Redirect("Register.aspx");/點(diǎn)擊注冊(cè)按鈕后,直接跳轉(zhuǎn)到注冊(cè)頁(yè)面,這里需要注意一個(gè)小問題,由于文本框已經(jīng)使用了驗(yàn)證控件,因此要想讓按鈕的觸發(fā)事件不觸發(fā)驗(yàn)證控件時(shí),把按鈕的CausesValidation屬性設(shè)置為false即可protectedvoidbtnLogin_Click(objectsender,EventArgse)stringcode=txtCheckCode.Text.Trim();獲取輸入的驗(yàn)證碼stringusername=txtUserName.Text.Trim();/獲取輸入的用戶名stringpassword=tx
30、tPassword.Text.Trim();獲取輸入的密碼if(code!=(string)Session"image")先進(jìn)行驗(yàn)證碼的判斷,驗(yàn)證碼輸入正確后在執(zhí)行其他的操作Response.Write("<script>alert('驗(yàn)證碼輸入有誤!')</script>");Response.Write("<script>window.location.href='login.aspx'</script>");elsestringsql="s
31、electlogin_name,login_pwd,admin_powerfromadminwherelogin_name="'+username+""';SqlDataReaderdr=db.reDr(sql);if(dr.Read()if(string)dr"login_pwd"=password)Response.Write("<script>alert('用戶名和密碼正確!登錄成功!')</script>"););Response.Write("<
32、;script>window.location.href='Index.aspx'</script>"SessionSession"Power"=dr"admin_power"/使用Session存儲(chǔ)用戶的使用權(quán)限"username"=username;/存儲(chǔ)用戶名elseResponse.Write("<script>alert('密碼錯(cuò)誤!')</script>" );Response.Write( "<scri
33、pt>window.location.href='login.aspx'</script>");else Response.Write(錄操作,即將為你跳轉(zhuǎn)到注冊(cè)頁(yè)面!"<script>alert('該用戶不存在,請(qǐng)先去注冊(cè)一個(gè)帳戶后再進(jìn)行登')</script>" );Response.Write("<script>window.location.href='Register.aspx'</script>");在用戶進(jìn)行登錄的時(shí)候
34、,使用Session對(duì)象存儲(chǔ)用戶名,并且根據(jù)用戶名從數(shù)據(jù)庫(kù)中取出該用戶的使用權(quán)限,也使用Session對(duì)象保存用戶的使用權(quán)限,登錄成功后,在系統(tǒng)的主頁(yè)的后臺(tái)處理代碼中取出保存在Session對(duì)象中的用戶名的相關(guān)的用戶權(quán)限,然后根據(jù)用戶權(quán)限來動(dòng)態(tài)生成導(dǎo)航,相關(guān)的代碼如下:系統(tǒng)主頁(yè)的后臺(tái)處理代碼:index.aspx.csusingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;u
35、singSystem.Web.UI.WebControls;usingSystem.Web.Ul.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;publicpartialclassIndex:System.Web.UI.PageprotectedvoidPage_Load(objectsender,EventArgse)if(Session"username"!=null)這里使用Session對(duì)象對(duì)用戶是否已經(jīng)進(jìn)行登錄進(jìn)行判斷,如果Session中的內(nèi)容不為空,則表示用戶已經(jīng)登錄stringuserStr=(st
36、ring)Session"username"取出保存在Session對(duì)象中的用戶名intpower=int.Parse(Session"Power".ToString();/取出保存在Session對(duì)象中的用戶使用權(quán)限標(biāo)識(shí)stringnav=""if(power=1)根據(jù)登錄者的身份動(dòng)態(tài)變化導(dǎo)航的顯示,以此限定不同身份的登錄者的使用權(quán)限nav="<td><ahref='latecheck.aspx'target='show_Content'>nav+="<
37、;td><ahref='latecount.aspx'target='show_Content'></a>|</td>"nav+="<td><ahref='attendcheck.aspx'target='show_Content'></a>|</td>"nav+="<td><ahref='attendcount.aspx'target='show_Conten
38、t'></a>|</td>"nav+="<td><ahref='updatedept.aspx'target='show_Content'></a>|</td>"nav+="<td><ahref='updateregion.aspx'target='show_Content'></a>|</td>"nav+="<td><a
39、href='updateadmin.aspx'target='show_Content'></a>|</td>"nav+="<td><ahref='exit.aspx'>注銷用戶</a></td>"elseif(power=2)nav="<td><ahref='latecheck.aspx'target='show_Content'>nav+="<td>
40、<ahref='latecount.aspx'target='show_Content'></a>|</td>"nav+="<td><ahref='latewrite.aspx'target='show_Content'></a>|</td>"nav+="<td><ahref='attendcheck.aspx'target='show_Content'>
41、;</a>|</td>"nav+="<td><ahref='attendcount.aspx'target='show_Content'>晚歸查詢</a>|</td>"晚歸匯總考勤查詢考勤匯總系/班級(jí)/專業(yè)維護(hù)區(qū)/門維護(hù)用戶管理晚歸查詢</a>|</td>"晚歸匯總晚歸登記考勤查詢考勤匯總</a>|</td>"nav+="<td><ahref='attendw
42、rite.aspx'target='show_Content'>考勤登記</a>|</td>"nav+="<td><ahref='exit.aspx'>注銷用戶</a></td>")elseif(power=3)nav="<td><ahref='latecheck.aspx'target='show_Content'>晚歸查詢</a>|</td>"n
43、av+="<td><ahref='latecount.aspx'target='show_Content'>晚歸匯總</a>|</td>"nav+="<td><ahref='attendcheck.aspx'target='show_Content'>考勤查詢</a>|</td>"nav+="<td><ahref='attendcount.aspx'ta
44、rget='show_Content'>考勤匯總</a>|</td>"nav+=)"<td><ahref='exit.aspx'>注銷用戶</a></td>"IblNav.Text =IblNav.Text +="<table><tr>"+nav+”</tr></table>""歡迎<fontcolor='red'>"+userSt
45、r+"</font>登錄")else/如果用戶沒有進(jìn)行登錄,則直接跳轉(zhuǎn)到登錄頁(yè)面Response.Write("<script>alert('你還沒有進(jìn)行系統(tǒng)的登錄,請(qǐng)先登錄后再使用本系統(tǒng)!')</script>");Response.Write("<script>window.location.href='login.aspx'</script>");)/Response.Write("<iframename='sho
46、w_Content'frameborder='1'width='800px'height='600px'scroll='no'></iframe>");向網(wǎng)頁(yè)中輸出一個(gè)框架lblContent.Text="<iframename='show_Content'frameborder='1'width='800px'height='600px'scroll='no'src='Welcome.asp
47、x'></iframe>"/讓框架在指定的Lable中顯示)到此,用戶注冊(cè)和登錄的功能模塊就全部實(shí)現(xiàn)了接下來將進(jìn)入系統(tǒng)開發(fā)中的最核心的功能模塊部分的開發(fā):晚歸情況管理和考勤情況管理,這兩個(gè)部分是系統(tǒng)功能中最核心的兩個(gè)部分,也是最難實(shí)現(xiàn)的兩個(gè)部分,這兩個(gè)部分難就難在了查詢的部分,如何根據(jù)用戶的選擇查詢操作動(dòng)態(tài)拼湊出SQL語句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,從而查詢出用戶想要的記錄。晚歸情況管理功能模塊的實(shí)現(xiàn)晚歸情況管理功能模塊主要有三部分,分別為晚歸登記,晚歸查詢,晚歸匯總。如下圖所示:晚歸情況管理晚歸匯總晚歸查詢晚歸登記實(shí)現(xiàn)晚歸登記功能latewrite.aspx頁(yè)面設(shè)計(jì)
48、如下:在數(shù)據(jù)庫(kù)的設(shè)計(jì)中,存儲(chǔ)晚歸情況的表為late表,late表的設(shè)計(jì)如下圖所示:亮歸情況記學(xué)從表中可以看到,late表存儲(chǔ)的信息為學(xué)生的學(xué)號(hào)(stu_id)、區(qū)/門編號(hào)(region_id)以及晚歸時(shí)間(late_time)和晚歸事由(late_intro)。記錄員在進(jìn)行晚歸情加記錄時(shí),首先要選擇的秦部,專業(yè),班級(jí),區(qū)7門,姓名這些相關(guān)的學(xué)生的信息,然后寫上晚歸時(shí)間和晚歸事由后,點(diǎn)擊【記錄】按鈕,完成晚歸情況的登記。這里需要注意的地方是,記錄員選擇的系部名稱,專業(yè)名稱,班級(jí)名稱以及學(xué)生名稱這些信息是早就已經(jīng)隨著數(shù)據(jù)庫(kù)的創(chuàng)建插入到相關(guān)的表中存放了,因此沒有必要再次把這些重復(fù)的信息寫入到數(shù)據(jù)庫(kù)中
49、,而且從存儲(chǔ)晚歸情況記錄的late表中也可以看出,late表并沒有定義有可以存儲(chǔ)系部,專業(yè),班級(jí)、區(qū)/門和姓名的字段,但可以看到,late表中存放有學(xué)生的學(xué)號(hào)(stu_id),區(qū)門的編號(hào)(region_id),當(dāng)初進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),就已經(jīng)定義了late表中的stu_id(外鍵)字段和stuInfo表的stu_id(主鍵)字段之間的約束關(guān)系,因此可以通過late表的stu_id找到stuInfo表中對(duì)應(yīng)著的stu_id所表示的學(xué)生,而stuInfo表的設(shè)計(jì)如十曲所示:一從學(xué)生信息表(stuInfo)的定義中可以看出,學(xué)生信息表中存放有系部的編號(hào)(dept_id)、專業(yè)編號(hào)(spc_id)以及(c
50、lass_id),這三個(gè)字段都作為外鍵與相應(yīng)的department表的dept_id(主鍵)、spcieal表的spc_id(主鍵)以及class表的class_id(主鍵)建立起主鍵外鍵的約束關(guān)系,因此通過stuInfo表就可以找到與該血3學(xué)生相關(guān)的系部,專業(yè)以及所在的班級(jí),這樣有關(guān)該晚歸學(xué)生的全部信息就可以通過多表聯(lián)合查詢從stuInfo表(得到學(xué)生姓名),class表(得到班級(jí)),spceial表(得到專業(yè))和department表(得到系部)得到。這就是建立起主鍵外鍵約束的好處,可以把表和表通過某種關(guān)系關(guān)聯(lián)起來,使之成為有一定依賴關(guān)系的表,從而保持了數(shù)據(jù)的完整性。晚歸情況記錄表(lat
51、e)中的region_id記錄了學(xué)生晚歸的區(qū)/門編號(hào),通過該編號(hào)就可以找到存放在region表中對(duì)應(yīng)的區(qū)/門信息。做這個(gè)功能模塊時(shí),容易產(chǎn)生一個(gè)誤區(qū),會(huì)很自然地認(rèn)為記錄員選擇的系部,專業(yè),班級(jí),姓名,區(qū)/門以及填寫的晚歸時(shí)間和晚歸事由這些有關(guān)晚歸的信息全部都要寫入到數(shù)據(jù)庫(kù)里面,如果這樣想,那么這個(gè)功能模塊就沒有辦法做了,而且會(huì)越做越復(fù)雜,會(huì)產(chǎn)生很多重復(fù)的數(shù)據(jù),可能有的人會(huì)想到再創(chuàng)建一個(gè)表,專門用來存放這些信息,其實(shí)是完全沒有必要這樣做的。使用一個(gè)late表存放晚歸情況記錄即已經(jīng)可以了。其它的系部,班級(jí),專業(yè)等相關(guān)信息在別的表已經(jīng)存放有了,因此沒有必要再次把這些信息寫入到數(shù)據(jù)庫(kù)中存放,造成數(shù)據(jù)的
52、冗余以及存儲(chǔ)空間的浪費(fèi)。latewrite.aspx.cs相關(guān)的代碼如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlC
53、lient;publicpartialclasslatewrite:System.Web.UI.PageDBdb=newDB();protectedvoidPage_Load(objectsender,EventArgse)if(!IsPostBack)stringsql="selectdept_id,dept_namefromdepartment"SqlDataReaderdr=db.reDr(sql);/獲取數(shù)據(jù)源,數(shù)據(jù)源來源于department表dp_dept.DataSource=dr;dp_dept.DataValueField=dp_dept.DataText
54、Field=dp_dept.DataBind();dp_dept.Items.Insert(0,/綁定數(shù)據(jù)源到dp_selectDept中"dept_id"給DropDownList1的下拉列表的項(xiàng)賦值"dept_name"/顯示給用戶看的文本/顯示數(shù)據(jù)newListItem("=請(qǐng)選擇系部=","");在第0個(gè)位置插入一個(gè)下拉項(xiàng),顯示的DataTextField為"=請(qǐng)選擇系部=",下拉項(xiàng)的DataValueField為空dp_spc.Items.Insert(0,dp_class.Items
55、.Insert(0,dp_name.Items.Insert(0,newListItem("=請(qǐng)選擇專業(yè)=","");newListItem("=請(qǐng)選擇班級(jí)=","");newListItem("=請(qǐng)選擇姓名=");sql="selectregion_id,region_namefromregiondr=db.reDr(sql);dp_region.DataSource=dr;dp_region.DataValueField=dp_region.DataTextField=dp_reg
56、ion.DataBind();dp_region.Items.Insert(0,"region_id""region_name"newListItem("=請(qǐng)選擇區(qū)/門=","");protectedvoiddp_dept_SelectedIndexChanged(objectsender,EventArgse)stringdept_id=dp_dept.SelectedValue;明顯,意思為選中的值/獲取中選定的項(xiàng)的value,SelectedValue的意思很/注意:這里的判斷不要寫成if(dept_id!=
57、null)這樣寫會(huì)出錯(cuò)的if(dept_id!="")/這里要進(jìn)行判斷,如果選中的是第一項(xiàng),即顯示文本為"=請(qǐng)選擇系部="這一項(xiàng)時(shí),dept_id是沒有值的,即為空stringsql="selectspc_id,spc_namefromspecialwheredept_id="+dept_id;/查詢出與dept_id相等的記錄,這里的dept_id為整型,所以不用加單引號(hào)引起來SqlDataReaderdr=db.reDr(sql);/獲取數(shù)據(jù)源,數(shù)據(jù)源來源于special表dp_spc.DataSource=dr;dp_spc.D
58、ataTextField=dp_spc.DataValueField=dp_spc.DataBind();dp_spc.Items.Insert(0,/綁定數(shù)據(jù)源"spc_name"/顯示專業(yè)名稱給用戶看"spc_id"/把專業(yè)的id值賦值給下拉列表的項(xiàng)/顯示數(shù)據(jù)newListItem("=請(qǐng)選擇專業(yè)=","");else是為空的,所以要/如果dp_dept選中的是第一項(xiàng)"=請(qǐng)選擇系部=",此時(shí)的DataValueField中的項(xiàng)清空掉相應(yīng)的把dp_spc,dp_class,dp_namedp_
59、spc.Items.Clear();dp_spc.Items.Insert(0,dp_class.items.Clear();dp_class.items.insert(0,/清空DropDownList2下拉列表的項(xiàng) new Listitem ("=請(qǐng)選擇專業(yè) =",/清空DropDownList3下拉列表的項(xiàng)"");new Listitem ("=請(qǐng)選擇班級(jí) =","");dp_name.Items.Clear();/清空下拉列表的項(xiàng)dp_name.Items.Insert(0,new Listitem (&q
60、uot;=請(qǐng)選擇姓名=","");protected void dp_spc_SelectedIndexChanged( object sender, EventArgs e)string spc_id = dp_spc.SelectedValue; if (spc_id !="")string sql = "select class_id,class_name from class where spc_id="SqlDataReader dr = db.reDr(sql);/獲取數(shù)據(jù)源,數(shù)據(jù)源來源于 class+ spc_
61、id;表dp_class.DataSource = dr;/綁定數(shù)據(jù)源到dp_class.DataTextField ="classname'dp_class.DataValueField = dp_class.DataBind();"classid"dp_class.Items.insert(0,new Listitem("=請(qǐng)選擇班級(jí)=","");elsedp_class.items.Clear();dp_class.items.insert(0,new Listitem("=請(qǐng)選擇班級(jí)=");protected void dp_class_SelectedindexChanged(object sender, EventArgs e)string class_id = dp_class.SelectedValue;if (class_id
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高原紅的臨床護(hù)理
- 高碘性甲狀腺腫的臨床護(hù)理
- 孕期胸悶的健康宣教
- JJF(陜) 072-2021 空氣熱老化試驗(yàn)箱溫度參數(shù)校準(zhǔn)規(guī)范
- 【培訓(xùn)課件】超市賣場(chǎng)部門理貨員培訓(xùn)教案
- 實(shí)現(xiàn)倉(cāng)庫(kù)運(yùn)輸工作時(shí)間安排的工作計(jì)劃
- 監(jiān)控安防設(shè)備運(yùn)輸合同三篇
- 培養(yǎng)學(xué)生責(zé)任心的實(shí)踐活動(dòng)計(jì)劃
- 多工位精密級(jí)進(jìn)沖模相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 數(shù)字貨幣對(duì)財(cái)務(wù)管理的影響計(jì)劃
- DB31∕T 1038-2017 生態(tài)公益林主要造林樹種苗木質(zhì)量分級(jí)
- 主動(dòng)脈夾層概述ppt課件(PPT 57頁(yè))
- 《西游記》“一站到底”(51-100回)
- SAP生產(chǎn)計(jì)劃概念及實(shí)施流程
- MSA 測(cè)量系統(tǒng)培訓(xùn)教材
- 時(shí)間軸公司發(fā)展歷程企業(yè)大事記PPT模板
- 北師大版數(shù)學(xué)初二上冊(cè)知識(shí)點(diǎn)總結(jié)
- 鐵路建設(shè)項(xiàng)目施工企業(yè)信用評(píng)價(jià)辦法(鐵總建設(shè)〔2018〕124號(hào))
- 模具報(bào)價(jià)表精簡(jiǎn)模板
- 高考英語單項(xiàng)選擇題題庫(kù)題
- 檢驗(yàn)檢測(cè)機(jī)構(gòu)資質(zhì)認(rèn)定現(xiàn)場(chǎng)評(píng)審日程表及簽到表
評(píng)論
0/150
提交評(píng)論