用Delphi制作一个简单的计算器。我想说我才入门两个月。不要太复杂

2024-05-11

1. 用Delphi制作一个简单的计算器。我想说我才入门两个月。不要太复杂

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
  Panel1: TPanel;
  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;
  Edit1: TEdit;
  SpeedButton17: TSpeedButton;
  procedure SpeedButton1Click(Sender: TObject);
  procedure SpeedButton12Click(Sender: TObject);
  procedure SpeedButton13Click(Sender: TObject);
  procedure SpeedButton17Click(Sender: TObject);
  procedure FormKeyPress(Sender: TObject; var Key: Char);
 private
  { Private declarations }
 public
  { Public declarations }
 end;
 
var
 Form1: TForm1;
 
implementation

{$R *.dfm}
var
 Flag: Boolean = True; //。标记位
 Flag1: Integer = 1; //计算方法标志位
 num1, num2, result: Real;
 flagresult: Boolean = False;
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 str: string;
begin
 str := Edit1.Text;
 if (Length(str) = 1) and (str = '0') then
  Edit1.Clear;
 Edit1.Color := clBlue;
 if ((Sender as TSpeedButton).Caption = '.') then
  begin
   if Flag then
    begin
     Edit1.Text := Edit1.Text + (sender as TSpeedButton).Caption;
     Flag := False;
    end
  end
 else
  Edit1.Text := Edit1.Text + (sender as TSpeedButton).Caption;
end;

procedure TForm1.SpeedButton12Click(Sender: TObject);
begin
 Edit1.Color := clRed;
 num2 := StrToFloatDef(Edit1.Text, 0.00);
 case Flag1 of
  1: result := num1 + num2;
  2: result := num1 - num2;
  3: result := num1 * num2;
  4: if num2 = 0 then
    begin
     MessageBox(0, '除数为0', '', 0);
     result := 0;
    end
   else
    result := num1 / num2;
 end;
 Edit1.Text := FloatToStr(result);
end;

procedure TForm1.SpeedButton13Click(Sender: TObject);
begin
 Flag1 := (Sender as TSpeedButton).Tag;
 num1 := StrToFloatDef(Edit1.Text, 0.00);
 Edit1.Text := '0';
end;

procedure TForm1.SpeedButton17Click(Sender: TObject);
begin
 Flag := True; //。标记位
 Flag1 := 1; //计算方法标志位
 num1 := 0;
 num2 := 0;
 result := 0;
 Edit1.Text := '0';
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 case key of
  '1': SpeedButton1.Click;
  '2': SpeedButton2.Click;
  '3': SpeedButton3.Click;
  '4': SpeedButton4.Click;
  '5': SpeedButton5.Click;
  '6': SpeedButton6.Click;
  '7': SpeedButton7.Click;
  '8': SpeedButton8.Click;
  '9': SpeedButton9.Click;
  '0': SpeedButton10.Click;
  '.': SpeedButton11.Click;
  '+': SpeedButton13.Click;
  '-': SpeedButton14.Click;
  '*': SpeedButton15.Click;
  '/': SpeedButton16.Click;
 end;
end;

end.

用Delphi制作一个简单的计算器。我想说我才入门两个月。不要太复杂

2. 请哪位高手给个delphi 7编写的计算器代码,只要加减乘除简单动算就可以了,不胜感谢!

昨天我做了一个简单的计算器。
其实原理很简单,就是一个表明“加减乘除符号”的变量fuhao,和一个string型的变量firststr(来存储第一个edt1.text里的数据)。当用户按下“加号”时,fuhao := 1;firststr:=edt1.text;edt1.clear;(把edt1.text里的数据清空!)然后用case fuhao of 判断用户输入的是什么运算符,然后做运算。其实很简单的。需要源代码的话你就按照下边的那个写:其实如果你是新手的话,还是写的简单一点好,复杂的话不利于你的“成就感”!嘿嘿,编程慢慢来!
    记得选我为最佳答案奥亲!
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    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;
    Button16: TButton;
    BitBtn1: TBitBtn;
    Image1: TImage;
    procedure BitBtn1Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    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 Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Label1DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  temp1:string;
  temp2:double;
  n:integer;
implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
form1.Close;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
form1.Edit1.Clear;
end;

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

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

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

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

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

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

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

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

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

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

procedure TForm1.Button13Click(Sender: TObject);
begin
n:=1;
temp1:=edit1.Text;
edit1.clear;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
n:=2;
temp1:=edit1.Text;
edit1.clear;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
n:=3;
temp1:=edit1.Text;
edit1.clear;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
n:=4;
temp1:=edit1.Text;
edit1.clear;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
case n of
1:temp2:=strtofloat(temp1)+strtofloat(edit1.Text);
2:temp2:=strtofloat(temp1)-strtofloat(edit1.Text);
3:temp2:=strtofloat(temp1)*strtofloat(edit1.Text);
4:if strtofloat(edit1.Text)=0 then
      begin
       showmessage('除数不能为零!');
       exit;
       end
    else
      temp2:=strtofloat(temp1)/strtofloat(edit1.Text);
    end;
      edit1.Text:=floattostr(temp2);
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
messagedlg('此处没有设置特定的功能!',mterror,[mbok],0);
end;

procedure TForm1.Label1DblClick(Sender: TObject);
begin
messagedlg('不能操作!',mtinformation,[mbok],0);
end;

end.

3. 怎么用C++编译一个简单的计算器?

我借鉴了别人的某计算器,因为你没有说多简易...我就找了个差不多的...
/*
程序名称:表达式计算器
编译环境:Microsoft Visual C++ 6.0
作者:吉林大学 计算机科学与技术学院 2006 罗泗勇
时间:200801
*/

/*
说明:
采用树形结构处理表达式,按优先级运算结果,一个加,减,乘,除或数值为一个节点
优先级如下:
函数:4
括号:3
乘除:2
加减:1
*/

#include 
#include 
#include 
#include 
#include 
using namespace std;

const char NUM[]={'0','1','2','3','4','5','6','7','8','9','.'};
const char OPERATION[]={'+','-','*','/'};
const double PI=3.14159265358979;
const double EE=2.71828182818281;

class Fun //处理系统数学函数的类
{
public:
Fun(string o,int t,double l=0.0,double r=0.0):op(o),type(t),lvalue(l),rvalue(r){}
static string FUN[];
double calc();
private:
int type; //666 0   1 sin90    2 3!   3 3C2 
string op; //函数类型
double lvalue; //函数左边的值
double rvalue; //函数右边的值
static int FunNum;
};

int Fun::FunNum=8;
string Fun::FUN[]={"!","sin","cos","tan","log","ln","C","A","^"};
/*
函数说明:
1:log是以10为底的工程对数
2:ln 是以e为底的自然对数
3:C 计算组合数 输入规则 如计算 3取2的组合   输入表达式 3C2
4:A 计算排列数 输入规则 如计算 3取2的排列   输入表达式 3A2
5:! 计算阶乘
6:^ x的y次方 输入 x^y
*/

int factorial(int n) //阶乘函数
{
int i,s=1;
for(i=1;i<=n;i++)
   s*=i;
return s;
}

int C(int a,int b)
{
return factorial(a)/(factorial(b)*factorial(a-b));
}

int A(int a,int b)
{
return factorial(a)/factorial(b);
}

double Fun::calc() //计算系统函数的值
{
if(type==0)
   return lvalue;
else
{
   if(op=="!")
    return factorial(lvalue);
   if(op=="sin")
    return sin(rvalue/180*PI);
   if(op=="cos")
    return cos(rvalue/180*PI);
   if(op=="tan")
    return tan(rvalue/180*PI);
   if(op=="log")
    return log10(rvalue);
   if(op=="ln")
    return log10(rvalue)/log10(EE);
   if(op=="C")
    return C(lvalue,rvalue);
   if(op=="A")
    return A(lvalue,rvalue);
   if(op=="^")
    return pow(lvalue,rvalue);
   else
   {
    string err="暂时没有函数"+op;
    MessageBox(NULL,err.c_str(),"错误",MB_OK);
    return 0;
   }
}
}

struct Unit //双向链表保存运算单元
{
Unit(int p,char o,string c,double v,int t,Unit * pr=NULL,Unit * n=NULL)
   :PRI(p),Operation(o),Code(c),value(v),Type(t),Pre(pr),Next(n){}
int PRI; //优先级

char Operation; //操作符
string Code; //原始代码
double value; //数据

int Type; //类型 操作符0 数据1 函数2
Unit * Pre; //构成双向链表
Unit * Next;
};

class Node //表达式树状结构的节点
{
public:
Node(char o,int p,int e=1,double v=0,Node * ph=NULL,Node * pl=NULL,Node * pr=NULL)
   :Operation(o),PRI(p),Expression(e),value(v),Head(ph),Left(pl),Right(pr){}
Node * Head; //节点的根,左树枝,右树枝
Node * Left;
Node * Right;
double GetValue();
char GetOperation() const {return Operation;}
int GetPri() const {return PRI;}
int IsExp() const {return Expression;}
private:
char Operation; //操作符
int PRI; //优先级
int Expression; //记录该节点是否是表达式0 1
double value; //该节点的值
};

double Node::GetValue() //运算该节点的值
{
if(IsExp()) //该节点的值还未算出来
{
   double lvalue,rvalue;
   lvalue=Left->GetValue();
   rvalue=Right->GetValue();
   Expression=0;
   char op=GetOperation();
   switch(op)
   {
   case '+':
    return lvalue+rvalue;
   case '-':
    return lvalue-rvalue;
   case '*':
    return lvalue*rvalue;
   case '/':
    return lvalue/rvalue;
   default:
    return 0;
   }
}
else
   return value;
}

bool Isnum(char c)
{
for(int i=0;i<sizeof(NUM);i++)
{
   if(c==NUM[i])
    return true;
}
return false;
}

bool Isoperation(char c)
{
for(int i=0;i<sizeof(OPERATION);i++)
{
   if(c==OPERATION[i])
    return true;
}
return false;
}

Unit * Analyse(string exp) //分析表达式并生成链表
{
int pri=0; //当前优先级
int stat=-1; //当前的读入状态 括号 0 数据 1 运算符 2
Unit * head=NULL,* p=NULL;
int i=0,explen;
explen=exp.size();
for(i=0;i<explen;i++)
{
   char c=exp.at(i);
   if(c=='(')
   {
    pri+=3;
    stat=0;
   }
   else if(c==')')
   {
    pri-=3;
    stat=0;
   }
   else if(Isoperation(c)) //操作符不会出现在表达式开头
   {
    Unit * temp=p;
    int add_pri; //自身增加的优先级
    if(c=='+' || c=='-')
     add_pri=1;
    else
     add_pri=2;
    p->Next=new Unit(pri+add_pri,c," ",0,0);
    p=p->Next;
    p->Pre=temp;
   }
   else //其他的当做函数处理
   {
    string function="";
    while(i<explen && (c=exp.at(i),! Isoperation(c)) && c!=')')
    {
     function+=c;
     i++;
    }
    i--;

    if(head==NULL)
    {
     p=new Unit(pri,' ',function,0,2);
     head=p;
    }
    else
    {
     Unit * temp=p;
     p->Next=new Unit(pri,' ',function,0,2);
     p=p->Next;
     p->Pre=temp;
    }
   }
}
return head;
}

Unit * Calc(Unit * head) //计算双向链表基本单元的值
{
Unit * p=head;
while(p!=NULL)
{
   if(p->Type!=0) //非操作符
   {
    string temp=p->Code;
    string op;
    double lvalue=0,rvalue=0;
    int l_point=0,r_point=0;
    int i=0,type=0;
    char ch;
    while(i<temp.size() && (ch=temp.at(i),Isnum(ch)))
    {
     if(ch=='.')
     {
      l_point++;
      i++;
      continue;
     }
     if(! l_point)
      lvalue*=10;
     lvalue+=(ch-'0')*pow(10,-l_point);
     i++;
     if(l_point)
      l_point++;
    }
    while(i<temp.size() && (ch=temp.at(i),! Isnum(ch)))
    {
     op+=ch;
     type=1;
     i++;
    }
    while(i<temp.size() && (ch=temp.at(i),Isnum(ch)))
    {
     if(ch=='.')
     {
      r_point++;
      i++;
      continue;
     }
     if(! r_point)
      rvalue*=10;
     rvalue+=(ch-'0')*pow(10,-r_point);
     i++;
     if(r_point)
      r_point++;
    }
    Fun * f=new Fun(op,type,lvalue,rvalue);
    p->value=f->calc();
   }
   p=p->Next;
}
return head;
}

Node * Tree(Unit * head) //生成表达式树
{
Node * root=NULL,* proot=NULL,* pbranch=NULL;
Unit * p=head;
int now_pri; //当前优先级
bool hadop=false;
while(p!=NULL)
{
   if(p->Type==0) //如果是一个操作符
   {
    hadop=true;
    if(root==NULL)
    {
     proot=new Node(p->Operation,p->PRI,1);
     root=proot;
     pbranch=root;
     now_pri=p->PRI;
     proot->Left=new Node(' ',0,0,p->Pre->value);
     proot->Right=new Node(' ',0,0,p->Next->value);
    }
    else
    {
     if(p->PRIPRI<now_pri),9/3/3=9,错的
     {
      proot=new Node(p->Operation,p->PRI,1); //新的树根
      proot->Left=root; //根的变换
      proot->Right=new Node(' ',0,0,p->Next->value);
      root=proot;

      pbranch=proot; //右树枝的变换
      //pbranch->Right=new Node(' ',0,0,p->Pre->value); //树枝右边取值
     }
     else
     {
      Node * temp;
      temp=new Node(p->Operation,p->PRI,1);

      pbranch->Right=temp;
      temp->Head=pbranch;

      pbranch=pbranch->Right;
      pbranch->Left=new Node(' ',0,0,p->Pre->value);
      pbranch->Right=new Node(' ',0,0,p->Next->value);
     }
     now_pri=p->PRI;
    }
   }
   p=p->Next;
}
if(! hadop)
   root=new Node(' ',0,0,head->value);
return root;
}

int main()
{
string exp;

//ifstream infile("test.txt",ios::in);
while(! getline(cin,exp).eof())
{
   if(exp=="")
    continue;
   Unit * h=Analyse(exp);
   h=Calc(h);
   Node * root=Tree(h);
   coutGetValue()<<endl;
}
return 0;
}

怎么用C++编译一个简单的计算器?

4. 如何用Delphi制作一个加法计算器

提供示例代码如下:
procedure TForm1.Button1Click(Sender: TObject);begin  Edit3.Text := FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));end;代码运行截图:

5. 求:用delphi编写一个计算器!~

so easy
我只写思路 
(0-9 . 10个键, 一个eidt1.text 做显示屏, + - * / = 归零 6个功能键)
var 
n:integer //四则运算
s1:string;

+; s1:=edit1.text a:=1 edit1.clear;//把+号前面字符串存入s1
-: s1:=edit1.text a:=2 edit1.clear;
*: s1:=edit1.text a:=3 edit1.clear;
/: s1:=edit1.text a:=4 edit1.clear;
归零:edit1.clear; //不显示 也可以显示0 不过0-9 要多了一个if
0-9:  edit1.text=edit1.text+(0-9) //
.:    if edit1.text=''then                                     edit1.text='0.'   else  edit1.text=edit1.text+'.';
// 前面的是按钮 懒的写全 带冒号的全是按钮点击事件 后面是=号的代码

begin
case n of
1: edit1.text:=inttostr(strtoint(s1)+strtoint(edit1.text));
2: edit1.text:=inttostr(strtoint(s1)-strtoint(edit1.text));
3: edit1.text:=inttostr(strtoint(s1)*strtoint(edit1.text));
4: begin
if edit1.text=0 then showmessage('不能被整除')
   else edit1.text:=inttostr(strtoint(s1)/strtoint(edit1.text));
   end;
end;
end;

求:用delphi编写一个计算器!~

6. 怎么样用delphi7做简单计算器

加几个按钮  写上加减乘除等符号

分别在各按钮里写计算事件就行了

如果要偷懒,不用管如何写,那就用raize里面的TRzCalculator就可以了 直接拖下来就是个计算器,不用一行代码

7. Delphi7如何制作简单计算器

你可以直接百度搜索相关源码,网上很多的。

Delphi7如何制作简单计算器

8. delphi简易计算器应该如何做

添加2个编辑框控件和5个按钮控件
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.text='' then
showmessage('请输入操作数') //通过API函数Showmessage弹出提示信息
else
label2.Caption:='请输入被加数';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if edit1.text='' then
showmessage('请输入操作数')
else
label2.Caption:='请输入被减数';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if edit1.text='' then
showmessage('请输入操作数')
else
label2.Caption:='请输入被乘数';
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if edit1.text='' then
showmessage('请输入操作数')
else
label2.Caption:='请输入被除数';
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if label2.caption='请输入被加数' then
if edit2.text'' then //edit的text类型是string,要转成浮点型,
edit1.Text:=floattostr(strtofloat(edit1.text)+strtofloat(edit2.Text))
else showmessage('请输入被加数');

if label2.caption='请输入被减数' then
if edit2.text'' then
edit1.Text:=floattostr(strtofloat(edit1.text)-strtofloat(edit2.text))
else showmessage('请输入被减数');

if label2.caption='请输入被乘数' then
if edit2.text'' then
edit1.Text:=floattostr(strtofloat(edit1.Text)*strtofloat(edit2.Text))
else showmessage('请输入被乘数');

if label2.caption='请输入被除数' then
if (edit2.text'')and(edit2.text'0')then
edit1.Text:=floattostr(strtofloat(edit1.text)/strtofloat(edit2.text))
else showmessage('被除数不能为空或0');
end;

end.