SWT计算器的设计与实现.docx
《SWT计算器的设计与实现.docx》由会员分享,可在线阅读,更多相关《SWT计算器的设计与实现.docx(38页珍藏版)》请在冰豆网上搜索。
![SWT计算器的设计与实现.docx](https://file1.bdocx.com/fileroot1/2022-11/26/686d9fbc-76d1-4a8a-a022-1c866c4a2a08/686d9fbc-76d1-4a8a-a022-1c866c4a2a081.gif)
SWT计算器的设计与实现
《面向对象程序设计》
课程设计报告
题目:
计算器的设计实现
院(系):
计算机学院
专业班级:
学生姓名:
学号:
指导教师:
2012年6月4日至2012年6月15日
华中科技大学制
计算器的设计实现课程设计任务书
一、设计(调查报告/论文)题目
计算器的设计实现
二、设计(调查报告/论文)主要内容
总体功能:
计算器具有基本的计算功能,而且还有显示计算过程、保存计算过程之功能。
具体功能与要求:
1、单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)可以设置参与计算的运算数。
2、单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。
3、单击“计算器”上的函数按钮可以计算出相应的函数值。
4、单击“计算器”上的“=”按钮显示计算结果。
5、单击“保存”按钮可以将文本区中的全部计算过程保存到文件:
单击“复制”按钮可以将文本区中选中的文本复制到剪切板;单击“清除”按钮可以清除文本区中的全部内容。
三、原始资料
1.《面向对象程序设计课程设计》指导书
2.耿祥义.大学实用教程.北京:
清华大学出版社,2009.
四、要求的设计(调查/论文)成果
1.课程设计报告
2.课程设计软件
五、进程安排
布置任务,查找资料、需求分析1天
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]张广彬.课程设计案例精编(第二版).北京:
清华大学出版社,2011.
[2]耿祥义.课程设计(第二版).北京:
清华大学出版社,2008.
[3]耿祥义.大学实用教程.北京:
清华大学出版社,2009.
[4]邹林达.陈国君2程序设计基础.北京:
清华大学出版社,2010.
[5]邹林达.2程序设计基础实验指导.北京:
清华大学,2010.
指导教师(签名):
20年月日
1需求与总体设计……………………………………………………………………………1
1.1计算器需求分析………………………………………………………………………1
1.2功能描述………………………………………………………………………1
1.3系统功能图………………………………………………………………………1
1.3系统主要类图………………………………………………………………………2
2详细设计…………………………………………………………………………………3
2.1类…………………………………………………………………………………3
2.2成员变量………………………………………………………………………3
2.3方法………………………………………………………………………4
2.4详细类图………………………………………………………………………4
3编码实现…………………………………………………………………………………5
3.1计算器详细代码实现……………………………………………………………………5
4系统测试…………………………………………………………………………………28
4.1界面测试……………………………………………………………………………28
4.2计算器功能测试…………………………………………………………………………28
4.2.1四则运算…………………………………………………………………………28
4.2.2三角函数运算…………………………………………………………………………29
4.2.3特殊运算…………………………………………………………………………29
4.2.4计算过程清除…………………………………………………………………………30
4.2.5计算过程保存…………………………………………………………………………30
4.2.6关于计算机说明…………………………………………………………………………31
总结…………………………………………………………………………………32
(要求:
目录题头用三号黑体字居中书写,隔行书写目录内容。
目录中各级题序及题标用小四号黑体字)
1需求与总体设计
1.1计算器需求分析
为了减轻人们日益繁琐的工作压力和负担,实现高效统计和运算,在普通计算器上加入更多样更便捷的功能势在必行,普通计算器上加入三角函数功能和保存功能,可以大大减轻会计以及财务部门统计账目的压力。
此次逻辑算术设计实践,利用面向对象程序设计和技术针对该程序显示用户界面,能实现四则运算以及扩展函数运算,并用图形界面实现。
够培养我们严谨务实的工作态度以及提高我们分析问题和解决问题的能力,也对于巩固和加深对面向对象程序设计的基本概念、基本理论和实现技术的理解起到了一定的意义。
1.2功能描述
(1)单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)可以设置参与计算的运算数。
(2)单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。
(3)单击“计算器”上的函数按钮可以计算出相应的函数值。
(4)单击“计算器”上的“=”按钮显示计算结果。
(5)单击“保存”按钮可以将文本区中的全部计算过程保存到文件:
单击“复制”按钮可以将文本区中选中的文本复制到剪切板;单击“清除”按钮可以清除文本区中的全部内容。
1.3功能图如下:
图1-1系统主要功能图
1.4系统主要类图
图1-2系统主要类图
2详细设计
2.1类
:
该类是程序的主类,显示了界面窗口,数据计算,计算过程保存、复制到剪贴板,以下是该类的说明。
2.2成员变量
●设置数据输出精度(对于型值)
●控制当前能否按键
●内存中存储的型数字
●内存中存储的型数字
●,用来保存型数据的中间值
●用来保存最后结果
●用来保存当前进行何种运算,
●用来保存前次进行何种运算
●0按钮前一动作为结果运算动作,比如“=”或是开方
●1按钮前一动作为数值输出或是“”
●中间运算过程记录值
●d与系统交互类实例
●s容器窗口实例
●计算结果显示框
●t2计算过程显示窗口
●m菜单实例
●菜单变量
●“标准型”菜单项目变量
●b0–b9数字键0到9
●保存键按钮,保存计算过程
●复制键按钮,复制计算过程到剪贴板
●开方键按钮,进行开方运算
●“%”键按钮,进行模运算
●小数点按钮
●“+”“-”“*”“/”键按钮,进行加减乘除运算
●“”””””””按钮,进行三角函数运算
2.3方法
()是程序的主要方法,负责构造友好界面窗口,显示按钮、文本框,调用监听器进行按钮功能判断监听,实施四则运算和特殊函数,显示运算结果,保存运算结果到文件和剪贴板。
2.4详细类图
图2-1系统详细类图
3编码实现
3.1计算器详细代码实现
04;
;
;
.*;
;
.*;
.*;
.*;
.*;
.*;
{
=("0");设置数据输出精度(对于型值)
;控制当前能否按键
;内存中存储的型数字
内存中存储的型数字
;用来保存型数据的中间值()和最后结果()
=-1,=-1;用来保存当前进行何种运算用来保存前次进行何种运算
01,按钮前一动作为结果运算动作,比如“=”或是开方,0,按钮前一动作为数值输出或是“”
""中间运算过程记录值
d;
s;
(){
();
(d);
(220,380);
((d,"c:
\\123"));
("计算器");
**************************************************************************
设置菜单
();
创建查看菜单项
=();
("查看(v)");
();
();
();
();
("标准型(T)1");
();
("科学型(S)2");
();
("程序员(P)3");
();
("统计信息(A)4");
1();
分割线
();
("历史记录(Y)");
();
("数字分组(I)");
2();
分割线
();
();
("基本(B)4");
();
("单位转换(U)");
();
("日期计算(D)");
创建工作表子菜单
();
("工作表(W)");
();
();
();
("抵押(M)");
();
("汽车租赁(V)");
1();
1("油耗()(F)");
2();
2("油耗(1/100)(U)");
创建编辑菜单
=();
("编辑(E)");
();
();
();
("复制(C)");
();
("粘贴(V)");
3();
分割线
1();
1("历史记录(H)");
1();
1
(1);
(1);
("复制历史记录(I)");
(1);
("编辑(E)F2");
(1);
("取消编辑(N)");
(1);
("清楚(L)");
创建帮助菜单
=();
("帮助(H)")创建帮助菜单
();
();
();
("查看帮助(V)F1");
();
("关于计算机A)");
(m);
界面采用网格布局,5栏**************************************************
();
5;
();
创建计算窗口,设置样式
(
|);
("");
();
5;
();
创建显示计算过程窗口,设置样式
t2=(|||);
();
4;
3;
t2();
创建复制、保存、清除按钮,对t2操作,由后方监听器实现
();
("复制");
();
("保存");
();
("清除");
创建三角函数按钮
();
("");
();
("");
();
("");
();
("");
();
("");
按布局创建特殊键按钮和数字键按钮
();
("←");
();
("");
();
("C");
();
("±");
();
("√");
b7();
b7("7");
b8();
b8("8");
b9();
b9("9");
();
("/");
();
("%");
b4();
b4("4");
b5();
b5("5");
b6();
b6("6");
();
("*");
();
("1");
b1();
b1("1");
b2();
b2("2");
b3();
b3("3");
();
("-");
();
("=");
b0();
b0("0");
();
(".");
();
("+");
对按钮设置样式并应用**********************************
();
();
();
();
();
();
……
();
();
();
();
************************************************************
监听器部分
为数字键按钮添加监听器
b1((){
(e){
(1){如果前一动作为运算,比如“=”或是开方,则运算窗口清零,监视值w置零,然后再输出数字
("");
0;
(()
+"1");
"1";}输出一个数,就加到计算记录过程值中(最后在计算过程显示出口输出)
{如果前一动作不为运算,直接输出数字,,监视值w置零
(()
+"1");
"1";}
0;
}
});
……….
b0((){
(e){
(1){
("");
0;
(()
+"0");
"0";}
{
(()
+"0");
"0";}
0;
}
});
为“.”按钮添加监听器
((){
(e){
前一动作为结果运算,1,计算窗口直接置零,监视值置零
(1){
("");
0;
}
{按下"."按钮时,判断当前文本框内字符串中含不含".",如果已含,则不允许再插入"."
=;
(()()0)
=;
(i=0;i<()();)
('.'()(i)){
=;
;
}
()
(()+".");
".";
}
}
});
为“+”“-”“*”“/”按钮添加监听器中间过程添加“+”,语句为加减乘除通用代码,并用标记前一次预算状态,标记现在运状态
((){
(e){
"+";
(){
0:
(());
;
1:
(());
;
2:
*=(());
;
3:
((())0){
("除数不能为零");
=;
}
(());
;
:
=(());
}
("")清楚文本显示内容,但计算结果已写入内存
==0;
}
});
……
为“/”按钮添加监听器中间过程添加“+”,语句为加减乘除通用代码,并用标记前一次预算状态,标记现在运状态
((){
(e){
"/";
(){
0:
(());
;
1:
(());
;
2:
*=(());
;
3:
((())0){
("除数不能为零");
=;
}
(());
;
:
=(());
}
("");
==3;
}
});
为“=”添加监听器,识别是否连续按等号,连续相同运算
((){
(e){
如果只按一次按"=",先检测当前是何种运算,再调用
(5){
(0){
;
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
(1){
;
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
(2){
*=;
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
(3){
((())0){
("除数不能为零");
=;
}{
;
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
}
}{如果连续按"=",先检测当前是何种运算,连续运算
=(());
(0){
=-1将恢复默认
(());
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
(1){
=-1;
(());
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
(2){
=-1;
*=(());
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
(3){
=-1;
((())0){
("除数不能为零");
=;
}{
(());
(());
"="();
t2(t2());
t2("\n");
"";
1;
}
}
}
=5;
}
});
为“%”添加监听器,对第二个操作数除以100置监视值为1,识别是否有小数点,对和分别处理
((){未调试好
(e){
1;
(()"0"){
("0");
}{
=;
(i=0;i<()();)
('.'()(i)){
=;
第二个字符是小数点退出
}
如果是数,除100
(){
=(());
=/100.0;
(());
"%"+"="();
t2(t2());
t2("\n");
"";
}{
如果是数但能被100整除,则去掉末尾两个零
((())%1000){?
=(());
100;
(());
"%"+"="();
t2(t2());
t2("\n");
"";
}
如果是数,但不能被100整除,则按数处理
{
=(
())先转化成再计算
=/100.0计算
(())将整数转化成字符在文本框表示
"%"+"="();
t2(t2());
t2("\n");
"";
}
}
}
}
});
为“√”按钮添加监听器,进行开方操作*****************
((){
(e){
1;
s=();
((0)'-'){
("负数不能开根号");
=;
}
((
((()))));
"√""="();
t2(t2());
t2("\n");
"";
}
});
为“”按钮添加监听器*********************************
((){
(e){
1;
s=();
((0)'-'){
("非法操作");
=;
}
((
((()))));
"""="();
t2(t2());
t2("\n");
"";
}
});
为“”按钮添加监听器******************************
((){
(e){
1;
s=();
((0)'-'){
("非法操作");
=;
}
((
((()))));
"""="();
t2(t2());
t2("\n");
"";
}
})
为“”按钮添加监听器******************************
((){
(e){
1;
s=();
((0)'-'){?
("非法操作");
=;
}
((
((()))));
"""="();
t2(t2());
t2("\n");
"";
}
});
为“”按钮添加监听器******************************
((){
(e){
1;
s=();
((0)'-'){?
("非法操作");
=;
}
((
((()))));
"""="();
t2(t2());
t2("\n");
"";
}
});
为“”按钮添加监听器******************************
((){
(e){
1;
s=();
((0)'-'){
("非法操作");
=;
}
((
((()))));
"""="();
t2(t2());
t2("\n");
"";
}
});
为“1”按钮添加监听器******************************
((){
(e){
1;
(()(0)'0'
()()1){
("零不能求倒数");
=;
}{
s=(1/
(()));
(s);
"1/""="();
t2(t2());
t2("\n");
"";
}
}
});
为“±”按钮添加监听器**************************
((){
(e){
=;
s=();
(i=0;i<();)
(!
((i)>='0'(i)<='9'
(i)'.'(i)'-')){
=;
;
}跳出非法数据
(){
如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉
((0)'-'){
("");
(i=1;i<();){
a=(i);
(()+a);
}
}
如果当前字符串第一个字符不是符号,则添加一个符号在首字母处
('-'+s);
}
}
});
按下'←'键,利用循环将当前字符串中的最后一个字母删除**********
((){
(e){
0;
s=()数据已存在内存中
("");
(i=0;i<()-1;){
a=(i);
(()+a);
}
}
});
按下''按钮,将当前文本框内数据清除*************************
((){
(e){
("");
=;
}
});
按下'C'按钮,计算文本框内数据清除,同时清0***********
((){
(e){
==0;
("");
=;
}
});
按下“清除”按钮,清楚计算过程显示文本框内数据**************
((){
(e){
t2("");
}
});
为“保存”按钮添加监听器,保存计算过程到自己命名文件中
(()