列车时刻表查询vb代码及课程设计报告.docx
《列车时刻表查询vb代码及课程设计报告.docx》由会员分享,可在线阅读,更多相关《列车时刻表查询vb代码及课程设计报告.docx(9页珍藏版)》请在冰豆网上搜索。
![列车时刻表查询vb代码及课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-7/10/ae361bbd-e025-46f7-8e80-3cffc313f9b1/ae361bbd-e025-46f7-8e80-3cffc313f9b11.gif)
列车时刻表查询vb代码及课程设计报告
VisualBasic
课程设计报告
所属课程名称:
VisualBasic程序设计
课程设计题号:
题目9
课程设计题目:
列车时刻查询
课程设计难度:
★★
课程设计时间:
2014.2.23~4.9
学号:
1
*****
自评成绩:
90分
0
南京理工大学机械工程学院
二〇一四年三月
一、程序功能
涉及知识点:
(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)我也知道了,不能光靠自己的课本,要借助网络快速的查找自己所需要的知识点。
六、源程序代码
Optionexplicit
PublicnAsInteger,ashuAsInteger,cshuAsInteger
Privatea()AsString,c()AsString
PublicFunctiondividestring(sAsString,dAsString,a()AsString)AsInteger
DimiAsInteger,jAsInteger,numAsInteger
'分解字符串的函数过程
i=InStr(s,d)
j=1
DoWhilei>1
num=num+1
ReDimPreservea(num)
a(num)=Mid(s,j,i-j)
j=i+1
i=InStr(j,s,d)
Loop
num=num+1
ReDimPreservea(num)
a(num)=Mid(s,j,Len(s)-j+1)
dividestring=num
EndFunction
'单击复选框,左下方出现相应车次
PrivateSubCombo1_click()
DimiAsInteger,jAsInteger,eAsInteger,zf()AsString
Textout.Text=""
List1.Clear
Forj=1Tocshu
i=dividestring(c(j),",",zf())
Ifzf
(1)=Combo1.TextThen
e=j
DoWhilec(e)<>"*"
e=e-1
Loop
List1.AddItemc(e+1)&"次"
Erasezf()
EndIf
Nextj
EndSub
'单击按钮,显示全部车次
PrivateSubCommand1_Click()
DimiAsInteger,zf()AsString,lAsInteger
List1.Clear
Fori=1Toashu
l=dividestring(a(i),",",zf())
List1.AddItemzf
(1)&"次"
Nexti
EndSub
'可以搜索所有的途径车站
PrivateSubCommand2_Click()
DimaAsString
Textstart.Text=""
Textget.Text=""
Texttime.Text=""
Textgettime.Text=""
a=InputBox("请输入要搜索的城市","搜索","温州")
Ifa=""ThenExitSub
DimiAsInteger,jAsInteger,eAsInteger,zf()AsString
Textout.Text=""
List1.Clear
Forj=1Tocshu
i=dividestring(c(j),",",zf())
Ifzf
(1)=aThen
e=j
DoWhilec(e)<>"*"
e=e-1
Loop
List1.AddItemc(e+1)&"次"
Erasezf()
EndIf
Nextj
Ife=0Then
CallMsgBox("没有相关城市内容",16,"提示")
EndIf
EndSub
PrivateSubForm_Load()
'将两个文件内容都储存在a(),c()两数组中
DimiAsInteger,b()AsString,lAsInteger,jAsInteger
OpenApp.Path&"\content.txt"ForInputAs#1
OpenApp.Path&"\detail.txt"ForInputAs#2
Do
j=j+1
ReDimPreservec(j)
LineInput#2,c(j)
IfEOF
(2)=TrueThen
cshu=j
ExitDo
EndIf
Loop
Do
i=i+1
ReDimPreservea(i)
LineInput#1,a(i)
IfEOF
(1)=TrueThen
ashu=i
ExitDo
EndIf
Loop
ReDimPreservea(i+1)
a(i+1)=""
Fori=1Toashu
l=dividestring(a(i),",",b())
List1.AddItemb
(1)&"次"
Nexti
Close
EndSub
PrivateSubList1_Click()
DimiAsInteger,q()AsString,lAsInteger,jAsInteger
DimeAsInteger,wAsInteger
DimrAsInteger,tAsString,d()AsString,YAsString,uAsString
Eraseq()
'显示起始站终点站以及时刻
Fori=1Toashu
l=dividestring(a(i),",",q())
Ifq
(1)&"次"=List1.TextThen
Textstart.Text=q
(2)
Textget.Text=q(3)
Texttime.Text=q(4)
Textgettime.Text=q(5)
EndIf
Next
'在右下方显示详细信息
Forj=1Tocshu
Ifc(j)&"次"=List1.List(List1.ListIndex)Then
e=j
w=j
DoWhilec(e)<>"*"
e=e-1
Loop
DoWhilec(w)<>"*"
w=w+1
Ifc(w)=""ThenExitDo
Loop
Textout.Text=""
Forr=e+2Tow-1
l=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=""Then
Textout.Text=Textout.Text&Y&u&t
Else
Textout.Text=Textout.Text&Chr(13)&Chr(10)&Y&u&t
EndIf
Next
EndIf
Next
EndSub