鱼C论坛

 找回密码
 立即注册
查看: 10697|回复: 105

[原创] 自制简易计算器

[复制链接]
发表于 2014-10-13 22:33:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
unit jisuanqiv2;

interface

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

type
TForm1 = class(TForm)
SpeedButton0: TSpeedButton;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton15: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
Edit1: TEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure SpeedButton8Click(Sender: TObject);
procedure SpeedButton9Click(Sender: TObject);
procedure SpeedButton0Click(Sender: TObject);
procedure SpeedButton10Click(Sender: TObject);
procedure SpeedButton11Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton13Click(Sender: TObject);
procedure SpeedButton14Click(Sender: TObject);
procedure SpeedButton16Click(Sender: TObject);
procedure SpeedButton17Click(Sender: TObject);
procedure SpeedButton15Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
num1,num2,num3,temp:double;
subt,mult,divi:Integer;
Flag:Integer;
Flag1:Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle,GWL_STYLE,GetWindowLong(Edit1.Handle,GWL_STYLE) Or ES_RIGHT);
num1:=0;
num2:=0;
num3:=0;
temp:=0;
subt:=0;
mult:=0;
divi:=0;
Edit1.Text:='';
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '1';
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '2';
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '3';
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '4';
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '5';
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '6';
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '7';
end;

procedure TForm1.SpeedButton8Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '8';
end;

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '9';
end;

procedure TForm1.SpeedButton0Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '0';
end;

procedure TForm1.SpeedButton10Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text + '.';
end;

procedure TForm1.SpeedButton11Click(Sender: TObject);
begin
num1:=StrToFloat(Edit1.Text);
Flag:=1;
Edit1.Text:='';
temp:=num1+temp;
end;

procedure TForm1.SpeedButton12Click(Sender: TObject);
begin
If (subt>=1) then
begin
num1:=StrToFloat(Edit1.Text);
Flag:=2;
Edit1.Text:='';
temp:=temp-num1;
end
Else
begin
num1:=StrToFloat(Edit1.Text);
Flag:=2;
Edit1.Text:='';
temp:=num1;
end;
subt:=subt+1;

end;

procedure TForm1.SpeedButton13Click(Sender: TObject);
begin
If (mult>=1) then
begin
num1:=StrToFloat(Edit1.Text);
Flag:=3;
Edit1.Text:='';
temp:=temp * num1;
end
Else
begin
num1:=StrToFloat(Edit1.Text);
temp:=num1;
Flag:=3;
Edit1.Text:=''
end;
mult:=mult + 1;
end;

procedure TForm1.SpeedButton14Click(Sender: TObject);
begin
If (divi>=1) then
begin
num1:=StrToFloat(Edit1.Text);
Flag:=4;
Edit1.Text:='';
temp:=temp / num1;
end
Else
begin
Flag:=4;
num1:=StrToFloat(Edit1.Text);
temp:=num1;
Edit1.Text:='';
end;
divi:=divi+1;

end;

procedure TForm1.SpeedButton16Click(Sender: TObject);
begin
Edit1.Text:=Copy(Edit1.Text,1,Length(Edit1.text)-1);
end;

procedure TForm1.SpeedButton17Click(Sender: TObject);
begin
num2:=StrToFloat(Edit1.Text);
case (Flag) of
1:num3:=temp + num2;
2:num3:=temp - num2;
3:num3:=temp * num2;
4:num3:=temp / num2;
end;
Edit1.text:=FloatToStr(num3);
num1:=0;
num2:=0;
num3:=0;
temp:=0;
subt:=0;
mult:=0;
divi:=0;
end;

procedure TForm1.SpeedButton15Click(Sender: TObject);
begin
Form1.FormCreate(self);
Label1.Visible:=True;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Label1.Visible:=False;
end;

end. QQ截图20141013222049.jpg

发这个自制的千疮百孔的计算器,为了响应一下小甲鱼老师号召,同时也在论坛冒个泡。。。
写个计算器,就这种最简单的,个人感觉还是挺费劲的,代码写的个人感觉也十分不精简,涉及到蛮多的算法,我好多都还不会,所以这个计算器还是存在很多问题:
1.输入两个以上小数点会报错
2.由于我不会筛选字母和数字以及符号,所以就把edit设置成只读了(还请各位鱼友不惜赐教应该如何筛选,感激不尽)
3.由于技术有限,才学不久,视频教程刚学到25讲。算法上出了一些问题,导致同种运算可以连续进行,不同种类运算交叉进行的时候会出现问题 : 比如:9-1-1=7  没问题 , 但是9-6+7就算不对了关于这个问题,还请各位鱼友指点一下怎么改善代码才能解决这个问题,在此先谢过了:handshake


下面附上代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-13 22:55:09 | 显示全部楼层
厉害楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-13 23:33:17 | 显示全部楼层
真是难得的给力帖子啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-13 23:48:14 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-13 23:49:21 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-14 01:09:33 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 16:07:07 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 17:48:23 | 显示全部楼层
太生气了,无法HOLD啦 >_<......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 19:18:13 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 20:18:19 | 显示全部楼层
输入两个以上小数点会报错

试试捕获键盘输入消息,设置一个全局变量,处理运算数时输入了一个小数点设为1,没有设为0,当输入一个小数点时如果全局变量是1就忽略它,处理另外一个运算数时吧全局变量设为0,重复进行
不会筛选字母和数字以及符号

同样试试捕获键盘输入消息,如果不是数字、小数点、运算符就忽略它
算法上出了一些问题,导致同种运算可以连续进行,不同种类运算交叉进行的时候会出现问题 : 比如:9-1-1=7  没问题 , 但是9-6+7就算不对了

用栈结构存储吧,看看算法的书,一般都讲了栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-16 20:21:46 | 显示全部楼层
风之残月 发表于 2014-10-16 20:18
试试捕获键盘输入消息,设置一个全局变量,处理运算数时输入了一个小数点设为1,没有设为0,当输入一个小 ...

捕获和栈存算法可以解决这两个问题?   我试试   感谢指点~~·激动人心,无法言表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 17:32:44 | 显示全部楼层
这个是用什么写的啊,看看再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 18:46:45 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 19:20:30 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 19:55:38 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 20:26:42 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 21:31:52 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 22:14:15 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-17 22:18:35 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-17 22:42:42 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 19:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表