热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php考试座位编排系统,考试座位编排vba

程序开发的准备在开发小程序前,首先要了解“缅茄杯”对座位编排的具体要求。“缅茄杯”的考生来自高州市61所初级中学(每所中学的考生人数由3到400不等,总

程序开发的准备

在开发小程序前,首先要了解“缅茄杯”对座位编排的具体要求。“缅茄杯”的考生来自高州市61所初级中学(每所中学的考生人数由3到400不等,总人数1848)。每个试室人数限额是30人,按5组6行编排。考生的座位是随机的并且来自同一个学校的考生的座位前后左右都不能相邻。其次选用一个好用的开发软件,本人就用自己比较常用的“VB”。

程序的开发

程序的开发,是最重要的,而且又是最艰难的一环工作,主要工作是代码的编写,它要求“算法”精简优化,操作简单,通用好用,这里我按以下几部分进行设计。

一、数据的导入

“缅茄杯”的考生在报名时,是由学校统一上送的。上送的名单是用“EXCELL”格式的文件上送的,考生的详细信息如下图所示:

58583983_1.jpg

为此程序的第一部工作是完成考生基本数据的导入。其代码编写为:

Dim ap As Excel.Application

Dim bk As Excel.Workbook

Dim st1 As Excel.Worksheet

Set ap = CreateObject("Excel.Application")

cd.DialogTitle = "打开EXCEL文件"

cd.Filter = "*.xls|*.xls"

cd.ShowOpen

If cd.FileName = "" Then MsgBox ("文件不能为空"): Exit Sub

Set bk = ap.Workbooks.Open(cd.FileName)

Set st1 = bk.Worksheets(1)

cols = 1

rows = 1

'cells(行,列)

With st1

Do Until .Cells(rows, 1).Value = ""

'表格行数

rows = rows + 1

Loop

End With

renshu = rows - 2

For i = 1 To renshu

b(i) = Trim(st1.Cells((i + 1), 1).Value)

c(i) = Trim(st1.Cells((i + 1), 3).Value)

xb(i) = Trim(st1.Cells((i + 1), 4).Value)

Next i

bk.Close

ap.Quit

Set ap = Nothing

二、座位的编排

这是程序开发的中心环节,我设计的思路简单描述是这样的:先为每个学生添加一个各不相同的随机数字(一至考生总人数,这里就是1~1848),再把考生按这些随机数按升序的顺序排列,依次编排到第一个试室至最后一个试室的1~30的座位中,然后按试室和座位的顺序对每一个考生进行检查,检查他的前后左右是否有同学校的考生,如果有则对他进行调整。其代码编写如下:

'随机号生成

i = 1

Randomize Time

Do While i

flag2 = 0

n = (Rnd * (renshu - 1)) \ 1 + 1

For j = 1 To i

If a(j) = n Then

flag2 = 1

Exit For

End If

Next j

If flag2 = 0 Then

a(i) = n

i = i + 1

End If

Loop

'试室,座号生成

For i = 1 To renshu \ 30 + 1

For j = 1 To 30

z = (i - 1) * 30 + j

If z > renshu Then

Exit For

Exit For

End If

d(z) = i

e(z) = j

Next j

Next i

For i = 1 To renshu

For j = 1 To renshu

If a(j) = i Then

f(i) = a(j)

g(i) = b(j)

h(i) = c(j)

xbxb(i) = xb(j)

id2(i) = id1(j)

Exit For

End If

Next j

Next i

'判断1

flag = 1

Do While flag = 1

flag = 0

For i = 1 To (renshu \ 30 + 1)

For j = 1 To 29

x = 30 * (i - 1) + j

If x <(renshu - 1) Then

If g(x) &#61; g(x &#43; 1) Then

Randomize

y &#61; (Rnd * (renshu - 1)) \ 1 &#43; 1

temp1 &#61; g(y)

g(y) &#61; g(x)

g(x) &#61; temp1

temp2 &#61; h(y)

h(y) &#61; h(x)

h(x) &#61; temp2

temp3 &#61; xbxb(y)

xbxb(y) &#61; xbxb(x)

xbxb(x) &#61; temp3

temp4 &#61; id2(y)

id2(y) &#61; id2(x)

id2(x) &#61; temp4

End If

End If

Next j

Next i

&#39;判断2

For i &#61; 1 To (renshu \ 30 &#43; 1)

For j &#61; 1 To 24

x &#61; 30 * (i - 1) &#43; j

If x <(renshu - 5) Then

If g(x) &#61; g(x &#43; 6) Then

Randomize

y &#61; (Rnd * (renshu - 1)) \ 1 &#43; 1

temp1 &#61; g(y)

g(y) &#61; g(x)

g(x) &#61; temp1

temp2 &#61; h(y)

h(y) &#61; h(x)

h(x) &#61; temp2

temp3 &#61; xbxb(y)

xbxb(y) &#61; xbxb(x)

xbxb(x) &#61; temp3

temp4 &#61; id2(y)

id2(y) &#61; id2(x)

id2(x) &#61; temp4

End If

End If

Next j

Next i

&#39;检验1

For i &#61; 1 To (renshu \ 30 &#43; 1)

For j &#61; 1 To 29

x &#61; 30 * (i - 1) &#43; j

If x <(renshu - 1) Then

If g(x) &#61; g(x &#43; 1) Then

flag &#61; 1

Exit For

End If

End If

Next j

Next i

&#39;检验2

For i &#61; 1 To (renshu \ 30 &#43; 1)

For j &#61; 1 To 24

x &#61; 30 * (i - 1) &#43; j

If x <(renshu - 5) Then

If g(x) &#61; g(x &#43; 6) Then

flag &#61; 1

Exit For

End If

End If

Next j

Next i

Loop

三、座位表的输出

完成座位编排后&#xff0c;还要把结果输出。按实际需要首先要输出座位表(输出格式为“EXCELL”格式文件)。座位表内容如下图所示&#xff1a;58583983_2.jpg

代码编写如下&#xff1a;

Dim zsbexcel As Excel.Application

Dim zsbworkbook As Excel.Workbook

Set zsbexcel &#61; New Excel.Application

zsbexcel.SheetsInNewWorkbook &#61; 1

Set zsbworkbook &#61; zsbexcel.Workbooks.Add

With zsbexcel.ActiveSheet

For i &#61; 1 To (renshu \ 30 &#43; 1) &#39;试室

z &#61; 9 * (i - 1) &#43; 7

.Cells(z, 3).Value &#61; "讲台"

.Cells((z &#43; 1), 3).Value &#61; "试室" & i

For j &#61; 1 To 5&#39;组

For k &#61; 1 To 6 &#39;排

x &#61; 30 * (i - 1) &#43; 6 * (j - 1) &#43; k&#39;考试号

If x <(renshu &#43; 1) Then

y &#61; 6 * (j - 1) &#43; k&#39;座号

m &#61; 9 * (i - 1) &#43; (7 - k) &#39;纵坐标

n &#61; j&#39;横坐标

.Cells(m, n).Value &#61; "(座号:" & y & ")" & h(x)

End If

Next k

Next j

Next i

四、准考证的输出

除了输出座位表&#xff0c;还要输出准考证(包括存根)&#xff0c;输出格式文件为“EXCELL”文件。其内容如下图所示&#xff1a;

58583983_3.jpg

代码编写如下&#xff1a;

For i &#61; 1 To renshu

For j &#61; 1 To renshu

If id2(j) &#61; i Then

b(i) &#61; g(j)

c(i) &#61; h(j)

dd(i) &#61; d(j)

ee(i) &#61; e(j)

xb(i) &#61; xbxb(j)

Exit For

End If

Next j

Next i

Dim ap As Excel.Application

Dim bk As Excel.Workbook

Dim st1 As Excel.Worksheet

Set ap &#61; CreateObject("Excel.Application")

cd.DialogTitle &#61; "打开EXCEL文件"

cd.Filter &#61; "*.xls|*.xls"

cd.ShowOpen

If cd.FileName &#61; "" Then MsgBox ("文件不能为空"): Exit Sub

Set bk &#61; ap.Workbooks.Open(cd.FileName)

Set st1 &#61; bk.Worksheets(1)

With st1

For j &#61; 1 To 1

i &#61; (j - 1) * 2 &#43; 1

.Cells((j - 1) * 28 &#43; 6, 4).Value &#61; c(i)

.Cells((j - 1) * 28 &#43; 6, 6).Value &#61; xb(i)

.Cells((j - 1) * 28 &#43; 7, 4).Value &#61; dd(i)

.Cells((j - 1) * 28 &#43; 7, 6).Value &#61; ee(i)

.Cells((j - 1) * 28 &#43; 8, 2).Value &#61; b(i)

.Cells((j - 1) * 28 &#43; 20, 4).Value &#61; c(i)

.Cells((j - 1) * 28 &#43; 20, 6).Value &#61; xb(i)

.Cells((j - 1) * 28 &#43; 21, 4).Value &#61; dd(i)

.Cells((j - 1) * 28 &#43; 21, 6).Value &#61; ee(i)

.Cells((j - 1) * 28 &#43; 22, 2).Value &#61; b(i)

.Cells((j - 1) * 28 &#43; 6, 12).Value &#61; c(i &#43; 1)

.Cells((j - 1) * 28 &#43; 6, 14).Value &#61; xb(i &#43; 1)

.Cells((j - 1) * 28 &#43; 7, 12).Value &#61; dd(i &#43; 1)

.Cells((j - 1) * 28 &#43; 7, 14).Value &#61; ee(i &#43; 1)

.Cells((j - 1) * 28 &#43; 8, 10).Value &#61; b(i &#43; 1)

.Cells((j - 1) * 28 &#43; 20, 12).Value &#61; c(i &#43; 1)

.Cells((j - 1) * 28 &#43; 20, 14).Value &#61; xb(i &#43; 1)

.Cells((j - 1) * 28 &#43; 21, 12).Value &#61; dd(i &#43; 1)

.Cells((j - 1) * 28 &#43; 21, 14).Value &#61; ee(i &#43; 1)

.Cells((j - 1) * 28 &#43; 22, 10).Value &#61; b(i &#43; 1)

Next j

End With

五、总名册的输出

最后的输出是对考生的名册进行输出了&#xff0c;输出格式同样为“EXCELL”格式文件。其内容如下图所示&#xff1a;58583983_4.jpg

代码编写如下&#xff1a;

Dim ap As Excel.Application

Dim bk As Excel.Workbook

Dim st1 As Excel.Worksheet

Set ap &#61; CreateObject("Excel.Application")

cd.DialogTitle &#61; "打开EXCEL文件"

cd.Filter &#61; "*.xls|*.xls"

cd.ShowOpen

If cd.FileName &#61; "" Then MsgBox ("文件不能为空"): Exit Sub

Set bk &#61; ap.Workbooks.Open(cd.FileName)

Set st1 &#61; bk.Worksheets(1)

With st1

For i &#61; 1 To renshu

For j &#61; 1 To renshu

If id2(j) &#61; i Then

dd(i) &#61; d(j)

ee(i) &#61; e(j)

Exit For

End If

Next j

Next i

For i &#61; 1 To renshu

.Cells((i &#43; 1), 7).Value &#61; dd(i)

.Cells((i &#43; 1), 8).Value &#61; ee(i)

Next i

End With

六、其它

最后设计完整这个程序&#xff0c;同时为方便程序的调试和运行&#xff0c;还可以设计一些其它功能&#xff0c;例如程序运行的进度条&#xff0c;设计程序的时间和作者信息等&#xff0c;最后完成的主界面如下图所示&#xff1a;

58583983_5.jpg

在上面6步思路中&#xff0c;我经过认真的编写和反复的调试修改&#xff0c;最后终于完成。

程序的应用与评价

程序编写完后&#xff0c;成功运行&#xff0c;效果不错&#xff0c;受到本学校领导和老师的高度肯定和赞扬。同时由于时间有限和本人的水平不高&#xff0c;本小程序也存在不足的地方&#xff0c;例如在处理大量数据时&#xff0c;直接用VB与EXCELL进行对话&#xff0c;没有应用到“数据库”&#xff0c;使得运行时间偏长。这里我希望读者能给我意见和指正。



推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • CS231n简介详见CS231n课程笔记1:Introduction。本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记本部分实现的是Momentum,RMSProb, ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
  • VBA操作Excel之设置单元格属性
    VBA操作Excel简介一、VBA读写Excel文件二、VBA设置单元格属性三、VBA弹出输入和输出窗口参考文档一、VBA读写Excel文件VBA简介及打开Excel文件方法见VB ... [详细]
  • vb.net面试题,请大家帮忙,谢谢。如果需要讲详细一点,那就加我QQ531412815第4题,潜在的错误,这里的错误不是常规错误,属于那种只有在运行是才知道的错误:Catchex ... [详细]
  • quartus管脚分配后需要保存吗_嵌入式必须会的一些硬件面试题,要试一试吗?你过来呀!...
    1、下面是一些基本的数字电路知识问题,请简要回答之。(1)什么是Setup和Hold时间?答:SetupHoldTime用于测试芯片对输入 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 吐槽:团队遣散,我们该何去何从?
    写在最前:纯属吐槽,漫笔,勿喷!就在前些天,放工回家的路上,看到群信息,说:据说京东裁人了~,也是在上上月,也一度被传的沸沸扬扬的:阿里、京东、华为接踵被曝住手社招,音讯也是满天飘 ... [详细]
  • 九、删除用户 并提交代码到git仓库
    (1)弹框询问用户是否删除数据 ... [详细]
  • C#路径,文件,目录,IO常见问题汇总主要内容:一、路径的相关操作,如判定路径是否合法,路径类型, ... [详细]
author-avatar
手浪用户2602928711
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有