C#简易计算器.docx
- 文档编号:7044798
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:12
- 大小:45.89KB
C#简易计算器.docx
《C#简易计算器.docx》由会员分享,可在线阅读,更多相关《C#简易计算器.docx(12页珍藏版)》请在冰豆网上搜索。
C#简易计算器
简单计算器
源码下载地址:
1.设计外观参照小米手机中的自带计算器,实际设计出的效果如下:
功能介绍:
1.拥有简单的加、减、乘、除等功能,具有输入错误回退的功能和清空功能。
2.可显示上一个计算表达式及其结果。
设计思路:
1.同一个表达式中不能存在两个以上操作方法在一起的情况,如*/、**、*+,但可以存在/-、*-两种情况,此时的“-”只表示正负标识。
2.回退按钮每次点击只能回退一个字符;
计算过程:
第一步:
先用一个List
当需要回退时,只需从后往前移除list1对象中的值。
第二步:
当点击“=”开始计算结果时,将list1列表中的字符进行分类,用临时局部变量List
第三步:
计算表达式中的乘、除操作,并将新的结果保存在新的List
同时将b列表中的加、减操作方法按顺序复制到List
第四步:
计算加、减操作,通过for循环将list2操作数按照list3中的操作方法逐个进行求和计算,当操作数计算完成后,最后的sum结果就是整个表达式的结果。
源代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespaceWForms1
{
publicpartialclassForm1:
Form
{
privateStringresultText="0";
privateBooleanisEnd=false;//false表示该次计算未结束,true表示该次方法已经计算完成
privateBooleanpreOptType=false;//false表示数字,true表示方法
privateStringpreOptParam="";
privateBooleanoverOptCount=false;
privateList
privateList
privateList
publicForm1()
{
InitializeComponent();
}
privatevoidtableLayoutPanel1_Paint(objectsender,PaintEventArgse)
{
}
privatevoidbutton1_Click_1(objectsender,EventArgse)
{
InitResult();
}
privatevoidtextBox1_TextChanged(objectsender,EventArgse)
{
}
privatevoidFallback_Click(objectsender,EventArgse)
{
Stringtemp=resultText;
if(temp.Length>1&&!
isEnd)
{//回退页面显示值
resultText=temp.Substring(0,temp.Length-1);
result1.Text=resultText;
//回退列表值
overOptCount=false;
optListSub.RemoveAt(optListSub.Count-1);
}
else{
InitResult();
}
}
//初始化结果
privatevoidInitResult(){
resultText="0";
result1.Text=resultText;
result2.Text="";
optList=newList
mList=newList
optListSub=newList
}
privatedoubleremovePoint(Stringnum_str){
if(num_str.Length>1){
Stringnum=num_str.Substring(num_str.Length-1);
if(num==".")
{
returnConvert.ToDouble(num_str.Substring(0,num_str.Length-2));
}
else{
returnConvert.ToDouble(num_str);
}
}
elseif(num_str=="."||num_str=="")
{
return0;
}
else{
returnConvert.ToDouble(num_str);
}
}
privatevoidaddOperationObject(Stringopt,Booleantype){
if(isEnd==true){
result2.Text=result2.Text+result1.Text;
result1.Text="";
resultText="0";
isEnd=false;
}
if(optListSub.Count==0){
optListSub.Add("0");
}
if(type==false)
{
overOptCount=false;
if(opt!
=".")
{
//显示数据1
if(resultText!
="0")
{
resultText+=opt;
optListSub.Add(opt);
}
else
{
resultText=opt;
optListSub[0]=opt;
}
}
else{
//检测数据字符中是否存在“.”
BooleanpointIsExist=false;
for(intk=optListSub.Count-1;k>-1;k--)
{
if((optListSub[k]=="*")||(optListSub[k]=="/")||(optListSub[k]=="+")||(optListSub[k]=="-")){
if(k==optListSub.Count-1){
pointIsExist=true;
}
break;
}
elseif(optListSub[k]=="."){
pointIsExist=true;
break;
}
}
if(pointIsExist==false)
{
resultText+=opt;
optListSub.Add(opt);
}
}
}
else{
//显示数据2排除同时存在两个操作方法的情况
if(preOptType==true){
if((preOptParam=="/"||preOptParam=="*")&&opt=="-"&&overOptCount==false)
{
overOptCount=true;
resultText+=opt;
optListSub.Add(opt);
}
//操作方法替换
else{
if(overOptCount==true&&(opt!
="-"))
{
resultText=resultText.Substring(0,resultText.Length-2)+opt;
optListSub[optListSub.Count-2]=opt;
optListSub.RemoveAt(optListSub.Count-1);
overOptCount=false;
}
else{
resultText=resultText.Substring(0,resultText.Length-1)+opt;
optListSub[optListSub.Count-1]=opt;
}
}
}else{
resultText+=opt;
optListSub.Add(opt);
}
}
preOptParam=opt;
preOptType=type;
result1.Text=resultText;
}
privatevoidnum1_Click(objectsender,EventArgse)
{
addOperationObject("1",false);
}
privatevoidnum2_Click(objectsender,EventArgse)
{
addOperationObject("2",false);
}
privatevoidnum3_Click(objectsender,EventArgse)
{
addOperationObject("3",false);
}
privatevoidnum4_Click(objectsender,EventArgse)
{
addOperationObject("4",false);
}
privatevoidnum5_Click(objectsender,EventArgse)
{
addOperationObject("5",false);
}
privatevoidnum6_Click(objectsender,EventArgse)
{
addOperationObject("6",false);
}
privatevoidnum7_Click(objectsender,EventArgse)
{
addOperationObject("7",false);
}
privatevoidnum8_Click(objectsender,EventArgse)
{
addOperationObject("8",false);
}
privatevoidnum9_Click(objectsender,EventArgse)
{
addOperationObject("9",false);
}
privatevoidnum0_Click(objectsender,EventArgse)
{
addOperationObject("0",false);
}
privatevoidpoint_Click(objectsender,EventArgse)
{
addOperationObject(".",false);
}
privatevoidexcept_Click(objectsender,EventArgse)
{
addOperationObject("/",true);
}
privatevoidmultiply_Click(objectsender,EventArgse)
{
addOperationObject("*",true);
}
privatevoidminus_Click(objectsender,EventArgse)
{
addOperationObject("-",true);
}
privatevoidadd_Click(objectsender,EventArgse)
{
addOperationObject("+",true);
}
privatevoidresultButton_Click(objectsender,EventArgse)
{
if(isEnd==false){
isEnd=true;
doublesum=0;
Stringnum_str="";
List
List
//组合字符并区分操作数和操作方法
for(intk=0;k { if((optListSub[k]=="*")||(optListSub[k]=="/")||(optListSub[k]=="+")||(optListSub[k]=="-")) { if(k>0&&(optListSub[k]=="-")&&((optListSub[k-1]=="*")||(optListSub[k-1]=="/"))) { oL1.Add(-removePoint(num_str));//负数时赋值 } else{ oL1.Add(removePoint(num_str)); } mL1.Add(optListSub[k]); num_str=""; } else{ num_str+=optListSub[k]; if(k==optListSub.Count-1){ oL1.Add(removePoint(num_str)); } } } //计算表达式中的乘除 if(oL1.Count>=1) { optList.Add(oL1[0]); } for(intj=1;j { if(mL1.Count>j-1){ if((mL1[j-1]=="*")&&(j optList[optList.Count-1]=optList[optList.Count-1]*oL1[j]; } elseif((mL1[j-1]=="/")&&(j { if(oL1[j]! =0) { optList[optList.Count-1]=(optList[optList.Count-1])/oL1[j]; } else{ result2.Text="="+result1.Text; result1.Text="无穷"; optList=newList mList=newList optListSub=newList return; } } else { optList.Add(oL1[j]); mList.Add(mL1[j-1]); } } } //计算表达式中的加减法 if(optList.Count>=1){sum=optList[0];} if(optList.Count>1){ for(inti=1;i { if(mList[i-1]=="+"){ sum+=optList[i]; } elseif(mList[i-1]=="-") { sum=sum-optList[i]; } } } optList=newList mList=newList optListSub=newList result2.Text=result1.Text+"="; result1.Text=sum+""; } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 简易 计算器