freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

學生晚歸與考勤管理信息系統(tǒng)的開發(fā)(編輯修改稿)

2025-05-04 23:06 本頁面
 

【文章內(nèi)容簡介】 ,晚歸匯總。如下圖所示:晚歸情況管理晚歸登記晚歸查詢晚歸匯總實現(xiàn)晚歸登記功能:在數(shù)據(jù)庫的設計中,存儲晚歸情況的表為late表,late表的設計如下圖所示:從表中可以看到,late表存儲的信息為學生的學號(stu_id)、區(qū)/門編號(region_id)以及晚歸時間(late_time)和晚歸事由(late_intro)。記錄員在進行晚歸情況記錄時,首先要選擇的系部,專業(yè),班級,區(qū)/門,姓名這些相關的學生的信息,然后寫上晚歸時間和晚歸事由后,點擊【記錄】按鈕,完成晚歸情況的登記。這里需要注意的地方是,記錄員選擇的系部名稱,專業(yè)名稱,班級名稱以及學生名稱這些信息是早就已經(jīng)隨著數(shù)據(jù)庫的創(chuàng)建插入到相關的表中存放了,因此沒有必要再次把這些重復的信息寫入到數(shù)據(jù)庫中,而且從存儲晚歸情況記錄的late表中也可以看出,late表并沒有定義有可以存儲系部,專業(yè),班級、區(qū)/門和姓名的字段,但可以看到,late表中存放有學生的學號(stu_id),區(qū)門的編號(region_id),當初進行數(shù)據(jù)庫設計時,就已經(jīng)定義了late表中的stu_id(外鍵)字段和stuInfo表的stu_id(主鍵)字段之間的約束關系,因此可以通過late表的stu_id找到stuInfo表中對應著的stu_id所表示的學生,而stuInfo表的設計如下圖所示:從學生信息表(stuInfo)的定義中可以看出,學生信息表中存放有系部的編號(dept_id)、專業(yè)編號(spc_id)以及(class_id),這三個字段都作為外鍵與相應的department表的dept_id(主鍵)、spcieal表的spc_id(主鍵)以及class表的class_id(主鍵)建立起主鍵外鍵的約束關系,因此通過stuInfo表就可以找到與該晚歸學生相關的系部,專業(yè)以及所在的班級,這樣有關該晚歸學生的全部信息就可以通過多表聯(lián)合查詢從stuInfo表(得到學生姓名),class表(得到班級),spceial表(得到專業(yè))和department表(得到系部)得到。這就是建立起主鍵外鍵約束的好處,可以把表和表通過某種關系關聯(lián)起來,使之成為有一定依賴關系的表,從而保持了數(shù)據(jù)的完整性。晚歸情況記錄表(late)中的region_id記錄了學生晚歸的區(qū)/門編號,通過該編號就可以找到存放在region表中對應的區(qū)/門信息。做這個功能模塊時,容易產(chǎn)生一個誤區(qū),會很自然地認為記錄員選擇的系部,專業(yè),班級,姓名,區(qū)/門以及填寫的晚歸時間和晚歸事由這些有關晚歸的信息全部都要寫入到數(shù)據(jù)庫里面,如果這樣想,那么這個功能模塊就沒有辦法做了,而且會越做越復雜,會產(chǎn)生很多重復的數(shù)據(jù),可能有的人會想到再創(chuàng)建一個表,專門用來存放這些信息,其實是完全沒有必要這樣做的。使用一個late表存放晚歸情況記錄即已經(jīng)可以了。其它的系部,班級,專業(yè)等相關信息在別的表已經(jīng)存放有了,因此沒有必要再次把這些信息寫入到數(shù)據(jù)庫中存放,造成數(shù)據(jù)的冗余以及存儲空間的浪費。:using System。using 。using 。using 。using 。using 。using 。using 。using 。using 。using 。public partial class latewrite : { DB db = new DB()。 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string sql = select dept_id,dept_name from department。 SqlDataReader dr = (sql)。//獲取數(shù)據(jù)源,數(shù)據(jù)源來源于department表 = dr。//綁定數(shù)據(jù)源到dp_selectDept中 = dept_id。//給DropDownList1的下拉列表的項賦值 = dept_name。//顯示給用戶看的文本 ()。//顯示數(shù)據(jù) (0, new ListItem(==請選擇系部==, ))。//在第0個位置插入一個下拉項,顯示的DataTextField為==請選擇系部==,下拉項的DataValueField為空 (0, new ListItem(==請選擇專業(yè)==, ))。 (0, new ListItem(==請選擇班級==, ))。 (0,new ListItem(==請選擇姓名==))。 sql = select region_id,region_name from region。 dr = (sql)。 = dr。 = region_id。 = region_name。 ()。 (0, new ListItem(==請選擇區(qū)/門==, ))。 } } protected void dp_dept_SelectedIndexChanged(object sender, EventArgs e) { string dept_id = 。//獲取中選定的項的value,SelectedValue的意思很明顯,意思為選中的值 //注意:這里的判斷不要寫成if(dept_id!=null)這樣寫會出錯的 if (dept_id != )//這里要進行判斷,如果選中的是第一項,即顯示文本為“==請選擇系部==”這一項時,dept_id是沒有值的,即為空 { string sql = select spc_id,spc_name from special where dept_id= + dept_id。//查詢出與dept_id相等的記錄,這里的dept_id為整型,所以不用加單引號引起來 SqlDataReader dr = (sql)。//獲取數(shù)據(jù)源,數(shù)據(jù)源來源于special表 = dr。//綁定數(shù)據(jù)源 = spc_name。//顯示專業(yè)名稱給用戶看 = spc_id。//把專業(yè)的id值賦值給下拉列表的項 ()。//顯示數(shù)據(jù) (0, new ListItem(==請選擇專業(yè)==, ))。 } else {//如果dp_dept選中的是第一項“==請選擇系部==”,此時的DataValueField是為空的,所以要相應的把dp_spc,dp_class,dp_name中的項清空掉 ()。//清空 DropDownList2下拉列表的項 (0, new ListItem(==請選擇專業(yè)==, ))。 ()。//清空 DropDownList3下拉列表的項 (0, new ListItem(==請選擇班級==, ))。 ()。//清空 下拉列表的項 (0, new ListItem(==請選擇姓名==, ))。 } } protected void dp_spc_SelectedIndexChanged(object sender, EventArgs e) { string spc_id = 。 if (spc_id != ) { string sql = select class_id,class_name from class where spc_id= + spc_id。 SqlDataReader dr = (sql)。//獲取數(shù)據(jù)源,數(shù)據(jù)源來源于class表 = dr。//綁定數(shù)據(jù)源到 = class_name。 = class_id。 ()。 (0, new ListItem(==請選擇班級==, ))。 } else { ()。 (0, new ListItem(==請選擇班級==))。 } } protected void dp_class_SelectedIndexChanged(object sender, EventArgs e) { string class_id = 。 if (class_id != ) { string sql = select stu_id,stu_name from stuInfo where class_id= + class_id。 SqlDataReader dr = (sql)。//獲取數(shù)據(jù)源,數(shù)據(jù)源來源于stuInfo表 = dr。//綁定數(shù)據(jù)源 = stu_name。 = stu_id。 ()。 (0, new ListItem(==請選擇姓名==, ))。 } else { ()。//清空下拉列表的項 (0, new ListItem(==請選擇姓名==, ))。 } } protected void btn_record_Click(object sender, EventArgs e) { DateTime lateTime = (())。//獲取從文本框輸入的晚歸時間字符串,并把字符串轉(zhuǎn)換成真正的時間類型 string lateIntro = ()。//獲取輸入的晚歸事由,Trim()方法的作用是截斷字符串左右兩邊的空格 string stuId =。//從選中的dp_name的項的value獲取到stu_id string regionId = 。//從選中的dp_region的項的value獲取到region_id string sql = insert into late(stu_id,region_id,late_time,late_intro) values(39。 + stuId + 39。, + regionId + ,39。 + lateTime + 39。,39。 + lateIntro + 39。)。 try { int flag = (sql)。 if (flag 0) { (scriptalert(39。登記成功!39。)/script)。 = 。 = 。 } else { (scriptalert(39。數(shù)據(jù)錄入失?。?9。)/script)。 } } catch ( ee) { (scriptalert(39。 + () + 39。)/script)。 } } protected void btn_reset_Click(object sender, EventArgs e) { = 。 = 。 }}到此,實現(xiàn)晚歸情況記錄功能。實現(xiàn)晚歸查詢功能模塊:這個模塊最難就難在如何根據(jù)用戶選擇的查詢條件動態(tài)地組合SQL查詢語句,這里使用一個GridView控件用于顯示用戶查詢后的數(shù)據(jù)。這里的查詢邏輯是這樣的:如果用戶進入此查詢頁面查詢數(shù)據(jù)時,當用戶直接單擊查詢按鈕,不選擇任何的查詢條件,就將全部信息綁定到GridView中顯示出來,如果用戶查詢時加上了查詢條件(如:用戶可以選擇系部進行查詢,或者是選擇系部和專業(yè)作為查詢條件進行查詢,或者是選擇系部,專業(yè)和班級進行作為查詢條件進行查詢,或者直接輸入要查詢的姓名或者宿舍或者開始時間或者是結(jié)束時間或者是同時輸入這些查詢關鍵字或者是輸入查詢關鍵字的同時由選擇了系部,專業(yè)和班級等關鍵詞組成的查詢條件),那么就根據(jù)查詢條件從數(shù)據(jù)庫中查詢出滿足條件的記錄,將滿足的記錄綁定到GridVie
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1