利用delphi写一个实现基本功能的计算器

本文作者分享了自己入职期间自学Delphi,并成功编写出一个基础计算器的过程,从零开始,历经6天解决各种问题。文章包含计算器的简单UI设计及部分核心代码实现。

利用delphi写一个实现基本功能的计算器

本人入职期间需要写软件,经过一周的学习的研究,写了一个delphi的计算器,之前从未接触过delphi,所以完全自学,之后一大堆bug,今天终于改完啦,从学习到完成,历时6天左右。
废话不说,直接怼代码


在这里插入图片描述

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type //定义类型
TForm1 = class(TForm)
Button1: TButton; // 1
Button2: TButton; // 2
Button3: TButton;
Button4: TButton; // .
Button5: TButton; // .
Button6: TButton; // .
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
btnRest: TButton; // %
btnAdd1: TButton; //+
btnSub1: TButton; //-
btnMul1: TButton; //*
btnDevi: TButton; // /

btnEqual: TButton;               //=
btnPoint: TButton;
Button17: TButton;
Edit1: TEdit;                      //文本编辑框1
Edit2: TEdit;                      //文本编辑框2


procedure Button1Click(Sender:TObject);               //1
procedure Button2Click(Sender:TObject);               //2
procedure Button3Click(Sender:TObject);
procedure Button4Click(Sender:TObject);
procedure Button5Click(Sender:TObject);
procedure Button6Click(Sender:TObject);
procedure Button7Click(Sender:TObject);
procedure Button8Click(Sender:TObject);
procedure Button9Click(Sender:TObject);
procedure Button10Click(Sender:TObject);             //0

procedure btnAdd1Click(Sender:TObject);
procedure btnSub1Click(Sender:TObject);
procedure btnMul1Click(Sender:TObject);
procedure btnDeviClick(Sender:TObject);
procedure btnRestClick(Sender:TObject);
procedure btnEqualClick(Sender:TObject);
procedure btnPointClick(Sender:TObject);
procedure Button17Click(Sender:TObject);           //clear
procedure FormCreate(Sender:TObject);              //初始化函数

private
procedure SetEditText(info:string); //自定义显示函数 处理数据
procedure SetEditText1(info:string); //显示结果
procedure SetText(info:string);
{ Private declarations }
public
{ Public declarations }
end;

type
calculate=object //继承object类
private
t1:Double; //定义两个数
t2:Double;
t3:String; //存储字符

x1:Integer;            //xy强转为整数,
y1:Integer;

sign:string;            //标识符 + - / *

public
// function Add(x:Double;y:Double):Double;
// function Sub(x:Double;y:Double):Double;
// function Mul(x:Double;y:Double):Double;
// function Dive(x:Double;y:Double):Double;
// function Rest(x:Double;y:Double):Double;
end;
var
Form1:TForm1;
info:calculate; //定义一个对象
oldinfo:string; //字符串
Sum:Double=0.0; //总数
Buf:Double=0.0; //临时存储单元
flag:Integer=0; //控制变量,判断第一次
m:Integer; //强转sum
n:Integer; //强转被余数
times1:Integer=0; //控制变量
t:Integer=0; //控制变量 1
implementation //执行

{$R *.dfm}

procedure TForm1.Button17Click(Sender:TObject);
begin
oldinfo:=’’;
SetEditText(’’); //显示栏1
SetEditText1(’’); //显示栏2
info.sign:=’’; //符号变量 + - * /
info.t1:=0;
info.t2:=0;
flag:=0;
Sum:=0;
times1:=0;
t:=0;

end;

procedure TForm1.Button2Click(Sender:TObject);

begin
SetEditText(‘2’);
Edit2.Text:=Edit2.Text+‘2’;
info.t1:=StrToFloat(Edit1.Text);
end;
procedure TForm1.Button3Click(Sender:TObject);
begin
SetEditText(‘3’);

     Edit2.Text:=Edit2.Text+'3' ;
     info.t1:=StrToFloat(Edit1.Text);

end;
procedure TForm1.Button4Click(Sender:TObject);
begin
SetEditText(‘4’);

     Edit2.Text:=Edit2.Text+'4' ;
     info.t1:=StrToFloat(Edit1.Text);

end;
procedure TForm1.Button5Click(Sender:TObject);
begin
SetEditText(‘5’);

     Edit2.Text:=Edit2.Text+'5' ;
     info.t1:=StrToFloat(Edit1.Text);

end;

procedure TForm1.Button6Click(Sender:TObject);
begin
SetEditText(‘6’);
Edit2.Text:=Edit2.Text+‘6’ ;
info.t1:=StrToFloat(Edit1.Text);
end;
procedure TForm1.Button7Click(Sender:TObject);
begin
SetEditText(‘7’);
Edit2.Text:=Edit2.Text+‘7’ ;
info.t1:=StrToFloat(Edit1.Text);
end;
procedure TForm1.Button8Click(Sender:TObject);
begin
SetEditText(‘8’);
Edit2.Text:=Edit2.Text+‘8’ ;
info.t1:=StrToFloat(Edit1.Text);
end;
procedure TForm1.Button9Click(Sender:TObject);
begin
SetEditText(‘9’);
Edit2.Text:=Edit2.Text+‘9’ ;
info.t1:=StrToFloat(Edit1.Text);
end;
procedure TForm1.Button10Click(Sender:TObject);
begin
SetEditText(‘0’);
Edit2.Text:=Edit2.Text+‘0’ ;
info.t1:=StrToFloat(Edit1.Text);
end;

procedure TForm1.btnPointClick(Sender:TObject);
begin
  SetEditText('.');
  Edit2.Text:=Edit2.Text+'.' ;
  info.t1:=StrToFloat(Edit1.Text);
end;

procedure TForm1.Button1Click(Sender:TObject);

begin
SetEditText(‘1’);
Edit2.Text:=Edit2.Text+‘1’;
info.t1:=StrToFloat(Edit1.Text);

end;
procedure TForm1.btnAdd1Click(Sender:TObject);
begin
//判断上一位并计算,如10-3+2,在这边首先执行10-3的计算,在进行+3操作
if(info.sign=’+’) then
begin
Sum:=Sum+StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’-’) then
begin
Sum:=Sum-StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’’) then
begin
Sum:=Sum
StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’/’) then
begin
Sum:=Sum/StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’%’) then
begin
m:=Integer(Trunc(Sum)); //将结果强转,因为余数不能有小数
n:=Integer(Trunc(StrToFloat(Edit1.Text)));
Sum:=m mod n;
t:=1;
end;

       times1:=times1+1;                      //每次执行,次数加一
   if(times1=1)  then
   begin
       Sum:=StrToFloat(Edit2.Text);
   end;
       Edit2.Text:=Edit2.Text+'+';
       info.sign:='+';
   if(info.sign='+') and (times1>1)  and (t=0)then
   begin
       Sum:=Sum+StrToFloat(Edit1.Text);
       t:=1;
   end;

  oldinfo:='';                              //符号位置空

end;

procedure TForm1.btnSub1Click(Sender:TObject);

begin
if(info.sign=’-’) then
begin
Sum:=Sum-StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’+’) then
begin
Sum:=Sum+StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’’) then
begin
Sum:=Sum
StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’/’) then
begin
Sum:=Sum/StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’%’) then
begin
m:=Integer(Trunc(Sum));
n:=Integer(Trunc(StrToFloat(Edit1.Text)));
Sum:=m mod n;
t:=1;
end;

   times1:=times1+1;
   if(times1=1)  then
   begin
       Sum:=StrToFloat(Edit2.Text);
   end;
       Edit2.Text:=Edit2.Text+'-';
       info.sign:='-';
   if(info.sign='-') and (times1>1)  and (t=0)then
   begin
      Sum:=Sum-StrToFloat(Edit1.Text);
      t:=1;
   end;
   oldinfo:='';                            //符号位置空

end;
procedure TForm1.btnMul1Click(Sender:TObject);
begin
if(info.sign=’’) then
begin
Sum:=Sum
StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’+’) then
begin
Sum:=Sum+StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’-’) then
begin
Sum:=Sum-StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’/’) then
begin
Sum:=Sum/StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’%’) then
begin
m:=Integer(Trunc(Sum));
n:=Integer(Trunc(StrToFloat(Edit1.Text)));
Sum:=m mod n;
t:=1;
end;

   times1:=times1+1;
   if(times1=1)  then
   begin
       Sum:=StrToFloat(Edit2.Text);
   end;
       Edit2.Text:=Edit2.Text+'*';
       info.sign:='*';
   if(info.sign='*') and (times1>1)  and (t=0)then
   begin
       Sum:=Sum*StrToFloat(Edit1.Text);
       t:=1;
   end;
   oldinfo:='';

end;
procedure TForm1.btnDeviClick(Sender:TObject);
begin
// btnEqualClick(nil); //nil为参数,那么在相应的事件中就判断不出谁是触发事件
if(info.sign=’/’) then
begin
Sum:=Sum/StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’+’) then
begin
Sum:=Sum+StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’’) then
begin
Sum:=Sum
StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’-’) then
begin
Sum:=Sum-StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’%’) then
begin
m:=Integer(Trunc(Sum));
n:=Integer(Trunc(StrToFloat(Edit1.Text)));
Sum:=m mod n;
t:=1;
end;

   times1:=times1+1;
   if(times1=1)  then
   begin
       Sum:=StrToFloat(Edit2.Text);
   end;
       Edit2.Text:=Edit2.Text+'/';
       info.sign:='/';
   if(info.sign='/') and (times1>1)  and (t=0)then
   begin
       Sum:=Sum+StrToFloat(Edit1.Text);
       t:=1;
   end;

   oldinfo:='';

end;

 procedure TForm1.btnRestClick(Sender:TObject);

begin
if(info.sign=’/’) then
begin
Sum:=Sum/StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’+’) then
begin
Sum:=Sum+StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’’) then
begin
Sum:=Sum
StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’-’) then
begin
Sum:=Sum-StrToFloat(Edit1.Text);
t:=1;
end;
if(info.sign=’%’) then
begin
m:=Integer(Trunc(Sum));
n:=Integer(Trunc(StrToFloat(Edit1.Text)));
Sum:=m mod n;
t:=1;
end;

   times1:=times1+1;
   if(times1=1)  then
   begin
       Sum:=StrToFloat(Edit2.Text);
   end;
       Edit2.Text:=Edit2.Text+'%';
       info.sign:='%';
   if(info.sign='%') and (times1>1)  and (t=0)then
   begin
       Sum:=Sum+StrToFloat(Edit1.Text);
       t:=1;
   end;
   oldinfo:='';

end;

 procedure TForm1.btnEqualClick(Sender:TObject);
 begin
   times1:=0;                //次数初始化
   if info.sign<>'' then oldinfo:='';

   if(info.sign='+')       then
   //SetEditText1(FloatToStr(info.Add(info.t2,info.t1)))
   begin
       Sum:=Sum+StrToFloat(Edit1.Text);    //Sum=Sum+新输入的值,下同
       SetEditText1(FloatToStr(Sum));
       flag:=1;
       t:=0;
       times1:=0
   end


   else  if(info.sign='-') then
   //SetEditText1(FloatToStr(info.Sub(info.t2,info.t1)))
     begin

       Sum:=Sum-StrToFloat(Edit1.Text);
       SetEditText1(FloatToStr(Sum));
       flag:=1;
       t:=0;
       times1:=0
   end


   else if(info.sign='*')  then
   //SetEditText1(FloatToStr(info.Mul(info.t2,info.t1)))
   begin
       Sum:=Sum*StrToFloat(Edit1.Text);
       SetEditText1(FloatToStr(Sum));
       flag:=1;
       t:=0;
       times1:=0
   end


   else if(info.sign='/')  then
   //SetEditText1(FloatToStr(info.Dive(info.t2,info.t1)))
   begin
   if(StrToFloat(Edit1.Text)=0)
   then begin
        Form1.Edit1.text:='0';
        ShowMessage('除数分母不能为0');
   end
   else begin
       Sum:=Sum/StrToFloat(Edit1.Text);
       SetEditText1(FloatToStr(Sum));
       flag:=1;
       t:=0;
       times1:=0
   end;
   end

   else if(info.sign='%')  then
   begin
       m:=Integer(Trunc(Sum));
       n:=Integer(Trunc(StrToFloat(Edit1.Text)));
   if(n=0)
   then begin
       Form1.Edit1.text:='0';
       ShowMessage('除数分母不能为0');
   end
   else begin
       Sum:=m mod n;
       SetEditText1(FloatToStr(Sum));
       flag:=1;
       t:=0;
       times1:=0
   end;

    end;
   //SetEditText1(FloatToStr(info.Rest(info.t2,info.t1)));

 if Edit1.Text<>'' then
     info.t1:=StrToFloat(Edit1.Text);
     info.sign:='';
 end;

procedure TForm1.SetText(info:string);
begin
Edit2.Text:=Edit2.Text+Edit1.Text;
end;

 procedure TForm1.SetEditText(info:string);

begin
Edit1.Text :=oldinfo + info;
oldinfo := Edit1.Text;
end;
procedure TForm1.SetEditText1(info:string);
begin
Edit2.Text :=oldinfo + info;
oldinfo := Edit2.Text;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
oldinfo := ‘’;
end;

end.

遇到不理解或者不懂的,欢迎加我vx讨论:m88181

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值