Visual Basic课程设计报告
题目1: 列车时刻查询系统 难度: **
题目2: 记忆力测试软件 难度: **
指导教师: 袁红兵
姓 名:郑聪
学 号:9151010F0535
专 业:兵器类
班 级:9151010F05
学 院:机械工程学院
日 期:2016年4月
一、 程序功能
二、 课程设计的详细设计
三、 课程设计总结
四、 遇到的问题及解决方法
五、 源程序代码
六、 总结及个人心得体会
七、 参考文献
涉及知识点:(1)读文本文件;(2)动态数组(3)字符串处理(4)列表框控件的使用(4)多行文本框控件的使用
功能要求:
(1) 程序启动后,左边的列表框显示所有的车次,点击其中一项,显示相应的详细信息。
(2) 在“经停车站”组合框中选择或输入一个站名然后回车,列表框中只列出经过该车站的车次。单击列表框下方的“显示全部车次”按钮,列表框中重新列出所有车次。
(3) 文本框(或右边的列表框)中详细信息整齐排列。
先将信息读入到两个动态数组中,再根据相关的事件调用数组。
界面有frame,list,combol,text,command,label.
(1) 整体的功能还是实现了,运行应该是没有问题的。
(2) 在做这次课程设计的过程中,我深刻领悟到实践的重要性,看似困难的课程设计,一步一步来,问题一个一个解决,最后回首会觉得自己懂得了好多好多。
(3) 我也知道了,不能光靠自己的课本,要借助网络快速的查找自己所需要的知识点。
遇到的问题及解决方法
我在设计这个程序时主要遇到两个问题。
第一个大的问题就是怎样才能实现查询经过站点和显示车次途径车站和,经过查阅书籍之后,通过以下代码就可以实现了:
Private Sub Com1_Click() '查询经过站点
Dim n As Integer
List1.Clear: List2.Clear '清除界面
For i = 0 To k
If str(i) = Cob1.Text Then
For j = 0 To num - 1
If i < int1(j + 1) And i > int1(j) Then '判断经过站的车次区间
List1.List(n) = str1(j)
n = n + 1
End If
Next j
End If
Next i
End Sub
Private Sub Form_Activate()
Text1.SetFocus '起点站获得焦点
End Sub
Private Sub List1_Click() '显示车次途径车站和时刻
Dim m As Integer, b As String, n As Integer, p As Integer
b = List1.Text: j = 0
List2.Clear
For i = 0 To num - 1
If b = str1(i) Then
Text1.Text = str2(i): Text2.Text = str3(i) '将起点站,终点站,发车时刻,到达时刻添入文本框中
Text3.Text = str4(i): Text4.Text = str5(i)
End If
End Sub
我所遇到的二个问题就是怎样才能让各项对齐,在网络上找到了一段非常重要的代码“List2.List(j) = str(m) + Space(p) + RTrim(Format(str(m + 1), "")) + RTrim(Format(str(m + 2), ""))”,和一些提示,以下代码得以实现:
If List1.ListIndex = List1.ListCount - 1 Then n = k Else n = int1(i + 1)
For m = int1(i) + 2 To n - 3 Step 3
Select Case Len(str(m)) '判断站名长度以便list2中各项对齐
Case Is = 2: p = 5
Case Is = 3: p = 3
Case Is = 4: p = 1
End Select
List2.List(j) = str(m) + Space(p) + RTrim(Format(str(m + 1), ")) + RTrim(Format(str(m + 2), ""))
'对齐各项
j = j + 1
Next m
End If
Next i
End Sub
列车时刻查询界面设计:
一、 系统登陆界面设计
二、查询界面设计
Public Class Form1
Dim Content(,) As String
Dim Detail(,,) As String
Private Sub a()
FileOpen(1, Application.StartupPath & "\content.txt", OpenMode.Input) 'content.txt有多少行
Dim Temporary1() As String
Dim x As Integer
Do Until EOF(1)
LineInput(1)
x += 1
Loop
FileClose(1)
FileOpen(1, Application.StartupPath & "\content.txt", OpenMode.Input) '将content.txt的文件写入Content二维数组
ReDim Temporary1(x - 1)
ReDim Content(x - 1, 4)
For i = 0 To x - 1
Temporary1(i) = LineInput(1)
For o = 0 To 4
Content(i, o) = Split(Temporary1(i), ",")(o)
Next
Next
FileClose(1)
For i = 0 To UBound(Content) '将Content二维数组中列车次写入listbox
ListBox1.Items.Add(Content(i, 0))
Next
FileOpen(2, Application.StartupPath & "\detail.txt", OpenMode.Input) '读detail.txt 并将其内容写入Detail三维数组
Dim Temporary2 As String = ""
Dim Temporary3() As String
Dim Temporary4(,) As String
Dim p As Integer
Do Until EOF(2)
p += 1
Temporary2 &= LineInput(2) & "+"
Loop
ReDim Temporary3(UBound(Content))
ReDim Temporary4(UBound(Content), p - UBound(Content) - 1)
ReDim Detail(UBound(Content), UBound(Temporary4, 2), 2)
Temporary3 = Split(Temporary2, "*")
For q = 1 To UBound(Temporary3)
For w = 0 To UBound(Split(Temporary3(q), "+"))
Temporary4(q - 1, w) = Split(Temporary3(q), "+")(w)
Next
Next
For r = 0 To UBound(Content)
For t = 2 To UBound(Temporary4, 2) - 1
If Temporary4(r, t) <> Nothing And Temporary4(r, t) <> "" Then
Detail(r, 0, 0) = Temporary4(r, 1)
For y = 0 To 2
Detail(r, t - 1, y) = Split(Temporary4(r, t), ",")(y)
Next
End If
Next
Next
FileClose(2)
For w = 0 To UBound(Content) '将Detail数组内容写入经停车站下拉栏
For q = 1 To UBound(Detail, 2)
If Detail(w, q, 0) <> Nothing And Detail(w, q, 0) <> "" Then
If ViaStation.Items.Contains(Detail(w, q, 0)) = False Then
ViaStation.Items.Add(Detail(w, q, 0))
End If
End If
Next
Next
End Sub
Private Sub ShowAllTrains_Click(sender As System.Object, e As System.EventArgs) Handles ShowAllTrains.Click '显示全部车次按钮按下触发的事件
a()
ViaStation.Text = ""
ListBox1.Items.Clear()
For i = 0 To UBound(Content)
ListBox1.Items.Add(Content(i, 0) & )
Next
End Sub
Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged '选定listbox某一项所触发的事件
If ListBox1.SelectedIndex <> -1 Then
StartStation.Text = Content(ListBox1.SelectedIndex, 1)
DestinationStation.Text = Content(ListBox1.SelectedIndex, 2)
StartTime.Text = Content(ListBox1.SelectedIndex, 3)
ArriveTime.Text = Content(ListBox1.SelectedIndex, 4)
TxtDetail.Text = Nothing
For u = 1 To UBound(Detail, 2)
If Detail(Selection, u, 0) <> Nothing And Detail(Selection, u, 0) <> "" Then
If Detail(Selection, u, 1) = "---" Then
TxtDetail.Text &= Detail(Selection, u, 0) & Space(48 - 5 * Len(Detail(Selection, u, 0))) & Detail(Selection, u, 1) & Space(39 - 2 * Len(Detail(Selection, u, 1))) & Detail(Selection, u, 2) & vbCrLf
Else
TxtDetail.Text &= Detail(Selection, u, 0) & Space(55 - 2 * Len(Detail(Selection, u, 1)) - 5 * Len(Detail(Selection, u, 0))) & Detail(Selection, u, 1) & Space(50 - 2 * Len(Detail(Selection, u, 2)) - 2 * Len(Detail(Selection, u, 1))) & Detail(Selection, u, 2) & vbCrLf
End If
End If
Next
End If
End Sub
Private Sub ViaStation_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ViaStation.TextChanged '经停站输入文字或下拉栏选中某项所触发的事件
ListBox1.Items.Clear()
For z = 0 To UBound(Detail)
For c = 1 To UBound(Detail, 2)
If Detail(z, c, 0) = ViaStation.Text Then
If ListBox1.Items.Contains(Detail(z, 0, 0)) = False Then
ListBox1.Items.Add(Detail(z, 0, 0))
End If
End If
Next
Next
End Sub
Function Selection() As Integer '根据Ylistbox选中项,返回其在Detail数组中所在的位置
For q = 0 To UBound(Detail)
If Detail(q, 0, 0) = Replace(ListBox1.SelectedItem.ToString, "次ä?", "") Then
Return q
Exit Function
End If
Next
Return -1
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
End Class
综合分析,本设计有四个难点:
1. 程序显示的信息都是从content.txt和detail.txt两个文件中读取的。如果列车时刻没有变化,只需修改这两个文件的内容即可,不必改动程序。
2. Content.txt文件保存了各车次的概要信息,包括车次名,起点站,终点站,发车时刻,到达时刻,一个车次占一行。
3. Detail.txt文件中保存了所有车次停靠站的详细信息。每个车次信息的保存方式都是相同的:首先一个星号“*”为一行:然后是车次名为一行:在后是停靠站的站名和到达,发车时刻,每个站为一行。起点站的“到达时刻”和终点站的“发车时刻”均为“--”。因为每次车停靠站的数目不同,在读取detail.txt文件时,必须正确判断星号“*”的位置。
4. 程序应在启动时将所有信息从文件读入动态数组中,从而不必在查询过程中频繁地读取文件影响查询速度。
存在的不足:
只能够查询信息,不能够扩充程序使之对列车信息进行修改,添加和删除操作。
心得及体会:
通过这次的VB课程设计,我学到了很多很多的东西,同时不仅可以巩固了以前学过的知识,而且学到了很多书本上所没有学到的知识。通过这次课程设计是我懂得了理论与实践相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说是困难重重,这毕竟是自己第一次做一个程序,难免会遇到各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解的不够深刻,掌握的不够牢固。通过这次课程设计之后,一定把以前所学的知识重新温故。
程序设计师需要大量的时间去动手练习才能体会到它的内涵,同时还需要用心去投入,时间和感情花下去之后,的确慢慢的感受到有所收获了,我也收获到了一点点的乐趣。可能是一个良性循环的开始吧,相信以后会做的更好的。
[1]. 王栋,visual basic课程设计,北京,清华大学出版社
[2]. 王栋,visual basic程序设计实用教程,北京,清华大学出版社
[3]. 陈锐,夏敏捷,赵琳编著,Visual Basic.NET经典游戏编程开发,北京,科学出版社
本文来源:https://www.2haoxitong.net/k/doc/f908b30fbfd5b9f3f90f76c66137ee06eff94e70.html
文档为doc格式