基本面向对象编程-计算机基本功能实现_

news2024/11/27 14:35:04

《C/S项目实训》实验报告

实验名称:  基本面向对象编程-计算机基本功能实现_    

一、实验目的

通过综合实践项目,理解Java 程序设计是如何体现面向对象编程基本思想,掌握OOP方法,掌握事件触发、消息响应机制。进一步巩固面向对象编程基本知识和技能,为C/S模式项目开发打下基础。

二、实验题目及要求

1.实验题目

运用GUI技术,事件触发、消息响应机制,实现一个完整综合设计项目“模拟基本的计算机程序”的设计开发开发。

2.实验要求

(1)客户体验

以组为单位,分别体验不同计算机类型的计算流程以及计算的结果展现方式,根据体验结果,总结体验感受,并根据个人用户需求,提出更人性化、功能更完善的系统,使得实验项目更接近实战,让学生理解一切项目都来源于应用,归于用户体验和使用。

三、实验步骤、结果(程序代码)

计算器的运行页面

源代码如下:

package cacu;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Mycacu extends JFrame{

     JTextField tfResult;

     //输入结果显示框

     JButton btNum[],btOper[],btEqual,btPoint;//设计输入按钮分为四种数字按钮,加减乘除操作按钮,等于号按钮, 小数点按钮.

     boolean isNum,isOper;//设计两个布尔型变量

     double firstNum,secondNum;//定义两个双精度的变量

     String operStr;

     public void init(){

          //定义各个功能输入按钮的内容

          tfResult=new JTextField();

          btNum=new JButton[10];

          for(int i=0;i<=9;i++)

          btNum[i]=new JButton(i+"");

          btOper=new JButton[4];

          btOper[0]=new JButton("+");

          btOper[1]=new JButton("-");

          btOper[2]=new JButton("*");

          btOper[3]=new JButton("/");

          btEqual=new JButton("=");

          btPoint=new JButton(".");

         

    

          JPanel panel=new JPanel();

          panel.setLayout(new GridLayout(4,4));//创建流失布局依次部署按钮

          panel.add(btNum[1]);

          panel.add(btNum[2]);

          panel.add(btNum[3]);

          panel.add(btOper[0]);

         

          panel.add(btNum[4]);

          panel.add(btNum[5]);

          panel.add(btNum[6]);

          panel.add(btOper[1]);

         

          panel.add(btNum[7]);

          panel.add(btNum[8]);

          panel.add(btNum[9]);

          panel.add(btOper[2]);

         

          panel.add(btPoint);

          panel.add(btNum[0]);

          panel.add(btEqual);

          panel.add(btOper[3]);

         

          //设计窗体的显示功能

          this.add(tfResult,"North");

          this.add(panel);

          this.setFont(new Font("宋体",Font.BOLD,18));

          this.setTitle("浩宇牌计算器");

          this.setSize(400,400);

          this.setVisible(true);

          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         

          //窗体居中显示

          // 得到显示器屏幕的宽、高

          int width = Toolkit.getDefaultToolkit().getScreenSize().width;

          int height = Toolkit.getDefaultToolkit().getScreenSize().height;

          // 得到窗体的宽、高

          int windowsWidth = this.getWidth();

          int windowsHeight = this.getHeight();

         

          this.setBounds((width - windowsWidth) / 2,(height - windowsHeight) / 2, windowsWidth, windowsHeight);

         

          //注册监听

          MyActLis mal=new MyActLis();

          for(int i=0;i<=9;i++){

               btNum[i].addActionListener(mal);

          }

          for(int i=0;i<4;i++){

               btOper[i].addActionListener(mal);

          }

          btEqual.addActionListener(mal);

         

     }

     public static void main(String[] args) {

          // TODO Auto-generated method stub

          new Mycacu().init();

     }

//监听器类设计

     class MyActLis implements ActionListener{

               public void actionPerformed(ActionEvent e) {

               // TODO Auto-generated method stub

               String s=e.getActionCommand();

          if(s.equals("0")||s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9")){

                    isOper=false;

                    if(isNum==false){

                         isNum=true;

                         tfResult.setText(s);

                    }else{

                         tfResult.setText(tfResult.getText()+s);

                    }

               }

               else if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){

                    isOper=true;

                    isNum=false;

                    firstNum=Double.parseDouble(tfResult.getText());

                    operStr=s;

                   

               }

               else if(s.equals("=")){

                    isNum=false;

                    isOper=false;

                   

                    if(operStr.equals("+")){

                         secondNum=Double.parseDouble(tfResult.getText());

                         tfResult.setText(firstNum+secondNum+"");

                    }

                    else if(operStr.equals("-")){

                         secondNum=Double.parseDouble(tfResult.getText());

                         tfResult.setText(firstNum-secondNum+"");

                    }

                    else if(operStr.equals("*")){

                         secondNum=Double.parseDouble(tfResult.getText());

                         tfResult.setText(firstNum*secondNum+"");

                    }

                    else if(operStr.equals("/")){

                         if(firstNum==0){

                              JOptionPane.showMessageDialog(Mycacu.this, "输入错误,除数不为0");

                              //优化1:数学规则除数不为0,当除数为0的时候弹出 框体提示   

                         }

                         else if(secondNum==0) {

                              secondNum=Double.parseDouble(tfResult.getText());

                              tfResult.setText(secondNum+"");

                              //优化2:当除数为0 的时候系统输出结果为0,而不是计算机当中的infinite

                             

                         }

                        

                         else {

                              secondNum=Double.parseDouble(tfResult.getText());

                              tfResult.setText(firstNum/secondNum+"");

                        

                         }

                        

                    }

                    else if(1>0){

                         firstNum=Double.parseDouble(tfResult.getText());

                         //取出第一个输入的数字,并以文本的方式来展现出来。

                         tfResult.setText(firstNum+"");

            

}

四、实验中的问题以及解决方案

1、

 

问题:在实际的计算过程中出现了,被除数为0,计算结果出错的情况。不符合实际的数学定理以及实际的应用的过程。

解决措施:利用else-if语句对其进行了多条的验证,判断第一个数字是否为0,要是为0,则弹出提示框,提示被除数不为0,达到了预期的效果;

解决后的运行结果截图:

 

2、问题:当只点击一个数字的时候,就点击等于号程序会在展示页面,没有反应,出现上图的类似的状况。

 

  解决:也是借用else-if语句,设置了一个我自己认为的永真条件,只输出和展示一个数字的结果

解决代码截图:

3、问题:当出现一个不为零的数除以0的时候运算结果不清楚,与实际的数学意义上的结果存在差异

 

 

解决:当进行除数运算的时候判断第二个数是否为0,要是为0则输出设定好的答案。

4.问题:当你只输入一个数字并点击运算符号,而不输入第二个数字的时候它会将当前的数字当为第二个数字

解决:正在解决当中ing~~~~~

  • 总结

通过此次的cs项目的编程试验,使我进一步了解和体会了事件响应机制的原理,自己在实际的编程过程中对于Java的基本知识,也有了更为深入的理解。对于功能不同的按键的归纳总结有了更为深入的了解,通过功能输入键的相同可以减少所编写的代码量,减少工作量,通过此次的实际编程对于java的基本知识,和实际的操作流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

T_SQL和SQL的区别

一. SQL Server和T-SQL的区别&#xff08;⭐T-SQL 包含了 SQL&#xff09;SQL Server是结构化查询语言,是目前关系型数据库管理系统中使用最广泛的查询语言T-SQL是标准SQL语言的扩展,是SQL Server的核心,在SQL的的基础上添加了变量,运算符,函数和流程控制等&#xff0c;Microso…

AutoCAD通过handle id选择实体

获得实体的handle id。注意是handle id 不是id&#xff0c;方法有2种&#xff1a;方法&#xff08;a&#xff09;&#xff1a;通过ArxDeg插件&#xff08;ObjectARX附带的源码编译得到&#xff1a;\samples\database\ARXDBG&#xff09;查找&#xff1a;此handle id本来就是16进…

【知识图谱论文】知识图谱嵌入的对比学习

文章题目&#xff1a; KGE-CL: Contrastive Learning of Knowledge Graph Embeddings时间&#xff1a;2021 摘要 学习知识图的嵌入在人工智能中至关重要&#xff0c;可以使各种下游应用受益&#xff0c;如推荐和问答。近年来&#xff0c;人们对知识图嵌入进行了大量的研究。然…

linux下安装java

文章目录linux下安装java1.下载对应的linux JDK包&#xff0c;这里使用jdk82.上传 jdk-8-linux-x64.tar.gz 到linux3.解压下载的jdk4.编辑配置文件&#xff0c;配置环境变量5.刷新配置文件6.最后检查JDK安装是否成功linux下安装java 阿里云弄的服务器centos7没有安装java&…

显示接口测试

背景需求两个显示器连接到一台PC&#xff0c;期望每台显示器可以单独显示&#xff0c;在一台显示器显示时&#xff0c;另外一台显示器同PC的连接断开&#xff0c;即系统下查看到连接状态为disconnected。同时在显示器上图形化显示当前显示器编号。如下图&#xff0c;期望当显示…

【pygame游戏】Python实现蔡徐坤大战篮球游戏【附源码】

前言 话说在前面&#xff0c;我不是小黑子~&#x1f60f; 本文章纯属技术交流~娱乐 前几天我获得了一个坤坤打篮球的游戏&#xff0c;也给大家分享一下吧~ 好吧&#xff0c;其实并不是这样的游戏&#xff0c;往下慢慢看吧。 准备工作 开发环境 Python版本&#xff1a;3.7.8 …

PhotoShop基础使用

49&#xff1a;图片分类 1&#xff1a;像素图 特点&#xff1a;放大后可见&#xff0c;右一个个色块&#xff08;像素&#xff09;组合而成。 优点&#xff1a;容量小&#xff0c;纯天然 JPG、JPEG、png、GIF 2&#xff1a;矢量图 面向对象图像 绘图图像 特点&#xff1a;不…

动态网站开发讲课笔记03:HTTP协议

文章目录零、本节学习目标一、HTTP概述&#xff08;一&#xff09;HTTP的概念1、HTTP的概念2、HTTP协议的特点&#xff08;1&#xff09;C/S模式&#xff08;2&#xff09;简单快速&#xff08;3&#xff09;灵活&#xff08;4&#xff09;无状态&#xff08;二&#xff09;HTT…

VS Code 配置 Python + 配置 Flask 环境及其虚拟环境

本文目录一、Python的下载二、拓展库安装三、编写案例运行调试四、部分使用优化五、配置 Flask 环境总结&#xff1a;一些小技巧1、找到原来安装过的python路径位置一、Python的下载 这里推荐使用国内源进行下载&#xff0c;国外源一般都比较慢。 跳转链接&#xff1a;https:…

redis 未授权访问漏洞

redis 未授权访问漏洞 目录 redis 未授权访问漏洞 漏洞描述 漏洞原因&#xff1a; 漏洞危害 漏洞复现&#xff1a; 漏洞复现 写webshell: 写计划任务&#xff1a;centos默认在/var/spool/cron 写ssh公钥实现ssh登录&#xff1a; 漏洞描述&#xff1a; Redis默认情况下…

UNet-肝脏肿瘤图像语义分割

目录 一. 语义分割 二. 数据集 三. 数据增强 图像数据处理步骤 CT图像增强方法 &#xff1a;windowing方法 直方图均衡化 获取掩膜图像深度 在肿瘤CT图中提取肿瘤 保存肿瘤数据 四. 数据加载 数据批处理 ​编辑​编辑 数据集加载 五. UNet神经网络模型搭建 单张图片…

【优化】性能优化Springboot 项目配置内置Tomcat使用Http11AprProtocol(AIO)

Springboot 项目配置内置tomcat使用Http11AprProtocol(AIO) Windows版本 1.下载Springboot对应版本tomcat包 下载地址 Apache Tomcat - Apache Tomcat 9 Software Downloads 找到bin目录下 tcnative-1.dll 文件 2 放到jdk的bin目录下 Linux版本 在Springboot中内嵌的Tomcat默…

实验三、数字PID控制器的设计

实验三、数字PID控制器的设计 --- 直流闭环调速实验 一、实验目的 1&#xff0e;理解晶闸管直流单闭环调速系统的数学模型和工作原理;. 2. 掌握PID控制器参数对控制系统性能的影响; 3. 能够运用MATLAB/Simulink软件对控制系统进行正确建模并对模块进行正确的参数设置; 4.…

如何获取或设置CANoe以太网网卡信息(GET篇)

CAPL提供了一系列函数用来操作CANoe网卡。但是,但是,首先需要明确一点,不管是获取网卡信息,还是设置网卡信息,只能访问CAPL程序所在的节点下的网卡,而不是节点所在的以太网通道下的所有网卡 关于第一张图中,Class节点下,有三个网卡:Ethernet1、VLAN 1.100、VLAN 1.200…

Malware Dev 02 - Windows SDDL 后门利用之 SCManager

写在最前 如果你是信息安全爱好者&#xff0c;如果你想考一些证书来提升自己的能力&#xff0c;那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里&#xff1a; https://discord.gg/9XvvuFq9Wb我拥有 OSCP&#xff0c;OSEP&#xff0c;OSWE&#xff0c;OSED&…

关于tf.gather函数batch_dims参数用法的理解

关于tf.gather函数batch_dims参数用法的理解0 前言1. 不考虑batch_dims2. 批处理(考虑batch_dims)2.1 batch_dims12.2 batch_dims02.3 batch_dims>22.4 batch_dims再降为12.5 再将axis降为12.6 batch_dims<02.7 batch_dims总结3. 补充4. 参数和返回值5. 其他相关论述6. 附…

3.2 http协议

一.HTTP协议1.概述是计算机网络的核心概念,是一种网络协议网络协议种类非常多,其中IP,TCP,UDP...其中还有一个应用非常广泛的协议.HTTPHTTP协议是日常开发中用的最多的协议HTTP处在TCP/IP五层协议栈的应用层HTTP在传输层是基于TCP的,(http/1 HTTP/2是基于TCP,最新版本的HTTP/3是…

交换机电口、光口、网络速率的基本概念总结

电口和光口千兆网 & 万兆网&#xff1a;POE&#xff1a;包转发率&#xff1a;背板带宽/交换容量&#xff1a;)电口和光口 电口&#xff1a; 电口也即RJ45口&#xff0c;插双绞线的端口&#xff08;网线&#xff09;&#xff0c;一般速率为10M或100M&#xff0c;即为百兆工…

[数据结构]:09-二分查找(顺序表指针实现形式)(C语言实现)

目录 前言 已完成内容 二分查找实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SearchFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容&#xff0c;除其中使用到C引用外&#xff0c;全为C语言代码。使用C引用主要…

2023年3月北京/上海/广州/深圳DAMA数据管理认证CDGA/CDGP

弘博创新是DAMA中国授权的数据治理人才培养基地&#xff0c;贴合市场需求定制教学体系&#xff0c;采用行业资深名师授课&#xff0c;理论与实践案例相结合&#xff0c;快速全面提升个人/企业数据治理专业知识与实践经验&#xff0c;通过考试还能获得数据专业领域证书。 DAMA认…