VisualBasic课程设计报告所属课程名称:VisualBasic程序设计课程设计题号:题目9课程设计题目:列车时刻查询课程设计难度:★★课程设计时间:2014.2.23~4.9学号:913101140321姓名:林鑫自评成绩:90分0南京理工大学机械工程学院二〇一四年三月1一、程序功能涉及知识点:(1)读文本文件;(2)动态数组(3)字符串处理(4)列表框控件的使用(4)多行文本框控件的使用功能要求:(1)程序启动后,左边的列表框显示所有的车次,点击其中一项,显示相应的详细信息。(2)在“经停车站”组合框中选择或输入一个站名然后回车,列表框中只列出经过该车站的车次。单击列表框下方的“显示全部车次”按钮,列表框中重新列出所有车次。(3)文本框(或右边的列表框)中详细信息整齐排列。二、课程设计的详细设计1、总体设计思路先将信息读入到两个动态数组中,再根据相关的事件调用数组。2、界面设计界面有frame,list,combol,text,command,label.3、功能模块设计三、设计中遇到的问题与解决办法【问题1】:在读取文件的过程中,我选择的是正行的读取,如何将正行读取的内容分开,并且显示一部分的内容,程序中很多地方都需要用到靠特定的分隔符,把字符串拆开。【解决办法】:在课本上提供了可以分解字符串的通用过程,我将它运用到自己的程序中。【问题2】:显示车次详细信息的时候,如何让时间,站点都需要对齐。【解决办法】:依靠len()函数及space()函数,对中间的空格进行确定,其中的中文字符相当于两个空格字符。【问题3】:在程序中要多次调用文本文件中的内容,如何不需要多次读写文件。【解决办法】:依靠动态数组在窗体第一次加载的时候就把相关的信息度入动态数组中。其中要多次redim数组,而且需要preserve。四、更上一层楼在改进版中点击右边列表框中的站点在左侧的列表框即可显示经过该站点的车次。五、课程设计总结(1)整体的功能还是实现了,运行应该是没有问题的。(2)在做这次课程设计的过程中,我深刻领悟到实践的重要性,看似困难的课程设计,一下一下来,问题一个一个解决,最后回首会觉得自己懂得了好多好多。(3)我也知道了,不能光靠自己的课本,要借助网络快速的查找自己所需要的知识点。六、源程序代码OptionexplicitPublicnAsInteger,ashuAsInteger,cshuAsIntegerPrivatea()AsString,c()AsStringPublicFunctiondividestring(sAsString,dAsString,a()AsString)AsInteger2DimiAsInteger,jAsInteger,numAsInteger'分解字符串的函数过程i=InStr(s,d)j=1DoWhilei1num=num+1ReDimPreservea(num)a(num)=Mid(s,j,i-j)j=i+1i=InStr(j,s,d)Loopnum=num+1ReDimPreservea(num)a(num)=Mid(s,j,Len(s)-j+1)dividestring=numEndFunction'单击复选框,左下方出现相应车次PrivateSubCombo1_click()DimiAsInteger,jAsInteger,eAsInteger,zf()AsStringTextout.Text=List1.ClearForj=1Tocshui=dividestring(c(j),,,zf())Ifzf(1)=Combo1.TextThene=jDoWhilec(e)*e=e-1LoopList1.AddItemc(e+1)&次Erasezf()EndIfNextjEndSub'单击按钮,显示全部车次PrivateSubCommand1_Click()DimiAsInteger,zf()AsString,lAsIntegerList1.ClearFori=1Toashul=dividestring(a(i),,,zf())List1.AddItemzf(1)&次NextiEndSub'可以搜索所有的途径车站PrivateSubCommand2_Click()DimaAsStringTextstart.Text=Textget.Text=3Texttime.Text=Textgettime.Text=a=InputBox(请输入要搜索的城市,搜索,温州)Ifa=ThenExitSubDimiAsInteger,jAsInteger,eAsInteger,zf()AsStringTextout.Text=List1.ClearForj=1Tocshui=dividestring(c(j),,,zf())Ifzf(1)=aThene=jDoWhilec(e)*e=e-1LoopList1.AddItemc(e+1)&次Erasezf()EndIfNextjIfe=0ThenCallMsgBox(没有相关城市内容,16,提示)EndIfEndSubPrivateSubForm_Load()'将两个文件内容都储存在a(),c()两数组中DimiAsInteger,b()AsString,lAsInteger,jAsIntegerOpenApp.Path&\content.txtForInputAs#1OpenApp.Path&\detail.txtForInputAs#2Doj=j+1ReDimPreservec(j)LineInput#2,c(j)IfEOF(2)=TrueThencshu=jExitDoEndIfLoopDoi=i+1ReDimPreservea(i)LineInput#1,a(i)IfEOF(1)=TrueThenashu=iExitDoEndIfLoop4ReDimPreservea(i+1)a(i+1)=Fori=1Toashul=dividestring(a(i),,,b())List1.AddItemb(1)&次NextiCloseEndSubPrivateSubList1_Click()DimiAsInteger,q()AsString,lAsInteger,jAsIntegerDimeAsInteger,wAsIntegerDimrAsInteger,tAsString,d()AsString,YAsString,uAsStringEraseq()'显示起始站终点站以及时刻Fori=1Toashul=dividestring(a(i),,,q())Ifq(1)&次=List1.TextThenTextstart.Text=q(2)Textget.Text=q(3)Texttime.Text=q(4)Textgettime.Text=q(5)EndIfNext'在右下方显示详细信息Forj=1TocshuIfc(j)&次=List1.List(List1.ListIndex)Thene=jw=jDoWhilec(e)*e=e-1LoopDoWhilec(w)*w=w+1Ifc(w)=ThenExitDoLoopTextout.Text=Forr=e+2Tow-1l=dividestring(c(r),,,d())Y=d(1)&Space((8-Len(d(1)))*2)u=Space((9-Len(d(2))))&d(2)t=Space((19-Len(d(3))))&d(3)IfTextout.Text=ThenTextout.Text=Textout.Text&Y&u&tElse5Textout.Text=Textout.Text&Chr(13)&Chr(10)&Y&u&tEndIfNextEndIfNextEndSub678910