精华内容
下载资源
问答
  • 科学计算器 计算器

    热门讨论 2008-09-11 23:08:01
    真实的计算器界面,真正的绿色软件,不需安装,一个文件集全部功能于一身,不占用注 册表资源。 中文语音提示,键盘与鼠标操作,操作方式与现实生活中普遍使用的计算器完全相同,所 以非常容易上手,尤其对经常...
  • 深度理解命令模式(1)参数化配置:用不同的命令对象,去参数化配置客户的请求。...(该种方式会放到备忘录模式中进行讲解)【编程实验】可撤销/恢复操作的计算器//声明文件//****************************...
    深度理解命令模式

    (1)参数化配置:用不同的命令对象,去参数化配置客户的请求。

    (2)可撤销的操作:

      ①补偿式(反操作式):如被撤销的操作是加的功能,那么反操作就是减的功能。

      ②存储恢复式:把操作前的状态记录下来,然后要撤销操作时就直接恢复回去就可以了。(该种方式会放到备忘录模式中进行讲解)

    【编程实验】可撤销/恢复操作的计算器


    //声明文件

    //*********************************************************************************************
    //行为型模式:命令模式
    //场景:计算器(可撤销的计算)
    
    #include <iostream>
    #include <string>
    #include <list>
    
    using namespace std;
    
    //***************************************Receiver*******************
    //操作运算的接口
    //运算类,真正实现加减法运算(具体的接收者)
    class CCalculator{
    private:
    	int iResult;
    public:
    	void SetResult(int result);
    	int GetResult();
    	void Add(int num);
    	void Sub(int num);
    };
    
    //*************************Command***********************
    //命令接口,支持可撤销操作
    class CCalcCmd{
    public:
    	virtual void Execute() = 0;//执行命令的操作
    	virtual void Undo() = 0; //执行撤销的操作
    };
    //具体的加法命令
    class CAddCmd : public CCalcCmd{
    private://持有具体执行计算的对象(命令的接收者)
    	CCalculator* pCalc;
    	int iNum;//要加上的数据
    public:
    	CAddCmd(CCalculator* calc, int num);
    	void Execute();
    	void Undo();
    };
    //具体的减法命令
    class CSubCmd : public CCalcCmd{
    private://持有具体执行计算的对象(命令的接收者)
    	CCalculator* pCalc;
    	int iNum; //要减去的数据
    public:
    	CSubCmd(CCalculator* calc, int num);
    	void Execute();
    	void Undo();
    };
    
    //*****************************Invoker************************************
    //计算器类,计算器上有加法按钮和减法按钮
    class CController{
    private:
    	CCalcCmd* pAddCmd;//加法命令对象
    	CCalcCmd* pSubCmd; //减法命令对象
    	list<CCalcCmd*> lstUndo; //命令的操作历史记录,在撤销的时候用
    	list<CCalcCmd*> lstRedo; //命令被撤销的历史记录,在恢复时使用
    public:
    	CController(CCalcCmd* addcmd, CCalcCmd* subcmd);
    	void SetAddCmd(CCalcCmd* addcmd);
    	void SetSubCmd(CCalcCmd* subcmd);
    	//提供给客户使用,执行加法,  减法功能, 把操作记录到历史记录里面
    	void Add();
    	void Sub();
    	void Undo();
    	void Redo();
    };
     

    //实现文件

    //***************************************Receiver*******************
    //操作运算的接口
    //运算类,真正实现加减法运算(具体的接收者)
    void CCalculator::SetResult(int result){iResult = result;}
    int CCalculator::GetResult(){return iResult;}
    void CCalculator::Add(int num){ iResult += num;}
    void CCalculator::Sub(int num){ iResult -= num;}
    //*************************Command***********************
    //命令接口,支持可撤销操作
    
    //具体的加法命令
    CAddCmd::CAddCmd(CCalculator* calc, int num){pCalc = calc; iNum = num;}
    void CAddCmd::Execute(){pCalc->Add(iNum);}
    void CAddCmd::Undo(){pCalc->Sub(iNum);}
    //具体的减法命令
    CSubCmd::CSubCmd(CCalculator* calc, int num){pCalc = calc; iNum = num;}
    void CSubCmd::Execute(){pCalc->Sub(iNum);}
    void CSubCmd::Undo(){pCalc->Add(iNum);}
    
    //*****************************Invoker************************************
    //计算器类,计算器上有加法按钮和减法按钮
    CController::CController(CCalcCmd* addcmd, CCalcCmd* subcmd){
    	pAddCmd = addcmd; pSubCmd = subcmd;
    }
    void CController::SetAddCmd(CCalcCmd* addcmd){pAddCmd = addcmd;}
    void CController::SetSubCmd(CCalcCmd* subcmd){pSubCmd = subcmd;}
    //提供给客户使用,执行加法,  减法功能, 把操作记录到历史记录里面
    void CController::Add(){ pAddCmd->Execute(); lstUndo.push_back(pAddCmd);}
    void CController::Sub(){ pSubCmd->Execute(); lstUndo.push_back(pSubCmd);}
    void CController::Undo(){
    	if(lstUndo.size() < 1)			return;
    	//取出最后一个命令来撤销, 然后把最后一个命令删除掉
    	CCalcCmd* pCmd = lstUndo.back(); lstUndo.pop_back();
    	//如果还有恢复功能,那就把这个命令记录到恢复历史列表中
    	pCmd->Undo(); lstRedo.push_back(pCmd);
    	cout << "lstUndo.size() = " << lstUndo.size() << ", lstRedo.size() = " << lstRedo.size() << endl;
    }
    void CController::Redo(){
    	if(lstRedo.size() < 1)			return;
    	//取出最后一个命令来重做, 然后把最后一个命令删除掉
    	CCalcCmd* pCmd = lstRedo.back(); lstRedo.pop_back();
    	//把这个命令记录到可撤销的历史记录里面
    	pCmd->Execute(); lstUndo.push_back(pCmd);
    	cout << "lstUndo.size() = " << lstUndo.size() << ", lstRedo.size() = " << lstRedo.size() << endl;
    }
    

    //测试客户端

    void main()
    {
    	CCalculator oCalculator; oCalculator.SetResult(0);//创建接收者
    	CAddCmd oAdd5(&oCalculator, 5);//创建命令对象,并组装命令和接收者
    	CSubCmd oSub3(&oCalculator, 3);
    	CAddCmd oAdd10(&oCalculator, 10);
    	CSubCmd oSub4(&oCalculator, 4);
    
    	CController oController(&oAdd5, &oSub3);//把命令设置到持有者
    	oController.Add();// 模拟按下按钮,测试一下
    	cout << "一次加法运算后的结果为:" << oCalculator.GetResult() << endl;
    	oController.Sub();
    	cout << "一次减法运算后的结果为:" << oCalculator.GetResult() << endl;
    	oController.SetAddCmd(&oAdd10);
    	oController.Add();
    	cout << "一次加法运算后的结果为:" << oCalculator.GetResult() << endl;
    
    	//测试撤销
    	oController.Undo();
    	cout << "撤销一次后的结果为:" << oCalculator.GetResult() << endl;
    	oController.Undo();
    	cout << "再次撤销一次后的结果为:" << oCalculator.GetResult() << endl;
    
    	//测试恢复
    	oController.Redo();
    	cout << "恢复操作一次后的结果为:" << oCalculator.GetResult() << endl;
    	oController.Redo();
    	cout << "再次恢复操作一次后的结果为:" << oCalculator.GetResult() << endl;
    } 

    展开全文
  • 一、项目描述 本次项目是在上次用单片机做的计算器在有一定改进的基础上新加了时钟显示的 功能。之前所做的计算器只能实现简单的加减乘除运算,经后期改进,使...当之后任意键按下时,单片机恢复计算器模式,且根据...

    一、项目描述

    本次项目是在上次用单片机做的计算器在有一定改进的基础上新加了时钟显示的
    功能。之前所做的计算器只能实现简单的加减乘除运算,经后期改进,使其可以连续运算更符合我们心中的计算器的形象。加入时钟功能后,在使用单片机计算器功能时,如果一直不按键持续十秒,则进入时钟显示模式。进入时钟模式后,数码管前面两位显示时,中间两位显示分钟,后两位显示秒数。当之后任意键按下时,单片机恢复计算器模式,且根据按下键对进入时钟模式之前状态的数值进行处理。

    二、 关键技术

    在计算器功能上加入时钟模式,主要使用了时钟中断。
    时钟中断:

    void timer0_INT_SRV(void) interrupt 1 
    {
        TL0 = (65536-46080)%256;//(65536-50000*11.0592/12)%256;
        TH0 = (65536-46080)/256; 
        FOUT = !FOUT;
        if(++count1s>=20)   //计时1秒
        {	time++;
        	count1s=0;
      		counter_key++;
    		if(counter_key>=60)
    		{counter_key=0;
    		 fen++;
    		  if(fen>=60)
    		  {	fen=0;
    		    shi++;
    			if(shi>=24)
    			 {
    			   shi=0;
    			 }
    		  }
    		}		
    	}
    }
    
    

    可以看到在单片机的时钟中断程序里,每二十次中断,秒数变量counter_key自加一次,
    相当于计时一秒,时间积累变量time(初始值为0)也会自加一次。每当counter_key等于60则清零,并使分钟变量fen自加,同理,当分等于60则清零,并使时钟变量shi自加。而当shi等于24时,就使shi清零。可以看出变量counter_key、fen、shi对应了时钟的秒数,分钟和小时。变量time就是使单片机进入时钟模式的关键变量。
    为使变量time起作用,在键盘码散转程序keybranch中,我便设置了每进入一次该函数,便使得time为0。也就是每次按键后time就会重置记录,按键后的等待时长。
    得到时长后,进行判断就容易了。
    所以在主函数里

    void main(void)
    {
    	byte k;
    	TIMER0_init(); 
    	while(1)
     	{	if(time>10)shizhong();
     		k=keysearch();
    		
    		if(k!=0xff)   
        {	
        	delayms(10);//有键按下
        	k=keysearch();
    		keybranch(k);
      		do
    		{	HEX_TO_BCD(dat);dot=0;
      			k=keysearch();
    			scandisp();
      		} while(k!=0xff);      //等待键释放
         }
    	 calculate_handle();
    	 scandisp();
      }
    }
    
    

    可以看到,在主程序循环里面,第一步就是检测变量time,当其大于10时,即按键10秒内无继续按键则进入时钟显示程序。这个程序很简单,就是让数码管分别显示shi、fen、counter_key的值。主函数之后的语句就是检测按键,消除抖动,每次按键就会使数码管显示计算器计算数据dat。

    效果演示

    时钟显示程序:
    在这里插入图片描述
    计算器模式:

    在这里插入图片描述

    主要程序代码在之前那个程序上改改就好啦

    展开全文
  • 用于Runescape 3的人工制品恢复计算器 如何使用 输入左侧列表中可用的损坏和/或恢复的文物数量。 可以通过手动输入数字或使用+/-按钮增加/减少可用数字来完成。 黄色按钮用于损坏的文物,绿色按钮用于修复。 如果...
  • Win10 卸载App后打不开计算器恢复

    千次阅读 2018-12-13 21:00:14
    PowerShell下运行以下命令 Get-AppxPackage *calculator* -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}  

    PowerShell下运行以下命令

    Get-AppxPackage *calculator* -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}

     

    展开全文
  • 执行者类: public class Calculator { private int total=0; public void operation(char operator,int operand) { switch(operator) { case '+':total+=operand;break; case '-':total-=operand;...

    在这里插入图片描述

    执行者类:

    public class Calculator {
    
    	private int total=0;
    	public void operation(char operator,int operand) {
    		switch(operator) {
    		case '+':total+=operand;break;
    		case '-':total-=operand;break;
    		case '*':total*=operand;break;
    		case '/':total/=operand;break;
    		}
    		System.out.println(operator+" "+operand+" ="+total);
    	}
    }
    

    抽象命令类:

    public abstract class Command {
    
    	public abstract void execute();
    	public abstract void unexecute();
    }
    

    计算命令类:

    public class CalculatorCommand extends Command {
    
    	private Calculator calculator;
    	private char operator;
    	private int operand;
    	
    	CalculatorCommand(Calculator calculator, char operator, int operand) {
    		super();
    		this.calculator = calculator;
    		this.operator = operator;
    		this.operand = operand;
    	}
    
    	public Calculator getCalculator() {
    		return calculator;
    	}
    
    	public void setCalculator(Calculator calculator) {
    		this.calculator = calculator;
    	}
    
    	public char getOperator() {
    		return operator;
    	}
    
    	public void setOperator(char operator) {
    		this.operator = operator;
    	}
    
    	public int getOperand() {
    		return operand;
    	}
    
    	public void setOperand(int operand) {
    		this.operand = operand;
    	}
    
    	@Override
    	public void execute() {
    		calculator.operation(operator, operand);
    
    	}
    
    	@Override
    	public void unexecute() {
    		calculator.operation(undo(operator), operand);
    
    	}
    
    	/**
    	 * @param operator2
    	 * @return
    	 */
    	private char undo(char operator2) {
    		char ch = 0;
    		switch(operator2) {
    		case '+':ch='-';break;
    		case '-':ch='+';break;
    		case '*':ch='/';break;
    		case '/':ch='*';break;
    		}
    		return ch;
    	}
    }
    

    通知命令给执行者:

    public class Invoker {
    
    	private Calculator calculator=new Calculator();
    	private ArrayList<Command> commands=new ArrayList<Command>();
    	private int current=0;
    	public void redo(int levels) {
    		System.out.println(levels);
    		for(int i=0;i<levels;i++) {
    			if(current<commands.size()-1) {
    				commands.get(i).execute();
    				current++;
    			}
    		}
    	}
    	public void undo(int levels) {
    		System.out.println(levels);
    		for(int i=0;i<levels;i++) {
    			if(current>0) {
    				--current;
    				commands.get(i).execute();
    			}
    		}
    	}
    	public void compute(char operator,int operand) {
    		Command command =new CalculatorCommand(calculator, operator, operand);
    		command.execute();
    		commands.add(command);
    		current++;
    	}
    }
    

    客户端:

    public class Client {
    
    	public static void main(String[] args) {
    		Invoker invoker=new Invoker();
    		invoker.compute('+', 100);
    		invoker.compute('-', 50);
    		invoker.compute('*', 20);
    		invoker.compute('/', 2);
    		
    		invoker.redo(2);
    		invoker.undo(1);
    	}
    }
    
    展开全文
  • 如果觉得计算器覆盖了屏幕显示的内容,可用鼠标单击液晶屏幕转为小窗口方式,小窗口可任意拖放,并可自动吸附在屏幕边缘,再次单击鼠标可恢复原状,非常方便。该计算器可进行多种科学与逻辑运算、公式运算、个人所得...
  • Android Studio计算器

    2016-05-03 23:27:00
    ---恢复内容开始--- 从计算器的例子中学到,1 导入相应包声明alt+enter2 ctrl+o对父类方法进行重写3 删除一行ctrl+x4 padding表示内边距 5 ctrl+alt+o去掉导入的多余的包布局文件写在layout布局中,layout中的布局...
  • php简易计算器

    2015-09-18 15:25:00
    案例:php简易计算器 步骤: 1.先绘制这个表格 2.根据表单提交的sub属性判断一下,是否点击计算了 (GET方式提交的数据,通过地址栏传递的) 3.计算,并将结果输入到第二行  问题:当点击计算后,之前输入...
  • Android入门练手计算器

    2018-08-26 23:01:01
    Android小计算器,除实现四则运算还实现了括号乘方取余等高级运算,TextView滚动显示,输入时自动定位到最后一行,双击满屏显示,再次双击恢复。可检测表达式是否正确。更改了软件图标,app目录下有签名打包好的apk...
  • 计算器的github下载地址:...在这之前需要弄明白什么是序列化和反序列化 对象的序列化 序列化:把对象转换为字节序列的过程 反序列化:把字节序列恢复为对象的过程 我们要把SymbolTable类的对象(符号表...
  • 805881_语音计算器

    2011-08-19 20:15:29
    如果觉得计算器覆盖了屏幕显示的内容,可用鼠标单击液晶屏幕转为小窗口方式,小窗口可任意拖放,并可自动吸附在屏幕边缘,再次单击鼠标可恢复原状,非常方便。该计算器可进行多种科学与逻辑运算、公式运算、个人所得...
  • 如果觉得计算器覆盖了屏幕显示的内容,可用鼠标单击液晶屏幕转为小窗口方式,小窗口可任意拖放,并可自动吸附在屏幕边缘,再次单击鼠标可恢复原状,非常方便。 该计算器可进行多种科学与逻辑运算,各种单位换算,...
  • ---恢复内容开始--- 洛谷P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。...
  • 计算器一些按键功能简介

    千次阅读 2014-11-09 21:43:18
    1、C,clear缩写,表示清零,作用是将计算器恢复到开机状态。 2、CE,仅表示清除当前数字,作用是将当前输入的数字清除回到0状态。 3、MS,存储当前显示的数值到。 4、MR,读取当前存储器中的数值,并显示之。 5...
  • 仿真语音计算器v1.8

    2009-09-16 12:21:10
    如果觉得计算器覆盖了屏幕显示的内容,可用鼠标单击液晶屏幕转为小窗口方式,小窗口可任意拖放,并可自动吸附在屏幕边缘,再次单击鼠标可恢复原状,非常方便。 该计算器可进行多种科学与逻辑运算,各种单位换算,...
  • 计算器支持键盘和鼠标输入和操作;同时在需要时可以将计算器置于所有窗口之前,便于使用和操作,不需要时可以恢复正常状态;可以复制外部数据或将计算结果按ctrl+c键复制到其他程序中去!
  • 华龙股票收益计算器

    2006-03-16 00:00:00
    方便用户浏览文件后,如果觉得不需要这个文件时,不需要在返回操作系统去麻烦的寻找文件而直接删除它,并且可以有用户选择是临时删除到回收站中以后允许恢复还是彻底删除干净! 五、为了照顾一部分用户屏幕大小的...
  • 小窗口可任意拖放,并可自动吸附在屏幕边缘,再次单击鼠标可恢复原状。 7.该计算器可进行多种科学与逻辑运算、公式运算、个人所得税计算、各种单位换算,增加了各种常用常数表,加入了角度与弧度计算。包括了十几种...
  • 计算器测试计划书 目录 1. 简介 3 1. 1目的 3 1. 2背景 3 1.3范围 3 2. 测试参考文档和测试提交文档 3 2.1测试参考文档 3 2.2测试提交文档 4 3.测试进度 4 4.测试资源 5 4.1人力资源 5 4.2测试环境 5 4.3测试...
  • ---恢复内容开始--- 简易计算器功能主要是需要实现加,减,乘,除,求余,开根号,求平方。 界面相对简洁,如图1所示: 实现的基本代码及其思路: 第一步,创建安卓工程,将其相关名字补全,注意package的命名...
  • 手册平衡表计算器,快速核算平衡表,可采用标准工艺BOM核算,也可采用工单实际耗用表核算,减轻人工核算的工作量,提高核算的准确性。  手册平衡表计算器软件主要帮助用户解决以下几个问题: 保存保税手册数据,...
  • X计算器和PA私密相册常见问题汇总

    千次阅读 2019-09-26 15:19:28
    1. X计算器0秒视频如何恢复? X计算器1.4版本,存在部分bug,其中反馈较多的是0秒视频的问题,这种分两种情况: a. 拍摄的视频,时间显示为0。针对这种情况,用户需查看X计算器的占用空间(设置-》通用-》iPhone存储...
  • 2:使用命令将定制版恢复为华为版本 Win+R敲入CMD命令行 打开窗口,输入CD \ 回车(这不可以不要,个人习惯) 敲代码:telnet 192.168.1.1 用户名:root 密码:admin 敲:su 敲:shell 敲:? 敲:...

空空如也

空空如也

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

恢复计算器