第02讲简易计算器的设计.docx
《第02讲简易计算器的设计.docx》由会员分享,可在线阅读,更多相关《第02讲简易计算器的设计.docx(16页珍藏版)》请在冰豆网上搜索。
第02讲简易计算器的设计
第02讲计算器
2.1计算器简介
大家都知道,计算器是日常生活中不可缺少的一个工具,在Microsoft的Windows操作系统中,附带了一个计算器程序,有标准型和科学型两种模式。
WindowsXP下的标准型和科学型计算器程序分别如图2-1和图2-2所示。
图2-1WindowsXP下的标准型计算器
图2-2WindowsXP下的科学型计算器
Windows操作系统下附带的计算器程序功能相当的强大,本课我们将模仿Windows的计算器,使用VisualC#2005开发平台开发一个功能相对简单的计算器应用程序,它能完成加、减、乘、除运算。
接下来详细的介绍简易计算器的设计方法和步骤。
2.2界面设计及属性设置
用户界面设计是软件开发中非常重要的一个部分,用户界面的好坏直接影响软件的质量,本节将介绍如何设计简易计算器的用户界面以及界面上各控件的属性设置。
2.2.1界面设计
打开VisualStudio2005开发工具,新建一个Windows应用程序,然后在窗体上依次放置1个TextBox和17个Button控件,如图2-1所示(设置好属性后)。
图2-1计算器用户界面
2.2.2属性设置
窗体和各控件的属性设置如表2-1所示。
表2-1窗体和各控件的属性
控件类型
控件名称
属性
设置结果
Form
Form1
Text
计算器
StartPosition
CenterScreen
MaximizeBox
False
AutoSizeMode
GrowAndShrink
TextBox
TextBox1
Name
txtReadout
ReadOnly
True
Button
Button1
Name
btnNum7
Text
7
Button2
Name
btnNum8
Text
8
Button3
Name
btnNum9
Text
9
Button4
Name
btnAdd
Text
+
ForeColor
Red
Button5
Name
btnSub
Text
-
ForeColor
Red
Button6
Name
btnNum4
Text
4
Button7
Name
btnNum5
Text
5
Button8
Name
btnNum6
Text
6
Button9
Name
btnMul
Text
*
ForeColor
Red
Button10
Name
btnDiv
Text
/
ForeColor
Red
Button11
Name
btnNum1
Text
1
Button12
Name
btnNum2
Text
2
Button13
Name
btnNum3
Text
3
Button14
Name
btnNum0
Text
0
Button15
Name
btnDot
Text
.
Button16
Name
btnC
Text
C
ForeColor
Red
Button17
Name
btnAmount
Text
=
ForeColor
Red
2.3编写代码
本程序需要用到一些公共变量,例如用来接收操作数、运算结果,判断输入的是否为小数等,因此首先在代码的通用段声明以下变量:
//******************************************************************
doublenum1,num2,result;//操作数及运算结果
booldecimalFlag=false;//判断输入的是否为小数
stringmyOperator;//操作类型
//******************************************************************
接下来编写一个名为“NumClick”的方法,单击数字按钮时,调用NumClick方法,将输入的数字追加到文本框中,代码如下:
//******************************************************************
//单击数字按钮时,调用如下NumClick方法
//******************************************************************
publicvoidNumClick(intmyNumber)
{
if(decimalFlag)//输入小数
{
txtReadout.Text=txtReadout.Text+myNumber;
}
else
{
if(txtReadout.Text=="0.")//输入整数
{
//输入的是整数的第一个数字
txtReadout.Text=myNumber+".";
}
else
{
//输入的不是整数的第一个数字
txtReadout.Text=txtReadout.Text.Substring
(0,txtReadout.Text.Length-1)+myNumber+".";
}
}
}
//******************************************************************
//******************************************************************
编写窗体的载入事件代码如下:
//******************************************************************
//窗体载入事件代码
//******************************************************************
privatevoidForm1_Load(objectsender,EventArgse)
{
txtReadout.Text="0.";
//指定文本框的对齐方式为右对齐
txtReadout.TextAlign=HorizontalAlignment.Right;
}
//******************************************************************
//******************************************************************
编写数字按钮【0】~【9】的单击事件代码如下:
//******************************************************************
//数字按钮【0】~【9】的单击事件代码
//******************************************************************
privatevoidbtnNum0_Click(objectsender,EventArgse)
{
NumClick(0);
}
privatevoidbtnNum1_Click(objectsender,EventArgse)
{
NumClick
(1);
}
privatevoidbtnNum2_Click(objectsender,EventArgse)
{
NumClick
(2);
}
privatevoidbtnNum3_Click(objectsender,EventArgse)
{
NumClick(3);
}
privatevoidbtnNum4_Click(objectsender,EventArgse)
{
NumClick(4);
}
privatevoidbtnNum5_Click(objectsender,EventArgse)
{
NumClick(5);
}
privatevoidbtnNum6_Click(objectsender,EventArgse)
{
NumClick(6);
}
privatevoidbtnNum7_Click(objectsender,EventArgse)
{
NumClick(7);
}
privatevoidbtnNum8_Click(objectsender,EventArgse)
{
NumClick(8);
}
privatevoidbtnNum9_Click(objectsender,EventArgse)
{
NumClick(9);
}
//******************************************************************
//******************************************************************
编写小数点按钮【.】的单击事件代码如下:
//******************************************************************
//【.】按钮的单击事件代码
//******************************************************************
privatevoidbtnDot_Click(objectsender,EventArgse)
{
decimalFlag=true;//输入小数点
}
//******************************************************************
//******************************************************************
编写复位按钮【C】的单击事件代码如下:
//******************************************************************
//【C】按钮的单击事件代码
//******************************************************************
privatevoidbtnC_Click(objectsender,EventArgse)
{
num1=0;
num2=0;
txtReadout.Text="0.";
decimalFlag=false;
}
//******************************************************************
//******************************************************************
编写【+】、【-】、【*】、【/】按钮的单击事件代码如下:
//******************************************************************
//【+】、【-】、【*】、【/】按钮的单击事件代码
//******************************************************************
privatevoidbtnAdd_Click(objectsender,EventArgse)
{
myOperator="add";
num1=double.Parse(txtReadout.Text);
txtReadout.Text="0.";
decimalFlag=false;
}
privatevoidbtnSub_Click(objectsender,EventArgse)
{
myOperator="Sub";
num1=double.Parse(txtReadout.Text);
txtReadout.Text="0.";
decimalFlag=false;
}
privatevoidbtnMul_Click(objectsender,EventArgse)
{
myOperator="Mul";
num1=double.Parse(txtReadout.Text);
txtReadout.Text="0.";
decimalFlag=false;
}
privatevoidbtnDiv_Click(objectsender,EventArgse)
{
myOperator="Div";
num1=double.Parse(txtReadout.Text);
txtReadout.Text="0.";
decimalFlag=false;
}
//******************************************************************
//******************************************************************
最后编写【=】按钮的单击事件代码如下:
//******************************************************************
//【=】按钮的单击事件代码
//******************************************************************
privatevoidbtnAmount_Click(objectsender,EventArgse)
{
num2=double.Parse(txtReadout.Text);
switch(myOperator)
{
case"add":
result=num1+num2;
txtReadout.Text=result.ToString();
break;
case"Sub":
result=num1-num2;
txtReadout.Text=result.ToString();
break;
case"Mul":
result=num1*num2;
txtReadout.Text=result.ToString();
break;
case"Div":
if(num2==0)
{
txtReadout.Text="除数不能为“0”!
";
}
else
{
result=num1/num2;
txtReadout.Text=result.ToString();
}
break;
}
}
//******************************************************************
//******************************************************************
2.4运行结果
运行程序,计算加法“23+1.8”,结果如图2-4所示。
图2-4加法运算
单击【C】按钮,再计算减法“2.3-18”,结果如图2-5所示。
图2-5减法运算
单击【C】按钮,再计算乘法“2.3×1.8”,结果如图2-6所示。
图2-6乘法运算
单击【C】按钮,再计算除法“23.18÷0”,结果如图2-7所示。
图2-7除数为“0”的除法运算
单击【C】按钮,再计算除法“2.3÷1.8”,结果如图2-8所示。
图2-8除法运算
作业2
一、选择题
1.若要使窗体在运行时,用户不可以使用鼠标托拽窗体边缘的方法来改变窗体的大小,应当将窗体的()属性设为“GrowAndShrink”。
A.MaximizeBoxB.MinimizeBox
C.StartPositionD.AutoSizeMode
2.在VisualC#2005中,用于连接两个字符串的运算符是()。
A.@B.&
C.+D.~
3.确定文本框控件中文本对齐方式的属性是()。
A.TextAlignB.Text
C.ReadOnlyD.Anchor
4.Substring()用于()。
A.清除字串前后所有空格
B.截取字符串的一部分
C.获取字符串的长度
D.将字符串中的子字符串替换成另外一个字符串
二、填空题
1.用于确定窗体第一次出现时的位置的属性是。
2.用于确定窗体标题栏的右上角的最小化按钮是否可用的属性是。
三、问答题
1.解释代码:
//******************************************************************
txtReadout.Text=txtReadout.Text.Substring
0,txtReadout.Text.Length-1)+myNumber+".";
//******************************************************************
2.解释代码:
//******************************************************************
txtReadout.TextAlign=HorizontalAlignment.Right;
//******************************************************************
四、上机操作题
1.完善本章介绍的计算器程序,实现sqrt、1/x、%运算。