JAVA课程设计简单的计算器(含代码)
更新时间:2024-04-12 20:59:01 阅读量: 综合文库 文档下载
Java程序课程设计任务书
一、主要任务与目标
1. 掌握java语言
2. 创建一个简单的计算器,具有简单人机交互界面,易于操作,便于进行数据之间的简单运算。 二、具体要求(包括技术要求等):
1)能够实现基本的加、减、乘、除四则运算及开方,乘方运算; 2)如输入数据时,出现错误,可以修改; 3)运算结果能正确显示;可以清零; 4)拥有登陆注册功能; 5)可以查看历史记录;
学习并掌握以下技术:Java、awt,swing等 熟练使用以下开发工具:Jdk,JCreate 等
实现计算器的上述的功能。
三、计划进度
1.12月28日—12月29日:搜集资料、查阅文献,确定选题 2.12月30日--12月31日:需求分析,系统设计,系统功能模块完善 3.1月1日--1月3日:编程实现系统、系统测试与修改 4.1月4日-- 1月6日:课程设计报告撰写 5.1月 7日-- 1月 8日:课程设计报告答辩
四、主要参考文献
[1] 耿祥义,张跃平.java大学实用教程(第二版).电子工业出版社.2008年5月
I
目 录
JAVA程序课程设计任务书 ........................................................................................................................ I 目 录 .......................................................................................................................................................... II 第1章 引言 ............................................................................................................................................... 1 1.1 课程设计内容 .................................................................................................................................. 1 1.2 任务分工 .......................................................................................................................................... 1 第2章 计算器定义 ................................................................................................................................... 2 2.1 计算器登陆注册界面概述 .............................................................................................................. 2
2.1.1 计算器功能概述 .............................................................................................................. 2 2.1.2 计算结果的储存与查看功能概述 .................................................................................. 2 2.2 本章小结 .......................................................................................................................................... 2 第3章 计算器的具体实现 ....................................................................................................................... 3 3.1界面设计 ........................................................................................................................................... 3
3.1.1用户登陆界面图 ............................................................................................................... 3 3.1.3 计算器主界面 .................................................................................................................. 8 3.2计算功能实现 ...................................................................................................................... 9 3.4 本章小结 ........................................................................................................................................ 14 第4章 结束语 ......................................................................................................................................... 14 致谢 ........................................................................................................................................................... 15 参考文献 ................................................................................................................................................... 15 附录 源代码 ............................................................................................................................................. 15 /****************引用数据包里的类与方法******************************/ .......................... 15
II
第1章 引言
1.1 课程设计内容
这是我组设计的计算器会有一些独特的功能,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个功能: (1)数据计算处理功能
点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算及三角函数,开方,乘方运算 ;如果输入有误时可以按C撤销后重新输入新数据,有储存修改键; (2)查询功能
查询功能可以迅速方便地查找到相应时段的执行的操作及结果。 (3)计算器使用权限功能
对个人的操作实现口令。用户在使用计算器前需通过登录界面登录,以保护计算器的数据安全。未有登录资料的先进行注册。 (4)时间显示功能
在计算器上显示现在的时间,便于把握时间;
1.2 任务分工
1
第2章 计算器定义
2.1 计算器登陆注册界面概述
这是对计算器使用权限功能的添加,这是以后软件开发的一个重点发展方向。用户在使用计算器前需通过登录界面登录,以保护计算器的数据安全和使用权限的设定。未有登录资料的必须先进行注册;
2.1.1 计算器功能概述
一个计算器如果只有数据计算处理功能,或者是点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算是远远不够的,这太普通了,因此加入三角函数,开方,乘方运算 ,并且如果输入有误时可以按C撤销后重新输入新数据,有储存修改键;最主要是加入了查询功能:查询功能可以迅速方便地查找到相应时段的执行的操作及结果。还有就是计算器使用权限的设定,即登陆注册界面,用户在使用计算器前需通过登录界面登录,以保护计算器的数据安全。未有登录资料的先进行注册。
2.1.2 计算结果的储存与查看功能概述
计算结果有了,但是一般的计算器不能查询之前进行的操作和结果,不得不重新计算,这就带来了不少麻烦,我组设计制作的计算器拥有直接查看历史记录的功能,还附有各个操作的时间,便于确认;
2.2 本章小结
这一章介绍了当前进销存管理系统应该具备的功能模块,并提供了市面上比较流行的进销存管理系统作为参考。在这一章中,我们可以了解什么是进销存管理系统,当前进销存管理系统的市场需求,还有一个进销存管理系统应该的开发目标。
2
第3章 计算器的具体实现
界面是系统之间最直接的交互界面,界面的友好性体现了软件设计的质量, 并在很大程度上决定了软件是否成功。
3.1界面设计 1.界面设计
界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式。
3.1.1用户登陆界面图
如图3.1.1和3.1.2所示
图3.1.1 用户登录模块框图
3
图3.1.2 用户登录界面
loginDialog与compareUserData函数的作用是用户登录界面创建和检测用户登的合法性,并确认用户输入了合法的登录名和口令。 部分代码:
private void loginDialog() { login = new JDialog(); login.setTitle(\登录\
login.setLayout(new FlowLayout()); login.add(new JLabel(\用户名:\
final JTextField name = new JTextField(10); login.add(name);
login.add(new JLabel(\密 码:\
final JPasswordField password = new JPasswordField(10); password.setEchoChar('*'); login.add(password);
JButton confirm = new JButton(\登录\
confirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (compareUserData(name.getText().trim(), new
String(password.getPassword()))) {
login.setVisible(false); f.setVisible(true);
} else {
JOptionPane.showMessageDialog(login, \用户名或密码错误!\
错误提示\
}
4
});
login.add(confirm);
final JDialog regDialog = new JDialog(login, \注册\ registerDialog(regDialog);
JButton register = new JButton(\注册\
register.addActionListener(new ActionListener() { });
login.add(register); login.setSize(200, 130); login.setResizable(false); login.setLocationRelativeTo(null); login.setVisible(true);
}
private boolean compareUserData(String name, String password) { true;
}
out.close();
try {
RandomAccessFile out = new RandomAccessFile(\String fname, fpassword = null;
while (out.getFilePointer() < out.length()) {
fname = out.readUTF(); out.readUTF();
fpassword = out.readUTF();
if (fname.equals(name) && fpassword.equals(password)) return
public void actionPerformed(ActionEvent e) { }
regDialog.setVisible(true); }
} catch (IOException e) {
5
}
return false;
e.printStackTrace();
}
3.1.2 用户注册界面 如图3.1.3所示
图3.1.3 用户注册界面
此registerDialog函数的作用就是注册界面的创建及信息的填写;
部分代码:
private void registerDialog(final JDialog regDialog) {
Box box1 = Box.createVerticalBox();
box1.add(new JLabel(\用户名:\box1.add(Box.createVerticalStrut(10)); box1.add(new JLabel(\性别:\box1.add(Box.createVerticalStrut(10));
box1.add(new JLabel(\密码:\box1.add(Box.createVerticalStrut(10));
box1.add(new JLabel(\确认密码:\
Box box2 = Box.createVerticalBox();
final JTextField nameTextField = new JTextField(10); box2.add(nameTextField);
6
box2.add(Box.createVerticalStrut(8));
final CheckboxGroup cbg = new CheckboxGroup(); Box box21 = Box.createHorizontalBox();
final Checkbox cb1 = new Checkbox(\男\
box21.add(cb1);
box21.add(new Checkbox(\女\ box2.add(box21);
box2.add(Box.createVerticalStrut(8));
final JPasswordField pass1 = new JPasswordField(10); box2.add(pass1);
box2.add(Box.createVerticalStrut(8));
final JPasswordField pass2 = new JPasswordField(10); box2.add(pass2);
Box baseBox = Box.createHorizontalBox(); baseBox.add(box1); baseBox.add(box2);
regDialog.setLayout(new FlowLayout()); regDialog.add(baseBox);
JButton confirm = new JButton(\确定\JButton cancel = new JButton(\取消\regDialog.add(confirm); regDialog.add(cancel); regDialog.setSize(200, 200); regDialog.setResizable(false); regDialog.setLocationRelativeTo(null);
confirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String sex = null;
7
if (cbg.getSelectedCheckbox() == cb1) sex = \男\else sex = \女\
if (saveUserData(nameTextField.getText().trim(), sex, else
JOptionPane.showMessageDialog(regDialog, \输入有误,请检查\错误
new String(pass1.getPassword()), new String(pass2.getPassword())))
regDialog.setVisible(false);
提示\
});
cancel.addActionListener(new ActionListener() { });
public void actionPerformed(ActionEvent arg0) { }
regDialog.setVisible(false); }
}
3.1.3 计算器主界面
图5.2 计算器主界面
为了能够在同一页面中管理多个页面,本系统的主界面采用了框架技术。
8
3.2计算功能实现
通过ActionEvent事件的处理进行计算功能的实现; 部分代码:
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand(); ………………………………(省略) } else if (s.equals(\
//如果是CE则清除文本框
tResult.setText(\
} else if (s.equals(\
if(!tResult.getText().trim().equals(\ //如果文本框中有内容
StringBuffer temp = new StringBuffer(tResult.getText().trim()); if(temp.length() > 1) {
tResult.setText(temp.delete(temp.length()-1, temp.length()).toString()); } else {
tResult.setText(\ } }
} else if (s.equals(\
//如果是C删除当前计算
tResult.setText(\ tf.setText(\
num1.replace(0, num1.length(), \ num2.replace(0, num2.length(), \ isExist = false; operate = ' ';
} else if (s.equals(\
tResult.setText(\ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = Math.PI / 180.0 * Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
String temp = tResult.getText().trim();
9
double dtemp = Math.PI / 180.0 * Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = Math.PI / 180.0 * Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
//如果是MC则清除缓冲区
String temp = \
memory.replace(0, memory.length(), temp); bM.setText(\
} else if (s.equals(\
//如果按键为MR则恢复缓冲区的数到文本框
tResult.setText(memory.toString()); } else if (s.equals(\
//如果按键为MS则将文本框的数存入缓冲区
String s1 = tResult.getText().trim();
memory.replace(0, memory.length(), s1); bM.setText(\ } else if (s.equals(\
//如果按键为MS则将文本框值与缓冲区的数相加但不显示结果
String temp1 = tResult.getText().trim();
double dtemp = Double.parseDouble(temp1); String temp2 = memory.toString(); if (temp2.length() == 0) temp2 = \ dtemp += Double.parseDouble(temp2); temp1 = String.valueOf(dtemp);
memory.replace(0, memory.length(), temp1); bM.setText(\ } else if (s.equals(\
//如果按键为1/x则将文本框中的数据为它的倒数
10
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp); tResult.setText(\ } else if (s.equals(\
//如果按键为sqrt则将文本框中的内容求平方根
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\ //如果按键为x^2则将文本框中的内容求平方 String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp) * Double.parseDouble(temp); tResult.setText(\
save(temp + \ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = -Double.parseDouble(temp); if (dtemp != 0) tResult.setText(\
} else if (s.equals(\ //加减乘除按键求结果 if (operate == ' ') { num1 = num1.replace(0, num1.length(), tResult.getText().trim()); isClear = true; tf.setText(num1.toString() + s); } else if (!isExist) { num2 = num2.replace(0, num2.length(), tResult.getText().trim()); String rlt = null; double a = Double.parseDouble(num1.toString().trim()); double b = Double.parseDouble(num2.toString().trim()); switch(operate) { case '+': rlt = \ case '-': rlt = \ case '*': rlt = \ case '/': rlt = \ } tResult.setText(rlt); tf.setText(\ num1.replace(0, num1.length(), rlt); isClear = true; }
11
operate = s.charAt(0); } else if (s.equals(\ //按键=显示结果 if (!isExist) num2 = num2.replace(0, num2.length(), tResult.getText().trim()); isExist = true; if (operate != ' ') { String rlt = null; double a = Double.parseDouble(num1.toString().trim()); double b = Double.parseDouble(num2.toString().trim()); switch(operate) { case '+': rlt = \ case '-': rlt = \ case '*': rlt = \ case '/': rlt = \ } tResult.setText(rlt); //存入文件 save(\ tf.setText(\ num1.replace(0, num1.length(), rlt); isClear = true; }
} else if(s.equals(\ //单击“小数点”的处理 //当前结果中不存在\
if(tResult.getText().trim().indexOf('.') == -1) { StringBuffer tmp = new StringBuffer(tResult.getText().trim()); tResult.setText(tmp.append(s).toString()); } } else { //数字键的处理 if (!Character.isDigit(tResult.getText().charAt(0))) tResult.setText(\ if (isClear) { isClear = false; tResult.setText(\ } if (isExist) { isExist = false; tf.setText(\ operate = ' '; tResult.setText(\
12
} StringBuffer tmp = new StringBuffer(tResult.getText().trim()); if (tmp.toString().equals(\ tResult.setText(tmp.append(s).toString()); }
}//end actionPerformed
3.3 计算结果的储存功能与查看功能
1.通过save函数来实现结果的储存功能; 部分代码:
private void save(String s) {
final SimpleDateFormat sdf = new SimpleDateFormat(\年MM月dd日 HH:mm:ss :\ String time = sdf.format(new Date(System.currentTimeMillis())); try { File file = new File(\ if (!file.exists()) file.createNewFile(); char[] ch = new char[(int)file.length()]; FileReader in = new FileReader(file); in.read(ch); in.close(); FileWriter out = new FileWriter(file); String tmp = new String(ch); out.write(tmp.trim() + System.getProperty(\ out.write((time + s).trim() + System.getProperty(\ out.close(); } catch(IOException e) { e.printStackTrace(); }
} 2.通过“查看”选项中的“历史记录”来查看历史结果,此showRecord函数的
作用就是把储存在data.txt中的历史记录显示在一面板中; 部分代码如下:
private void showRecord() {
JDialog dialog = new JDialog(f, \历史记录\JTextArea area = new JTextArea(); area.setEditable(false);
dialog.add(new JScrollPane(area)); dialog.setSize(640, 480);
dialog.setLocationRelativeTo(null); try { File file = new File(\ if (!file.exists()) file.createNewFile();
13
}
char[] ch = new char[(int)file.length()]; FileReader in = new FileReader(file); in.read(ch); in.close(); area.setText(new String(ch)); } catch(IOException e) { e.printStackTrace(); }
dialog.setVisible(true);
3.4 本章小结
本章介绍了计算器的具体实现和部分关键代码,其中包括用户登录界面创建和检测用户登的合法性所要用到的loginDialog与compareUserData函数,注册界面的设计与储存,主界面的框架设计和计算功能,储存与查看历史记录功能的具体实现。
第4章 结束语
在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。如何保存结果与如何进行登陆注册页面的添加及用户信息的储存,经过不断地尝试与调整,
此次课程设计让我们更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我们对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。
14
致谢
参考文献
[1] 耿祥义,张跃平.java大学实用教程(第二版).电子工业出版社.2008年5月
附录 源代码
/****************引用数据包里的类与方法******************************/ import java.awt.BorderLayout; import java.awt.Checkbox;
import java.awt.CheckboxGroup; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font;
import java.awt.GridLayout; import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.File;
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;
import java.io.RandomAccessFile; import java.text.SimpleDateFormat;
15
import java.util.Date;
import javax.swing.Box; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel;
import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.Timer;
/**********************Java计算器 主类*********************/ public class Calculator implements ActionListener { JFrame f;
JDialog login, addUser; JMenu mView; JMenu mEdit; JMenu mHelp;
JMenuItem mRecord; JMenuItem mCopy; JMenuItem mPaste; JMenuItem about; JTextField tResult, tf; JButton bNumber; JButton bOperator; JButton bOther; JButton bM; JButton Pi;
JButton sin, cos, tan; JButton log; char operate = ' '; //操作数
StringBuffer num1 = new StringBuffer(\ boolean isExist = false, isClear = false; //M系列
StringBuffer memory = new StringBuffer(20);
16
//系统剪切板
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
//Java计算器 构造器 public Calculator() {
f = new JFrame(\计算器\
Container contentPane = f.getContentPane();
final SimpleDateFormat sdf = new SimpleDateFormat(\当前时间 HH:mm:ss\ Timer time = new Timer(1000, new ActionListener() { public void actionPerformed(ActionEvent e) { f.setTitle(\计算器 \ } });
time.start();
/************************Java计算器 菜单的创建*****************************/ JMenuBar mBar = new JMenuBar(); mBar.setOpaque(true);
mView = new JMenu(\查看(V)\
mView.setMnemonic(KeyEvent.VK_V); mRecord = new JMenuItem(\历史纪录(H)\ mRecord.setMnemonic(KeyEvent.VK_H); mRecord.addActionListener(this); mView.add(mRecord);
mEdit = new JMenu(\编辑(E)\
mEdit.setMnemonic(KeyEvent.VK_E); mCopy = new JMenuItem(\复制(C)\ mCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
mCopy.addActionListener(this); mEdit.add(mCopy);
mPaste = new JMenuItem(\粘贴(P)\ mPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
mPaste.addActionListener(this); mEdit.add(mPaste);
mHelp = new JMenu(\帮助(H)\
mHelp.setMnemonic(KeyEvent.VK_H); about = new JMenuItem(\关于计算器\ about.addActionListener(this);
17
mHelp.add(about); mBar.add(mView); mBar.add(mEdit); mBar.add(mHelp); f.setJMenuBar(mBar);
contentPane.setLayout(new BorderLayout());
JPanel pTop = new JPanel();
pTop.setLayout(new BorderLayout()); tf = new JTextField();
tf.setHorizontalAlignment(JTextField.RIGHT); tf.setEditable(false);
pTop.add(tf, BorderLayout.NORTH); tResult = new JTextField(\
tResult.setFont(new Font(\黑体\ tResult.setHorizontalAlignment(JTextField.RIGHT); tResult.setEditable(false);
pTop.add(tResult, BorderLayout.CENTER); contentPane.add(pTop,BorderLayout.NORTH);
JPanel pBottom = new JPanel();
pBottom.setLayout(new BorderLayout());
JPanel pLeft = new JPanel();
pLeft.setLayout(new GridLayout(5,2,3,3)); bM = new JButton(\ bM.setEnabled(false); pLeft.add(bM);
/*************************Java计算器 功能键定义***************************/ Pi = new JButton(\ Pi.addActionListener(this); Pi.setForeground(Color.red); pLeft.add(Pi);
bOther = new JButton(\ bOther.addActionListener(this); bOther.setForeground(Color.red); pLeft.add(bOther);
sin = new JButton(\ sin.addActionListener(this); sin.setForeground(Color.red);
18
pLeft.add(sin);
bOther = new JButton(\ bOther.addActionListener(this); bOther.setForeground(Color.red); pLeft.add(bOther);
cos = new JButton(\ cos.addActionListener(this); cos.setForeground(Color.red); pLeft.add(cos);
bOther = new JButton(\ bOther.addActionListener(this); bOther.setForeground(Color.red); pLeft.add(bOther);
tan = new JButton(\ tan.addActionListener(this); tan.setForeground(Color.red); pLeft.add(tan);
bOther = new JButton(\ bOther.addActionListener(this); bOther.setForeground(Color.red); pLeft.add(bOther);
log = new JButton(\ log.addActionListener(this); log.setForeground(Color.red); pLeft.add(log);
pBottom.add(pLeft,BorderLayout.WEST);
JPanel pRight = new JPanel();
pRight.setLayout(new BorderLayout()); JPanel pUp = new JPanel();
pUp.setLayout(new GridLayout(1,3,3,0));
bOther = new JButton(\ bOther.addActionListener(this); bOther.setForeground(Color.red); pUp.add(bOther);
19
bOther = new JButton(\ bOther.addActionListener(this); bOther.setForeground(Color.red); pUp.add(bOther);
bOther = new JButton(\ bOther.addActionListener(this); bOther.setForeground(Color.red); pUp.add(bOther);
/***************************Java计算器 数字键盘区定义**************************/ JPanel pDown = new JPanel();
pDown.setLayout(new GridLayout(4,5,3,2));
bNumber = new JButton(\
bNumber.setMnemonic(KeyEvent.VK_7); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bOperator = new JButton(\
bOperator.setForeground(Color.red); bOperator.addActionListener(this); pDown.add(bOperator);
bOperator = new JButton(\ bOperator.addActionListener(this); bOperator.setForeground(Color.red); pDown.add(bOperator);
bNumber = new JButton(\
bNumber.setForeground(Color.blue);
20
bNumber.addActionListener(this); pDown.add(bNumber);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bOperator = new JButton(\
bOperator.setForeground(Color.red); bOperator.addActionListener(this); pDown.add(bOperator);
bOperator = new JButton(\ bOperator.setForeground(Color.red); bOperator.addActionListener(this); pDown.add(bOperator);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bOperator = new JButton(\
bOperator.setForeground(Color.red); bOperator.addActionListener(this); pDown.add(bOperator);
bOperator = new JButton(\
21
bOperator.setForeground(Color.red); bOperator.addActionListener(this); pDown.add(bOperator);
bNumber = new JButton(\
bNumber.setForeground(Color.blue); bNumber.addActionListener(this); pDown.add(bNumber);
bOperator = new JButton(\
bOperator.setForeground(Color.blue); bOperator.addActionListener(this); pDown.add(bOperator);
bOperator = new JButton(\
bOperator.setForeground(Color.blue); bOperator.addActionListener(this); pDown.add(bOperator);
bOperator = new JButton(\
bOperator.setForeground(Color.red); bOperator.addActionListener(this); pDown.add(bOperator);
bOperator = new JButton(\
bOperator.setForeground(Color.red); bOperator.addActionListener(this); pDown.add(bOperator);
pRight.add(pUp,BorderLayout.NORTH); pRight.add(pDown,BorderLayout.SOUTH); pBottom.add(pRight,BorderLayout.EAST);
contentPane.add(pBottom,BorderLayout.SOUTH); f.pack();
f.setResizable(false);
f.setLocationRelativeTo(null); //f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loginDialog(); }
/**************************登陆注册界**********************************/ private void loginDialog() {
22
login = new JDialog(); login.setTitle(\登录\
login.setLayout(new FlowLayout()); login.add(new JLabel(\用户名:\
final JTextField name = new JTextField(10); login.add(name);
login.add(new JLabel(\密 码:\
final JPasswordField password = new JPasswordField(10); password.setEchoChar('*'); login.add(password);
JButton confirm = new JButton(\登录\
confirm.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (compareUserData(name.getText().trim(), new String(password.getPassword()))) { login.setVisible(false); f.setVisible(true); } else { JOptionPane.showMessageDialog(login, \用户名或密码错误!\错误提示\ } } });
login.add(confirm);
final JDialog regDialog = new JDialog(login, \注册\ registerDialog(regDialog);
JButton register = new JButton(\注册\
register.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { regDialog.setVisible(true); } });
login.add(register); login.setSize(200, 130); login.setResizable(false);
login.setLocationRelativeTo(null); login.setVisible(true); }
/********************用户名密码的确认*******************************/ private boolean compareUserData(String name, String password) { try { RandomAccessFile out = new RandomAccessFile(\ String fname, fpassword = null;
23
while (out.getFilePointer() < out.length()) { fname = out.readUTF(); out.readUTF(); fpassword = out.readUTF(); if (fname.equals(name) && fpassword.equals(password)) return true; } out.close(); } catch (IOException e) { e.printStackTrace(); } return false; }
/**************************注册用户的信息************************************/ private void registerDialog(final JDialog regDialog) { Box box1 = Box.createVerticalBox(); box1.add(new JLabel(\用户名:\ box1.add(Box.createVerticalStrut(10)); box1.add(new JLabel(\性别:\ box1.add(Box.createVerticalStrut(10)); box1.add(new JLabel(\密码:\ box1.add(Box.createVerticalStrut(10)); box1.add(new JLabel(\确认密码:\ Box box2 = Box.createVerticalBox(); final JTextField nameTextField = new JTextField(10); box2.add(nameTextField); box2.add(Box.createVerticalStrut(8)); final CheckboxGroup cbg = new CheckboxGroup(); Box box21 = Box.createHorizontalBox(); final Checkbox cb1 = new Checkbox(\男\ box21.add(cb1);
box21.add(new Checkbox(\女\ box2.add(box21); box2.add(Box.createVerticalStrut(8)); final JPasswordField pass1 = new JPasswordField(10); box2.add(pass1); box2.add(Box.createVerticalStrut(8)); final JPasswordField pass2 = new JPasswordField(10); box2.add(pass2); Box baseBox = Box.createHorizontalBox(); baseBox.add(box1); baseBox.add(box2);
24
regDialog.setLayout(new FlowLayout()); regDialog.add(baseBox); JButton confirm = new JButton(\确定\ JButton cancel = new JButton(\取消\ regDialog.add(confirm); regDialog.add(cancel); regDialog.setSize(200, 200); regDialog.setResizable(false); regDialog.setLocationRelativeTo(null); confirm.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String sex = null; if (cbg.getSelectedCheckbox() == cb1) sex = \男\ else sex = \女\ if (saveUserData(nameTextField.getText().trim(), sex, new String(pass1.getPassword()), new String(pass2.getPassword()))) regDialog.setVisible(false); else JOptionPane.showMessageDialog(regDialog, \输入有误,请检查\错误提示\ JOptionPane.ERROR_MESSAGE); } }); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { regDialog.setVisible(false); } }); }
/********************************用户信息的储存***************************/ private boolean saveUserData(String name, String sex, String password1, String password2) { if (!password1.equals(password2)) return false; try { RandomAccessFile out = new RandomAccessFile(\ out.seek(out.length()); out.writeUTF(name); out.writeUTF(sex);
25
out.writeUTF(password1); out.close(); } catch (IOException e) { e.printStackTrace(); return false; } return true; }
/************************Java计算器 计算方法区***************************/ public void actionPerformed(ActionEvent e) { String s = e.getActionCommand();
if (s.equals(\历史纪录(H)\ showRecord();
} else if (s.equals(\复制(C)\ //将数字栏中的文本复制到剪切板中 String temp = tResult.getText().trim();
Transferable tmpText = new StringSelection(temp); clip.setContents(tmpText, null); } else if (s.equals(\粘贴(P)\ //讲剪切板中的数据复制到到数据栏中 if (clip != null && clip.isDataFlavorAvailable(DataFlavor.stringFlavor)) try { String tmp = (String)clip.getData(DataFlavor.stringFlavor); tResult.setText(\ } catch (UnsupportedFlavorException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); }
} else if (s.equals(\关于计算器\ JOptionPane.showMessageDialog(f, \寝室\\关于\JOptionPane.INFORMATION_MESSAGE); } else if (s.equals(\
//如果是CE则清除文本框
tResult.setText(\
} else if (s.equals(\
if(!tResult.getText().trim().equals(\ //如果文本框中有内容
StringBuffer temp = new StringBuffer(tResult.getText().trim());
26
if(temp.length() > 1) {
tResult.setText(temp.delete(temp.length()-1, temp.length()).toString()); } else {
tResult.setText(\ } }
} else if (s.equals(\
//如果是C删除当前计算
tResult.setText(\ tf.setText(\
num1.replace(0, num1.length(), \ num2.replace(0, num2.length(), \ isExist = false; operate = ' ';
} else if (s.equals(\
tResult.setText(\ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = Math.PI / 180.0 * Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = Math.PI / 180.0 * Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = Math.PI / 180.0 * Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\
//如果是MC则清除缓冲区
27
String temp = \
memory.replace(0, memory.length(), temp); bM.setText(\
} else if (s.equals(\
//如果按键为MR则恢复缓冲区的数到文本框
tResult.setText(memory.toString()); } else if (s.equals(\
//如果按键为MS则将文本框的数存入缓冲区
String s1 = tResult.getText().trim();
memory.replace(0, memory.length(), s1); bM.setText(\ } else if (s.equals(\
//如果按键为MS则将文本框值与缓冲区的数相加但不显示结果
String temp1 = tResult.getText().trim();
double dtemp = Double.parseDouble(temp1); String temp2 = memory.toString(); if (temp2.length() == 0) temp2 = \ dtemp += Double.parseDouble(temp2); temp1 = String.valueOf(dtemp);
memory.replace(0, memory.length(), temp1); bM.setText(\ } else if (s.equals(\
//如果按键为1/x则将文本框中的数据为它的倒数
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp); tResult.setText(\ } else if (s.equals(\
//如果按键为sqrt则将文本框中的内容求平方根
String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp); tResult.setText(\
save(\ } else if (s.equals(\ //如果按键为x^2则将文本框中的内容求平方 String temp = tResult.getText().trim();
double dtemp = Double.parseDouble(temp) * Double.parseDouble(temp); tResult.setText(\
save(temp + \
28
} else if (s.equals(\
String temp = tResult.getText().trim();
double dtemp = -Double.parseDouble(temp); if (dtemp != 0) tResult.setText(\
} else if (s.equals(\ //加减乘除按键求结果 if (operate == ' ') { num1 = num1.replace(0, num1.length(), tResult.getText().trim()); isClear = true; tf.setText(num1.toString() + s); } else if (!isExist) { num2 = num2.replace(0, num2.length(), tResult.getText().trim()); String rlt = null; double a = Double.parseDouble(num1.toString().trim()); double b = Double.parseDouble(num2.toString().trim()); switch(operate) { case '+': rlt = \ case '-': rlt = \ case '*': rlt = \ case '/': rlt = \ }
tResult.setText(rlt); tf.setText(\ num1.replace(0, num1.length(), rlt); isClear = true; } operate = s.charAt(0); } else if (s.equals(\ //按键=显示结果 if (!isExist) num2 = num2.replace(0, num2.length(), tResult.getText().trim()); isExist = true; if (operate != ' ') { String rlt = null; double a = Double.parseDouble(num1.toString().trim()); double b = Double.parseDouble(num2.toString().trim()); switch(operate) { case '+': rlt = \ case '-': rlt = \ case '*': rlt = \
29
case '/': rlt = \ }
tResult.setText(rlt); //存入文件 save(\ tf.setText(\ num1.replace(0, num1.length(), rlt); isClear = true; }
} else if(s.equals(\ //单击“小数点”的处理 //当前结果中不存在\
if(tResult.getText().trim().indexOf('.') == -1) { StringBuffer tmp = new StringBuffer(tResult.getText().trim()); tResult.setText(tmp.append(s).toString()); } } else { //数字键的处理 if (!Character.isDigit(tResult.getText().charAt(0))) tResult.setText(\ if (isClear) { isClear = false; tResult.setText(\ } if (isExist) { isExist = false; tf.setText(\ operate = ' '; tResult.setText(\ } StringBuffer tmp = new StringBuffer(tResult.getText().trim()); if (tmp.toString().equals(\ tResult.setText(tmp.append(s).toString()); }
}//end actionPerformed
/*************************历史记录面板*******************************/ private void showRecord() { JDialog dialog = new JDialog(f, \历史记录\
30
JTextArea area = new JTextArea(); area.setEditable(false); dialog.add(new JScrollPane(area)); dialog.setSize(640, 480); dialog.setLocationRelativeTo(null); try { File file = new File(\ if (!file.exists()) file.createNewFile(); char[] ch = new char[(int)file.length()]; FileReader in = new FileReader(file); in.read(ch); in.close(); area.setText(new String(ch)); } catch(IOException e) { e.printStackTrace(); } dialog.setVisible(true); }
/*******************将时间与结果保存到文件中***************************/ private void save(String s) {
final SimpleDateFormat sdf = new SimpleDateFormat(\年MM月dd日 HH:mm:ss :\ String time = sdf.format(new Date(System.currentTimeMillis()));//获取操作现在的时间 try { File file = new File(\ if (!file.exists()) file.createNewFile(); char[] ch = new char[(int)file.length()]; FileReader in = new FileReader(file); in.read(ch); in.close(); FileWriter out = new FileWriter(file); String tmp = new String(ch); out.write(tmp.trim() + System.getProperty(\ out.write((time + s).trim() + System.getProperty(\ out.close(); } catch(IOException e) { e.printStackTrace(); }
31
}
/********************Java主类方法*******************************/ public static void main(String[] args) { new Calculator(); } }
32
正在阅读:
JAVA课程设计简单的计算器(含代码)04-12
儿童慢性咳嗽的病因诊断及生活质量研究04-22
德耀中华观后感12-11
高速铁路路基防护工程施工作业指导书03-09
中国卫生巾市场竞争调查及前景发展策略分析报告2018-2023年(目录06-09
中考语文复习古诗文阅读与积累专题七文言文阅读应试技巧知识点1例题003-15
生化1005-13
《行政强制法》讲座06-03
机械制图新国标2011.3.2505-13
钢结构施工方案11-07
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 计算器
- 课程
- 代码
- 简单
- 设计
- JAVA