Delphi实现简单的计算器

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.

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值