
实例4.4通过本实例达到以下目的: (1)巩周函数的定义与调用。 (2)系统函数Ac,m和Chm类中函数的灵话使用。 运行参考界面如图437所示。 通综合应用举树1 日▣☒ 文本的加宽与解密 视文本: Pragr uner 密切位10之同的蓝数): 加罗 5rju向du 解些 在0eE 图4.37继合应用举例1运行参考界面 要求如下: (1)将配套素材文件突Cp4下的窗体文件Ep5.b,并将其授为项目的启动窗体. (2)按下列要求自定义过程: 1)定义一个名为cph的过程:用于根据原文和密钥如密,返回密文。假设如密规 则是1将每个字母加一个序数,这个序数就是密阴。如序数为3,那么"”一>“d,B一>E X一>A”、y一>b,如图438所示,其他字符保特原样. Z:Aa Bb Ce Xx Dd W Ee FE u Ga 图4.3球密们为3的字母加密示意图 2)定义一个名为dCp的过程:用于乱据密文和密解密,返回原文。 (3)调用己定义的过程,编写代码实现: 1)单击按组 加时, 根帮界面上的原文和密钥,生成密文并显示在其右边的标签 控件中。 2)单击按钮 时, 根据界面上的密文和密钥,生成原文并显示在其右边的标签
实例 4.4 通过本实例达到以下目的: (1)巩固函数的定义与调用。 (2)系统函数 Asc、Chr 和 Char 类中函数的灵活使用。 运行参考界面如图 4.37 所示。 图 4.37 综合应用举例 1 运行参考界面 要求如下: (1)将配套素材文件夹 Chapter4 下的窗体文件 Exp6.vb,并将其设为项目的启动窗体。 (2)按下列要求自定义过程: 1)定义一个名为 cipher 的过程:用于根据原文和密钥加密,返回密文。假设加密规 则是:将每个字母加一个序数,这个序数就是密钥。如序数为 3,那么"a"—>"d"、"B"—>"E"、 "X"—>"A"、"y"—>"b",如图 4.38 所示,其他字符保持原样。 图 4.38 密钥为 3 的字母加密示意图 2)定义一个名为 deCipher 的过程:用于根据密文和密钥解密,返回原文。 (3)调用已定义的过程,编写代码实现: 1)单击按钮 时,根据界面上的原文和密钥,生成密文并显示在其右边的标签 控件中。 2)单击按钮 时,根据界面上的密文和密钥,生成原文并显示在其右边的标签

控件中。 解题步露: (1)加我蛋定素材。将其设为启动窗体。 (2)定义一个名为cphr的过程:用于根据原文和密阴加密。迈回密文。考虑以下两点: 1)将该过程设置为函数过程,带两个形参分别用于从主调程序中获取原文和密铜,通过 函数名返国密文, 2)根据拟定的加密规则,当字母加上序数超过“z”或者“Z”时,因为它们是在“:”一 “2”或者“A”~“Z”之间循环,历以通过数字26来调整,参考代码如图439所示: 功能:定义一不致chr用于很据原文和密闭和密,返回一不密文 Private Function cipher(ByWal str As String,ByVal key As Integer)As String Din i As Integer Din ch As Char Din newStr As String = For i 0 To str.Length -1 ch str.Substring(i,1) Iar.IsLower(eh)Them'小写字母的情形 ch Chr(Asc(ch)+key) If Asc(ch)>Asc("z")Then ch Chr(Asc(ch)-26) 1 self Char.IsUpper(ch)Then“大写字母的情形 ch Chr(Ase(ch)+key) If Asc(ch)>Asc("Z")Then ch Chr(Asc(ch)-26) End If newStr newStr ch Next cipher■newStr End Function 图4.39函数cipher的参考代码截图 (3)定义一个名为deCipher的过程:用于根据密文和密阴解密,返目原文。略,请读 者自行完成。 【提示】编马时考地字母减去序数小于“”或者“A”时,还是通过数字26来调整。 (4)给按钮 加密编写代码并运行调试:实现根据界面上的原文和密明如密并显示一 参考代码如图4.40所示。 功能,从界面状取原文和密钢进行加密并示密文 Private Sub btnCipher_Click(ByVal sender As System.Object,ByWal e Dim str,newStr As String,key As Integer str txtStr.Text key Convert.ToInt32(txtKey.Text) newStr cipher(str,key) 调用函教进行加密 1blResult.Text newstr End Sub 图4.40根据原文和密钥调用函数cper加密的参考代码截图 (5)给按钮空 编写代码并运行调试:实现根据界面上的密文和密钥解密并显示。 略,请读者自行完成。 实例4.5运行参考界面如图4.41所示
控件中。 解题步骤: (1)加载指定素材,将其设为启动窗体。 (2)定义一个名为 cipher 的过程:用于根据原文和密钥加密,返回密文。考虑以下两点: 1)将该过程设置为函数过程,带两个形参分别用于从主调程序中获取原文和密钥,通过 函数名返回密文。 2)根据拟定的加密规则,当字母加上序数超过“z”或者“Z”时,因为它们是在“a”~ “z”或者“A”~“Z”之间循环,所以通过数字 26 来调整,参考代码如图 4.39 所示。 图 4.39 函数 cipher 的参考代码截图 (3)定义一个名为 deCipher 的过程:用于根据密文和密钥解密,返回原文。略,请读 者自行完成。 【提示】编码时考虑字母减去序数小于“a”或者“A”时,还是通过数字 26 来调整。 (4)给按钮 编写代码并运行调试:实现根据界面上的原文和密钥加密并显示。 参考代码如图 4.40 所示。 图 4.40 根据原文和密钥调用函数 cipher 加密的参考代码截图 (5)给按钮 编写代码并运行调试:实现根据界面上的密文和密钥解密并显示。 略,请读者自行完成。 实例 4.5 运行参考界面如图 4.41 所示

通峰合应用带例2 G回☒ 打于南试 样文 FOVCCHIT 测试 可 时间 生确率 字符个数: 5粉 50m 重试 图4.41综合应用举例2运行参考界面 煲求如下: (1)将配套素材文件夹Chapter4下的窗体文件Ep7.b,并将其设为碳目的启动窗体。 〔2)按下列要求自定义过程wT陆:实现在在文本框tA中随机显示n个大写英文 字母。 (3)通过调用已定义子过程的方法,编写代到实现以下功能: 1)当窗体加载时,在名为A的文本框中随机显示15个大写字母. 2》当单击 霉试按细时,在名为A的文本框中随机显示n个大写字母,n的值 由按组上面的文本框得到, 3)当光标进入“测试”栏的文本框时,开始计时,并设置为当系统的时间。 4)根据“样文”栏的文本,在“测试”栏输入,当输入字符个数与“样文”栏的个 数相同时,计时结束并禁止向文本框输入,同时自动将输入所用时间和输入准确率是示在 相美的文本框中。 解题步露: 〔1)如载指定素材,将其设为启动窗体。 (2)定义一个名为h0wx1的子过程:实现在在文本框tA中随机显示n个大写英文 字母。 其参考代码截图如图4.2所示。 '功能:在文本框txtA中随机显示n个大写英文字母 Private Sub showTxt(ByVal n As Integer) Dim i,myAsc As Integer For i 1 To n Randomize() myAsc (Asc("Z")-Asc("A"))*Rnd()+Asc("A") txth.Text txtA.Text Chr(nyAsc) Next End Sub 图4.42子过程s0mTx的参考代码截图 (3)编骨实现当“窗体加载时,在名为A的文本框中随机显示15个大写字母”。给 窗体的d事件编写代码,其参考代码候图如图4.43所示
图 4.41 综合应用举例 2 运行参考界面 要求如下: (1)将配套素材文件夹 Chapter4 下的窗体文件 Exp7.vb,并将其设为项目的启动窗体。 (2)按下列要求自定义过程 showTxt:实现在在文本框 txtA 中随机显示 n 个大写英文 字母。 (3)通过调用已定义子过程的方法,编写代码实现以下功能: 1)当窗体加载时,在名为 txtA 的文本框中随机显示 15 个大写字母。 2)当单击 按钮时,在名为 txtA 的文本框中随机显示 n 个大写字母,n 的值 由按钮上面的文本框得到。 3)当光标进入“测试”栏的文本框时,开始计时,并设置为当前系统的时间。 4)根据“样文”栏的文本,在“测试”栏输入,当输入字符个数与“样文”栏的个 数相同时,计时结束并禁止向文本框输入,同时自动将输入所用时间和输入准确率显示在 相关的文本框中。 解题步骤: (1)加载指定素材,将其设为启动窗体。 (2)定义一个名为 showTxt 的子过程:实现在在文本框 txtA 中随机显示 n 个大写英文 字母。 其参考代码截图如图 4.42 所示。 图 4.42 子过程 showTxt 的参考代码截图 (3)编码实现当“窗体加载时,在名为 txtA 的文本框中随机显示 15 个大写字母”。给 窗体的 Load 事件编写代码,其参考代码截图如图 4.43 所示

?功能:窗体加载时,调用子过程houTxt显示15个字母 Private Sub Exp3_Load(ByVal sender As Systen.Object, showTxt (15) End Sub 图443窗体如线时初始化的参考代码截图 (4)给按钮 重试 编码并调试:实现“在名为A的文本框中随机显示n个大 写字母”,其参考代码截图如图4.4科所示。 ”功能:随机显示n个字符,n由文本框txtm中得到 Private Sub btnAgain_Click(ByVal sender As System.Object, Din n As Integer ”清空之前的显示内客 txth.Text 1blTine.Text = 1blCorrect.Tgxt="“ txtB.Text 使文本框处于可输入扰态 txtB.Enabled True n Convert.ToInt32(txtNun.Text) shouTxt(n) End Sub 图4.44给按组编写的参考代码载图 (5)编码实现当“光标进入测试栏的文本框时,开始计时”。给文本框的G0F0s事 件(即得到焦点事件,它由光标进入时触发编写代马,其参考代码截图如图445所示,由 于代码中用于保存起始时间的变量如Tme在其触的事件还会用到,所以将其声明为留 体拔变量,类型为Dae,即Dim startTime As Date, 功能:当光标进人文本框txt时,开始计时 Private Sub txtB_GotFocus(ByVal sender As System.Object, startTime Date.Now 获取当时系统的时间 End Sub 图445当焦点进入名为B的文本框时的参考代码截图 (6)编码实现当“打字测试”。给文本框的KyPs事件编写代码,其参考代码候图如 图446所示:
图 4.43 窗体加载时初始化的参考代码截图 (4) 给按钮 编码并调试:实现 “在名为 txtA 的文本框中随机显示 n 个大 写字母”,其参考代码截图如图 4.44 所示。 图 4.44 给按钮编写的参考代码截图 (5)编码实现当“光标进入测试栏的文本框时,开始计时”。给文本框的 GotFocus 事 件(即得到焦点事件,它由光标进入时触发)编写代码,其参考代码截图如图 4.45 所示,由 于代码中用于保存起始时间的变量 startTime 在其他的事件还会用到,所以将其声明为窗 体级变量,类型为 Date,即 。 图 4.45 当焦点进入名为 txtB 的文本框时的参考代码截图 (6)编码实现当“打字测试”。给文本框的 KeyPress 事件编写代码,其参考代码截图如 图 4.46 所示

”功篇:当输入指定个数字符时,禁止输入并统计时间和准诵率 Private Sb tatB_KeyPress(ByVal sender As Systen.Object,ByVal e As Systen.Windows.Po Din endTine As Date,t As Lang,i As Integer If tatB.Text.Length txth Text,Length Then txtB.Ensbled False '使文本处于禁止输入代态 Ti时.三Date,ow'获取当时时间 '利用系统面数at1ff得到输入所用时间,以“。”为单位 专=DateDiff(”,tartTi,nTi动)‘统计输入所用时间 Din count As Integer count 0 For i =0 To txtA.Text.Length -1 If tatA Text,5ah8 tring(i,1)=txtB,Tgx,Subetring(i,1)Tem“逐个比机 ccnt量ccnt+1 '统计正确字阿的个数 End If Nert 1blTi.Text=t4”秒” 1 blCorrect.Tert量(count/txth.Text.Length10o)&y””显示准确率 End If End Sub 图446实现“打字测试”的参考代码截图 留意代码用到的系统函数DmD旺,常带3个参数,其详细说明参见表4.I· 表4.】常用的日期函数(假设表中的麦量对应的声明语句为Dimt其sDe》 功能 函数名 使用举例 说明 得到系统 Now t-Now() t的值是: 当前的日 2008-4-19:09:56“ 期和时间 得到年份 Yea Year(t) 其赵国值是:2008: 得到月份和天数的函 数分别为Month和 Day 得到小时 Hour Hour(t) 其返日值是:4:得到 分钟和秒的函数分别 是Minute和HoE. 按指定的 DateAdd DeAd道m°,4,),其中: 表示间隔单位是 日期间隔 第1个参数指定日期间隔单位,参见表42: “月”,即4个月后, 单位增减 第2个参数指定增减量,负数表示减: 其返国值是: 日期 第3个参数指定参照的日期。 "2008-8-19:03:56“ 按指定的 DateDiff -2008-8-87 返目现在距离 日期间隔 DDm"d°,t,it),其中: 2008-8-8的天数。其 单位求两 第1个参数指定日期间隔单位,参见表42: 巫回值是:129 日期的相 第2个参数指定第1个日期 屬值 第3个参数指定第2个日期. 【注意】要将日期显示成各种形式可使用以下方式实现: t.ToLongTineString,其最示形式为:9:0g:56, t,ToSh3 rtTimeStr1ng,其显示形式为:9:0的。 t.ToLongDateStrin2,其暴示形式为:200g年4月1日. L.ToS0 rtDate51rig,其暴示形式为:2008-4-1. 与时间和日期处理相关的其他函数和属性如图4.47,其详细说明可发装对应NET的 MSDN
图 4.46 实现“打字测试”的参考代码截图 留意代码用到的系统函数 DateDiff,常带 3 个参数,其详细说明参见表 4.1。 表 4.1 常用的日期函数(假设表中的变量对应的声明语句为: Dim t, tt as Date) 功能 函数名 使用举例 说明 得到系统 当前的日 期和时间 Now t=Now() t 的值是: "2008-4-1 9:09:56 " 得到年份 Year Year(t) 其返回值是:2008; 得到月份和天数的函 数分别为 Month 和 Day 得到小时 Hour Hour(t) 其返回值是:4;得到 分钟和秒的函数分别 是 Minute 和 Hour。 按指定的 日期间隔 单位增减 日期 DateAdd DateAdd("m",4,t),其中: 第 1 个参数指定日期间隔单位,参见表 4.2; 第 2 个参数指定增减量,负数表示减; 第 3 个参数指定参照的日期。 表 示 间 隔 单 位 是 “月”,即 4 个月后, 其返回值是: "2008-8-1 9:09:56 " 按指定的 日期间隔 单位求两 日期的相 隔值 DateDiff tt="2008-8-8 " DateDiff("d",t,tt),其中: 第 1 个参数指定日期间隔单位,参见表 4.2; 第 2 个参数指定第 1 个日期; 第 3 个参数指定第 2 个日期。 返回现在距离 2008-8-8 的天数,其 返回值是:129 【注意】要将日期显示成各种形式可使用以下方式实现: t.ToLongTimeString ,其显示形式为: 9:09:56 。 t.ToShortTimeString,其显示形式为: 9:09。 t.ToLongDateString,其显示形式为: 2008年4月1日。 t.ToShortDateString,其显示形式为: 2008-4-1。 与时间和日期处理相关的其他函数和属性如图 4.47,其详细说明可安装对应.NET 的 MSDN

DuteAdd (Bylal ticrosaft.Firsallanic.DateIntorral ByVal Juthle.Byval Date P AgplinStyie ◆1at4 BwWal Striag Syfd1stHs,BN他jtet)Ar Date ◆t4HN1■i女Et.FirealFarse Dat+t4Tl1ks1d ◆t与HBN1S灯iLd0t)c线,N1色J+at[1●cranodt.ho ◆Iat4ut0N1i百acaft.laai&Dat41ntwl.5yNl1 ate.[Eyfa影cn Datefurt (DyYal Striag ByFal Cbjeet.[yal Hiareseft.VIssallasie.TirstD RCe韩s有adAs ◆4n541111 ateger,1FdiM4etf,N1 Tateger)hs1g g Cantrelchars ◆T4net①y1srie)hs144e Caawersi铺 ◆I4 OwYal Date小s Tateger ◆er (RyWal Date)As Iateger JateFermat ◆te (ByWal Dat)An Iateger P》enterv ◆eh正yN】Dte)Anat"gr Paalate fonthane (ByWal Iategur,[yfal Beelean])At String ◆s4 cond (ByWal Dat)As Iateger PLk线rabet ◆Ia44d0 d Iateg可,wdta4,bd1 atagr)ha1aa 1t线 ◆1+1utBW15u1)hg1# Fhaacid Teeklay (BWal Date.[SyFal BLcrecoft.ViguulBurie.Tiret3uofek])Ae Intec ◆T+k4ka+1 Tateger,d144+nl,1igs.ns4d44e「 FirstTeekoer ◆14t①y1Dsle}AsTa4sgf 4佩l1s DMteStringo As Strine R【erw4i6 Few 0 As Dwte 图1s0Dw01Dsta P量awa3山 Tiner 0 Ar Double p fadlerSty年 1as4 tring0kmS女iag P0G4红 号tedw0k缸Dstw 图447 与时间、日期处理相关的函数和属性截图 表42 VBNET中指定日期间隔单位一笼表 日期间隔单位常量名说明 Datelnterval.Quarter 1,以“季度”为单位。 或者”q” 2、采用”g”是兼容VB医0,以下同。 Datelmerval.Day 以“天”为单位。 或者“d Datelnterval.Second 以“秒”为单位,其余参见图4.48所示截 或者”s” 图。 果Q) “JateIaterv"的成员回 已《》icrasaf我VirtalBu A 回D uAppFinStyle 四Day0fTee CallType 回Haw 四想iwte ConClasshttribs 回想nth PCwp世Weth同 四Qrt世 Coastants ▣Secend t90 ①Tak 回a0程e证 们st地adTin D Ter DateFormat g DateIateryal 图448 日期何隔单位的成员裁图
图 4.47 与时间、日期处理相关的函数和属性截图 表 4.2 VB.NET 中指定日期间隔单位一览表 日期间隔单位常量名 说明 DateInterval.Quarter 或者 "q" 1、以“季度”为单位。 2、采用"q"是兼容 VB6.0,以下同。 DateInterval.Day 或者 "d" 以“天”为单位。 DateInterval.Second 或者 "s" 以“秒”为单位,其余参见图 4.48 所示截 图。 图 4.48 日期间隔单位的成员截图