C++.NET的简易计算器的制作

计算器的制作需要实现一下几个功能:加减乘除,连续计算,重复计算。

加减乘除就是简单的二元运算,连续计算就是不使用等号连续进行几次二元运算,重复计算就是进行一次二元运算之后再次单击等号可以将之前的运算再次进行一次。

由于是C++的窗体程序,所以先设计出窗体的界面。界面如下。

需要注意的是,上面的两个显示框用的是TextBox,其余的均是Button。

窗体的FormBorderStyle属性应改成FixedSingle或其他,不能用None,这个样子计算器窗体框的大小就是固定不可变的。

MaximizeBox属性应该改成False,将最大化按钮屏蔽。

TextBox的ReadOnly属性应为True(应为我所做的这个计算器是不支持键盘输入的,要是进行键盘输入的扩展就不必做这一步)。

窗体界面设计好了,接下来就要写代码了。

我创建了一个新类叫做Calculate,用来存储需要计算的数据,如计算的两个数,某个键是否已经按过,当前的运算符号是什么,计算方法等。

创建方法如下:单击项目->添加类->C++类,然后按照提示操作就行。

假如类以后在VS里面会自动在头文件处生成一个Calculate.h文件,在源文件处生成Calculate.cpp文件,Calculate.cpp文件里面只有一个构造函数的定义,Calculate.h里面是类的具体定义,两个代码如下:

Calculate.cpp

 1 #include "stdafx.h"
 2 #include "Calculate.h"
 3
 4
 5 Calculate::Calculate()
 6 {
 7     Num1 = 0;
 8     Num2 = 0;
 9     m_sig = ‘+‘;
10     m_Own = ‘+‘;
11     m_equal = false;
12     m_Calcu = false;
13 }

Calculate.h

 1 #pragma once
 2 ref class Calculate
 3 {
 4 private:
 5     double Num1,Num2;
 6     char m_sig,m_Own;
 7     bool m_equal,m_Calcu;//确定等号,计算符号是否已经按下。
 8 public:
 9     Calculate();
10     char getItself(){ return m_Own; }
11     bool getEqual() { return m_equal; }
12     bool getCalcu() { return m_Calcu; }
13     double getNum2() { return Num2; }
14     double getNum1() { return Num1; }
15     void setNum1(double i) { Num1 = i; }
16     void setNum2(double i) { Num2 = i; }
17     void setSig(char x) { m_sig = x; }
18     void setItself(char x) { m_Own = x; }
19     void setEqual(bool x) { m_equal = x; }
20     void setCalcu(bool x) { m_Calcu = x; }
21     void Calcu(){
22         if (m_sig == ‘+‘){
23             Num1 = Num1 + Num2;
24         }
25         else if (m_sig == ‘-‘) Num1 = Num1 - Num2;
26         else if (m_sig == ‘*‘) Num1 = Num1 * Num2;
27         else{
28             if (Num2 == 0) Num1 = 0;
29             else Num1 = Num1 / Num2;
30         }
31     }
32     bool compareNum(char x){
33         if (x == ‘1‘, x == ‘2‘, x == ‘3‘, x == ‘4‘, x == ‘5‘, x == ‘6‘, x == ‘7‘, x == ‘8‘, x == ‘9‘, x == ‘0‘)
34             return true;
35         else return false;
36     }
37     void Calculation_Clear(){
38         Num1 = Num2 = 0;
39         m_sig = ‘+‘;
40     }
41 };

Calculate.h

其中Num1是用来存上一个数字,Num2是用来存本数字,m_sig是用来存当前的运行符号。

由于整个过程是利用TextBox来实现数据的显示的,所以所有的数据也就直接放到TextBox上,通过Convert::ToString和Convert::ToDouble来实现String和Double之间的转换。

由于Calculate只是一个类,需要实例化,调用这个类是在Form1.h里面(也就是我们写控件的代码的时候)调用的,所以我们的实例化是与添加的控件一起实例化的,语句是这样的:

private:Calculate ^c = gcnew Calculate();

位置在Form1的析构函数代码后面开始初始化控件的代码的最上面。

接下来的代码里面的textBox1均指的是下面那个textBox,textBox2是上面那个

Button_Click的代码,由于0~9,以及小数点符号.都是只提供数据,所以他们的代码基本都是相同的,这里只贴一个:

第一个判断条件是针对以下情况:

已经进行完了一次计算,也就是按下了等于号,再继续按数字键,这样会直接开始一次新的计算过程。所以会调用c->Calculation_Clear()函数将c中的东西全部清零

第二个是正常情况直接在Box1后面补上一个数字。

第三个是如果box1里面没有任何数字就直接让box1->text = "1"。

1     private: System::Void btn1_Click(System::Object^  sender, System::EventArgs^  e) {
2                  if (c->getEqual() == true || c->getCalcu() == false) {
3                      c->Calculation_Clear();
4                      textBox1->Text = "";
5                      c->setEqual(false);
6                  }
7                  if (textBox1->Text != "0") textBox1->Text += btn1->Text;
8                  else textBox1->Text = btn1->Text;
9     }

Btn1_Click

然后是正负号的代码。。。。

这是要在box1->text的最前面加上负号或者将负号给去掉

第一个判定条件是判定其是否为负数,是的话将最前面的负号去掉,用的是remove方法。

第二个是假如box1里面什么都没有或者只有0就不做任何改变。

第三个是在最前面加上+号

 1 private: System::Void btn_PAN_Click(System::Object^  sender, System::EventArgs^  e) {
 2                  if (textBox1->Text->StartsWith("-")){
 3                      c->setItself(‘+‘);
 4                      int found = textBox1->Text->IndexOf("-");
 5                      textBox1->Text = textBox1->Text->Remove(0, 1);
 6                  }//如果是负数
 7                  else if (textBox1->Text == "0") return;
 8                  else {
 9                      c->setItself(‘-‘);
10                      textBox1->Text = "-" + textBox1->Text;
11                  }//如果是正数
12     };

PAN

退格

通过remove box1的最后一个元素实现

1 private: System::Void btn_Back_Click(System::Object^  sender, System::EventArgs^  e) {
2                  if (textBox1->Text == "") return;
3                  textBox1->Text = textBox1->Text->Remove(textBox1->Text->Length- 1, 1);
4     }

等号

判定1:无数据,跳过

判定2:跳过

判定3:box1,box2均有数据,按照第一次计算运行Calculate方法

判定4:重复上一次的计算

 1     private: System::Void btn_equal_Click(System::Object^  sender, System::EventArgs^  e) {
 2                  if (textBox1->Text == ""&&textBox2->Text == "") return;
 3                  else if (textBox1->Text == ""&& c->getEqual() == false) return;
 4                  else if (textBox1->Text != ""&&textBox2->Text != "") {
 5                      c->setNum2(Convert::ToDouble(textBox1->Text));
 6                      c->Calcu();
 7                      textBox1->Text = Convert::ToString(c->getNum1());
 8                      textBox2->Text = "";
 9                      c->setEqual(true);
10                  }
11                  else if (textBox1->Text != ""&&textBox2->Text == ""&&c->getEqual() == true){
12                      c->Calcu();
13                      textBox1->Text = Convert::ToString(c->getNum1());
14                  }
15     }

等号

加减乘除四个按钮,因为都是一个模子出来的,所以只贴一个

判定1:两个textbox均无数据,跳过

判定2:第一次按下运算负号,box1中的数字放到box2中,并加上运算符号

判定3:以按下运算符号,但是没有输入下一个数字,再次按下,将原本的符号改成当前按下的运算符号

判定4:将原本的计算完成,结果作为这次计算的第一个数,计算符号为本次按下的计算符号

 1     private: System::Void btn_plus_Click(System::Object^  sender, System::EventArgs^  e) {
 2                  if (textBox1->Text == ""&&textBox2->Text == "") return;
 3                  else if (textBox1->Text != ""&&textBox2->Text == ""){
 4                      textBox2->Text = textBox1->Text + "+";
 5                      c->setSig(‘+‘);
 6                      c->setCalcu(true);
 7                      c->setNum1(Convert::ToDouble(textBox1->Text));
 8                      textBox1->Text = "";
 9                  }
10                  else if (textBox1->Text == ""&&textBox2->Text != ""){
11                          textBox2->Text = textBox2->Text->Remove(textBox2->Text->Length - 1, 1);
12                          textBox2->Text += "+";
13                          c->setSig(‘+‘);
14                  }
15                  else{
16                      c->setNum2(Convert::ToDouble(textBox1->Text));
17                      c->Calcu();
18                      textBox2->Text = Convert::ToString(c->getNum1()) + "+";
19                      textBox1->Text = "";
20                      c->setSig(‘+‘);
21                  }
22     }

加减乘除

归零

将所有数据归零

1     private: System::Void btn_Clear_Click(System::Object^  sender, System::EventArgs^  e) {
2                  textBox1->Text = "";
3                  textBox2->Text = "";
4                  textBox1->Text = "";
5                  c->setEqual(false);
6                  c->setCalcu(false);
7
8     }

Clear

到此简易计算器的所有代码都已经写完了,完成啦!

C++.NET的简易计算器的制作

时间: 2024-08-15 08:59:03

C++.NET的简易计算器的制作的相关文章

用VS制作简易计算器(WPF)

在VS中实现简易计算器的制作,最终实现计算器如下图所示: 窗口代码如下: <Window x:Class="我的简易计算器.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schema

制作简易计算器封装类

Calculator.java: /** * @Title:Calculator.java * @Package:com.you.model * @Description:封装计算的数值类 * @author:Youhaidong(游海东) * @date:2014-6-15 下午10:40:34 * @version V1.0 */ package com.you.model; import java.io.Serializable; /** * 类功能说明 * 类修改者 修改日期 * 修改说

制作简易计算器处理结果Servlet

ResultServlet.java: package com.you.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http

Xcode 制作简易计算器

#import "ViewController.h" #import "jsq.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *label; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; jsqq = [[jsq alloc] init]; //初始

JS制作一个简易计算器

//javascript简易计算器 <!DOCTYPE html> <html>  <head>   <title> 事件</title>     <script type="text/javascript">    function count(){             //获取第一个输入框的值     var node1=document.getElementById('txt1').value;     

制作一个简易计算器——基于Android Studio实现

一个计算器Android程序的源码部分分为主干和细节两部分. 一.主干 1. 主干的构成 计算器的布局 事件(即计算器上的按钮.文本框)监听 实现计算 2. 详细解释 假设我们的项目名为Calculator,而布局名称(Layout Name)为默认的activity_main .即设置如下图所示: 在这种前提下,有: 设置计算器布局的文件:Calculator/app/src/main/res/layout/activity_main.xml 事件监听和计算实现在同一个文件里:Calculat

js制作简易计算器(-)

前言:初学js,老师要求做一个简易计算器,目前只实现了能够计算,很多约束没有有做,待完善.仅作为自己的学习记录. <!doctype html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>简易计算器<

简易计算器页面

Calculator.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":&qu

Java(随笔)——利用HTML,CSS,JavaScript,JQuery编写的简易计算器

一.利用刚学过的前端知识做一个简易的计算器里边使用到了HTML,CSS,JavaScript以及JQuery的知识代码如下:(1)利用CSS设计了计算器外形样式:(2)利用JavaScript实现了建议计算器的功能:代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>简易计算器</title> <link rel="styl