第一篇:VB课程设计报告
学院名称 学生姓名 专业名称 班
级
VB课程设计报告
——文本编辑器
计算机学院
计算机科学与技术
::::
一、课程设计题目
用Visual Basic程序设计语言编写一个简易的文本编辑器 要求:有最基本的文本编辑功能,包括复制、剪切、粘贴、字体设置、背景颜色设置、字体颜色设置;同时拥有文本管理功能,包括打开文件、保存文件;以及完整的系统运行退出等功能,所有的操作可选择设定的快捷键。
二、课程设计目的
(1)目标:实现类似与WINDOWS平台下的记事本程序。(2)涉及功能:新建、打开、保存、另存为、退出、编辑、撤销、复制、粘贴、剪切、删除、查找、全选、打印、格式、字体、颜色、查看、状态栏、帮助、关于等
三、课程设计说明
1创建应用程序界面 2设置属性 3编写代码 4保存应用程序 5调试,运行应用程序 6生成可执行文件
四、源代码
Dim filecount As Integer Dim inputdata As String Dim TargetPosition As Integer Dim pos As Integer Dim targey As String Dim neirong As String
Private Sub A_Click()On Error Resume Next cmndlg1.Filter = “文本文件|*.txt” cmndlg1.CancelError = True cmndlg1.Action = 2 Open cmndlg1.FileName For Output As #1 Print #1, Text1.Text Close #1 End Sub
Private Sub C_Click()End Sub
Private Sub D_Click()End Sub
Private Sub Form_Load()
Text1.Text = “"
Text1.Left = 0
Text1.Top = 550
Text1.Width = Form1.ScaleWidth
Text1.Height = Form1.ScaleHeight
mnucut.Enabled = False
mnucopy.Enabled = False
mnudelete.Enabled = False
mnuselectall.Enabled = False
mnupaste.Enabled = True
mnuleft.Checked = True End Sub
Private Sub Form_Resize()
'如果窗体不处于最小化text1状态,改变text1大小以适应窗体大小变化
If Form1.WindowState <> 1 Then
Text1.Width = Form1.Width1350
End If End Sub
Private Sub Form_Unload(Cancel As Integer)Dim msg As Integer If Text1.Text <> neirong Then
msg = MsgBox(” 内容已被修改,是否保存文件“, 48 + vbYesNoCancel, ”提示“)
If msg = vbYes Then
On Error GoTo Err
cmndlg1.DialogTitle = ”保存文件“
cmndlg1.Filter = ”文本文件|*.txt“
cmndlg1.CancelError = True
cmndlg1.ShowSave
Open cmndlg1.FileName For Output As #1
Print #1, Text1.Text
Close #1 Err:
If Err.Number = cdlCancel Then
Cancel = True
End If
ElseIf msg = vbNo Then
End
ElseIf msg = vbCancel Then
Cancel = True
End If
Else
End
End If End Sub
Private Sub mnucopy_Click()'复制
利用SetText 方法,将选中的文本放入剪贴板上
Clipboard.SetText Text1.SelText End Sub
Private Sub mnucut_Click()'剪切
Clipboard.SetText Text1.SelText
Text1.SelText = ”“ End Sub
Private Sub mnudelete_Click()
'删除 Text1.SelText = ”“ End Sub
Private Sub mnuedit_Click()'编辑 菜单项代码
' 如果文本框中没有选中的内容,则剪切复制删除和粘贴菜单无效,否则有效
If Text1.SelLength <> 0 Then
mnucut.Enabled = True
mnucopy.Enabled = True
mnudelete.Enabled = True
mnupaste.Enabled = True
Else
mnucut.Enabled = False
mnucopy.Enabled = False
mnudelete.Enabled = False
End If
End Sub
Private Sub mnuexit_Click()'退出
End End Sub
Private Sub mnufind_Click()'查找 FindText 1 mnuNext.Enabled = True End Sub
Private Sub mnufont_Click()
'字体 On Error GoTo A:
cmndlg1.Flags = cdlCFBoth Or cdlCFEffects
cmndlg1.ShowFont
If cmndlg1.FontName > ”“ Then
Text1.FontName = cmndlg1.FontName
End If
Text1.FontSize = cmndlg1.FontSize
Text1.FontBold = cmndlg1.FontBold
Text1.FontItalic = cmndlg1.FontItalic
Text1.FontStrikethru = cmndlg1.FontStrikethru
Text1.FontUnderline = cmndlg1.FontUnderline
Text1.FontBold = cmndlg1.FontBold
Text1.ForeColor = cmndlg1.Color A:
If Err.Number < 0 Then Exit Sub End If End Sub
Private Sub mnufontcolor_Click()
'字体颜色 cmndlg1.ShowColor Text1.ForeColor = cmndlg1.Color End Sub
Private Sub mnuleft_Click()
'左对齐
Text1.Alignment = 0
mnuleft.Checked = True
mnuright(1).Checked = False
mnuright(2).Checked = False End Sub Private Sub mnunew_Click()
'新建
Text1.Text = ”“ End Sub Private Sub FindTex(ByVal start_at As Integer)
targey = targey pos = InStr(start_at, Text1.Text, targey)If pos > 0 Then '找到了匹配字符串 TargetPosition = pos Text1.SelStart = TargetPosition1 '选中找到的字符串
Form1.Text1.SelLength = Len(targey)Form1.Text1.SetFocus Else '没有找到匹配的字符串
MsgBox ”没找到匹配的字符串“, 48, ”提示“ Form1.Text1.SetFocus End If End Sub Private Sub mnupaste_Click()
'粘贴
用GetText1 方法,将剪切板中的内容粘贴到光标所在位置
Text1.SelText = Clipboard.GetText()End Sub
Private Sub mnuprint_Click()'打印 On Error Resume Next
cmndlg1.ShowPrinter
Printer.Copies = cmndlg1.Copies
Printer.Print Text1.Text End Sub
Private Sub mnuright_Click(Index As Integer)'右对齐居中菜单代码 Select Case Index Case 1 Text1.Alignment = 1 mnuleft.Checked = False mnuright(1).Checked = True mnuright(2).Checked = False Case 2 Text1.Alignment = 2 mnuleft.Checked = False mnuright(1).Checked = False mnuright(2).Checked = True End Select End Sub
Private Sub mnusave_Click()'保存
On Error Resume Next
cmndlg1.DialogTitle = ”保存文件“
cmndlg1.Filter = ”文本文件|*.txt“
cmndlg1.CancelError = True
cmndlg1.ShowSave
Open cmndlg1.FileName For Output As #1
Print #1, Text1.Text
Close #1 End Sub
Private Sub mnuselectall_Click()
'全选
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)End Sub
Private Sub Text1_Change()If Text1.Text = ”“ Then mnufind.Enabled = False mnuNext.Enabled = False Else mnufind.Enabled = True mnuselectall.Enabled = True End If End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button Case ”新建“ Call mnunew_Click Case ”打开“ Call mnuopen_Click Case ”剪切“ Call mnucut_Click Case ”复制“ Call mnucopy_Click Case ”粘贴“ Call mnupaste_Click Case ”保存“ Call mnusave_Click Case ”查找“ Call mnufind_Click End Select End Sub
Private Sub tre_Click()Shell(”notepad 使用说明.txt")End Sub
Private Sub xufeng_Click()Form2.Visible = True End Sub
五、运行结果
保存功能
查找功能
打开功能
颜色修改功能
字体修改功能
七、心得体会
作为一名计算机专业的学生,在接触了C语言、数据结构与C++课程后,对计算机语言有了一定的兴趣,于是在这个学期我毫不犹豫的选择了VB课程(算法与程序设计)。
VB程序设计的入门学习并不难,但却是一个十分重要的过程,因为程序设计思想的形成,以及之前学习积累的经验,很快就对VB有了一定的了解。下面就是我这段时间学习的新的与体会。我认为作为学习程序设计最重要的一点是要注重理解一些重要的概念.VB程序设计本身并不复杂,翻开一本程序设计学习的书籍,看到的无非就是变量,函数,条件语句,循环语句等概念.但要真正能进行程序设计,需要深入理解这些概念.因此,在 程序入门阶段还是应该重视概念的学习.我们学习VB并没有从正常的途径,可以说VB语言相对来说比其他语言简单,从他的语法就可以看出
其次,自己动手编写程序。程序设计入门阶段要经常自己动手抄写或编写一些小程序,亲自动手进行程序设计是创造性思维应用的体现,是培养逻辑思维的好方法.因此一定要多动手编写程序,而且要从小程序开发开始,逐渐提高写程序的能力.只有不断的从自己的程序中积累经验,从中进步,才能写出好的程序。程序设计课是高强度的脑力劳动,不是听会的,也不是看会的,而是练会的.只有自己动手,编写一些程序,才会有成就感,进而对课程产生兴趣,学起来才比较从容.动手能力的培养是这门课和以往课程最大的不同之处.重点放在思路,算法,编程构思和程序实现上.语句只是表达工具,要求堂上积极思考,尽量当堂学懂,并做到灵活应用.编程序不像做其它的事情,写程序之前一定要计划周详,把所有的可能性都想到,并想好相应的解决方法,不然思想会很混乱,很容易出现错误。还有就是编程序最重要的其实是思想,思想确定之后用什么语言或什么方法就简单了,接下来就是设计并写成代码的事情了
好的程序员就是这样一步一步炼成的。
在者,阅读,借签别人设计的好程序。多看别人设计好的程序代码,包括教材上的例题程序.在读懂别人程序后,要想他为什么这么设计能不能将程序修改完成更多的功能 则可以学到别人优秀的东西,帮助自己 提高自身水平.通过这次学习,我越来越喜欢上计算机语言,我相信在计算机语言上会走的更远。
第二篇:VB课程设计报告
Visual Basic课程设计报告
题目1: 难度: *** 题目2: 难度: 指导教师:
姓 名:
学 号:
专 业:
班 级:
学 院:
日 期:
目录
1、题目简介.....................................................................................................................................2
2、设计思路与总体方案.................................................................................................................4
2.1 窗体frm1...........................................................................................................................4 2.2窗体form1..........................................................................................................................6 2.3窗体 frmcssz......................................................................................................................7 2.4 窗体frmlsz......................................................................................................................10 2.5窗体 frmcxtj.....................................................................................................................12 2.6 标准模块..........................................................................................................................17
3、设计过程遇到的主要问题及解决方法...................................................................................18
4、设计中尚存的不足分析...........................................................................................................18
5、心得体会...................................................................................................................................18
6、参考文献...................................................................................................................................19
1、题目简介
(简要说明课程设计所设计的程序的主要功能。)
本题目旨在设计与一个可对个人日常手入和消费帐目进行管理和查询统计的程序,通过此程序的设计,可以加深我们对上学期的vb基础知识的印象,使理论升华为实际操作,同时也有助于我们培养理财意识,用电子记录的形式取代从前的手写记录,使得信息更加精准,不易丢失。
题目的难度系数相对不高,但牵涉到众多的知识点作为典型的多模块设计类型的题目,本程序由五个窗体模块frm1,form1,frmcssz,frmcxtj,frmlsz和一个标准模块共同构成。此外根据课本121页要求,另有三个文本文件inputtype.txt,outputtype.txt和balance.txt分别用于保存收入类型,支出类型和收入支出帐目。本程序的密码按照题目要求保存在了Balance.pas中,并自行设计加密处理。我的笔记本打不开这个文件,即便打开看到的也不再是密码本身。这点尽管在这个程序中用处不是太大,但为我们保存重要文件提供了一种思路。
程序要求实现如下功能(主要根据窗口由易到难的顺序来)。
如图1所示,frm1是启动窗体。有密码的设定和破译,开始时必须先输入密码。每次错误后会弹出对话框给予提示,连续累计三次则程序自动退出初始密码为空,直接单击即可进入。
图1.程序主界面
2.输入密码后则进入主界面,它是连接所有窗口的平台。
3.单击“参数设置”按钮进入“参数设置”窗口。窗口的三个选项卡是通过SSTab或Tabstrip控件来制作。这些陌生的外部空间对于我通过安装了vb企
业版方才得到(详见课本6-7页两者对比),因为ssTab控件相对来说简单,所以在这个程序的中我完全采用了SSTab控件。
4.收入类别和支出类别的选项卡分别需要实现对两者的添加,删除,修改,返回操作,更为重要的是要保存在文件中,以备在流水帐和查询统计的combobox中使用。
开始时,“添加”和“返回”按钮可用,而其余两个被置灰,而且文本框不可输入。因为此时列表框的条目未被选中,所以修改和删除已失去意义,不可用。“添加”按钮比较繁琐,其本身可以被“确定”按钮替代功能。本程序中,按下添加按钮,则此时文本框被清空可编辑,而对比来说,按下修改按钮文本框不清空且可编辑。
图2.输入错误的密码时的提示 通过“密码修改”选项卡修改密码,如果两次输入不一致或者输入有误(图2和3)则会提醒用户。此外,我把其设为了在保存时也 会提醒,有助于我们记忆。右上角的返回按钮可以随时返回主界面上。
6.单击主界面上的“日常流水帐”进入日常收支原始资料的主要输入窗口。该窗口主要由“收入记账”和“支出记账”两大部分组成。我设置了进入窗体时列表框为空,以便于对刚输入的情况一目了然。
这里面就涉及到了另一种新的控件,DTPicker控件的问题,这个控件使用起来极为方便,单击即可弹出日期选择框,且默认当天时间,简明易懂。其中的列表框中的项目为参数设置所得,只需从中选择即可。
需要我们添加新的收支信息时,我设定了备注为可有可无的输入项但其他三个空如果有一个未填则会在单击保存后弹出msgbox提示,否则则会在底部的列表框中每行显示一个完整项,并且把信息存储到balance.txt中用于接下来的步骤。单击取消按钮则可以清空各个文本框中的内容以便于重新输入。添加完毕后单击右上角的返回按钮则回到主界面。本程序的重点和难点原先粗步估计集中在查询统计这一窗体模块中,所以采用了由易到难的策略。该窗体由三个选项卡组成,既可以选择按类型查询从而
了解单独的情况,也可以采用时间段的模式,从而宏观大体的知道某个时间内的情况。设定这两种模式时需要通过单选框的改变来结合visible属性。实际并非没有想象中的困难,但是,因为框架控件的问题,我在这里还是绕了歧路最终放弃了控件数组,原本代码可能会更简明些。
收入支出对比一项用于显示某段时间内总收入和总支出的量化对比,在输入时间段后按确定按钮即可显示。返回按钮同上述情况。
8.程序中我设置了一个标准模块,主要用于自定义数据类型中的使用。借用其配合,可使程序显得更简洁些。
2、设计思路与总体方案
(说明用到哪些控件并进行难点分析,说明所使用到的模块、过程、变量、数组、自定义数据类型及其相互关系,必要时给出系统结构图等图表。
对如下事项逐步进行必要的分析、说明:
程序设计的主要思想,程序功能是如何实现的?
设计了几个程序模块(有几个窗体模块、几个标准模块),各个功能模块的作者及想到之间的关系(模块间是如何传递信息和数据的,采用什么方式,为什么?)?
程序中定义了哪些主要的变量(分别定义了哪些过程级变量?模块级变量和全局变量),这些变量起什么作用?是否全局变量? 这里不需要给出大段的源程序,只需要给出关键的实现代码即可。)
2.1 窗体frm1 这是启动窗体,仅使用了两个标签和一个文本框及两个按钮,但是要考虑的地方却有很多。下面我配合图和文字讲述下加密的过程,及对于输入字符时的对话框,还有累计三次时将自动退出的设置。此处只有三个通用过程,分别为CmdCancel_Click,Cmdok_Click,txtpassword_KeyPress,难点集中在后两者上,其中txtpassword_KeyPress在后面也会用到;
Private Sub CmdCancel_Click()Unload Me End Sub
Private Sub Cmdok_Click()'自行设计的简易解密过程 Dim int1 As String Dim a As Long: Static b As Integer: Dim i As Integer If txtpassword.Text = “" Then Form1.Show '使用静态变量三次来累计 frm1.Hide Exit Sub End If int1 = txtpassword.Text Open App.Path & ”balance.pas“ For Input As 1 Input #1, a Close 1 Do While i <= Len(CStr(np))And i >= 1 a = a1)
Next j
Next i
Close End Sub
下述一段代码为读入列表框时所使用。仅有一字符串变量来实现 Private Sub Form_Load()
Dim str1 As String Open App.Path & ”OutputType.txt“ For Input As #2
Do While Not EOF(2)
Input #2, str1
List1(1).AddItem str1'读文件进入列表框
Loop
Open App.Path & ”InputType.txt“ For Input As #1
Do While Not EOF(1)
Input #1, str1
List1(0).AddItem str1
Loop
Close End Sub
Private Sub Cancel_Click()np.Text = ”“: np2.Text = ”“
'取消密码输入 End Sub
Private Sub cmdfh_Click(Index As Integer)'返回按钮 Unload frmcssz Form1.Show End Sub
Private Sub Cmdqx_Click(Index As Integer)'取消按钮 Dim m As Integer m = Index Text1(m).Text = ”“ End Sub
Private Sub Cmdsc_Click(Index As Integer)'删除按钮
Dim j As Integer: j = Index List1(j).RemoveItem List1(j).ListIndex Text1(j).Text = ”“ End Sub
Private Sub Cmdtj_Click(Index As Integer)'添加按钮 Dim m As Integer
m = Index Text1(m).SetFocus Text1(m).Locked = False Text1(m).Text = ”“ End Sub
Private Sub List1_Click(Index As Integer)
Dim j As Integer
'点击列表框实现两键的去灰
j = Index
Cmdxg(j).Enabled = True
Cmdsc(j).Enabled = True
Text1(j).Text = List1(j).Text End Sub
Private Sub Cmdxg_Click(Index As Integer)
'修改按钮。修改键解除文本框锁定
Dim j As Integer
j = Index
Text1(j).Locked = False
Text1(j).SetFocus End Sub
Private Sub Cmdqd_Click(Index As Integer)
Dim int1 As Integer, k As Integer
'确定按钮。对栏目的添加, 修改
k = Index
If List1(k).SelCount = 0 Then
List1(k).AddItem Text1(k).Text
Else
int1 = List1(k).ListIndex
List1(k).List(int1)= Text1(k).Text
End If
Text1(k).Text = ”“: Text1(k).Locked = True
Cmdxg(k).Enabled = False: Cmdsc(k).Enabled = False
Cmdtj(k).SetFocus End Sub 后面一段当时看来显得很费精力,因为需要自行设定加密方法 Private Sub sure_click()
Dim i As Integer, password As Long i = 1
If np.Text <> np2.Text Then
MsgBox ”两次密码不一样(~。~)/,请重新输入“, 48, ”提示“
ElseIf Len(Trim(np))> 8 Then
MsgBox ”请保证密码不超过8位“, 48
MsgBox ”密码已修改,a请记住您的密码哦!“, 64, ”温馨提示“
End If Do While i <= Len(np.Text)And i >= 1 np = np + Asc(Mid(np.Text, i, 1))
Loop Open App.Path & ”Balance.pas“ For Output As #1
'设置密码
Write #1, np
Close #1
End Sub
Private Sub np_KeyPress(KeyAscii As Integer)
If KeyAscii < 48 Or KeyAscii > 57 Then
KeyAscii = 0
'密码含非数字字符,则显示错误
MsgBox ”密码应当为数字,请重新输入“, , ”提示“
End If
Else
'两次输入一样就加密并保存到文件
2.4 窗体frmlsz 窗体frmlsz供用户输入每日的收支帐目,即收支类型、收支时间、金额和备注。每次加载窗体frmlsz时从Inputtype.txt读出收入类型,从Outputtype.txt读出支出类型给combo控件初始化,便于用户选择相应的类型输入日常流水账。为实现数据逐条读写采用do loop循环 EOF()文件函数和
input语句。利用If语句判断data的int1取值,确定数据是收入还是支出,这是一种较为简便的方式,在后面的数据查询中有很大的发挥空间
Frmlsz在主界面中的default属性被我改成了true。其结构简单,但设计上还是需要注意些问题,比方说就看下面一段代码,我们有时候确实有必要在细节上较真
Private Sub Cmdbc_Click(Index As Integer)Dim j As Integer: j = Index Dim str1 As String If Coblb(j).Text = ”“ Or txtje(j).Text = ”“ Then '输入信息
MsgBox ”请输入完整 >o<“, , ”嘿嘿,注意“ Exit Sub Else str1 = DTPicker1(j).Value & Space(4)& Coblb(j).Text & Space(9)& txtje(j)& Space(12)& txtbz(j)Call List1(j).AddItem(str1)End If Dim newdata As data newdata.int1 = j newdata.time1=DTPicker1(j).Value newdata.moneytype= Coblb(j).Text '收集信息并保存到文件 newdata.money = Str(Val(txtje(j).Text))newdata.addition = txtbz(j).Text Open App.Path & ”Balance.txt“ For Append As #1 Write #1, newdata.int1, newdata.time1, newdata.moneytype, newdata.money, newdata.addition Close #1 End Sub
Private Sub cmdfh_Click(Index As Integer)'返回 Unload Frmlsz Form1.Show End Sub
Private Sub Cmdqk_Click(Index As Integer)'清空按钮 Dim j As Integer: j = Index Coblb(j).Text = ”“: txtje(j).Text = ”“: txtbz(j).Text = ”“ End Sub 这段代码基本上在所有类似的情况中都大同小异
Private Sub Form_Load()'读取信息 Dim str1 As String Open App.Path & ”OutputType.txt“ For Input As #2 Do While Not EOF(2)Input #2, str1 Coblb(1).AddItem str1 Loop Open App.Path & ”InputType.txt“ For Input As #1 Do While Not EOF(1)Input #1, str1 Coblb(0).AddItem str1 Loop Close End Sub 2.5窗体 frmcxtj 窗体frmcxtj算是对于上述窗体的综合应用。在数组的基础上同时也涉及到了自定义变量类型,利用其寻找到时间或类别上符合要求的项,通过EOF语句不断赋值,再通过do loop循环得到。两组单选框的value值改变而转化frame的visible属性,这是大致的思路框架。具体落实到代码的编写上,比方寻找时间段是通过与dtpicker的value值比较
Private Sub Cmd3_Click()Dim newdata As data, i As Integer ‘此句为收入支出对比一栏上给两个文本框计算的过程 Dim amount As Long, money1 As Long, money2 As Integer Lbldb.Caption = ”从“ & Space(3)& DTPicker5.Value & Space(2)& ”到“ & Space(2)& DTPicker6.Value & Space(2)& ”期间“ ‘标签
Open App.Path & ”Balance.txt“ For Input As #1 Do While Not EOF(1)Input #1, newdata.int1 Input #1, newdata.time1 Input #1, newdata.moneytype Input #1, newdata.money Input #1, newdata.addition If(newdata.time1 >=(DTPicker5.Value))And(newdata.time1 <=(DTPicker6.Value))And newdata.int1 = 0 Then money1 = money1 + newdata.money End If If(newdata.time1 >=(DTPicker5.Value))And(newdata.time1 <=(DTPicker6.Value))And newdata.int1 = 1 Then money2 = money2 + newdata.money End If Loop Text1.Text = money1 Text2.Text = money2 Close Text1.Locked = True Text2.Locked = True End Sub
Private Sub Cmd1_Click()’第一个确定按钮
List1.Clear ' Dim newdata As data, i As Integer Dim amount As Long, money As Long amount = 0 Open App.Path & ”Balance.txt“ For Input As #1 '当选择收入类型查询时
If Option2.Value = True Then Do While Not EOF(1)Input #1, newdata.int1
Input #1, newdata.time1 Input #1, newdata.moneytype Input #1, newdata.money Input #1, newdata.addition If(newdata.time1 >=(DTPicker9.Value))And(newdata.time1 <=(DTPicker10.Value))And newdata.moneytype = Combo1.Text Then List1.AddItem newdata.time1 & Space(5)& newdata.moneytype & Space(5)& CStr(newdata.money)& Space(5)& newdata.addition money = newdata.money End If amount = amount + money Loop Labelsr.Caption = ”从“ & DTPicker9.Value & ”到 “ & DTPicker10.Value & ” 共收入“ & amount & ”元“ Else Input #1, newdata.int1 '当选择按时间查收入时 Input #1, newdata.time1 Input #1, newdata.moneytype Input #1, newdata.money Input #1, newdata.addition If(newdata.time1 >=(DTPicker7.Value))And(newdata.time1 <=(DTPicker8.Value))And newdata.int1 = 0 Then List1.AddItem newdata.time1 & Space(5)& newdata.moneytype & Space(5)& CStr(newdata.money)& Space(5)& newdata.addition money = newdata.money End If amount = amount + money Loop Labelsr.Caption = ”从“ & DTPicker7.Value & ”到 “ & DTPicker8.Value & ” 共收入“ & amount & ”元“ End If Close End Sub Do While Not EOF(1)
Private Sub Cmd2_Click()第二个确定按钮 List2.Clear Dim newdata As data, i As Integer Dim amount As Long, money As Long amount = 0
Open App.Path & ”Balance.txt“ For Input As #2 '当选择支出类型查询时 If Option4.Value = True Then Do While Not EOF(2)Input #2, newdata.int1 Input #2, newdata.time1 Input #2, newdata.moneytype Input #2, newdata.money Input #2, newdata.addition
If(newdata.time1 >=(DTPicker3.Value))And(newdata.time1 <=(DTPicker4.Value))And newdata.moneytype = Combo2.Text Then '当选择按时间查支出时 List2.AddItem newdata.time1 & Space(5)& newdata.moneytype & Space(5)& CStr(newdata.money)& Space(5)& newdata.addition money = newdata.money End If amount = amount + money Loop Labelzc.Caption = ”从“ & DTPicker3.Value & ”到 “ & DTPicker4.Value & ” 共支出“ & amount & ”元“ Else Do While Not EOF(2)Input #2, newdata.int1 Input #2, newdata.time1 Input #2, newdata.moneytype Input #2, newdata.money Input #2, newdata.addition
If(newdata.time1 >=(DTPicker1.Value))And newdata.time1 <=(DTPicker2.Value))And newdata.int1 = 1 Then List2.AddItem newdata.time1 & Space(5)& newdata.moneytype & Space(5)& CStr(newdata.money)& Space(5)& newdata.addition money = newdata.money End If amount = amount + money Loop Labelzc.Caption = ”从“ & DTPicker1.Value & ”到 “ & DTPicker2.Value & ” 共支出“ & amount & ”元“ End If Close End Sub
Private Sub Command1_Click(Index As Integer)'返回 Unload Me Form1.Show End Sub
Private Sub Form_Load()'读取信息 Dim str1 As String Open App.Path & ”OutputType.txt“ For Input As #2 Do While Not EOF(2)Input #2, str1 Combo2.AddItem str1 Loop Open App.Path & ”InputType.txt" For Input As #1 Do While Not EOF(1)Input #1, str1 Combo1.AddItem str1 Loop Close End Sub Private Sub Option1_Click()'以下为单选框的四类情况
Frame2.Visible = False Frame1.Visible = True End Sub
Private Sub Option2_Click()Frame2.Visible = True Frame1.Visible = False End Sub
Private Sub Option3_Click()Frame3.Visible = True Frame4.Visible = False End Sub
Private Sub Option4_Click()Frame3.Visible = False Frame4.Visible = True End Sub 2.6 标准模块
标准模块中我设立了自定义类型的变量用来声明自定义数据类型 data,它有5个元素,其中int1为难点和重点。其值可用于区分收入和支出的性质,在frmcxj中显得尤为重要,另外我就是刚才犯了个错误,time 是关键字,在编写程序时一直出现了溢出的错误,幸好及时得到了改正,np,np2用来存放密码,密码的设立主要是通过把每个数字的ascii码求出然后求和的过程,用到了Mid(),Asc(),Len()函数和For循环。
Public np As Integer, np2 As Integer Public Type data int1 As Integer time1 As Date moneytype As String money As Long addition As String End Type
3、设计过程遇到的主要问题及解决方法
3.1作为编程者的角度看,需要的是考虑用户的感受。当我调试程序后,遇到过当输入的数据类型与设置的变量类型不统一时,会出现许多错误,为避免如此,必须添加显式转换语句避免错误
3.2在参数设置的模块中,我当时在其load的事件中编完了列表框的ADDItem的方法,也检查代码,没有任何问题,但是该窗体就是无法显示出列表框的条目来。后来把把原先的frmcssz_load改成了form_load情况当即就解决了。至今我也没曾想通
3.3 在自定义数据类型中原先有一项我命名其为time,但是我在数据查询之中就遇到了麻烦。定义错误,文件超出。我于是将其名称改去,代码便可顺利运行
4、设计中尚存的不足分析
4.1如图可见,这一段本可使用控件数组大大简化这后面过程。一开始我也确实是如此设计。我的失策主要由于当时建立的全部为控件数组的形式包括了框架,当两个框架重叠之后其中一个被另一个完全包进去了,所以我无论怎么设option.value都得不到想要的情况。后来便放弃了这一想法,采用了一般的步骤而变得更为费时费力,可以看到查询统计模块下的代码特别冗长
4.2 在参数设置模块中,当点击添加之后虽然清空了文本框,但若是列表框依然有条目被选,则再输入其实变成了另一形式的修改。我希望接下来的时间可以去完善一下一些细节方面,有些是已经考虑到的,有些只有时间久些才会慢慢感觉到
4.3 密码的设置上目前情况不是太理想,有待考虑新的算法提高某些文件的保密度
5、心得体会
这个程序从难度上讲只有三颗星而已,但我想说我确实摸索了很久,从界面的制作排版到代码的编写。由于计算机编程知识当初只学了些皮毛,很多次我在 18 编程时不断调试却依然出现这样那样的毛病,可能是无意中拼写错误,但有些确实是因为不了解vb的某些较为冷僻的用法所致。这段时间,常会向同学请教,也自觉地去借了些书看看,基本上完成了要求,但是功能、界面都还不是很完善,我会借助以后的时间继续去加工的,我需要的是学以致用。
我体会到了编写程序是个有条理的逻辑过程,首先必须有个大致的思路,整体的规划出来。然后再是分步地去具体完成,尤为重要的是需要投入相当一部分精力去精益求精,这样你的成果才不会是毛糙的。思维调动是件另人愉快的事情,而我们应该去学会享受脑力劳动的过程,哪怕是一次次地失利。这就是一个月的课程设计所教会我的。
6、参考文献
[1].王栋,visual basic课程设计,北京,清华大学出版社 [2].王栋,visual basic程序设计实用教程,北京,清华大学出版社 [3].兰友,vb应用程序设计,北京,交通大学出版社
[4].董爱红等,二级visual basic语言程序设计,北京:机械工业出版社,2005
第三篇:VB课程设计报告
Visual Basic课程设计报告
题目1: 列车时刻查询系统 难度: ** 题目2: 记忆力测试软件 难度: ** 指导教师: 袁红兵
姓 名:郑聪
学 号:9151010F0535 专 业:兵器类
班 级:9151010F05 学 院:机械工程学院
日 期:2016年4月
一、程序功能
二、课程设计的详细设计
三、课程设计总结
四、遇到的问题及解决方法
五、源程序代码
六、总结及个人心得体会
七、参考文献
程序功能
涉及知识点:(1)读文本文件;(2)动态数组(3)字符串处理(4)列表框控件的使用(4)多行文本框控件的使用
功能要求:(1)程序启动后,左边的列表框显示所有的车次,点击其中一项,显示相应的详细信息。(2)在“经停车站”组合框中选择或输入一个站名然后回车,列表框中只列出经过该车站的车次。单击列表框下方的“显示全部车次”按钮,列表框中重新列出所有车次。(3)文本框(或右边的列表框)中详细信息整齐排列。
课程设计的详细设计
1、总体设计思路
先将信息读入到两个动态数组中,再根据相关的事件调用数组。
2、界面设计
界面有frame,list,combol,text,command,label.3、功能模块设计
课程设计总结
(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 num1 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.ListCount3 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(x1, 4)
For i = 0 To xUBound(Content)1, w)= Split(Temporary3(q), ”+“)(w)
Next
Next
For r = 0 To UBound(Content)
For t = 2 To UBound(Temporary4, 2)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(482 * Len(Detail(Selection, u, 1)))& Detail(Selection, u, 2)& vbCrLf
Else
TxtDetail.Text &= Detail(Selection, u, 0)& Space(555 * Len(Detail(Selection, u, 0)))& Detail(Selection, u, 1)& Space(502 * 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经典游戏编程开发,北京,科学出版社
第四篇:2014 vb课程设计报告
Visual Basic
课 程 设 计 报 告
所属课程名称:Visual Basic程序设计 课程设计题号:
课程设计题目:
课程设计难度:?星
课程设计时间:2014.2.23 ~ 4.9 学号:
姓名:
自评成绩:
二〇一四年三月
一、程序功能
简叙题目的功能要求,涉及的知识点等。
二、课程设计的详细设计
1、总体设计思路
介绍程序的设计思路,给出程序结构框图。
2、界面设计
界面构成及实现方法。
3、功能模块设计
文字介绍程序主要功能的实现算法,尽量给出算法流程图。
三、设计中遇到的问题与解决办法
【问题1】:
【解决办法】:
【问题2】:
【解决办法】:
【问题3】:
【解决办法】:
……
四、更上一层楼
描述增加的新功能、对程序的改进等。
五、课程设计总结
列出程序功能未实现之处,程序运行有问题之处。
说明这次课程设计的感想和心得体会、经验教训等。
六、源程序代码
源程序代码要求缩进书写,强制变量声明,变量名及对象名等的取名应具有描述意义。代码必须有注释说明,对每个模块、函数,要说明其功能、算法等。
第五篇:VB 课程设计报告 (推荐)
长江大学工程技术学院
机械设计基础课程设计
(2012-2013学年 第二学期)
系(部)专业班级 学生姓名 学号/序号 完成时间
机械系 机电专61102班
李航 201162335/14 2013年7月10日 长江大学工程技术学院
VB语言程序设计课程设计报告
(2012-2013学年 第二学期)
系(部)专业班级 学生姓名 学号/序号 指导教师 完成时间
机械系 机电专61102班
/
张国英(讲师)/刘怀海(讲师)
2013年6月21日
图书管理系统一、功能描述
实现对图书的管理,在后台使用数据记录操作的数据,依靠这些数据库的管理系统的管理功能来整理数据,实现对书籍信息表,书籍归还表,书籍借出表的集中有序管理,从而达到减轻工作负担,也减少了借书者的不便
书籍信息表:实现对所有图书的综合管理,建立对图书的图书编号,作者,出版社,数量,出版日期,价格的综合信心
图书归还表:对所有借出的情况进行有效的管理,建立归还的资料,并可对未归还或归还的的图书进行查询,查询是否损坏
图书借出表:能够对借阅图书的读者进行管理。建立读者信息和读者类别的信息资料,能够查询读者借出书籍的信息,并可分别按照图书编号、学号和图书名查询读者的信息资料
●系统用户的登录:实现用户通过用户名和密码进行登录的功能。●图书管理:实现对图书的添加、查找、删除和修改的功能。●流通管理:实现对图书的借阅和归还等功能。●退出系统:结束图书管理系统。
二、概要设计
1、系统功能模块框图设计
根据功能描述,建立系统的体系结构,即将整个系统分解成若干子功能模块,并用框图表示各功能模块之间的衔接关系,并简要说明各模块的功能。
程序流程框图如图所示:(仅供参考)
图1 程序流程图
通过登录界面进入图书管理系统,进入界面选择与之相匹配的表格,信息表实现对图书的总管理,各种图书信息的分类和汇总,图书归还表实现对借出书籍归还的管理,对归还的书籍的情况进行总结,图书借出表对图书借出者的姓名,借出日期等等进行记录,以确保图书的完整,在图书信息表,图书归还表和图书借出表里的各类命令根据书籍的所需进行整编和管理
2、数据库设计
包括数据库的组成说明,数据库中各表的结构说明(包括字段名、字段类型等),可以包含图片例如下表:
表1 学生信息表
三、详细设计 详细说明主要窗体的实现过程,包括窗体的设计图片及其上所包含的控件名和属性设置;
详细说明主要操作的代码实现过程,包括过程间的调用关系(注:在此给出不完全代码)。如下所示:
1、账号登录
账号登录模块中登录与注册两按钮,单击注册会进入注册模块中,单击登录会进入系统进行下一步的操作,账号文本框与数据库相连接,当在账号文本框输入账号后点击登录按钮后,会在数据库中进行查询看数据库中是否会有该账号,且该账号的密码是否与密码框中输入的相同,如果相同会进入系统,如果不存在该账号或密码与账号不相匹配,则会提示“账号或密码错误”,账号文本框会得到焦点,让重新输入。
(1)窗体截图(如图2)
图2 注册窗体
(2)功能实现
2、学生信息查询窗体
图3 查询窗体
四、调试中存在的问题及解决方法
包括调试过程中遇到的主要问题及采取的解决方法。例如:
1、注册账号出现的错误
数据库中账号被设为主键,当注册时的账号与数局库中的账号有相同时就会出错。
2、解决方法:在写入数据库前先进行查询数据库
五、心得体会
本人在本次实习中取得的收获、遇到的困难、如何面对和克服各种困难、本系统的不足之处,将要改进的思想等。
六、参考文献
[1] 罗朝盛.Visual Basic 6.0程序设计教程(第3版).人民邮电出版社,2009年2月
[2] [3]
七、附录
包括全部源程序清单(程序中应有足够的注释)。