好难的计算器!!做了N个晚上也做不出来的计算器!!救命啊~~~~~~~~~~
Default.aspx:<body>
<form id="form1" runat="server">
<div style="text-align: center">
<br />
<asp:Panel ID="Panel1" runat="server" Height="200px" Width="211px" ForeColor="Black" BackColor="#FFFF80">
<br />
计算器<br />
<br />
<asp:TextBox ID="TextBox1" runat="server" Width="139px" Height="23px" style="text-align:right" >0</asp:TextBox><br />
<br />
<asp:Button ID="Button1" runat="server" Text="C" Height="35px" Width="73px" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="+/-" Height="35px" Width="35px" OnClick="Button2_Click" />
<asp:Button ID="Button4" runat="server" Text="+" Height="35px" Width="35px" OnClick="Button4_Click" /><br />
<asp:Button ID="Button5" runat="server" Text="7" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button6" runat="server" Text="8" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button7" runat="server" Text="9" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button8" runat="server" Text="-" Height="35px" Width="35px" OnClick="Button8_Click" /><br />
<asp:Button ID="Button9" runat="server" Text="4" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button10" runat="server" Text="5" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button11" runat="server" Text="6" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button12" runat="server" Text="*" Height="35px" Width="35px" OnClick="Button12_Click" /><br />
<asp:Button ID="Button13" runat="server" Text="1" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button14" runat="server" Text="2" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button15" runat="server" Height="35px" Text="3" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button16" runat="server" Height="35px" Text="/" Width="35px" OnClick="Button16_Click"/><br />
<asp:Button ID="Button17" runat="server" Text="0" Height="35px" Width="35px" OnClick="Button13_Click" />
<asp:Button ID="Button18" runat="server" Height="35px" Text="." Width="35px" OnClick="Button18_Click" />
<asp:Button ID="Button19" runat="server" Text="=" Height="35px" Width="73px" OnClick="Button19_Click" />
<br />
<br />
</asp:Panel>
</div>
</form>
</body>
Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
static string sOper = "";
static double dblA, dblB;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button13_Click(object sender, EventArgs e)
{
Button B1 = (Button)sender;
if (this.TextBox1.Text != "0")
this.TextBox1.Text += B1.Text;
else
this.TextBox1.Text = B1.Text;
}
protected void Button1_Click(object sender, EventArgs e) //清除
{
this.TextBox1.Text = "0";
}
protected void Button18_Click(object sender, EventArgs e) //小数点
{
int n = TextBox1.Text.IndexOf(".");
if (n == -1) //如果没有小数点,增加小数点,防止多次输入小数点
TextBox1.Text += ".";
}
protected void Button2_Click(object sender, EventArgs e) //正负号
{
this.TextBox1.Text = Convert.ToString(double.Parse(this.TextBox1.Text) * -1);
}
protected void Button4_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "+";
this.TextBox1.Text = "";
}
protected void Button8_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "-";
this.TextBox1.Text = "";
}
protected void Button12_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "*";
this.TextBox1.Text = "";
}
protected void Button16_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "/";
this.TextBox1.Text = "";
}
protected void Button19_Click(object sender, EventArgs e)
{
dblB = Convert.ToDouble(this.TextBox1.Text);
switch (sOper)
{
case "+": dblA += dblB; break;
case "-": dblA -= dblB; break;
case "*": dblA *= dblB; break;
case "/":
if (dblB != 0)
dblA /= dblB; break;
}
this.TextBox1.Text =Convert .ToString(dblA );
dblB =dblA ;//将计算结果赋给易做图作数,以便执行第二次操作
}
}
点击两下那些运算符号~
就出错了~!!
错在哪啊??
怎么改啊??
还有~按了数字再按运算符号~
TextBox就清空~!!
怎样才不清空啊??
麻烦各位指教了~~~~~~~~~~~~~~~~ --------------------编程问答-------------------- --------------------编程问答--------------------
谢谢~ --------------------编程问答-------------------- public class Operation
{
private double _numberA = 0;
private double _numberB = 0;
public double NumberA
{
get
{
return _numberA;
}
set
{
_numberA = value;
}
}
public double NumberB
{
get
{
return _numberB;
}
set
{
_numberB = value;
}
}
public virtual double GetResult()
{
double result = 0;
return result;
}
public static string checkNumberInput(string currentNumber, string inputString)
{
string result = "";
if (inputString == ".")
{
if (currentNumber.IndexOf(".") < 0)
{
if (currentNumber.Length == 0)
result = "0" + inputString;
else
result = currentNumber + inputString;
}
}
else if (currentNumber == "0")
{
result = inputString;
}
else
{
result = currentNumber + inputString;
}
return result;
}
}
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
throw new Exception("除数不能为0。");
result = NumberA / NumberB;
return result;
}
}
class OperationSqr : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberB * NumberB;
return result;
}
}
class OperationSqrt : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB < 0)
throw new Exception("负数不能开平方根。");
result = Math.Sqrt(NumberB);
return result;
}
}
class OperationReverse : Operation
{
public override double GetResult()
{
double result = 0;
result = -NumberB;
return result;
}
}
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
{
oper = new OperationAdd();
break;
}
case "-":
{
oper = new OperationSub();
break;
}
case "*":
{
oper = new OperationMul();
break;
}
case "/":
{
oper = new OperationDiv();
break;
}
case "sqr":
{
oper = new OperationSqr();
break;
}
case "sqrt":
{
oper = new OperationSqrt();
break;
}
case "+/-":
{
oper = new OperationReverse();
break;
}
}
return oper;
}
private void buttonAdd_Click(object sender, EventArgs e)
{
if (txtShow.Text != "")
{
oper = OperationFactory.createOperate(((Button)sender).Text);
oper.NumberA = Convert.ToDouble(txtShow.Text);
bOperate = true;
}
}
private void buttonEqual_Click(object sender, EventArgs e)
{
if (txtShow.Text != "")
{
if (((Button)sender).Text != "=")
{
oper = OperationFactory.createOperate(((Button)sender).Text);
}
oper.NumberB = Convert.ToDouble(txtShow.Text);
txtShow.Text = oper.GetResult().ToString();
bOperate = true;
}
}
http://topic.csdn.net/u/20090928/21/a476920f-49aa-4975-a1cd-2d6fc806698f.html --------------------编程问答-------------------- 1、你点第一运算符没错是因为你有个默认值0,第一点完textBox被清空,第二点击
你执行了 ,空字符是不能进行数据转换的
dblA = Convert.ToDouble(this.TextBox1.Text);
2、你没点完一次Button 执行了下面那段代码,数据能不被清空吗?
this.TextBox1.Text = "";--------------------编程问答--------------------
如果无默认值,正负号就出错了。。。。 --------------------编程问答-------------------- 慢慢研究3楼的 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 研究3楼当中~~
可是我很菜。。。。。。。。 --------------------编程问答-------------------- 点了运算符后为什么要清空数据呀??
那样你第二次点的话,,再转化为空肯定就会报错了!~~
我觉得点击加减之类的运算符,只要用一个变量记住运算符就行了,没有必要清空数据!~~
点数据的时候判断运算符是什么,执行操作,并清空存储运算符的变量!~~ --------------------编程问答-------------------- 还是做不出来..................... --------------------编程问答-------------------- 谁来帮帮我啊~~~~~~~~~~~~~~ --------------------编程问答-------------------- 运算符号点击两下就出错.......
如何解决啊...???
能在我原有的基础上改进吗??
太复杂我不懂.......... --------------------编程问答-------------------- 这个我记得有源码的。 --------------------编程问答--------------------
哪里啊? --------------------编程问答-------------------- 计算器C#全代码
我搜索的,我自己以前就看过c#的计算器源代码 --------------------编程问答-------------------- 窗体的??
我要网页的........ --------------------编程问答-------------------- up --------------------编程问答--------------------
有区别? --------------------编程问答--------------------
有啊.......... --------------------编程问答-------------------- 唉~
5........... --------------------编程问答--------------------
protected void Button12_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "*";
this.TextBox1.Text = "";
}
点乘号,,点了一次后this.TextBox1.Text = "";清空
然后还点一次乘号。
注意:dblA = Convert.ToDouble(this.TextBox1.Text); 这句错了,
因为此时 this.TextBox1.Text 为空
需要进行判断是否可以转化为double
--------------------编程问答--------------------
static string sOper = "";
static string Oper2 = "";//存放第二个操作数
static double dblA, dblB;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button13_Click(object sender, EventArgs e)
{
Button B1 = (Button)sender;
if (sOper != "")
{
this.TextBox1.Text = "";
Oper2 += B1.Text;
this.TextBox1.Text += Oper2;
}
else
{
if (this.TextBox1.Text != "0")
this.TextBox1.Text += B1.Text;
else
this.TextBox1.Text = B1.Text;
}
}
protected void Button1_Click(object sender, EventArgs e) //清除
{
this.TextBox1.Text = "0";
}
protected void Button18_Click(object sender, EventArgs e) //小数点
{
int n = TextBox1.Text.IndexOf(".");
if (n == -1) //如果没有小数点,增加小数点,防止多次输入小数点
TextBox1.Text += ".";
}
protected void Button2_Click(object sender, EventArgs e) //正负号
{
this.TextBox1.Text = Convert.ToString(double.Parse(this.TextBox1.Text) * -1);
}
protected void Button4_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "+";
}
protected void Button8_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "-";
}
protected void Button12_Click(object sender, EventArgs e)
{
if (this.TextBox1.Text != "")
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "*";
}
}
protected void Button16_Click(object sender, EventArgs e)
{
dblA = Convert.ToDouble(this.TextBox1.Text);
sOper = "/";
}
protected void Button19_Click(object sender, EventArgs e)
{
if (sOper != "")
{
dblB = Convert.ToDouble(Oper2);
switch (sOper)
{
case "+": dblA += dblB; break;
case "-": dblA -= dblB; break;
case "*": dblA *= dblB; break;
case "/":
if (dblB != 0)
dblA /= dblB; break;
}
this.TextBox1.Text = Convert.ToString(dblA);
dblB = dblA;//将计算结果赋给易做图作数,以便执行第二次操作
Oper2 = "";
sOper = "";
}
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
}
在你的代码上修改的,技术简陋,基本解决你说的问题 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 我也在做,一开始做个简单的 --------------------编程问答-------------------- 如果只想用JS实现可以直接用eval(),C#也可以使用js的eval --------------------编程问答--------------------
木有区别的, --------------------编程问答--------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: center">
<br />
<asp:Panel ID="Panel1" runat="server" Height="200px" Width="211px" ForeColor="Black" BackColor="#FFFF80">
<br />
计算器<br />
<br />
<asp:TextBox ID="txtResult" runat="server" Width="139px" Height="23px" style="text-align:right" >0</asp:TextBox><br />
<br />
<asp:Button ID="Button1" runat="server" Text="C" Height="35px" Width="73px" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="+/-" Height="35px" Width="35px"
OnClick="Button2_Click" />
<asp:Button ID="Button4" runat="server" Text="+" Height="35px" Width="35px" OnClick="Opar_Click" /><br />
<asp:Button ID="Button5" runat="server" Text="7" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button6" runat="server" Text="8" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button7" runat="server" Text="9" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button8" runat="server" Text="-" Height="35px" Width="35px" OnClick="Opar_Click" /><br />
<asp:Button ID="Button9" runat="server" Text="4" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button10" runat="server" Text="5" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button11" runat="server" Text="6" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button12" runat="server" Text="*" Height="35px" Width="35px" OnClick="Opar_Click" /><br />
<asp:Button ID="Button13" runat="server" Text="1" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button14" runat="server" Text="2" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button15" runat="server" Height="35px" Text="3" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button16" runat="server" Height="35px" Text="/" Width="35px" OnClick="Opar_Click"/><br />
<asp:Button ID="Button17" runat="server" Text="0" Height="35px" Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button18" runat="server" Height="35px" Text="." Width="35px" OnClick="btnNumber_Click" />
<asp:Button ID="Button19" runat="server" Text="=" Height="35px" Width="73px" OnClick="Opar_Click" />
<br />
<br />
</asp:Panel>
</div>
</form>
</body>
</html>
--------------------编程问答-------------------- 厉害 偶没有搞过
using System;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
static private double prepValue = 0;//前一次值
static private bool bAppend = true;//用户按的数字是否连接在显示的数字后面
static private string prepOpar = "";//前一次的操作符号
//置0
protected void Button1_Click(object sender, EventArgs e)
{
txtResult.Text = "0";
prepOpar = "";
bAppend = true;
prepValue = 0;
}
//处理数字键和“.”
protected void btnNumber_Click(object sender, EventArgs e)
{
string strNum = ((Button)sender).Text;
if (bAppend)
{
if (strNum == ".")
{
txtResult.Text += ".";
return;
}
txtResult.Text = double.Parse(txtResult.Text + strNum).ToString();
}
else
{
txtResult.Text = strNum;
bAppend = true;
}
}
//处理+-*/
protected void Opar_Click(object sender, EventArgs e)
{
if (txtResult.Text == "")
{
return;
}
double nCurValue = double.Parse(txtResult.Text); ;
switch (prepOpar)
{
case "+":
nCurValue += prepValue;
break;
case "-":
nCurValue = prepValue - nCurValue;
break;
case "*":
nCurValue *= prepValue;
break;
case "/":
nCurValue = prepValue / nCurValue;
break;
default:
break;
}
prepOpar = ((Button)sender).Text;
bAppend = false;
txtResult.Text = nCurValue.ToString();
prepValue = nCurValue;
}
//正负转换
protected void Button2_Click(object sender, EventArgs e)
{
txtResult.Text = (double.Parse(this.txtResult.Text) * -1).ToString();
}
}
补充:.NET技术 , ASP.NET