Visual Basic
课 程 设 计 报 告
所属课程名称:Visual Basic程序设计
课程设计题号:题目9
课程设计题目:列车时刻查询
课程设计难度:★★
课程设计时间:2014.2.23 ~ 4.9
学 号:9
姓 名:林鑫
自评成绩: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。
四、 更上一层楼
在改进版中点击右边列表框中的站点在左侧的列表框即可显示经过该站点的车次。
五、 课程设计
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
(1) 整体的功能还是实现了,运行应该是没有问题的。
(2) 在做这次课程设计的过程中,我深刻领悟到实践的重要性,看似困难的课程设计,一下一下来,问题一个一个解决,最后回首会觉得自己懂得了好多好多。
(3) 我也知道了,不能光靠自己的课本,要借助网络快速的查找自己所需要的知识点。
六、 源程序代码
Option explicit
Public n As Integer, ashu As Integer, cshu As Integer
Private a() As String, c() As String
Public Function dividestring(s As String, d As String, a() As String) As Integer
Dim i As Integer, j As Integer, num As Integer
' 分解字符串的函数过程
i = InStr(s, d)
j = 1
Do While i > 1
num = num + 1
ReDim Preserve a(num)
a(num) = Mid(s, j, i - j)
j = i + 1
i = InStr(j, s, d)
Loop
num = num + 1
ReDim Preserve a(num)
a(num) = Mid(s, j, Len(s) - j + 1)
dividestring = num
End Function
'单击复选框,左下方出现相应车次
Private Sub Combo1_click()
Dim i As Integer, j As Integer, e As Integer, zf() As String
Textout.Text = ""
List1.Clear
For j = 1 To cshu
i = dividestring(c(j), ",", zf())
If zf(1) = Combo1.Text Then
e = j
Do While c(e) <> "*"
e = e - 1
Loop
List1.AddItem c(e + 1) & "次"
Erase zf()
End If
Next j
End Sub
'单击按钮,显示全部车次
Private Sub Command1_Click()
Dim i As Integer, zf() As String, l As Integer
List1.Clear
For i = 1 To ashu
l = dividestring(a(i), ",", zf())
List1.AddItem zf(1) & "次"
Next i
End Sub
'可以搜索所有的途径车站
Private Sub Command2_Click()
Dim a As String
Textstart.Text = ""
Textget.Text = ""
Texttime.Text = ""
Textgettime.Text = ""
a = InputBox("请输入要搜索的城市", "搜索", "温州")
If a = "" Then Exit Sub
Dim i As Integer, j As Integer, e As Integer, zf() As String
Textout.Text = ""
List1.Clear
For j = 1 To cshu
i = dividestring(c(j), ",", zf())
If zf(1) = a Then
e = j
Do While c(e) <> "*"
e = e - 1
Loop
List1.AddItem c(e + 1) & "次"
Erase zf()
End If
Next j
If e = 0 Then
Call MsgBox("没有相关城市内容", 16, "提示")
End If
End Sub
Private Sub Form_Load()
'将两个文件内容都储存在a(),c() 两数组中
Dim i As Integer, b() As String, l As Integer, j As Integer
Open App.Path & "\content.txt" For Input As #1
Open App.Path & "\detail.txt" For Input As #2
Do
j = j + 1
ReDim Preserve c(j)
Line Input #2, c(j)
If EOF(2) = True Then
cshu = j
Exit Do
End If
Loop
Do
i = i + 1
ReDim Preserve a(i)
Line Input #1, a(i)
If EOF(1) = True Then
ashu = i
Exit Do
End If
Loop
ReDim Preserve a(i + 1)
a(i + 1) = " "
For i = 1 To ashu
l = dividestring(a(i), ",", b())
List1.AddItem b(1) & "次"
Next i
Close
End Sub
Private Sub List1_Click()
Dim i As Integer, q() As String, l As Integer, j As Integer
Dim e As Integer, w As Integer
Dim r As Integer, t As String, d() As String, Y As String, u As String
Erase q()
'显示起始站终点站以及时刻
For i = 1 To ashu
l = dividestring(a(i), ",", q())
If q(1) & "次" = List1.Text Then
Textstart.Text = q(2)
Textget.Text = q(3)
Texttime.Text = q(4)
Textgettime.Text = q(5)
End If
Next
'在右下方显示详细信息
For j = 1 To cshu
If c(j) & "次" = List1.List(List1.ListIndex) Then
e = j
w = j
Do While c(e) <> "*"
e = e - 1
Loop
Do While c(w) <> "*"
w = w + 1
If c(w) = " " Then Exit Do
Loop
Textout.Text = ""
For r = e + 2 To w - 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)
If Textout.Text = "" Then