回转体体积计算课程设计报告.docx
《回转体体积计算课程设计报告.docx》由会员分享,可在线阅读,更多相关《回转体体积计算课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
回转体体积计算课程设计报告
VisualBasic
课程设计报告
所属课程名称:
VisualBasic程序设计
课程设计题号:
42
课程设计题目:
回转体体积计算
课程设计难度:
3星
课程设计时间:
2013.3.1~4.17
学号:
912101500310
姓名:
石博博
自评成绩:
90分
南京理工大学机械工程学院
二〇一三年三月
一、程序功能
1.回转体的体积计算是数学和力学经常用到的内容,该程序是可以生成回转体并计算其体积的应用程序。
2.涉及的知识点有:
(1)多模块程序设计
(2)动态数组(3)定义数组类型。
二、课程设计的详细设计
1、总体设计思路
设计思路:
简单的回转体可以看成是由多个回转体体素构成的组合体。
回转体体素包括:
圆柱体、圆台、圆锥体、球冠和母线为圆弧的球台这五种情况。
通过对每一段的名称、体素、参数设置来进行计算并保存结果,最后将所有结果相加即可得到回转体体积。
结构框图:
2、界面设计
窗体界面截图:
Frmzjm:
包含的控件有:
按钮,文本框,标签,框架,列表框。
外观通过设置各个控件的相关属性得到。
Frmwork:
包含的控件有:
按钮,标签,列表框。
外观通过设置各个控件的相关属性得到。
3、功能模块设计
主要功能及实现算法:
1.输入段数,单击生成按钮,列表框自动生成相应的条目,如果不输入段数就单击生成按钮或者是计算按钮则会有错误提示。
此功能通过Cmdgenerate(生成按钮)的click事件、list1(段号列表框)的additem方法以及msgbox实现
2.选定某一段号,单击“体素元素“栏的其中一个单选按钮,Frame3中自动出现参数设置框,输入正确的数据单击确定按钮即可计算,通过单击计算按钮即可调出Frmwork并查看计算结果,过程中也会有相应的错误提示。
此功能通过cmdok和cmdwork的单击事件实现,其中五个单选按钮为一组控件数组,名称为option1(),index属性从1到10。
3.重置按钮和退出按钮的事件过程:
重置按钮主要是清空列表框和文本框的数据,便于重新输入数据。
三、设计中遇到的问题与解决办法
【问题1】:
当文本框中输入负数或0,或者是字母,汉字时的错误提示,以及相应的部分操作。
【解决办法】:
通过代码实现:
PrivateSubCmdgenerate_Click()
DimsAsInteger,nAsInteger
s=Val(Text1.Text)
List1.Clear
Ifs<=0Then
MsgBox"请先输入正确的回转体的特征段数。
",48,"vol"
Text1.Text=""
Else
Frame.Enabled=True
EndIf
Forn=1Tos
List1.AddItemn
List1.ListIndex=0
Option1
(1).Value=True
Next
EndSub
【问题2】:
单击不同的单选按钮时,出现与之对应的参数设置框。
【解决办法】:
预先安排chicuntxt1、chicuntxt2、chicuntxt3(输入参数的文本框)和chicun1、chicun2、chicun3(标签),当需要时把第三个的visible、enabled属性设为true,不需要时设为false,并改变其caption属性,这样就会有相应的效果了。
【问题3】:
对chicuntxt中输入的数据的判断及错误提示
【解决办法】:
类似于list1的处理,对数据进行简单的判断,例如:
IfVal(chicuntxt1.Text)=0OrVal(chicuntxt2.Text)=0Then
MsgBox"请输入正确的尺寸数据",32,"Tips"
ExitSub
EndIf
【问题4】:
定义自定义数组类型
【解决办法】:
由于之前没有接触过,所以花了很多时间去搞懂它,最后处理好了。
PrivateTypehuizhuanti'自定义数据类型(下面代表的是huizhuanti的各个属性及其数据类型)
d1AsSingle'上底
HAsSingle'高
d2AsSingle'下底
nameAsString'名称
resultAsSingle'计算结果
EndType
Privatesj()Ashuizhuanti
【问题5】:
函数的调用及表达式
【解决办法】:
对于球台的体积计算比较繁琐,于是采用了一种较为简单的方法。
我并没有对上底和下底数据进行判断,而是通过代码进行算法选择,这样较为简单。
PublicFunctionf5(aAsSingle,cAsSingle)AsSingle'定义求球台体积函数
Dimb,rsAsSingle
b=Abs(c-a)
Ifc>aThen
rs=3*pi*a*b*b+6*a*a*b+4*b*b*b
Else
rs=3*pi*c*b*b+6*c*c*b+4*b*b*b
EndIf
f5=pi/6*rs
EndFunction
【问题6】:
计算结果的输出及求和
【解决办法】:
由于将语句Frmwork.Listwork.AddItem"第"&m+1&"段"&sj(m).name&""&sj(m).result
放错了位置,而且代码中少了Preserve关键字导致结果一直未0.浪费了不少时间,最后进行了调整,实现了该功能。
四、更上一层楼
改进1.:
通过语句List1.ListIndex=0和Option1
(1).Value=True消除了漏选段号和单选按钮的可能,当然也不需要错误提示了。
改进2:
通过在Cmdgenerate的Click事件中添加语句List1.Clear,从而在输入段数后再次改动时不会在list1后面添加条目,而是直接变为后输入的条目
改进3:
IfList1.ListIndexList1.ListIndex=List1.ListIndex+1
EndIf
该代码使得计算完一段后,list1中自动选择下一段进行参数设置,避免了漏选某一段的情况。
改进4:
圆台的体积计算,我采用了数学积分法,未进行切片处理进行计算,这样相对简单。
PublicFunctionf5(aAsSingle,cAsSingle)AsSingle'定义求球台体积函数
Dimb,rsAsSingle
b=Abs(c-a)
Ifc>aThen
rs=3*pi*a*b*b+6*a*a*b+4*b*b*b
Else
rs=3*pi*c*b*b+6*c*c*b+4*b*b*b
EndIf
f5=pi/6*rs
EndFunction
五、课程设计总结
程序不足之处:
为实现可以进行改动的给你,着实遗憾
心得体会:
通过这次课程设计,我对vb的掌握程度又有了进步,也更加认识到了自己的不足之处,我很感谢有这次机会去挑战难题,我学到了很多东西。
六、源程序代码
源代码:
OptionExplicit'强制变量声明
Constpi=3.1415926'定义常量
PrivateTypehuizhuanti'自定义数据类型(下面代表的是huizhuanti的各个属性及其数据类型)
d1AsSingle'上底
HAsSingle'高
d2AsSingle'下底
nameAsString'名称
resultAsSingle'计算结果
EndType
Privatesj()Ashuizhuanti'定义自定义数组
Publicm,n,i,sAsInteger:
Publics1,s2,s3,a,b,cAsSingle
PrivateSubForm_Load()'窗体加载事件
Frame.Enabled=False'Frame不可用
EndSub
PrivateSubCmdgenerate_Click()'生成按钮的单击事件
DimsAsInteger,nAsInteger
s=Val(Text1.Text)
List1.Clear'输入数字之前先清空文本框
Ifs<=0Then
MsgBox"请先输入正确的回转体的特征段数。
",48,"vol"
Text1.Text=""
Else
Frame.Enabled=True'Frame变为可用
EndIf
Forn=1Tos
List1.AddItemn
List1.ListIndex=0'自动选定第一段
Option1
(1).Value=True'自动选定的一个按钮
Next
EndSub
PrivateSubCmdexit_Click()'结束
End
EndSub
PrivateSubCmdreset_Click()'重置
Text1.Text=""
List1.Clear
Frmwork.Listwork.Clear
Frame.Enabled=False
Callqingkong'函数的调用
EndSub
PrivateSubCmdok_Click()'单击确定按钮
Dima,iAsInteger
s=Val(Text1.Text)
ReDimPreservesj(0Tos-1)'加Preserve关键字不会清空之前的数据
m=List1.ListIndex
s1=chicuntxt1.Text
s2=chicuntxt2.Text
s3=chicuntxt3.Text
IfOption1
(1)Then'圆柱体的尺寸
IfVal(chicuntxt1.Text)=0OrVal(chicuntxt2.Text)=0Then
MsgBox"请输入正确的尺寸数据",32,"Tips"
ExitSub
EndIf
sj(m).name="圆柱体"
sj(m).d1=s1
sj(m).H=s2
sj(m).result=f1(sj(m).d1,sj(m).H)
ElseIfOption1
(2)Then'圆台的尺寸
IfVal(chicuntxt1.Text)=0OrVal(chicuntxt2.Text)=0OrVal(chicuntxt3.Text)=0Then
MsgBox"请输入正确的尺寸数据",32,"Tips"
ExitSub
EndIf
sj(m).name="圆台"
sj(m).d1=s1
sj(m).H=s2
sj(m).d2=s3
sj(m).result=f2(sj(m).d1,sj(m).H,sj(m).d2)
ElseIfOption1(3)Then'圆锥体的尺寸
IfVal(chicuntxt1.Text)=0OrVal(chicuntxt2.Text)=0Then
MsgBox"请输入正确的尺寸数据",32,"Tips"
ExitSub
EndIf
sj(m).name="圆锥体"
sj(m).d1=s1
sj(m).H=s2
sj(m).result=f3(sj(m).d1,sj(m).H)
ElseIfOption1(4)Then'球冠的尺寸
IfVal(chicuntxt1.Text)=0OrVal(chicuntxt2.Text)=0Then
MsgBox"请输入正确的尺寸数据",32,"Tips"
ExitSub
EndIf
sj(m).name="球冠"
sj(m).d1=s1
sj(m).H=s2
sj(m).result=f4(sj(m).d1,sj(m).H)
Else'球台的尺寸
IfVal(chicuntxt1.Text)=0OrVal(chicuntxt2.Text)=0Then
MsgBox"请输入正确的尺寸数据",32,"Tips"
ExitSub
EndIf
sj(m).name="球台"
sj(m).d1=s1
sj(m).d2=s2
sj(m).result=f5(sj(m).d1,sj(m).d2)
EndIf
Frmwork.Listwork.AddItem"第"&m+1&"段"&sj(m).name&""&sj(m).result
Callqingkong'函数的调用
IfList1.ListIndexList1.ListIndex=List1.ListIndex+1
EndIf
EndSub
PrivateSubCmdwork_Click()
Form=0Tos-1
Ifsj(m).result=0Then
MsgBox"第"&m+1&"段未指定尺寸",48,"错误"
EndIf
Next
DimzongAsSingle'计算总体积
Form=0Tos-1
zong=zong+sj(m).result
Next
Frmwork.Listwork.AddItem"__________________________________________"
Frmwork.Listwork.AddItem"总体积"&zong
LoadFrmwork
Frmwork.Show
UnloadFrmjm
EndSub
PrivateSubOption1_Click(indexAsInteger)'显示不同的外观,用于输入不同的体素的尺寸
IfOption1
(1)Then
chicun1.Caption="底面直径"
chicun2.Caption="圆柱高度"
chicun3.Visible=False
chicuntxt3.Visible=False
ElseIfOption1
(2)Then
chicun1.Caption="下底直径"
chicun2.Caption="圆台高度"
chicun3.Caption="上底直径"
chicun3.Enabled=True
chicuntxt3.Enabled=True
chicun3.Visible=True
chicuntxt3.Visible=True
ElseIfOption1(3)Then
chicun1.Caption="底面直径"
chicun2.Caption="圆锥高度"
chicun3.Visible=False
chicuntxt3.Visible=False
ElseIfOption1(4)Then
chicun1.Caption="底面直径"
chicun2.Caption="球冠高度"
chicun3.Visible=False
chicuntxt3.Visible=False
ElseIfOption1(5)Then
chicun1.Caption="小端半径"
chicun2.Caption="大端半径"
chicun3.Visible=False
chicuntxt3.Visible=False
EndIf
EndSub
'以下是函数过程
PublicFunctionf1(aAsSingle,bAsSingle)AsSingle
f1=pi/4*a*a*b
EndFunction
PublicFunctionf2(aAsSingle,bAsSingle,cAsSingle)AsSingle
f2=pi/12*b*(a*a+a*b+b*b)
EndFunction
PublicFunctionf3(aAsSingle,bAsSingle)AsSingle
f3=pi/12*a*a*b
EndFunction
PublicFunctionf4(aAsSingle,bAsSingle)AsSingle
f4=pi/6*b*(3*a*a/4+b*b)
EndFunction
PublicFunctionf5(aAsSingle,cAsSingle)AsSingle'定义求球台体积函数(数学积分法)
Dimb,rsAsSingle
b=Abs(c-a)
Ifc>aThen'根据大径和小径的大小关系选择不同的算法
rs=3*pi*a*b*b+6*a*a*b+4*b*b*b
Else
rs=3*pi*c*b*b+6*c*c*b+4*b*b*b
EndIf
f5=pi/6*rs
EndFunction
PublicFunctionqingkong()'函数过程,由于清空文本框
chicuntxt1.Text=""
chicuntxt2.Text=""
chicuntxt3.Text=""
EndFunction