Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)

news2024/11/15 8:16:27

💕💕作者:计算机源码社
💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、文档报告
💕💕如需要源码,可以扫取文章下方二维码联系咨询

💕💕Java项目
💕💕微信小程序项目
💕💕Android项目
💕💕Python项目
💕💕PHP项目
💕💕ASP.NET项目
💕💕Node.js项目
💕💕选题推荐

项目实战|基于springboot企业单位考勤打卡管理系统

文章目录

  • 1、选题背景
  • 2、研究目的和意义
  • 3、系统功能设计
  • 4、系统页面设计
  • 5、参考文献
  • 6、核心代码

1、选题背景

  在当今这个企业众多,员工众多的时代,那么保障企业基础的员工信息的考勤管理问题就显得尤为重要。有条有序的人力管理模式能提供企业最稳定的保障,是企业体现生产力的核心后援之一。随着现在网络时代的到来,互联网的冲击是所有当代人都无法避免的存在,因此,本文想设计的就是一个基于SpringBoot+Vue的企业单位考勤打卡管理系统,使得企业的考勤管理模式能更符合时代潮流的发展。基于SpringBoot Vue的企业单位考勤打卡管理系统是为了方便企业或领导人员对企业员工的管理能更加简单,提高企业对员工管理的业务效率,减轻工作量。以IDEA为开发平台,采用B/S架构。经过细心的调研和衡量,以Java技术为核心实现业务接口,以JSP进行数据的展示和操作。为了编程便捷性采用Spring框架进行项目架构管理和MySQL关系型数据库进行数据存储管理。由于基于SpringBoot Vue的企业单位考勤打卡管理系统是一个管理系统,涉及了员工的考勤、请假等信息的处理,这就触及到了大量数据信息存储的问题。因此本系统后期会对数据安全存储这一模块进行重点研究和优化,确保各个模块的信息准确性和安全性。

2、研究目的和意义

  如今互联网信息技术的飞速进步,彻彻底底改变了人们的生活方式,各行各业都受到了冲击,众多企业的管理模式和方式也基本离不开网络。再加上在现在这个看重人才的时代,以人才为第一核心竞争力,大部分企业的人才储备会越来越多,就导致假如一个企业没有好的合理的企业管理模式,就会产生大量的繁琐工作,在一定程度上浪费企业成本和消耗企业人才,并且在企业组织架构重组或者大量人员变动时,那更是一大绞尽脑汁的工作。
  所以假如企业拥有了一套完整合理的企业单位考勤打卡管理系统的话,可以很快解决繁琐的人员变动问题,同时企业的领导也可以根据管理系统中的信息进行工作上的安排和调整,例如系统中的考勤功能可以详细的看出员工的上班出勤情况,是否存在迟到早退甚至缺到的人员。也可以查看员工具体信息和薪资信息,进一步的对整个部门或者某个团队的生产能力有一定的把控,同时还有通讯录可以快速查看指定员工的通讯信息,增加工作效率。
  总的来说,在这样的企业单位考勤打卡管理系统的帮助下,可以对员工信息管理工作以及考勤工作进行信息化管理,加强上下级之间的联系,有效地记录并查询员工信息、考勤等情况,使企业对员工的管理更加高效,大大地增加了一个企业的生产效率,给企业在这个竞争激烈的行业市场中,提高了很强的竞争力。

3、系统功能设计

在这里插入图片描述
员工关键功能包含员工登陆、个人信息修改、加班申请管理、打卡信息管理、工作汇报管理、请假信息管理、考勤信息管理、工资信息管理等有关功能。员工用例如下
在这里插入图片描述
管理员的权限是最高的,可以对系统所在功能进行查看,修改和删除等,管理员用例如下

在这里插入图片描述

4、系统页面设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如需要源码,可以扫取文章下方二维码联系咨询

5、参考文献

[1]谭钊,齐杨,陈浩然,等.智慧考勤系统设计与应用[J].信息技术与标准化,2024,(Z1):93-97.
[2]汪涛.基于SpringBoot和人脸识别的企业考勤管理系统设计与实现[D].阜阳师范大学,2023. DOI:10.27846/d.cnki.gfysf.2023.000144.
[3]苏荣聪,董玉霞.基于Android技术的企业考勤信息系统的设计与实现[J].成都工业学院学报,2021,24(03):43-47.DOI:10.13542/j.cnki.51-1747/tn.2021.03.009.
[4]刘欣,王竹宁,葛妍娇,等.基于企业微信的移动考勤系统设计[J].电脑知识与技术,2021,17(26):65-68.DOI:10.14004/j.cnki.ckt.2021.2597.
[5]肖航,杨智,余茜.一种基于WEB技术的企业考勤管理系统[J].中国科技信息,2021,(15):52-54.
[6]张嘉涛,赵传超,王力华.基于企业微信平台医院健康系统的快速设计与实现[J].中国医学装备,2021,18(07):130-134.
[7]靳尹,骆文杰,江朝晖.基于人脸识别的企业考勤系统设计与实现[J].智能计算机与应用,2021,11(05):152-154+159.
[8]靳尹.基于人脸识别的企业移动考勤系统设计与实现[D].合肥工业大学,2021. DOI:10.27101/d.cnki.ghfgu.2021.001097.
[9]王鑫,乐晋昆.基于人脸识别的企业考勤系统分析与设计[J].电子世界,2021,(03):158-159.DOI:10.19353/j.cnki.dzsj.2021.03.067.
[10]范伟村.基于无线AP网络日志的考勤系统的设计与实现[D].哈尔滨工业大学,2020. DOI:10.27061/d.cnki.ghgdu.2020.006704.
[11]赵振华.智能化在企业管理中的应用[J].大众投资指南,2020,(12):81-82.
[12]欧阳志东.大型集团企业考勤自动结算系统的设计与实现[J].信息与电脑(理论版),2020,32(08):53-55.
[13]李铭钧.人脸识别技术在石化企业考勤系统的应用[J].工业控制计算机,2020,33(01):87-88.
[14]段修亮,赵霞.小型企业人事管理系统的设计与实现[J].科技风,2020,(01):76.DOI:10.19392/j.cnki.1671-7341.202001066.
[15]冯汝君.基于MIS的RS公司考勤系统设计及实施研究[D].天津大学,2019. DOI:10.27356/d.cnki.gtjdu.2019.003370.
[16]曹智.基于SSM框架的企业人事管理考勤系统的设计与实现[D].电子科技大学,2019. DOI:10.27005/d.cnki.gdzku.2019.000414.
[17]宫大伟.基于SAP HCM模块与OA系统搭建企业考勤管理框架[C]//天津市电子工业协会.天津市电子工业协会2019年年会论文集.中远海运(天津)有限公司;,2019:3.
[18]张春悦,韩飞.人脸识别系统设计[J].湖北农机化,2019,(12):85.
[19]李宇翔.企业外勤人员考勤系统的研究与实现[D].西安科技大学,2019.
[20]李雅琴.钢铁企业考勤信息系统的开发[J].数字技术与应用,2019,37(02):182-183.DOI:10.19695/j.cnki.cn12-1369.2019.02.99.

6、核心代码

/**
 * 打卡信息
 * 后端接口
 * @author 
 * @email 
 */
@RestController
@RequestMapping("/dakaxinxi")
public class DakaxinxiController {
    @Autowired
    private DakaxinxiService dakaxinxiService;

    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,DakaxinxiEntity dakaxinxi,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yuangong")) {
			dakaxinxi.setGonghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<DakaxinxiEntity> ew = new EntityWrapper<DakaxinxiEntity>();

		PageUtils page = dakaxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dakaxinxi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,DakaxinxiEntity dakaxinxi, 
		HttpServletRequest request){
        EntityWrapper<DakaxinxiEntity> ew = new EntityWrapper<DakaxinxiEntity>();

		PageUtils page = dakaxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dakaxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( DakaxinxiEntity dakaxinxi){
       	EntityWrapper<DakaxinxiEntity> ew = new EntityWrapper<DakaxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( dakaxinxi, "dakaxinxi")); 
        return R.ok().put("data", dakaxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(DakaxinxiEntity dakaxinxi){
        EntityWrapper< DakaxinxiEntity> ew = new EntityWrapper< DakaxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( dakaxinxi, "dakaxinxi")); 
		DakaxinxiView dakaxinxiView =  dakaxinxiService.selectView(ew);
		return R.ok("查询打卡信息成功").put("data", dakaxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        DakaxinxiEntity dakaxinxi = dakaxinxiService.selectById(id);
        return R.ok().put("data", dakaxinxi);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        DakaxinxiEntity dakaxinxi = dakaxinxiService.selectById(id);
        return R.ok().put("data", dakaxinxi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody DakaxinxiEntity dakaxinxi, HttpServletRequest request){
    	dakaxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(dakaxinxi);
        dakaxinxiService.insert(dakaxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody DakaxinxiEntity dakaxinxi, HttpServletRequest request){
    	dakaxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(dakaxinxi);
        dakaxinxiService.insert(dakaxinxi);
        return R.ok();
    }



    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody DakaxinxiEntity dakaxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(dakaxinxi);
        dakaxinxiService.updateById(dakaxinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        dakaxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<DakaxinxiEntity> wrapper = new EntityWrapper<DakaxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yuangong")) {
			wrapper.eq("gonghao", (String)request.getSession().getAttribute("username"));
		}

		int count = dakaxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	






    /**
     * (按值统计)
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}")
    public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        EntityWrapper<DakaxinxiEntity> ew = new EntityWrapper<DakaxinxiEntity>();
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yuangong")) {
            ew.eq("gonghao", (String)request.getSession().getAttribute("username"));
		}
        List<Map<String, Object>> result = dakaxinxiService.selectValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * (按值统计)时间统计类型
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
    public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        params.put("timeStatType", timeStatType);
        EntityWrapper<DakaxinxiEntity> ew = new EntityWrapper<DakaxinxiEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("yuangong")) {
            ew.eq("gonghao", (String)request.getSession().getAttribute("username"));
        }
        List<Map<String, Object>> result = dakaxinxiService.selectTimeStatValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * 分组统计
     */
    @RequestMapping("/group/{columnName}")
    public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("column", columnName);
        EntityWrapper<DakaxinxiEntity> ew = new EntityWrapper<DakaxinxiEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("yuangong")) {
            ew.eq("gonghao", (String)request.getSession().getAttribute("username"));
        }
        List<Map<String, Object>> result = dakaxinxiService.selectGroup(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }


}

💕💕作者:计算机源码社
💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、文档报告
💕💕如需要源码,可以扫取文章下方二维码联系咨询

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

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

相关文章

无人机之螺旋桨的安装与维护

一、安装&#xff1a;正确安装桨叶至关重要。请确保顺时针旋转的桨叶安装在对应的电机上&#xff0c;并使逆时针旋转的桨叶安装在相应的电机上。否则&#xff0c;无人机可能无法正常飞行或失去控制。 二、维护&#xff1a;为了确保无人机的安全及长久使用&#xff0c;请定期检…

pytorch-AutoEncoders

目录 1. 监督学习&无监督学习1.1 监督学习1.2 无监督学习1.3 为什么需要无监督学习 2. AutoEncoders3. Auto Encoders loss function4. PCA VS Auto Encoders5. Auto Encoders的变种5.1 Denoising Auto Encoders5.2 Dropout AutoEncoders5.3 Adversarial AutoEncoders5.4 V…

使用 Python构建 Windows 进程管理器应用程序

在这篇博客中&#xff0c;我们将探讨如何使用 wxPython 构建一个简单的 Windows 进程管理器应用程序。这个应用程序允许用户列出当前系统上的所有进程&#xff0c;选择和终止进程&#xff0c;并将特定进程保存到文件中以供将来加载。 C:\pythoncode\new\manageprocess.py 全部…

打击盗版,禁止盗版软件联网!电脑下载了不安全的“软件”,怎么禁止它联网?这三种方法最常用!

数字化时代&#xff0c;盗版软件的泛滥不仅侵犯了软件开发者的知识产权&#xff0c;还严重威胁到用户的网络安全和数据安全。当不慎在电脑上下载了不安全的盗版软件时&#xff0c;如何有效地禁止其联网&#xff0c;成为保护个人或企业信息、系统安全的重要一环。 本文将为您介…

Qt框架学习04——元对象系统

元对象系统&#xff09; 1. RTTI 概念2. 元对象系统2.1 元对象的概念2. 2 使用元对象系统获取类信息 总结&#xff1a; 1. RTTI 概念 Runtime Type Identification运行时类型识别typeid() 2. 元对象系统 2.1 元对象的概念 用来记录类的原始信息的对象称之为元对象用于继承于…

LLMs之Leaderboard:Gorilla的简介、安装和使用方法、案例应用之详细攻略

LLMs之Leaderboard&#xff1a;Gorilla的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2023 年5月 24 日&#xff0c;UC伯克利等发布Gorilla。该工作针对LLM有效调用API工具的问题&#xff0c;提出了一种检索式微调语言模型的新方法Gorilla&#xff0c;并构建了相…

WPF篇(15)-Expander折叠控件+MediaElement媒体播放器

Expander折叠控件 Expander也是一个内容控件&#xff0c;它有一个标题属性和内容属性。 Expander类的定义 public class Expander : HeaderedContentControl {public static readonly DependencyProperty ExpandDirectionProperty;public static readonly DependencyPropert…

3D DRAM 集成 AI 处理:一项可能取代现有 HBM 的新技术

NEO 半导体公司&#xff0c;一家专注于 3D DRAM 和 3D NAND 内存的公司&#xff0c;最近推出了其最新的 3D X-AI 芯片技术&#xff0c;这项技术有可能取代目前在 AI GPU 加速器中使用的高带宽内存 (HBM)。 据报道&#xff0c;这款 3D DRAM 集成了 AI 处理能力&#xff0c;能够在…

AI预测福彩3D采取888=3策略+和值012路或胆码测试8月17日新模型预测第59弹

经过近60期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;58期一共只错了5次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大…

【SQL】科目种类

目录 题目 分析 代码 题目 表: Teacher ------------------- | Column Name | Type | ------------------- | teacher_id | int | | subject_id | int | | dept_id | int | ------------------- 在 SQL 中&#xff0c;(subject_id, dept_id) 是该表的主键。 该表…

PIP-INTEL:一款多功能OSINT开源情报与数据收集工具

关于PIP-INTEL PIP-INTEL是一款功能强大的工具&#xff0c;专为 OSINT&#xff08;开源情报&#xff09;和网络情报收集活动而设计。它将各种开源工具整合到一个用户友好的界面中&#xff0c;简化了研究人员和网络安全专业人员的数据收集和分析流程。 功能特性 PIP-INTEL利用…

【Python】高效的Web自动化测试利器—Python+Playwright快速上手自动化实战指南(限时开放)

文章目录 前言一.playwright是什么二.python引入playwright1.安装2.playwright命令行参数3.playwright codegen自动生成代码4.Chrome和Chromium有什么关系&#xff1f; 三.基本概念1. 无头浏览器&#xff08;Headless Browser&#xff09;2.同步和异步模式操作playwright2.1.同…

Java流程控制03:Switch选择结构

视频链接&#xff1a;Java流程控制05&#xff1a;Switch选择结构_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p37&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java 中的 switch 选择结构是一种控制流程语句&#xff0c;它允许程序根据一个变量…

JVM动态字节码注入工具-Byteman

Byteman是一个字节码操作工具&#xff0c;它使得在加载时或在应用程序运行时更改Java应用程序的操作变得简单。它无需重写或重新编译原始程序即可工作。实际上&#xff0c;Byteman甚至可以用来修改Java代码&#xff0c;这些代码构成了Java虚拟机的一部分&#xff0c;比如String…

商用自动油炸机流水线 鸡米花油炸设备的优势;

油炸机的优势主要包括操作简单、一机多用、油水分离、大容量油缸、过滤残渣设置、自动出料设置、智能控制面板、材质优良。 操作简单‌&#xff1a;油炸机操作简单&#xff0c;可单人操作&#xff0c;保证了操作人员的身体健康&#xff0c;无油烟&#xff0c;减少了厨房的污染。…

TinyWebserver的复现与改进(6):定时器处理非活动连接

如果客户端长时间没有动作&#xff0c;会占用了许多连接资源&#xff0c;严重影响服务器的性能。因此需要通过实现一个服务器定时器&#xff0c;处理这种非活跃连接&#xff0c;释放连接资源。 定时器处理流程 SIGALARM触发&#xff1a;整个流程开始于一个 SIGALARM 信号&…

Golang基于DTM的分布式事务TCC实战

Golang基于DTM的分布式事务SAGA实战-CSDN博客 源代码&#xff1a;https://github.com/Ssummer520/dtm-gin 代码在宿主机运行 docker network:bridge docker安装,安装成功后可以访问http://localhost:36789/ 打开dtm事务web-ui docker run -itd --name dtm -p 36789:36789 -p…

阿布吞的基础使用——Ubuntu

Ubuntu是Linux系统的发行版&#xff0c;Linux操作系统中比较流行的一个版本&#xff0c;广泛用于个人电脑、服务器和嵌入式设备。今天来简单讲解一下Ubuntu的基础使用。 1. 桌面环境 登录&#xff1a;安装完成后&#xff0c;启动计算机&#xff0c;输入用户名和密码登录到 Ub…

基于springboot的车辆违章信息管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【CMake】学习笔记1

文章目录 1. CMake概述2. 编写一个简单的CMakeLists.txt2.1注释2.1.1 注释行2.1.2 块注释 2.1 只有源文件 3. CMake中set使用set 基本使用set指定使用C标准set指定输出路径 4. 搜索文件 1. CMake概述 CMake 是一个项目构建工具&#xff0c;并且是跨平台的。关于项目构建我们所熟…