VB程序设计报告姓名:阮玮娜学号:020******* 设计题:3.诗词欣赏电子书(一)程序简介窗体出现后单击打开命令按钮时出现打开对话框,在目录文件中选择作者并按“确定”键。
目录列表框中会出现诗词目录,从列表框中选择要欣赏的诗词则两个文本框中会出现相应的内容和注释与题解。
当单击向上(或向下)按钮时列表框中条目会上移(或下移)一个条目,同时两个文本框也会进行相应的变化。
在此程序中我所新增功能是:当诗词条目处在第一个(或最后一个)时,单击向上(或向下)按钮时列表框中条目会自动循环到最后一个(或第一个)条目,同时两个文本框也会进行相应的变化。
(二)程序用到的主要控件:窗体(form),文本框(textbox),标签(label)、框架(frame)、列表框(listbox)、命令按钮(commandbutton)(三)程序用到的主要控件,属性,过程:1.列表框的应用:用以显示打开的诗词名,其中style属性设为02.文本框的应用:用以显示与“*.cnt”相对应的“*.txt”文件,其中multiline属性设为true, scrollbars属性设为2(四)程序的调试和要困难的解决方法:在程序的编译及调试过程中遇到的最大困难既是如何利用源文件中的*号进行诗词的标示及读写。
由于三个诗词文件中并非都是以单个*为一行,不同的样式其判断语句也有相应的变化。
最终的编成语句如程序代码所示。
另一个问题是单击右移命令按钮时所激发的Click事件中若直接使用List1.ListIndex属性值进行条目相加时运行出错,解决方法是定义一个整型过程级变量int1作为中间量先将List1.ListIndex属性值赋给int1,在对int1进行加减判断后再将int1值赋给List1.ListIndex从而又一次激发列表框的Click事件(五)经验心得:在进行课程设计时首先要对各个控件的常用属性有初步了解及一些属性值的应用条件。
其次在编写程序代码时应细心书写,每一个语句的微小错误都有可能使程序无法正常运行而出错。
在进行VB程序设计的前期,我因为对某些控件的各个属性不很熟悉,只能每每参照教科书,但通过书以及同学老师的帮助,像诗词欣赏电子书这样比较简单的程序设计,使我从中受益非浅,开阔了程序设计的思路,完备了VB的知识体系,并培养了自己不断探索的劲头,而且渐渐对VB产生了兴趣。
(六)附件本题所有的程序代码及注释如下:Public strName As String '公共变量strName用于记录文件路径Private Sub CmdUpM_Click()If List1.Text = "" Then Exit Sub '若List1.Text为空字符则退出Text1.Text = "" '将两文本框设为空字符Text2.Text = ""List1.ListIndex = List1.ListIndex - 1 '选种条目号减一If List1.ListIndex < 0 Then List1.ListIndex = List1.ListCount - 1'条目处于第一个时循坏到最后一个End SubPrivate Sub CmdDownM_Click()Dim int1 As Integer '中间变量Text1.Text = "" '将两文本框设为空字符Text2.Text = ""If List1.Text = "" Then Exit Sub '若List1.Text为空字符则退出int1 = List1.ListIndex '赋值int1 = int1 + 1 '变量加一If int1 > List1.ListCount - 1 Then int1 = 0'条目处于最后一个时循坏到第一个List1.ListIndex = int1 '再赋值给List1.ListIndex激发List1_Click事件End SubPrivate Sub CmdOpen_Click()Dim strL As String '用于读取目录CommonDialog1.Filter = "目录文件(*.cnt)|*.cnt" '设定文件类型CommonDialog1.ShowOpen '显示对话框If CommonDialog1.FileName = "" Then Exit Sub '若按取消键则退出List1.Clear '列表框清空Text1.Text = "" '将两文本框设为空字符Text2.Text = ""Form1.Caption=Mid(CommonDialog1.FileName,1,Len(CommonDialog1.FileName) - 4)'使用Mid()函数改变窗体名称strName = Mid(CommonDialog1.FileName, 1, Len(CommonDialog1.FileName) - 3) + "txt" '使用Mid()函数将cnt文件改变为txt文件并作为字符串赋给strNameOpen CommonDialog1.FileName For Input As #1 '打开目录文件Do While Not EOF(1) '读写条目Line Input #1, strLList1.AddItem strLLoopClose #1 '关闭文件 1List1.ListIndex = 0 '开始时选中条目一激发Click事件End SubPrivate Sub List1_Click()Dim bln1 As Boolean '由于判断两种 *无注释* 语句Dim str1 As String '用于读文件Dim str2 As String '用于读"*【注释】"语句时将【注释】读出而不带*Dim i As Integer '用于记录*号数Text1.Text = "" '将两文本框设为空字符Text2.Text = ""Open strName For Input As #2 '读文本文件Do While Not EOF(2) '读写内容及注释Line Input #2, str1'下面 If 语句用于记录*号数If str1 = "*" Then ' * 单独一行i = i + 1ElseIf str1 = "*【注释】" Then '*【注释】样式i = i + 1ElseIf str1 = "*(无注释)*" Or str1 = "*(无注释) *" Then '*(无注释)* 样式 bln1 = Truei = i + 2End If'下面If 语句用来写文件If i = List1.ListIndex * 2 + 1 Then '每一诗词开始前的 * 号数If str1 = "*" Or str1 = "*(无注释) *" Or str1 = "*(无注释)*" ThenText1.Text = "" '开始读诗时将Text1.Text清空ElseText1.Text = Text1.Text + str1 + Chr(13) + Chr(10)'向Text1中增加诗词内容每加一句使用Chr()函数换行 End IfElseIf i = List1.ListIndex * 2 + 2 And str1 = "*【注释】" Then ' *【注释】样式 str2 = Mid(str1, 2, Len(str1) - 1) '将【注释】读出而不带*Text2.Text = Text2.Text + str2 + Chr(13) + Chr(10)'向Text2中增加文本内容 "【注释】"ElseIf i = List1.ListIndex * 2 + 2 And str1 <> "*【注释】" Then ' *【注释】样式 Text2.Text = Text2.Text + str1 + Chr(13) + Chr(10)'向Text2中增加 *【注释】行之后的语句ElseIf bln1 Then '开始对两种 *无注释* 语句进行判断If i = List1.ListIndex * 2 + 3 And str1 = "*(无注释)*" Then ' *(无注释)* 样式 Text2.Text = Mid(str1, 2, Len(str1) - 2)ElseIf i = List1.ListIndex * 2 + 3 And str1 = "*(无注释) *" Then ' *(无注释)* 样式Text2.Text = Mid(str1, 2, Len(str1) - 2)End IfEnd IfLoopClose #2 '关闭文件 2End Sub。