基于WPF的科学计算器程序
基于WPF的科学计算器程序
- 1.前言
- 2.界面展示
- 2.1标准计算器界面
- 2.2科学计算器界面
- 3.功能分析
- 4.代码实现
- 4.1窗体拖动
- 4.2界面切换
- 4.3运算符优先级
- 4.4功能函数
- 5.结语
1.前言
Windows实验课程需要根据老师发布的文档选择一个项目完成,考虑复习月时间比较紧张以及项目的可行性,因此选择了计算器程序。
本次实验利用WPF构建程序界面,调用dll进行运算,并在界面显示运算结果。在完成基本要求的前提下,实现了科学计算器的部分功能。
PS:本实验所创建的窗体项目类型为:Windows窗体应用(.Net Framework),动态链接库项目类型为:类库(.Net Framework)(熟悉visual studio的盆友应该比较清楚)。
2.界面展示
本实验计算器程序的界面基于WPF,包含标准计算器和科学计算器两个界面,以扩大计算器程序的适用性。 标准计算器界面和科学计算器界面通过tabControl控件进行切换,方便快捷。界面上方左侧为本计算器程序的logo,即:“Calc”,为计算器英文简写。
2.1标准计算器界面
标准计算器界面背景设置为黑色,不同区域的按钮设置为不同的颜色,给人更直观的视觉效果。由于隐藏了窗体状态栏,因此将退出程序的功能集成为程序按钮的点击事件,即“Exit”按钮;直接点击鼠标左键滑动,即可拖动窗体,以改变窗体的位置。
该计算器程序总体风格仿照苹果手机端计算器,布局方面运用到了Grid以及Grid的嵌套,以实现区域的划分以及按钮的对齐。如上图所示,文本框设置为两个,分别显示历史输入以及当前输入。在xmal文件中定义了按钮的样式,使按钮的形状变为圆形,同时赋予了按钮点击时的动作反馈,即点击时按钮颜色发生变化,增强了人机交互性。
2.2科学计算器界面
科学计算器在标准计算器的基础上增加了很多新的功能,比如:三角函数、次方、开根号、阶乘等,因此额外添加了一些新的按键。值得一提的是,由于使用了tabControl控件,科学计算器界面无法重用标准计算器界面定义的输入栏以及按钮。科学计算器界面按钮排布为:7×5,同样的,给不同区域的按钮赋予了不同的颜色。
由于科学计算器功能较多,全部功能均表现在界面上,容易导致界面按钮过多,很不美观。因此,这里借鉴了已有的方案,即设置第二功能键,点击“2nd”按钮,切换部分按键的功能,在实现扩展功能的同时,兼顾界面的视觉效果。
3.功能分析
功能分析这部分就不写那么详细了(其实是比较懒,实验报告上肯定不能怠慢),总结一下实现的功能吧:基本算术运算、数据类型兼容(整形、浮点型)、正负数、小括号、取余运算、三角函数、反三角函数、次方开方运算、对数阶乘运算以及删除回退和错误提示的功能,大概就这样。
放几张图看一下吧(放太多的话读着可能不太方便,这里就放三张吧):
4.代码实现
OKK,终于到代码了,这个实验虽然简单但代码还是不少了,全部贴出来估计看的人也会抓狂吧,因此这里简要分析一下关键代码,有助于大家理解整个项目,本实验全部代码放在Github。
4.1窗体拖动
本次实验,为了美化窗体,去除了窗体状态栏,因此需要实现窗体拖动的方法。
//状态栏隐藏后窗体拖动private void Window_MouseMove(object sender, MouseEventArgs e){//解决此报错:调度程序进程已挂起,但消息仍在处理中if (e.LeftButton == MouseButtonState.Pressed) {Dispatcher.BeginInvoke(new Action(() => {this.DragMove();}));}}
4.2界面切换
本项目实现了标准计算器和科学计算器,当进行切换时,为了重用标准计算器的按钮点击事件,需要对文本框进行赋值。
//当选项卡发生变化时private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e){if (tabControl.SelectedIndex == 0) //界面一,即标准计算器{this.Result = TempResult;this.Input = TempInut;}if (tabControl.SelectedIndex == 1) //界面二,即科学计算器{this.Result = this.Result1;this.Input = this.Input1;}
}
4.3运算符优先级
根据运算符类型返回运算符的优先级,用于确定运算符的入栈顺序。
private int OperatorLevel(string op) //返回运算符优先级{int level = 0;switch (op){case "+": level = 0; break;case "-": level = 0; break;case "*": level = 1; break;case "/": level = 1; break;case "%": level = 1; break;case "1/x": level = 1; break;case "^": level = 2; break;case "!": level = 3; break;case "√": level = 3; break;case "log(":case "ln(":case "sin(":case "cos(":case "tan(":case "sin-1(":case "cos-1(":case "tan-1(": level = 4; break;}return level;}
4.4功能函数
算法逻辑实现部分需要分析界面输入的数据,将数字放入数字栈,将运算符放入符号栈,因此需要判断某一字符串是否为数字。
private bool isNumberic(string value) //判断元素是否为数字{if (value == "e" || value == "π") //圆周率return true;for (int i = 0; i < value.Length; i++){if (i == 0){if (!isNumber(value[i])){if ((value[i] == '+' || value[i] == '-') && value.Length != 1)continue;elsereturn false;}}else{if (!isNumber(value[i]))return false;}}return true;}private bool isNumber(char value){if ('0' <= value && value <= '9' || value == '.')return true;return false;}
5.结语
本项目还有一些可以改进的地方,比如增加错误提示的类型,本实验错误提示仅有:“Divisor cannot be zero”、“Invalid input”以及“Error”。
另一点是本项目可以新增一个界面——程序员计算器,新增界面很简单,即对tabControl新增一个item,然后进行按键的布局以及功能的实现。由于当时复习时间有限,就没有做这个界面,大家有兴趣可以尝试一下。
PS:窗体应用项目 算法实现项目
基于WPF的科学计算器程序相关推荐
- AVR单片机计算器C语言源程序,一个基于AVR单片机的计算器程序.doc
一个基于AVR单片机的计算器程序 #include #include//延时函数的头文件 #include // 中断函数的头文件 #define uint unsigned int #define ...
- 基于qt的计算机论文,基于qt的科学计算器的设计与实现本科毕业论文.doc
基于qt的科学计算器的设计与实现 摘 要 随着科技的飞速发展,人类已经进入信息化的大时代.信息技术发展更是日新月异,计算器已经进入而且融入人们生活的各个领域,在现代生活中无处不在,大型复杂的计算是人脑 ...
- 基于avaSwing开发普通计算器程序 课程设计 大作业源码
基于avaSwing开发普通计算器程序: (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse+Jdk 运行效果图: 基于avaSwing开发普通计算器程序: (大作 ...
- 能计算x的计算机软件,访问Mac OS X中的科学计算器程序员计算器 | MOS86
Mac计算机应用程序乍一看可能会有些限制,但实际上还有其他两个计算器模式包含在应用程序中;一个全功能的科学计算器,还有一个程序员计算器. 在OS X中访问备用计算器真的很简单,但像许多其他有趣的计算器 ...
- 基于Android的科学计算器设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85721857 科学计算器 一.产品概述 计算器: 它是一个拥有扁平化优雅用户界面的科学计算 ...
- 基于WPF+XMPP的IM程序开发日志 之二 WPF线程模型
循例地在开始正文前说些废话.正如这篇博客的题目--开发日志,这系列的博客是我在编写这个IM的一些日志,或者另外一个说法:笔记.并不是一些系统的文章,例如"XX学习教程".这些博客里 ...
- mega16单片机c语言编程,mega16单片机科学计算器程序源代码
描述 支持最大八位的无符号长整型数值计算 #include<iom16v.h> #include<macros.h> //#include<stdio.h> #de ...
- 科学计算机如何算加减乘除,mega16单片机科学计算器程序(带有加减乘除功能)初步收尾了...
支持最大八位的无符号长整型数值计算,后期会添加带符号运算及其它计算功能. #include #include //#include #define uchar unsigned char #defin ...
- 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)
科学计算器(简化版) 最终界面: 全部源代码下载地址: 链接: http://download.csdn.net/detail/u012339743/8198227 详细编写过程: 1. 打开V ...
最新文章
- 跟你聊得这么投缘,你却说自己不是人?!
- 【Tools】WireShark3.2安装教程详解
- java重置_JAVA復制數組和重置數組大小
- lvs系列之dr(二)
- P3565 [POI2014]HOT-Hotels(树形dp+长链剖分)
- Web前端行业的了解
- 训练不出结果_训练赛惨败SKT?FPX直播透露拿冠军原因!Karsa再谈离开RNG?
- 用awk 取出ifconfig eth0中IP的方法
- Linux---基础指令
- 基于python的在线考试系统-基于Django的在线考试系统
- python标点符号全是英文吗_python 过滤中文、英文标点特殊符号
- [Tarjan四连] TarjanLCA
- tftp64工具使用
- 如何在MFC界面使用OCX控件
- 计算机二级python易错选择题汇总
- Windows快捷键大全(2020年版)
- 程序员缓解职业病的秘方
- 喜讯 | 人大金仓荣获行业信息化领航企业奖
- QOpenGLWidget空白不显示绘图内容
- Linux 服务器被黑后处理方法
热门文章
- 知识付费产品复购率低成难题
- 报错:java.lang.NullPointerException 空指针异常
- 软件能力成熟度模型(Capabilitymaturity model,CMM)
- 【树莓派】树莓派3B+搭建Ubuntu
- [POI2008]Mirror Trap
- 汽车智能化的商业化路径、产业演进及投资机会探讨——附下载链接
- 广东未来科技:书写立体显示事业传奇的行业独角兽
- Flutter 错误解决Building with plugins requires symlink support.
- iTunes无法验证服务器s.mzstatic.com的身份 服务器证书无效 解决办法
- 用python实现多线程爬取影视网站全部视频方法【笔记】