• 1.28 MB
  • 2022-04-22 11:36:09 发布

visual basic 2005语言程序设计 (刘怀亮 著) 研究出版社 课后答案

  • 84页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'课后答案网,用心为你服务!大学答案---中学答案---考研答案---考试答案最全最多的课后习题参考答案,尽在课后答案网(www.khdaw.com)!Khdaw团队一直秉承用心为大家服务的宗旨,以关注学生的学习生活为出发点,旨在为广大学生朋友的自主学习提供一个分享和交流的平台。爱校园(www.aixiaoyuan.com)课后答案网(www.khdaw.com)淘答案(www.taodaan.com) 参考答案第1章一、选择题1.D2.C3.C4.A5.B二、填空题1.菜单栏标题栏工具栏任务栏窗口属性栏窗体布局器代码编辑窗口工程项目管理器工具箱对象浏览器2.泛型运算符重载PartialType窗体的默认实例语法的多种改进My关键字3.窗口属性栏4.对象浏览器三、思考题1.答:结构化编程的思想和规则主要有:自顶向下,逐步求精。进行程序设计时,先把对问题的处理(即算法)粗分成几个步骤,叫做模块。然后对每个模块再细化为几个小模块,每个小模块再细分为若干个更小的子模块,……,直到每个小模块能直接用语言来实现为止。这种逐步细化的过程是一种模块化的过程,使程序结构清晰,易保证程序的正确性,也便于修改和维护。模块化。整个程序和大模块,都由几个功能相对独立的模块组 2VisualBasic2005语言程序设计成,每个模块只有一个入口和出口与外界联系。这使程序结构清楚,便于调试和修改。三种基本结构。整个程序中的大小模块仅由顺序、选择、循环三种基本控制结构组成。这三种基本结构也只有一个入口和一个出口。2.答:面向对象程序设计方法就是指把程序代码和要操作的数据封装起来而被视为一个对象工具,被封装的每个对象都是可视的。3.答:传统编程方法的基本流程是面向过程的机制,程序是按事先设计的程序流程来运行的。4.答:可以通过单击菜单栏上的“帮助”按钮或是直接按F1键来打开VisualBasic2005的帮助。四、上机操作题1.答:在开始菜单里找到VisualBasic2005快速版并打开它,通过文件菜单里的打开命令或是在VisualBasic2005启动后的起始页面里找到“打开项目”,找到Hello程序并打开它,在VisualBasic2005里运行它后查看运行结果。通过此次简单的操作来增强对VisualBasic2005快速版的开发环境的认识。2.答:根据书中所讲的Hello程序的创建方法来创建编写一个简单的HelloWorld程序,只需将书中所讲的Hello程序里按钮的单击事件的源代码改为: 参考答案3Me.TextBox1.Text="HelloWorld!"Me.TextBox1.Font=NewFont(System.Drawing.FontFamily.GenericSansSerif,14.0F)即可实现一个简单的HelloWorld程序。查看程序运行结果就会发现用VisualBasic2005开发一个程序是如此的简单、方便和快捷。第2章一、选择题1.A2.C3.D4.A5.D二、填空题1.数字型String类型(字符串类型)Boolean类型(布尔型)Date类型(日期型)Object类型(对象型)Variant类型(变体型)用户自定义类型2.在程序设计的过程中,它的值一直都不会改变,直到它占用的资源被释放在程序设计过程中,它的值是可以改变的3.算术运算符逻辑运算符比较运算符和赋值运算符4.函数5.一维数组多维数组三、思考题1.答:一个Object类型的数据共占用4个字节的存储空间。在定义Object类型的变量时,若想初始化这个变量,需要注意的是 4VisualBasic2005语言程序设计必须使用Set语句,这跟其他变量的初始化赋值是不同的。2.答:所谓常量,就是在程序设计的过程中,它的值一直都不会改变,直到它占用的资源被释放。如果在之后的过程中用户试图改变它的值的话,则在运行时,系统会报错,提示常量的值是不能更改的。定义常量可以起到提高程序的可读性和可维护性,并且在定义常量时,其名称最好是一些有意义的或是一看它的名字就能让人想到它会用来做什么存储什么数据的,这样就更能体现出它的好处。3.答:对于算术运算符,跟数学上的一样,算术运算符的优先级从高到低的顺序为:^、-(取负数)、*、/、、Mod、+、-;对于比较运算符,运算时则按照它们出现的顺序从左右到进行运算;对于逻辑运算符,运算的优先级从高到低的顺序为:Not、And、Or、Xor。4.答:语句是程序的基本。在进行程序开发时,首先必须得遵守程序开发的基本规范,除此之外,程序开发人员可以有自己的开发风格,但在开发的过程中最好加上注释,对程序中的功能模块进行简要的解释说明,这样对在以后的程序测试、维护过程都有很大的帮助,加快程序的维护和完善。四、上机操作题1.示例代码如下:DimaAsInteger=100DimbAsInteger=200Ifa>bThenMsgBox("a大于b")Ifa100Thenwrong=TrueSelectCasegradeCaseIs>=90TextBox1.Text="优"CaseIs>=80TextBox1.Text="良"CaseIs>=70TextBox1.Text="中"CaseIs>=60TextBox1.Text="合格"CaseElseTextBox1.Text="不合格"EndSelect"当输入的数据超过范围时,将提示字符串显示到文本框Ifwrong=TrueThenTextBox1.Text="输入的成绩不对,请重新输入"EndSubPrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickTextBox1.Text=""EndSubEndClass 参考答案113.程序说明:单击按钮时文本框显示7的阶乘的值。新建一个项目,在窗体上添加命令按钮和文本框,在按钮的单击事件添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimiAsInteger,resultAsIntegerresult=1Fori=1To7result=i*resultNextiTextBox1.Text="7!="&resultEndSub4.程序说明:单击按钮时窗体显示7的阶乘的值。步骤:新建一个项目,在窗体上添加命令按钮,在按钮的单击事件添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimiAsInteger,resultAsIntegerresult=1i=1DoWhilei<=7result=i*resulti=i+1LoopTextBox1.Text="7!="&resultEndSub5.程序说明:在文本框中输入字符串,单击反序按钮,另一文本框将显示反序的字符串。 12VisualBasic2005语言程序设计新建一个项目,在窗体上添加命令按钮、文本框和标签框。修改控件属性如表A-4所示。表A-4修改控件属性控件控件名属性属性值TextBoxTextBox1TextTextBox2TextButtonButton1Text反序LabelLabel1Text输入字符串:Label2Text反序结果:在反序按钮的单击事件添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTextBox2.Text=newstr(TextBox1.Text)EndSub编写将字符串反序的newstr过程:Functionnewstr(ByValtempAsString)AsStringDimiAsInteger,strAsString="",lengthAsIntegertemp=TextBox1.Textlength=Len(temp)Fori=lengthTo1Step-1str=str&Mid(temp,i,1)Nextinewstr=strEndFunction 参考答案13第4章一、选择题1.A2.D3.B4.B5.A二、填空题1.对象过程2.父类子类3.PublicProtectedFriendProtectedFriendPrivate4.Overloads5.命名空间三、思考题1.答:需要在子类中改变其继承自父类的方法时,只需要写出一个我们希望的方法,将它覆盖父类的方法即可。2.答:继承指在某些类的基础上派生出新类的方法。3.答:.NETFramework类库是一个面向对象的可重用类型集合,它提供了丰富的类和接口,通过直接使用或者继承这些类和接口,就可以很容易的得到需要的类,而不必重新编写。4.答:接口就是专门为了扩展和添加新的功能而设计的,接口定义了一系列属性、方法和事件。但并不提供实现。 14VisualBasic2005语言程序设计四、上机操作题1.首先新建一个项目“定义学生类”,在“项目”菜单中单击“添加类”,将一个新类Student添加到项目中,并向Student类中添加如下代码:PublicClassStudentPrivateIDAsInteger=10PrivateNameAsString=""PrivategradeAsInteger=0"声明speedValue属性PropertyIDValue()AsInteger"Get过程,用于获得属性值Get"返回属性值ReturnIDEndGetSet(ByValnewIDAsInteger)ID=newIDEndSetEndPropertyPropertyNameValue()AsStringGetReturnNameEndGetSet(ByValnewNameAsString)Name=newNameEndSetEndPropertyPropertygradeValue()AsIntegerGetReturngrade 参考答案15EndGetSet(ByValnewgradeAsInteger)Ifnewgrade<0Ornewgrade>100ThenMsgBox("输入的分数不对!")Elsegrade=newgradeEndIfgrade=newgradeEndSetEndPropertyEndClass分别向窗体上添加命令按钮、文本框和标签框。设置控件属性如表A-5所示。表A-5修改控件属性控件控件名属性名属性值LabelLabel1TextIDLabel2TextNameLabel3TextgradeTextBoxTextBox1TextTextBox2TextTextBox3TextButtonButton1Text读取Button2Text写入在窗体类中创建一个Student对象。DimStudentAsNewStudent双击Button1按钮,向其Click事件添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTextBox1.Text=Student.IDValue 16VisualBasic2005语言程序设计TextBox2.Text=Student.NameValueTextBox3.Text=Student.gradeValueEndSub双击Button2按钮,向其Click事件添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickStudent.IDValue=TextBox1.TextStudent.NameValue=TextBox2.TextStudent.gradeValue=TextBox3.TextMsgBox("写入完成")TextBox1.Text=""TextBox2.Text=""TextBox3.Text=""EndSub程序运行后,如图A-1所示。图A-1程序运行结果2.在项目“定义学生类”中,添加一个新类“monitor”,并添加如下代码:PublicClassmonitor"继承Student类InheritsStudentPublicIsmonitorAsBoolean=False 参考答案17EndClass3.打开项目“定义学生类”,向Student类中追加如下:Subfun()MsgBox("总分为:"&grade1+grade2)EndSub4.打开项目“定义学生类”,修改Student类中如下:PublicClassStudentPrivateIDAsInteger=10PrivateNameAsString=""Privategrade1AsInteger=0Privategrade2AsInteger=0"声明speedValue属性PropertyIDValue()AsInteger"Get过程,用于获得属性值Get"返回属性值ReturnIDEndGetSet(ByValnewIDAsInteger)ID=newIDEndSetEndPropertyPropertyNameValue()AsStringGetReturnNameEndGetSet(ByValnewNameAsString)Name=newNameEndSetEndPropertyPropertygrade1Value()AsIntegerGet 18VisualBasic2005语言程序设计Returngrade1EndGetSet(ByValnewgrade1AsInteger)Ifnewgrade1<0Ornewgrade1>100ThenMsgBox("输入的分数不对!")Elsegrade1=newgrade1EndIfgrade1=newgrade1EndSetEndPropertyPropertygrade2Value()AsIntegerGetReturngrade2EndGetSet(ByValnewgrade2AsInteger)Ifnewgrade2<0Ornewgrade2>100ThenMsgBox("输入的分数不对!")Elsegrade2=newgrade2EndIfgrade2=newgrade2EndSetEndPropertySubfun()MsgBox("总分为:"&(grade1+grade2)/2)EndSubEndClass双击窗体,向其Load事件添加如下代码:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadDimStudentAsNewStudentStudent.fun()EndSub 参考答案19结果如图A-2所示。图A-2程序运行结果第5章一、选择题1.A2.B3.C4.D5.B二、填空题1.有模式无模式2.事件3.Click4.TextChanged5.事件处理程序6.显示状态隐藏状态关闭状态等三、思考题1.答:Windows应用程序的图形用户界面有单文档界面(SDI),多文档界面(MDI)和对话框界面等形式。2.答:单文档界面的程序每次只能打开一个窗体。3.答:Windows窗体可以分为有模式和无模式两种。如果某 20VisualBasic2005语言程序设计个窗体是有模式的,那么在关闭或者隐藏这个窗体之前,其他窗体是不可用的。常见的警告对话框就是有模式的,必须单击“确定”后其他窗体才可用。无模式窗体则是指多个窗体都可随时接受用户的输入动作。常见的无模式窗体有MicrosoftWord中的查找、替换对话框。4.答:音乐播放程序使用单文档界面较为合理。5.答:当项目中存在多个窗体时,可以指定某个窗体为启动窗体。在“解决方案资源管理器”中用右击项目,选择“属性”,即可打开该项目的属性页面,选择“应用程序”属性,从“启动窗体”下拉列表中选择需要的窗体作为启动窗体。四、上机操作题1.新建一个项目,在窗体属性窗口修改其Text属性。如图A-3所示。点击Icon属性项,选择一个图标文件。如图A-4所示。图A-3修改Text属性图A-4修改 参考答案21Icon属性2.新建一个项目,在窗体属性窗口修改其StartPosition属性。如图A-5所示。图A-5修改StartPosition属性3.新建一个项目,在窗体属性窗口修改其Opacity属性。如图A-6所示。图A-6修改Opacity属性4.双击窗体,为窗体的Load事件添加如下代码:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load 22VisualBasic2005语言程序设计Me.Text="你好"EndSub运行代码后结果如图A-7所示。图A-7程序运行结果第6章一、选择题1.C2.D3.A4.B5.C二、填空题1.TextChanged2.SelectedIndexChanged3.LagreIconSmallIconListDetailsTile4.节点5.Timer三、思考题1.答:SelectedIndexChanged事件和SelectedValueChanged事件,前者在ListBox控件的项次序(Index)发生改变时触发,后者在ListBox控件的项值(Value)发生改变时触发,一般来说这两个事件会同时触发。 参考答案232.答:多文档界面程序(MDI)可以在在一个程序中可以打开多个文档。3.答:通常MDI主窗体用于控制和创建MDI子窗体,并为其提供工作空间,即所有MDI子窗体都只会显示在MDI父窗体的范围内,当MDI父窗体关闭时,所有MDI子窗体都将被关闭,而MDI子窗体关闭,对MDI父窗体没有影响。MDI子窗体一般用于实现具体的功能。4.答:要在MDI父窗体中打开MDI子窗体,可以在MDI父窗体类中新建一个MDI子窗体对象,在适合的地方调用MDI子窗体对象的显示函数即可。MDI父窗体可以通过ActiveMidChild属性获取MDI子窗体的相关信息。5.答:例如只选择文本文件、Word文档和HTML文件,设置如下:“文本文件(.txt)|*.txt|Word文档(.doc)|*.doc|HTML文件|*.html”。四、上机操作题1.新建Windows应用程序项目“改变字体大小”,向窗体Form1添加两个命令按钮,设置属性如表A-6所示。表A-6修改控件属性控件控件名属性名属性值 24VisualBasic2005语言程序设计ButtonButton1Text增大字体Button2Text减小字体RichTextBoxRichTextBox1Text在这里输入内容在Form1类中定义一个变量来标识字体大小。DimfontsizeAsInteger=10双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click"设置字号fontsize=fontsize+3"改变字体大小RichTextBox1.Font=NewSystem.Drawing.Font("宋体",fontsize,FontStyle.Bold)EndSub双击Button2按钮,添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Clickfontsize=fontsize-3RichTextBox1.Font=NewSystem.Drawing.Font("宋体",fontsize,FontStyle.Bold)EndSub运行结果如图A-8所示。 参考答案25图A-8程序运行结果2.新建Windows应用程序项目“显示百分比的倒计时器”,向窗体Form1添加以下控件,设置属性如表A-7所示。表A-7设置属性控件控件名属性名属性值ButtonButton1Text开始TextBoxTextBox1Text10LabeLabel1Text0Label2Text秒倒计时续表A-7控件控件名属性名属性值TimerTimer1Interval1000ProgressBarProgressBar1在Form1类中定义以下变量。"多少秒倒计时DimtimeAsInteger=10"已经过多少秒DimcountAsInteger=0双击Button1按钮,添加如下代码: 26VisualBasic2005语言程序设计PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Clicktime=CInt(TextBox1.Text)ProgressBar1.Maximum=TextBox1.Text"启动计时器Timer1.Start()EndSub双击Timer1,添加如下代码:PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer1.TickIfcount=CInt(TextBox1.Text)ThenLabel1.Text="0秒倒计时结束!""停止计时Timer1.Stop()time=CInt(TextBox1.Text)ProgressBar1.Maximum=TextBox1.TextProgressBar1.Value=0count=0Elsecount=count+1time=time-1Label1.Text=time&"秒"ProgressBar1.Value=countEndIfEndSub运行程序,结果如图A-9所示。 参考答案27图A-9程序运行结果3.新建项目WebBrowserTest,向窗体中添加如下控件并设置相应属性如表A-8所示。表A-8设置属性控件控件名属性名属性值LabelLabel1Text网址TextBoxTextBox1TextHttp://www.google.com续表A-8控件控件名属性名属性值ButtonButton1Text打开WebBrowseWebBrowser1AnchorTop,Bottom,Left,Right双击Button1,添加代码如下:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstrAsString=TextBox1.Text"定位到指定的网址WebBrowser1.Navigate(str) 28VisualBasic2005语言程序设计EndSub运行程序,结果如图A-10所示。图A-10程序运行结果4.参考上一程序,向上一程序中添加一个Timer控件,并设置其InterVal属性为10000。修改Button1的Click事件处理程序如下:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstrAsString=TextBox1.Text"定位到指定的网址WebBrowser1.Navigate(str)"启用定时器Timer1.Start()EndSub向Timer1控件的Tick事件添加代码如下:PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer1.Tick"刷新页面 参考答案29WebBrowser1.Refresh()EndSub第7章一、选择题1.A2.C3.B4.A5.D二、填空题1.Delete2.DirectoryInfo3.CopyDirectory4.写入读取5.Drives三、思考题1.答:FileStream类可以同步读写和异步读写,而Stream类只能进行异步读写。2.答:File类中提供的是静态的方法,而FileInfo类中的方法是实例方法。3.答:FileInfo类中的方法是实例方法,在反复对文件进行操作时使用实例方法有助于提高应用程序的性能。4.答:DirectoryInfo类中的CreateSubdirectory方法可以用于创建子目录。 30VisualBasic2005语言程序设计5.答:二进制文件存储的是二进制代码,可以表示任何类型的文件,比如文本、图像及音频等等。对于某个二进制而言,它表示的意义完全取决于应用程序的处理。四、上机操作题1.新建Windows应用程序项目“使用File类创建新文件”,向窗体Form1添加两个命令按钮,设置属性如表A-9所示。表A-9设置属性控件控件名属性名属性值ButtonButton1Text检查文件Button2Text创建文件Button3Text删除文件TextBoxTextBox1TextC:Test.txtLabelLabel1Text输入文件名及路径:双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstriAsString=TextBox1.Text"检查文件是否存在IfSystem.IO.File.Exists(stri)=TrueThenMsgBox(stri+"文件存在!")ElseMsgBox(stri+"文件不存在!")EndIf 参考答案31EndSub双击Button2按钮,添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimstriAsString=TextBox1.Text"创建文件System.IO.File.Create(stri)MsgBox(stri+"创建成功")EndSub双击Button3按钮,添加如下代码:PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickDimstriAsString=TextBox1.TextIfSystem.IO.Directory.Exists(stri)=TrueThen"删除文件System.IO.File.Delete(stri)MsgBox(stri+"删除成功")ElseMsgBox(stri+"不存在!")EndIfEndSub运行程序,结果如图A-11所示。打开相应的路径即可找到创建的文件。 32VisualBasic2005语言程序设计图A-11程序运行结果2.新建Windows应用程序项目“使用FileInfo类创建新文件”,向窗体Form1添加两个命令按钮,设置属性如表A-10所示。表A-10设置属性控件控件名属性名属性值ButtonButton1Text检查文件Button2Text创建文件Button3Text删除文件TextBoxTextBox1TextC:Test.txtLabelLabel1Text输入文件名及路径:双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstriAsString=TextBox1.TextDimMyfileAsSystem.IO.FileInfo=NewSystem.IO.FileInfo(stri)"判断文件是否存在IfMyfile.Exists=TrueThenMsgBox("文件存在")Else 参考答案33MsgBox("文件不存在")EndIfEndSub双击Button2按钮,添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimstriAsString=TextBox1.TextDimMyfileAsSystem.IO.FileInfo=NewSystem.IO.FileInfo(stri)"创建文件Myfile.Create()MsgBox(stri+"创建成功")EndSub双击Button3按钮,添加如下代码:PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickDimstriAsString=TextBox1.TextDimMyfileAsSystem.IO.FileInfo=NewSystem.IO.FileInfo(stri)IfMyfile.Exists=TrueThen"删除文件Myfile.Delete()MsgBox(stri+"删除成功")ElseMsgBox("文件不存在")EndIfEndSub运行程序,结果如图A-12所示。打开相应的路径即可找到创建的文件。 34VisualBasic2005语言程序设计图A-12程序运行结果3.新建Windows应用程序项目“创建文件并写入内容”,向窗体Form1添加两个命令按钮,设置属性如表A-11所示。表A-11设置属性控件控件名属性名属性值ButtonButton1Text保存TextBoxTextBox1TextC:Test.txtLabelLabel1Text保存到RichTextBoxRichTextBox1Text在这里输入内容双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimContents=RichTextBox1.TextDimStr=TextBox1.Text"向文件中写入内容System.IO.File.AppendAllText(Str,Contents)MsgBox("保存好了")EndSub 参考答案35运行程序,结果如图A-13所示。打开相应的路径即可找到创建的文件。图A-13程序运行结果4.新建Windows应用程序项目“使用Directory类操作目录”,向窗体Form1添加两个命令按钮,设置属性如表A-12所示。表A-12设置属性控件控件名属性名属性值ButtonButton1Text检查目录Button2Text创建目录Button3Text删除目录TextBoxTextBox1TextC:新目录LabelLabel1Text输入目录:双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimPathAsString=TextBox1.Text 36VisualBasic2005语言程序设计"检查目录是否存在IfSystem.IO.Directory.Exists(Path)=TrueThenMsgBox(Path+"存在!")ElseMsgBox(Path+"不存在!")EndIfEndSub双击Button2按钮,添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimPathAsString=TextBox1.Text"创建目录System.IO.Directory.CreateDirectory(Path)MsgBox(Path+"创建成功")EndSub双击Button3按钮,添加如下代码:PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickDimPathAsString=TextBox1.TextIfSystem.IO.Directory.Exists(Path)=TrueThen"删除目录System.IO.Directory.Delete(Path,True)MsgBox(Path+"删除成功")ElseMsgBox(Path+"不存在!")EndIfEndSub 参考答案37运行程序,结果如图A-14所示。打开相应的路径即可找到创建的目录。图A-14程序运行结果5.新建Windows应用程序项目“使用DirectoryInfo类创建新文件”,向窗体Form1添加两个命令按钮,设置属性如表A-13所示。表A-13设置属性控件控件名属性名属性值ButtonButton1Text检查目录Button2Text创建目录Button3Text删除目录TextBoxTextBox1TextC:新目录LabelLabel1Text输入目录:双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimpathAsString=TextBox1.TextDimMyfileAsSystem.IO.DirectoryInfo=New 38VisualBasic2005语言程序设计System.IO.DirectoryInfo(path)"判断文件是否存在IfMyfile.Exists=TrueThenMsgBox("文件存在")ElseMsgBox("文件不存在")EndIfEndSub双击Button2按钮,添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimpathAsString=TextBox1.TextDimMyfileAsSystem.IO.DirectoryInfo=NewSystem.IO.DirectoryInfo(path)"创建文件Myfile.Create()MsgBox(path+"创建成功")EndSub双击Button3按钮,添加如下代码:PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickDimpathAsString=TextBox1.TextDimMyfileAsSystem.IO.DirectoryInfo=NewSystem.IO.DirectoryInfo(path)IfMyfile.Exists=TrueThen"删除文件Myfile.Delete()MsgBox(path+"删除成功")ElseMsgBox("文件不存在") 参考答案39EndIfEndSub运行程序,结果如图A-15所示。打开相应的路径即可找到创建的目录。图A-15程序运行结果第8章一、选择题1.B2.D3.D4.C5.B6.A7.C8.D二、填空题1.StructureQueryLanguage2.grant3.将某种或某些对基本表或视图的操作权限授予某用户4.映射5.所有用户可同时存取数据库中的数据,用户也可以使用各种方式通过各种接口来操作数据库,并提供数据共享,以达到其目的6.数据库的逻辑结构应用程序数据的物理结构的变化 40VisualBasic2005语言程序设计不会影响到数据的逻辑结构7.数据的集合一个表或多个表的集合8.充分利用宝贵的内存资源,提高读取数据速度三、思考题1.答:数据库的基本特点主要有:(1)能实现数据的共享。数据共享不仅指所有用户可同时存取数据库中的数据,用户也可以使用各种方式通过各种接口来操作数据库,并提供数据共享,以达到其目的。(2)较小的数据冗余度。与文件系统结构相比,由于数据库实现了数据的共享,从而很大程度的避免了用户各自去建立属于自己的应用文件。这样就减少了大量的重复数据,也即是减少了数据的冗余,从而进一步的维护了数据的一致性。(3)数据之间具有独立性。数据的独立性包括数据库中数据库的逻辑结构和应用程序之间的相互独立,也包括数据的物理结构的变化不会影响到数据的逻辑结构。(4)数据能实现集中控制。 参考答案41在文件系统结构管理方式中,数据是处于一种很零散的状态,不同的用户或同一用户在不同的处理中,被处理的文件之间毫无关系,从而很实现对存储的数据进行集中式的管理和控制。利用数据库,不仅可以对数据进行集中的控制和管理,而且可以通过各种数据模型来表示各种数据的组织形式以及数据之间的联系。(5)数据具有一致性和可维护性,以确保数据的安全性和可靠性。这些主要包括:①安全性控制:为防止数据的无故丢失、错误更新及越权使用;②完整性控制:保证了数据的正确性、有效性以及兼容性;③并发控制:使得在同一时间间隔内,不仅允许用户对数据实现多路存取,又能防止用户之间对数据的不正常交互作用;④故障的发现和恢复:由数据库管理系统提供一套方案,可以及时发现故障并修复故障,从而进一步防止数据被破坏,避免不必要的损失。2.答:基本表与视图的区别主要体现在:视图是从一个或几个基本表(或视图)中导出的表,它与基本表不同,是一个虚表。数据库里只存放视图的定义,不存放视图里对应的数据,这些数据仍然是存放在原来的基本表里。所以,当基本表中的数据发生变化时,在视图中查询到的数据也是改变之后的数据。可以说,视图就是基本表的一个映射,通过它可以看到自己想看的数据的变化。 42VisualBasic2005语言程序设计3.答:SQL中常用的基本数据定义主要有:基本表的定义、修改、更新、删除;视图的定义、删除;索引的定义、删除。它们各自的格式为:基本表的定义:CREATETABLE表名(列名1类型(size)[NOTNULL][UNIQUE],列名2类型(size)[NOTNULL][UNIQUE],……)基本表的修改:ALTERTABLE表名ADD列名类型ALTERTABLE表名DROPCOLUMN列名基本表的更新:UPDATE表名SET列名=值1[,列名=值2……[WHERE条件语句]基本表的删除:DROPTABLE表名视图的定义:CREATEVIEW<视图名>[(<列名>[,<列名>]……)]AS<子查询>[WITHCHECKOPTION]视图的删除:DROPVIEW<视图名>索引的定义:CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON 参考答案43<表名>(<列名>[次序][,<列名>[次序]]……)索引的删除:DROPINDEX<索引名>4.答:常见的数据库操作有:数据库的连接、新建数据库、新建表、读取数据、查询数据、增加数据、删除数据5.答:使用SQLServer2005来创建数据库的步骤主要有:运行SQLServer2005的SQLServerManagementStudio,如图A-16所示。图A-16打开SQLServerManagementStudio在数据库树上右击,选择“新建数据库”,如图A-17所示。图A-17新建数据库在弹出的窗口中填写新数据库的名字及其他相关选项设置,如图A-18所示。 44VisualBasic2005语言程序设计图A-18属性设置设置好一切后,单击“确定”按钮,新数据库就创建好了,在对象资源管理器里的数据库中就可以看到新创建的数据库。四、上机操作题1.答:创建“学生”数据库的SQL语句为:USEmasterCREATEDATABASE学生2.答:创建“学生基本信息”基本表的SQL语句为:use学生createtable[dbo].[学生基本信息]([学号][char](20)COLLATEChinese_PRC_CI_ASNOTNULLPrimaryKey,[姓名][char](20)COLLATEChinese_PRC_CI_ASNOTNULL,[性别][char](2)NOTNULL,[年龄][int]NOTNULL,[所在学院][char](50)NOT 参考答案45NULL,[所在班级][char](30)NOTNULL,[所学专业][char](30)NOTNULL)创建“学生课程成绩表”基本表的SQL语句为:use学生createtable[dbo].[学生课程成绩]([学号][char](20)COLLATEChinese_PRC_CI_ASNOTNULLPrimaryKey,[高等数学][float](10),[大学英语][float](10),[C语言程序设计][float](10),[线性代数][float](10),[面向对象程序设计][float](10))3.答:(1)select*from学生基本信息where学号="0496531"(2)select*from学生基本信息where姓名like张%(3)select*from学生基本信息where年龄>19(4)selectdistinct所在学院from学生基本信息(5)select*from学生基本信息where所学专业="软件工程"(6)select*from学生课程成绩where学号="5693215"(7)selectcount(学号)from学生课程成绩where高等数学<60(8)selectmax(线性代数)from学生课程成绩(9)updatetable学生基本信息set所在学院="外语学院" 46VisualBasic2005语言程序设计where学号="4562130"(10)deletefrom学生基本信息where学号="5630210"4.答:(1)grantselectontable学生基本信息totom(2)grantupdateontable学生课程成绩totomwithgrantoption(3)revokeinsertontable学生课程成绩fromtom5.答:为学生基本信息基本表创建视图的SQL语句为:Createviewstuviewasselect学号,姓名,性别,年龄,所学专业from学生基本信息where所在学院=′信息学院′select*fromstuviewwhere所学专业=′计算机科学与技术′and姓名=张%insertintostuviewvalues(′1234560′,′小刚′,′男′,′21′,′软件工程′)第9章一、选择题1.A2.D3.B4.B5.A二、填空题1.Srting 参考答案472.ContainsImage3.键4.HKEY_LOCAL_MACHINE5.TCP三、思考题1.答:My.Computer.Info对象提供了可以显示操作系统的完整名称、平台标识符、系统版本等属性,还包括了显示计算机物理及虚拟内存的总量属性等。2.答:对于获取的音频流,可以使用My.Computer.Audio.Play进行播放。3.答:注册表是Windows操作系统用来保存系统信息和应用程序信息二进制文件4.答:TCP协议和UDP协议的工作原理是不同的,TCP协议在通讯前需要建立一个连接,而UDP协议不需要事先建立连接。5.答:TCP协议的优势是可靠,但开销比较大。UDP协议在于方便快捷,但可靠性不高。四、上机操作题1.输出剪贴板中的文本GetName,向窗体Form1添加两个命令按钮,设置属性如表A-14所示。 48VisualBasic2005语言程序设计表A-14设置属性控件控件名属性名属性值ButtonButton1Text获取计算机名Button2Text获取用户名双击Button1,向其Click事件添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickMsgBox("计算机名:"&My.Computer.Name)EndSub双击Button1,向其Click事件添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickMsgBox("用户名称:"&My.User.Name)EndSub运行结果如图A-19所示。(a)(b)(c)图A-19程序运行结果2.新建Windows应用程序项目“判断剪贴板中的数据类型”, 参考答案49向窗体Form1中添加如下代码:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadIfMy.Computer.Clipboard.ContainsAudio=TrueThenMsgBox("剪贴板中的数据为音频类型")ElseIfMy.Computer.Clipboard.ContainsImage=TrueThenMsgBox("剪贴板中的数据为图像类型")ElseIfMy.Computer.Clipboard.ContainsText=TrueThenMsgBox("剪贴板中的数据为文本类型")ElseMsgBox("剪贴板中的数据为自定义类型")EndIfEndSub运行结果如图A-20所示。图A-20程序运行结果3.新建Windows应用程序项目“输出剪贴板中的文本”,向窗体Form1添加两个命令按钮,设置属性如表A-15所示。表A-15设置属性控件控件名属性名属性值ButtonButton1Text输出剪贴板中的文本 50VisualBasic2005语言程序设计Button2Text清除剪贴板双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click"判断剪贴板中的内容类型IfMy.Computer.Clipboard.ContainsText=TrueThen"获取剪贴板中的文本MsgBox("剪贴板中的文本为:"&My.Computer.Clipboard.GetText())EndIfMsgBox("剪贴板中的内容不是文本类型")EndSub双击Button2按钮,添加如下代码:PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click"清除剪贴板My.Computer.Clipboard.Clear()EndSub运行结果如图A-21所示。图A-21程序运行结果 参考答案514.新建Windows应用程序项目“读取注册表的键值”,向窗体Form1添加两个命令按钮,设置属性如表A-16所示。表A-16设置属性控件控件名属性属性值名ButtonButton1Text查看LabelLabel1Text输入要查看的注册表项:Label2Text关键字:TextBoxTextBox1TextHKEY_CURRENT_USERTestTextBox2TextKeyWord双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click"判断键值是否存在IfMy.Computer.Registry.GetValue(TextBox1.Text,TextBox2.Text,Nothing)IsNothingThenMsgBox("键值不存在")Else"读取注册表的键值MsgBox(My.Computer.Registry.GetValue(TextBox1.Text,TextBox2.Text,Nothing))EndIfEndSub运行结果如图A-22所示。 52VisualBasic2005语言程序设计图A-22程序运行结果5.新建Windows应用程序项目“下载指定的网页”,向窗体Form1添加两个命令按钮,设置属性如表A-17所示。表A-17设置属性控件控件名属性名属性值ButtonButton1Text下载保存LabelLabel1Text输入网址:Label2Text保存路径:TextBoxTextBox1Texthttp://www.baidu.com/TextBox2TextC:baidu.html双击Button1按钮,添加如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click"下载指定页面My.Computer.Network.DownloadFile(TextBox1.Text,TextBox2.Text)EndSub运行结果如图A-23所示。 参考答案53图A-23程序运行结果第10章一、选择题1.C2.A3.C4.D5.C二、填空题1.62.定义一个字体对象testFont并初始化字体对象testFont3.Math4.02555.System.DrawingColorTranslator.FromOle三、思考题1.答:VisualBasic2005的坐标系与数学上所讲的坐标系有所不同,虽然它们都是以横向为横坐标即X轴,以纵向为纵坐标即Y轴,但此刻讲的坐标系中的Y轴的方向则恰恰相反。2.答:在VisualBasic2005里提供了两个常用的作图控件,它们是ImageList和PictureBox。 54VisualBasic2005语言程序设计3.答:在VisualBasic2005里描绘线以及多边形等都是通过DrawString、DrawLine、DrawEllipse、DrawRectangle、DrawCurve等方法来完成。4.答:可以通过使用VisualBasic2005里自带的WindowsMediaPlayer控件来完成多媒体应用程序的开发工作。四、上机操作题1.新建项目FillRectangl,在窗体上添加一个Button控件,代码如下:ImportsSystem.RandomPublicClassForm1PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimGraAsGraphicsGra=Me.CreateGraphicsDimRecAsRectangleRec.X=100Rec.Y=80Rec.Width=60Rec.Height=80DimrandomAsNewRandomDimpenAsNewPen(System.Drawing.ColorTranslator.FromOle(RGB(random.Next(0,255),random.Next(0,255),random.Next(0,255))),5)Gra.DrawRectangle(pen,Rec)Gra.FillRectangle(Brushes.Green,Rec)EndSubEndClass 参考答案55程序运行,结果如图A-24所示。图A-24填充矩形2.新建项目DrawSinLine,在窗体上添加一个Label控件,将窗体背景色设为白色。具体代码如下:ImportsSystem.MathPublicClassForm1"定义一个结构体PublicStructurePtDimXAsDoubleDimYAsDoubleEndStructurePublicFPointAsPtPublicmwidth,mheightAsIntegerPublicGraAsGraphics"定义Graphics对象PublicpenAsNewPen(Color.Black,2)ConstPI=3.1415926"角速度OMEGAConstMaxPointPerTime=75"每次描点数ConstA=5"定义正弦幅度PublicXFatorAsDoublePublicYFatorAsDoubleConstTimeInterval=200"时间因子 56VisualBasic2005语言程序设计"画X坐标轴PublicSubDrawX()Dimptx()AsPoint={NewPoint(mwidth-10,mheight),NewPoint(mwidth-20,mheight-10),NewPoint(mwidth-20,mheight+10)}Gra.DrawLine(pen,NewPoint(mwidth-10,mheight),NewPoint(20,mheight))Gra.DrawPolygon(pen,ptx)Gra.FillPolygon(Brushes.Black,ptx)EndSub"画Y坐标轴PublicSubDrawY()Dimpty()AsPoint={NewPoint(20,0),NewPoint(10,10),NewPoint(30,10)}Gra.DrawLine(pen,NewPoint(20,Me.Height),NewPoint(20,0))Gra.DrawPolygon(pen,pty)Gra.FillPolygon(Brushes.Black,pty)EndSub"画正弦曲线PublicSubDrawSin()DimoffsetAsIntegerDimpx,pyAsSingleForoffset=1ToMaxPointPerTimepx=Convert.ToSingle(FPoint.X)py=Convert.ToSingle(-Sin((FPoint.X*PI-65)/XFator)*A*YFator)+mheightFPoint.X=FPoint.X+1FPoint.Y=-Sin((FPoint.X*PI-65)/XFator)*A*YFator+mheightGra.DrawLine(pen,px,py,Convert.ToSingle(FPoint.X),_Convert.ToSingle(FPoint.Y))NextEndSub"定时器跟踪 参考答案57PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer1.TickCallDrawSin()EndSub"初始窗体PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadGra=Me.CreateGraphicsmwidth=Me.Widthmheight=Me.Height/2-20EndSub"单击窗体事件PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickMe.Label1.Text="""刷新窗体Me.Refresh()Me.Timer1.Interval=TimeIntervalCallDrawX()CallDrawY()XFator=Me.Width/6YFator=Me.Height/15"开始跟踪Me.Timer1.Enabled=TrueFPoint.X=20FPoint.Y=Me.Height/2-20EndSubEndClass程序运行,结果如图A-25所示。 58VisualBasic2005语言程序设计图A-25描绘曲线3.新建项目DrawBall,在窗体上添加一个Label控件,将其Text属性改为“点击我开始”,再添加一个定时器控件,并将窗体背景色设为白色。实现代码如下:PublicClassForm1"定义Graphics对象PublicGraAsGraphics"定义画笔对象PublicPenAsNewPen(Color.Blue,2)"初始描绘圆的横坐标DimOXAsInteger=10"初始描绘圆的纵坐标DimOYAsInteger=10"小球横坐标移动速度DimXSpeedAsInteger=5"小球纵坐标移动速度DimYSpeedAsInteger=2"窗体单击事件PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickMe.Label1.Text="" 参考答案59Gra=Me.CreateGraphicsMe.Timer1.Interval=2000Me.Timer1.Enabled=TrueCallTD()EndSub"描绘小球PublicSubPaintBall()"刷新窗体Me.Refresh()"描绘小球Gra.DrawEllipse(Pen,OX,OY,10,10)Gra.FillEllipse(Brushes.Blue,OX,OY,10,10)EndSub"定时跟踪事件PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer1.TickWhileTrue"如果小球新纵坐标位置到达窗体边缘高度则改变小球横坐标移动速度IfOY<=5OrOY>=Me.Height-40ThenXSpeed=-XSpeedEndIf"如果小球新横坐标位置到达窗体边缘宽度则改变小球纵坐标移动速度IfOX<=5OrOX>=Me.Width-20ThenYSpeed=-YSpeedEndIfOX=OX+YSpeedOY=OY+XSpeed"在新位置描绘小球 60VisualBasic2005语言程序设计CallPaintBall()EndWhileEndSubEndClass该效果也可以使用线程来实现小球的跳动,实现代码如下:ImportsSystem.ThreadingPublicClassForm1"定义Graphics对象PublicGraAsGraphics"定义画笔对象PublicPenAsNewPen(Color.Blue,2)"初始描绘圆的横坐标DimOXAsInteger=10"初始描绘圆的纵坐标DimOYAsInteger=10"小球横坐标移动速度DimXSpeedAsInteger=5"小球纵坐标移动速度DimYSpeedAsInteger=2"窗体单击事件PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickMe.Label1.Text=""Gra=Me.CreateGraphicsMe.Timer1.Interval=2000"Me.Timer1.Enabled=TrueCallTD()EndSub"描绘小球PublicSubPaintBall() 参考答案61"刷新窗体Me.Refresh()"描绘小球Gra.DrawEllipse(Pen,OX,OY,10,10)Gra.FillEllipse(Brushes.Blue,OX,OY,10,10)EndSub"改变小球新的位置并延时PublicSubTD()WhileTrue"如果小球新纵坐标位置到达窗体边缘高度则改变小球横坐标移动速度IfOY<=5OrOY>=Me.Height-40ThenXSpeed=-XSpeedEndIf"如果小球新横坐标位置到达窗体边缘宽度则改变小球纵坐标移动速度IfOX<=5OrOX>=Me.Width-20ThenYSpeed=-YSpeedEndIfOX=OX+YSpeedOY=OY+XSpeedThread.Sleep(60)"在新位置描绘小球CallPaintBall()EndWhileEndSubEndClass程序运行,结果如图A-26所示。 62VisualBasic2005语言程序设计图A-26画小球4.新建项目RotateImg,将窗体背景颜色改为白色,添加一个PictureBox控件和一个Button控件,把Button控件的Text属性改为“旋转”,并添加以下代码:PublicClassForm1PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load"将控件PictureBox的SizeMode属性设为按图片自动调整大小Me.PictureBox1.SizeMode=PictureBoxSizeMode.AutoSize"加载图片Me.PictureBox1.Load(Application.StartupPath()+"1.bmp")EndSub"旋转单击事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click"定义位图 参考答案63DimbmpAsNewBitmap(Me.PictureBox1.Image)"旋转图片bmp.RotateFlip(RotateFlipType.Rotate180FlipNone)"将旋转后的图片放置在控件PitureBoxMe.PictureBox1.Image=bmpEndSubEndClass程序运行,结果如图A-27所示。图A-27图片翻转5.新建项目BaiYeWindow,在窗体上添加一个PictureBox控件、一个定时器控件以及一个Button控件,将Button控件的Text属性改为“百叶窗效果”。实现代码如下:PublicClassForm1DimOriginH,OriginWAsIntegerDimNewBmp1AsBitmapDimNewBmp2AsBitmapDimImgAsBitmapPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load 64VisualBasic2005语言程序设计"设置控件的SizeMode属性为按图片大小自动调整Me.PictureBox1.SizeMode=PictureBoxSizeMode.AutoSize"加载图片Me.PictureBox1.Load(Application.StartupPath()+"1.bmp")"开始定时跟踪Timer1.Enabled=True"保存图片宽度OriginW=Me.PictureBox1.Image.Size.Width"保存图片高度OriginH=Me.PictureBox1.Image.Size.Height"用PictureBox1里的图片初始新位图Img=NewBitmap(Me.PictureBox1.Image,Me.PictureBox1.Image.Size.Width,Me.PictureBox1.Image.Size.Height)EndSub"开始按钮事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click"刷新窗体Me.Refresh()"定义作图对象DimGraAsGraphics=Me.CreateGraphics"定义新颜色DimTestAsColor=NewColor"用PictureBox1里的图片初始新位图NewBmp1=NewBitmap(Img,OriginW, 参考答案65OriginH)"用PictureBox1里的图片的宽度和高度初始新位图NewBmp2=NewBitmap(OriginW,OriginH)Dimi,j,kAsIntegerFori=0To10Forj=iToOriginH-1Step10Fork=0ToOriginW-1"获取NewBmp1指定位置像素的颜色,k、j分别为横、纵坐标Test=NewBmp1.GetPixel(k,j)"在NewBmp2同样的位置绘制同样颜色的一个象素NewBmp2.SetPixel(k,j,Test)NextNext"作图Gra.DrawImage(NewBmp2,255,42)"延时TimeDelay()NextEndSub"延时PrivateSubTimeDelay()DimiAsIntegerFori=0To100000Ifi<100000ThenEndIfNextEndSubEndClass程序运行,结果如图A-28所示。 66VisualBasic2005语言程序设计图A-28百叶窗效果第11章一、选择题1.B2.C3.B4.A5.D二、填空题1.使并发执行的诸线程之间能够很好的相互合作,对所要访问的共同资源能够有效的管理利用,给系统带来稳定2.System.Thread3.使用轮询使用同步对象4.进程中的一个实体,被系统独立调度和分派三、思考题1.答:在操作系统里,进程实体是由程序段、数据段以及PCB(程序控制块)三部分构成的。每一个进程或应用程序都拥有一个独立且惟一的PCB,在它里面记录了应用程序在操作系统里的所有信息,这是为了方便操作系统对该进程的管理。 参考答案672.答:由于在进程数不断增多的同时,在很大的程度上降低了操作系统的性能,而线程就不会引发这个问题。通常在一个进程中包括了多个线程,而每个线程都是一个利用CPU的基本单位,是一个花费最小开销的实体。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。这样,就算在进程数很多的时候,对线程的切换操作系统也能很迅速的作出反应,而且,在同一个进程中,那些线程都具有相同的地址空间(就是进程的地址空间),这就让那些线程可以与同属一个进程的其他线程共享访问进程已经拥有的资源。3.答:在VisualBasic2005中,通过使用方法Sleep来将一个线程置入睡眠状态;使用方法Interrupt将一个处于睡眠状态的线程唤醒;通过Suspend方法将一个线程挂起;Resume方法能将一个处于挂起状态的线程恢复继续运行;Abort方法可以将一个线程停止退出;通过属性Priority可以设置一个线程的执行优先级。4.答:发生死锁的原因有很多,大都是因为在同一时刻有很多应用程序去争夺访问同一个资源而导致的。另外一个原因就是线程对资源的访问并没有按照资源的占有与释放的顺序来推进。避免死锁的方法:让线程之间具有排斥性的访问资源,即使得在同一时刻一个资 68VisualBasic2005语言程序设计源只能被一个线程占有与使用,如果其他线程需求访问使用该资源,则必须等待,直到该资源被释放为止,后续线程亦将它们放置到等待队列中去。除此之外,如果当一个线程在某一时刻已经拥有了某个资源,但它还继续申请另一个新的资源,但那个新的资源已经被其他线程占有,那么我们就应该让它将它已占有的资源进行释放,而并不是让它一直的等待下去。还有一种情况就是当一个线程已获得某个资源的时候,在它没有使用完这个资源之前是不能被其他线程进行争夺访问,只能在自己使用完之后对其释放之后其他线程才能对其进行争夺访问。避免线程之间循环等待同一个资源,而该却又被其中的某一个线程占有。四、上机操作题1.新建一个控制台应用程序GetInformation,添加以下代码:ImportsSystem.ThreadingModuleModule1"定义一个线程对象PrivatetestAsThreadSubMain()"初始化线程对象testtest=NewThread(AddressOfgetinfo)"设置对象test的名字 参考答案69test.Name="testThread""启动线程testtest.Start()Console.ReadLine()EndSub"输出线程test的有关信息Subgetinfo()Console.WriteLine("****testThreadInformation****")"输出线程名字Console.WriteLine("Name:"&test.Name)"输出线程状态Console.WriteLine("State:"&test.ThreadState.ToString())"输出线程优先级Console.WriteLine("Priority:"&test.Priority.ToString())"输出当前运行线程Console.WriteLine("CurrentThread:"&Thread.CurrentThread.ToString())EndSubEndModule程序运行,结果如图A-29所示。 70VisualBasic2005语言程序设计图A-29获取线程相关信息2.新建一个名为SleepOut的控制台应用程序,并添加以下代码:ImportsSystem.ThreadingModuleModule1"定义一个线程对象testPrivatetestAsThreadSubMain()"初始化对象testtest=NewThread(AddressOfout)"启动线程testtest.Start()Console.ReadLine()EndSubSubout()DimiAsIntegeri=0Console.WriteLine("i的初值为:"&i)Fori=1To10"线程睡眠2秒Thread.Sleep(2000)"输出i的值Console.WriteLine("2秒后i的值为:"&i)NextEndSubEndModule程序运行,结果如图A-30所示。 参考答案71图A-30线程睡眠3.新建一个控制名应用程序JoinThread,并添加以下代码:ImportsSystem.ThreadingModuleModule1"定义两个线程对象Privatetest1AsThreadPrivatetest2AsThreadSubMain()"初始化两个对象test1=NewThread(AddressOftask1)test2=NewThread(AddressOftask2)"启动线程test1test1.Start()"等待线程test1的结束test1.Join()"启动线程test2test2.Start()Console.ReadLine()EndSubSubtask1()"计算-10的平方 72VisualBasic2005语言程序设计Console.WriteLine("****平方计算****")Dimi,jAsIntegerFori=0To10j=i*iConsole.WriteLine(i&"的平方是:"&j)NextEndSubSubtask2()"计算-10的阶乘Console.WriteLine("****阶乘计算****")DimtestAsIntegerFortest=0To10Console.WriteLine(test&"的阶乘是:"&task(test))NextEndSub"计算阶乘函数Functiontask(ByValnAsInteger)AsIntegerDimresultAsIntegerIfn=0Orn=1Thenresult=1Elseresult=n*task(n-1)EndIfReturnresultEndFunctionEndModule程序运行,结果如图A-31所示。 参考答案73图A-31线程停止4.新建一个名为CountSquare的项目。在其窗体中添加一个Button控件,将其Text属性改为“平方计算”。在窗体中添加以下代码:ImportsSystem.ThreadingPublicClassForm1"定义一个共享变量PublicSharedcalfsAsInteger"定义一个类CalFatorialPublicClassCSquare"定义一个整数来存放计算结果PublicresultAsInteger"定义一个整数传递计算参数PublicvalueAsInteger"定义一个事件PublicEventThreadHasCompleted(ByValCalFatoAsInteger)PublicSubc()calfs=Me.CalFactorial(value) 74VisualBasic2005语言程序设计"触发事件RaiseEventThreadHasCompleted(result)EndSub"求一个数的平方函数FunctionCalFactorial(ByValvalueAsInteger)AsIntegerresult=value*valueReturnresultEndFunctionEndClassDimWithEventsCalAsCSquare"对事件ThreadHasCompleted的处理SubCalEventHandler(ByValnAsInteger)HandlesCal.ThreadHasCompletedMessageBox.Show("5的平方是:"+calfs.ToString())EndSub"计算按钮事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickCal=NewCSquare()DimtestThreadAsThreadtestThread=NewThread(AddressOfCal.c)Cal.value=5testThread.Start()EndSubEndClass程序运行,结果如图A-32所示。 参考答案75图A-32线程传递数据5.新建控制台应用程序PriorityThread,并添加以下代码:ImportsSystem.ThreadingModuleModule1"定义两个线程对象Privatetest1AsThreadPrivatetest2AsThreadSubMain()"初始化两个对象test1=NewThread(AddressOftask1)test2=NewThread(AddressOftask2)"将对象test2的优先级设为最高test2.Priority=ThreadPriority.Highest"将对象test1的优先级设为最低test1.Priority=ThreadPriority.Lowest"启动线程test1test1.Start()"启动线程test2test2.Start()Console.ReadLine()EndSubSubtask1()"计算-10的平方 76VisualBasic2005语言程序设计Console.WriteLine("****平方计算****")Dimi,jAsIntegerFori=0To10j=i*iConsole.WriteLine(i&"的平方是:"&j)NextEndSubSubtask2()"计算-10的阶乘Console.WriteLine("****阶乘计算****")DimtestAsIntegerFortest=0To10Console.WriteLine(test&"的阶乘是:"&task(test))NextEndSub"计算阶乘函数Functiontask(ByValnAsInteger)AsIntegerDimresultAsIntegerIfn=0Orn=1Thenresult=1Elseresult=n*task(n-1)EndIfReturnresultEndFunctionEndModule程序运行,结果如图A-32所示。 参考答案77图A-33线程优先级第12章一、选择题1.C2.BAC3.D4.B5.B二、填空题1.应用程序异常非应用程序异常2.try3.catch4.finally5.跟踪调试运行三、思考题1.答:异常通常分为两种类型,它们是:应用程序异常和非应用程序异常。所谓应用程序异常,是指在用户在开发应用程序时,由于自身 78VisualBasic2005语言程序设计程序代码的出错而导致了不该出现的意外情况的出现。而非应用程序异常并不是因为应用程序的错误而导致的异常,而是由于一些其他方面的原因发生的异常,如环境的配置等。2.答:在VisualBasic2005中就是通过throw、try、catch这三个关键字来对异常进行捕捉的。如果在开发程序时,对可以预知发生的异常或不可预知发生的异常都需要将它们放到try语句块里,而对异常的处理则放在throw语句块里,而且关键字try与关键字catch是结合起来用的,缺一不可。捕捉异常及处理异常的一般格式为:Try//try语句块,即可能发生异常的语句块Catch参数声明1//异常处理程序1Catch参数声明2//异常处理程序2Catch参数声明3//异常处理程序3……Catch参数声明n//异常处理程序nFinally//程序代码 参考答案79Endtry3.答:所谓的异常处理是只能处理执行代码时出现的同步错误,对于那些由于计算机硬件或环境配置等引起的错误并不能处理,只能手动对其进行处理。4.答:为了能够让程序正确流畅的运行,常用的技术是对所开发的应用程序进行跟踪调试运行,找到出错所在的地方并进行修改直到程序能够正确流畅的运行为止。5.答:这时应该采取对应用程序的运行进行跟踪。设好断点后(对于断点的设置,读者可以根据需要来设置,如在自己想要开始跟踪的地方设置断点),运行该程序,当程序运行到断点语句处时程序就会暂停下来,等待运行调试命令,这些命令有“逐语句”、“逐过程”及“跳出”等。为了看到程序的每步的运行,应釆用“逐语句”命令来跟踪程序的运行。同时打开调试窗口,并在“名称”栏里输入要被监视的变量的名称。然后继续“逐语句”执行程序来查看所监视的变量的值的变化,这样我们就可以找到出现错误的具体地方,并对其进行相应的处理了。四、上机操作题1.新建控制台项目,源代码如下:ModuleModule1SubMain() 80VisualBasic2005语言程序设计DimfirstAsInteger=0DimsecondAsInteger=0DimthreeAsInteger=0Tryfirst=secondthreeCatchexcAsExceptionConsole.WriteLine("Arun-timeerroroccurred!")FinallyConsole.ReadLine()EndTryEndSubEndModule运行程序,结果如图A-34所示。图A-34程序运行结果2.新建控制台项目,并添加以下代码:ModuleModule1SubMain()DimiAsInteger=102400DimjAsInteger=102400DimkAsIntegerTryk=i*jCatchexAsExceptionSystem.Console.Write(ex.ToString())EndTrySystem.Console.Read()EndSubEndModule运行程序,结果如图A-35所示。 参考答案81图A-35程序运行结果3.新建控制台项目,并添加以下代码:ModuleModule1SubMain()DimfirstAsInteger=2147483647DimsecondAsInteger=0DimthreeAsInteger=0Tryfirst+=1CatchexcAsDivideByZeroExceptionConsole.WriteLine("Error:Dividebyzero")CatchexcAsOverflowExceptionConsole.WriteLine("Error:Overflow")CatchexcAsExceptionConsole.WriteLine("Error:"&exc.Message)FinallyConsole.ReadLine()EndTryEndSubEndModule运行程序,结果如图A-36所示。图A-36程序运行结果4.新建控制台项目,并添加以下代码:ModuleModule1SubMain() 82VisualBasic2005语言程序设计DimtestAsNewPerson()Trytest.Age=-1CatchexcAsExceptionConsole.WriteLine(exc.Message)FinallyConsole.ReadLine()EndTryEndSubEndModulePublicClassPersonPrivatemAgeAsIntegerPublicPropertyAge()AsIntegerGetAge=mAgeEndGetSet(ByValValueAsInteger)IfValue>=0ThenmAge=ValueElseThrowNewApplicationException("年龄不能为负数!")EndIfEndSetEndPropertyEndClass运行程序,结果如图A-37所示。图A-37程序运行结果 参考答案835.新建控制台项目,并添加以下代码:ModuleModule1SubMain()DimopenFileAsObjectTryConsole.WriteLine("请输入文件路径:")openFile=Console.ReadLine()FileOpen(1,openFile,OpenMode.Input)Console.WriteLine("打开文件成功!")CatchexAsExceptionConsole.WriteLine("打开文件失败!请确认文件是否存在!")ExitSubFinallyFileClose(1)EndTryEndSubEndModule运行程序,结果如图A-38所示。图A-38程序运行结果'

您可能关注的文档