Delphi 实现简单计算器

合集下载

delphi dbgrideh单元格计算

delphi dbgrideh单元格计算

在Delphi 中,使用DBGridEh 控件进行单元格计算需要自定义计算逻辑。

DBGridEh 控件没有内置的计算功能,但您可以通过使用事件和处理程序来实现单元格计算。

以下是一个简单的示例,演示如何在DBGridEh 中执行单元格计算:首先,确保已经安装和配置了DBGridEh 控件。

您可以从第三方供应商的网站下载DBGridEh 控件,并按照提供的说明进行安装。

创建一个新的Delphi 项目,并将DBGridEh 控件添加到窗体上。

您可以通过拖放操作从组件面板中将DBGridEh 控件放置到窗体上。

设置DBGridEh 的属性,如连接到数据集、指定列等。

这些步骤将根据您的具体需求而有所不同。

为DBGridEh 控件的OnDrawColumnCell 事件创建一个事件处理程序。

此事件处理程序将在绘制单元格时被调用,并允许您自定义单元格的外观和行为。

delphiprocedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumnEh; State: TGridDrawState);varValue1, Value2, Result: Double;begin// 检查当前列和数据列是否符合您的计算条件if (Column.FieldName = 'Column1') and (DataCol = 1) thenbegin// 获取单元格的值Value1 := StrToFloat(DBGridEh1.Cells[DataCol, DataCol - 1]);Value2 := StrToFloat(DBGridEh1.Cells[DataCol, DataCol + 1]);// 执行计算Result := Value1 + Value2; // 这里是一个简单的加法计算,您可以根据需要进行自定义计算// 设置单元格的文本为计算结果DBGridEh1.Cells[DataCol, DataCol] := FloatToStr(Result);end;end;上述示例代码中的计算逻辑是简单的加法运算,您可以根据实际需求修改计算部分的代码。

JS实现简易计算器的7种方法

JS实现简易计算器的7种方法

JS实现简易计算器的7种⽅法先放图(好吧⽐较挫)⽅法⼀:最容易版<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>简易计算器</title><style>body {background-color: #eee;}#calculator {margin: 100px 0 0 150px;}</style></head><body><!-- 简易计算器 --><div id="calculator"><p><input type="text" class="formerInput" value="1" /><span class="sign">+</span><input type="text" class="laterInput" value="1" /><span>=</span><span class="resultOutput">2</span></p><p><input type="button" value="+" onclick="addHandler();" /><input type="button" value="-" onclick="subtractHandler();" /><input type="button" value="×" onclick="multiplyHandler();" /><input type="button" value="÷" onclick="divideHandler();" /></p></div><script>// 获取元素var calculator = document.querySelector('#calculator');var formerInput = calculator.querySelector('.formerInput');var laterInput = calculator.querySelector('.laterInput');var sign = calculator.querySelector('.sign');var resultOutput = calculator.querySelector('.resultOutput');// 加function addHandler() {sign.innerHTML = '+';resultOutput.innerHTML = +formerInput.value + +laterInput.value;}// 减function subtractHandler() {sign.innerHTML = '-';resultOutput.innerHTML = formerInput.value - laterInput.value;}// 乘function multiplyHandler() {sign.innerHTML = '×';resultOutput.innerHTML = formerInput.value * laterInput.value;}// 除function divideHandler() {sign.innerHTML = '÷';resultOutput.innerHTML = formerInput.value / laterInput.value;}</script></body></html>⽅法⼆:结构和⾏为分离<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>简易计算器</title>#calculator {margin: 100px 0 0 150px;}</style></head><body><!-- 简易计算器 --><div id="calculator"><p><input type="text" class="formerInput" value="1" /><span class="sign">+</span><input type="text" class="laterInput" value="1" /><span>=</span><span class="resultOutput">2</span></p><p><input type="button" value="+" onclick="addHandler();" /><input type="button" value="-" onclick="subtractHandler();" /><input type="button" value="×" onclick="multiplyHandler();" /><input type="button" value="÷" onclick="divideHandler();" /></p></div><script>// 获取元素var calculator = document.querySelector('#calculator');var formerInput = calculator.querySelector('.formerInput');var laterInput = calculator.querySelector('.laterInput');var sign = calculator.querySelector('.sign');var resultOutput = calculator.querySelector('.resultOutput');var btns = calculator.querySelectorAll('.btn');// 绑定事件// +btns[0].onclick = addHandler;// -btns[1].onclick = subtractHandler;// ×btns[2].onclick = multiplyHandler;// ÷btns[3].onclick = divideHandler;// 加function addHandler() {sign.innerHTML = '+';resultOutput.innerHTML = +formerInput.value + +laterInput.value; }// 减function subtractHandler() {sign.innerHTML = '-';resultOutput.innerHTML = formerInput.value - laterInput.value;}// 乘function multiplyHandler() {sign.innerHTML = '×';resultOutput.innerHTML = formerInput.value * laterInput.value;}// 除function divideHandler() {sign.innerHTML = '÷';resultOutput.innerHTML = formerInput.value / laterInput.value;}</script></body></html>⽅法三:循环绑定事件<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>简易计算器</title><style>body {background-color: #eee;}#calculator {margin: 100px 0 0 150px;<!-- 简易计算器 --><div id="calculator"><p><input type="text" class="formerInput" value="1" /><span class="sign">+</span><input type="text" class="laterInput" value="1" /><span>=</span><span class="resultOutput">2</span></p><p><input type="button" value="+" onclick="addHandler();" /><input type="button" value="-" onclick="subtractHandler();" /><input type="button" value="×" onclick="multiplyHandler();" /><input type="button" value="÷" onclick="divideHandler();" /></p></div><script>// 获取元素var calculator = document.querySelector('#calculator');var formerInput = calculator.querySelector('.formerInput');var laterInput = calculator.querySelector('.laterInput');var sign = calculator.querySelector('.sign');var resultOutput = calculator.querySelector('.resultOutput');var btns = calculator.querySelectorAll('.btn');// 绑定事件for (var i = 0; i < btns.length; i++) {btns[i].onclick = function () {switch (this.title) {case 'add':addHandler();break;case 'subtract':subtractHandler();break;case 'multiply':multiplyHandler();break;case 'divide':divideHandler();break;}};}// 加function addHandler() {sign.innerHTML = '+';resultOutput.innerHTML = +formerInput.value + +laterInput.value; }// 减function subtractHandler() {sign.innerHTML = '-';resultOutput.innerHTML = formerInput.value - laterInput.value;}// 乘function multiplyHandler() {sign.innerHTML = '×';resultOutput.innerHTML = formerInput.value * laterInput.value;}// 除function divideHandler() {sign.innerHTML = '÷';resultOutput.innerHTML = formerInput.value / laterInput.value;}</script></body></html>⽅法四:提取函数<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>简易计算器</title><style>body {margin: 100px 0 0 150px;}</style></head><body><!-- 简易计算器 --><div id="calculator"><p><input type="text" class="formerInput" value="1" /><span class="sign">+</span><input type="text" class="laterInput" value="1" /><span>=</span><span class="resultOutput">2</span></p><p><input type="button" value="+" class="btn" title="add" /><input type="button" value="-" class="btn" title="subtract" /> <input type="button" value="×" class="btn" title="multiply" /> <input type="button" value="÷" class="btn" title="divide" /> </p></div><script>// 获取元素var calculator = document.querySelector('#calculator');var formerInput = calculator.querySelector('.formerInput');var laterInput = calculator.querySelector('.laterInput');var sign = calculator.querySelector('.sign');var resultOutput = calculator.querySelector('.resultOutput');var btns = calculator.querySelectorAll('.btn');// 绑定事件each(btns, function (index, elem ) {elem.onclick = function () {switch (this.title) {case 'add':addHandler();break;case 'subtract':subtractHandler();break;case 'multiply':multiplyHandler();break;case 'divide':divideHandler();break;}};});// 遍历function each(array, fn) {for (var i = 0; i < array.length; i++) {fn(i, array[i]);}}// 更新符号function updateSign(symbol) {sign.innerHTML = symbol;}// 加法function add(num1, num2) {return +num1 + +num2;}// 减法function subtract(num1, num2) {return num1 - num2;}// 乘法function multiply(num1, num2) {return num1 * num2;}// 除法function divide(num1, num2) {return num1 / num2;}// 输出结果}// 加function addHandler() {// sign.innerHTML = '+';updateSign('+');outputResult(add(formerInput.value, laterInput.value));}// 减function subtractHandler() {updateSign('-');outputResult(subtract(formerInput.value, laterInput.value)); }// 乘function multiplyHandler() {updateSign('×');outputResult(multiply(formerInput.value, laterInput.value)); }// 除function divideHandler() {updateSign('÷');outputResult(divide(formerInput.value, laterInput.value)); }</script></body></html>⽅法五:管理代码(找到组织)<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>简易计算器</title><style>body {background-color: #eee;}#calculator {margin: 100px 0 0 150px;}</style></head><body><!-- 简易计算器 --><div id="calculator"><p><input type="text" class="formerInput" value="1" /><span class="sign">+</span><input type="text" class="laterInput" value="1" /><span>=</span><span class="resultOutput">2</span></p><p><input type="button" value="+" class="btn" title="add" /><input type="button" value="-" class="btn" title="subtract" /> <input type="button" value="×" class="btn" title="multiply" /> <input type="button" value="÷" class="btn" title="divide" /> </p></div><script>// 获取元素var wrapElem = document.querySelector('#calculator');var calculatorElem = {formerInput: wrapElem.querySelector('.formerInput'),laterInput: wrapElem.querySelector('.laterInput'),sign: wrapElem.querySelector('.sign'),resultOutput: wrapElem.querySelector('.resultOutput'), btns: wrapElem.querySelectorAll('.btn')};// 绑定事件each(calculatorElem.btns, function (index, elem ) {elem.onclick = function () {switch (this.title) {case 'add':addHandler();break;case 'subtract':multiplyHandler();break;case 'divide':divideHandler();break;}};});// 遍历function each(array, fn) {for (var i = 0; i < array.length; i++) {fn(i, array[i]);}}// 更新符号function updateSign(symbol) {calculatorElem.sign.innerHTML = symbol;}var operation = {add: function(num1, num2) {return +num1 + +num2;},subtract: function(num1, num2) {return num1 - num2;},multiply: function(num1, num2) {return num1 * num2;},divide: function(num1, num2) {return num1 / num2;}};// 输出结果function outputResult(result) {calculatorElem.resultOutput.innerHTML = result;}// 加function addHandler() {// sign.innerHTML = '+';updateSign('+');outputResult(operation.add(calculatorElem.formerInput.value, terInput.value));}// 减function subtractHandler() {updateSign('-');outputResult(operation.subtract(calculatorElem.formerInput.value, terInput.value)); }// 乘function multiplyHandler() {updateSign('×');outputResult(operation.multiply(calculatorElem.formerInput.value, terInput.value)); }// 除function divideHandler() {updateSign('÷');outputResult(operation.divide(calculatorElem.formerInput.value, terInput.value)); }</script></body></html>⽅法六:OCP开放--封闭原则<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>简易计算器</title><style>body {background-color: #eee;}#calculator {margin: 100px 0 0 150px;}</style></head><!-- 简易计算器 --><div id="calculator"><p><input type="text" class="formerInput" value="1" /><span class="sign">+</span><input type="text" class="laterInput" value="1" /><span>=</span><span class="resultOutput">2</span></p><p><input type="button" value="+" class="btn" title="add" /><input type="button" value="-" class="btn" title="subtract" /><input type="button" value="×" class="btn" title="multiply" /><input type="button" value="÷" class="btn" title="divide" /><input type="button" value="%" class="btn" title="mod" /><input type="button" value="^" class="btn" title="power" /><!-- <input type="button" value="1/x" class="btn" title="invert" /> --></p></div><script>// 获取元素var wrapElem = document.querySelector('#calculator');var calculatorElem = {formerInput: wrapElem.querySelector('.formerInput'),laterInput: wrapElem.querySelector('.laterInput'),sign: wrapElem.querySelector('.sign'),resultOutput: wrapElem.querySelector('.resultOutput'),btns: wrapElem.querySelectorAll('.btn')};// 绑定事件each(calculatorElem.btns, function (index, elem ) {elem.onclick = function () {updateSign(this.value);outputResult(operate(this.title, calculatorElem.formerInput.value, terInput.value)); };});// 遍历function each(array, fn) {for (var i = 0; i < array.length; i++) {fn(i, array[i]);}}// 更新符号function updateSign(symbol) {calculatorElem.sign.innerHTML = symbol;}// 运算function operate(name, num1, num2) {if (!operation[name]) throw new Error('不存在名为' + name + '的运算⽅法!');return operation[name](num1, num2);}var operation = {add: function(num1, num2) {return +num1 + +num2;},subtract: function(num1, num2) {return num1 - num2;},multiply: function(num1, num2) {return num1 * num2;},divide: function(num1, num2) {return num1 / num2;},addOperation: function (name, fn) {if (!this[name]) {this[name] = fn;}return this;}};operation.addOperation('mod', function (num1, num2) {return num1 % num2;}).addOperation('power', function (base, power) {return Math.pow(base, power);function outputResult(result) {calculatorElem.resultOutput.innerHTML = result;}</script></body></html>⽅法七:模块化<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>简易计算器</title><style>body {background-color: #eee;}#calculator {margin: 100px 0 0 150px;}</style></head><body><!-- 简易计算器 --><div id="calculator"><p><input type="text" class="formerInput" value="1" /><span class="sign">+</span><input type="text" class="laterInput" value="1" /><span>=</span><span class="resultOutput">2</span></p><p><input type="button" value="+" class="btn" title="add" /><input type="button" value="-" class="btn" title="subtract" /><input type="button" value="×" class="btn" title="multiply" /><input type="button" value="÷" class="btn" title="divide" /><input type="button" value="%" class="btn" title="mod" /><input type="button" value="^" class="btn" title="power" /><input type="button" value="1/x" class="btn" title="invert" /></p></div><script>(function () {// 获取元素var wrapElem = document.querySelector('#calculator');var calculatorElem = {formerInput: wrapElem.querySelector('.formerInput'),laterInput: wrapElem.querySelector('.laterInput'),sign: wrapElem.querySelector('.sign'),resultOutput: wrapElem.querySelector('.resultOutput'),btns: wrapElem.querySelectorAll('.btn')};// 绑定事件each(calculatorElem.btns, function (index, elem ) {elem.onclick = function () {updateSign(this.value);outputResult(operate(this.title, calculatorElem.formerInput.value, terInput.value)); };});// 遍历function each(array, fn) {for (var i = 0; i < array.length; i++) {fn(i, array[i]);}}// 更新符号function updateSign(symbol) {calculatorElem.sign.innerHTML = symbol;}// 运算var operate = (function () {subtract: function(num1, num2) {return num1 - num2;},multiply: function(num1, num2) {return num1 * num2;},divide: function(num1, num2) {return num1 / num2;},addOperation: function (name, fn) {if (!operation[name]) {operation[name] = fn;}return operation;}};function operate(name) {if (!operation[name]) throw new Error('不存在名为' + name + '的运算⽅法!');return operation[name].apply(operation, [].slice.call(arguments, 1, arguments.length)); }operate.addOperation = operation.addOperation;return operate;})();operate.addOperation('mod', function (num1, num2) {return num1 % num2;}).addOperation('power', function (base, power) {return Math.pow(base, power);}).addOperation('invert', function (num) {return 1 / num;});// 输出结果function outputResult(result) {calculatorElem.resultOutput.innerHTML = result;}})();</script></body></html>。

delphi 用TList实现的简单计算器

delphi 用TList实现的简单计算器

interfaceusesWindows, Messages, SysUtils, Variants, Classes, Dialogs, Math, Graphics, Controls, Forms, StdCtrls;typeTForm1 = class(TForm)edt1: TEdit;btn10: TButton;btn1: TButton;btn2: TButton;btn3: TButton;btn4: TButton;btn5: TButton;btn6: TButton;btn7: TButton;btn8: TButton;btn9: TButton;btnEqual: TButton;btn12: TButton;btnC: TButton;btn14: TButton;procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure opInput(Sender: TObject);procedure btnEqualClick(Sender: TObject);procedure btnCClick(Sender: TObject);function isDigit(s: string): Boolean;procedure numInput(Sender: TObject);//procedure numOpInput(Sender: TObject);private{}end;{自定义的TMyList类}TMyList = class(TList)end;varForm1: TForm1;List: TMyList;tempStr: string;implementation{$R *.dfm}{创建}procedure TForm1.FormCreate(Sender: TObject);beginList := TMyList.Create;edt1.Text := '';end;{释放}procedure TForm1.FormDestroy(Sender: TObject);beginList.Free;end;{判断一个字符串是否为数字}function TForm1.isDigit(s: string): Boolean;vari: Integer;beginResult := True;for i := 1 to Length(s) dobeginif not(s[i] in ['0'..'9','.']) thenResult := False;end;end;{输入数字处理}procedure TForm1.numInput(Sender: TObject);beginif(edt1.Text = '') or (string(st^) = '+') or (string(st^) = '*') then beginedt1.Text := (Sender as TButton).Caption;endelsebeginedt1.Text := edt1.Text + (Sender as TButton).Caption;end;tempStr := edt1.Text;end;{操作符处理}procedure TForm1.opInput(Sender: TObject);beginif isDigit(tempStr) and (tempStr <> '') thenbeginnew(str);str^ := tempStr;List.Add(str);tempStr := '';end;if List.Count = 0 thenbeginShowMessage('输入无效,请先输入数字');exit;//跳出本过程endelsebeginedt1.Text := (Sender as TButton).Caption;New(str);str^ := edt1.Text;List.Add(str);edt1.Clear;end;end;{等号处理list}procedure TForm1.btnEqualClick(Sender: TObject); var//tempResult: Extended;temp: Extended;tempStr1, tempStr2: string;i: Integer;beginnew(str);str^ := tempStr;List.Add(str);edt1.Clear;tempStr := '';if List.Count = 0 thenShowMessage('empty list')elsebeginfor i := 0 to List.Count - 1 dobegintempStr1 := string(List.Items[i]^);if tempStr1 = '+' thenbegintempStr1 := string(List.Items[i - 1]^);tempStr2 := string(List.Items[i + 1]^);New(str);str^ := FloatToStr(StrToFloat(tempStr1) + StrToFloat(tempStr2));List.Delete(i + 1);List.Insert(i + 1, str);end;if tempStr1 = '*' thenbegintempStr1 := string(List.Items[i - 1]^);tempStr2 := string(List.Items[i + 1]^);New(str);temp := StrToFloat(tempStr1) * StrToFloat(tempStr2);str^ := FloatToStr(temp);List.Delete(i + 1);List.Insert(i + 1, str);end;end;edt1.Text := string(List.Items[List.Count - 1]^);List.Clear;New(str);str^ := edt1.Text;List.Add(str);//ShowMessageFmt('count=%d',[List.Count]);end;end;procedure TForm1.btnCClick(Sender: TObject);beginif List.Count = 0 thenShowMessage('list为空,不用清空');List.clear;edt1.Text := '';end;end.。

Delphi利用ReportMachine报表控件制作小计和总计报表

Delphi利用ReportMachine报表控件制作小计和总计报表

Delphi利⽤ReportMachine报表控件制作⼩计和总计报表最近在做⼀个Delphi的发货清单的打印程序,其中涉及到需要计算清单的⼩计和总计的功能,⽂字难以表达清楚,上图吧:报表第⼀页的⼩计计算当前页⾯的商品价格总和,总计⽬前和⼩计⼀样是计算截⽌到当前页⾯的所有商品的⾦额和,下图为最后⼀页:这下⼤家明⽩了吧,就是要实现这样的报表。

废话不多说了,开始讲解我的思路:1.既然要计算⼩计,就是每页的⾦额和了,加⼊ReportMachine的计算⽂本框(TRMCalcMemoView),然后设置要汇总的字段值为数据字段“factSum”,然后选择计算⽂本框的属性⾯板中的“CalcOptions”选中“统计Brand”为要汇总的主项数据,统计类型为“合计(Sum)”,如图所⽰:2.最难的部分就是总计的计算,这不能简单的⽤计算⽂本框就能解决的,于是不得不⽤ReportMachine 的代码来处理,也就是在总计的⽂本框的OnBeforePrint事件中计算之前的⼩计⽂本框的值的和,然后赋值给总计⽂本框显⽰,先看下设计的报表:红⾊⽂字为两项总计的⽂本框的Name属性值。

下⾯是ReportMachine中⾃定义的OnBeforePrint事件函数代码如下:unit Report;varlValue,tValue: Double;//lValue=⾦额总计 tValue=税额总计procedure Memo1_OnBeforePrint(Sender: TObject);beginlValue:=lValue+CalcMemo1.CalcValue; //CalcMemo1为⾦额⼩计的⽂本框 TRMMemoView(Sender).Memo.Text := lValue; end;procedure Memo40_OnBeforePrint(Sender: TObject);begintValue:=tValue+CalcMemo2.CalcValue;//CalcMemo2为税额⼩计的⽂本框 TRMMemoView(Sender).Memo.Text := tValue; end;procedure Main;beginMemo1.OnBeforePrint:= Memo1_OnBeforePrint; //指定⾦额总计的⽂本框的OnBeforePrint事件的处理函数Memo40.OnBeforePrint:= Memo40_OnBeforePrint;//指定税额总计的⽂本框的OnBeforePrint事件的处理函数end;end.上⾯的代码先声明了两个事件函数⽤于计算两个累加的总计的值,然后赋值给相应的总计⽂本框;然后再Main中指定给总计⽂本框的事件,这样当打印总计之前先汇总赋值并打印。

delphi编写简单的计算器

delphi编写简单的计算器
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure TForm1.Button11Click(Sender: TObject);
var //n:integer;
// temp1:string;
temp2,temp3:extended;
begin
temp3:=strtofloat(edit1.Text);
begin
procedure TForm1.Button8Click(Sender: TObject);
begin
if key=true
then
edit1.Text:=edit1.Text+&#39;8&#39;
else beg
in
var
Form1: TForm1;
n:integer;
temp1:extended;
key:boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if key=true
begin
if key=true
then
edit1.Text:=edit1.Text+&#39;3&#39;

delphi 随机生成四则运算题目

delphi 随机生成四则运算题目

delphi 随机生成四则运算题目在 Delphi 中,你可以使用随机数生成器来生成四则运算题目。

以下是一个简单的示例,演示如何生成两个随机数和一个随机运算符,然后计算结果:```delphiprogram RandomArithmeticQuestion;{$APPTYPE CONSOLE}usesSysUtils, Classes;vara, b, operatorChar, result: Integer;beginWriteLn('随机四则运算题目:');// 生成两个随机数a := RandomRange(1, 100);b := RandomRange(1, 100);// 生成一个随机运算符operatorChar := RandomRange(Ord('+'), Ord('-'));// 根据运算符计算结果case operatorChar ofOrd('+'): result := a + b;Ord('-'): result := a - b;Ord(''): result := a b;Ord('/'): result := a div b; // 注意:这里使用 div,因为 Delphi 没有直接支持整数除法操作符 '/'end;// 输出题目和答案WriteLn(Format('题目: %d %c %d = ?', [a, Chr(operatorChar), b])); WriteLn('答案: ' + IntToStr(result));end.```这个程序首先生成两个介于 1 和 100 之间的随机整数(`a` 和 `b`),然后选择一个随机的运算符(`+`、`-`、`` 或 `/`)。

根据运算符,程序计算结果并将题目和答案输出到控制台。

delphi开发工具计算器设计文档

delphi开发工具计算器设计文档

2011开发工具综合设计论文一:设计意图:本次开发工具综合设计选用计算器为最终的设计题目,一是因为计算器是一个普遍使用的工具,另外学Delphi开发工具也让我觉得应该从简单到复杂来慢慢掌握Delphi开发工具的原理。

二:主要实现方法本次开发计算器主要采用Delphi开发工具实现,依次声明以下变量:第一个操作数x,string型第二个操作数y,string 型ca_operator,char型用来保存运算操作符布尔变量operated,boolean型,用来判断运算操作符按钮是否被按下xp,string型,xp用来存储复制粘贴的数mc,real型,mc用来存储数据tfch,integer型,tfch用来显示内存是否已经存储了数据等于1表示已经存储了,等于0表示尚未存储。

k: integer;//判断0被按下几次,用来保护不会输入‘0000000’这样的数。

de:integer;//判断等于号是否被按下temp: string;//用来暂时存储运算结果procedure calc (a,b:double;op:char) 声明一个进行计算的过程(1)在按下0到9这10个数字键时,采用如下的方法:对于‘0’键,首先判断操作符是否被按下,如果没有被按下,并且0已经被按下,则说明现在输入第一个操作数就将第一个操作数加上字符‘0’,再在Edit中显示出来。

如果没有被按下并且第一个操作数为空,咋清空edit1并且使x:=0,edit1显示x。

如果被按下,则说明现在按下的是第二个操作数,如果第一个操作数不为空并且第二个操作数不为0并且等于号没有被按下,则第二个操作数加上字符0,并且edit1加上字符0.如果第一个草组搜狐不为空且第二个操作数为0并且等号没有被按下,则使第二个操作数为0.如果第一个操作数不为空并且第二个操作数为空且等于号没有被按下,则第二个操作数置0,且edit1加上字符0.如果操作符被按下并且等于号也被按下,说明进行第二次运算,则清空两个操作数以及temp,edit1,操作符,operated,以及de,并且第一个操作数加上字符0,在Edit显示出来。

eclipse实现简单计算器代码.

eclipse实现简单计算器代码.

eclipse实现简单计算器代码.package Computer;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.util.LinkedList;import java.text.NumberFormat;public class Cacultor extends Frame implements ActionListener{/*** @param args*/NumberButton numberButton[];OperationButton operationButton[];Button 小数点按钮,正负号按钮,退格按钮,求倒数按钮,等号按钮,清零按钮;Panel panel;JTextField resultShow;String 运算符号[]={"+","-","*","/"};LinkedList 链表;boolean 是否按下等号=false;public Cacultor(){super("计算器");链表=new LinkedList();numberButton=new NumberButton[10];for(int i=0;i<=9;i++){numberButton[i]=new NumberButton(i);numberButton[i].addActionListener(this);}operationButton=new OperationButton[4];for(int i=0;i<4;i++){operationButton[i]=new OperationButton(运算符号[i]);operationButton[i].addActionListener(this);}小数点按钮=new Button(".");正负号按钮=new Button("+/-");等号按钮=new Button("=");求倒数按钮=new Button("1/x");退格按钮=new Button("退格");清零按钮=new Button("c");清零按钮.setForeground(Color.red);退格按钮.setForeground(Color.red);等号按钮.setForeground(Color.red);求倒数按钮.setForeground(Color.blue);正负号按钮.setForeground(Color.blue);小数点按钮.setForeground(Color.blue);退格按钮.addActionListener(this);清零按钮.addActionListener(this);等号按钮.addActionListener(this);小数点按钮.addActionListener(this);正负号按钮.addActionListener(this);求倒数按钮.addActionListener(this);resultShow=new JTextField(10);resultShow.setHorizontalAlignment(JTextField.RIGHT); resultShow.setForeground(Color.blue);resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14)); resultShow.setBorder(newSoftBevelBorder(BevelBorder.LOWERED));resultShow.setBackground(Color.white);resultShow.setEditable(false);panel=new Panel();panel.setLayout(new GridLayout(4,5));panel.add(numberButton[1]);panel.add(numberButton[2]);panel.add(numberButton[3]);panel.add(operationButton[0]);panel.add(清零按钮);panel.add(numberButton[4]);panel.add(numberButton[5]);panel.add(numberButton[6]);panel.add(operationButton[1]);panel.add(退格按钮);panel.add(numberButton[7]);panel.add(numberButton[8]);panel.add(numberButton[9]);panel.add(operationButton[2]);panel.add(求倒数按钮);panel.add(numberButton[0]);panel.add(正负号按钮);panel.add(小数点按钮);panel.add(operationButton[3]);panel.add(等号按钮);add(panel,BorderLayout.CENTER);add(resultShow,BorderLayout.NORTH);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ System.exit(0);}});setVisible(true);setBounds(100,50,240,180);setResizable(false);validate();}//按钮事件的处理public void actionPerformed(ActionEvent e){if(e.getSource() instanceof NumberButton){NumberButton b=(NumberButton)e.getSource();if(链表.size()==0){int number=b.getNumber();链表.add(""+number);resultShow.setText(""+number);是否按下等号=false;}else if(链表.size()==1&&是否按下等号==false){ int number=b.getNumber();String num=(String)链表.getFirst();String s=num.concat(""+number);链表.set(0, s);resultShow.setText(s);}else if(链表.size()==1&&是否按下等号==true){int number=b.getNumber();链表.removeFirst();链表.add(""+number);是否按下等号=false;resultShow.setText(""+number);}else if(链表.size()==2){int number=b.getNumber();链表.add(""+number);resultShow.setText(""+number);}else if(链表.size()==3){int number=b.getNumber();String num=(String)链表.getLast();String s=num.concat(""+number);链表.set(2, s);resultShow.setText(s);}}else if(e.getSource()instanceof OperationButton){ OperationButton b=(OperationButton)e.getSource();if(链表.size()==1){String fuhao=b.get运算符号();链表.add(fuhao);}else if(链表.size()==2){String fuhao=b.get运算符号();链表.set(1, fuhao);}else if(链表.size()==3){String fuhao=b.get运算符号();String number1=(String)链表.getFirst();String number2=(String)链表.getLast();String 运算符号=(String)链表.get(1);try{double n2=Double.parseDouble(number2); double n=0;if(运算符号.equals("+")){n=n1+n2;}else if(运算符号.equals("-")){n=n1-n2;}else if(运算符号.equals("*")){n=n1*n2;}else if(运算符号.equals("/")){n=n1/n2;}链表.clear();链表.add(""+n);链表.add(fuhao);resultShow.setText(""+n);}catch(Exception ee){}}}else if(e.getSource()==等号按钮){是否按下等号=true;if(链表.size()==1&&链表.size()==2){ String num=(String)链表.getFirst(); resultShow.setText(""+num);}else if(链表.size()==3){String number1=(String)链表.getFirst(); String number2=(String)链表.getLast(); String 运算符号=(String)链表.get(1);try{double n2=Double.parseDouble(number2); double n=0;if(运算符号.equals("+")){n=n1+n2;}else if(运算符号.equals("-")){n=n1-n2;}else if(运算符号.equals("*")){n=n1*n2;}else if(运算符号.equals("/")){n=n1/n2;}resultShow.setText(""+n);链表.set(0, ""+n);链表.removeLast();链表.removeLast();}catch(Exception ee){}}}else if(e.getSource()==小数点按钮){if(链表.size()==0){是否按下等号=false;}else if(链表.size()==1){String dot=小数点按钮.getLabel();String num=(String)链表.getFirst();String s=null;if(num.indexOf(dot)==-1){s=num.concat(dot);链表.set(0, s);}else{s=num;}链表.set(0, s);resultShow.setText(s);}else if(链表.size()==3){String dot=小数点按钮.getLabel(); String num=(String)链表.getLast(); String s=null;if(num.indexOf(dot)==-1){s=num.concat(dot);链表.set(2, s);}else{s=num;}resultShow.setText(s);}}else if(e.getSource()==退格按钮){if(链表.size()==1){String num=(String)链表.getFirst();if(num.length()>=1){num=num.substring(0,num.length()-1); 链表.set(0, num);resultShow.setText(num);}else{链表.removeLast();resultShow.setText("0");}}else if(链表.size()==3){String num=(String)链表.getLast();if(num.length()>=1){num=num.substring(0,num.length()-1); 链表.set(2, num);resultShow.setText(num);}else{链表.removeLast();resultShow.setText("0");}}}else if(e.getSource()==正负号按钮){if(链表.size()==1){String number1=(String)链表.getFirst(); try{double d=Double.parseDouble(number1); d=-1*d;String str=String.valueOf(d);链表.set(0, str);resultShow.setText(str);}catch(Exception ee){}}else if(链表.size()==3){String number2=(String)链表.getLast();try{double d=Double.parseDouble(number2); d=-1*d;String str=String.valueOf(d);链表.set(2, str);resultShow.setText(str);}catch(Exception ee){}}}else if(e.getSource()==求倒数按钮){if(链表.size()==1||链表.size()==2){String number1=(String)链表.getFirst(); try{double d=Double.parseDouble(number1); d=1.0/d;String str=String.valueOf(d);链表.set(0, str);resultShow.setText(str);}catch(Exception ee){}}else if(链表.size()==3){String number2=(String)链表.getLast();try{double d=Double.parseDouble(number2); d=1.0/d;String str=String.valueOf(d);链表.set(0, str);resultShow.setText(str);}catch(Exception ee){}}}else if(e.getSource()==清零按钮){是否按下等号=false;resultShow.setText("0");链表.clear();}}public static void main(String[] args) {// TODO Auto-generated method stub new Cacultor();}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

unit Cals;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Menus, StdCtrls;typeTForm1 = class(TForm)mm1: TMainMenu;N1: TMenuItem;S1: TMenuItem;S2: TMenuItem;edt1: TEdit;Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;Button6: TButton;Button7: TButton;Button8: TButton;Button9: TButton;Button11: TButton;Button12: TButton;Button13: TButton;Button14: TButton;Button15: TButton;Button16: TButton;Button18: TButton;Button19: TButton;Button20: TButton;Button21: TButton;Button22: TButton;Button23: TButton;Button25: TButton;Button26: TButton;Button27: TButton;Button28: TButton;Button29: TButton;Button30: TButton;edt2: TEdit;procedure Button19Click(Sender: TObject);procedure Button26Click(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button20Click(Sender: TObject);procedure Button21Click(Sender: TObject);procedure Button12Click(Sender: TObject);procedure Button13Click(Sender: TObject);procedure Button14Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button7Click(Sender: TObject);procedure Button29Click(Sender: TObject);procedure Button30Click(Sender: TObject);procedure Button22Click(Sender: TObject);procedure Button15Click(Sender: TObject);procedure Button8Click(Sender: TObject);procedure Button27Click(Sender: TObject);procedure Button28Click(Sender: TObject);procedure Button9Click(Sender: TObject);procedure Button23Click(Sender: TObject);procedure UpdateDisplay();procedure Calculate();procedure OnOperandInput(a: Integer);procedure edt1KeyPress(Sender: TObject; var Key: Char);procedure FormCreate(Sender: TObject);procedure Button16Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button11Click(Sender: TObject);procedure Button18Click(Sender: TObject);procedure Button25Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;typeOperator = (OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide);//定义枚举用以标识运算符CalcError = (ErrNone,ErrDivideByZero); //定义枚举用以标识当前运算状态varForm1: TForm1;m_operator : Operator = OpNone; //定义枚举变量 m_operator 用以标识当前运算符m_newsign : Boolean = False; //标记是否输入新的操作数:1是,0否m_realsign : Boolean = False; //标记是否输入小数: 1是,0否 m_operand : Real = 0; //存储当前输入的数m_errorState : CalcError = ErrNone; // 定义枚举变量m_errorState 用以标识当前运算状态m_accum : Real; //存储当前的计算处理结束—>操作数m_coff : Real = 0.1; //小数输入时的系数m_memory : Real = 0; // 使用内存中存储的数字implementation{$R *.dfm}uses StrUtils;procedure TForm1.FormCreate(Sender: TObject);beginedt1.Text := '0';end;procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);beginif not (key in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', #8]) thenkey := char(0);end;//Backspaceprocedure TForm1.Button1Click(Sender: TObject);beginif m_operand = 0 then edt1.Text := '0'elseedt1.Text := Copy(edt1.Text,1,Length(edt1.Text) - 1);if edt1.Text = '' then edt1.Text := '0';m_operand := StrToFloat(edt1.Text);UpdateDisplay();end;//CEprocedure TForm1.Button2Click(Sender: TObject);beginm_operand := 0;UpdateDisplay();end;//Cprocedure TForm1.Button3Click(Sender: TObject);beginm_operator := OpNone;m_operand := 0;m_accum := 0;m_realsign := False;m_errorState := ErrNone;m_coff := 0.1;m_newsign := False;UpdateDisplay();end;//处理数字输入procedure TForm1.OnOperandInput(a: Integer);begin//判断是否输入新的数字,1-是 0-否if not m_newsign then m_operand := 0;//判断是否是小数输入,1-是 0-否if not m_realsign then m_operand := m_operand * 10 + (a) elsebeginm_operand := m_operand + a * m_coff;m_coff := m_coff * 0.1;end;m_newsign := True;UpdateDisplay();end;//计算处理函数 OpAdd,OpSubtract,OpMultiply,OpDivide procedure TForm1.Calculate();beginif m_newsign = True thenbegin//如果没有计算符就直接将m_operand值赋予m_accumif m_operator = OpNone thenm_accum := m_operand//否则先按计算符进行计算操作再值赋予m_accumelse if m_operator = OpAdd thenm_accum := m_accum + m_operandelse if m_operator = OpSubtract thenm_accum := m_accum - m_operandelse if m_operator = OpMultiply thenm_accum := m_accum * m_operandelse if m_operator = OpDivide thenbeginif m_operand = 0 then m_errorState := ErrDivideByZero elsem_accum := m_accum / m_operand;endend;m_newsign := False;m_realsign := False;m_coff := 0.1;UpdateDisplay();end;//处理显示procedure TForm1.UpdateDisplay();var m_temp : Real;beginif m_errorState <> ErrNone thenedt1.Text := '除数不能为零'elsebeginif m_newsign then m_temp := m_operandelse m_temp := m_accum;//edt1.Text := Format('%d',[m_temp]);edt1.Text := FloatToStr(m_temp);end;end;//数字0~9procedure TForm1.Button26Click(Sender: TObject);beginOnOperandInput(0);end;procedure TForm1.Button19Click(Sender: TObject);beginOnOperandInput(1);end;procedure TForm1.Button20Click(Sender: TObject); beginOnOperandInput(2);end;procedure TForm1.Button21Click(Sender: TObject); beginOnOperandInput(3);end;procedure TForm1.Button12Click(Sender: TObject); beginOnOperandInput(4);end;procedure TForm1.Button13Click(Sender: TObject); beginOnOperandInput(5);end;procedure TForm1.Button14Click(Sender: TObject); beginOnOperandInput(6);end;procedure TForm1.Button5Click(Sender: TObject); beginOnOperandInput(7);end;procedure TForm1.Button6Click(Sender: TObject); beginOnOperandInput(8);end;procedure TForm1.Button7Click(Sender: TObject); beginOnOperandInput(9);end;// +procedure TForm1.Button29Click(Sender: TObject); beginCalculate();m_operator := OpAdd;end;// -procedure TForm1.Button22Click(Sender: TObject); beginCalculate();m_operator := OpSubtract;end;// *procedure TForm1.Button15Click(Sender: TObject); beginCalculate();m_operator := OpMultiply;end;// /procedure TForm1.Button8Click(Sender: TObject); beginCalculate();m_operator := OpDivide;end;// =procedure TForm1.Button30Click(Sender: TObject); beginCalculate();m_operator := OpNone;end;// +/-procedure TForm1.Button27Click(Sender: TObject); beginm_operand := m_operand * (-1);UpdateDisplay();end;// .procedure TForm1.Button28Click(Sender: TObject); beginm_realsign := True;UpdateDisplay();end;//开平方procedure TForm1.Button9Click(Sender: TObject);beginm_operand := Sqrt(m_operand);UpdateDisplay();end;//求倒procedure TForm1.Button23Click(Sender: TObject);beginif m_operand = 0 then m_errorState := ErrDivideByZero elsem_operand := 1 / m_operand;UpdateDisplay();end;// %procedure TForm1.Button16Click(Sender: TObject);var i : Integer;begin//??????m_operand := m_operand / 100;UpdateDisplay();end;// 计算器有关内存操作// 'MC'的操作,将内存清0procedure TForm1.Button4Click(Sender: TObject);beginm_memory := 0;edt2.Text := '';//ShowMessage(FloatToStr(m_memory));end;// 'MR'的操作,将存储器中的信息输出procedure TForm1.Button11Click(Sender: TObject);beginm_newsign := True; //很关键m_operand := m_memory;UpdateDisplay();//ShowMessage(FloatToStr(m_memory));end;// 'MS'的操作,将当前文本框内容保存入内存,显示'M'procedure TForm1.Button18Click(Sender: TObject);beginif m_operand <> 0 thenbeginedt2.Text := ' M';m_memory := m_operand;//ShowMessage(FloatToStr(m_memory));end;end;// 'M+'的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器procedure TForm1.Button25Click(Sender: TObject);beginm_memory := m_memory + m_operand;//ShowMessage(FloatToStr(m_memory));end;end.。

相关文档
最新文档