问题描述
模拟电脑计算器制作一个计算器实现简单加减乘除
考点
- Delphi 窗体与组件设置及使用
- 数据类型、函数过程、程序设计(选择循环等)的考核
代码实现
页面显示:
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.
代码升级之处
- 可以实现两个以上的数的运算
- 每次出结果前会清除上一步结果
- 可以实现结果作加数、减数等继续计算