Java实现机考程序界面

机考界面如下(单选题),上方是题目状态,下方是题目,1/5/1是已做题目数量、总共题目数量和答对题目数量。

再看一下多选题的界面。

判断题的界面。

回答正确时的反馈,会给出用时。

回答错误时的反馈,会显示正确答案和用时。

作答结束时会给出总成绩。

 Question.java 题库

import java.util.ArrayList;
import java.util.List;class SingleChoice {public String question, optionA, optionB, optionC, optionD, correctAnswer;public SingleChoice(String question, String optionA, String optionB, String optionC, String optionD, String correctAnswer) {this.question = question;this.optionA = optionA;this.optionB = optionB;this.optionC = optionC;this.optionD = optionD;this.correctAnswer = correctAnswer;}
}class MultipleChoice {public String question, optionA, optionB, optionC, optionD, correctAnswer;public MultipleChoice(String question, String optionA, String optionB, String optionC, String optionD, String correctAnswer) {this.question = question;this.optionA = optionA;this.optionB = optionB;this.optionC = optionC;this.optionD = optionD;this.correctAnswer = correctAnswer;}
}class TrueOrFalse {public String question;public boolean correctAnswer;public TrueOrFalse(String question, boolean correctAnswer) {this.question = question;this.correctAnswer = correctAnswer;}
}public class Questions {public List<SingleChoice> singleChoices = new ArrayList<>();public List<MultipleChoice> multipleChoices = new ArrayList<>();public List<TrueOrFalse> trueOrFalse = new ArrayList<>();public Questions() {// 添加单选题singleChoices.add(new SingleChoice("Java中,下列哪个关键字用于声明一个类?", "A. int", "B. float", "C. class", "D. void", "C"));singleChoices.add(new SingleChoice("什么是面向对象编程的基本特征之一?", "A. 继承", "B. 多态", "C. 封装", "D. 以上皆是", "D"));singleChoices.add(new SingleChoice("在Java中,如何通过继承实现类之间的关系?", "A. extends关键字", "B. implements关键字", "C. super关键字", "D. this关键字", "A"));singleChoices.add(new SingleChoice("以下哪个关键字用于在Java中创建接口?", "A. interface", "B. class", "C. abstract", "D. extends", "A"));singleChoices.add(new SingleChoice("在Java中,下列哪个关键字用于控制程序的执行流程?", "A. if", "B. else", "C. switch", "D. for", "C"));singleChoices.add(new SingleChoice("在Java中,下列哪个关键字用于声明一个常量?", "A. const", "B. final", "C. static", "D. var", "B"));singleChoices.add(new SingleChoice("以下哪个不是Java的基本数据类型?", "A. int", "B. boolean", "C. double", "D. string", "D"));singleChoices.add(new SingleChoice("在Java中,哪个关键字用于创建一个新的对象?", "A. new", "B. create", "C. make", "D. build", "A"));singleChoices.add(new SingleChoice("以下哪个选项可以用于创建多线程?", "A. 哈希", "B. Thread类", "C. Main方法", "D. ArrayList类", "B"));singleChoices.add(new SingleChoice("以下哪个关键字可以用于定义抽象类?", "A. abstract", "B. interface", "C. static", "D. final", "A"));// 添加多选题multipleChoices.add(new MultipleChoice("下列哪些选项是Java的基本数据类型?", "A. boolean", "B. string", "C. integer", "D. double", "AD"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的流控制语句?", "A. if-else", "B. for", "C. while", "D. function", "ABC"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的包装类?", "A. Integer", "B. Float", "C. Long", "D. Char", "ABC"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的集合类?", "A. ArrayList", "B. LinkedList", "C. HashSet", "D. Map", "ABCD"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的线程状态?", "A. NEW", "B. RUNNING", "C. WAITING", "D. DEAD", "ABCD"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的线程同步方法?", "A. wait()", "B. notify()", "C. synchronized()", "D. interrupt()", "ABC"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的异常类型?", "A. Checked Exception", "B. Unchecked Exception", "C. Error", "D. Throwable", "ABCD"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的注解类型?", "A. @Override", "B. @Deprecated", "C. @SuppressWarnings", "D. @Inject", "ABCD"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的IO流类型?", "A. FileInputStream", "B. InputStreamReader", "C. OutputStream", "D. Socket", "ABCD"));multipleChoices.add(new MultipleChoice("下列哪些选项是Java中的网络通信协议?", "A. TCP", "B. UDP", "C. FTP", "D. HTTP", "ABCD"));//添加判断题trueOrFalse.add(new TrueOrFalse("Java是一种面向对象的编程语言", true));trueOrFalse.add(new TrueOrFalse("Java中的final关键字用于标识一个类不可被继承", true));trueOrFalse.add(new TrueOrFalse("Java中的String是基本数据类型", false));trueOrFalse.add(new TrueOrFalse("Java中的数组长度可以动态改变", false));trueOrFalse.add(new TrueOrFalse("Java中的interface可以实现多重继承", true));trueOrFalse.add(new TrueOrFalse("Java中的double类型比float类型精度更高", true));trueOrFalse.add(new TrueOrFalse("Java中的HashMap是线程安全的", false));trueOrFalse.add(new TrueOrFalse("Java中的try块必须和catch或finally块配合使用", true));trueOrFalse.add(new TrueOrFalse("Java中的抽象类可以有构造方法", true));trueOrFalse.add(new TrueOrFalse("Java中的静态方法可以被子类重写", false));}
}

JavaExam.java 主界面

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.util.Collections;
import java.util.List;public class JavaExam extends JFrame {private final JLabel labelQuestion;private final JRadioButton radioButtonA, radioButtonB, radioButtonC, radioButtonD;private final JCheckBox checkBoxA, checkBoxB, checkBoxC, checkBoxD;private final ButtonGroup buttonGroup;private final JButton buttonSubmit;private final JLabel labelSingleChoiceNum, labelMultipleChoiceNum, labelTrueOrFalseNum, labelScore, labelTime;private int singleChoiceCount = 0, multipleChoiceCount = 0, trueOrFalseCount = 0;private int singleChoiceCorrectCount = 0, multipleChoiceCorrectCount = 0, trueOrFalseCorrectCount = 0;private int score = 0, seconds = 0, questionIndex = 0;private boolean isSingleChoice, isMultipleChoice, isTrueOrFalse, submit = false;private final List<SingleChoice> singleChoices;private final List<MultipleChoice> multipleChoices;private final List<TrueOrFalse> trueOrFalse;private final Timer timer;private final JPanel panelQuestion = new JPanel();class GiveQuestion implements Runnable {@Overridepublic void run() {Collections.shuffle(singleChoices);Collections.shuffle(multipleChoices);Collections.shuffle(trueOrFalse);while (questionIndex < 15) {submit = false;if (questionIndex % 3 == 0) {isSingleChoice = true;showSingleChoiceQuestion(singleChoices.get(singleChoiceCount));singleChoiceCount++;} else if (questionIndex % 3 == 1) {isMultipleChoice = true;showMultipleChoiceQuestion(multipleChoices.get(multipleChoiceCount));multipleChoiceCount++;} else {isTrueOrFalse = true;showTrueOrFalseQuestion(trueOrFalse.get(trueOrFalseCount));trueOrFalseCount++;}timer.start();while (!submit) {}questionIndex++;}endExam();}}public JavaExam() {super("Java机考 By YeMaolin");singleChoices = new Questions().singleChoices;multipleChoices = new Questions().multipleChoices;trueOrFalse = new Questions().trueOrFalse;setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400, 250);setLocationRelativeTo(null);setLayout(new BorderLayout());panelQuestion.setLayout(new GridLayout(5,1));panelQuestion.setBorder(new EmptyBorder(0,15,0,0)); // 设置组件的外边距labelQuestion = new JLabel("", SwingConstants.CENTER);radioButtonA = new JRadioButton("A");radioButtonB = new JRadioButton("B");radioButtonC = new JRadioButton("C");radioButtonD = new JRadioButton("D");checkBoxA = new JCheckBox("A");checkBoxB = new JCheckBox("B");checkBoxC = new JCheckBox("C");checkBoxD = new JCheckBox("D");buttonGroup = new ButtonGroup();buttonGroup.add(radioButtonA);buttonGroup.add(radioButtonB);buttonGroup.add(radioButtonC);buttonGroup.add(radioButtonD);JPanel panelInfo = new JPanel();labelSingleChoiceNum = new JLabel("单选题:0/5/0", SwingConstants.CENTER);labelMultipleChoiceNum = new JLabel("多选题:0/5/0", SwingConstants.CENTER);labelTrueOrFalseNum = new JLabel("判断题:0/5/0", SwingConstants.CENTER);labelScore = new JLabel("成绩:0分", SwingConstants.CENTER);labelTime = new JLabel("用时:0秒", SwingConstants.CENTER);panelInfo.add(labelSingleChoiceNum);panelInfo.add(labelMultipleChoiceNum);panelInfo.add(labelTrueOrFalseNum);panelInfo.add(labelScore);panelInfo.add(labelTime);add(panelInfo,BorderLayout.NORTH);add(panelQuestion,BorderLayout.WEST);setVisible(true);buttonSubmit = new JButton("提交");add(buttonSubmit,BorderLayout.SOUTH);buttonSubmit.addActionListener(e -> submitAnswer());timer = new Timer(1000, e -> {seconds++;labelTime.setText("用时:" + seconds + "秒");if (seconds >= 20) {submitAnswer();}});Thread giveQuestion = new Thread(new GiveQuestion());giveQuestion.start();}private void endExam() {timer.stop();JOptionPane.showMessageDialog(this, "考试结束,您的成绩是" + score + "分!");System.exit(0);}private void showSingleChoiceQuestion(SingleChoice singleChoice) {panelQuestion.removeAll();labelQuestion.setText(questionIndex + 1 + "/15[单选题]" + singleChoice.question);radioButtonA.setText(singleChoice.optionA);radioButtonB.setText(singleChoice.optionB);radioButtonC.setText(singleChoice.optionC);radioButtonD.setText(singleChoice.optionD);panelQuestion.add(labelQuestion);panelQuestion.add(radioButtonA);panelQuestion.add(radioButtonB);panelQuestion.add(radioButtonC);panelQuestion.add(radioButtonD);}private void showMultipleChoiceQuestion(MultipleChoice multipleChoice) {panelQuestion.removeAll();labelQuestion.setText(questionIndex + 1 + "/15[多选题]" + multipleChoice.question);checkBoxA.setText(multipleChoice.optionA);checkBoxB.setText(multipleChoice.optionB);checkBoxC.setText(multipleChoice.optionC);checkBoxD.setText(multipleChoice.optionD);panelQuestion.add(labelQuestion);panelQuestion.add(checkBoxA);panelQuestion.add(checkBoxB);panelQuestion.add(checkBoxC);panelQuestion.add(checkBoxD);}private void showTrueOrFalseQuestion(TrueOrFalse trueOrFalse) {panelQuestion.removeAll();labelQuestion.setText(questionIndex + 1 + "/15[判断题]" + trueOrFalse.question);radioButtonA.setText("正确");radioButtonB.setText("错误");panelQuestion.add(labelQuestion);panelQuestion.add(radioButtonA);panelQuestion.add(radioButtonB);}private void submitAnswer() {timer.stop();String correctAnswer = "";boolean right = false;if (isSingleChoice) {String userAnswer = "";correctAnswer = singleChoices.get(singleChoiceCount - 1).correctAnswer;if (radioButtonA.isSelected()) {userAnswer = "A";} else if (radioButtonB.isSelected()) {userAnswer = "B";} else if (radioButtonC.isSelected()) {userAnswer = "C";} else if(radioButtonD.isSelected()) {userAnswer = "D";}if (userAnswer.equals(correctAnswer)) {singleChoiceCorrectCount++;score++;right = true;}}else if (isMultipleChoice) {correctAnswer = multipleChoices.get(multipleChoiceCount - 1).correctAnswer;String userAnswer = "";if (checkBoxA.isSelected()) {userAnswer += "A";}if (checkBoxB.isSelected()) {userAnswer += "B";}if (checkBoxC.isSelected()) {userAnswer += "C";}if (checkBoxD.isSelected()) {userAnswer += "D";}if (correctAnswer.equalsIgnoreCase(userAnswer)) {multipleChoiceCorrectCount++;score += 2;right = true;}}else if (isTrueOrFalse) {boolean correct = trueOrFalse.get(trueOrFalseCount - 1).correctAnswer;correctAnswer = String.valueOf(correct);if (radioButtonA.isSelected()&&correct||radioButtonB.isSelected()&&!correct) {trueOrFalseCorrectCount++;score++;right = true;}}if (right)JOptionPane.showMessageDialog(this, "回答正确,用时" + seconds + "秒");else JOptionPane.showMessageDialog(this, "回答错误,正确答案是 " + correctAnswer + "\n用时" + seconds + "秒");update();submit = true;}private void update() {labelScore.setText("成绩:" + score + "分");labelSingleChoiceNum.setText("单选题:" + singleChoiceCount + "/5/" + singleChoiceCorrectCount);labelMultipleChoiceNum.setText("多选题:" + multipleChoiceCount + "/5/" + multipleChoiceCorrectCount);labelTrueOrFalseNum.setText("判断题:" + trueOrFalseCount + "/5/" + trueOrFalseCorrectCount);buttonGroup.clearSelection();checkBoxA.setSelected(false);checkBoxB.setSelected(false);checkBoxC.setSelected(false);checkBoxD.setSelected(false);radioButtonA.setSelected(false);radioButtonB.setSelected(false);radioButtonC.setSelected(false);radioButtonD.setSelected(false);seconds = 0;isSingleChoice = isMultipleChoice = isTrueOrFalse = false;}public static void main(String[] args) {SwingUtilities.invokeLater(JavaExam::new);}
}

首先最主要的功能就是展示题目,我们先设计出三种题目类型的结构,然后建立起题库。首先是单选题,定义一个单选题类,题目内容和四个选项以及正确答案都用字符串来表示,并为之设置一个带参构造函数。

类似的定义一个多选题类,多选题和单选题唯一的区别在于多选题的正确答案不止一个,但我们都可以通过一个字符串来表示正确答案,因此这两个类实现是一模一样的。

对于判断题来说,只需要一个字符串记录题目内容,一个布尔变量记录正确的判断结果就行。

然后我们开始准备题库,定义一个题库类,建立起三种题型的容器。

然后在构造函数中添加题目。

添加10道单选题。

添加10道多选题。

添加10道判断题。

接下来是如何将题目展示在GUI界面上以及实现其他的功能逻辑的问题了。

定义一个类Java Exam,继承自JFrame,这样Java Exam就是一个窗口了,我们在主函数中使用SwingUtilities类中的invokeLater方法来在事件调度线程上执行Java Exam的构造函数。

在Java Exam构造函数中,我们定义窗口的一些基本属性,并从题库中取出三种类型的题目。

然后初始化选项组件,这里单选题和判断题可以共用一套radio Button,然后多选题用check Box。

将四个按钮加入到按钮组中,确保在同一个按钮组中只有一个单选按钮可以被选中,当用户选中其中一个单选按钮时,其他的单选按钮会自动变为未选中状态,实现单选功能。

实时显示三种题型的已做数目\总数目\答对数目和当前总成绩和用时,这些信息都放在一个JPanel容器里面。

设置提交按钮,实现一个事件监听器,当按钮被点击的时候调用提交答案方法,再设置一个定时器,如果作答超过20秒将自动提交答案完成作答。

最后创建一个线程giveQuestion用来展示题目。

来看giveQuestion的实现,我们先将题目的顺序打乱,这样每次重新启动程序题目的出现顺序都是随机的。

然后每种题型取前五道题一共十五道题进行展示,分别调用对应的展示函数进行题目展示。

然后开始计时,等待作答提交后切换下一题,如果没有在20秒内提交答案,系统也会自动调用提交函数进行提交然后自动切换下一题。当所有题目作答完毕后调用结束函数展示成绩。

对于三种题型的展示,因为涉及到题目之间的切换,所以我们使用了一个JPanel容器来装题目的组件,然后每次展示题目之前都将这个容器上面的所有组件清除,再添加上本题目的组件。

展示单选题,这里加上了题号。

类似的展示多选题。

展示判断题用的是和单选题同一套组件,但是判断题只需要用到两个radio Button即可表示正确与错误。

然后看提交答案的函数,这里首先让计数器停止计时,然后分题目类型核对答案。

核对单选题答案,先从题库中取出正确答案,然后取作答答案进行比较,答对加法,这里需要注意的是,必须对四个选项进行判断有没有选择,而不能最后一个用else情况处理,因为如果没有作答那么答案就应该为空,而不是else的选D。

核对多选题答案,这里需要按顺序将选择到的ABCD拼接起来作为一个字符串,然后直接和正确答案比较是否相等即可。

核对判断题答案,直接判断有没有选对即可。

然后给回作答反馈,如果回答正确,给出正确提示和用时,回答错误的时候给出正确答案和用时,再调用更新函数进行状态更新。

再来看更新函数,即更新成绩,三种题型的已做题目数量和答对题目数量的更新,还有选项状态的清除。

最后作答完毕结束时调用的结束函数用来停止计时和展示成绩。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等

文章目录 ansible配置文件的优先级尝试开始进行操作ansible常用模块ansible 的playbook示例安装phpplaybook中变量的引用 ansible yum install -y ansible 测试是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg &#xff1a;主配置文件&#xff0c;配置 ansible…

LeetCode 每日一题 Day 12 (Hard)|| 二维前缀和二维差分

2132. 用邮票贴满网格图 给你一个m x n的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stampHeight x stampWidth 。我们想将邮票贴进二进制矩阵中&#xff0c;且满足以下 限制 和 …

如何避免重要文件夹被盗?多种文件夹防盗方法介绍

当我们将重要数据存放在文件夹中时&#xff0c;一定要保护文件夹的安全&#xff0c;避免文件夹被盗。那么&#xff0c;我们该如何避免重要文件夹被盗呢&#xff1f;下面我们就来了解一下。 EFS功能 EFS是Windows提供的数据加密功能&#xff0c;可以加密NTFS卷上的文件和文件夹…

verilog基本语法-case语句-译码电路,编码电路,选择器电路

概述&#xff1a; 本节主要讲解LUT构造的组合逻辑电路中的译码电路&#xff0c;编码电路&#xff0c;选择器电路。这些基本电路是使用的最广泛的电路&#xff0c;但是一般情况下很容易忽略这些电路。其中译码电路是构成RAM中写地址的电路&#xff0c;而选择电路是构成RAM中数据…

java 家教管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 家教管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

代码随想录刷题题Day13

刷题的第十三天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day13 任务 ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数 1 二叉树的最大…

Linux centos7 添加自定义服务(frps服务)

文中以frps为例创建frp服务端的服务 1、创建服务文件 vi /etc/systemd/system/frps.service 注意&#xff1a;文件名frps就是服务名称 2、编辑服务文件内容 [Unit] # 服务名称&#xff0c;可自定义 Description frp server After network.target syslog.target Wants n…

开发者必备21个Python工具

Python作为一门流行的编程语言&#xff0c;拥有着庞大的生态系统和丰富的工具库&#xff0c;为开发者们提供了无限可能。在这篇文章中&#xff0c;我们将介绍21个开发者必备的Python工具&#xff0c;涵盖了开发、调试、测试、性能优化和部署等多个方面。 Python开发工具 Jupyt…

信创认可!沃趣国产数据库云入选“2023 年浙江省信息技术应用创新典型案例”

12月6日&#xff0c;浙江省经信厅公示了2023 年浙江省信息技术应用创新典型案例入围名单&#xff0c;经过征集申报、资格初审、专家评审等环节&#xff0c;遴选出24个优秀典型解决方案&#xff0c;杭州沃趣科技以“基于云原生多类型国产数据库私有云解决方案”成功入选。 浙江省…

【ARM Trace32(劳特巴赫) 使用介绍 14 -- Go.direct 介绍】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 Go.directGo配合程序断点使用Go 配合读写断点使用Go 快速回到上一层函数 System.Mode Go Trace32 Go.direct TRACE32调试过程中&#xff0c;会经常对芯片/内核进行控制&#xff0c;比如全速运行、暂停、单步等等。这篇文章先…

基于hadoop下的spark安装

目录 简介 安装准备 spark安装 配置文件配置 简介 Spark主要⽤于⼤数据的并⾏计算&#xff0c;⽽Hadoop在企业主要⽤于⼤数据的存储&#xff08;⽐如HDFS、Hive和HBase 等&#xff09;&#xff0c;以及资源调度&#xff08;Yarn&#xff09;。但是也有很多公司也在使⽤MR2进…

数据寻址方式

目录 一. 直接寻址二. 间接寻址三. 寄存器寻址四. 寄存器间接寻址五. 隐含寻址六. 立即寻址 \quad 数据寻址, 确定本条指令的地址码指明的真实地址 \quad 假设(下面围绕这个假设展开) \quad 一. 直接寻址 \quad 假设A的位数为16bit 那么寻址范围就是 0 ~ 216-1 \quad 二. 间接…

2023.12.14 hive sql的聚合增强函数 grouping set

目录 1.建库建表 2.需求 3.使用union all来完成需求 4.聚合函数增强 grouping set 5.聚合增强函数cube ,rollup 6.rollup翻滚 7.聚合函数增强 -- grouping判断 1.建库建表 -- 建库 create database if not exists test; use test; -- 建表 create table test.t_cookie(month …

深入浅出讲解半桥栅极驱动器IC FAN7382MX

FAN7382MX是单片高端栅极驱动器IC,可以驱动最高在 600V 下运行的 MOSFET 和 IGBT。安森美的高电压工艺和共模干扰抑制技术提供了高压侧驱动器在高 dv/dt 干扰情况下的稳定运行。先进的电平转换电路可针对 VBS 15V 允许最高 VS -9.8 V&#xff08;典型值&#xff09;的高压侧门…

论文阅读《Domain Generalized Stereo Matching via Hierarchical Visual Transformation》

论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/html/Chang_Domain_Generalized_Stereo_Matching_via_Hierarchical_Visual_Transformation_CVPR_2023_paper.html 概述 立体匹配模型是近年来的研究热点。但是&#xff0c;现有的方法过分依赖特定数据集上…

Lists.partition是如何实现懒加载的?

前言&#xff1a; 最近看到一篇文章&#xff0c;里面提及了google的common包下Lists.partition方法为懒加载&#xff0c;只有在遍历时才会真正分区。平时使用时并未感觉到,感觉有点好奇。特此将自己寻找的答案的过程整理记录下来。 源码&#xff1a; public static <T>…

用友时空 KSOA 多处SQL注入漏洞复现

0x01 产品简介 用友时空 KSOA 是建立在 SOA 理念指导下研发的新一代产品,是根据流通企业前沿的 IT 需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的 IT 系统之间彼此轻松对话。 0x02 漏洞概述 用友时空 KSOA 系统 PayBill、QueryService、linkadd.jsp等接口处…

“分割“安卓用户,对标iOS,鸿蒙崛起~

近期关于**“华为于明年推出不兼容安卓的鸿蒙版本”**的消息传出&#xff0c;引起了业界的热议关注。自从2019年8月&#xff0c;美国制裁下&#xff0c;华为不再能够获得谷歌安卓操作系统相关付费服务&#xff0c;如此情况下&#xff0c;华为“备胎”鸿蒙操作系统一夜转正。 华…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

npm安装,idea中启动vue失败

node 设置配置之后&#xff0c;要查询时&#xff0c;会从.npmrc中读取路径 .npmrc自己创建的&#xff08;默认情况下.npmrc会创建在C盘中&#xff09; 我创建的在D:\studay-and-working\node16.14\node_modules\npm中 指定.npmrc文件&#xff0c;因为默认会访问C盘的.npmrc文件…