计算器之C++.NET实现 V1.20

原文链接:http://www.cnblogs.com/sanwave/archive/2011/04/01/2002010.html

针对上次的计算器代码整理并做了修改之后,主要更正了算法的一个Bug并修改了UI,故另发一博文。V1.20计算器之C++.NET实现 V1.20

#pragma once     namespace Calculator {         using namespace System;       using namespace System::ComponentModel;       using namespace System::Collections;       using namespace System::Windows::Forms;       using namespace System::Data;       using namespace System::Drawing;         /// <summary>       /// Form1 摘要       /// </summary> public ref class Form1 : public System::Windows::Forms::Form {       public:       Form1(void)       {             InitializeComponent();             //             //TODO: 在此处添加构造函数代码             //       }         protected:       /// <summary>       /// 清理所有正在使用的资源。       /// </summary>       ~Form1()       {             if (components)            {                   delete components;             }       }       private: System::Windows::Forms::TextBox^  txtInfo;       static array<System::Windows::Forms::Button^>^btnNumber=gcnew array<System::Windows::Forms::Button^>(10);       static array<System::Windows::Forms::Button^>^Operator=gcnew array<System::Windows::Forms::Button^>(10);       private: System::Windows::Forms::TextBox^  txtFormula;       private: System::Windows::Forms::Button^  btnDot;        static bool bEquation=false,bNumber=true,bDot=false;   //用于记录等号、数字、小数点按钮的状态        static double a=0,b=0,c=0,answer=0;        static char m='\0',n='\0';        static int cOperator=0; //用于记录操作符按钮的状态             protected:        public: void Count(){   //计算函数              switch(n){              case'+':              case'-':                    switch(m){                    case'+':a=a+b;b=c;m=n;break;                    case'-':a=a-b;b=c;m=n;break;                    case'*':a=a*b;b=c;m=n;break;                    case'/':a=a/b;b=c;m=n;break;                    }                    break;              case'*':                     if(m=='/') {a=a/b;b=c;m=n;break;}                     else{ b=b*c;break;}              case'/':                    if(m=='/') {a=a/b;b=c;m=n;break;}                    else{ b=b/c;break;}              case'\0':break;              }              if(bEquation){            //如果bEquation为真,则执行如下运算                    switch(m){                     case'+':a=a+b;break;                    case'-':a=a-b;break;                    case'*':a=a*b;break;                    case'/':a=a/b;break;                    case'\0':txtFormula->AppendText("Error!");                    }              }       }         void Startup(){                  //载入时初始化按钮控件             for(int i=0;i<=9;i++){                btnNumber[i]=gcnew Button();                this->Controls->Add(this->btnNumber[i]);                btnNumber[i]->Left=36+60*((i-1)%3);                btnNumber[i]->Top=230-50*((i-1)/3);                btnNumber[i]->Width=50;                btnNumber[i]->Height=35;                btnNumber[i]->Name="btnNumber"+i.ToString();                btnNumber[i]->Text=i.ToString();                btnNumber[i]->Font=(gcnew System::Drawing::Font(L"Microsoft YaHei", 13.5F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,static_cast<System::Byte>(134)));                btnNumber[i]->Click+=gcnew System::EventHandler(this, &Form1::button_Click);              }              btnNumber[0]->Location=System::Drawing::Point(36,280);              btnNumber[0]->Size= System::Drawing::Size(110, 35);              for(int i=0;i<=5;i++){                    Operator[i]=gcnew Button();                    this->Controls->Add(this->Operator[i]);                    Operator[i]->Left=36+60*((5-i));                    Operator[i]->Top=80;                    Operator[i]->Width=50;                    Operator[i]->Height=35;                    Operator[i]->Font=(gcnew System::Drawing::Font(L"Microsoft YaHei", 13.5F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,static_cast<System::Byte>(134)));                    Operator[i]->Click+=gcnew System::EventHandler(this, &Form1::button_Click);              }              Operator[0]->Text="=";              Operator[1]->Text="+";              Operator[2]->Text="-";              Operator[3]->Text="*";              Operator[4]->Text="/";              Operator[5]->Text="C";              Operator[0]->Left=216;              Operator[0]->Top=230;              Operator[0]->Size=System::Drawing::Size(50,85);              Operator[1]->Left=216;              Operator[1]->Top=130;              Operator[1]->Size=System::Drawing::Size(50,85);              bEquation=false;       }         private:       /// <summary>       /// 必需的设计器变量。       /// </summary>       System::ComponentModel::Container ^components;     #pragma region Windows Form Designer generated code       /// <summary>       /// 设计器支持所需的方法 - 不要       /// 使用代码编辑器修改此方法的内容。       /// </summary>       void InitializeComponent(void)       {             this->txtInfo = (gcnew System::Windows::Forms::TextBox());             this->txtFormula = (gcnew System::Windows::Forms::TextBox());             this->btnDot = (gcnew System::Windows::Forms::Button());             this->SuspendLayout();              //              // txtInfo             //              this->txtInfo->BackColor = System::Drawing::SystemColors::GradientInactiveCaption;             this->txtInfo->BorderStyle = System::Windows::Forms::BorderStyle::None;             this->txtInfo->Cursor = System::Windows::Forms::Cursors::Default;             this->txtInfo->Font = (gcnew System::Drawing::Font(L"Consolas", 15, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,  static_cast<System::Byte>(0)));             this->txtInfo->ImeMode = System::Windows::Forms::ImeMode::Close;             this->txtInfo->Location = System::Drawing::Point(12, 25);             this->txtInfo->Margin = System::Windows::Forms::Padding(3, 4, 3, 4);             this->txtInfo->Name = L"txtInfo";             this->txtInfo->ReadOnly = true;             this->txtInfo->Size = System::Drawing::Size(266, 24);             this->txtInfo->TabIndex = 0;             this->txtInfo->TextAlign = System::Windows::Forms::HorizontalAlignment::Right;             this->txtInfo->WordWrap = false;                         //              // txtFormula             //              this->txtFormula->BackColor = System::Drawing::SystemColors::GradientInactiveCaption;             this->txtFormula->BorderStyle = System::Windows::Forms::BorderStyle::None;             this->txtFormula->Font = (gcnew System::Drawing::Font(L"Consolas", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,  static_cast<System::Byte>(0)));             this->txtFormula->ImeMode = System::Windows::Forms::ImeMode::Close;             this->txtFormula->Location = System::Drawing::Point(12, 10);             this->txtFormula->Name = L"txtFormula";             this->txtFormula->ReadOnly = true;             this->txtFormula->Size = System::Drawing::Size(266, 15);             this->txtFormula->TabIndex = 1;             this->txtFormula->TextAlign = System::Windows::Forms::HorizontalAlignment::Right;             //              // btnDot             //              this->btnDot->BackColor = System::Drawing::SystemColors::GradientActiveCaption;             this->btnDot->Font = (gcnew System::Drawing::Font(L"Microsoft YaHei", 15, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,  static_cast<System::Byte>(134)));             this->btnDot->Location = System::Drawing::Point(156, 280);             this->btnDot->Name = L"btnDot";             this->btnDot->Size = System::Drawing::Size(50, 35);             this->btnDot->TabIndex = 2;             this->btnDot->Text = L".";             this->btnDot->UseVisualStyleBackColor = false;             this->btnDot->Click += gcnew System::EventHandler(this, &Form1::btnDot_Click);             //              // Form1             //              this->AutoScaleDimensions = System::Drawing::SizeF(7, 17);             this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;             this->BackColor = System::Drawing::SystemColors::GradientActiveCaption;             this->ClientSize = System::Drawing::Size(297, 336);             this->Controls->Add(this->btnDot);             this->Controls->Add(this->txtFormula);             this->Controls->Add(this->txtInfo);             this->Font = (gcnew System::Drawing::Font(L"Microsoft YaHei", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,  static_cast<System::Byte>(134)));             this->Margin = System::Windows::Forms::Padding(3, 4, 3, 4);             this->MaximizeBox = false;             this->MaximumSize = System::Drawing::Size(313, 374);             this->MinimumSize = System::Drawing::Size(313, 374);             this->Name = L"Form1";             this->Opacity = 0.99;             this->SizeGripStyle = System::Windows::Forms::SizeGripStyle::Hide;             this->Text = L"Calculator";             this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);             this->ResumeLayout(false);             this->PerformLayout();         } #pragma endregion       //窗体载入事件       private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {              txtInfo->Text="0";              Startup();       }       //绝大多数按钮共享事件        private: System::Void button_Click(System::Object^  sender, System::EventArgs^  e) {        String^ stext;        Button^ bClick=(Button^) sender;        stext=bClick->Text;         switch(Convert::ToChar(stext)){        case'0':        case'1':        case'2':        case'3':        case'4':        case'5':        case'6':        case'7':        case'8':        case'9':              if(bEquation){                    txtFormula->Clear();                    txtInfo->Text=stext->ToString();              }              else if(cOperator&&!bNumber){                    txtInfo->Text=stext->ToString();              }              else{                    if(txtInfo->Text=="0") txtInfo->Text=stext;                    else txtInfo->AppendText(stext->ToString());              }              bEquation=false;              bNumber=true;              bDot=false;              break;          case'+':        case'-':        case'*':        case'/':              if(bEquation){                  //如果刚刚按了等号按钮                    txtFormula->Text=txtInfo->Text;                    txtFormula->AppendText(stext);                    a=Convert::ToDouble(txtInfo->Text);                    m=Convert::ToChar(stext);                    bEquation=false;                    cOperator=1;                    break;              }              if(cOperator==0){               //第一回按运算符按钮                    a=Convert::ToDouble(txtInfo->Text);                    m=Convert::ToChar(bClick->Text);               }              else if(cOperator==1){                  //第二回按按钮                    b=Convert::ToDouble(txtInfo->Text);                    n=Convert::ToChar(stext);              }              else{                                    //第三回按按钮                    c=Convert::ToDouble(txtInfo->Text);                    Count();                    c=0;                    n=Convert::ToChar(stext);              }              txtFormula->AppendText(txtInfo->Text);//将txtInfo的数据添加到txtFormula              txtFormula->AppendText(stext);//运算符添加到txtFormula              bEquation=false;              bNumber=false;              cOperator++;              bDot=false;              break;           case'=':              if(bEquation){                     break;               }              bEquation=true;               bNumber=false;              txtFormula->AppendText(txtInfo->Text);              txtFormula->AppendText("=");              if(cOperator==0) { break; }              else if(cOperator==1) b=Convert::ToDouble(txtInfo->Text);              else c=Convert::ToDouble(txtInfo->Text);              Count();              answer=a;              txtInfo->Text=answer.ToString();              cOperator=0;              a=b=c=0;              m=n='0';               break;          case 'C'://全部初始化              txtInfo->Text="0";              txtFormula->Text="";              a=b=c=answer=0;              m=n='\0';              bDot=false;              break;          }        }        //小数点按钮       private: System::Void btnDot_Click(System::Object^  sender, System::EventArgs^  e) {              if(bDot==false&&bNumber){                    txtInfo->AppendText(".");               }              bDot=true;                    bNumber=true;        }       }; }

 

源码下载  http://cid-c96c6ec8ad8dcfea.office.live.com/browse.aspx/Program/Calculator  V1.20

转载于:https://www.cnblogs.com/sanwave/archive/2011/04/01/2002010.html

上一篇:C#等比例缩放图片


下一篇:c# – 双向导航时叠加在当前视图上的最后一个视图