第四章 系統建置
4.5 租屋系統管理(管理員專區)
4.5.2 使用者資料系統維護子系統
4.5.3.2 線上預租系統維護
4.5.3.2.2 執行線上預租系統亂數抽籤
End Sub
程式 4.36 設定線上預租系統部分程式
3.輸出
(1)若管理員設定線上預租系統成功,則在網頁上顯示成功訊息。
(2)若學管理員設定線上預租系統失敗,則在網頁上顯示失敗錯誤訊息。
4.5.3.2.2 執行線上預租系統亂數抽籤 1.輸入
圖 4.77 執行線上預租系統亂數抽籤畫面
※若之前已執行過系統亂數抽籤功能,將顯示以下畫面:
圖 4.78 重新執行線上預租系統亂數抽籤畫面
2.處理程序
管理員可藉此功能按下執行或重新執行按鈕來執行線上預租系統亂數抽 籤功能。
Sub Page_Load(sender as object,e as eventargs) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//此 SQL 語言用來判斷管理員是否已登入
strSQL="SELECT * FROM adminlogindata WHERE username='" &
session("username") & "' AND userlevel='" & session("userlevel") & "'"
objCmd=New SqlCommand(strSQL,objCon) objDataReader=objCmd.ExecuteReader() If objDataReader.Read() Then //若已登入
//判斷是否第一次執行亂數抽籤
strSQL="SELECT * FROM ballotresult"
objCmd=New SqlCommand(strSQL,objCon) objDataReader=objCmd.ExecuteReader() If objDataReader.Read() Then
Application("first_execute_ballot")="No"
msg2.Visible=True
Sub execute_ballot(sender as object,e as eventargs) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//若不是第一次執行
If Application("first_execute_ballot")="No" Then //SQL 語言刪除之前的預租結果
strSQL="TRUNCATE TABLE ballotresult"
objCmd=New SqlCommand(strSQL,objCon) objCmd.ExecuteNonQuery()
End If
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//SQL 語言計算目前宿舍總數
strSQL="SELECT Count(*) FROM dormitorydata"
objCmd=New SqlCommand(strSQL,objCon) objDataReader=objCmd.ExecuteReader() objDataReader.Read()
totaldormitory=objDataReader.GetValue(0) //取得目前宿舍總數 objDataReader.Close()
//SQL 語言選取宿舍資料
strSQL="SELECT * FROM dormitorydata"
objCmd=New SqlCommand(strSQL,objCon) objDataReader=objCmd.ExecuteReader() While objDataReader.Read()=True
//將每間宿舍名稱加入 dorname 動態陣列
For i=0 To totaldormitory-1
//SQL 語言計算第一志願學生預租該宿舍的情況
strSQL="SELECT Count(*) FROM stupretenancy WHERE first_wish='" &
dorname(i) & "'"
objCmd=New SqlCommand(strSQL,objCon) If totalbed(i)<=pretenancy_stunum Then
ballotnum=totalbed(i)
totalbed(i)=0 //修改剩餘總床位數 //若學生人數小於該間宿舍總床位數 Else
ballotnum=pretenancy_stunum
totalbed(i)=totalbed(i)-pretenancy_stunum //修改剩餘總床位數 End If
//SQL 語言選取依照 2 個亂數排序(升冪&降冪)的前 ballotnum 筆學生預租 資料(第一志願是預租該宿舍)
strSQL="SELECT TOP " & ballotnum & " * FROM stupretenancy WHERE first_wish='" & dorname(i) & "' " & _
"ORDER BY first_ran1 ASC,first_ran2 DESC"
objCmd=New SqlCommand(strSQL,objCon) objDataReader=objCmd.ExecuteReader() stu_num.Clear()
//用迴圈把之前選取的學生預租資料加入 stu_num 動態陣列 strSQL="SELECT TOP " & ballotnum & " * FROM dormitorybedid WHERE dor_name='" & dorname(i) & "' " & _
"ORDER BY dor_bedid ASC"
objCmd=New SqlCommand(strSQL,objCon) For j=0 To ballotnum-1
//SQL 語言新增學生預租結果
//(預租結果=床位編號+宿舍名稱+學生學號+第 1 次抽籤) strSQL="INSERT INTO
ballotresult(dor_bedid,dor_name,stu_num,when_toballot) " & _
"SELECT '" & bedid(j) & "','" & dorname(i) & "','" & stu_num(j) & "','第 1 次抽籤'"
4.5.3.2.3 查詢預租結果
圖 4.79 查詢預租結果主畫面
查詢預租結果包含依學生姓名或學號查詢預租結果、依宿舍名稱查詢預租結 果等功能。
4.5.3.2.3.1 依學生學號或姓名查詢預租結果 1.輸入
圖 4.80 依學生學號查詢預租結果畫面
圖 4.81 依學生姓名查詢預租結果畫面
2.處理程序
管理員可在查詢方式下拉選單中,選取學生學號或學生姓名,並且輸入查 詢條件和按下查詢按鈕來查詢預租結果;在下方查詢結果中,亦可點選學生姓 名來查詢該學生之詳細基本資料。
//~~~~~~~~~~~~~~~~~~~~~
//連結資料庫載入資料副程序 Sub BindDataBase()
//~~~~~~~~~~~~~~~~~~~~
If query_method.SelectedIndex=0 Then
strSQL="SELECT ballotresult.*,studata.* FROM ballotresult,studata " & _
"WHERE ballotresult.stu_num='NULL' AND studata.stu_num='NULL' " & _
"ORDER BY " & sortField //若選取學生學號
Else If query_method.SelectedIndex=1 Then
strSQL="SELECT ballotresult.*,studata.* FROM ballotresult,studata " & _
"WHERE ballotresult.stu_num='" & query_condition.Text & "' AND ballotresult.stu_num=studata.stu_num " & _
"ORDER BY " & sortField //若選取學生姓名
Else If query_method.SelectedIndex=2 Then
strSQL="SELECT ballotresult.*,studata.* FROM ballotresult,studata " & _
"WHERE ballotresult.stu_num=studata.stu_num AND studata.stu_name='" &
query_condition.Text & "' " & _
"ORDER BY " & sortField End If
objDataAdapter=New SqlDataAdapter(strSQL,objCon) objDataSet=New DataSet()
objDataAdapter.Fill(objDataSet,"all_pretenancyresult")
total_data.Text=objDataSet.Tables("all_pretenancyresult").Rows.Count
DataGrid1.DataSource = objDataSet.Tables("all_pretenancyresult").DefaultView DataGrid1.DataBind()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
End Sub
//當按下查詢按鈕時所需執行的副程序
Sub query_pretenancyresult(sender as object,e as eventargs) BindDataBase()
4.5.3.2.3.2 依宿舍名稱查詢預租結果 1.輸入
圖 4.82 依宿舍名稱查詢預租結果畫面
2.處理程序
管理員可在宿舍名稱下拉選單中選取宿舍名稱,當宿舍名稱改變時,下方 的預租結果亦會自動改變;在下方查詢結果中,亦可點選學生姓名來查詢該學 生之詳細基本資料。
//~~~~~~~~~~~~~~~~~~~~~~
//從資料庫中連結宿舍名稱至下拉選單中的副程序 Sub bind_dor_name()
//~~~~~~~~~~~~~~~~~~~~~~~~`
//SQL 語言選取宿舍資料
strSQL="SELECT * FROM dormitorydata"
objCmd=New SqlCommand(strSQL,objCon) objDataReader=objCmd.ExecuteReader() dor_namelist.Add("請選擇...")
While objDataReader.Read()=True
strSQL="SELECT ballotresult.*,studata.* FROM ballotresult,studata " & _
"WHERE ballotresult.dor_name='" & dor_name.SelectedItem.Text & "' AND ballotresult.stu_num=studata.stu_num " & _
"ORDER BY " & sortField
objDataAdapter=New SqlDataAdapter(strSQL,objCon) objDataSet=New DataSet()
objDataAdapter.Fill(objDataSet,"all_pretenancyresult")
total_data.Text=objDataSet.Tables("all_pretenancyresult").Rows.Count
DataGrid1.DataSource = objDataSet.Tables("all_pretenancyresult").DefaultView DataGrid1.DataBind()
//~~~~~~~~~~~~~~~~~~~~~
End Sub
//當下拉選單中的宿舍名稱改變時執行的副程序
Sub when_dorname_changed(sender as object,e as eventargs) BindDataBase()
4.5.3.2.4 刪除(全部)預租結果