1.首先创建一个窗体应用程序
2.在窗体中加入一个输入框(TEdit)和18个按钮(TButton)(记得给这些组件重命名为有具体意义的名字)如下:
3.具体源码如下
unit Unit1;
//界面区 用于声明其它单元能看到的部分
interface
{
界面区头部的uses子句表示需要访问的外部单元,
这些外部单元中定义了你需要引用的数据类型,如自定义窗体内所用的控件
}
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,StrUtils;
{
在单元的界面区中可以声明许多不同的元素,包括过程、函数、全程变量及数据类型
每创建一个窗体,Delphi 会在单元中自动建立一个新的数据类型--类(class)
}
type
TForm1 = class(TForm)
EditInput: TEdit;
ButtonNum7: TButton;
ButtonNum8: TButton;
ButtonNum9: TButton;
//除法
ButtonDivision: TButton;
ButtonNum1: TButton;
ButtonNum4: TButton;
ButtonNum2: TButton;
ButtonNum3: TButton;
//减法
ButtonSubtraction: TButton;
ButtonNum5: TButton;
Button6: TButton;
//乘法
ButtonMultiplication: TButton;
//删除一个数字
ButtonDelete: TButton;
ButtonPoint: TButton;
ButtonNum0: TButton;
//加法
ButtonAddtion: TButton;
//清除
ButtonClear: TButton;
ButtonAmount: TButton;
procedure ButtonNum7Click(Sender: TObject);
procedure ButtonNum8Click(Sender: TObject);
procedure ButtonNum9Click(Sender: TObject);
procedure ButtonNum4Click(Sender: TObject);
procedure ButtonNum5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure ButtonNum1Click(Sender: TObject);
procedure ButtonNum2Click(Sender: TObject);
procedure ButtonNum3Click(Sender: TObject);
procedure ButtonNum0Click(Sender: TObject);
procedure ButtonPointClick(Sender: TObject);
procedure ButtonDivisionClick(Sender: TObject);
procedure ButtonMultiplicationClick(Sender: TObject);
procedure ButtonSubtractionClick(Sender: TObject);
procedure ButtonAddtionClick(Sender: TObject);
procedure ButtonAmountClick(Sender: TObject);
procedure ButtonDeleteClick(Sender: TObject);
procedure ButtonClearClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//function Compute():string;
var
Form1: TForm1;
//实现区 存放界面的实现代码及外部不可见的声明
implementation
{$R *.dfm}
//进行两个数的计算
function Compute():string;
var
//左操作数和右操作数
ObjLeft,ObjRight:string;
EditText:string;
begin
EditText:= Form1.EditInput.Text;
if pos('➗',EditText)>0 then
begin
ObjLeft:=copy(EditText,1,pos('➗',EditText)-1);
ObjRight:=copy(EditText,pos('➗',EditText)+1,length(EditText));
result:=floattostr(strtofloat(ObjLeft)/strtofloat(ObjRight));
end;
if pos('X',EditText)>0 then
begin
ObjLeft:=copy(EditText,1,pos('X',EditText)-1);
ObjRight:=copy(EditText,pos('X',EditText)+1,length(EditText));
result:=floattostr(strtofloat(ObjLeft)*strtofloat(ObjRight));
end;
if pos('—',EditText)>0 then
begin
ObjLeft:=copy(EditText,1,pos('—',EditText)-1);
ObjRight:=copy(EditText,pos('—',EditText)+1,length(EditText));
result:=floattostr(strtofloat(ObjLeft)-strtofloat(ObjRight));
end;
if pos('+',EditText)>0 then
begin
ObjLeft:=copy(EditText,1,pos('+',EditText)-1);
ObjRight:=copy(EditText,pos('+',EditText)+1,length(EditText));
result:=floattostr(strtofloat(ObjLeft)+strtofloat(ObjRight));
end;
//未进行计算时,直接返回输入框中现有的值
if (pos('+',EditText) + pos('—',EditText)
+ pos('X',EditText) + pos('➗',EditText)) =0 then
begin
result:=EditText;
end
end;
//数字按钮操作
function Number(Number:string):string;
var
EditText:string;
begin
//消除数字前面的0
EditText:=Form1.EditInput.Text;
if (EditText='') or (EditText='0') then
begin
EditText:=Number;
end
else
begin
EditText:=EditText+Number;
end;
Result:=EditText
end;
//运算符按钮
function Operators(Operatorstype:string):string;
var
EditText:string;
begin
EditText:=Form1.EditInput.Text;
//进行多轮计算时,先把前面一轮的计算结果输出
if EditText='' then
begin
showmessage('请先输入数字');
EditText:='';
end
else
begin
if (pos('+',EditText) + pos('—',EditText)
+ pos('X',EditText) + pos('➗',EditText)) =0 then
begin
EditText:=EditText+Operatorstype;
end
else
begin
EditText:=Compute();
EditText:=EditText+Operatorstype;
end;
end;
Result:=EditText;
end;
//除法按钮
procedure TForm1.ButtonDivisionClick(Sender: TObject);
begin
EditInput.Text:=Operators((Sender AS TButton).Caption);
end;
//乘法按钮
procedure TForm1.ButtonMultiplicationClick(Sender: TObject);
begin
EditInput.Text:=Operators((Sender AS TButton).Caption);
end;
//减法
procedure TForm1.ButtonSubtractionClick(Sender: TObject);
begin
EditInput.Text:=Operators((Sender AS TButton).Caption);
end;
//加法
procedure TForm1.ButtonAddtionClick(Sender: TObject);
begin
EditInput.Text:=Operators((Sender AS TButton).Caption);
end;
//等于
procedure TForm1.ButtonAmountClick(Sender: TObject);
begin
EditInput.Text:=Compute();
end;
//清零
procedure TForm1.ButtonClearClick(Sender: TObject);
begin
EditInput.Text:='';
end;
//删除一个数字
procedure TForm1.ButtonDeleteClick(Sender: TObject);
begin
EditInput.Text:=copy(EditInput.Text,1,length(EditInput.Text)-1);
end;
procedure TForm1.ButtonNum0Click(Sender: TObject);
begin
//输入为多个0时,只显示一个0
if (EditInput.Text='') or (Strtofloat(EditInput.Text)=0) then
begin
EditInput.Text:=(Sender AS TButton).Caption;
end
else
begin
EditInput.Text:=EditInput.Text+(Sender AS TButton).Caption;
end;
end;
procedure TForm1.ButtonNum1Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.ButtonNum2Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.ButtonNum3Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.ButtonNum4Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.ButtonNum5Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.ButtonNum7Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.ButtonNum8Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
procedure TForm1.ButtonNum9Click(Sender: TObject);
begin
EditInput.Text:=Number((Sender AS TButton).Caption);
end;
//点
procedure TForm1.ButtonPointClick(Sender: TObject);
var
Edit:string;
A:TArray<string>;
begin
Edit:=EditInput.Text;
if (RightStr(Edit,1)='') or (RightStr(Edit,1)='+') or (RightStr(Edit,1)='—') or
(RightStr(Edit,1)='X') or (RightStr(Edit,1)='➗') then
begin
showmessage('数字不能以‘.’开头');
end
else
begin
if (pos('+',Edit)+pos('—',Edit)+pos('X',Edit)+pos('➗',Edit)) =0 then
begin
if pos('.',Edit)>0 then
begin
EditInput.Text:=Edit;
end
else
begin
EditInput.Text:=Edit+(Sender AS TButton).Caption;
end;
end
else
begin
if pos('+',Edit)>0 then
begin
A:=Edit.Split(['+']);
if pos('.',A[1])>0 then
begin
EditInput.Text:=Edit;
end
else
begin
EditInput.Text:=Edit+(Sender AS TButton).Caption;
end;
end
else if pos('—',Edit)>0 then
begin
A:=Edit.Split(['—']);
if pos('.',A[1])>0 then
begin
EditInput.Text:=Edit;
end
else
begin
EditInput.Text:=Edit+(Sender AS TButton).Caption;
end;
end
else if pos('X',Edit)>0 then
begin
A:=Edit.Split(['X']);
if pos('.',A[1])>0 then
begin
EditInput.Text:=Edit;
end
else
begin
EditInput.Text:=Edit+(Sender AS TButton).Caption;
end;
end
else if pos('➗',Edit)>0 then
begin
A:=Edit.Split(['➗']);
if pos('.',A[1])>0 then
begin
EditInput.Text:=Edit;
end
else
begin
EditInput.Text:=Edit+(Sender AS TButton).Caption;
end;
end;
end;
end;
end;
end.