简易计算器程序.docx
- 文档编号:9032127
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:13
- 大小:274.96KB
简易计算器程序.docx
《简易计算器程序.docx》由会员分享,可在线阅读,更多相关《简易计算器程序.docx(13页珍藏版)》请在冰豆网上搜索。
简易计算器程序
《高级面向对象》实践报告
题目:
简易计算器的实现
学院:
专业班级:
指导老师:
学号:
姓名:
2018年1月
目录
1需求分析1
1.1课题要求1
1.2设计思想1
1.3设计要求和步骤2
1.3编译环境2
2系统分析与设计2
2.1代理模式2
2.2设计方案要求2
2.3设计划分3
2.4类图设计3
3系统实现4
4软件测试5
4.1数据调试分析5
5程序源代码5
1需求分析
1.1课题要求
用代理模式实现一个简易的计算器,即实现加减乘除四则运算,要求使用代理模式,同时代理方和服务方须分别部署在不同的计算机中(即需要用不同进程实现)。
1.2设计思想
要设计一个计算器应用程序,则计算器必须要进行简单的四则运算功能,并且可以通过人机互动来进行操作。
计算器功能主要包括下面几个方面:
*计算简单的加减乘除四则运算;
*通过鼠标点击输入数字信息;
*显示计算结果;
*计算器具有返回功能:
按CE键不会清除重现存储器的内容;返零功能;
1.3设计要求和步骤
第一步,设计图形界面。
第二步,根据各按钮需要,标明对象名,便于计算操作。
第三步,设定各按钮的特性。
第四步,实例化所有按钮、设置其前景色并注册监听器。
第五步,运行程序
*运行小应用
*测试各按钮的性能,是否满足问题要求。
1.3编译环境
编码语言:
C#
编译环境:
MicrosoftVisualStudio2013
2系统分析与设计
2.1代理模式
定义:
为其他对象提供一种以控制对这个对象的访问。
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
2.2设计方案要求
整个程序分三部分,首先是确定程序交互的对象,每个组件要用有意义的标签标明,设计出一个大体的框架,再添加面板,各面板设计分布相互独立,各面板中的按钮分布也相互独立,其各自响应的事件都会由各自的监听动作事件所决定。
当button被按下时会产生一个动作事件(actionevent)。
各编码要有适当的注释。
2.3设计划分
用C#Winform窗体创建创建图形界面,框架和面板主要分成三大块:
框架、显示面板、和数字面板;具体分布如下:
2.4类图设计
此基于B/S的计算器后台采用的是代理模式中的静态代理模式实现的。
下图是这个计算器的UML类图。
3系统实现
按一般计算器表面布局,主要以网格的行数和列数在创建布局管器的构造方法中通过参数进行设置,另外边界布局管理器。
这两种布局结合最适合计算器,大方美观。
4软件测试
4.1数据调试分析
本设计主要目的就是进行简单的四则运算,因此现以随机数进行测试:
输入信息
显示结果
信息操作
从0~9数字
数字输入
输入1点5
小数点插入
输入2+5
加号、等号输入
加法运算
输入2*5
乘法运算
输入10/2
除法运算
输入16-2
减法运算
输入16
清除操作
5程序源代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespaceCalculator
{
publicpartialclassForm1:
Form
{
privateList
privateList
//状态记录
privatebooladd_flag=false;//+按下
privateboolminus_flag=false;//-按下
privateboolmulti_flag=false;//×按下
privatebooldiv_flag=false;//÷按下
privateboolresult_flag=false;//=按下
privateboolcan_operate_flag=false;//按下=是否响应
publicForm1()
{
InitializeComponent();
}
privatevoidnum_down(stringnum)
{
if(add_flag||minus_flag||multi_flag||div_flag||result_flag)
{
if(result_flag)//按下等号,刚刚算完一个运算的状态
{
textBox1.Text="";
}
textBox1.Clear();//如果用户刚刚输入完一个运算符
add_flag=false;
minus_flag=false;
multi_flag=false;
div_flag=false;
result_flag=false;
}
if((num.Equals(".")&&textBox1.Text.IndexOf(".")<0)||!
num.Equals("."))
{
//如果用户输入的是小数点.,则要判断当前已输入的数字中是否含有小数点.才允许输入
textBox1.Text+=num;
can_operate_flag=true;
}
}
privatevoidbtn9_Click(objectsender,EventArgse)
{
num_down("9");
}
privatevoidbtn8_Click(objectsender,EventArgse)
{
num_down("8");
}
privatevoidbtn7_Click(objectsender,EventArgse)
{
num_down("7");
}
privatevoidbtn6_Click(objectsender,EventArgse)
{
num_down("6");
}
privatevoidbtn5_Click(objectsender,EventArgse)
{
num_down("5");
}
privatevoidbtn4_Click(objectsender,EventArgse)
{
num_down("4");
}
privatevoidbtn3_Click(objectsender,EventArgse)
{
num_down("3");
}
privatevoidbtn2_Click(objectsender,EventArgse)
{
num_down("2");
}
privatevoidbtn1_Click(objectsender,EventArgse)
{
num_down("1");
}
privatevoidbtn0_Click(objectsender,EventArgse)
{
num_down("0");
}
privatevoidbtndian_Click(objectsender,EventArgse)
{
num_down(".");
}
privatevoidbtnchu_Click(objectsender,EventArgse)
{
if(!
div_flag)
{
result_flag=false;
value_list.Add(double.Parse(textBox1.Text));
operator_list.Add(3);
div_flag=true;
can_operate_flag=false;
}
}
privatevoidbtnchen_Click(objectsender,EventArgse)
{
if(!
multi_flag)
{
result_flag=false;
value_list.Add(double.Parse(textBox1.Text));
operator_list.Add
(2);
multi_flag=true;
can_operate_flag=false;
}
}
privatevoidbtnjian_Click(objectsender,EventArgse)
{
if(!
minus_flag)
{
result_flag=false;
value_list.Add(double.Parse(textBox1.Text));
operator_list.Add
(1);
minus_flag=true;
can_operate_flag=false;
}
}
privatevoidbtnjia_Click(objectsender,EventArgse)
{
if(!
add_flag)//防止用户多次输入一个符号键,符号键只允许输入一次
{
result_flag=false;
value_list.Add(double.Parse(textBox1.Text));//将当前已输入的数字放入value_list
operator_list.Add(0);
add_flag=true;
can_operate_flag=false;//刚刚输入完符号,不能构成一条正常的表达式,如111+,设置为不可运行状态
}
}
privatevoidbtndeng_Click(objectsender,EventArgse)
{
if(value_list.Count>0&&operator_list.Count>0&&can_operate_flag)
{//需要防止用户没输入数字,或者只输入了一个数,就按=。
value_list.Add(double.Parse(textBox1.Text));
doubletotal=value_list[0];
for(inti=0;i { int_operator=operator_list[i];//operator是C#的运算符重载的关键字,前面加个_来区别 switch(_operator) { case0: total+=value_list[i+1]; break; case1: total-=value_list[i+1]; break; case2: total*=value_list[i+1]; break; case3: total/=value_list[i+1]; break; } } textBox1.Text=total+""; operator_list.Clear();//算完,就清空累积数字与运算数组 value_list.Clear(); result_flag=true;//表示=按下 } } privatevoidbtnce_Click(objectsender,EventArgse) { operator_list.Clear(); value_list.Clear(); add_flag=false; minus_flag=false; multi_flag=false; div_flag=false; result_flag=false; can_operate_flag=false; textBox1.Clear(); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 计算器 程序