【Delphi练习】简易计算器(升级版)

问题描述

模拟电脑计算器制作一个计算器实现简单加减乘除

考点

  1. Delphi 窗体与组件设置及使用
  2. 数据类型、函数过程、程序设计(选择循环等)的考核

代码实现

页面显示:
在这里插入图片描述
Unit1.pas

unit Unit1;
interface
uses
  SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
  QStdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Edit1: TEdit;
    Button17: TButton;
    Button18: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    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);
    procedure Button11Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TNew1= object
    temp1: Double;
    temp2: Double;
    flag: Char;
    sign: Integer;
  public
    function Add(x: Double; y: Double): Double;
    function Sub(x: Double; y: Double): Double;
    function Mul(x: Double; y: Double): Double;
    function Divv(x: Double; y: Double):Double;
    function Get(z: Char):Double;
  end;

var
  Form1: TForm1;
  New1: TNew1;

implementation

{$R *.xfm}

function TNew1.Get(z: Char):Double;
begin
  if(z = '+')then
    result:= New1.Add(New1.temp2, New1.temp1)
  else
    if(z = '-')then
      result:= New1.Sub(New1.temp2, New1.temp1)
    else
      if(z = '*')then
        result:= New1.Mul(New1.temp2, New1.temp1)
      else
        if(z = '/')then
           result:= New1.Divv(New1.temp2, New1.temp1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '1';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '2';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '3';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '4';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '5';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '6';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '7';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '8';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '9';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '0';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  if(New1.sign = 1)then
  begin
    Edit1.Clear;
    New1.sign:= 0;
  end;
  Edit1.Text := Edit1.Text + '.';
  New1.temp1 := StrTofloat(Edit1.text);
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
  Edit1.Clear;
  if(New1.flag = '')then
    New1.temp2:= New1.temp1
  else
  begin
    New1.temp2:= New1.Get(New1.flag);
  end;
  New1.flag:= '+';
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
  Edit1.Clear;
  if(New1.flag = '')then
    New1.temp2:= New1.temp1
  else
  begin
    New1.temp2:= New1.Get(New1.flag);
  end;
  New1.flag:= '-';
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
  Edit1.Clear;
  if(New1.flag = '')then
    New1.temp2:= New1.temp1
  else
  begin
    New1.temp2:= New1.Get(New1.flag);
  end;
  New1.flag:= '*';
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
  Edit1.Clear;
  if(new1.flag = '')then
    New1.temp2:= New1.temp1
  else
  begin
    New1.temp2:= New1.Get(New1.flag);
  end;
  New1.flag:= '/';
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
  Edit1.Clear;
  New1.temp1:= 0;
  New1.temp2:= 0;
  New1.flag:= #0;
  New1.sign:= 0;
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
  if(Length(Edit1.Text) < 2)then
  begin
    Edit1.Text:= '0';
  end
  else
    Edit1.Text:= Copy(Edit1.Text,1,Length(Edit1.Text)-1);
  New1.temp1 := StrTofloat(Edit1.text);
end;

function TNew1.Add(x: Double; y: Double): Double;
begin
  Result:= x + y;
end;

function TNew1.Sub(x: Double; y: Double): Double;
begin
  Result:= x - y;
end;

function TNew1.Mul(x: Double; y: Double): Double;
begin
  Result:= x * y;
end;

function TNew1.Divv(x: Double; y: Double):Double;
begin
  if(y = 0)then
    begin
      Result:= 0;
      ShowMessage('除数不能为0');
      New1.temp1:= 0;
      New1.temp2:= 0;
    end
  else
    Result:= x / y;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
  if(New1.flag = '+')then
    Form1.Edit1.Text:= FloatToStr(New1.Add(New1.temp2, New1.temp1))
  else
    if(New1.flag = '-')then
      Form1.Edit1.Text:= FloatToStr(New1.Sub(New1.temp2, New1.temp1))
    else
      if(New1.flag = '*')then
        Form1.Edit1.Text:= FloatToStr(New1.Mul(New1.temp2, New1.temp1))
      else
        if(New1.flag = '/')then
           Form1.Edit1.Text:= FloatToStr(New1.Divv(New1.temp2, New1.temp1));
  New1.temp1:= StrToFloat(Form1.Edit1.Text);
  New1.temp2:= StrToFloat(Form1.Edit1.Text);
  New1.sign:= 1;
  New1.flag:= #0;
end;
end.

代码升级之处

  1. 可以实现两个以上的数的运算
  2. 每次出结果前会清除上一步结果
  3. 可以实现结果作加数、减数等继续计算
以下是一个简单的 Delphi 计算器示例: 1. 创建一个新的 Delphi 应用程序项目。 2. 将一个 TEdit 控件用作计算器显示器,并设置其 ReadOnly 属性为 True。 3. 将多个 TButton 控件用作计算器数字和操作符键,并设置它们的 Caption 属性分别为 0~9 和 +、-、*、/、=。 4. 为每个按钮添加 OnClick 事件处理程序。 5. 在事件处理程序中使用 if 语句或 case 语句来确定用户点击的是哪个按钮,并在计算器显示器上显示相应的数字或操作符。 6. 当用户点击等号按钮时,执行相应的计算并将结果显示在计算器显示器上。 以下是示例代码: ```delphi unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; Button13: TButton; Button14: TButton; Button15: TButton; procedure ButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Op1, Op2: Double; Operator: Char; implementation {$R *.dfm} procedure TForm1.ButtonClick(Sender: TObject); var Button: TButton; Value: string; begin Button := TButton(Sender); Value := Button.Caption; case Value of '0'..'9': begin Edit1.Text := Edit1.Text + Value; end; '+', '-', '*', '/': begin Op1 := StrToFloat(Edit1.Text); Operator := Value[1]; Edit1.Clear; end; '=': begin Op2 := StrToFloat(Edit1.Text); case Operator of '+': Edit1.Text := FloatToStr(Op1 + Op2); '-': Edit1.Text := FloatToStr(Op1 - Op2); '*': Edit1.Text := FloatToStr(Op1 * Op2); '/': Edit1.Text := FloatToStr(Op1 / Op2); end; end; end; end; end. ``` 请注意,此示例仅用于演示目的,可能缺少错误处理和其他功能。建议在实际开发中添加这些功能以提高应用程序的稳定性和可靠性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值