基于SpringBoot+Vue框架的在线考试系统的设计与实现

基于SpringBoot+Vue框架的在线考试系统的设计与实现

系统合集跳转

源码获取链接

一、系统环境

运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以
tomcat环境: Tomcat 7.x,8.x,9.x版本均可
操作系统环境: Windows XP/7/8//8.1/10/11或者Linux或者MacOS,2G内存以上,推荐4G,4G以上更好
用了技术框架: HTML+CSS+JavaScript+jsp+mysql+Spring+SpringMVC+mybatis+Spring boot
数据库: Mysql数据库,任意版本均可,也可使用各种数据库工具,例如Navicat等。
主要功能:
(1)用户管理模块:
该模块主要用于管理用户的信息,包括用户的注册、登录、修改个人信息、权限管理等功能。在该模块中,需要实现用户的信息验证、密码加密等安全机制,同时需要支持不同用户角色的管理,如考生、考官、管理员等,以及不同用户之间的信息隔离。
(2)资源管理模块:
该模块主要用于管理在线考试所需要的资源,包括试题、答案、教学资料等,同时还需要支持资源的上传和下载功能。在该模块中,需要实现资源的分类管理、搜索和浏览等功能,同时需要对资源进行安全管理,确保资源的保密性和完整性。
(3)考试模块:
该模块是在线考试系统的核心模块,主要用于组织、管理和监控考试过程。在该模块中,需要实现考试的发布、考生的考试管理、答题卡的生成、考试成绩的统计等功能。同时,需要考虑到不同类型的考试场景,如定期考试、随机考试、练习考试等。
(4)试卷管理模块:
该模块主要用于管理试卷的信息和组成,包括试卷的组成、试题的分类和难度、试题的选项等。在该模块中,需要实现试卷的自动生成、手动生成、试卷的组卷、试卷的审核等功能。同时,需要考虑到试卷的安全性和保密性,确保试卷不会被非法泄露。

功能模块图如下图所示。
在这里插入图片描述

1.1.研究背景与意义

随着计算机技术和互联网技术的不断发展和普及,网络教育已经成为了现代教育的重要组成部分。在线考试系统作为网络教育的一种重要工具,可以为学生提供更加灵活、便捷和高效的考试方式,为教师提供更加便捷和准确的考试管理和评估方式。
然而,在线考试系统的发展还面临着一些挑战和问题。例如,一些在线考试系统的安全性和稳定性问题还没有得到完全解决;一些系统在性能和效率方面存在瓶颈;一些系统在用户体验和功能完善性方面还有待提高。因此,研究和开发一种高效、安全、稳定、易用、功能完善的在线考试系统,对于推进网络教育的发展,提高学生的学习效率和教师的教学效果具有重要意义。
本文的研究意义在于提供一种高效、安全、稳定、易用、功能完善的在线考试系统,为网络教育的发展和学生的学习提供更好的支持和服务。同时,该系统的研究和实现还可以为其他在线教育系统的研究和实现提供一定的参考和借鉴。

1.2.国内外研究现状

近年来,随着互联网和计算机技术的发展,在线考试系统在国内外的研究和应用逐渐得到广泛关注和应用。在国内,已有不少学者对在线考试系统进行了研究和开发。例如,黄文杰等人研究了一种基于B/S模式的在线考试系统,并采用了面向对象技术和数据结构等技术实现了系统的设计和开发。同时,系统还支持多种题型和分数计算方式,具有较好的灵活性和可扩展性。另外,杨靖等人开发了一种基于JavaEE和Struts2框架的在线考试系统,并实现了学生考试、教师管理、试卷管理等功能,同时采用了MVC架构和Ajax技术等技术实现了系统的开发和实现。
在国外,已有不少研究者对在线考试系统进行了研究和应用。例如,Jiandong Zhang等人开发了一种基于Web的在线考试系统,该系统采用了ASP.NET技术和MVC架构,并具有良好的用户体验和功能完善性。另外,Erik Frisk等人研究了一种基于Ruby on Rails框架的在线考试系统,并实现了试题管理、考试管理、学生管理等功能,同时系统具有良好的安全性和稳定性,适用于大规模在线考试。
总体来说,国内外已有不少学者对在线考试系统进行了研究和开发,并取得了一定的成果。然而,当前在线考试系统在安全性、稳定性、效率和用户体验等方面仍存在一些问题和挑战,需要进一步深入研究和探索。

1.3.研究主要内容

本文提出了一种基于SpringBoot+Vue框架的在线考试系统,该系统采用了前后端分离的架构,使用了JWT进行身份验证,支持多种题型和不同的分数和时间限制,可以自动评分和生成成绩报告,同时支持教师实时查看学生的考试进度。该系统具有结构清晰、功能完善、易于扩展等特点,可以满足学校或教育机构的在线考试需求,提高学生的学习效率和教师的教学效果。
通过以上研究内容的实现和完善,本研究旨在提供一款高效、稳定、安全、易用的在线考试管理系统,以满足用户对在线考试的需求,促进教育行业的发展。同时,本研究也为其他相关研究提供了参考和借鉴的价值。

2.1.前台功能模块实现

2.1.1.登录功能实现

用户在登录页面输入用户名和密码,点击登录按钮。系统接收到登录请求后,从前端获取用户输入的用户名和密码。系统对用户名和密码进行校验,判断用户输入是否正确。页面如下图2-1所示。
在这里插入图片描述

图2-1 登录页面
登录功能实现流程如下:
1、首先通过userService的login方法来对用户名信息进行验证,查询系统数据库中是否存在该用户名。
2、然后通过if方法来比对user是否为null方法来判断是否为空,本操作为后端的非空校验,避免空指针异常出现。
3、最后通过user.getPassword().equals(password)方法来对用户名和密码进行比对,比对无勿后进行登录操作。
4、登录成功将会员信息放入Session中,然后通过控制层将登录成功的信息通过HTTP的方式返回给前端页面中。

代码如下:

Admin adminRes = loginService.adminLogin(username, password);
if (adminRes != null) {return ApiResultHandler.buildApiResult(200, "请求成功", adminRes);
}
//查询teacher表
Teacher teacherRes = loginService.teacherLogin(username,password);
if (teacherRes != null) {return ApiResultHandler.buildApiResult(200, "请求成功", teacherRes);
}
//查询student表
Student studentRes = loginService.studentLogin(username,password);
if (studentRes != null) {return ApiResultHandler.buildApiResult(200, "请求成功", studentRes);
}

2.1.2.查看考试信息功能实现

用户登录后可以对考试信息进行查看,页面如下图5-2所示.
在这里插入图片描述

图2-2 考试列表页面
在线考试系统的考试列表查询功能是系统中非常重要的一个功能,它可以帮助用户快速地找到自己需要参加或已经参加的考试,提高了系统的使用效率和用户体验。
功能实现流程如下:
(1)首先,需要在前端页面设计中添加一个考试列表查询的搜索框和查询按钮,用于用户输入关键字后发起查询请求,具体代码如下所示:

<button @click=“search”>查询

(2)接下来,需要在后端编写相应的接口,用于接收前端发送的查询请求,并根据关键字进行相应的筛选和过滤,返回符合条件的考试列表数据。具体代码如下所示:

@GetMapping("/exams")
public ApiResult findAll(){System.out.println("不分页查询所有试卷");ApiResult apiResult;apiResult = ApiResultHandler.buildApiResult
(200, "请求成功!", examManageService.findAll());return apiResult;
}

在这里,我们使用了SpringBoot提供的@GetMapping注解,来表示这是一个GET请求,并将查询关键字通过@RequestParam注解传递进来。然后,在实现方法中,我们调用了examService中的getExams方法,该方法通过关键字进行模糊匹配和筛选,返回符合条件的考试列表数据,并通过Result.success方法将数据封装为一个Result对象返回给前端。
(3)最后,在Vue组件中,我们需要通过Ajax请求,调用后端接口,并将返回的考试列表数据渲染到前端页面上。具体代码如下所示:

methods: { 
search() { 
axios.get('/api/exams', {params: {keyword: this.searchText}
}) .then(res => { this.exams = res.data }) }

2.1.3.在线考试功能实现

用户登录后可以在前台页面上进行在线,页面如下图2-3所示。
在这里插入图片描述

图2-3 试卷详情页面
点击开始考试进入到考试页面,页面如下图2-4所示。
在这里插入图片描述

图2-4 在线考试页面
基于SpringBoot+Vue框架的在线考试系统的在线考试功能是系统中的核心功能之一。实现在线考试功能需要考虑多个方面,包括试卷生成、考试界面设计、考试计时、等。
(1)试卷生成
在线考试系统需要支持试卷生成功能,管理员可以通过系统提供的试卷生成工具创建试卷。试卷生成工具应该支持随机生成试题、手动添加试题、试题分值设置等功能。同时,为了保证试卷的难度和多样性,应该支持试题库的分类管理和试题难度分级设置。
(2)考试界面设计
考试界面是考生进行在线考试的主要界面。考试界面需要具备良好的用户体验和交互性。界面设计应该简洁明了、易于操作,并提供考试规则和注意事项等信息。同时,应该充分考虑不同设备和浏览器的兼容性问题,确保考生可以在各种设备上顺畅进行考试。
(3)考试计时
在线考试系统需要支持考试计时功能,考试时间应该根据试卷的总分和难度自动计算。同时,系统应该支持倒计时提醒功能,以免考生因为时间不够而未完成考试。考试计时器应该具有良好的精度和稳定性,能够在网络延迟等异常情况下保证计时的准确性。
代码如下:
// 选择题数据库获取

List<Integer>  changeNumbers = multiQuestionService.findBySubject(item.getSubject(), changeNumber);
if(changeNumbers==null){return ApiResultHandler.buildApiResult(400,"选择题数据库获取失败",null);
}
for (Integer number : changeNumbers) {PaperManage paperManage = new PaperManage(paperId,1,number);int index = paperService.add(paperManage);if(index==0)return ApiResultHandler.buildApiResult(400,"选择题组卷保存失败",null);
}
List<Integer> fills = fillQuestionService.findBySubject(item.getSubject(), fillNumber);
if(fills==null)return ApiResultHandler.buildApiResult(400,"填空题数据库获取失败",null);
for (Integer fillNum : fills) {PaperManage paperManage = new PaperManage(paperId,2,fillNum);int index = paperService.add(paperManage);if(index==0)return ApiResultHandler.buildApiResult(400,"填空题题组卷保存失败",null);
}

2.1.4.留言功能实现

用户登录后可以在前台页面上进行留言,页面如下图2-5所示。
在这里插入图片描述

图2-5 留言页面
留言成功后会生成在留言板中,页面如下图2-6所示。
在这里插入图片描述

                                       图2-6 留言板页面

功能实现流程:
1、前端页面输入留言内容和联系方式,点击提交按钮触发事件。前端使用AJAX框架发送POST请求,将留言内容和联系方式数据以JSON格式封装在请求体中,同时指定请求的url为后端的留言处理接口。
2、后端接收到留言处理接口的请求,使用Springboot框架解析请求体中的JSON数据,将其映射为Java对象。后端使用Java对象的数据进行业务处理,例如将留言信息存储到数据库中。
3、后端将处理结果封装成JSON格式的数据,并将其作为响应体返回给前端。前端使用AJAX框架解析后端返回的JSON数据,根据返回的处理结果进行页面展示。
在数据传递的过程中需要进行参数校验、异常处理等操作,以确保数据的完整性和系统的稳定性。同时,为了保证数据的安全性,系统对用户输入的内容进行过滤和编码,以防止XSS等攻击。
代码如下:

//验证实体
CodeMsg validate = ValidateEntityUtil.validate(coupleBack);
if (validate.getCode() != CodeMsg.SUCCESS.getCode()){return Result.error(validate);
}
//符合验证进行保存
if (null == coupleBackService.save(coupleBack)){return Result.error(CodeMsg.ADMIN_COUPLEBACK_ADD_ERROR);
}

2.2.后台功能模块实现

2.2.1 学生管理功能

学生管理页面如下图2-7所示。
在这里插入图片描述

图2-7 学生管理页面
(1)学生修改
学生修改功能主要是对注册到本系统的用户信息进行修改的过程,主要是对数据库中Student表中的信息进行Update的操作。学生修改页面如下图2-8。
在这里插入图片描述

图2-8 学生修改页面
在后台用户管理中也可以对用户信息进行删除,页面如下图2-9所示。
在这里插入图片描述

图2-9 学生信息删除页面
功能实现流程可以通过以下步骤:
1、前端页面通过AJAX请求向Spring后端发送请求,请求URL为/user开头,后端通过@Controller注解的方法进行处理。
2、后端Controller中的方法使用@PathVariable注解获取前端请求中的参数,如请求的页码,每页显示的数据数量等,并将这些参数传递给Service层进行处理。
3、Service层根据请求参数使用JPA的Mapper进行查询,获取用户信息数据,并将数据封装成PageInfo对象返回给Controller层。
4、Controller层接收到Service层返回的PageInfo对象后,使用ModelAndView对象将数据传递给前端JSP页面进行显示。
5、前端HTML页面接收到后端传递的用户列表数据后,使用JavaScript等技术进行处理和展示。
在这个过程中,前端和后端通过AJAX技术进行数据传递,后端使用SpringBoot框架进行接收请求和处理业务逻辑,同时使用JPA框架进行数据查询,最终通过JSP页面将结果展示给用户。
代码如下:

@PutMapping("/student")
public ApiResult update(@RequestBody Student student) {int res = studentService.update(student);if (res != 0) {return ApiResultHandler.buildApiResult(200,"更新成功",res);}return ApiResultHandler.buildApiResult(400,"更新失败",res);}

2.2.2试卷管理模块

点击左边一级目录试卷管理会出现二级目录,点击所有试卷后对对试卷信息进行全局查询,加载出所有的试卷信息显示在列表中,并且可以对试卷信息进行一系列操作,包括添加试题,查看试卷下的试题,以及生成试题的功能。页面如下图2-10所示。
在这里插入图片描述

图2-10 试卷列表页面
在这里插入图片描述

图2-11 修改试卷页面
增加试题页面如下图2-12所示。
在这里插入图片描述

图2-12 增加试题页面

参考文献

[1]孙珊珊,孟欣. 高职院校单独招生在线考试系统研究[J]. 电脑编程技巧与维护,2021,(07):26-28.
[2]席梦如,杨帆,杨彦铃. 中小学信息技术考试系统的现状调查研究[J]. 新课程研究,2021,(13):120-121.
[3]谢铠联. 基于事件驱动的SQL在线考试系统的设计与实现[D].南京大学,2021.
[4]张学波,王琳,李晋丽. 大学计算机基础“线上+线下”混合教学模式研究[J]. 软件,2021,42(02):184-186.
[5]赵守才,杨校庆. 基于SSM的线上考试系统[J]. 电子技术与软件工程,2021,(03):220-221.
[6]方雅婷. 疫情防控常态化背景下高校在线考试系统的设计与应用探析[J]. 大学(研究版),2020,(08):113-114.
[7]邢瑞. 基于神经图模型的试题推荐在线考试系统设计与研究[D].吉林大学,2020.
[8]罗振南. 三晋理工学院线上教学管理系统设计与实现[D].大连理工大学,2020.
[9]何长福. 基于Web技术的计算机应用考试系统[J]. 信息与电脑(理论版),2019,(15):58-59.
[10]韦俊旭. 线上考试智能管理系统的设计与实现[J]. 科技创新与应用,2019,(08):90-91+93.
[11]桑永超,冉崇善. 基于JavaWeb的线上考试系统应用研究[J]. 计算机光盘软件与应用,2015,18(02):43+45.
[12]张鑫睿. 基于WEB的在线考试系统设计和实践[D].电子科技大学,2012.
[13]袁红氢. 利用ASP技术实现线上考试的探索[J]. 湖南冶金职业技术学院学报,2004,(01):45-47+50.
[14] Horstmann,Cay S, Core Java.Volume I.Fundamentals[G],北京人民邮电出版社,2019,12(5):44-49
[15] Bloch、Joshua, Effective Java[G],北京电子工业出版社,2019,5(31):62-78

一键三连+关注+评论留下你的邮箱 获取源码,主动获取 看主页置顶
一键三连+关注+评论留下你的邮箱 获取源码,主动获取 看主页置顶
一键三连+关注+评论留下你的邮箱 获取源码,主动获取 看主页置顶

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

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

相关文章

楼房销售系统设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;楼房销售系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xf…

King’s Biobank 生物样本库管理系统:高效、智能的样本管理解决方案

近年来&#xff0c;生物样本资源已成为生物医药产业和国家生物安全战略的核心基石&#xff0c;在病因研究、临床诊疗及疾病预防等多个关键领域发挥着不可替代的作用。然而&#xff0c;科研机构、检测中心和医院在样本管理方面普遍面临以下挑战&#xff1a; 重复记录&#xff0c…

spring下的beanutils.copyProperties实现深拷贝

spring下的beanutils.copyProperties方法是深拷贝还是浅拷贝&#xff1f;可以实现深拷贝吗&#xff1f; 答案&#xff1a;浅拷贝。 一、浅拷贝深拷贝的理解 简单说拷贝就是将一个类中的属性拷贝到另一个中&#xff0c;对于BeanUtils.copyProperties来说&#xff0c;你必须保…

Linux---对缓冲区的简单理解--第一个系统程序

前序&#xff1a; 首先先理解一下什么是回车与换行&#xff1b;回车和换行是两个概念&#xff0c;它们不是一个东西&#xff1b; 回车:光标回到开始&#xff1b;换行:换到下一行&#xff1b; 如下图&#xff1a; 行缓冲区 如何理解缓冲区问题&#xff1f; 可以认为&#xff0…

『RabbitMQ』 windows下 安装RabbitMQ 并在Python中使用测试

目录 1. 安装ERLANG2. 安装RabbitMQ3. 新建用户Python的测试代码 生产者和消费者总结欢迎关注 『RabbitMQ』 专栏,持续更新中 欢迎关注 『RabbitMQ』 专栏,持续更新中 1. 安装ERLANG 下载之前先看兼容性,这里我打算下载26.1版本的Erlang以适配RabbitMQ cloud.emqx.com/cons…

【教程】创建NVIDIA Docker共享使用主机的GPU

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 这套是我跑完整理的。直接上干货&#xff0c;复制粘贴即可&#xff01; # 先安装toolkit sudo apt-get update sudo apt-get install -y ca-certifica…

麒麟信安受邀参加重庆教育装备专家培训会,共探教育信息化发展新趋势

近日&#xff0c;重庆市教育装备协会2024年区教育装备专家培训会举行&#xff0c;重庆各区教育信息技术与装备中心、教育委员会等相关领导参加。会上&#xff0c;麒麟信安作为协会成员单位发表主题演讲&#xff0c;与参会嘉宾深入探讨教育信息化工作的创新做法和实践经验&#…

2025澄迈漓岛音乐节品牌招商大会成功举行

——共谋音乐盛事&#xff0c;携手推动文化经济发展 12月6日&#xff0c;“2025澄迈漓岛音乐节品牌招商大会”&#xff08;以下简称“招商大会”&#xff09;在澄迈举行。本次大会由澄迈福山发展有限公司、福山咖啡文化风情镇旅游区联合主办&#xff0c;海南绿发投资有限公司承…

从零开始学TiDB(1) 核心组件架构概述

首先TiDB深度兼容MySQL 5.7 1. TiDB Server SQL语句的解析与编译&#xff1a;首先一条SQL语句最先到达的地方是TiDB Server集群&#xff0c;TiDB Server是无状态的&#xff0c;不存储数据&#xff0c;SQL 发过来之后TiDB Server 负责 解析&#xff0c;优化&#xff0c;编译 这…

调度算法的评价指标

调度算法的评价指标 一、CPU利用率二、系统吞吐量三、周转时间四、等待时间五、响应时间 一、CPU利用率 C P U 的利用率 C P U 有效工作时间 C P U 有效工作时间 C P U 空闲等待时间 CPU的利用率\dfrac{CPU有效工作时间}{CPU有效工作时间CPU空闲等待时间} CPU的利用率CPU有效…

【SpringBoot】SpringBoot中分页插件(PageHelper)的使用

目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2?使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户&#xff08;如果用户有一万条数据呢&#xff09;&#xff0c;而是分页展示给用户&#xff0c;这就是分页查询…

python操作数据库

文章目录 基础使用数据插入 基础使用 python使用第三方库pymysql来操作mysql数据库 安装&#xff1a; pip install pymysqlfrom pymysql import Connection# 获取到MySQL数据库的链接对象conn Connection(hostlocalhost # 主机名,port3306 # 端口&#xff0c;默…

【01】栅格切片服务发布

本文探讨的是使用GeoScene Server本身的能力去切瓦片&#xff0c;它可以很好地通过server自带的CachingTools GP服务去切片&#xff0c;可以通过调整该gp服务的最大实例数能够更好利用server所在机器cpu的能力&#xff1b; 如果server站点已经发布了很多服务&#xff0c;则不建…

非极大值抑制(Non-Maximum Suppression,简称NMS)是什么?

非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;简称NMS&#xff09;是一种常用于目标检测任务中的后处理技术&#xff0c;主要用于从多个候选框中选出最合适的边界框&#xff0c;并抑制那些与最优候选框重叠度高且分类置信度低的框。 NMS的目的&#xff1a; 在…

【Java】A *算法的应用

代码和测试图片下载地址&#xff1a; https://download.csdn.net/download/r77683962/90089371 这个地图里黑色部分是不能通过的&#xff0c;白色部分是可以通过的&#xff0c;这个算法没问题&#xff0c;有点感觉效率不太高。。。。。 效果&#xff1a; 源代码PathFind.java&…

日本IT|企业需要什么样的技术?

日本IT企业所需的技术非常多样化&#xff0c;涵盖了多个领域和方面。以下是一些日本IT企业通常所需的主要技术&#xff1a; 一、编程语言与工具 编程语言&#xff1a;Java、Python、C、C#、PHP等是日本IT企业常用的编程语言。这些语言在软件开发、数据分析、网络应用等方面都…

刘铁猛C#入门 030 泛型,partial类,枚举,结构

泛型(generic)无处不在 为什么需要泛型&#xff1a;避免成员膨胀或者类型膨胀 正交性&#xff1a;泛型类型(类/接口/委托/......)泛型成员(属性/方法/字段/....类型方法的参数推断 泛型接口/类的 类型参数不只有一个泛型与委托、lambda表达式实现泛型接口类时 &#xff0c;实现…

视频加密的好处与加密方法分析2024

视频内容的多样化不止局限于电视、电影&#xff0c;在日常培训学习中也是必不可少的。那么对于做知识付费的人来说&#xff0c;视频内容的安全性就尤为重要。视频加密也就i随之兴起&#xff0c;为视频内容安全多了一层保障&#xff0c;那么主要体现下那几个方面呢&#xff1f;可…

鸿蒙UI开发——亮/暗色模式适配

1、概 述 系统存在深浅色两种显示模式&#xff0c;为了给用户更好的使用体验&#xff0c;应用最好适配暗色和亮色两种模式。从应用与系统配置关联的角度来看&#xff0c;适配暗色和亮色模式可以分为下面两种情况&#xff1a; 应用跟随系统的深浅色模式&#xff1b; 应用主动设…

三菱伺服JET产品线(选型说明)

伺服放大器功能提升 伺服放大器MELSERVO-JET系列为进一步优化了独家控制引擎的高性能伺服放大器。 可通过与支持CC-LinK IE TSN的运动控制器的同步通信,进行高 速、高精度的运动控制。 除了旋转型伺服电机以外,还支持线性伺服电机。MR-JET-G-N1支持EtherCAT。 旋转型伺服电机 …