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

被折叠的 条评论
为什么被折叠?



