【Java程序设计实训】基于B/S架构的MyShop商城

news2024/11/16 3:43:49

MYSHOP商城

  • 实验目的
  • 实验概述
  • 系统功能概述
    • Myshop 商城概述
    • 系统开发分析
    • 功能列表
    • 系统用例图
    • 系统活动图
  • 数据库设计
  • 运作·界面展示
    • 用户管理模块
      • 新用户注册
      • 用户登录
      • 商城首页与用户退出
    • 商品模块
      • 商品分页展示
      • 查看商品详情信息
    • 购物车模块
      • 空购物车页面
      • 加入商品到购物车
    • 订单模块
      • 提交订单并显示订单信息
      • 支付页面
    • 地址模块
      • 查看收货地址
    • 后台模块
      • 管理员登录页面
      • 管理员中用户管理页面
      • 管理员之商品管理页面
      • 管理员之商品添加页面
  • 项目代码展示
    • 项目结构
    • UserController.java
    • UserDao.java
    • UserDaoImpl.java
    • User.java
    • UserService.java
    • UserServiceImpl.java
  • 完整报告与代码下载

实验目的

本次实验旨在通过开发一个基于 B/S 架构的电商平台,深入理解 Web 开发技术,掌握相关知识和技能。具体实验目的如下:

  1. 学习和掌握 Web 开发的基本知识和技术,包括前端技术、后端技术、数据库技术等,理解 B/S架构的基本原理和优势。
  2. 掌握常用的 Web 开发框架和工具,了解它们的作用和使用方法。
  3. 熟悉电商平台的业务流程和功能需求,掌握系统开发的基本方法和流程,包括需求分析、系统设计、系统开发等环节。

实验概述

• 系统名称:基于 B/S 架构的 MyShop 商城
• 系统开发背景:
对于用户来说,MyShop 商城的创作目的是为其提供一个完整的电商购物平台,让用户能够方便、快捷地购买自己所需的商品。用户可以通过该平台进行商品浏览、购物车管理、订单管理、支付等操作,同时也可以享受到平台提供的优惠活动和促销信息。MyShop 商城还会为用户提供一个安全、可靠的购物环境。平台会采取各种措施来保护用户的个人信息和支付安全,例如加密传输、防止 SQL 注入、防止 XSS 攻击等。同时,平台也会对商家进行审核和监管,确保商品的质量和售后服务的质量,保障用户的权益。

• 系统用户:会员,游客,管理员。
• 编程环境:Java、Tomcat、MySQL,jsp、CSS、JavaScript 等,其中使用 C3P0 连接池技术管理数据库连接,

系统功能概述

Myshop 商城概述

MyShop 商城是一个完整的电商购物平台,可通过正确的用户名及其密码进入系统购物。系统分为七大模块,商品展示模块、用户模块、购物车模块、订单模块、支付模块、后台模块。该系统分为用户端和管理端两部分。
• 用户端:主要功能包括浏览商品,加入购物车,支付订单,查询订单。
• 管理端:主要功能包括增加、删除、修改、查找会员、订单信息。

该系统有三个参与者,分别为会员、游客和管理员。会员登录后可以浏览商品信息,将商品加入购物车,下单,支付订单;游客可以浏览商品信息,但在加入购物车时会弹出会员登录注册窗口;管理员登录后可以管理商品信息、会员信息以及订单信息。

系统开发分析

需求分析:
首先,需要对 Myshop 商城的需求进行分析,明确商城的功能和特点。商城的主要功能包括用户注册、登录、浏览商品、购物车、下单、支付、订单管理等。商城的特点是需要具备良好的用户体验、安全性、性能等方面的要求。
2. 技术选型:
根据项目需求,选择合适的开发框架和技术。在该项目中,我们选择了 jsp、CSS、js 和 Java 技术作为前端和后端的主要技术栈。这些技术都具有较高的性能和可扩展性,可以满足项目的需求。
3. 开发环境:
在选择好技术栈之后,需要搭建相应的开发环境。我们选用了 IntelliJ IDEA 集成开发环境
4. 数据库设计:
根据项目需求,设计合适的数据库结构,包括商品信息、用户信息、订单信息等, 在设计数据库时,需要考虑到商城的数据量和数据结构,以及数据的安全性和性能。
5. 系统架构设计:
在系统架构设计方面,需要考虑到商城的各个模块之间的交互和调用关系,以及系统的可扩展性和可维护性。可以采用分层架构,将系统分为表示层、业务逻辑层、数据访问层等多个层次,实现各个层之间的解耦。
6. 编码实现:
在代码实现方面,需要按照需求分析和系统架构设计的要求,完成各个模块的代码实现。可以先实现用户注册、登录等基本功能,然后再逐步实现商品浏览、购物车、下单、支付、订单管理等功能。在代码实现过程中,需要注意代码的规范性、可读性和可维护性。
7. 测试调试:
在编码实现完成之后,需要进行测试和部署。在该项目中,我们采用了单元测试和集成测试等测试方式,保证系统的质量。同时,需要将系统部署到服务器上,并进行性能测试和安全测试等,确保各个模块的功能正常运行和系统的稳定性和安全性。
8. 优化完善与维护:
对项目进行优化和完善,提高系统的性能和用户体验, 及时修复系统中出现的问题。

功能列表

在这里插入图片描述

系统用例图

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

系统活动图

在这里插入图片描述

数据库设计

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

运作·界面展示

用户管理模块

新用户注册

在这里插入图片描述

用户登录

在这里插入图片描述

商城首页与用户退出

点击注销,实现用户退出功能退出后返回首页
在这里插入图片描述

商品模块

商品分页展示

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

查看商品详情信息

在这里插入图片描述

购物车模块

空购物车页面

在这里插入图片描述

加入商品到购物车

在这里插入图片描述

订单模块

提交订单并显示订单信息

在这里插入图片描述

支付页面

在这里插入图片描述

地址模块

查看收货地址

在这里插入图片描述

后台模块

管理员登录页面

在这里插入图片描述

管理员中用户管理页面

在这里插入图片描述

管理员之商品管理页面

在这里插入图片描述

管理员之商品添加页面

在这里插入图片描述

项目代码展示

注:本项目代码参考B站一位博主写的

项目结构

在这里插入图片描述

UserController.java

package com.itqf.controller;

import com.itqf.entity.User;
import com.itqf.service.UserService;
import com.itqf.service.impl.UserServiceImpl;
import com.itqf.utils.Base64Utils;
import com.itqf.utils.Constants;
import com.itqf.utils.MD5Utils;
import com.itqf.utils.RandomUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.Map;

/**
 * 用户用户模块的controller
 */
@WebServlet("/user")
public class UserController extends BaseServlet {

    public String check(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        //1.获取用户名
        String username = request.getParameter("username");
        if (username == null) {
            return Constants.HAS_USER; //不能注册
        }
        // 2.调用业务逻辑判断用户名是否存在
        UserService userService = new UserServiceImpl();
        boolean b = userService.checkedUser(username);
        // 3.响应字符串  存在:1 不存在:0
        if (b) {
            //用户存在
            return Constants.HAS_USER;
        }
        return Constants.NOT_HAS_USER;
    }

    //注册
    public String register(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        //1.获取用户信息
        Map<String, String[]> parameterMap = request.getParameterMap();
        User user = new User();
        try {
            BeanUtils.populate(user, parameterMap); //映射到user
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        //2.完善用户信息
        user.setUstatus(Constants.USER_NOT_ACTIVE); //默认未激活状态0,激活1
        user.setUrole(Constants.ROLE_CUSTOMER); //普通客户0 管理员1
        user.setCode(RandomUtils.createActive());//激活码
        // 密码加密,md5进行加密
        user.setUpassword(MD5Utils.md5(user.getUpassword()));

        //3.调用用户业务逻辑进行注册
        UserService userService = new UserServiceImpl();
        try {
            userService.registerUser(user);
        } catch (SQLException e) {
            e.printStackTrace();
            request.setAttribute("registerMsg", "注册失败!");
            return Constants.FORWARD + "/register.jsp";
        }

        //4.响应 注册成功跳转激活页面
        return Constants.FORWARD + "/registerSuccess.jsp";
    }

    public String active(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        //1.获取激活码
        //已经转成base64
        String c = request.getParameter("c");
        System.out.println("c="+c);
        //base64翻转
        String code = Base64Utils.decode(c);
        //2.调用激活的业务逻辑
        UserService userService = new UserServiceImpl();
        int i = userService.activeUser(code);

        //3.响应(激活失败(code没有找到) 已经激活 激活成功)
        if (i == Constants.ACTIVE_FAIL) {
            request.setAttribute("msg", "未激活成功!");
        } else if (i == Constants.ACTIVE_SUCCESS) {
            request.setAttribute("msg", "激活成功,请登录!");
        } else {
            request.setAttribute("msg", "已经激活");
        }
        return Constants.FORWARD + "/message.jsp";
    }

    /**
     * 1.前端提交账号密码和验证码
     * 2.对比验证码 成功 ---》 对比账号密码
     * 3.对比账号密码
     * 失败: --》 回到登录页面 进行提示
     * 成功: --》 未激活  登录页面 进行提示
     * --》 已激活  程序的首页  将用户放入session共享域
     */

    public String login(HttpServletRequest request, HttpServletResponse response) throws SQLException {

        //1.获取请求参数(用户名,密码,验证码)
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String code = request.getParameter("code");//用户输入的验证码
        String auto = request.getParameter("auto"); //自动登录标识
        //正确的验证码
        HttpSession session = request.getSession();
        String codestr = (String) session.getAttribute("code");


        //2.判断验证码是否正确
        // 不考虑大小写比较
//        System.out.println("输入:"+code);
//        System.out.println("正确"+codestr);
//        System.out.println(code == null || !code.equalsIgnoreCase(codestr));

        if (code == null || !code.equalsIgnoreCase(codestr)) {
            request.setAttribute("msg", "验证码错误");
            return Constants.FORWARD + "/login.jsp";
        }
        //3.调用业务逻辑判断账户密码
        UserService userService = new UserServiceImpl();
        User user = userService.login(username, password);

        //4.响应
        //user 等于null证明账号或者密码错误
        //user 不为null 但是user的状态是未激活状态
        if (user == null) {
            request.setAttribute("msg", "账号或者密码错误");
            return Constants.FORWARD + "/login.jsp";
        }
        if (user.getUstatus().equals(Constants.USER_NOT_ACTIVE)) {
            request.setAttribute("msg", "账号未激活!");
            return Constants.FORWARD + "/login.jsp";
        }
        //把用户放在共享域session中
        session.setAttribute("loginUser", user);

        //判断是否勾选自动登录
        if (auto == null) {
            //没有勾选
            //将本地浏览器的存储的cookie清空
            Cookie cookie = new Cookie(Constants.AUTO_NAME, "");
            cookie.setPath("/");//将 Cookie 的路径设置为根路径,表示该 Cookie 对于整个网站都是可见的
            cookie.setMaxAge(0);//最大存活时间设置为 0
            response.addCookie(cookie);
        } else {
            String content = username + Constants.FLAG + password;
            content = Base64Utils.encode(content);
            //自动登录数据库存储2周
            Cookie cookie = new Cookie(Constants.AUTO_NAME, content);
            cookie.setPath("/");
            cookie.setMaxAge(14 * 24 * 60 * 60);
            response.addCookie(cookie);
        }

        return Constants.REDIRECT + "/index.jsp";
    }

    /**
     * 注销登录!清空数据!跳转到登录页面
     *
     * @param request
     * @param response
     * @return
     */
    public String logOut(HttpServletRequest request, HttpServletResponse response) {
        //1.清空session中用户数据
        HttpSession session = request.getSession();
        session.removeAttribute("loginUser");

        //2.清空和覆盖cooki存储的自动登录
        Cookie cookie = new Cookie(Constants.AUTO_NAME, "");
        cookie.setPath("/");
        cookie.setMaxAge(0);
        response.addCookie(cookie);

        //3.转发到登录页面
        request.setAttribute("msg", "注销登录成功");
        return  Constants.FORWARD + "/login.jsp";
    }

}

UserDao.java

package com.itqf.dao;


import com.itqf.entity.User;

import java.sql.SQLException;

/**
 * 负责用户模块数据库访问的接口
 */
public interface UserDao {
    /**
     * 根据用户名查询用户是否存在
     * @param username 查询的条件
     * @return 返回对应的用户数据
     */
    User  selectUserByUname(String username) throws SQLException;

    /**
     * 插入用户数据
     * @param user
     * @return
     * @throws
     */
    int insertUser(User user) throws SQLException;

    /**
     * 根据 激活码code 返回 User
     * @param code
     * @return
     */
    User selectUserByCode(String code) throws SQLException;

    /**
     * 激活更新数据
     * @param uid
     * @return
     */
    int updataStatusByid(int uid) throws SQLException;



}

UserDaoImpl.java

package com.itqf.dao.impl;

import com.itqf.dao.UserDao;
import com.itqf.entity.User;
import com.itqf.utils.C3P0Utils;
import com.itqf.utils.Constants;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.SQLException;

/**
 * 数据库访问实现类
 */
public class UserDaoImpl implements UserDao {
    @Override
    public User selectUserByUname(String username) throws SQLException {
        //1.创建一个QueryRunner对象 获取一个数据库连接池数据源。C3P0是一个流行的开源数据库连接池
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        //2.执行SQL语句
        String sql = "select u_id as uid , u_name as username , u_password as upassword" +
                ", u_sex as usex , u_status as ustatus , u_code as code , u_email as email " +
                ", u_role as urole from user where u_name = ?";
        User user = queryRunner.query(sql,new BeanHandler<User>(User.class),username); //将查询结果映射到一个Java对象中

        return user;
    }

    @Override
    public int insertUser(User user) throws SQLException {
        //1.创建一个QueryRunner对象 获取一个数据库连接池数据源。C3P0是一个流行的开源数据库连接池
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        //2.执行SQL语句 插入数据
        String sql = "insert into user (u_name,u_password,u_sex,u_status," +
                "u_code,u_email,u_role) value (?,?,?,?,?,?,?)";

        int rows = queryRunner.update(sql, user.getUsername(), user.getUpassword(), user.getUsex(),
                user.getUstatus(), user.getCode(), user.getEmail(), user.getUrole());
        return rows;

    }

    @Override
    public User selectUserByCode(String code) throws SQLException {
        //1.创建一个QueryRunner对象 获取一个数据库连接池数据源。C3P0是一个流行的开源数据库连接池
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        //2.执行SQL语句
        String sql = "select u_id as uid , u_name as username , u_password as upassword" +
                ", u_sex as usex , u_status as ustatus , u_code as code , u_email as email " +
                ", u_role as urole from user where u_code = ?";
        User user = queryRunner.query(sql,new BeanHandler<User>(User.class),code); //将查询结果映射到一个Java对象中

        return user;
    }

    @Override
    public int updataStatusByid(int uid) throws SQLException {
        //1.创建一个QueryRunner对象 获取一个数据库连接池数据源。C3P0是一个流行的开源数据库连接池
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "update user set u_status = ? where u_id = ?";

        int row = queryRunner.update(sql, Constants.USER_ACTIVE, uid);
        return row;
    }
}

User.java

package com.itqf.entity;

import java.io.Serializable;
/**
 * 对应数据库的用户表
 */
public class User implements Serializable {
    private static  final long serialVersionUID = 1L;

    private int uid; //用户ID
    private String username;  //对应的是数据库的uname字段 用户账号
    private String upassword; //密码
    private String usex; //性别
    private String ustatus; //用户的激活状态 0 未激活 1 激活
    private String code; //邮箱激活码
    private String email; //对应的是数据库的uemail字段 邮箱
    private int urole; //用户 0 管理员 1

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", upassword='" + upassword + '\'' +
                ", usex='" + usex + '\'' +
                ", ustatus='" + ustatus + '\'' +
                ", code='" + code + '\'' +
                ", email='" + email + '\'' +
                ", urole=" + urole +
                '}';
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUpassword() {
        return upassword;
    }

    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }

    public String getUsex() {
        return usex;
    }

    public void setUsex(String usex) {
        this.usex = usex;
    }

    public String getUstatus() {
        return ustatus;
    }

    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getUrole() {
        return urole;
    }

    public void setUrole(int urole) {
        this.urole = urole;
    }
}

UserService.java

package com.itqf.service;


import com.itqf.entity.User;

import java.sql.SQLException;

/**
 * 用户模块对应的业务逻辑接口类
 */
public interface UserService {
    /**
     * 检测用户名是够存在
     * @param username 被检测的用户名
     * @return boolean true存在 false不存在
     */
    boolean checkedUser(String username) throws SQLException;

    /**
     * 注册的业务逻辑
     * @param user
     * @return 插入数据影响的行数
     */
    int registerUser(User user) throws SQLException;

    /**
     * 激活方法
     * @param code 根据激活码进行激活
     * @return 三个状态 0激活失败 1激活成功 2已经激活
     */
    int activeUser(String code) throws SQLException;

    /**
     * 登录业务
     * @param username
     * @param password
     * @return
     */
    User login(String username,String password) throws SQLException;
}


UserServiceImpl.java

package com.itqf.service.impl;

import com.itqf.dao.UserDao;
import com.itqf.dao.impl.UserDaoImpl;
import com.itqf.entity.User;
import com.itqf.service.UserService;
import com.itqf.utils.Constants;
import com.itqf.utils.EmailUtils;
import com.itqf.utils.MD5Utils;

import java.sql.SQLException;

public class UserServiceImpl implements UserService {

    /**
     * 验证注册用户名是否可用
     * @param username 被检测的用户名
     * @return
     * @throws SQLException
     */
    @Override
    public boolean checkedUser(String username) throws SQLException {
        //1.创建dao访问对象
        UserDao userDao = new UserDaoImpl();
        //2.执行结果
        User user = userDao.selectUserByUname(username);
        //3.处理返回值
        if (user != null) {
            return true;
        }
        return false;
    }

    /**
     * 用户注册逻辑
     * @param user
     * @return
     * @throws SQLException
     */
    @Override
    public int registerUser(User user) throws SQLException {

        //1.用户保存到数据库
        UserDao userDao = new UserDaoImpl();

        int row = userDao.insertUser(user);

        //2.发送一封邮件
        EmailUtils.sendEmail(user);
        return row;
    }

    /**
     * 激活
     * @param code 根据激活码进行激活
     * @return
     * @throws SQLException
     */
    @Override
    public int activeUser(String code) throws SQLException {
        UserDao userDao = new UserDaoImpl();
        //1.根据激活码查找用户
        User user =userDao.selectUserByCode(code);
        if (user==null){
            return  Constants.ACTIVE_FAIL;//0激活失败
        }
        //2.判断用户是否激活
        if(user.getUstatus().equals(Constants.USER_ACTIVE)){
            return Constants.ACTIVE_ALREADY;
        }
        //3.进行激活操作
        int i =userDao.updataStatusByid(user.getUid());
        if(i>0){
            return Constants.ACTIVE_SUCCESS;
        }
        return Constants.ACTIVE_FAIL;
    }

    /**
     * 登录业务
     * @param username
     * @param password
     * @return
     */
    @Override
    public User login(String username, String password) throws SQLException {
        //1.需要密码用md5处理
        String md5password = MD5Utils.md5(password);

        //2.根据用户名查找用户
        UserDao userDao = new UserDaoImpl();
        User user = userDao.selectUserByUname(username);

        if (user != null && user.getUpassword().equals(md5password)) {
            return user;
        }

        return null;
    }
}

完整报告与代码下载

下载链接

https://download.csdn.net/download/weixin_66397563/87977577

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

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

相关文章

4.32UDP通信实现 4.33广播 4.34组播 4.35本地套接字通信

4.32UDP通信实现 ![在这 udp_client.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h>int main() {// 1.创建一个通信的socketint fd socket(PF_INET, SOCK_DGRAM, 0);if(fd -1) {…

springboot项目外卖管理 day08-缓存优化

文章目录 一、缓存优化问题说明环境搭建导入maven坐标配置yml文件设置序列化器&#xff0c;编写配置类 缓存短信验证码缓存菜品数据实现思路 SpringCacheSpring Cache介绍Spring Cache常用注解Spring Cache使用方式 缓存套餐数据实现思路 一、缓存优化 问题说明 环境搭建 导入…

【Framework】startService启动流程

前言 启动service有两种方式&#xff1a;startService和bindService。 这一篇先讲startService&#xff0c;读者如果只想看流程图&#xff0c;可以直接跳到总结。 1. ContextImpl 代码路径&#xff1a;frameworks\base\core\java\android\app\ContextImpl.java 1.1 startServ…

SHA-256算法及示例

1. 引言 SHA-256&#xff08;安全哈希算法&#xff0c;FIPS 182-2&#xff09;是密码学哈希函数&#xff0c;其摘要长度为256位。SHA-256为keyless哈希函数&#xff0c;即为MDC&#xff08;Manipulation Detection Code&#xff09;。【MAC消息认证码有key&#xff0c;不是key…

【数据库】外键的作用

前言 说到外键&#xff0c;一般就会牵扯出约束。不谈约束&#xff0c;起始外键就是一个普通的字段&#xff08;Column&#xff09;&#xff0c;起到一个关联的作用。 先把约束放一边&#xff0c;看看外键有哪些作用。 建立表中记录的一对一的关系 学生表&#xff1a; 手机表…

C++引用计数

文章目录 1. 什么是引用计数2. 引用计数的实现3. 示例代码 1. 什么是引用计数 引用计数&#xff08;reference count&#xff09;的核心思想是使用一个计数器来标识当前指针指向的对象被多少类的对象所使用&#xff08;即记录指针指向对象被引用的次数&#xff09;。它允许有多…

Linux--查找文件指令:find

语法&#xff1a; find pathname -name 文件名 示例&#xff1a; 从根目录下开始查找名字中带file.txt文件的路径

C++思维导图以及作业

定义一个命名空间Myspace&#xff0c;包含以下函数&#xff1a;将一个字符串中的所有单词进行反转&#xff0c;并输出反转后的结果。例如&#xff0c;输入字符串为"Hello World"&#xff0c;输出结果为"olleH dlroW"&#xff0c;并在主函数内测试该函数。 …

战略书籍排行榜前五名

战略管理对企业的重要性不言而喻。有效的战略管理可以帮助企业确定未来的方向和目标、制定长期发展规划、提高企业的竞争力和获得市场份额。本文推荐的这5本优秀的战略管理类书籍&#xff0c;每一本都有其独特的思想和实践价值&#xff0c;值得企业管理者借鉴和学习。 战略书籍…

Leetcode---351周赛

周赛题目 2748. 美丽下标对的数目 2749. 得到整数零需要执行的最少操作数 2750. 将数组划分成若干好子数组的方式 2751. 机器人碰撞 一、美丽下标对的数目 这题没什么好说的&#xff0c;按照题目的要求直接暴力求解&#xff0c;代码如下 bool gcd(int x,int y){if(x1||y1)…

vue父子组件之间相互控制传值,子组件使用$parent直接控制父组件的值

父子组件之间相互控制传值&#xff0c;子组件控制父组件的值 需求概述 父组件在提交表单后&#xff0c;弹框进行提示&#xff0c;子组件是一个弹框。 vue版本 v2.x 实现原理 在父组件内建立控制器isShowModal&#xff0c;使用v-if来控制子组件的显示与隐藏。在子组件通过…

DAY39——动态规划part2

1.考虑障碍在起点和终点的特殊状况&#xff0c;可直接返回0 2.判断是否存在障碍物&#xff1a;初始化时需要设置障碍物后的坐标为0

常见存储引擎

TiKV 简介 TiKV 是一个分布式事务型的键值数据库&#xff0c;提供了满足 ACID 约束的分布式事务接口&#xff0c;并且通过Raft协议保证了多副本数据一致性以及高可用。TiKV 作为 TiDB 的存储层&#xff0c;为用户写入 TiDB 的数据提供了持久化以及读写服务&#xff0c;同时还存…

Spring BeanFactory FactoryBean的区别?

文章目录 前言一、BeanFactory二、FactoryBean 前言 面试中被问到过Spring BeanFactory FactoryBean的区别&#xff1f;当时没答上来&#xff0c;感觉这就是一个文字游戏&#xff0c;后面仔细的了解了一下&#xff0c;分享给大家。 一、BeanFactory 在 Spring 中最核心的就是…

GDB 断点管理

1、b 设置断点 usage 1: b 函数名 usage 2: b 文件名:行号 2、rb 函数名关键字 &#xff1a; 所有带有这个关键字的函数名都设置为断点 (gdb) rb dkauth Breakpoint 7 at 0x34187ae0: file /home/jintao/cvf/apps/cvf/services/dkauth/src/dkauth.c, line 58. void dkauth_…

Python之花舞盛宴:探索列表与元组之美与妙用

前言 在Python编程世界中&#xff0c;列表和元组是两个最常用的数据结构之一。无论是初学者还是经验丰富的开发者&#xff0c;对于这两个数据类型的掌握都至关重要。 列表和元组都是用于存储多个值的容器&#xff0c;但它们在性质和特性上有所不同。列表是可变的&#xff0c;…

VMIC-pci-5565反射内存的优势

优势&#xff1a; &#xff08;1&#xff09;实现远程互连的能力 随着仿真实验复杂度的提高&#xff0c;需要多楼宇多试验室间设备的远程互连&#xff0c;通过单模光纤及光纤HUB将远距离的试验室设备进行连接&#xff0c;单模光纤支持的传输距离可达20km。对于距离300m以内的试…

免费搭建一个有脾气的聊天机器人,1行Python代码就够了!

大家好&#xff0c;这里是程序员晚枫。 之前在小破站&#xff1a;Python自动化办公社区给大家免费分享了用Python制作一个wx机器人&#xff0c;1行代码人人可用&#xff0c;很多人还想要免费的智能聊天功能。 今天终于开发出来了&#xff0c;让我们一起看一下&#xff0c;如何…

第四课—大学英语四六级备考—听力专项

Key Words 1.monarch n.君主政治 非常抱歉误解了您的问题。以下是关于"monarch"这两个意义的常见用法、造句和固定搭配的例子&#xff1a; 1. Monarch&#xff08;君主&#xff09;&#xff1a; - 造句&#xff1a; - The monarch of the country made an…

爆文:硬件工程师如何零基础入门?

大家好&#xff0c;我是记得诚。 最近老是有读者问我学习路线&#xff0c;之前其实写过一篇文章&#xff1a; 硬件工程师如何零基础入门&#xff1f;&#xff08;点击阅读&#xff09; 觉得很有必要再发一遍&#xff0c;这篇文章&#xff0c;在全网也算爆文了。 在CSDN有65…