999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

利用VBA在Excel中開發普通高中考試排座系統

2012-07-10 02:00:42婁青
中國教育信息化 2012年14期

婁青

(浙江省寧海中學,浙江寧波 315600)

考試在普通高中學校教學過程中有著極其重要的地位,它能檢測學生知識掌握程度,能檢查教師教學情況,能衡量一所學校辦學質量,因此學校常常舉行各種月考和聯考。在一所普通高中學校里,往往有三個年級和文理分科情況,一次考試過程中學生考場和座位的安排就是一項任務繁重的工作,一般的考試分析系統沒有考生座位安排模塊,主管考試工作的教師就經常進行學生試場手工安排的重復性工作。微軟的Excel軟件為大家所熟悉和掌握,教師都非常喜歡用它來處理各種教學事務,經過筆者研究,發現Excel軟件工作表的單元格排列方式跟考場座位安排有相似之處,都比較工整有序有規律,為此有了利用Excel軟件和VBA技術開發普通高中考試排座系統的想法,并進行嘗試和實現。

由于高中存在三個年級和文理分科的情況,考試排座就顯得非常復雜,我們以高三理科排座為例講述普通高中考試排座系統,其余排座方法與此差不多,不再重復。該系統由四個程序模塊和五個Excel工作表組成,“高三理科”工作表存放高三理科學生名單,“高三座位”工作表存放各試場座位情況,“試場安排”工作表存放試場人數與各排人數,“班級情況”工作表存放班級數和各班學生人數,“試場分布”工作表存放試場號與試場位置。下面就四個程序模塊代碼加以詳細說明。

一、系統初始化模塊

在該模塊代碼中,程序取得“班級情況”工作表上的數據,如圖1所示,賦予并初始化各系統參數,為接下來的排座做好準備,其程序代碼如下(附有程序注解):

圖1 “班級情況”工作表

Option Explicit

Public Gao3LiBanShu As Integer'高三理科班級數

Public Gao3Li(20)As Integer'高三理科各班人數

Public Gao3Row As Integer '工作表有效行數

Public ShiChangHao As Integer '試場號

Public ZongShiChang As Integer'總試場數

Public ShiChangShu As Integer'試場滿員的試場數

Public YuShu As Integer'余數(未滿員試場的學生人數)

Sub Init()

Dim i As Integer

Gao3LiBanShu=Worksheets("班級情況").Cells(1,4).Value'取得高三理科班級數

For i=1 To Gao3LiBanShu

Gao3Li(i)=Worksheets("班級情況").Cells(2+i,4).Value'取得高三理科各班人數

Next i

End Sub

二、隨機排試場模塊

圖2 “高三理科”工作表,排座前

該模塊進行隨機方式的試場安排,在程序代碼中,根據前面獲得的初始化參數計算高三理科學生(如圖2“高三理科”工作表所示)人數,并取得“試場安排”工作表的試場人數,如圖3所示,由高三理科人數與試場人數計算得出滿員試場數和未滿員試場人數,對“高三理科”工作表選擇的試場列區塊產生隨機數,同時對隨機數進行排序,利用循環語句對滿員的試場進行排座,最后對未滿員的試場進行排座,如圖4試場列所示,其程序代碼如下:

圖3 “試場安排”工作表,各排人數從右向左分別為第一排至第五排

圖4 “高三理科”工作表,排座后

Sub PaiShiChang()'進行隨機方式排試場

Dim i As Integer

Dim j As Integer

ShiChangHao=0 '初始化試場號,若前面有排過別的試場,ShiChangHao=ShiChangHao

Worksheets("高三理科").Activate'激活高三理科工作表

Gao3Row=1

For i=1 To Gao3LiBanShu

Gao3Row=Gao3Row+Gao3Li(i)'高三理科表最大有效行數

Next i

ShiChangShu=(Gao3Row-1)Worksheets("試場安排").Cells(4,2).Value'整除取得試場數

YuShu=(Gao3Row-1)Mod Worksheets("試場安排").

Cells(4,2).Value'整除余數為多少人

Cells(1,3).Value="試場"

Cells(Gao3Row,3).Select

Range(Selection,"c2").Select '選擇試場列區塊

Selection.Value="=rand()"'產生隨機數

Cells(Gao3Row,3).Select

Range(Selection,"a2").Select

'排序,第一關鍵字:隨機數,第二關鍵字:學號

Selection.Sort key1:=Columns(3),order1:=xlAs cending,key2:=Columns(1),order2:=xlAscending

For i=1 To ShiChangShu'進行滿員的試場排座位

For j=1 ToWorksheets("試場安排").Cells(4,2).Value '進行一個試場的排座位

Cells(Worksheets("試場安排").Cells(4,2).Value*(i-1)+1+j,3).Value=i+ShiChangHao'賦予試場號

Next j

Next i

ZongShiChang=ShiChangShu

If YuShu<>0 Then'排最后一個試場

For j=1 To YuShu

Cells(ShiChangShu*Worksheets("試場安排").Cells(4,2).Value+1+j,3).Value=ShiChangShu+1+ShiChangHao

Next j

ZongShiChang=ZongShiChang+1'高三理科總試場數

End If

End Sub

三、考場座位安排模塊

圖5 “試場分布”工作表

該模塊進行各試場座位安排,在程序代碼中,取得“試場安排”工作表的各排人數,即為各試場排座的各排人數,如圖3所示。利用循環語句進行滿員的試場排座,在循環體中首先取得“試場分布”工作表中的試場位置,如圖5所示,再標示試場中每排的表頭,按照試場的各排人數從“高三理科”工作表獲取每排學生的學號與姓名,最后插入第幾試場和分頁符。對于未滿員試場安排,根據未滿員人數,分五種(因為試場是五排)情況進行排座。最后形成如圖6所示的“高三座位”工作表。其程序代碼如下:

圖6 “高三座位”工作表,從右向左分別為第一排至第五排

Sub ZuoWeiBiao()'試場座位安排

Dim Num As Integer'高三理科表的行號

Dim ZuoWei As Integer'高三座位表的行號

Dim i As Integer'試場號變量

Dim j As Integer'試場排數變量

Dim k As Integer'試場每排的座位變量 (1-Row1~5)

Dim Row1 As Integer'第一排

Dim Row2 As Integer'第二排

Dim Row3 As Integer'第三排

Dim Row4 As Integer'第四排

Dim Row5 As Integer'第五排

Num=1

ZuoWei=1

Worksheets("高三座位").Activate'激活高三座位表

ZuoWei=ZuoWei+ShiChangHao*15

Row1=Worksheets("試場安排").Cells(4,7).Value

Row2=Worksheets("試場安排").Cells(4,6).Value

Row3=Worksheets("試場安排").Cells(4,5).Value

Row4=Worksheets("試場安排").Cells(4,4).Value

Row5=Worksheets("試場安排").Cells(4,3).Value

For i=1 To ShiChangShu'滿員的試場排座位

Cells(ZuoWei,5).Value=Worksheets("試場分布").Cells(i+1+ShiChangHao,2).Value'試場位置,i+1+ShiChangHao是“試場分布”表中相應的行號

For j=1 To 5'試場中每排的表頭

Cells(ZuoWei+12,j*2-1).Value="學號"

Cells(ZuoWei+12,j*2).Value="姓名"

Next j

For k=1 To Row1'第一大排

Cells(ZuoWei+12-k,9).Value=Worksheets("高三理科").Cells(Num+k,1).Value

Cells(ZuoWei+12-k,10).Value=Worksheets("高三理科").Cells(Num+k,2).Value

Next k

For k=1 To Row2'第二大排

Cells(ZuoWei+12-k,7).Value=Worksheets("高三理科").Cells(Num+Row1+k,1).Value

Cells(ZuoWei+12-k,8).Value=Worksheets("高三理科").Cells(Num+Row1+k,2).Value

Next k

… …(省略第三大排和第四大排情況)

… …

For k=1 To Row5'第五大排

Cells(ZuoWei+12-k,1).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+Row3+Row4+k,1).Value

Cells(ZuoWei+12-k,2).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+Row3+Row4+k,2).Value

Next k

Cells(ZuoWei+13,5).Value="講臺"

Cells(ZuoWei+14,5).Value="高三理科第"&i+ShiChangHao&"試場" '表明第幾試場

Num=Num+Worksheets("試場安排").Cells(4,2).Value'準備指向高三理科表下一個試場

ZuoWei=ZuoWei+15'指向高三座位表下一個試場

Cells(ZuoWei,1).Activate

ActiveSheet.HPageBreaks.Add before:=ActiveCell'插入分頁符

Next i'下一個試場

If YuShu<>0 Then'未滿員試場安排

Cells(ZuoWei,5).Value=Worksheets("試場分布").Cells(ShiChangShu+1+1+ShiChangHao,2).Value

If YuShu<=Row1 Then '到第一大排止

Cells(ZuoWei+12,9).Value="學號"'第一大排的表頭

Cells(ZuoWei+12,10).Value="姓名"

For k=1 To YuShu

Cells(ZuoWei+12-k,9).Value=Worksheets("高三理科").Cells(Num+k,1).Value

Cells(ZuoWei+12-k,10).Value=Worksheets("高三理科").Cells(Num+k,2).Value

Next k

End If

If YuShu>Row1 And YuShu<=Row1+Row2 Then '到第二大排止

For j=1 To 2'第一大排到第二大排的表頭

Cells(ZuoWei+12,j*2-1+6).Value="學號"

Cells(ZuoWei+12,j*2+6).Value="姓名"

Next j

For k=1 To Row1 '第一大排為完整的排

Cells(ZuoWei+12-k,9).Value=Worksheets("高三理科").Cells(Num+k,1).Value

Cells(ZuoWei+12-k,10).Value=Worksheets("高三理科").Cells(Num+k,2).Value

Next k

For k=1 To YuShu-Row1 '第二大排為不完整的排

Cells(ZuoWei+12-k,7).Value=Worksheets("高三理科").Cells(Num+Row1+k,1).Value

Cells(ZuoWei+12-k,8).Value=Worksheets("高三理科").Cells(Num+Row1+k,2).Value

Next k

End If

… … (省略到第三大排止和到第四大排止情況)

… …

If YuShu>Row1+Row2+Row3+Row4 And YuShu<=Row1+Row2+Row3+Row4+Row5 Then'到第五大排止

For j=1 To 5'第一大排到第五大排的表頭

Cells(ZuoWei+12,j*2-1).Value="學號"

Cells(ZuoWei+12,j*2).Value="姓名"

Next j

For k=1 To Row1'第一大排為完整的排

Cells(ZuoWei+12-k,9).Value=Worksheets("高三理科").Cells(Num+k,1).Value

Cells(ZuoWei+12-k,10).Value=Worksheets("高三理科").Cells(Num+k,2).Value

Next k

For k=1 To Row2'第二大排為完整的排

Cells(ZuoWei+12-k,7).Value=Worksheets("高三理科").Cells(Num+Row1+k,1).Value

Cells(ZuoWei+12-k,8).Value=Worksheets("高三理科").Cells(Num+Row1+k,2).Value

Next k

For k=1 To Row3'第三大排為完整的排

Cells(ZuoWei+12-k,5).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+k,1).Value

Cells(ZuoWei+12-k,6).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+k,2).Value

Next k

For k=1 To Row4'第四大排為完整的排

Cells(ZuoWei+12-k,3).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+Row3+k,1).Value

Cells(ZuoWei+12-k,4).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+Row3+k,2).Value

Next k

For k=1 To YuShu-Row1-Row2-Row3-Row4'第五大排為不完整的排

Cells(ZuoWei+12-k,1).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+Row3+Row4+k,1).Value

Cells(ZuoWei+12-k,2).Value=Worksheets("高三理科").Cells(Num+Row1+Row2+Row3+Row4+k,2).Value

Next k

End If

Cells(ZuoWei+13,5).Value="講臺"

Cells(ZuoWei+14,5).Value="高三理科第"&ZongShiChang+ShiChangHao&"試場"'試場號

ZuoWei=ZuoWei+15

Cells(ZuoWei,1).Activate

ActiveSheet.HPageBreaks.Add before:=ActiveCell'插入分頁符

End If

End Sub

四、班級學生座位模塊

該模塊生成各班級學生考試座位表,告知學生考試座位所在試場,在程序代碼中,對“高三理科”工作表先進行學號排序,再分別利用循環語句從“試場分布”工作表中拷貝粘貼試場位置和“高三理科”工作表第一行列字段,最后形成如圖4所示的“高三理科”工作表,其程序代碼如下:

Sub BanJiBiao()'生成班級座位表

Dim k As Integer

Dim BanJi As Integer '指向各班級開頭行號

Dim i As Integer

Worksheets("高三理科").Activate

Gao3Row=1

For k=1 To Gao3LiBanShu

Gao3Row=Gao3Row+Gao3Li(k)'高三理科表有效行數

Next k

Cells(Gao3Row,3).Select

Range(Selection,"a2").Select

Selection.Sort key1:=Columns(1),order1:=xlAscending '進行學號排序

Cells(1,4).Value="試場號"

Cells(1,5).Value="試場位置"

BanJi=2 '初始化

For i=1 To Gao3LiBanShu

Worksheets("試場分布").Activate '激活試場分布表

Cells(ShiChangHao+ZongShiChang+1,2).Select

Range(Selection,"a"&1+ShiChangHao+1).Copy '拷貝試場位置分布

Worksheets("高三理科").Activate

Cells(BanJi,4).Select

ActiveSheet.Paste '粘貼高三理科試場位置分布

BanJi=BanJi+Gao3Li(i)

Next i

For i=Gao3LiBanShu To 2 Step-1

Cells(1,1).Select

Selection.EntireRow.Select

Selection.Copy'復制第一行列字段

Gao3Row=Gao3Row-Gao3Li(i)

Cells(Gao3Row+1,1).Select

Selection.EntireRow.Insert'插入一行

ActiveSheet.Paste '粘貼列字段

ActiveSheet.HPageBreaks.Add before:=ActiveCell'插入分頁符

Next i

ShiChangHao=ShiChangHao+ZongShiChang '計算試場號,以便排別的試場

End Sub

[1](美)杰克(Jerke,N.).VisualBasic 5開發人員指南[M].北京:機械工業出版社,1997.10.

主站蜘蛛池模板: 全部免费毛片免费播放| 丰满的熟女一区二区三区l| 四虎亚洲国产成人久久精品| 久久伊人久久亚洲综合| 韩日免费小视频| 久久人与动人物A级毛片| 特级毛片8级毛片免费观看| 激情六月丁香婷婷四房播| 亚洲国产中文欧美在线人成大黄瓜| 精品無碼一區在線觀看 | 青青久视频| 欧美福利在线| 欧美性猛交xxxx乱大交极品| 91小视频在线观看免费版高清| 老色鬼欧美精品| 99激情网| 青青草国产免费国产| 日韩二区三区无| 午夜综合网| 亚洲成人精品在线| 亚洲欧美另类中文字幕| 日韩最新中文字幕| 99热这里只有精品2| 91久久偷偷做嫩草影院免费看| 2021无码专区人妻系列日韩| 日韩精品资源| 又爽又大又黄a级毛片在线视频 | 99热这里只有免费国产精品| 日韩欧美91| 亚洲无限乱码| 亚洲无码不卡网| 日本免费一级视频| 亚洲—日韩aV在线| 国产精品免费入口视频| 日韩AV无码一区| 露脸国产精品自产在线播| 视频一区亚洲| 丝袜国产一区| 国产亚洲精久久久久久无码AV| 五月婷婷综合在线视频| 久久久久亚洲AV成人人电影软件| AV老司机AV天堂| 成人欧美日韩| 午夜在线不卡| 亚洲高清无码精品| 亚洲A∨无码精品午夜在线观看| 九色综合伊人久久富二代| 亚洲福利视频一区二区| 无码免费视频| 久久精品丝袜高跟鞋| 91精品啪在线观看国产| 欧美色综合网站| 色噜噜在线观看| 欧洲av毛片| 亚洲区一区| 无码福利视频| 欧美日韩一区二区三| 国产乱子精品一区二区在线观看| 国产无码精品在线| 精品综合久久久久久97超人该| a毛片在线播放| 亚洲人成网站在线观看播放不卡| 日韩成人在线一区二区| 老司机精品99在线播放| 欧美国产在线看| 国产好痛疼轻点好爽的视频| 国产69精品久久久久妇女| 欧美国产在线看| 国产亚洲欧美日韩在线一区二区三区| 国产精品流白浆在线观看| 99热国产这里只有精品9九| 国产成人1024精品| 成年免费在线观看| 亚洲国产精品日韩欧美一区| 国产欧美日韩专区发布| 91美女视频在线观看| 一级香蕉视频在线观看| 亚洲91精品视频| 国产色伊人| 亚洲黄色网站视频| 国产一区在线观看无码| 中文字幕在线一区二区在线|