vb黄兰计算器.docx
《vb黄兰计算器.docx》由会员分享,可在线阅读,更多相关《vb黄兰计算器.docx(23页珍藏版)》请在冰豆网上搜索。
vb黄兰计算器
Vb程序设计
软件工程课程设计报告
《简单计算器的设计》
专业:
机械类
班级:
13级
学号:
1308020111
姓名:
黄兰
指导教师:
翟任何
第一章系统简介-3-
1.1课程设计名称-3-
1.2任务要求-3-
1.3开发环境-3-
第二章可行性分析-3-
2.1技术可行性-3-
2.2经济可行性-3-
2.3系统流程图-3-
第三章需求分析-4-
3.1确定对系统的综合要求-4-
3.2分析系统的数据要求-5-
第四章总体设计-5-
4.1设想供选择的方案及选择合理方案-5-
4.2设计软件结构图-5-
第五章详细设计及代码实现-6-
5.1结构程序设计-6-
5.2界面设计-6-
5.3过程设计-7-
5.3.1主程序的设计-7-
5.3.20-9的数字键设计-10-
5.3.3运算符号键设计-10-
5.3.4其他功能键设计-12-
5.3.5其他辅助设计-15-
第六章调试分析过程描述-16-
6.1利用vb的调试进行-16-
6.2易错边界点调试-17-
第一章系统简介
1.1课程设计名称
1、课程设计名称《简单科学计算器的设计》
1.2任务要求
简单计算器主要有一下几个任务:
1.具有小数点后10位以上的精度。
2.可以输入0~9、00、小数点等数字或数学符号,并能对数字取反。
3.能够计算加、减、乘、除四则运算。
4.可以计算倒数、开方、百分运算。
1.3开发环境
科学计算器主要在visualbasic6.0中开发。
由于vb的开发要简单好用,同时为了学习vb的程序编制。
第二章可行性分析
2.1技术可行性
前辈们已经做过的,市面上有很多的计算器。
使用vb6.0能够实现这个软件的编程。
2.2经济可行性
这个经济效益肯定不超过其开发的成本。
但是开发成本低,周期短。
主要用于练习vb编程。
2.3系统流程图
第三章需求分析
3.1确定对系统的综合要求
1.功能需求:
这个功能实现是的能够实现简单的运算,同时适用于记账的简单功能。
不需要太强大的功能。
2.性能需求:
计算速度快,计算出错率低,用户使用习惯的符合,操作简单。
3.可靠性和可用性需求:
在计算一百万次不发生错误。
在win7系统32位的电脑中程序崩溃每5000次出现一次。
4.出错处理:
提示用户在什么系统下正确安装,提示用户正确的使用方法。
3.2分析系统的数据要求
这里只有简单的数学运算并没有复杂的数据转换是很小型的系统软件。
第四章总体设计
4.1设想供选择的方案及选择合理方案
由于市面上有很多成熟的计算器程序,但是要使用最简单的,最能体现在买卖中的所运用的计算就可以了,让用户可以很好的去操作。
在需求分析中已经知道了所需要的功能。
因此这里,只有选择前面的方案。
先利用vb去实现再利用Java实现跨平台。
4.2设计软件结构图
第五章详细设计及代码实现
5.1结构程序设计
5.2界面设计
5.3过程设计
5.3.1主程序的设计
第一步给所有的用上的都定义和赋值,解释:
'''operand----------------------------操作数
'''Calculation-------------------------计算
'''operationsymbols---------------运算符号
'''decimal----------------------------小数点
'''plus---------------------------------加
'''minus------------------------------减
'''multiply----------------------------乘
'''divide-------------------------------除
'''Percent------------------------------百分比
'''equalto----------------------------等于
'''amount------------------------------合计;等同,接近
'''inverse;reciprocal-------------------------------倒数
'''SquareRoot-------------------------------------平方根
DimLastInputAsString'上次输入操作的类别
DimNumOperandAsInteger'操作数数量
DimOperationSymbolsAsString'运算符号
DimDecimalFlag'小数点状态
DimOperation_1'操作数1的值
DimOperation_2'操作数2的值
DimTimeAsInteger'0的使用次数
第二步对操作数赋值,满足条件则可以运算:
'***************对操作数赋值,满足条件则可以运算
PrivateSubChooseOperand()
IfLastInput="数字"Then
NumOperand=NumOperand+1
EndIf
SelectCaseNumOperand
Case1
Operation_1=LabelOut.Caption
Case2
Operation_2=LabelOut.Caption
Calculation
EndSelect
IfLastInput<>"运算符号"Then
LastInput="运算符号"
EndIf
DecimalFlag=False
EndSub
第三步定义简单运算通用过程Calculation():
'***************定义简单运算通用过程Calculation()
PrivateSubCalculation()
SelectCaseOperationSymbols
Case"+"
Operation_1=Val(Operation_1)+Val(Operation_2)
Case"-"
Operation_1=Val(Operation_1)-Val(Operation_2)
Case"*"
Operation_1=Val(Operation_1)*Val(Operation_2)
Case"/"
IfVal(Operation_2)=0Then
Operation_1="ERROR!
除数不能为零!
"
Beep
Else
Operation_1=Val(Operation_1)/Val(Operation_2)
EndIf
Case"="
Operation_1=Operation_2
CaseElse
EndSelect
LabelOut.Caption=Operation_1'结果输出
NumOperand=1'操作数个数置1
DecimalFlag=False
Time=0
EndSub
第四步定义处理数字按钮过程:
'***************定义处理数字按钮过程
PrivateSubNumber(numAsInteger)
IfTime<>0AndVal(LabelOut.Caption)=0AndDecimalFlag=FalseThen
LabelOut.Caption=""
EndIf
IfLastInput<>"数字"Then
LabelOut.Caption="."
EndIf
IfDecimalFlagThen
IfLeft(LabelOut.Caption,1)="."AndLastInput="运算符号"Then
LabelOut.Caption=""
EndIf
LabelOut.Caption=LabelOut.Caption&num
Else
Tmp=LabelOut.Caption
IfVal(Tmp)=0Then
LabelOut.Caption=num&"."
Else
Tmp=Left(Tmp,Len(Tmp)-1)
LabelOut.Caption=Tmp&num&"."
EndIf
EndIf
Tmp=""
LastInput="数字"
EndSub
第五步接受键盘输入的运算操作:
'*****************接受键盘输入的运算操作
PrivateSubForm_KeyPress(KeyAsciiAsInteger)
SelectCaseKeyAscii
Case8'退格键
CallCommandBackSpace_Click
Case37'%百分号
CallCommandPercent_Click
Case42'*号
CallCommandMultiply_Click
Case43'+号
CallCommandPlus_Click
Case45'-号
CommandMinus.Value=True
'CallCommandMinus_Click'与CommandMinus.Value=True作用相同
Case46'小数点
CallCommandDecimal_Click
Case47'/号
CallCommandDivide_Click
CaseAsc(0)'48为字符零的Ascii值
CallCommand0_Click
'Command0.Value=True‘与CallCommand0_Click作用相同
CaseAsc(0)ToAsc(9)'49To57数字键1至9的Ascii值
Char=Chr(KeyAscii)
Number(Char)
Case61'=键
CallCommandEqual_Click
EndSelect
EndSub
这是最关键的主程序,这是这个计算器的核心,把主程序写好后后面的工作就很好完成了。
5.3.20-9的数字键设计
'***************数字键1至9
PrivateSubCommand_Click(IndexAsInteger)
CallNumber(Index)
'Number(Index)
EndSub
'***************数字键0
PrivateSubCommand0_Click()
IfVal(LabelOut.Caption)=0AndDecimalFlag=FalseThen
Time=Time+1
EndIf
IfTime>=2Then
Else
Number(0)
EndIf
EndSub
5.3.3运算符号键设计
'***************加法
PrivateSubCommandPlus_Click()
CallChooseOperand
OperationSymbols="+"
EndSub
'***************减法;负号
PrivateSubCommandMinus_Click()
CallChooseOperand
OperationSymbols="-"
EndSub
'***************乘法
PrivateSubCommandMultiply_Click()
CallChooseOperand
OperationSymbols="*"
EndSub
'**************除法
PrivateSubCommandDivide_Click()
CallChooseOperand
OperationSymbols="/"
EndSub
'*************求平方根
PrivateSubCommandSquareRoot_Click()
IfVal(LabelOut.Caption)<0Then
Operation_1="ERROR!
被开方数不能为负值!
"
Beep
Else
Operation_1=Sqr(Val(LabelOut.Caption))
EndIf
LabelOut.Caption=Operation_1
EndSub
'*************当前操作数的百分比
PrivateSubCommandPercent_Click()
IfOperationSymbols="="OrLastInput="数字"Then
SelectCaseNumOperand
Case1
IfOperationSymbols="/"AndVal(LabelOut.Caption)=0Then
Calculation
Else
Operation_2=LabelOut.Caption
Calculation
Var=Val(LabelOut.Caption)
Var=Var/100
LabelOut.Caption=Str(Var)
EndIf
CaseElse
Var=Val(LabelOut.Caption)
Var=Var/100
LabelOut.Caption=Str(Var)
EndSelect
NumOperand=0
EndIf
EndSub
'****************求倒数,用除法
PrivateSubCommandReciprocal_Click()
IfLastInput="数字"Then
NumOperand=NumOperand+1
EndIf
SelectCaseNumOperand
Case1
Operation_1=LabelOut.Caption
Case2
Operation_2=LabelOut.Caption
Calculation
EndSelect
IfNumOperand=0And(LastInput="无"OrLastInput="负值"OrOperationSymbols<>"")Then
Else
Operation_2=Operation_1
Operation_1=1
OperationSymbols="/"
Calculation
NumOperand=0
OperationSymbols=""
EndIf
EndSub
'*************等于
PrivateSubCommandEqual_Click()
CallChooseOperand
OperationSymbols="="
EndSub
5.3.4其他功能键设计
'***************正负号键转化
PrivateSubCommandSign_Click()
IfLastInput<>"负值"AndLeft(LabelOut.Caption,1)<>"-"Then
Tmp=LabelOut.Caption
LabelOut.Caption="-"&Tmp
Tmp=""
LastInput="数字"
EndIf
EndSub
'***************小数点插入,实现小数
PrivateSubCommandDecimal_Click()
IfLastInput="无"OrLastInput="运算符号"Then
LabelOut.Caption="0."
ElseIfLastInput="负值"Then
LabelOut.Caption="-0."
ElseIfLastInput="数字"Then
IfDecimalFlagThen
EndIf
IfNotDecimalFlagThen
Tmp=LabelOut.Caption
IfRight(Tmp,1)="."Then
Else
Tmp=Tmp&"."
EndIf
LabelOut.Caption=Tmp
Tmp=""
EndIf
EndIf
DecimalFlag=True
LastInput="数字"
EndSub
'**************退格键
PrivateSubCommandBackSpace_Click()
Tmp=LabelOut.Caption
IfOperation_1=0Then
IfLen(Tmp)=0OrLen(Tmp)=2Then
Tmp="0."
EndIf
IfLen(Tmp)>2Then
SelectCaseRight(Tmp,1)
Case"."
IfLen(Tmp)=6AndLeft(Tmp,1)="-"Then
Tmp="0."
ElseIfLen(Tmp)=4Then
Tmp="0."
Else
Tmp=Left(Tmp,Len(Tmp)-3)
Tmp=Tmp+"."
EndIf
CaseElse
IfLen(Tmp)<=4AndLeft(Tmp,1)="-"Then
Tmp="0."
Else
Tmp=Left(Tmp,Len(Tmp)-2)
EndIf
EndSelect
EndIf
Else
IfLen(Tmp)=0OrLen(Tmp)=1Then
Tmp="0."
EndIf
IfLen(Tmp)>1Then
SelectCaseRight(Tmp,1)
Case"."
IfLen(Tmp)=3AndLeft(Tmp,1)="-"Then
Tmp="0."
ElseIfLen(Tmp)=2Then
Tmp="0."
Else
Tmp=Left(Tmp,Len(Tmp)-2)
Tmp=Tmp+"."
EndIf
CaseElse
IfLen(Tmp)<=2AndLeft(Tmp,1)="-"Then
Tmp="0."
Else
Tmp=Left(Tmp,Len(Tmp)-1)
EndIf
EndSelect
EndIf
EndIf
IfTmp="."ThenTmp="0."
LabelOut.Caption=Tmp
EndSub
'**************当前显示结果置零
PrivateSubCommandCE_Click()
LabelOut.Caption="0."
DecimalFlag=False
LastInput="运算符号"
EndSub
'**************再次初始化窗体Form
PrivateSubCommandC_Click()
Form_Load
EndSub
'***************设定变量、窗体和控件的值
PublicSubClearData()
LabelOut.Caption="0."
LastInput="无"
NumOperand=0
OperationSymbols=""
DecimalFlag=False
Time=0
Operation_1=""
Operation_2=""
LabelOut.BackColor=vbBlack
LabelOut.ForeColor=vbGreen
LabelOut.FontSize=12
LabelOut.AutoSize=False
Form1.KeyPreview=True
EndSub
5.3.5其他辅助设计
'**************当前显示结果置零
PrivateSubCommandCE_Click()
LabelOut.Caption="0."
DecimalFlag=False
LastInput="运算符号"
EndSub
'**************再次初始化窗体Form
PrivateSubCommandC_Click()
Form_Load
EndSub
'***************设定变量、窗体和控件的值
PublicSubClearData()
LabelOut.Caption="0."
LastInput="无"
NumOperand=0
OperationSymbols=""
DecimalFlag=False
Time=0
Operation_1=""
Operation_2=""
LabelOut.BackColor=vbBlack
LabelOut.ForeColor=vbGreen
LabelOut.FontSize=12
LabelOut.AutoSize=False
Form1.KeyPreview=True
EndSub
'***************初始化窗体,设置变量及参数状态
'(本程序目前未使用菜单项功能,如工具、帮助、编辑;运行时可以用箭头键来调整默认的按钮,进而可用Enter键来按下它)
PrivateSubForm_Load()
CallClearData
EndSub
第六章调试分析过程描述
6.1利用vb的调试进行
1.做逐语句调试
没有问题
2.做逐过程分析
分析出来没有问题
6.2易错边界点调试
1.用函数1-1.2=
0点无法输出
2.用正负号转换按钮不能转换,不过简单功能能够实现不影响使用