计算器实验报告.docx

上传人:b****7 文档编号:11068551 上传时间:2023-02-24 格式:DOCX 页数:15 大小:264.43KB
下载 相关 举报
计算器实验报告.docx_第1页
第1页 / 共15页
计算器实验报告.docx_第2页
第2页 / 共15页
计算器实验报告.docx_第3页
第3页 / 共15页
计算器实验报告.docx_第4页
第4页 / 共15页
计算器实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

计算器实验报告.docx

《计算器实验报告.docx》由会员分享,可在线阅读,更多相关《计算器实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

计算器实验报告.docx

计算器实验报告

计算器实验报告

实验一计算器的制作

一.实验要求

1.参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。

2.控件的焦点以及Tab键的设置和使用

3.多个控件(按钮)事件的共享

4.键盘的事件的应用

二.设计思路

1、首先要考虑将输入的内容在textbox上显示出来。

所以整个过程采用全局变量input来记录用户输入的内容(计算器的按键输入或者键盘输入)。

然后再将input的内容显示到textbox上。

2、接下来就是怎么去将用户的输入变成数字和运算符的问题了。

本实验的计算器有“普通运算”和“科学运算”之分。

所以在计算的时候需要判断是哪一种运算,用radioButton.Checked来判断。

3、如果是普通的运算,“+”、“-”、“*”、“/”的优先级一样,所以算法比较简单,只需要将input字符串的内容分割成运算符和数字,然后再push到两个不同的栈中。

其中数字要先转换为double类型,再存入到栈中。

4、如果是科学运算,则需要按照来“+”、“-”、“*”、“/”的优先级来进行运算。

我是运用堆栈来实现的。

算法如下:

每当用户点击“+”、“-”、“*”、“/”中的任何一个键时,则进行判断,

5、

6、

7、clears();

i=input.LastIndexOfAny(fuhao);

substr=input.Substring(i+1);

if(substr!

="")

{

cal();

fh.Push("+");

click(sender,e);

}

}

privatevoidbutton14_Click(objectsender,EventArgse)//减号算法,调用cal()函数。

{

clears();

i=input.LastIndexOfAny(fuhao);

substr=input.Substring(i+1);

if(substr!

="")

{

cal();

fh.Push("-");

click(sender,e);

}

}

privatevoidbutton15_Click(objectsender,EventArgse)//乘号算法。

会先判断该运算符前面一个是不是“+”或者“-”号,然后进行相应的处理。

设置flag1/flag2为true。

{

clears();

i=input.LastIndexOfAny(fuhao);

substr=input.Substring(i+1);

if(substr!

="")

{

if(radioButton2.Checked==true)

{

if(flag1==true||flag2==true)

{

cal();flag1=true;

}

else

{

flag1=true;

num.Push(Double.Parse(substr));

}

}

else

{

num.Push(Double.Parse(substr));

fh.Push("*");

}

click(sender,e);

}

}

privatevoidbutton16_Click(objectsender,EventArgse)//除号

{

clears();

i=input.LastIndexOfAny(fuhao);

substr=input.Substring(i+1);

if(substr!

=null)

{

if(radioButton2.Checked==true)

{

if(flag1==true||flag2==true)

{

cal();

flag2=true;

}

else

{

flag2=true;

num.Push(Double.Parse(substr));

}

}

else

{

num.Push(Double.Parse(substr));

fh.Push("/");

}

click(sender,e);

}

}

 

privatevoidbutton12_Click(objectsender,EventArgse)//退格键

{

//clears();

if(input!

="")

{

textBox1.Focus();

input=input.Remove(input.Length-1);

textBox1.Text=input;

substr="";str="";

num.Clear();

num22.Clear();

fh.Clear();

fh2.Clear();

flag1=false;flag2=false;flag3=true;//flag3用来记录是否触发了“退格键”。

sum=0;num1=0;num2=0;

}

}

privatevoidclears()//此函数用来处理点击“退格键”事件。

当点击退格键之后,如果点击了其他的按键,则程序会先处理这个函数。

{

if(flag3==true)

{

jianpan();

flag3=false;

input=textBox1.Text;

}

}

 

privatevoidjianpan()//键盘输入

{

input=textBox1.Text;

while(input.Contains('+')||input.Contains('-')||input.Contains('*')||input.Contains('/'))

{

j=input.IndexOfAny(fuhao);

substr=input.Substring(0,j);

if(substr!

="")

{

switch(input[j])

{

case'+':

cal();fh.Push("+");break;

case'-':

cal();fh.Push("-");break;

case'*':

if(radioButton2.Checked==true)

{

if(flag1==true||flag2==true)

{

cal();flag1=true;

}

else

{

flag1=true;

num.Push(Double.Parse(substr));

}

}

else

{

num.Push(Double.Parse(substr));

fh.Push("*");

}

break;

case'/':

if(radioButton2.Checked==true)

{

if(flag1==true||flag2==true)

{

cal();

flag2=true;

}

else

{

flag2=true;

num.Push(Double.Parse(substr));

}

}

else

{

num.Push(Double.Parse(substr));

fh.Push("/");

}

break;

}

}

input=input.Substring(j+1);

}

substr=input;

}

privatevoidbutton18_Click(objectsender,EventArgse)//“=”号键

{

clears();

if(input=="")

{

jianpan();

cal();

input=textBox1.Text;

}

else

{

i=input.LastIndexOfAny(fuhao);

substr=input.Substring(i+1);//Console.Write(substr);

if(substr!

="")

{

cal();

}

}

while(num.Count!

=0)

{

num1=num.Pop();

num22.Push(num1);

}

foreach(doublenumberinnum22)

{

Console.Write(number+"");

}

while(fh.Count!

=0)

{

substr=fh.Pop();

fh2.Push(substr);

}

foreach(stringfuhinfh2)

{

Console.Write(fuh+"");

}

if(fh2.Count!

=0)

{

sum=0;

num1=num22.Pop();

while(num22.Count!

=0)

{

num2=num22.Pop();

substr=fh2.Pop();

switch(substr)

{

case"+":

sum=num1+num2;num1=sum;break;

case"-":

sum=num1-num2;num1=sum;break;

case"*":

sum=num1*num2;num1=sum;break;

case"/":

sum=num1/num2;num1=sum;break;

default:

break;

}

}

}

else{sum=num22.Pop();}

textBox1.Text=sum.ToString();

input=sum.ToString();

substr="";str="";

num.Clear();

num22.Clear();

fh.Clear();

fh2.Clear();

flag1=false;flag2=false;flag3=false;

sum=0;num1=0;num2=0;

}

三.程序运行效果图

1.简单的四则混合运算:

科学运算:

输入一串式子1+2-3*4/5+6+7/2+1*2-1如下:

计算结果如图所示,正确。

普通运算:

输入一串式子1+2+4*2/2.5-3,如图:

计算结果如下所示,正确。

2.简单的有小数的四则混合运算:

输入一串式子1.2*2.5+1+7/2.5-2,如图:

计算结果如下所示,正确。

4实验总结

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1