基本面向对象编程-计算机基本功能实现_
《C/S项目实训》实验报告
实验名称: 基本面向对象编程-计算机基本功能实现_
一、实验目的
通过综合实践项目,理解Java 程序设计是如何体现面向对象编程基本思想,掌握OOP方法,掌握事件触发、消息响应机制。进一步巩固面向对象编程基本知识和技能,为C/S模式项目开发打下基础。
二、实验题目及要求
运用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的基本知识,和实际的操作流程。
相关文章:

基本面向对象编程-计算机基本功能实现_
《C/S项目实训》实验报告 实验名称: 基本面向对象编程-计算机基本功能实现_ 一、实验目的 通过综合实践项目,理解Java 程序设计是如何体现面向对象编程基本思想,掌握OOP方法,掌握事件触发、消息响应机制。进一步巩固面向对…...

C++面向对象之多态性
文章目录C面向对象之多态性1.静态多态2.动态多态3.多态的好处3.1使用方法4.纯虚函数5.虚析构与纯虚析构5.1问题5.2解决6.其他知识点7.代码8.测试结果8.1父类中无虚函数,父类的指针指向子类对象,将调用父类中的函数,无法调用子类中的重写函数&…...

Android性能优化系列篇:弱网优化
弱网优化1、Serializable原理通常我们使用Java的序列化与反序列化时,只需要将类实现Serializable接口即可,剩下的事情就交给了jdk。今天我们就来探究一下,Java序列化是怎么实现的,然后探讨一下几个常见的集合类,他们是…...
Mysql 插入大批量数据调优方法
Mysql 插入大批量数据调优方法[toc]1、多线程插入(单表)在数据里做插入操作的时候,整体时间的分配是这样的:链接耗时 (30%)发送query到服务器 (20%)解析query (20%&#…...
matlab基础
系列文章目录 文章目录系列文章目录前言1 基本用法总结基础语法桌面管理矩阵均匀间隔矢量矩阵创建矩阵索引前言 介绍了matlab的基本用法 1 基本用法 >> save filename.mat % 将当前工作区的所有变量保存为mat文件 >> load filename.mat % 加载文件>> loa…...

自动化测试——多窗口切换和切换frame
这里写目录标题一、多窗口切换1、base.py:公共代码2、切换句柄的方式1,通过for循环3、切换句柄的方式2,通过索引切换4、源代码二、frame窗口1、什么是frame?2、Frame 分类3、判断要定位的元素在不在frame中两种方式方式一:鼠标选…...

C#中,Elasticsearch.Net判断空字符串
之前有个业务需求,由于最开始存储到es里的,是默认空字符串。 后面程序取数据时,发现需要取空字符串的数据时,不好取出来。 字符串的字段如图: 实际数据如图: 我用的是C#语言,使用的是Elastic…...
23种设计模式-适配器模式
适配器模式(Adapter Pattern)是一种常用的设计模式,它可以将不兼容的接口转换成可兼容的接口,使得原本不能一起工作的类可以协同工作。 在Java中,适配器模式一般有两种实现方式,即类适配器模式和对象适配器…...
深入理解this指向问题
this指向 在运行时绑定,所以this和函数的调用方式和调用的位置有关,和定义的位置没关系 绑定规则 默认绑定(非严格模式下this指向全局变量,在严格模式下函数内的this指向undefined) 独立函数调用,没有主题 …...
事业单位联考(综合应用A类)典型例题教案
【联考A类】根据材料2,请你概括C市B县旅游质监所投诉处理科小王在接待投诉时存在的主要问题,并指出问题的具体表现。(35分)要求:准确、全面、分条作答。字数在300字以内。材料2:某日,几位游客家…...

frp内网穿透实验
Frp (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站, 帮你实现 公网 ←→ FRP(服务器) ←→ 内网…...

认识JavaScript中的防抖函数
👨 作者简介:大家好,我是Taro,前端领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录前言一、防抖是什么?1. deounce-v1的基本…...

macOS 13.3 Beta 2 (22E5230e)With OpenCore 0.8.9正式版 and winPE双引导分区原版镜像
原文地址:http://www.imacosx.cn/112340.html,转载需注明出处镜像特点完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要…...
JetPack—DataStore核心原理与使用
简介 首先,DataStore是Jetpack一部分,是一种数据存储解决方案。其次,DataStore使用协程及flow以异步、一致的方式实现数据的存储。最后是DataStore的实现,分为Preferences DataStore和Proto DataStore:Preferences Da…...

热烈祝贺|酒事有鲤盛装亮相2023中国(山东)精酿啤酒产业发展创新论坛暨展览会
酒事有鲤(济南)品牌管理有限公司是一家致力于将世界顶级精酿啤酒技术和理念与“ 在地”文化有机融合,做世界认 可的多元化好啤酒,通过精致 舒适的家门口酒馆,让啤酒的 世界观更为完整。 中国生物发酵产业协会联合齐鲁…...

深度强化学习DLR
1 强化学习基础知识 强化学习过程:⾸先环境(Env)会给智能体(Agent)⼀个状态(State),智能体接收到环境给的观测值之后会做出⼀个动作(Action),环境接收到智能体给的动作之后会做出⼀系列的反应,例如对这个动作给予⼀个奖励(Reward…...

Android Handler机制(四) Message源码分析
一. 简介 接上一篇文章:Android Handler机制(三) Looper源码分析 ,我们来继续分析一下Message源码 这一系列文章都是为了深入理解Handler机制. Message 作为消息传递的载体,源码主要分为以下 几个部分: 1. 操作数据相关,类似 getter()和 setter()这种…...

【Git】git命令(全)
Git1、本地操作2、版本管理3、远端仓库4、分支管理5、缓存stash6、遗留rebase7、标签管理8、解决冲突9、参考教程10、示例代码1、本地操作 Linux安装git:yum install git查看git版本 git version查看git设置 git config --list设置git属性 git config --global初始…...
软考论文-成本管理(1)
成本管理 1.成本管理的主要内容? 规划成本:制定一个成本管理的计划。估算成本:根据项目范围说明书,项目管理计划和wbs等文档,采用xxx方法进行估算成本成本预算:可以算工作包的费用,制定预算和…...

Java 多线程 --- 锁的概念和类型划分
Java 多线程 --- 锁的概念和类型划分锁的概念乐观锁与悲观锁公平锁与非公平锁什么是可重入锁独占锁与共享锁轻量级锁和重量级锁自旋锁 (Spinlock)锁的概念 锁可以将多个线程对共享数据的并发访问转换为串行访问, 这样一个共享数据一次只能被一个线程访问, 该线程访问结束后其他…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...