Springboot+Vue项目-基于Java+MySQL的影院订票系统(附源码+演示视频+LW)

news2024/11/27 8:43:52

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 Python毕业设计
🌎微信小程序毕业设计

开发环境

开发语言:Java
框架:Springboot+Vue
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7
数据库工具:Navicat12
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器

演示视频

springboot279影院订票系统的设计与实现录像

原版高清演示视频-编号:279
https://pan.quark.cn/s/5cda95b17ee0

源码下载地址:

https://download.csdn.net/download/2301_76953549/89100426

LW目录

【如需全文请按文末获取联系】
在这里插入图片描述
在这里插入图片描述

目录

  • 开发环境
  • 演示视频
  • 源码下载地址:
  • LW目录
  • 一、项目简介
  • 二、系统设计
    • 2.1软件功能模块设计
    • 2.2数据库设计
  • 三、系统项目部分截图
    • 3.1管理员功能介绍
  • 四、部分核心代码
    • 4.1 用户部分
  • 获取源码或论文

一、项目简介

管理员管理电影管理,论坛管理,公告信息管理等功能。影院订票系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。

二、系统设计

2.1软件功能模块设计

在这里插入图片描述

2.2数据库设计

(1)下图是电影评价实体和其具备的属性。
在这里插入图片描述
(2)下图是电影订单实体和其具备的属性。
在这里插入图片描述

(3)下图是论坛实体和其具备的属性。
在这里插入图片描述
(4)下图是用户实体和其具备的属性。
在这里插入图片描述
(5)下图是电影实体和其具备的属性。在这里插入图片描述
(6)下图是公告信息实体和其具备的属性。
在这里插入图片描述
(9)下图是电影收藏实体和其具备的属性。
在这里插入图片描述

三、系统项目部分截图

3.1管理员功能介绍

电影列表
如图5.1显示的就是电影列表页面,此页面提供给管理员的功能有:查看电影、新增电影、修改电影、删除电影等。
在这里插入图片描述
公告信息管理
公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。下图就是公告信息管理页面。
在这里插入图片描述

四、部分核心代码

4.1 用户部分


package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 电影订单
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/dianyingOrder")
public class DianyingOrderController {
    private static final Logger logger = LoggerFactory.getLogger(DianyingOrderController.class);

    @Autowired
    private DianyingOrderService dianyingOrderService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private DianyingService dianyingService;
    @Autowired
    private YonghuService yonghuService;
@Autowired
private DianyingCommentbackService dianyingCommentbackService;



    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = dianyingOrderService.queryPage(params);

        //字典表数据转换
        List<DianyingOrderView> list =(List<DianyingOrderView>)page.getList();
        for(DianyingOrderView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);
        if(dianyingOrder !=null){
            //entity转view
            DianyingOrderView view = new DianyingOrderView();
            BeanUtils.copyProperties( dianyingOrder , view );//把实体数据重构到view中

                //级联表
                DianyingEntity dianying = dianyingService.selectById(dianyingOrder.getDianyingId());
                if(dianying != null){
                    BeanUtils.copyProperties( dianying , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setDianyingId(dianying.getId());
                }
                //级联表
                YonghuEntity yonghu = yonghuService.selectById(dianyingOrder.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody DianyingOrderEntity dianyingOrder, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,dianyingOrder:{}",this.getClass().getName(),dianyingOrder.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            dianyingOrder.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        dianyingOrder.setInsertTime(new Date());
        dianyingOrder.setCreateTime(new Date());
        dianyingOrderService.insert(dianyingOrder);
        return R.ok();
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody DianyingOrderEntity dianyingOrder, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,dianyingOrder:{}",this.getClass().getName(),dianyingOrder.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(StringUtil.isEmpty(role))
//            return R.error(511,"权限为空");
//        else if("用户".equals(role))
//            dianyingOrder.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<DianyingOrderEntity> queryWrapper = new EntityWrapper<DianyingOrderEntity>()
            .eq("id",0)
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DianyingOrderEntity dianyingOrderEntity = dianyingOrderService.selectOne(queryWrapper);
        if(dianyingOrderEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      dianyingOrder.set
            //  }
            dianyingOrderService.updateById(dianyingOrder);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        dianyingOrderService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<DianyingOrderEntity> dianyingOrderList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            DianyingOrderEntity dianyingOrderEntity = new DianyingOrderEntity();
//                            dianyingOrderEntity.setDianyingOrderUuidNumber(data.get(0));                    //订单号 要改的
//                            dianyingOrderEntity.setDianyingId(Integer.valueOf(data.get(0)));   //电影 要改的
//                            dianyingOrderEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            dianyingOrderEntity.setBuyZuoweiNumber(data.get(0));                    //购买的座位 要改的
//                            dianyingOrderEntity.setBuyZuoweiTime(new Date(data.get(0)));          //购买的日期 要改的
//                            dianyingOrderEntity.setDianyingOrderTruePrice(data.get(0));                    //实付价格 要改的
//                            dianyingOrderEntity.setDianyingOrderTypes(Integer.valueOf(data.get(0)));   //订单类型 要改的
//                            dianyingOrderEntity.setDianyingOrderPaymentTypes(Integer.valueOf(data.get(0)));   //支付类型 要改的
//                            dianyingOrderEntity.setInsertTime(date);//时间
//                            dianyingOrderEntity.setCreateTime(date);//时间
                            dianyingOrderList.add(dianyingOrderEntity);


                            //把要查询是否重复的字段放入map中
                                //订单号
                                if(seachFields.containsKey("dianyingOrderUuidNumber")){
                                    List<String> dianyingOrderUuidNumber = seachFields.get("dianyingOrderUuidNumber");
                                    dianyingOrderUuidNumber.add(data.get(0));//要改的
                                }else{
                                    List<String> dianyingOrderUuidNumber = new ArrayList<>();
                                    dianyingOrderUuidNumber.add(data.get(0));//要改的
                                    seachFields.put("dianyingOrderUuidNumber",dianyingOrderUuidNumber);
                                }
                        }

                        //查询是否重复
                         //订单号
                        List<DianyingOrderEntity> dianyingOrderEntities_dianyingOrderUuidNumber = dianyingOrderService.selectList(new EntityWrapper<DianyingOrderEntity>().in("dianying_order_uuid_number", seachFields.get("dianyingOrderUuidNumber")));
                        if(dianyingOrderEntities_dianyingOrderUuidNumber.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(DianyingOrderEntity s:dianyingOrderEntities_dianyingOrderUuidNumber){
                                repeatFields.add(s.getDianyingOrderUuidNumber());
                            }
                            return R.error(511,"数据库的该表中的 [订单号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                        dianyingOrderService.insertBatch(dianyingOrderList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }





    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = dianyingOrderService.queryPage(params);

        //字典表数据转换
        List<DianyingOrderView> list =(List<DianyingOrderView>)page.getList();
        for(DianyingOrderView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);
            if(dianyingOrder !=null){


                //entity转view
                DianyingOrderView view = new DianyingOrderView();
                BeanUtils.copyProperties( dianyingOrder , view );//把实体数据重构到view中

                //级联表
                    DianyingEntity dianying = dianyingService.selectById(dianyingOrder.getDianyingId());
                if(dianying != null){
                    BeanUtils.copyProperties( dianying , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setDianyingId(dianying.getId());
                }
                //级联表
                    YonghuEntity yonghu = yonghuService.selectById(dianyingOrder.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody DianyingOrderEntity dianyingOrder, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,dianyingOrder:{}",this.getClass().getName(),dianyingOrder.toString());
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if("用户".equals(role)){
            DianyingEntity dianyingEntity = dianyingService.selectById(dianyingOrder.getDianyingId());
            if(dianyingEntity == null){
                return R.error(511,"查不到该物品");
            }
            // Double dianyingNewMoney = dianyingEntity.getDianyingNewMoney();

            if(false){
            }
            else if(dianyingEntity.getDianyingNewMoney() == null){
                return R.error(511,"物品价格不能为空");
            }

            //计算所获得积分
            Double buyJifen =0.0;
            Integer userId = (Integer) request.getSession().getAttribute("userId");
            YonghuEntity yonghuEntity = yonghuService.selectById(userId);
            if(yonghuEntity == null)
                return R.error(511,"用户不能为空");
            if(yonghuEntity.getNewMoney() == null)
                return R.error(511,"用户金额不能为空");
            double balance = yonghuEntity.getNewMoney() - dianyingEntity.getDianyingNewMoney()*(dianyingOrder.getBuyZuoweiNumber().split(",").length);//余额
            if(balance<0)
                return R.error(511,"余额不够支付");
            dianyingOrder.setDianyingOrderTypes(3); //设置订单状态为已支付
            dianyingOrder.setDianyingOrderTruePrice(dianyingEntity.getDianyingNewMoney()*(dianyingOrder.getBuyZuoweiNumber().split(",").length)); //设置实付价格
            dianyingOrder.setYonghuId(userId); //设置订单支付人id
            dianyingOrder.setDianyingOrderPaymentTypes(1);
            dianyingOrder.setInsertTime(new Date());
            dianyingOrder.setCreateTime(new Date());
                dianyingOrderService.insert(dianyingOrder);//新增订单
            yonghuEntity.setNewMoney(balance);//设置金额
            yonghuService.updateById(yonghuEntity);
            return R.ok();
        }else{
            return R.error(511,"您没有权限支付订单");
        }
    }











    /**
    * 退款
    */
    @RequestMapping("/refund")
    public R refund(Integer id, HttpServletRequest request){
        logger.debug("refund方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        String role = String.valueOf(request.getSession().getAttribute("role"));

        if("用户".equals(role)){
            DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);
            Integer buyNumber = dianyingOrder.getBuyZuoweiNumber().split(",").length;
            Integer dianyingOrderPaymentTypes = dianyingOrder.getDianyingOrderPaymentTypes();
            Integer dianyingId = dianyingOrder.getDianyingId();
            if(dianyingId == null)
                return R.error(511,"查不到该物品");
            DianyingEntity dianyingEntity = dianyingService.selectById(dianyingId);
            if(dianyingEntity == null)
                return R.error(511,"查不到该物品");
            Double dianyingNewMoney = dianyingEntity.getDianyingNewMoney();
            if(dianyingNewMoney == null)
                return R.error(511,"物品价格不能为空");

            Integer userId = (Integer) request.getSession().getAttribute("userId");
            YonghuEntity yonghuEntity = yonghuService.selectById(userId);
            if(yonghuEntity == null)
                return R.error(511,"用户不能为空");
            if(yonghuEntity.getNewMoney() == null)
                return R.error(511,"用户金额不能为空");

            Double zhekou = 1.0;


            //判断是什么支付方式 1代表余额 2代表积分
            if(dianyingOrderPaymentTypes == 1){//余额支付
                //计算金额
                Double money = dianyingEntity.getDianyingNewMoney() * buyNumber  * zhekou;
                //计算所获得积分
                Double buyJifen = 0.0;
                yonghuEntity.setNewMoney(yonghuEntity.getNewMoney() + money); //设置金额


            }




            dianyingOrder.setDianyingOrderTypes(2);//设置订单状态为退款
            dianyingOrderService.updateById(dianyingOrder);//根据id更新
            yonghuService.updateById(yonghuEntity);//更新用户信息
            dianyingService.updateById(dianyingEntity);//更新订单中物品的信息
            return R.ok();
        }else{
            return R.error(511,"您没有权限退款");
        }
    }


    /**
     * 发货
     */
    @RequestMapping("/deliver")
    public R deliver(Integer id){
        logger.debug("refund:,,Controller:{},,ids:{}",this.getClass().getName(),id.toString());
        DianyingOrderEntity  dianyingOrderEntity = new  DianyingOrderEntity();;
        dianyingOrderEntity.setId(id);
        dianyingOrderEntity.setDianyingOrderTypes(4);
        boolean b =  dianyingOrderService.updateById( dianyingOrderEntity);
        if(!b){
            return R.error("发货出错");
        }
        return R.ok();
    }









    /**
     * 收货
     */
    @RequestMapping("/receiving")
    public R receiving(Integer id){
        logger.debug("refund:,,Controller:{},,ids:{}",this.getClass().getName(),id.toString());
        DianyingOrderEntity  dianyingOrderEntity = new  DianyingOrderEntity();
        dianyingOrderEntity.setId(id);
        dianyingOrderEntity.setDianyingOrderTypes(5);
        boolean b =  dianyingOrderService.updateById( dianyingOrderEntity);
        if(!b){
            return R.error("收货出错");
        }
        return R.ok();
    }



    /**
    * 评价
    */
    @RequestMapping("/commentback")
    public R commentback(Integer id, String commentbackText,HttpServletRequest request){
        logger.debug("commentback方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if("用户".equals(role)){
            DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);
        if(dianyingOrder == null)
            return R.error(511,"查不到该订单");
        Integer dianyingId = dianyingOrder.getDianyingId();
        if(dianyingId == null)
            return R.error(511,"查不到该物品");

        DianyingCommentbackEntity dianyingCommentbackEntity = new DianyingCommentbackEntity();
            dianyingCommentbackEntity.setId(id);
            dianyingCommentbackEntity.setDianyingId(dianyingId);
            dianyingCommentbackEntity.setYonghuId((Integer) request.getSession().getAttribute("userId"));
            dianyingCommentbackEntity.setDianyingCommentbackText(commentbackText);
            dianyingCommentbackEntity.setReplyText(null);
            dianyingCommentbackEntity.setInsertTime(new Date());
            dianyingCommentbackEntity.setUpdateTime(null);
            dianyingCommentbackEntity.setCreateTime(new Date());
            dianyingCommentbackService.insert(dianyingCommentbackEntity);

            dianyingOrder.setDianyingOrderTypes(1);//设置订单状态为已评价
            dianyingOrderService.updateById(dianyingOrder);//根据id更新
            return R.ok();
        }else{
            return R.error(511,"您没有权限评价");
        }
    }







}

获取源码或论文

如需对应的LW或源码,以及其他定制需求,也可以点我头像查看个人简介联系。

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

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

相关文章

uni-app+vue3 +uni.connectSocket 使用websocket

前言 最近在uni-appvue3websocket实现聊天功能&#xff0c;在使用websocket还是遇到很多问题 这次因为是app手机应用&#xff0c;就没有使用websocket对象&#xff0c;使用的是uni-app的uni.connectSocket 为了方便测试这次用的是node.js一个简单的dom&#xff0c;来联调模拟…

网络基础——路由

网络基础——路由 要想网络畅通&#xff0c;应让网络中的路由器知道如何转发数据包到各个网段。路由器根据路由表来转发数据包&#xff0c;而路由表是通过直连网络、静态路由以及动态路由来构建的。 route命令&#xff0c;底层是使用ioctl实现&#xff1b;ip命令&#xff0c;…

洛谷 P3391:文艺平衡树 ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P3391【题目描述】 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列。 其中需要提供以下操作&#xff1a;翻转一个区间&#xff0c;例如原有序序列是 5 4 3 2 1&#xff0c;翻转区间…

大模型爱好者的福音,有了它个人电脑也可以运行大模型了

GPT4ALL是一款可以运行在个人电脑上的大模型系统&#xff0c;不需要GPU即可运行&#xff0c;目前支持mac&#xff0c;linux和windows系统。 什么是GPT4ALL&#xff1f; 不论学习任何东西&#xff0c;首先要明白它是个什么东西。 Open-source large language models that run …

【C 数据结构-图】2. 图的存储结构

文章目录 【 1. 图的顺序存储结构 】1.1 基本原理1.2 顺序存储结构的 C 实现 【 2. 图的链式存储结构 】2.1 图的临接表存储结构2.1.1 临接表的 基本原理2.1.2 临接表的 链表节点2.1.3 邻接表 各结构体的C实现2.1.4 临接表 计算顶点的出度和入度邻接表计算 无向图的出度和入度邻…

IT项目管理【太原理工大学】前置知识点精简总结

根据上次考试以及其他方向考试的经验&#xff0c;这届考试可能偏向出题更灵活&#xff0c;能死记硬背或套公式的题减少&#xff0c;多做准备呀各位大三苦逼人&#xff0c;挂了补考还得回来补考凸^-^凸共勉 &#xff08;另外&#xff0c;别作弊&#xff0c;今天人工智能考试逮住…

mib browser读取mib文件的oid(飞塔防火墙为例)

在配置zabbix监控的时候,配置监控项最为麻烦,一般我们都会套用模板,这种方式比较简单,但是有些设备就是没有现成的zabbix模板,怎么办? 今天我们使用MIB Browser来获取设备SNMP的OID,然后加入zabbix 。 1.什么是MIB Browser SNMP客户端工具MIB Browser, 全名iReasonin…

牛客网刷题 | BC78 KiKi说祝福语

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 2020年来到了&#…

synchronized与volatile关键字

1.synchronized的特性 1.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 syn…

【Linux网络】PXE批量网络装机

目录 一、系统装机 1.1 三种引导方式 1.2 系统安装过程 1.3 四大重要文件 二、PXE 2.1 PXE实现原理 2.2 PXE手动搭建过程 2.3 kickstart配合pxe完成批量自动安装 一、系统装机 1.1 三种引导方式 硬盘光驱(U盘)网络启动 1.2 系统安装过程 加载boot loader加载启动安…

国内SaaS遇冷?未来企业服务赛道是否还有机会?

引言 SaaS 自诞生起&#xff0c;在国内的发展便始终是危与机并存的&#xff0c;虽然使用 SaaS 的企业在逐渐增多&#xff0c;但唱衰 SaaS 的声音也始终不绝于耳。企业付费意愿低&#xff0c;使用产品并不能带来直接的营收提升。SaaS 产品面临着多种不同问题。 在企业对软件付费…

静电纺丝壳聚糖纳米纤维膜

静电纺丝壳聚糖纳米纤维膜是通过静电纺丝技术制备的一种由壳聚糖纳米纤维组成的薄膜材料。静电纺丝技术是一种有效的制备微纳米纤维的方法&#xff0c;可以将高分子溶液或熔体在静电场作用下喷射成纤维状物质&#xff0c;进而形成纳米纤维膜。 壳聚糖是一种天然高分子多糖&…

程序员的实用神器:助力软件开发的利器 ️

程序员的实用神器&#xff1a;助力软件开发的利器 &#x1f6e0;️ 程序员的实用神器&#xff1a;助力软件开发的利器 &#x1f6e0;️引言摘要自动化测试工具&#xff1a;保障代码质量的利剑 &#x1f5e1;️编写高效测试用例 持续集成/持续部署工具&#xff1a;加速交付的利器…

Linux命名管道的创建及应用

目录 一、命名管道的定义即功能 1.1创建命名管道 1.2匿名管道和命名管道的区别 1.3命名管道的打开规则 1.4系统调用unlink 二、进程间命名管道的创建及使用 2.1Comm.hhp 2.2PipeServer.cc 2.3PipeClient.cc 一、命名管道的定义即功能 管道应用的一个限制就是只能在具有…

[XR806开发板试用] XR806 调用cjson 实现数据序列化

很荣幸获得极术设区提供的这次试用机会&#xff0c;可以接触鸿蒙操作系统。我工作接触最多的是linux 平台的嵌入式ARM平台较多&#xff0c;这次跑了下鸿蒙&#xff0c;也非常有趣。 不过接进年底了&#xff0c;日常大小琐碎事情突然多了起来&#xff0c;测评的比较匆忙&#x…

Java的Fork-Join简单介绍

Java的Fork-Join框架是Java 7引入的一个用于并行处理的轻量级框架&#xff0c;它基于分治策略&#xff08;Divide and Conquer&#xff09;&#xff0c;特别适合于那些可以被分解为多个子任务的任务。Fork-Join框架的核心思想是将一个大任务&#xff08;Task&#xff09;拆分成…

为何大学计算机专业以C语言入门?探究C语言入门的好处

为何大学计算机专业以C语言入门&#xff1f;探究C语言入门的好处 在大学计算机专业中&#xff0c;C语言常作为入门语言&#xff0c;这并非偶然。C语言具有一些独特的优势&#xff0c;使其成为计算机科学教育中的理想选择。本文将探讨为何大学计算机专业选择以C语言入门&#xf…

在Unity中实现分页数据显示和分页控制

参考&#xff1a;用两种简单的方式实现unity的分页效果 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Rendering.VirtualTexturing; using UnityEngine.TerrainUtils;public class PageControll…

简易录制视频做3D高斯

系统环境 ubuntu20 &#xff0c;cuda11.8&#xff0c;anaconda配置好了3D高斯的环境。 具体参考3D高斯环境配置&#xff1a;https://blog.csdn.net/Son_of_the_Bronx/article/details/138527329?spm1001.2014.3001.5501 colmap安装&#xff1a;https://blog.csdn.net/Son_of…

【网络基础2】深入理解TCP协议:协议段、可靠性、各种机制

文章目录 1. TCP协议段格式1.1. 如何解包 / 向上交付1.1.1. 交付1.1.2. 解包 1.2. 如何理解可靠性1.2.1. 确认应答机制&#xff08;ACK&#xff09;1.2.2. 序号 与 确认序号 2. TCP做到全双工的原因2.1. 16位窗口大小2.2. 6个标记位 3. 如何理解连接3.1 连接管理机制3.1.1. 三次…