阅读以下应用说明、Visual Basic开发说明以及程序代码,将应填入(n)的字句写在对应栏内。 【应用说明】 某交通灯演示程序启动后,其运行窗口中包括红绿灯标志以及当前红绿灯状态剩余秒数的动态显示(如下图)。红灯与绿灯持续的时间分别为30秒与4

admin2008-11-20  44

问题 阅读以下应用说明、Visual Basic开发说明以及程序代码,将应填入(n)的字句写在对应栏内。
【应用说明】
   某交通灯演示程序启动后,其运行窗口中包括红绿灯标志以及当前红绿灯状态剩余秒数的动态显示(如下图)。红灯与绿灯持续的时间分别为30秒与40秒。持续时间结束时,立即变更红绿灯,并重新显示剩余秒数。

【Visual Basic开发说明】
   在开发过程中,先在窗体内制作形状“红绿灯框架”(长方形,透明),在该框架中,上部制作形状“红灯”(ShpRed,圆形),默认属性为透明;下部制作形状“绿灯” (ShpGreen,圆形),初始设置其填充方式属性FillStyle为实心,填充颜色属性FillColor为绿色。
   再设置两个图像框(Image1在左,Image2在右),使其能分别装入数字图像文件,以显示当前红绿灯状态剩余的秒数。10个数字图像文件N0.bmp~N9.bmp分别用于显示数字0、1、…、9,这些文件存放在该应用程序所在目录中,以便在程序运行时按需要选择装入这两个图像框。为使图像文件装入图像框时能自动改变大小以适应图像框,这些图像框的Stretch属性都应设置成(1)。为使这些数字能每秒变化一次,开发窗体中设置了计时器Timcr1,其Enable属性设置成True,其Interval属性设置成1000。
   程序中,全局变量Light用以标志当前红灯(0)或绿灯状态(1),RedT和GreenT分别表示红灯或绿灯状态剩余的秒数。
   计时器Timer1的定时过程是在该程序启动1秒后首次执行的,以后每隔1秒执行1次。开发者应考虑对以下四种情况的处理:绿灯持续、绿灯转红灯、红灯持续、红灯转绿灯。
   过程LoadNumber的功能是:将红绿灯剩余秒数N(2位整数)分离出两个一位数i与i,再将其变换成字符,删除前面可能产生的空格,再将数字图像文件Ni.bmp与Nj.bmp装入两个图像框(其中i与j应以相应的数字字符代替)。
【Visual Basic程序代码】
Public Light AS Integer,  RedT As Integer, GreenT As Integer
Private Sub Form_Load()
     Light = 1  :  GreenT = 40  : RedT - 0 ’初始化设置
   End Sub
Private Sub Timer1_Timer()                 ’计时器定时过程
If Light = 1 Then                        ’绿灯状态时
     (2)  
    If GreenT > 0 Then                    ’绿灯持续时
      Call LoadNumber (GreenT)            ’调用过程,显示数字GreenT
    Else                                  ’绿灯转红灯时
       ShpRed.FillStyle = 0               ’置红灯形状实心
       ShpRed.FillColor = vbRed           ’为红灯形状填充红色
       ShpGreen.FillStyle = 1             ’置绿灯形状透明
       Call LoadNumber(30)
       Light = 0  :  RedT = 30
    End If
Else                                       ’红灯状态时
    RedT = RedT - 1
    If RedT > 0 Then                      ’红灯持续时
       Call LoadNumber(RedT)
    Else                                  ’红灯转绿灯时
       ShpRed.FillStyle = 1
       ShpGreen.FillStyle = 0
       ShpGreen.FillColor = vbGreen
         (3)  
       Light = 1  :  GreenT = 40
    End If
End If
End Sub
Sub LoadXumber (N As Integer)             ’根据剩余秒数N将数字图象装入图像框
Dim i As Integer,  j As Integer
i = Int(  (4)   )
j = (5)  
Image1.Picture = LoadPicture("N"&Trim(Str(i))&".bmp")  ’显示十位上的数字
Image2.Picture = LoadPicture("N"&Trim(Str(j))&".bmp")  ’显示个位上的数字
End Sub

选项

答案(1)True (2)GreenT=GreenT-1 (3)Call LoadNumber(40),或LoadNumber(40) (4)N/10 (5)N-i*10

解析 试题中对开发过程以及所用的技术都已做了详细描述。
   将图像文件装入图像框时,一般都需要注意图像人小的匹配问题。如果图像框的 Stretch(伸展)属性的值设置为True,则待装的图像文件就会自动改变大小以适应图像框。因此,(1)处应填True。
   题中的程序代码有三个过程块。
   第一个过程是公共模块,用于定义全局变量。由于红绿灯标志Light、红灯剩余时间 RedT和绿灯剩余时间GreenT,在计时器的每次定时过程中都要使用,而且退出该过程后依然需要保持其值,下次再进入该过程时将继续在此基础上使用,所以,这三个整型变量都需要在该公共模块中定义成全局变量,并进行初始化:灯的标志为绿色(1),绿灯持续时间为40秒,红灯持续时间为0秒。
   第二个过程是计时器的定时过程,每秒执行一次。因此,需要根据当前红绿灯的状态,对图像框中的数字图像文件进行更新,有时,还需要转变红绿灯的显示。
   该过程的执行逻辑可以先用结构化的文字描述如下(注意用缩格体现层次)。
   如果当前为绿灯,则
   绿灯剩余时间减1
   如果绿灯时间非0(绿灯持续)
   则按绿灯剩余时间更新图像框
   如果绿灯剩余时间为0(绿灯转红灯)
   则关闭绿灯而显示红灯,并设置红灯标志以及红灯剩余时间
   如果当前为红灯,则
   红灯剩余时间减1
   如果红灯时间非0(红灯持续)
   则按红灯剩余时间更新图像框
   如果红灯剩余时间为0(红灯转绿灯)
   则关闭红灯而显示绿灯,并设置绿灯标志以及绿灯剩余时间
   从以上分析可以知道,(2)处应填GreenT=GreenT-1(绿灯剩余时间减1)。
   在程序中,红灯与绿灯用两个圆的形状宋实现。如果红灯形状的风格属性设置成实心,且填充属性设置成红色,则红灯形状就会在运行时亮起红色。如果红灯形状的风格属性设置成空心,且填充属性设置成透明,则运行时红灯就不亮了。绿灯的情况也是这样。
   程序中,按照红绿灯的剩余时间更新图像框采用了子过程LoadNumber来实现。该子过程的参数就是当前灯的剩余时间。
   绿灯持续时,就应该用调用语句Call LoadNumber (GreenT)来更新图像框;
   红灯持续时,就应该用调用语句Call LoadNumber (RedT)来更新图像框;
   红灯刚亮时,就应该用调用语句Call LoadNumber (30)来更新图像框;
   绿灯刚亮时,就应该用调用语句Call LoadNumber (40)来更新图像框。
   因此,(3)处应填写Call LoadNumber (40)。调用语句中的Call也可以省略。
   程序中的第三个过程就是子过程LoadNumber。形式参数N就是灯的剩余时间,N的数值就是在图像框中显示的两位数字所表示的值。
   因此,在该过程中,应先根据数值N求出其十位数字(可能为0)和个位数字。
   N/10的整数部分Int(N/10)就是N的十位数。因此,(4)处应填N/10。
   已知N的十位数为i,则N的个位数j便是N-i*10。因此,(5)处应填写N-i*10。
   在图像框Image1中装入指定图像文件的语句是:
   Image1.Picture=LoadPicture("图像文件名")
   对指定的i,需要装入图像文件Ni.bmp。其中的i应该用数值i所对应的字符来代替。
   数值变量i所对应的字符为str(i),但其中可能含有空格,而文件名中,有没有空格将会改变所指的文件。所以,还需要删除其中的空格。函数Trim能删除字符串前后的所有空格(当然本题中只要删除前导空格就可以了,因为尾部并不存在空格)。
   "N"&Trim(Str(i))&".bmp"表示字符N后面接续由数值i所对应的字符(已删除前导和尾部的空格),后面再接续字符串“.bmp”。其中,字符串运算符号“&”表示接续。
   上述技术很实用,考生通过考试可以学到这些实用的技巧。这个技术中,需要考生深刻理解数值与其相应字符的含义与相互转换的方法。这是程序员必须掌握的基本功。
   本应用在开发测试过程中,经常会遇到红绿灯转换时数字显示不合常理的情况。有时,在显示数字01时,就立即发生红绿灯转换,没有再等1秒;有时显示数字00后,又等了1秒,才转换红绿灯。这些都与实际要求不符。需要多次调试程序才能解决这个问题。本题中的程序已经解决了这个问题。但考生不亲自动手开发,就难以体会到解决这些困难的方法。
转载请注明原文地址:https://kaotiyun.com/show/tsjZ777K
0

最新回复(0)