精华内容
下载资源
问答
  • MFC一个简单的计算器程序

    万次阅读 多人点赞 2014-02-10 20:54:53
    1,简介 某个晚上帮人做的一个MFC课程设计的作业。大概花了两三个小时。 效果: 就和平常使用的计算器用法差不多。 2,源码下载 MFC一个简单的计算器程序源码 3,部分主要代码

    1,简介


    某个晚上帮人做的一个MFC课程设计的作业。大概花了两三个小时。


    (2017-6-6: 抱歉很多人反馈下载链接失效,原因是我的百度网盘之前被人恶意登录清空了所有资源。已重写工程上传,但由于目前手上只装了VS2013,上传的VS2013版MFC工程。需要的朋友自己建对应版本改下。) 

    原博客效果:


    新VS2013重写版本效果:



    就和平常使用的计算器用法差不多。



    2,源码下载




    (2017-6-6重新上传,VS2013 MFC工程)


    3,主要代码

    完整头文件CalculatorDlg.h:

    // CalculatorDlg.h : 头文件
    
    #pragma once
    
    //运算符
    enum CALCULATOR_FLAG{
    	FLAG_JIA = 0,
    	FLAG_JIAN,
    	FLAG_CHENG,
    	FLAG_CHU,
    	FLAG_PINGFANG,
    	FLAG_KAIFANG,
    };
    class CCalculatorDlg : public CDialogEx
    {
    public:
    	CCalculatorDlg(CWnd* pParent = NULL);
    
    	enum { IDD = IDD_CALCULATOR_DIALOG };
    
    	void SaveFirstValue();		//保存第一个输入值
    	void Calculator();			//计算
    public:
    	afx_msg void OnButtonBack();
    	afx_msg void OnButtonClear();
    	afx_msg void OnButtonAbout();
    	afx_msg void OnButton1();
    	afx_msg void OnButton2();
    	afx_msg void OnButton3();
    	afx_msg void OnButton4();
    	afx_msg void OnButton5();
    	afx_msg void OnButton6();
    	afx_msg void OnButton7();
    	afx_msg void OnButton8();
    	afx_msg void OnButton9();
    	afx_msg void OnButton0();
    	afx_msg void OnButtonDian();
    	afx_msg void OnButtonChu();
    	afx_msg void OnButtonCheng();
    	afx_msg void OnButtonJian();
    	afx_msg void OnButtonJia();
    	afx_msg void OnButtonPingfang();
    	afx_msg void OnButtonKaifang();
    	afx_msg void OnButtonDeng();
    protected:
    	HICON m_hIcon;
    
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
    	virtual BOOL OnInitDialog();
    
    	DECLARE_MESSAGE_MAP()
    
    private:
    	//编辑框内的字符串
    	CString mStr;		
    	//输入的2个值  
    	double mNum1;
    	double mNum2;
    	//运算符号
    	CALCULATOR_FLAG mFlag;
    };
    

    完整源文件CalculatorDlg.cpp:

    // CalculatorDlg.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "Calculator.h"
    #include "CalculatorDlg.h"
    #include "afxdialogex.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
    	CAboutDlg();
    
    // 对话框数据
    	enum { IDD = IDD_ABOUTBOX };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CCalculatorDlg 对话框
    
    CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)
    	: CDialogEx(CCalculatorDlg::IDD, pParent)
    	, mStr(_T(""))
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CCalculatorDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_EDIT1, mStr);
    }
    
    BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialogEx)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    
    	ON_BN_CLICKED(IDC_BUTTON_BACK, &CCalculatorDlg::OnButtonBack)
    	ON_BN_CLICKED(IDC_BUTTON_CLEAR, &CCalculatorDlg::OnButtonClear)
    	ON_BN_CLICKED(IDC_BUTTON_ABOUT, &CCalculatorDlg::OnButtonAbout)
    	ON_BN_CLICKED(IDC_BUTTON1, &CCalculatorDlg::OnButton1)
    	ON_BN_CLICKED(IDC_BUTTON2, &CCalculatorDlg::OnButton2)
    	ON_BN_CLICKED(IDC_BUTTON3, &CCalculatorDlg::OnButton3)
    	ON_BN_CLICKED(IDC_BUTTON4, &CCalculatorDlg::OnButton4)
    	ON_BN_CLICKED(IDC_BUTTON5, &CCalculatorDlg::OnButton5)
    	ON_BN_CLICKED(IDC_BUTTON6, &CCalculatorDlg::OnButton6)
    	ON_BN_CLICKED(IDC_BUTTON7, &CCalculatorDlg::OnButton7)
    	ON_BN_CLICKED(IDC_BUTTON8, &CCalculatorDlg::OnButton8)
    	ON_BN_CLICKED(IDC_BUTTON9, &CCalculatorDlg::OnButton9)
    	ON_BN_CLICKED(IDC_BUTTON0, &CCalculatorDlg::OnButton0)
    	ON_BN_CLICKED(IDC_BUTTON_DIAN, &CCalculatorDlg::OnButtonDian)
    	ON_BN_CLICKED(IDC_BUTTON_CHU, &CCalculatorDlg::OnButtonChu)
    	ON_BN_CLICKED(IDC_BUTTON_CHENG, &CCalculatorDlg::OnButtonCheng)
    	ON_BN_CLICKED(IDC_BUTTON_JIAN, &CCalculatorDlg::OnButtonJian)
    	ON_BN_CLICKED(IDC_BUTTON_JIA, &CCalculatorDlg::OnButtonJia)
    	ON_BN_CLICKED(IDC_BUTTON_PINGFANG, &CCalculatorDlg::OnButtonPingfang)
    	ON_BN_CLICKED(IDC_BUTTON_KAIFANG, &CCalculatorDlg::OnButtonKaifang)
    	ON_BN_CLICKED(IDC_BUTTON_DENG, &CCalculatorDlg::OnButtonDeng)
    END_MESSAGE_MAP()
    
    
    // CCalculatorDlg 消息处理程序
    
    BOOL CCalculatorDlg::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		BOOL bNameValid;
    		CString strAboutMenu;
    		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    		ASSERT(bNameValid);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	SetIcon(m_hIcon, TRUE);			// 设置大图标
    	SetIcon(m_hIcon, FALSE);		// 设置小图标
    
    	return TRUE;
    }
    
    void CCalculatorDlg::OnButtonBack()
    {
    	UpdateData(TRUE);
    	//移除最右边一个字符  
    	if (!mStr.IsEmpty())
    	{
    		mStr = mStr.Left(mStr.GetLength() - 1);
    	}
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButtonClear()
    {
    	UpdateData(TRUE);
    	mStr = L"";
    	mNum1 = 0.0f;
    	mNum2 = 0.0f;
    	mFlag = FLAG_JIA;
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButtonAbout()
    {
    	CAboutDlg dlg;
    	dlg.DoModal();
    }
    
    void CCalculatorDlg::OnButton1()
    {
    	UpdateData(TRUE);
    	mStr += L"1";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton2()
    {
    	UpdateData(TRUE);
    	mStr += L"2";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton3()
    {  
    	UpdateData(TRUE);
    	mStr += L"3";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton4()
    {
    	UpdateData(TRUE);
    	mStr += L"4";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton5()
    {
    	UpdateData(TRUE);
    	mStr += L"5";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton6()
    {
    	UpdateData(TRUE);
    	mStr += L"6";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton7()
    {
    	UpdateData(TRUE);
    	mStr += L"7";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton8()
    {
    	UpdateData(TRUE);
    	mStr += L"8";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton9()
    {
    	UpdateData(TRUE);
    	mStr += L"9";
    	UpdateData(FALSE);
    }
    
    void CCalculatorDlg::OnButton0()
    {
    	UpdateData(TRUE);
    	mStr += L"0";
    	UpdateData(FALSE);
    }
    
    //小数点按钮  
    void CCalculatorDlg::OnButtonDian()
    {
    	UpdateData(TRUE);
    	//如果没有小数点,则加上一个小数点,如果已有小数点就忽略此次的小数点,保证最多只有1个  
    	if (-1 == mStr.Find(L'.'))
    	{
    		mStr += L".";
    	}
    	UpdateData(FALSE);
    }
    
    //加
    void CCalculatorDlg::OnButtonJia()
    {
    	SaveFirstValue();
    	mFlag = FLAG_JIA;
    
    }
    
    //减
    void CCalculatorDlg::OnButtonJian()
    {
    	SaveFirstValue();
    	mFlag = FLAG_JIAN;
    }
    
    //乘
    void CCalculatorDlg::OnButtonCheng()
    {
    	SaveFirstValue();
    	mFlag = FLAG_CHENG;
    }
    
    //除
    void CCalculatorDlg::OnButtonChu()
    { 
    	SaveFirstValue();
    	mFlag = FLAG_CHU;
    }
    
    //平方
    void CCalculatorDlg::OnButtonPingfang()
    {
    	UpdateData(TRUE);
    	mNum1 = _wtof(mStr);
    	double f = mNum1 * mNum1;
    	//如果浮点数其实是个整数,就显示为整数
    	if (f - int(f) <= 1e-5)
    	{
    		mStr.Format(L"%d", (int)f);
    	}
    	else
    	{
    		mStr.Format(L"%f", f);
    	}
    	UpdateData(FALSE);
    
    	mNum1 = f;
    	mNum2 = 0.0f;
    	mFlag = FLAG_PINGFANG;
    }
    
    //开方
    void CCalculatorDlg::OnButtonKaifang()
    {
    	UpdateData(TRUE);
    	mNum1 = _wtof(mStr);
    	double f = sqrt(mNum1);
    	//如果浮点数其实是个整数,就显示为整数
    	if (f - int(f) <= 1e-5)
    	{
    		mStr.Format(L"%d", (int)f);
    	}
    	else
    	{
    		mStr.Format(L"%f", f);
    	}
    	UpdateData(FALSE);
    
    	mNum1 = f;
    	mNum2 = 0.0f;
    	mFlag = FLAG_KAIFANG;
    }
    
    //等于
    void CCalculatorDlg::OnButtonDeng()
    {
    	Calculator();
    }
    
    //保存第一个输入值
    void CCalculatorDlg::SaveFirstValue()
    {
    	UpdateData(TRUE);
    	mNum1 = _wtof(mStr);
    	mStr = L"";
    	UpdateData(FALSE);
    }
    
    //计算结果
    void CCalculatorDlg::Calculator()
    {
    	UpdateData(TRUE);
    	mNum2 = _wtof(mStr);
    	double result = 0.0f;
    	switch (mFlag)
    	{
    	case FLAG_JIA:						//加  
    		result = mNum1 + mNum2;
    		break;
    	case FLAG_JIAN:						//减 
    		result = mNum1 - mNum2;
    		break;
    	case FLAG_CHENG:					//乘  
    		result = mNum1 * mNum2;
    		break;
    	case FLAG_CHU:						//除  
    		if (mNum2 == 0.0f)
    		{
    			result = mNum1;
    		}
    		else
    		{
    			result = mNum1 / mNum2;
    		}
    		break;
    	case FLAG_PINGFANG:					//平方 
    		result = mNum2 * mNum2;
    		break;
    	case FLAG_KAIFANG:					//开方  
    		result = sqrt(mNum2);
    		break;
    	default:
    		break;
    	}
    	//如果浮点数其实是个整数,就显示为整数
    	if (result - int(result) <= 1e-5)
    	{
    		mStr.Format(L"%d", (int)result);
    	}
    	else
    	{
    		mStr.Format(L"%f", result);
    	}
    	UpdateData(FALSE);
    
    	mNum1 = result;
    	mNum2 = 0.0f;
    }
    


    最后希望大家课程设计都能够顺利过关!!微笑微笑






    展开全文
  • JavaFx开发一个简单的计算器

    千次阅读 2018-11-28 11:41:05
    最近比较无聊看了下JavaFx然后决定写一个简单的计算器,废多看蹦! 1、先下载一个JavaFX Scene Builder 2.0.exe 这个东西直接百度就下。 2、打开idea配置JavaFx如图 3、创建项目JavaFx 4、启动类 package...

    最近比较无聊看了下JavaFx然后决定写一个简单的计算器,废多看蹦!

    1、先下载一个JavaFX Scene Builder 2.0.exe  这个东西直接百度就下。

    2、打开idea配置JavaFx如图

    3、创建项目JavaFx

    4、启动类

    package sample;
    
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    import java.util.LinkedList;
    
    public class Main extends Application {
    
        @Override
        public void start(Stage primaryStage) throws Exception{
            Parent root = FXMLLoader.load(getClass().getResource("calculator.fxml"));
            primaryStage.setTitle("简单计算器");
            primaryStage.setScene(new Scene(root, 257, 361));
            primaryStage.show();
    
        }
    
    
        public static void main(String[] args) {
          launch(args);
    
    
        }
    }
    

    5、计算器控制器

    package sample;
    
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.Button;
    import javafx.scene.control.TextField;
    
    import java.math.BigDecimal;
    import java.net.URL;
    import java.util.LinkedList;
    import java.util.ResourceBundle;
    import java.util.regex.Pattern;
    
    public class Calculator implements Initializable {
    
    
        @FXML
        private TextField result;
    
        private LinkedList<String> numbers=new LinkedList();
    
        private LinkedList<String> yunsuanfu=new LinkedList<>();
    
        private BigDecimal bigDecimal;
        Pattern pattern=Pattern.compile("\\d+|\\d.?\\d");
    
        @Override
        public void initialize(URL location, ResourceBundle resources) {
    
        }
    
    
        public void pressNumberButton(ActionEvent event){
            String number = getButtonValue(event);
            String textResult = result.getText();
            if(".".equals(number.trim())){
                boolean contains = textResult.contains(".");
                if(contains||isBlank(textResult)){
                    return;
                }else {
                    result.setText(textResult+".");
                    return;
                }
            }
            result.setText(result.getText()+number);
        }
    
    
        public void pressYunsuanfu(ActionEvent event){
            String text = result.getText();
    
            if (!pattern.matcher(text).matches()) {
                return;
            }
            if (isBlank(text)){
                return;
            }
            numbers.add(text);
            String buttonValue = getButtonValue(event);
            yunsuanfu.add(buttonValue);
            result.setText("");
        }
    
    
    
        public void pressDengyu(ActionEvent event) {
            boolean numbersEmpty = numbers.isEmpty();
            boolean yunsuanfuEmpty = yunsuanfu.isEmpty();
            if(numbersEmpty||yunsuanfuEmpty){
                result.setText(result.getText());
                return;
            }
    
            if(numbers.size()>0){
                numbers.add(result.getText());
                bigDecimal=new BigDecimal(numbers.getFirst());
                for (int i=1;i<numbers.size();i++){
                    switch (yunsuanfu.get(i-1)){
                        case "+":
                            bigDecimal=bigDecimal.add(new BigDecimal(numbers.get(i)));
                            break;
                        case "-":
                            bigDecimal=bigDecimal.subtract(new BigDecimal(numbers.get(i)));
                            break;
                        case "/":
                            BigDecimal decimal = new BigDecimal(numbers.get(i));
                            int compareTo = decimal.compareTo(new BigDecimal("0"));
                            if(compareTo==0){
                                result.setText("除数不能为0");
                                numbers.clear();
                                yunsuanfu.clear();
                                return;
                            }
                            this.bigDecimal = bigDecimal.divide(new BigDecimal(numbers.get(i)), 20, BigDecimal.ROUND_UP);
                            break;
                        case "*":
                            this.bigDecimal = this.bigDecimal.multiply(new BigDecimal(numbers.get(i)));
                            break;
    
                    }
                }
                result.setText(bigDecimal.stripTrailingZeros().toString());
                numbers.clear();
                yunsuanfu.clear();
            }
        }
    
    
        public void pressClear(ActionEvent event) {
            result.setText("");
            yunsuanfu.clear();
            numbers.clear();
        }
    
        public void pressDeleteOne(ActionEvent event) {
            String text = result.getText();
            if(text!=null&&text!=""&&text.length()>0){
                text=text.substring(0,text.length()-1);
                result.setText(text);
            }
        }
    
    
        private String getButtonValue(ActionEvent event){
            Button button = (Button)event.getSource();
            return button.getText();
        }
    
        private boolean isBlank(String text){
            if(text!=null&&text!=""&&text.length()>0){
                return false;
            }
            return true;
        }
    
    }
    

    6、计算器页面布局,新建一个FXML的文件,然后右键用JavaFX Scene Builder 2.0.exe这个打开编辑,直接拖动组件就行。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.layout.*?>
    
    <AnchorPane prefHeight="361.0" prefWidth="257.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Calculator">
       <children>
          <TextField fx:id="result" layoutX="29.0" layoutY="23.0" prefHeight="31.0" prefWidth="202.0" />
          <Button fx:id="seven" layoutX="29.0" layoutY="129.0" mnemonicParsing="false" onAction="#pressNumberButton" text="7" />
          <Button fx:id="eight" layoutX="86.0" layoutY="128.0" mnemonicParsing="false" onAction="#pressNumberButton" text="8" />
          <Button fx:id="nine" layoutX="143.0" layoutY="129.0" mnemonicParsing="false" onAction="#pressNumberButton" text="9" />
          <Button fx:id="cheng" layoutX="197.0" layoutY="128.0" mnemonicParsing="false" onAction="#pressYunsuanfu" prefHeight="31.0" prefWidth="31.0" text="*" />
          <Button fx:id="four" layoutX="29.0" layoutY="188.0" mnemonicParsing="false" onAction="#pressNumberButton" text="4" />
          <Button fx:id="five" layoutX="86.0" layoutY="188.0" mnemonicParsing="false" onAction="#pressNumberButton" text="5" />
          <Button fx:id="six" layoutX="143.0" layoutY="188.0" mnemonicParsing="false" onAction="#pressNumberButton" text="6" />
          <Button fx:id="jian" layoutX="197.0" layoutY="188.0" mnemonicParsing="false" onAction="#pressYunsuanfu" prefHeight="31.0" prefWidth="31.0" text="-" />
          <Button fx:id="one" layoutX="29.0" layoutY="247.0" mnemonicParsing="false" onAction="#pressNumberButton" prefHeight="31.0" prefWidth="29.0" text="1" />
          <Button fx:id="two" layoutX="86.0" layoutY="247.0" mnemonicParsing="false" onAction="#pressNumberButton" text="2" />
          <Button fx:id="three" layoutX="143.0" layoutY="247.0" mnemonicParsing="false" onAction="#pressNumberButton" text="3" />
          <Button fx:id="jia" layoutX="197.0" layoutY="247.0" mnemonicParsing="false" onAction="#pressYunsuanfu" text="+" />
          <Button fx:id="dian" layoutX="29.0" layoutY="301.0" mnemonicParsing="false" onAction="#pressNumberButton" prefHeight="31.0" prefWidth="29.0" text="." />
          <Button fx:id="zero" layoutX="86.0" layoutY="301.0" mnemonicParsing="false" onAction="#pressNumberButton" text="0" />
          <Button fx:id="dengyu" layoutX="142.0" layoutY="301.0" mnemonicParsing="false" onAction="#pressDengyu" prefHeight="31.0" prefWidth="31.0" text="=" />
          <Button fx:id="chu" layoutX="197.0" layoutY="301.0" mnemonicParsing="false" onAction="#pressYunsuanfu" prefHeight="31.0" prefWidth="31.0" text="/" />
          <Button fx:id="clear" layoutX="29.0" layoutY="77.0" mnemonicParsing="false" onAction="#pressClear" prefHeight="31.0" prefWidth="76.0" text="clear" />
          <Button fx:id="deleteone" layoutX="152.0" layoutY="77.0" mnemonicParsing="false" onAction="#pressDeleteOne" prefHeight="31.0" prefWidth="76.0" text="←" />
       </children>
    </AnchorPane>
    

    7、然后运行

    展开全文
  • 自己做的一个简单的计算器,欢迎下载 客用于一些简单的操作 自己的的成果啊
  • 一款简单的计算器应用源码,源码Calculator,一个简单的计算器APP的代码,感觉好久没写代码了,今天花了一天的时间写这个简单的计算器应用,喜欢的朋友下载一下吧。 A simple Calculator app
  • 自己制作的一个能够实现简单功能的计算器,自己也是初学者,有需要源代码的朋友可以去我的空间里面下载,也可以找我要!!!
  • 用C#实现简单的计算,内含代码,只是实现了非常简单的“加减乘除”的运算,其他如三角函数,幂的运算,道理都一样,可根据“加减乘除”代码得到。这个计算器代码非常简单,适合刚接触C#的人下载
  • :硬件仿真图分别为8位数码管和4位数码管注意:本仿真案例有偿提供,请点击文章最下方阅读原文,查看仿真图和程序下载地址。本仿真仅供参考,如有需要修改电路和程序,请联系管理员有偿修改。当然,如果你动手...

    一:硬件仿真图

    分别为8位数码管和4位数码管

    7bb7a3d239d1618a2f9a33e4368efdcd.gif

    3b63a0c5c208e30b7b099907d1369de3.gif

    注意:本仿真案例有偿提供,请点击文章最下方的阅读原文,查看仿真图和程序下载地址。本仿真仅供参考,如有需要修改电路和程序,请联系管理员有偿修改。当然,如果你动手能力强,完全可以按照本文提供的电路图和程序源码自行搭建。

    硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

    本计算器是以80C51单片机为核心构成的简易计算器系统。该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据和计算结果存储下来,显示在LED数码管上,并可实现清零。

    整个系统主要可分为四个主要功能模块:

    功能模块一:实时键盘扫描;

    功能模块二:数据存储和计算;

    功能模块三:LED数码管显示;

    功能模块四:清零

    整个计算器系统的工作过程为:首先初始化参数,送LED低位显示“0”,功能键位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是“+” 、“—” 、“*” “/” ,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”、清零、还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址,若是清零键则跳转回初始化阶段使所有值清零。

    二、主程序流程图

    917c9bc52604eb524b548debfe99b103.png

    程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图。

    三:键盘扫描程序流程图

    59cb33a282503ebe65997acc6c83e183.png

    四:显示程序流程图

    2d4e0ee616b2c90796b97e6fec89e884.png

    五:程序源码

    #include

    #include

    #include /*   isdigit()函数   */

    #include /*    atoi()函数     */

    #define uchar unsigned char

    #define uint unsigned int

    uchar operand1[9], operand2[9];  /*   操作数   */

    uchar operator; /*   操作符   */

    void delay(uint);

    uchar keyscan();

    void disp(void);

    void buf(uint value);

    uint compute(uint va1,uint va2,uchar optor);

    uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,

    0x92,0x82,0xf8,0x80,0x90,0xff};     /*   字符码表   */

    uchar dbuf[8] = {10,10,10,10,10,10,10,10};     /*   显示缓存   */

    /*   延时函数   */

    void delay(uint z)

    {

    uint x,y;

    for(x=z;x>0;x--)

    for(y=110;y>0;y--);

    }

    /*******************************************

                  键盘扫描程序

           将按键转化为字符并作为输出 

        '$','#'分别表示清零键和没有键按下

     *******************************************/

    uchar keyscan()

    {

    uchar skey;                     /*   按键值标记变量    */

    /***********************

         扫描键盘第1行    

    ************************/

    P1 = 0xfe;

    while((P1 & 0xf0) != 0xf0)     /*      有按键按下     */

    {

    delay(3);             /*      去抖动延时     */

    while((P1 & 0xf0) != 0xf0) /*      仍有键按下     */

    {

    switch(P1) /*    识别按键并赋值   */

    {

    case 0xee: skey = '7'; break;

    case 0xde: skey = '8'; break;

    case 0xbe: skey = '9'; break;

    case 0x7e: skey = '/'; break;

    default:   skey = '#';

    }

    while((P1 & 0xf0) != 0xf0) /*   等待按键松开   */

    ;

    }

    }

    /***********************

         扫描键盘第2行    

    ************************/

    P1 = 0xfd;

    while((P1 & 0xf0) != 0xf0)

    {

    delay(3);

    while((P1 & 0xf0) != 0xf0)

    {

    switch(P1)

    {

    case 0xed: skey = '4'; break;

    case 0xdd: skey = '5'; break;

    case 0xbd: skey = '6'; break;

    case 0x7d: skey = '*'; break;

    default:   skey = '#';

    }

    while((P1 & 0xf0) != 0xf0)

    ;

    }

    }

    /***********************

         扫描键盘第3行    

    ************************/

    P1 = 0xfb;

    while((P1 & 0xf0) != 0xf0)

    {

    delay(3);

    while((P1 & 0xf0) != 0xf0)

    {

    switch(P1)

    {

    case 0xeb: skey = '1'; break;

    case 0xdb: skey = '2'; break;

    case 0xbb: skey = '3'; break;

    case 0x7b: skey = '-'; break;

    default: skey = '#';

    }

    while((P1 & 0xf0) != 0xf0)

    ;

    }

    }

    /***********************

         扫描键盘第4行    

    ************************/

    P1 = 0xf7;

    while((P1 & 0xf0) != 0xf0)

    {

    delay(3);

    while((P1 & 0xf0) != 0xf0)

    {

    switch(P1)

    {

    case 0xe7: skey = '$'; break;

    case 0xd7: skey = '0'; break;

    case 0xb7: skey = '='; break;

    case 0x77: skey = '+'; break;

    default:   skey = '#';

    }

    while((P1 & 0xf0) != 0xf0)

    ;

    }

    }

    return skey;

    }

    void main()

    {

    uint value1, value2, value;    /*    数值1,数值2,结果    */

    uchar ckey, cut1 = 0, cut2 = 0;    /*    ckey键盘输入字符    */

    uchar operator;                /*         运算符         */

    uchar i, bool = 0;

    init:    /*    goto语句定位标签    */

    buf(0);                            /*         初始化         */

    disp();

    value = 0;

    cut1 = cut2 = 0;

    bool = 0;

    for(i = 0;i < 9;i++)

    {

    operand1[i] = '\0';

    operand2[i] = '\0';

    }                                  /*         初始化         */

    while(1)

    {

    ckey = keyscan();             /*         读取键盘        */

    if(ckey != '#')

    { /*  isdigit函数,字符是阿拉伯数字返回非0值,否则返回0  */

    if(isdigit(ckey))         

    {

    switch(bool)

    {

    case 0:

    operand1[cut1] = ckey;

    operand1[cut1+1] = '\0';

    value1 = atoi(operand1);  /*  atoi函数,将字符串转化为,int整数  */

    cut1++;

    buf(value1);

    disp();

    break;

    case 1:

    operand2[cut2] = ckey;

    operand2[cut2+1] = '\0';

    value2 = atoi(operand2);

    cut2++;

    buf(value2);

    disp();

    break;

    default: break;

    }

    }

    else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')

    {

    bool = 1;

    operator = ckey;

    buf(0);

    dbuf[7] = 10;

    disp();

    }

    else if(ckey == '=')

    {

    value = compute(value1,value2,operator);

    buf(value);

    disp();

    while(1)                     /*   计算结束等待清零键按下   */

    {

    ckey = keyscan();

    if(ckey == '$')          /* 如果有清零键按下跳转到开始 */

    goto init;

    else

    {

    buf(value);

    disp();

    }

    }

    }

    else if(ckey == '$') 

    { goto init;}

    }

    disp();

    }

    }

    /******************************************

                     运算函数

     输入:操作数和操作符

     输出:计算结果

    *******************************************/

    uint compute(uint va1,uint va2,uchar optor)

    {

    uint value;

    switch(optor)

    {

    case '+' : value = va1+va2; break;

    case '-' : value = va1-va2; break;

    case '*' : value = va1*va2; break;

    case '/' : value = va1/va2; break;

    default :  break;

    }

    return value;

    }

    /*******************************************

                  更新显示缓存

    输入:无符号整数

    输出:将输入送入显示缓存

    *******************************************/

    void buf(uint val)

    {

    uchar i;

    if(val == 0)

    {

    dbuf[7] = 0;

    i = 6;

    }

    else

    for(i = 7; val > 0; i--)

    {

    dbuf[i] = val % 10;

    val /= 10;

    }

    for( ; i > 0; i--)

    dbuf[i] = 10;

    }

    /*******************************************

                   显示函数      

    *******************************************/

    void disp(void)

    {

    uchar bsel, n;

    bsel=0x01;

        for(n=0;n<8;n++)

        { 

    P2=bsel;

    P0=table[dbuf[n]];

    bsel=_crol_(bsel,1);

    delay(3);

    P0=0xff;

        }

    }

    展开全文
  • 今天学习了Vue相关知识,有一个明显感受:之前写一个html页面,每次更新数据后就得重新登录页面,进行刷新。而Vue中可以将用户输入数据直接传到后台代码中直接使用。 1.学习前准备工作:下载相应包 2....

       今天学习了Vue的相关知识,有一个明显的感受:之前写一个html页面,每次更新数据后就得重新登录页面,进行刷新。而Vue中可以将用户输入的数据直接传到后台的代码中直接使用。

    1.学习前准备工作:下载相应的包

    2.idea进行配置:下载Vue插件

     

    3.代码:

    <!DOCTYPE html>
    <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns: xmlns: xmlns:v-on="http://www.w3.org/1999/xhtml"
          xmlns:v-model="http://www.w3.org/1999/xhtml" xmlns:v-text="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <!--显示-->
    <!--
    v-model 可以进行前后数据的同步。
    -->
    <h2>采用: v-model</h2>
    <div id="app">
    
        <p>
            单价:<input type="text" v-model:value="price">
        </p>
    
        <p>
            数量:<input type="text" v-model:value="count">
        </p>
    
        <p>
            总计:<input type="text" v-model:value="total">
            <button v-on:click="cal()">计算</button>
        </p>
    
        <hr>
    
        <p>
    
            <h2>一个简易计算器!</h2>
    
        操作数1:<input type="text" v-model:value="op1">
        <select v-model:value="opr">
    
            <option value="+">+</option>
            <option value="-">-</option>
            <option value="*">*</option>
            <option value="/">/</option>
    
        </select>
    
        操作数2:<input type="text" v-model:value="op2">
    
       =
    
        结果:<input type="text" :value="res">
        <button @click="cal2()">计算</button>
        </p>
        <!--  v-bind可以写为  :  -->
        <!--  v-on可以写为   @   -->
    
    </div>
    
    <!--引入包资源-->
    <script src="../lib/vue.js"></script>
    
    <script>
        //声明一个Vue对象
        var vm=new Vue({
            el:"#app",   //绑定前端进行显示的ID
            data:{       //数据
                price:"12",
                count:"1",
                total:"0",
    
                op1:"1",
                opr:"+",
                op2:"1",
                res:"0"
            },
            methods:{    //方法
                cal(){
                    this.total=this.price*this.count;
                },
    
                cal22(){
                    var flag=this.opr;
                    switch (flag) {
                        case '+':
                            this.res=parseInt("this.op1")+parseInt("this.op1");
                            break;
                        case '-':
                            this.res=parseInt("this.op1")-parseInt("this.op1");
                            break;
                        case '*':
                            this.res=parseInt("this.op1")*parseInt("this.op1");
                            break;
                        case '/':
                            this.res=parseInt("this.op1")/parseInt("this.op1");
                            break;
                    }
                },
    
                cal2(){
                    this.res=eval("parseInt(this.op1)"+this.opr+"parseInt(this.op2)");
                }
            }
        })
    </script>
    
    </body>
    </html>

    4.效果图:

    总结:在页面中可以直接的进行输入数字,并可以动态的显示结果。(不用进行刷新)

    最好的学习路径: 官网~~~

    eg:Vue自学官网:https://cn.vuejs.org/v2/guide/

     

    转载于:https://www.cnblogs.com/xbfchder/p/11309992.html

    展开全文
  • 计算器 一个小巧Flutter计算器,用于练习Flutter。 入门 为了运行此程序,请确保已安装Flutter。 下载文件,然后运行main.dart,它位于lib文件夹中。 该应用程序图片:
  • JQuery资料大家可以下载下载 学习啊
  • 一个简单的mfc 计算器

    2010-06-12 00:17:50
    用mfc编辑计算器,需要可以下载来看看
  • Android 一个简单的计算器APP

    千次阅读 2015-09-11 23:46:54
    apk下载地址: http://pan.baidu.com/s/1dD3513j MainActivity.java文件内容: package netpythontojavaviewmodecontents.csdn.blog.calculator0; import android.app.Activity; import android.os.Bundle...
  • C#做的一个简单计算器,应该对你有用,赶快下载吧!
  • 简单的计算器应用源码是一款简单的计算器应用源码,源码Calculator,一个简单的计算器APP的代码,感觉好久没写代码了,今天花了一天的时间写这个简单的计算器应用,喜欢的朋友下载一下吧。
  • Spring AOP面向切面编程制作一个简单的计算器 目录结构如下 1 建立一个Java工程myproject,如图所示 直接添加所有 spring jar 包到类路径下(在文件夹spring jar包下)。 在构建项目之前我们需要配置好项目所需jar...
  • 代码简单,附加说明, 有阅览便知效果, 方便使用, 请大家下载阅览, 谢谢!
  • 这两天抽空帮位网友写了个简单的计算器,功能类似windows自带的计算器,就是不支持表达式计算的那种,仅供初学者参考。点击这里下载
  • 简单的计算器C++

    2013-10-12 17:06:38
    一个简单的计算器C++小程序,适合初学者下载
  • Vue计算器 (vue-calculator) ... 使用Vue.js的计算器 View demo 查看演示 Download Source 下载源 构建设置 (Build Setup) # install dependencies npm install # serve with hot reload at localhost:8080 np...
  • 简单的计算器应用源码是一款简单的计算器应用源码,源码Calculator,一个简单的计算器APP的代码,感觉好久没写代码了,今天花了一天的时间写这个简单的计算器应用,喜欢的朋友下载一下吧。   效果图:
  • 用ANTLR实现一个简单加法计算器

    热门讨论 2010-10-31 23:35:32
    CSDN博客上不能添加附件,将文件放在这里,以供有兴趣的下载 加法器分析地址:http://blog.csdn.net/evenfall/archive/2010/10/31/5978379.aspx
  • 基于vs2013 mfc环境下的一个简单的四则运算计算器,特别适合初学mfc的朋友。需要的朋友可以下载看看
  • 文件名称: Calculator下载 收藏√ [5 4 3 2 1]开发工具: Java文件大小: 1843 KB上传时间: 2016-10-15下载次数: 0提 供 者: DARK详细说明:一个简单的计算器,支持函数定义运算以及布尔表达式-A simple calculator文件...
  • ,在大家下载之后只要安装了vs就可以运行了,
  • 简单计算器

    2013-06-28 12:07:30
    一个简单的计算器,可以实现加减乘除,喜欢可以下载

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 445
精华内容 178
关键字:

下载一个简单的计算器