安农大18电子1班
Java实现计算器信计树,学生管理系统
2020-12-30
基于Idea2019的计算器设计
- 使用环境
Idea 2019,jdk1.8 - 计算机界面开发
- 创建计算机工程
略 - 使用的包
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField; - 使用的swing组件
使用Jpanel的BorderLayout - 创建”java软件实战”工程
File->New->Project…
首先写一个简单的界面包含以下27个符号
{“7”,“8”,“9”,"/",“sqrt”,“4”,“5”,“6”,"*","%",“1”,“2”,“3”,"-",“1/x”,“0”,"+/-",".","+","=",“MC”,“MR”,“MS”,“M+”,“Back”,“CE”,“C”};
界面使用BorderLayout布局,需要调用java.awt.BorderLayout分为north,left和center,center使用网格布局
5. 增加监听事件
使用JButton中的addActionListener对按钮实现监听
-
创建监听事件的外部处理函数和类
使用到的类:actionListener
实现功能:对键盘的结果的运算,将各种运算结果返回到text文本框内。 -
数字处理事件(±*/四则运算)
定义MyMath类,对BigDecimal对象进行计算
使用callMethod方法实现用if else语句实现对复杂按钮的处理判断
- 代码段:
package calframe;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CalFrame extends JFrame {
/**
* 计算器的外观设计
*/
private static final long serialVersionUID = 1L;
private final static int PRE_WIDTH = 500;
private final static int PRE_HEIGHT = 400;
private JTextField text = null;
private JButton button = null; //存储标记
private String[] nOp = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
private String[] mOp = {"MC","MR","MS","M+"};
private String[] rOp = {"Back","CE","C"};
private CalService service = new CalService();
public CalFrame(){
this.setTitle("计算器");
this.setSize(PRE_WIDTH, PRE_HEIGHT);
this.setLocationRelativeTo(null);
this.setResizable(false);
//添加底层
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(10,1));
panel.add(getTextField(), BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(PRE_WIDTH, PRE_HEIGHT));
//WEST
JButton[] mButton = getMButton();
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(5,1,0,5));
for(JButton b : mButton ){
panel1.add(b);
}
panel.add(panel1,BorderLayout.WEST);
//
JButton[] rButton = getRButton();
JPanel panel2 = new JPanel();
panel2.setLayout(new BorderLayout(1,5));
JPanel panel21 = new JPanel();
panel21.setLayout(new GridLayout(1,3,3,3));
for(JButton b : rButton){
panel21.add(b);
}
panel2.add(panel21,BorderLayout.NORTH);
JButton[] nButton = getNButton();
JPanel panel22 = new JPanel();
panel22.setLayout(new GridLayout(4,5,3,5));
for(JButton b : nButton){
panel22.add(b);
}
panel2.add(panel22,BorderLayout.CENTER);
panel.add(panel2,BorderLayout.CENTER);
this.add(panel);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
}
//返回显示框
private JTextField getTextField(){
text = new JTextField("0",10);
//text.setSize(480, 50);
return text;
}
//返回数字键
private JButton[] getNButton(){
String[] redButton = {"/","*","-","+","="};
JButton[] nbutton = new JButton[nOp.length];
for(int i = 0; i < this.nOp.length; i++){
JButton b = new JButton(this.nOp[i]);
b.addActionListener(getActionListener());
Arrays.sort(redButton);
if(Arrays.binarySearch(redButton, nOp[i]) >= 0){
b.setForeground(Color.red);
}else{
b.setForeground(Color.blue);
}
nbutton[i] = b;
}
return nbutton;
}
//返回操作健
private JButton[] getMButton(){
JButton[] mbutton = new JButton[mOp.length + 1];
mbutton[0] = getButton();
for(int i = 0; i < this.mOp.length; i++){
JButton b = new JButton(this.mOp[i]);
b.addActionListener(getActionListener());
b.setForeground(Color.red);
mbutton[i+1] = b;
}
return mbutton;
}
private JButton[] getRButton(){
JButton[] rbutton = new JButton[rOp.length];
for(int i = 0; i < this.rOp.length; i++){
JButton b = new JButton(this.rOp[i]);
b.addActionListener(getActionListener());
b.setForeground(Color.red);
rbutton[i] = b;
}
return rbutton;
}
private JButton getButton(){
button = new JButton();
return button;
}
private ActionListener getActionListener(){
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
String result = null;
try {
result = service.callMethod(cmd, text.getText());
} catch (Exception e2) {
System.out.println(e2.getMessage());
}
if(cmd.indexOf("MC") == 0){
button.setText("");
}else if(cmd.indexOf("M") == 0){
button.setText("M");
}
//显示计算结果
if(result != null){
text.setText(result);
}
}
};
return actionListener;
}
public static void main(String[] args) {
new CalFrame();
}
}
package calframe;
import java.math.BigDecimal;
public class MyMath {
/**
* 为一个double类型创建BigDecimal对象
*/
private static BigDecimal getBigDecimal(double number){
return new BigDecimal(number);
}
public static double add(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.add(second).doubleValue();
}
public static double subtract(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.subtract(second).doubleValue();
}
public static double multiply(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.multiply(second).doubleValue();
}
public static double divide(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.divide(second,3,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
package calframe;
public class CalService {
private boolean isSecondNum = false;
private String lastOp;
private String firstNum = “0”;
private String secondNum = “null”;
private double store;
private String numString = “0123456789.”;
private String opString = “±*/”;
public String catNum(String cmd, String text) {
String result = cmd;
// 如果text不等于0
if (!"0".equals(text)) {
if (isSecondNum) {
isSecondNum = false;
} else {
result = text + cmd;
}
}
if (result.indexOf(".") == 0) {
result = "0" + result;
}
return result;
}
public String setOp(String cmd, String text) {
this.lastOp = cmd;
this.firstNum = text;
this.secondNum = null;
this.isSecondNum = true;
return null;
}
public String cal(String text, boolean isPercent) {
double secondResult = secondNum == null ? Double.valueOf(text)
.doubleValue() : Double.valueOf(secondNum).doubleValue();
//除数为0
if(secondResult == 0 && this.lastOp.equals("/")){
return "0";
}
//有%
if(isPercent){
secondResult = MyMath.multiply(Double.valueOf(firstNum), MyMath.divide(secondResult, 100));
}
if(this.lastOp.equals("+")){
firstNum = String.valueOf(MyMath.add(Double.valueOf(firstNum),secondResult));
}else if (this.lastOp.equals("-")) {
firstNum = String.valueOf(MyMath.subtract(Double.valueOf(firstNum),secondResult));
}else if (this.lastOp.equals("*")) {
firstNum = String.valueOf(MyMath.multiply(Double.valueOf(firstNum),secondResult));
}else if (this.lastOp.equals("/")) {
firstNum = String.valueOf(MyMath.divide(Double.valueOf(firstNum),secondResult));
}
secondNum = secondNum == null ? text :secondNum;
this.isSecondNum = true;
return firstNum;
}
//求开方
public String sqrt(String text){
this.isSecondNum = true;
return String.valueOf(Math.sqrt(Double.valueOf(text)));
}
//求倒数
public String setReciprocal(String text){
if (text.equals("0")){
return text;
}else{
this.isSecondNum = true;
return String.valueOf(MyMath.divide(1, Double.valueOf(text)));
}
}
//存储
public String mCmd(String cmd,String text){
if(cmd.equals("M+")){
store = MyMath.add(store, Double.valueOf(text));
}else if (cmd.equals("MC")) {
store = 0;
}else if (cmd.equals("MR")) {
isSecondNum = true;
return String.valueOf(store);
}else if (cmd.equals("MS")) {
store = Double.valueOf(text).doubleValue();
}
return null;
}
public String backSpace(String text){
return text.equals("0") || text.equals("") ? "0" :text.substring(0,text.length()-1);
}
public String setNegative(String text){
if(text.indexOf("-") == 0){
return text.substring(1,text.length());
}else{
return "-" + text;
}
}
public String clearAll(){
this.firstNum = "0";
this.secondNum = null;
return this.firstNum;
}
public String clear(String text){
return "0";
}
public String callMethod(String cmd, String text){
if(cmd.equals("C")){
return clearAll();
}else if(cmd.equals("CE")){
return clear(text);
}else if (cmd.equals("Back")) {
return backSpace(text);
}else if (numString.indexOf(cmd) != -1) {
return catNum(cmd, text);
}else if (opString.indexOf(cmd) != -1) {
return setOp(cmd, text);
}else if (cmd.equals("+/-")) {
return setNegative(text); //设置正负号
}else if(cmd.equals("1/x")){
return setReciprocal(text);
}else if (cmd.equals("sqrt")) {
return sqrt(text);
}else if(cmd.equals("%")){
return cal(text, true);
}else if(cmd.equals("=")){
return cal(text, false);
}else {
return mCmd(cmd, text);
}
}
}
基于Idea2019的信计院树设计
3. 使用环境
Idea 2019,jdk1.8
4. 计算机界面开发
9. 创建计算机工程
略
10. 使用的包
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import javax.swing.;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.;
11. 使用的swing组件
使用Jpanel的BorderLayout
12. 创建”java软件实战”工程
-
创建项目文件xinjishu,创建包xinjitree,创建class文件setup登录界面,创建gettxtfile通过io流实现数据的缓存,创建treetu实现树型界面设计。
File->New->Project…2.首先写一个简单的界面包含一个按钮Button,JButton button = new JButton(“welcome setup computer science colleage system!”);在这里注意需要声明可视化setVisible为true
如下图所示
实现对当前button的关闭和打开下一个box的步骤
使用dispose函数实现对当前button的关闭
创建一个close函数
public static void close() {
frame.dispose();}
在监听器中添加关闭界面功能以及打开下一个树界面功能
-
对文件的读取的设计
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
使用while循环实现对txt文件中每一行的读取。 -
树的设计
使用到的类:addition
实现功能:对键盘的结果的运算,将各种运算结果返回到text文本框内。
如图所示: -
代码段
package xinjitree;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class gettxtfile{
public static String readFiles(String path) throws Exception {
BufferedReader read = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));
StringBuffer s = new StringBuffer();
String hang = read.readLine();
while (hang != null) {
s.append(hang);
s.append("\n");
hang = read.readLine();
}
read.close();
return s.toString();
}
}
package xinjitree;
import javax.swing.;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.;
public class treetu{
JFrame frame1 = new JFrame(“javatree”);
JTree shu;
DefaultMutableTreeNode root = new DefaultMutableTreeNode(“信息与计算机学院”);
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(“电子信息”);
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(“计算机工程”);
DefaultMutableTreeNode node3 = new DefaultMutableTreeNode(“网络工程”);
DefaultMutableTreeNode node4 = new DefaultMutableTreeNode(“通信工程”);
DefaultMutableTreeNode node5 = new DefaultMutableTreeNode(“18电子1班”);
DefaultMutableTreeNode node6 = new DefaultMutableTreeNode(“18电子2班”);
DefaultMutableTreeNode node7 = new DefaultMutableTreeNode(“18电子3班”);
DefaultMutableTreeNode node8 = new DefaultMutableTreeNode(“18计算机1班”);
DefaultMutableTreeNode node9 = new DefaultMutableTreeNode(“18计算机2班”);
DefaultMutableTreeNode node10 = new DefaultMutableTreeNode(“18计算机3班”);
DefaultMutableTreeNode node11 = new DefaultMutableTreeNode(“18网络1班”);
DefaultMutableTreeNode node12 = new DefaultMutableTreeNode(“18网络2班”);
DefaultMutableTreeNode node13 = new DefaultMutableTreeNode(“18通信1班”);
DefaultMutableTreeNode node14 = new DefaultMutableTreeNode(“18通信2班”);
JTextArea eventTxt = new JTextArea(5, 20);
public void addition() {
root.add(node1);
root.add(node2);
root.add(node3);
root.add(node4);
node1.add(node5);
node1.add(node6);
node1.add(node7);
node2.add(node8);
node2.add(node9);
node2.add(node10);
node3.add(node11);
node3.add(node12);
node4.add(node13);
node4.add(node14);
shu = new JTree(root);
TreeSelectionModel selectionModel = shu.getSelectionModel();
selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
eventTxt.setText("");
shu.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode panelpoint = (DefaultMutableTreeNode) shu.getLastSelectedPathComponent();
switch (panelpoint.toString()) {
case "18电子1班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子1班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18电子2班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子2班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18电子3班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子3班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18计算机1班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机1班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18计算机2班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机2班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18计算机3班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机3班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18网络1班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18网络1班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18网络2班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18网络2班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18通信1班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18通信1班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
case "18通信2班": {
try {
eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18通信2班.txt"));
} catch (Exception a) {
a.printStackTrace();
}
}
break;
}
}
});
Box box = Box.createHorizontalBox();
box.add(new JScrollPane(shu));
box.add(new JScrollPane(eventTxt));
frame1.add(box);
frame1.pack();
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setVisible(true);
}
}
package xinjitree;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
class setup {
static JFrame frame = new JFrame();
public static void main(String[] args) {
frame.setSize(600, 600);
JButton button = new JButton(“welcome setup computer science colleage system!”);
frame.add(button);
frame.setVisible(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();//关闭button
new treetu().addition();//开始打开下一个树界面
}
});
}
public static void close() {
frame.dispose();
}
}