- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计器综合设计.doc
计算器设计
一、项目的背景及意义
随着信息时代的步伐加快,日常生活的开支、大额数字、多倍小数或是加了三角函数的计算都需要计算器的帮助,处理数字的开方、正余弦都离不开计算器。计算器的出现大大减轻了我们的脑力负担,让我们的工作学习有了更高的效率。
二、需求分析
2.1 整体思想
在整个过程中,首先应该对输入进行容错处理,这样有利于提高用户体验。对于用户的按键输入,需要及时地显示在第一个EditView中。在EditView中显示的是一个字符串,用户每输入一个操作,字符串发生相应改变,然后在EditView中反映出来。
接着便是对第一个EditView中的字符串进行处理。通过程序设计,可以将字符串中的数据和操作符分别存在两个栈中。
然后需要设计算法处理两个栈,通过算法得出字符串表达式的运算结果,再将运算结果反映在第二个EditView中的字符串中。
(注:数据和操作符也可以储存在队列中,实际上储存在队列中更为合理。)
2.2 容错处理
用户在输入过程中,肯定会存在一定的错误,程序设计过程中需要对应用程序进行容错处理。容错设计比如:在输入过程中小数的话只能有一个小数点,操作符不能连续输入,整数数据的开头不能出现0等等。
在设计的应用程序中,设计了几个标记flag,每按下一个按键,若是按键是合理的话,都会引起标记flag的改变。标记flag将会限制接下来的输入是否有效,无效则不做任何处理。
flag0=0:处理0的输出,为1则表示数字的开头有一个0。当flag0=1时,不能再输入0,当再输入数字或者操作符时,flag0重新置0。
flag1=0:处理0的输出,每个数字开头的标志 数值为0表示为数字开头。当flag1=0时,如果先输入0再输入1的话,前面的0自动消除。还有当flag1=0时,不能输入小数点等等。
flag2=0:处理小数点,一个数字最多只能有一个小数点。当数字中有小数点时,flag2变为1,此后不能再输入小数点,输入操作符等操作后,flag2又变为0。
flag3=0:处理运算符的输出。很明显不能连续输入操作符,用此标志,来限制连续操作符的输入。
flag4=0:处理ON/OFF问题。当OFF之后,flag变为1,只有当flag等于1时,ON按钮才能进行操作。
flag5=0:处理等号问题。很明显操作符之后不能按下等号按钮,等号按钮按下之后要在第二个EditView中显示结果、将显示输出的EditView清空。
2.3 数据结构的设计
在程序设计过程中,需要设计数据结构来存储数字、操作符和容错标记,在本文中使用了栈,对这些数据进行了存储。
容错标记flag的存储结构如下所示:
class Flag
{
privateint a0;
privateint a1;
privateint a2;
privateint a3;
publicint a0()
{ return a0; }
publicint a1()
{ return a1; }
publicint a2()
{ return a2; }
publicint a3()
{ return a3; }
public Flag(inta,intb,intc,int d)
{
a0=a;
a1=b;
a2=c;
a3=d;
}
public Flag next;
}
classFlagList
{
private Flag first;
publicFlagList(inta,intb,intc,int d)
{ first=null; }
publicbooleanisEmpty()
{ return (first==null); }
publicvoidinsertFirst(inta,intb,intc,int d)
{
Flag newFlag = newFlag(a,b,c,d);
newFlag.next = first;
first = newFlag;
}
public Flag deleteFirst()
{
Flag temp = first;
first = first.next;
return temp;
}
}
classFlagStack
{
privateFlagListtheFlagList;
privateint count;
publicFlagStack()
{
theFlagList = newFlagList(0,0,0,0);
count=0;
}
publicvoid push(inta,intb,intc,int d)
{
theFlagList.insertFirst(a
文档评论(0)