成绩: __________

Java程序设计
工程实践

——简易计算器的设计

院、 系 计算机与软件学院 专业 信息安全
姓 名
指导教师

2022年 6 月 11 日

目录:
一、 设计简介 2
1、 设计背景 2
2、 开发工具及环境 2
(1)开发工具及介绍 2
(2)开发环境 2
二、 相关工作 2
1、设计基础 2
2、功能需求 2
3、系统设计 3
三、 设计原理 3
1、包和类的说明 3
2、简易计算器的源代码清单 3
四、 实现结果 6
1、程序界面 6
2、测试用例 7
3、运行结果 7
五、 设计心得 9

一、 设计简介
1、 设计背景
伴随着日益升高的物质生活水平以及日常生活中对基本的计算需求的提高。如今,网络快速发展,对算力的需求日益增大,计算的效率和性能和人们的生活紧密相关。对此,使用Java语言开发出一个为人们生活带来便利的计算器,以期带来对数据计算的提高。该系统实现了对数的加、减、乘、除的运算。
2、 开发工具及环境
(1)开发工具及介绍
Visual Studio Code(简称“VS Code” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器, [2] 可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。
(2)开发环境:window10系统、Visual Studio Code1.67.2、JDK17.0.2。
二、 相关工作
1、设计基础
使用Java Swing的GUI图形用户界面编程设计编写一个简易的计算器,加入事件监听器可以通过鼠标输入参加运算的数值和运算符,达到四则运算的目的。
2、功能需求
图形化用户界面,设计的简易计算器,用户通过鼠标依次输入参与计算的数值和运算符,进行四则运算,具体如下:
(1) 鼠标单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)累次可以设置参与运算的数值
(2) 鼠标单击“计算器”上的运算符按钮(+、-、*、/)选择运算符同时,保存之前的数,并情况输入栏,以便后续输入。
(3) 鼠标单击“计算器”上的“=”按钮,输出运算的结果。
(4) 鼠标单击“计算器”上的“clear”按钮,可以清除输入框内的数字。
3、系统设计
一个简易的计算器,主要由界面组件、组件事件监听器以及处理程序组成,如图2-1。实现其功能具体可分如下几个步骤:
(1) 创建Java项目(此版本为17.0.2的JDK)
(2) 创建框架、面板以及初始化
(3) 创建UI组件,并将其添加到相应面板中
(4) 注册监听器、添加事件响应逻辑
(5) 计算逻辑实现

三、 设计原理
1、包和类的说明
package start;\保存主要功能实现代码的包
package util;\保存常量的包
public class Const\自定义保存常量的类
public class calculator \自定义实现计算器主要功能的类
2、简易计算器的源代码清单
①导入组件

package start;
import javax.swing.*;
import util.Const;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

②创建Const类的部分代码

public class Const {public static final int FRAME_W = 300;//得到窗体中心点public static final int FRAME_H = 300;public static final int SCREEN_W = Toolkit.getDefaultToolkit().getScreenSize().width;public static final int SCREEN_H = Toolkit.getDefaultToolkit().getScreenSize().height;public static final int Frame_X = (SCREEN_W-FRAME_W)/2;public static final int Frame_Y = (SCREEN_H-FRAME_H)/2;public static final String TITLE = "计算器";
}
 ③calculator类中的部分代码
public class calculator extends JFrame implements ActionListener{/**********************北面的控件***********************/private JPanel jp_north = new JPanel();private JTextField input_text = new JTextField();private JButton c_Btn = new JButton("Clear");/**********************中间的控件***********************/private JPanel jp_center = new JPanel();public calculator() throws HeadlessException{//显示窗体this.init();this.addNorthComponent();this.addCenterButton();}//初始化的方法public void init(){this.setTitle(Const.TITLE);this.setSize(Const.FRAME_W, Const.FRAME_H);this.setLayout(new BorderLayout());this.setResizable(false);this.setLocation(Const.Frame_X,Const.Frame_Y);//设置框架在屏幕的位置this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭键}//主方法public static void main(String[] args) {calculator Calculator = new calculator();Calculator.setVisible(true);}}
④添加控件和按钮的代码
    //添加北面的控件public void addNorthComponent(){this.input_text.setPreferredSize(new Dimension(200,30));//设置文本框大小jp_north.add(input_text);//加文本框this.c_Btn.setForeground(Color.RED);//设置按钮颜色jp_north.add(c_Btn);//加按钮c_Btn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){input_text.setText("");}});this.add(jp_north,BorderLayout.NORTH);//将面板加到框架北侧}//添加中间按钮public void addCenterButton(){String btn_text = "123+456-789*0.=/";String regex = "[\\+\\-*/.=]";//正则表达式this.jp_center.setLayout(new GridLayout(4,4));//4*4的布局for(int i=0;i<16;i++){//在面板中加按钮String tmp  = btn_text.substring(i,i+1);JButton btn = new JButton();btn.setText(tmp);//给按钮加文字if(tmp.matches(regex)){//如果正则匹配btn.setFont(new Font("粗体",Font.BOLD,20));btn.setForeground(Color.RED);}btn.addActionListener(this);//添加按钮监听器jp_center.add(btn);}this.add(jp_center,BorderLayout.CENTER);//将面板加载框架布局的中间位置}
⑤添加事件监听器和逻辑运算代码
    private String firstInput = null;private String operator = null;//给按钮添加监听事件public void actionPerformed(ActionEvent e){String clickStr = e.getActionCommand();if(".0123456789".indexOf(clickStr)!=-1){//数字输入this.input_text.setText(input_text.getText() + clickStr);this.input_text.setHorizontalAlignment(JTextField.RIGHT);}else if(clickStr.matches("[\\+\\-*/]{1}")){//运算符输入operator = clickStr;firstInput = this.input_text.getText();this.input_text.setText("");}else if(clickStr.equals("=")){//等号输入Double a = Double.valueOf(firstInput);Double b = Double.valueOf(this.input_text.getText());Double res = null;switch (operator){//运算主体case "+":res = a + b;break;case "-":res = a - b;break;case "*":res = a * b;break;case "/":if(b!=0){res = a/b;}else{this.input_text.setText("除数不能为0!请清空!");}break;}this.input_text.setText(res.toString());}}

四、 实现结果
1、程序界面
简易计算器运行界面,如图3-1所示。

图3-1 计算器运行界面
2、测试用例
(1)清除当前输入的数值,例如:计算7+23,输出结果为30.0。
(2)清除当前输入的数值,例如:计算7-23,输出结果为-16.0。
(3)清除当前输入的数值,例如:计算7*23,输出结果为161.0。
(4)清除当前输入的数值,例如:计算7/23,输出结果为0.30434782608695654。
3、运行结果
(1)输入7和23,进行加法运算,如图3-2、图3-3和图3-4所示。下面只输出结果。

图3-2 输入 7

图 3-3 输入 23

图3-4 结果显示为 30.0

(2)输入7和23,进行减法运算,如图3-5所示。

图3-5 “7-23”结果显示为 -16.0

(3)输入7和23,进行乘法运算,如图3-6所示

图3-6 “7*3”结果显示为161.9

(4)输入7和23,进行除法运算,如图3-7所示。

图3-7“7/23”结果显示为0.30434782608695654
五、 设计心得
从我的角度出发,课设的目的在于使学生养成综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生在实际场景下能力的具体训练和考察过程。伴随着科学技术的快速发展,当今计算机的应用在生活中可以说是处处都有。
在课程设计过程中我遇到许多的问题,通过网上的查询,和同学的热心帮助,最终我成功的完成了这次课程设计。在这其中我充分理解了Java面对对象的特性,并体会到Java与C\C++语言的不同之处。只有多动手,经常编写程序,才能发现我们学习上的缺陷和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。通过本课程的设计,我了解到理论与实践的结合非常重要,简单的理论知识远远不够,只有将所获得的理论知识与实践相结合,从理论中得出结论,才能真正服务于社会,发展我的实践技能和能力。 这次编写的程序大部分功能是通过调用各包中的方法和类来实现的,这也让我充分理解了包和类之间的关系。
由于这次编写的程序是我初次使用Java编写,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。此次课程设计让我们更了解Java中的图形用户界面和它的编程方式。在完成课题的过程中,查阅了很多关于Java语言开发的资料,不断地充实了自己,学习到了很多以前没有学习到的知识,收获颇多。Java 计算器设计使得我们对所学的课程有了更为深刻的认识,使得知识得到了巩固和提高。
今后,我将会继续努力;我相信,只要有信心,有毅力,人永远不会被打败!
完整源码

package util;
import java.awt.*;public class Const {public static final int FRAME_W = 300;//得到窗体中心点public static final int FRAME_H = 300;public static final int SCREEN_W = Toolkit.getDefaultToolkit().getScreenSize().width;public static final int SCREEN_H = Toolkit.getDefaultToolkit().getScreenSize().height;public static final int Frame_X = (SCREEN_W-FRAME_W)/2;public static final int Frame_Y = (SCREEN_H-FRAME_H)/2;public static final String TITLE = "计算器";
}
package start;
import javax.swing.*;
import util.Const;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class calculator extends JFrame implements ActionListener{/**********************北面的控件***********************/private JPanel jp_north = new JPanel();private JTextField input_text = new JTextField();private JButton c_Btn = new JButton("Clear");/**********************中间的控件***********************/private JPanel jp_center = new JPanel();public calculator() throws HeadlessException{//显示窗体this.init();this.addNorthComponent();this.addCenterButton();}//初始化的方法public void init(){this.setTitle(Const.TITLE);this.setSize(Const.FRAME_W, Const.FRAME_H);this.setLayout(new BorderLayout());this.setResizable(false);this.setLocation(Const.Frame_X,Const.Frame_Y);//设置框架在屏幕的位置this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭键}//添加北面的控件public void addNorthComponent(){this.input_text.setPreferredSize(new Dimension(200,30));//设置文本框大小jp_north.add(input_text);//加文本框this.c_Btn.setForeground(Color.RED);//设置按钮颜色jp_north.add(c_Btn);//加按钮c_Btn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){input_text.setText("");}});this.add(jp_north,BorderLayout.NORTH);//将面板加到框架北侧}//添加中间按钮public void addCenterButton(){String btn_text = "123+456-789*0.=/";String regex = "[\\+\\-*/.=]";//正则表达式this.jp_center.setLayout(new GridLayout(4,4));//4*4的布局for(int i=0;i<16;i++){//在面板中加按钮String tmp  = btn_text.substring(i,i+1);JButton btn = new JButton();btn.setText(tmp);//给按钮加文字if(tmp.matches(regex)){//如果正则匹配btn.setFont(new Font("粗体",Font.BOLD,20));btn.setForeground(Color.RED);}btn.addActionListener(this);//添加按钮监听器jp_center.add(btn);}this.add(jp_center,BorderLayout.CENTER);//将面板加载框架布局的中间位置}private String firstInput = null;private String operator = null;//给按钮添加监听事件public void actionPerformed(ActionEvent e){String clickStr = e.getActionCommand();if(".0123456789".indexOf(clickStr)!=-1){//数字输入this.input_text.setText(input_text.getText() + clickStr);this.input_text.setHorizontalAlignment(JTextField.RIGHT);}else if(clickStr.matches("[\\+\\-*/]{1}")){//运算符输入operator = clickStr;firstInput = this.input_text.getText();this.input_text.setText("");}else if(clickStr.equals("=")){//等号输入Double a = Double.valueOf(firstInput);Double b = Double.valueOf(this.input_text.getText());Double res = null;switch (operator){//运算主体case "+":res = a + b;break;case "-":res = a - b;break;case "*":res = a * b;break;case "/":if(b!=0){res = a/b;}else{this.input_text.setText("除数不能为0!请清空!");}break;}this.input_text.setText(res.toString());}}//主方法public static void main(String[] args) {calculator Calculator = new calculator();Calculator.setVisible(true);}}

Java课设-百行代码实现简易计算器相关推荐

  1. 100套java课设源码参考/毕设源码代码参考

    引言:本人是一个Java 开发者,喜欢分享Java课设源码和代码,用于课程设计或者作业学习参考噢,开发一些有技术含量的Java web源码,主要的技术有JSP+Servlet,SSM/SpringBo ...

  2. python写百行代码可运行_56 岁潘石屹学俩月 Python ,写下百行代码

    原标题:56 岁潘石屹学俩月 Python ,写下百行代码 By 超神经 内容导读:跨界王潘石屹在近期迷上了编程,不仅高调宣布学习 Python,拜老师,还隔三差五晒出自己的「编程课作业」,和网友进行 ...

  3. JAVA课设:电子英汉词典(附源码+调试)

    JAVA课设:电子英汉词典 电子英汉词典功能概述 整体要求:用图形用户界面实现,能够编辑词典库中的信息,能够实现英译汉,汉译英.(要考虑一词多义) 具体实现:1.用图形用户界面实现:2.能够实现英译汉 ...

  4. java 课设 商品库存管理系统

    比较辛苦的java课设!写了蛮久的,战斗了好多个通宵. 下载https://download.csdn.net/download/qq_37871063/10297290 入门:JAVAFX+MVC+ ...

  5. JAVA课设单人版五子棋小游戏

    内容介绍:该程序为Java课设的单人版五子棋小游戏,通过eclipse编辑,实现了动作事件的监听与处理,以及JavaSwing的界面编程.  编辑排行榜,包含局数,结果,步数,以及"关于我们 ...

  6. Java课设——ArxivHelper

    项目地址https://github.com/PKUCSS/arxiv-helper How to run运行方式:java -jar arxiv-helper.jar Tips:We use pyi ...

  7. Java课设:火车售票系统2.0

    文章目录 注意 系统概述 数据库表的变化 类名变化 运行 管理员登陆 管理员界面 录入车次 修改车次信息 查看所有车次 删除车次 管理员用户资料查询 注意 火车售票系统等java课设已经停止更新了,博 ...

  8. js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输

    百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...

  9. 鱼佬:百行代码入手数据挖掘赛!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:鱼佬,武汉大学,Datawhale成员 本实践以科大讯飞xData ...

最新文章

  1. 在MVC框架上定时执行某种操作
  2. 世界互联网大会上发布的《中国互联网发展报告2020》显示——中国人工智能专利申请数跃居世界第一...
  3. 使用juery在iframe内部访问父页面元素
  4. 【Flask】Jinja2之模板中使用url_for
  5. IDEA全文搜索排除无用的文件夹
  6. Asterisk针对Mysql的extconfig.conf配置
  7. sdut 取数字问题(深搜,动态规划)
  8. linux ubuntu安装 mono,在 Ubuntu Server 上安装配置 Mono 生产环境
  9. 拿不出双十一成绩单,垂直电商何以安身立命?
  10. 我的Latex中文报告模板
  11. (转载)基于STM32的多节锂电池管理系统的设计
  12. 用计算机求算术平方根的按键顺序,6.1 .2 用计算器求算术平方根及算术平方根的应用...
  13. C#中接口IFormattable/IFormatProvider/ICustomFormatter的区别与用法
  14. css div背景图大小,divcss如何改变背景图片大小
  15. OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体
  16. 1134: 字符串转换 C语言
  17. Verilog中任务task的使用
  18. 【存储】GPFS简介及搭建
  19. 5 坐标变换与视觉测量
  20. [总结]读取应用程序/类库配置文件(比如***.dll.config)的方法小结

热门文章

  1. c语言编程动漫形状代码,发个C代码(简单动画演示)
  2. Verilog使用 $sformatf实现字符串拼接
  3. 链接orientdb的图形数据库_OrientDB数据库(ruby语言操作)
  4. 关于 “IP地址“ 的学习笔记
  5. eBPF监控工具bcc系列八BPF C
  6. 人大金仓数据库的单表查询
  7. 一万三的手机,十四万人预约,我才知道,原谅不是经济不行,是我不行
  8. 十八种方法提升淘宝店流量
  9. 软考知识点梳理--人际沟通风格
  10. html边框渐变颜色代码,CSS3 七彩渐变色边框效果