资源描述
. .
?JAVA程序设计?课程设计任务书
一、课程设计的目的
1、培养学生面向对象编程的思想;
2、使学生熟悉JAVA语言的使用;
3、培养学生JAVA编程的思想和方法;
4、使学生掌握JAVA编程调试的根本技能;
5、培养学生分析、解决问题的能力。
二、课程设计内容与要求
1、内容一:
1简单计算器
[题目描述]
使用Java的GUI图形用户界面编程设计并编写一个计算器程序,用户可以通过鼠标或者键盘操作输入参加运算的数值和运算符,要求能进展加、减、乘、除等混合运算。
[根本要求]
实现加、减、乘、除的双目单类别的根底运算;
[实现提示]
GUI编程 ponent的事件响应。
参考界面
?JAVA程序设计?课程设计
一、系统中所使用的数据对象及说明
1、Calculator类
属性
属性名称
类型
描述
Jmb
JMenuBar
菜单栏
Jm1 jm2 jm3
JMenu
菜单
Jmi
JMenuItem
菜单项
f
JFrame
实例化对象
Panel1 1
JPanel
输入面板
mandsPanel
JPanel
运算符面板
calckeysPanel
JPanel
数字面板
showline
JTextField
数据输出框
backspace
utton
退格键
CE
utton
清空
C
utton
删除
1/X
utton
取余
dao
utton
取倒数
add
utton
数字相加
jian
utton
数字相减
cheng
utton
数字相乘
quzheng
utton
数字相除
dian
utton
点符号
deng
utton
等于号
zero
utton
一
one
utton
二
two
utton
三
three
utton
四
four
utton
五
five
utton
六
six
utton
七
seven
utton
八
eight
utton
九
num1
String
保存第一个运算数字
operator
String
保存运算符号
方法
方法名称
功能
Calculator
计算器布局
Add
添加组件、面板
addMouseListener
添加鼠标监听事件
setJMenuBar
设置菜单
二、 系统功能构造及相关算法描述
1、系统功能构造
计算器
按键
文本框
菜单栏
标题栏
1-9、
Backspace
CE、C
+、-、*、/
%、^、.、1/x
=
文本框
帮助
查看
编辑
标题:
计算器
关于计算器
帮助主题
数学分组
科学
型
标准
型
粘贴
复制
系统功能构造图
2、 相关算法流程图
〔1〕加减法流程
N
Y
将S添加到show文本框
执行加、减法运算得出S
Mun1是否存在
(2) 乘除法流程
N
Mun1是否存在
Y
执行乘、除法运算得出S
将S添加到show文本框
(3) 乘方取余法流程
Mun1是否存在
N
Y
执行乘方、取余法运算得出S
将S添加到show文本框
三、系统运行结果〔截图〕
1、主菜单
四、课程设计总结
通过此次课程设计,使我更加扎实的掌握了有关JAVA图形界面布局等方面的知识,虽然在设计过程中也遇到了很多问题,但经过一次又一次的思考,一遍又一遍检查和反复修改终于找到了原因所在,也暴露了前期我在这方面的知识欠缺。课程设计是一种实践活动,不但可以提升专业知识和专业能力,也培养了我们独立思考,动手操作的能力,使我对抽象的知识有了具体的认识。这对于我们的将来也有很大的帮助。此次课程设计也让我明白没有最完善的程序代码,只有不断地改善才能使程序变得更完美,同时也增强了我对JAVA的兴趣,相信继续保持下去对JAVA的理解一定会更上一层楼。
附录:程序源码
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.utton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
publicclassCalculatorextends JFrame implements ActionListener {
JMenuBar jmb;
JMenu jm1,jm2,jm3;
JMenuItem jmi;
/** 计算器上的键的显示名字 */
privatefinal String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
"*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
/** 计算器上的功能键的显示名字 */
privatefinal String[] MAND = { "Backspace", "CE", "C" };
/** 计算器上键的按钮 */
private utton keys[] = new utton[KEYS.length];
/** 计算器上的功能键的按钮 */
private utton mands[] = new utton[MAND.length];
/** 计算器左边的M的按钮 */
/** 计算结果文本框 */
private JTextField resultText = newJTextField("0");
// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
privatebooleanfirstDigit = true;
// 计算的中间结果。
privatedoubleresultNum = 0.0;
// 当前运算的运算符
private String operator = "=";
// 操作是否合法
privatebooleanoperateValidFlag = true;
/**
* 构造函数
*/
public Calculator() {
super();
JMenuBar jmb=new JMenuBar();
this.setJMenuBar(jmb);
JMenu jm=new JMenu("编辑(E)");
jmb.add(jm);
jmi= new JMenuItem("复制(c) Ctrl+c");
jm.add(jmi);
jmi= new JMenuItem("粘贴(p) Ctrl+v");
jm.add(jmi);
jm2=new JMenu("查看(v)");
jmb.add(jm2);
jmi= new JMenuItem("标准型(T)");
jm2.add(jmi);
jmi= new JMenuItem("科学型(S)");
jm2.add(jmi);
jm2.add(new JSeparator());
jmi= new JMenuItem("数学分组(I)");
jm2.add(jmi);
jm3=new JMenu("帮助(H)");
jmb.add(jm3);
jmi= new JMenuItem("帮助主题(H)");
jm3.add(jmi);
jm3.add(new JSeparator());
jmi= new JMenuItem("关于计算器(A)");
jm3.add(jmi);
// 初始化计算器
init();
// 设置计算器的背景颜色
this.setBackground(Color.LIGHT_GRAY);
this.setTitle("计算器");
// 在屏幕(500, 300)坐标处显示计算器
this.setLocation(500, 300);
// 不许修改计算器的大小
this.setResizable(false);
// 使计算器中各组件大小适宜
this.pack();
}
/**
* 初始化计算器
*/
privatevoid init() {
// 文本框中的内容采用右对齐方式
resultText.setHorizontalAlignment(JTextField.RIGHT);
// 不允许修改结果文本框
resultText.setEditable(false);
// 设置文本框背景颜色为白色
resultText.setBackground(Color.WHITE);
// 初始化计算器上键的按钮,将键放在一个面板内
JPanel calckeysPanel = new JPanel();
// 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));
for (int i = 0; i < KEYS.length; i++) {
keys[i] = new utton(KEYS[i]);
calckeysPanel.add(keys[i]);
keys[i].setForeground(Color.blue);
}
// 运算符键用红色标示,其他键用蓝色表示
keys[3].setForeground(Color.red);
keys[8].setForeground(Color.red);
keys[13].setForeground(Color.red);
keys[18].setForeground(Color.red);
keys[19].setForeground(Color.red);
// 初始化功能键,都用红色标示。将功能键放在一个面板内
JPanel mandsPanel = new JPanel();
// 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
mandsPanel.setLayout(new GridLayout(1, 3, 3, 3));
for (int i = 0; i < MAND.length; i++) {
mands[i] = new utton(MAND[i]);
mandsPanel.add(mands[i]);
mands[i].setForeground(Color.red);
}
// 下面进展计算器的整体布局,将calckeys和mand面板放在计算器的中下部
// 新建一个大的面板,将上面建立的mand和calckeys面板放在该面板内
JPanel panel1 = new JPanel();
// 面板采用边界布局管理器,面板里组件之间的水平和垂直方向上间隔都为3象素
panel1.setLayout(new BorderLayout(3, 3));
panel1.add("North", mandsPanel);
panel1.add("Center", calckeysPanel);
// 建立一个面板放文本框
JPanel top = new JPanel();
top.setLayout(new BorderLayout());
top.add("Center", resultText);
// 整体布局
getContentPane().setLayout(new BorderLayout(3, 5));
getContentPane().add("North", top);
getContentPane().add("Center", panel1);
// 为各按钮添加事件监听器
// 都使用同一个事件监听器,即本对象。本类的声明中有implements ActionListener
for (int i = 0; i < KEYS.length; i++) {
keys[i].addActionListener(this);
}
for (int i = 0; i < MAND.length; i++) {
mands[i].addActionListener(this);
}}
/**
* 处理事件
*/
publicvoid actionPerformed(ActionEvent e) {
// 获取事件源的标签
String label = e.getActionmand();
if (label.equals(MAND[0])) {
// 用户按了"Backspace"键
handleBackspace();
} elseif (label.equals(MAND[1])) {
// 用户按了"CE"键
resultText.setText("0");
} elseif (label.equals(MAND[2])) {
// 用户按了"C"键
handleC();
} elseif ("0123456789.".indexOf(label) >= 0) {
// 用户按了数字键或者小数点键
handleNumber(label);
// handlezero(zero);
} else {
// 用户按了运算符键
handleOperator(label);
}
}
/**
* 处理Backspace键被按下的事件
*/
privatevoid handleBackspace() {
String text = resultText.getText();
int i = text.length();
if (i > 0) {
// 退格,将文本最后一个字符去掉
text = text.substring(0, i - 1);
if (text.length() == 0) {
// 如果文本没有了内容,那么初始化计算器的各种值
resultText.setText("0");
firstDigit = true;
operator = "=";
} else {
// 显示新的文本
resultText.setText(text);
}
}
}
/**
* 处理数字键被按下的事件
*
* param key
*/
privatevoid handleNumber(String key) {
if (firstDigit) {
// 输入的第一个数字
resultText.setText(key);
} elseif ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {
// 输入的是小数点,并且之前没有小数点,那么将小数点附在结果文本框的后面
resultText.setText(resultText.getText() + ".");
} elseif (!key.equals(".")) {
// 如果输入的不是小数点,那么将数字附在结果文本框的后面
resultText.setText(resultText.getText() + key);
}
// 以后输入的肯定不是第一个数字了
firstDigit = false;
}
/**
* 处理C键被按下的事件
*/
privatevoid handleC() {
// 初始化计算器的各种值
resultText.setText("0");
firstDigit = true;
operator = "=";
}
/**
* 处理运算符键被按下的事件
*
* param key
*/
privatevoid handleOperator(String key) {
if (operator.equals("/")) {
// 除法运算
// 如果当前结果文本框中的值等于0
if (getNumberFromText() == 0.0) {
// 操作不合法
operateValidFlag = false;
resultText.setText("除数不能为零");
} else {
resultNum /= getNumberFromText();
}
} elseif (operator.equals("1/x")) {
// 倒数运算
if (resultNum == 0.0) {
// 操作不合法
operateValidFlag = false;
resultText.setText("零没有倒数");
} else {
resultNum = 1 / resultNum;
}
} elseif (operator.equals("+")) {
// 加法运算
resultNum += getNumberFromText();
} elseif (operator.equals("-")) {
// 减法运算
resultNum -= getNumberFromText();
} elseif (operator.equals("*")) {
// 乘法运算
resultNum *= getNumberFromText();
} elseif (operator.equals("sqrt")) {
// 平方根运算
resultNum = Math.sqrt(resultNum);
} elseif (operator.equals("%")) {
// 百分号运算,除以100
resultNum = resultNum / 100;
} elseif (operator.equals("+/-")) {
// 正数负数运算
resultNum = resultNum * (-1);
} elseif (operator.equals("=")) {
// 赋值运算
resultNum = getNumberFromText();
}
if (operateValidFlag) {
// 双精度浮点数的运算
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultText.setText(String.valueOf(t1));
} else {
resultText.setText(String.valueOf(resultNum));
}
}
// 运算符等于用户按的按钮
operator = key;
firstDigit = true;
operateValidFlag = true;
}
/**
* 从结果文本框中获取数字
*
* return
*/
privatedouble getNumberFromText() {
double result = 0;
try {
result = Double.valueOf(resultText.getText()).doubleValue();
} catch (NumberFormatException e) {
}
return result;
}
publicstaticvoid main(String args[]) {
Calculator calculator1 = new Calculator();
calculator1.setVisible(true);
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
. .word..
展开阅读全文