(vb课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
)表达式计算器设计
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
表达式计算器课程设计报告,VB, 编号,21
表达式计算器设计报告
学院 材料学院 班级 材料074班 学号 072018 姓名 姜枭特 成绩
一、设计思路
1.要达到的目的
?输入一个简单的四则运算公式,能够正确进行运算并输出最后结果。
?支持运算符的优先级,对于同一级别运算,按先算左边,后算右边的顺序。
?支持平方、多种常用数学函数的混合运算。
?支持对括号的运算处理,包括多括号及括号嵌套。
?能够输出详细的运算过程及每一步运算的结果。
2.关键问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的解决
?建立一个名为f1的函数,单独对一个只含四则运算符以及平方符号的表达式进行运算,其值作为f1的值。 ?在函数中先设置一个数组D()分离操作数和运算符,并分别储存。
?通过Mid函数和if语句判断”-“是负数含义还是减法运算符含义,同时处理了”+-*/^”与”-“放在一起的情况。 根据各运算符的优先级通过DO循环分别计算结果,并重新整理数组并储存,最后做加减运算,并实现对于
。 同一级别运算,先算左边,后算右边,最后将值赋给f1
?再建立一个名为f2的函数,进行括号运算操作,通过Instr和InstrRev函数以及Mid函数提取出括号内的函数,建立新的表达式,再调用f1计算新表达式的值。通过以上循环实现多括号以及括号嵌套的运算。 ?通过DO循环,利用Instr、Mid函数提取函数括号内的表达式,调用f1进行计算,再将其值进行函数运算,再将运算值与其他部分拼接,实现abs()、sqr()等多函数的计算。
?通过ListBox控件,用多个AddItem语句实现各运算步骤的详细输出。
?通过查找和判断进行边界情况的讨论,使其更加人性化。
二、模块之间的调用关系,或程序流程图
表达式计算器课程设计报告,VB, 编号,21
用户输入表达式
查找数学函数 输出
ListBox 调用f1函数
ListBox 得到新的表达式 输出
查找完毕
调用f2函数
ListBox 输出 查找括号并调用f1函数
得到新的表达式
得到结果
三、部分程序关键源代码及注释
Public Function f1(ByVal Exp As String) As String '构造函数对只含四则运算符以及平方符号的表达式进行运算
Dim a As Integer, Num As Integer, D() As String, b As String, i As Integer, p As Integer, k As Integer
p = 0 '原符号位
Num = 0
b = Exp
For i = 2 To Len(b)
Select Case Mid(b, i, 1)
Case "+", "-", "*", "/", "^" '如果当前位和原符号位相邻,则判断为负数,而不是减法运算符
If i - p > 1 Then
Num = Num + 2
ReDim Preserve D(0 To Num) '分离操作数和运算符
D(Num - 1) = Mid(b, p + 1, i - p - 1)
D(Num) = Mid(Exp, i, 1)
p = i
Else
If Mid(b, i, 1) <> "-" Then
f1 = "F" '标记”F”,使ListBox显示"非法表达式,请重新输入"
Exit Function
End If
End If
Case Else
End Select
Next i
Num = Num + 1
表达式计算器课程设计报告,VB, 编号,21
ReDim Preserve D(0 To Num) '储存最后一项
D(Num) = Mid(b, p + 1)
'先计算平方:
Do
a = 0 '记录算式中有无平方号
For i = 2 To Num - 1 Step 2
If D(i) = "^" Then
If D(i - 1) < 0 Then
D(i - 1) = "-" & CStr(Val(D(i - 1)) ^ Val(D(i + 1)))
Else
D(i - 1) = CStr(Val(D(i - 1)) ^ Val(D(i + 1)))
End If
Num = Num – 2 '整理
For k = i To Num
D(k) = D(k + 2)
Next
u = "" '输出计算步骤
For j = 1 To Num
u = u & D(j)
Next
List1.AddItem CStr(u)
a = 1
Exit For
End If
Next
Loop Until a = 0
再计算乘除:
Do
a = 0 '记录算式中有无乘除号
For i = 2 To Num - 1 Step 2
If D(i) = "*" Or D(i) = "/" Then
If D(i) = "*" Then
D(i - 1) = CStr(Val(D(i - 1)) * Val(D(i + 1)))
End If
If D(i) = "/" Then
If Val(D(i + 1)) <> 0 Then
D(i - 1) = CStr(Val(D(i - 1)) / Val(D(i + 1)))
Else '除数为零
f1 = "F"
Exit Function
End If
End If
Num = Num – 2 '整理
For k = i To Num
D(k) = D(k + 2)
Next
e = ""
表达式计算器课程设计报告,VB, 编号,21
For j = 1 To Num
e = e & D(j)
Next
List1.AddItem CStr(e)
a = 1
Exit For
End If
Next
Loop Until a = 0
'做加减运算:
If Num > 1 Then
For i = 2 To Num Step 2
If D(i) = "+" Then
D(1) = CStr(Val(D(1)) + Val(D(i + 1)))
x = D(1)
For j = i + 2 To Num
x = x & D(j)
Next
List1.AddItem CStr(x)
Else
D(1) = CStr(Val(D(1)) - Val(D(i + 1)))
x = D(1)
For j = i + 2 To Num
x = x & D(j)
Next
List1.AddItem CStr(x)
End If
Next
End If
f1 = D(1)
Public Function f2(ByVal Exp As String) As String '构造函数,处理括号内的运算
Dim a As Integer, c As String, b As String, p1 As Integer, p2 As Integer
b = Exp
Do
p1 = InStrRev(b, "(", -1, vbTextCompare)
If p1 > 0 Then
p2 = InStr(p1, b, ")", vbTextCompare)
If p2 > p1 Then
If p1 > 1 Then
Select Case Mid(b, p1 - 1, 1)
Case "+", "-", "*", "/", "^", "(" '讨论边界情况
a = 1
Case Else
f2 = "F"
Exit Function
End Select
End If
表达式计算器课程设计报告,VB, 编号,21
If p2 < Len(b) Then
Select Case Mid(b, p2 + 1, 1)
Case "+", "-", "*", "/", "^", ")" '讨论边界情况
a = 1
Case Else
f2 = "F"
Exit Function
End Select
End If
c = Mid(b, p1 + 1, p2 - p1 - 1) '提取括号内的表达式
c = f1(c) '计算括号内的表达式的值
If c <> "F" Then
b = Left$(b, p1 - 1) + c + Mid$(b, p2 + 1) '构造新的表达式
Else '非法表达式
f2 = "F"
Exit Function
End If
Else '括号不配对
f2 = "F"
Exit Function
End If
Else
a = 0
End If
Loop Until a = 0
f2 = f1(b)
End Function
计算几种常用函数:
Do
c = 0
p = InStr(1, Text1.Text, "abs", vbTextCompare)
If p <> 0 Then
m = InStr(p, Text1.Text, ")", vbTextCompare)
n = Mid(Text1.Text, p + 4, m - p - 4) '提取函数括号内的表达式 c = f1(n) '调用f1计算
q = Abs(c)
Text1.Text = Left$(Text1.Text, p - 1) & q & Mid$(Text1.Text, m + 1)
List1.AddItem CStr(Text1.Text) '输出步骤
Else
c = 1
End If
Loop Until c = 1
输出:
If f2(Text1.Text) = "F" Then List1.AddItem "非法表达式,请重新输入"
Else
List1.Clear
表达式计算器课程设计报告,VB, 编号,21 Text2.Text = f2(Text1.Text)
End If
If Text1.Text = "" Then
List1.AddItem "请输入表达式", 0
End If
四、
设计方案
关于薪酬设计方案通用技术作品设计方案停车场设计方案多媒体教室设计方案农贸市场设计方案
的完善及目前存在的问题
1(设计
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
要完善的地方
?更多的特殊情况需要讨论,如不完整的表达式以及中文的判别。
?函数括号内的表达式能支持更加复杂的表达式。
?能支持更多的数学函数和运算符。
?界面应该更加人性化。
2. 目前存在的问题
?对有些不完整表达式不能进行很好的判断。
?函数括号内的表达式不能带有括号,不能函数嵌套。
?只支持特定的数学函数。
五、本次设计的收获及心得体会
?本次设计更多的还是基于课本上的知识,所以学好课本上的知识才是硬道理。 ?虽然课题的难度较大,但只要充分发挥人的主观能动性,专心思考问题,还是能找到出路的。 ?查阅相关资料,请教老师及同学,从中都能获得知识和经验,而且省下了不少时间。 ?更重要的是在设计中一些掌握了比较深层的技术和技巧,能举一反三,为以后的应用做好准备。 ?及时发现自己的不足,以后应更加努力,多涉及编程的领域,掌握一门相关的技术。 六、对该题目和VB设计的意见和建议
1. 对该题目的意见和建议
本次题目所主要涉及的领域比较少,技术性比较单一,除了对字符串的操作比较耐人寻味以外,没有更加新颖和创新的方面,
所以本题目的扩展方向还有很多,能创新的地方还有不少。希望下次能对要求有所创新,比如对控件的使用,使其界面更加人性化,以及增设更多的功能。
2(对本次设计的意见和建议
1.VB设计时最好能提供更多有关的有针对性的书籍资料,以方便设计者在短期之内能有所建树。 2.由于时间的限制,限制了设计者更多的创新机会,如有条件,最好增加设计的时间。 3.增加学生和老师的交流,老师尽可能多的提供多种解决方案,既使设计者有路可寻,也能开阔视野。