《Vb课程设计题目.docx》由会员分享,可在线阅读,更多相关《Vb课程设计题目.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Vb 课程设计题目 Vb 课程设计题目(直线拟合)四星一功能 直线拟合就是将实验中得到的具有线性特性的一组数据通过最小二乘法拟合成一条直线,求出直线方程并绘制出该直线的图形。也就是寻找一条直线使这些离散的点尽可能平均的位于该直线的两边,它对于寻找数据的规律有很大的帮助,是一个比较实用的程序。 二课程设计详细内容 该题目的程序由三个窗体组成 在Form1中,有1个框架控件,内有6个单选按钮组成的控件数组、1个标签控件、2个命令按钮。单选按钮控件数组用来选择要输入的数据组数,当选择好后,单击“确定”按钮,就可以进入下一个窗体。单击“取消”按钮则退出程序。 在Form2中有2个命令按钮、20个文本框
2、(每10个组成一个控件数组)、10个标签控件和许多直线组成。在文本框中输入实验数据后,点击“确定”按钮,若数据没有全部输入,则出现消息框,提醒没有完全输入。若已经完全输入,则显示Form3,隐藏Form2。与此同时,对实验数据计算,得出拟合直线的截距和斜率,并在Form3的标签控件1中体现;根据所得的斜率和截距得到拟合直线方程,并在Form3的标签2中体现;还可以在Form3中绘出拟合直线和每个实验点(用红色),根据实验数据调整坐标系统,画出拟合直线。三、调试程序的过程 万事开头难 ,刚开始时我感觉编程无从下手,但还是硬着头皮开时编程,从窗体的布局开始,根据书上的样式给控件命名 其中遇到的第一
3、个问题是控件数组同名问题,通过查书和询问同学我解决了。后面有遇到第二个问题,全局变量的设置问题,这也是概念不清引起的,通过看书这个问题也解决了。 第三个问题是显示拟合直线。一开始,我在Form3中画了一个图片框,运行时总显示不了直线,后来索性将它删掉,再次运行时终于能出现直线,可是直线的位置与设想相差太大了。连续尝试了1个多星期后,终于明白了,原来我直接利用得到的直线方程的点的坐标在窗体上画直线是不对的,因为我所画的坐标轴的单位长度和窗体的单位长度不相等,之间需要一定的转换。于是再次修改代码,可还是没有出现预想的情况。重新检查后,没有发现程序错误。我又尝试输入一组特殊数据:(10,21),(2
4、0,41),(30,61),(40,81),(50,101)它们的拟合直线应该是Y=2X+1,斜率是2,截距是1,可是运行后斜率是-0.2,截距是-0.1,我再次检查了数据计算部分的代码,又和和我同题目的同学讨论了一番最后发现“令 =+=m i i X X m m i i M 12 2) (1”中的“+”号应改为“-”。这是粗心惹的祸,修改后,在调试过程中再也没出现什么大的问题。 四、输入输出数据 当选择5组数据时, :(54,76)、(65,83)、(87,89)、(82,61)、(34,22); :(34,56)、(24,89)、(29,59)、(78,61)、(94,57); :(58,
5、26)、(44,77)、(55,89)、(67,65)、(76,98)。 运行结果: :截距A=7.9171725,斜率B=0.9041657,直线方程为Y=0.9041657X+7.9171725,坐标比例:1 :截距A=74.72493,斜率B=-0.199323,直线方程为Y=74.7293X0.199323,坐标比例:1 :截距A=41.1017,斜率B=-0.4983051,直线方程为Y=41.1017X+0.4983051,坐 标比例:1 当选择6组数据时, :(54,76)、(65,83)、(87,89)、(82,61)、(34,22)、(44,88); :(34,56)、(24
6、,89)、(29,59)、(78,61)、(94,57)、(44,88); :(58,26)、(44,77)、(55,89)、(67,65)、(76,98)、(44,88)。 运行结果: :截距A=33.64924,斜率B=0.5931818,直线方程为Y=0.5931818X+33.64924,坐标比例:1 :截距A=80.64387,斜率B=-0.2735675,直线方程为Y=-0.2735675X8+0.64387,坐标比例:1 :截距A=69.0728,斜率B=8.381743E-02,直线方程为Y=8.381743E-02X+69.0728,坐标比例:1 五、课程设计总结与心得 经过
7、此次程序设计,使我对许多事情的看法有了改变。记得上学期学VB的时候,感觉VB很简单,老师布置的作业也很快完成,多余的时间就在偷偷玩游戏。刚知道自己要做直线拟合这道题时,翻了一下书,感觉很简单,相比选择难题的同学,我心中不免有些得意,心想:快速做完后,再做一个,说不定能得个优。刚开始事情就有点不顺,但也没什么大问题,一直到写完所有程序,开始运行的时候,才发觉最糟糕的事情出现了运行中没有出现拟合直线,其他的问 题都好办,可最终显示不出拟合直线就是失败,眼看着交作业的日子越来越近,心中却一点思绪都没有,再加上二级考试的临近,我急得像热锅上的蚂蚁,不知怎么办才好。此时,我才真正体会到编写一个真正有用的
8、程序是多么的困难,那是要花上许多的心血才得来的。事情终于有了转机,在我弃用图片框后终于发现要显示满足要求的直线首先要进行坐标转换,窗体是以缇为单位,而平面直角坐标系以“1”为单位,二者需要转换。明白这一点之后,我终于能在窗体上显示出直线了,然而,并非我所期望的直线。我于是假设直线斜率为2,截距为1,得到一组数据,将它们输入Form2的文本框中,结果发现得到的直线斜率和截距不是2和1,而是0.02和0.01左右小的数字,我晕倒。检查一便代码后,终于发现是我的粗心把计算公式中的“+”打成了“-”,发现这个问题使我懂得了一个不小心就会引起许多意识不到的问题,作学问一定要细心冷静。 六附件 Form1
9、: Private Sub Command1_Click() 显示第二个窗体 Form1.Hide Form2.Show Form3.Hide zxnh = MsgBox(你必须完全输入所选的项目! & Chr(10) & Chr(13) & _ 否则程序将会出错!, 48, 直线拟合) End Sub Private Sub Command2_Click() 结束程序 End End Sub 使第二个窗体的文本框按照第一个窗体给出的数据组数显示 Private Sub Option1_Click() bel6.Enabled = False bel7.Enabled = False bel8
10、.Enabled = False bel9.Enabled = False bel10.Enabled = False For n = 6 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option2_Click() bel6.Enabled = True bel7.Enabled = False bel8
11、.Enabled = False bel9.Enabled = False bel10.Enabled = False Form2.Text1(6).Enabled = True Form2.Text1(6).BackColor = &HFFFFFF Form2.Text2(6).Enabled = True Form2.Text2(6).BackColor = &HFFFFFF For n = 7 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled
12、= False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option3_Click() bel6.Enabled = True bel7.Enabled = True bel8.Enabled = False bel9.Enabled = False bel10.Enabled = False For n = 6 To 7 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = Tru
13、e Form2.Text2(n).BackColor = &HFFFFFF Next For n = 8 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option4_Click() bel6.Enabled = True bel7.Enabled = True bel8.Enabled = True be
14、l9.Enabled = False bel10.Enabled = False For n = 6 To 8 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFF Next For n = 9 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled
15、 = False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option5_Click() bel6.Enabled = True bel7.Enabled = True bel8.Enabled = True bel9.Enabled = True bel10.Enabled = False Form2.Text1(10).Enabled = False Form2.Text1(10).BackColor = &H8000000F Form2.Text2(10).Enabled = False Form2.T
16、ext2(10).BackColor = &H8000000F For n = 6 To 9 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFF Next End Sub Private Sub Option6_Click() bel6.Enabled = True bel7.Enabled = True bel8.Enabled = True bel9.Enabled = True
17、bel10.Enabled = True For n = 6 To 10 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFF Next End Sub Form2: Option Base 1 Dim m As Integer Dim X(10) As Single Dim Y(10) As Single Private Sub Command1_Click() 进入第三个绘图窗体Fo
18、rm1.Hide Form2.Hide Form3.Show Dim A As Single 截距 Dim B As Single 斜率 Dim c As Single Dim d As Single Dim e As Single Dim f As Single Dim W As Single Dim R As Single Dim T As Single 讨论点的个数 If Form2.Text1(5).Enabled = True Then m = 5 If Form2.Text1(6).Enabled = True Then m = 6 If Form2.Text1(7).Enable
19、d = True Then m = 7 If Form2.Text1(8).Enabled = True Then m = 8 If Form2.Text1(9).Enabled = True Then m = 9 If Form2.Text1(10).Enabled = True Then m = 10 对点的x.y坐标进行赋值 If m = 5 Then For n = 1 To 5 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 6 Then For n = 1 To 6 X(n) = Text1(n).Text
20、Y(n) = Text2(n).Text Next End If If m = 7 Then For n = 1 To 7 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 8 Then For n = 1 To 8 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 9 Then For n = 1 To 9 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 10 Then For
21、 n = 1 To 10 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If For n = 1 To m c = X(n) + c d = X(n) * X(n) + d e = X(n) * Y(n) + e f = Y(n) + f Next A = (e * c - f * d) / (c * c - m * d) 计算直线的截距 B = (c * f - m * e) / (c * c - m * d) 计算直线的斜率 打印数据方程的位置 Form3.CurrentX = 200 Form3.CurrentY = 350 For
22、m3.Print 直线斜率(B)= & B Form3.CurrentX = 200 Form3.CurrentY = 580 Form3.Print 直线截距(A)= & A Form3.CurrentX = 200 Form3.CurrentY = 810 Form3.Print 直线方程为:; Spc(3); Y= & B & X+ & A 在坐标图上打印出点来 For n = 1 To m Form3.PSet (360 + 37 * X(n), 5400 - 37 * Y(n), RGB(250, 0, 0) Next W = 5400 - 3700 * B - 37 * A R =
23、 360 + (3700 - 37 * A) / B T = 360 - 37 * A / B 将超出坐标轴的线去掉 If A = 0 Then Form3.Line (360, 5400 - 37 * A)-(4060, W) If W 5400 And B 5400 And B 0 Then Form3.Line (T, 5400)-(4060, W), &H8000000F End If End Sub 返回第一个窗体 Private Sub Command2_Click() Form1.Show Form2.Hide Form3.Hide For n = 1 To m Text1(n).Text = Text2(n).Text = Next End Sub Form 3: 结束程序 Private Sub Command1_Click() End End Sub 重新开始且将FORM2的数据清空 Private Sub Command2_Click() Form1.Show Form2.Hide Form3.Hide For n = 1 To 10 Form2.Text1(n).Text = Form2.Text2(n).Text = Next End Sub