⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 Csharp实例编程百例.rar
💻 CS
📖 第 1 页 / 共 2 页
字号:
			// 
			// numBox
			// 
			this.numBox.Location = new System.Drawing.Point(21, 16);
			this.numBox.Name = "numBox";
			this.numBox.Size = new System.Drawing.Size(275, 21);
			this.numBox.TabIndex = 8;
			this.numBox.Text = "";
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.ClientSize = new System.Drawing.Size(320, 237);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.numBox,
																		  this.panel2,
																		  this.panel1});
			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
			this.MaximizeBox = false;
			this.Name = "Form1";
			this.Text = "MyCalcApp";
			this.Load += new System.EventHandler(this.Form1_Load);
			this.panel1.ResumeLayout(false);
			this.panel2.ResumeLayout(false);
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// 应用程序的主入口点。
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}


		//枚举类型,各种操作符
		enum calcOperators:int
		{
			add,sub,mul,div,log,exp,sqr,result
		};
		//枚举类型,2个运算阶段,第一个阶段中读取第一个操作数和第一个运算符,第二个阶段中读取第二个操作数和第二个运算符
		enum calcPeriod:int
		{
			pfirstnum,psecondnum
		};

		//两个操作数
		private double firstNumber,secondNumber;
		//前一个操作符和当前操作符
		private calcOperators oldOp,newOp;
		//当前运算阶段
		private calcPeriod myPeriod;
		//第二阶段是否可以重复进行
		private bool dosecondAgain = false;
		
		//调用MyNumberBox的reSet方法,设置文本“0.”。同时计算阶段设为1
		private void Form1_Load(object sender, System.EventArgs e)
		{
			numBox.reSet ();
			myPeriod = calcPeriod.pfirstnum ;
		}

		//调用MyNumberBox的reSet方法,重置文本“0.”。同时计算阶段设为1
		private void btnC_Click(object sender, System.EventArgs e)
		{
			numBox.reSet ();
			myPeriod = calcPeriod.pfirstnum ;
		}


		//调用MyNumberBox的MyInputKey方法,向文本框中输入字符
		private void btn0_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '0');
		}

		private void btn1_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '1');
		}

		private void btn2_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '2');
		}

		private void btn3_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '3');
		}

		private void btn4_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '4');
		}

		private void btn5_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '5');
		}

		private void btn6_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '6');
		}

		private void btn7_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '7');
		}

		private void btn8_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '8');
		}

		private void btn9_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '9');
		}

		private void btndot_Click(object sender, System.EventArgs e)
		{
			numBox.MyInputKey (this, '.');
		}


		//设置当前运算符,调用MyCalc方法计算
		private void btnAdd_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.add ;
			MyCalc();
		}

		private void btnSub_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.sub  ;
			MyCalc();
		}

		private void btnMul_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.mul ;
			MyCalc();
		}

		private void btnDiv_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.div ;
			MyCalc();
		}

		private void btnLog_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.log ;
			MyCalc();
		}

		private void btnExp_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.exp ;
			MyCalc();
		}

		private void btnSqr_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.sqr;
			MyCalc();
		}

		private void btnResult_Click(object sender, System.EventArgs e)
		{
			newOp = calcOperators.result ;
			MyCalc();
		}

		//根据当前计算阶段和操作数,进行计算
		private void MyCalc()
		{
			switch (myPeriod)
			{
				//计算的第一阶段,读第一个操作数
				case calcPeriod.pfirstnum :
					firstNumber = numBox.InputNumber ;
					switch (newOp)
					{	//如果是+-*÷,进入第二阶段
						case calcOperators.add :
						case calcOperators.sub :
						case calcOperators.mul :
						case calcOperators.div :
							myPeriod = calcPeriod.psecondnum ;
							oldOp = newOp;
							break;
						//如果是=,什么也不做
						case calcOperators.result :
							break;
						//如果是log,exp,sqrt,对第一个操作数运算
						case calcOperators.log :
						case calcOperators.exp :
						case calcOperators.sqr :
							MyDoOne(ref firstNumber);
							break;
					}
					break;
				case calcPeriod.psecondnum :
					switch (newOp)
					{	//如果是+-*÷
						case calcOperators.add :
						case calcOperators.sub :
						case calcOperators.mul :
						case calcOperators.div :
							//如果已经有新输入操作数,或者需要再次计算
							if ((!numBox.reInput )||(dosecondAgain))
							{
								dosecondAgain = false;
								secondNumber = numBox.InputNumber;
								//读取第二个操作数,计算
								MyDoTwo(ref firstNumber,secondNumber);
							}
							else
							{	//没有输入第二个操作数,记录当前运算符
								oldOp = newOp;
							}
							break;
						//如果是=
						case calcOperators.result :
							if ((!numBox.reInput )||(dosecondAgain))
							{
								dosecondAgain = false;
								secondNumber = numBox.InputNumber;
								MyDoTwo(ref firstNumber,secondNumber);
							}
							//设置计算阶段为第一阶段,等待重新输入第一个数,或者操作符
							myPeriod = calcPeriod.pfirstnum ;
							break;						
						//如果是log,exp,sqrt
						case calcOperators.log :
						case calcOperators.exp :
						case calcOperators.sqr :
							//如果输入第二个操作数
							if (!numBox.reInput)
							{
								secondNumber = numBox.InputNumber ;
								//计算第二个操作数的函数,可以再次计算
								MyDoOne(ref secondNumber);
								dosecondAgain = true;
							}
							else
							{	//没有输入第二个操作数,计算第一个操作数的函数
								MyDoOne(ref firstNumber);
							}
							break;
					}
					break;
			}
			//再次输入需先清除,也表示尚未再次输入
			numBox.reInput = true;
		}
		
		//进行两元运算符计算,结果存入第一个操作符
		private void MyDoTwo(ref double num1,double num2)
		{
			switch (oldOp)
			{
				case calcOperators.add :
					num1 = num1+num2;
					break;
				case calcOperators.sub :
					num1 = num1-num2;
					break;
				case calcOperators.mul :
					num1 = num1*num2;
					break;
				case calcOperators.div :
					num1 = num1/num2;
					break;
			}
			oldOp = newOp;
			//显示结果,并进行判断,决定是否在最后面显示“.”
			numBox.Text = String.Format ("{0}{1}",num1.ToString (),
							(num1.ToString ().IndexOf ('.')==-1)?".":"");

		}
		//进行一元运算符计算,即各个函数的计算,结果保存在操作数中
		private void MyDoOne(ref double number)
		{
			try
			{
				switch (newOp)
				{
					case calcOperators.log :
						number = Math.Log10 (number);
						break;
					case calcOperators.exp :
						number = Math.Exp (number);
						break;
					case calcOperators.sqr :
						number = Math.Sqrt (number);
						break;
				}
			}
			catch(Exception ex){
				MessageBox.Show (ex.Message);
				numBox.reSet ();
				numBox.reInput = true;
				myPeriod = calcPeriod.pfirstnum ;
			}
			//显示结果,并进行判断,决定是否在最后面显示“.”
			numBox.Text = String.Format ("{0}{1}",number.ToString (),
							(number.ToString ().IndexOf ('.')==-1)?".":"");
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -