综合案例【商品管理系统-Java基础版】(附完整源码)

news2024/11/17 0:51:47

Java语言的一个超级简易的商品管理系统,适合初学者练手
源码包无法上传至资源(blog已经超级完整啦)如果还是需要完整源码src包可私分享

目录

    • 1 项目分析
      • 1.1 用户模块(普通用户、管理员用户)
        • 1.1.1前端系统(普通用户)
        • 1.1.2 后台系统(管理员用户)
      • 1.2 商品模块
        • 1.2.1 前端系统(普通用户)
        • 1.2.2 后台系统(管理员用户)
      • 1.3 订单模块(对订单的增删改查)
      • 1.4 地址模块(订单的地址的增删改查-当前不考虑)
    • 2 项目设计
        • 新建工程 (注意事项)
    • 3 用户模块实现
      • 3.1 分析
      • 3.2 代码实现
        • 3.2.1 Product
        • 3.2.2 user
        • 3.2.3 ProductService
        • 3.2.4 UserService
        • 3.2.5 UserServiceImpl
    • 4 用户界面实现
      • 4.1 分析
      • 4.2 代码实现
        • 4.2.1 userview
    • 5 商品模块实现
      • 5.1 分析
      • 5.2 代码实现
        • 5.2.1 ProductServiceIpl
    • 6 商品界面实现
      • 6.1 分析
      • 6.2 代码实现
        • 6.2.1 productview
    • 7 测试
        • 7.1 Test
        • 部分运行结果展示

1 项目分析

源码

1.1 用户模块(普通用户、管理员用户)

1.1.1前端系统(普通用户)

  • 用户登录
  • 用户注册
  • 用户信息修改
  • 用户充值

1.1.2 后台系统(管理员用户)

  • 用户登录
  • 分配管理员用户
  • 管理普通用户
    • 删除用户

1.2 商品模块

1.2.1 前端系统(普通用户)

  • 查询
  • 搜索
  • 购买

1.2.2 后台系统(管理员用户)

  • 商品上架
  • 商品下架
  • 商品查看
  • 商品修改

1.3 订单模块(对订单的增删改查)

  • 增加订单
  • 删除订单
  • 修改订单
  • 查询订单

1.4 地址模块(订单的地址的增删改查-当前不考虑)

  • 增加地址

  • 删除地址

  • 修改地址

  • 查询地址

2 项目设计

新建工程 (注意事项)

  1. 处理后台程(service包)—用户的增删改查
    productmanagementsystem.service

  2. 实体类即JavaBean(数据承载Bean,不做业务逻辑功能) 约定俗成包名为pojo
    productmanagementsystem.pojo

  3. 视图页面-前端页面 view/menu
    productmanagementsystem.view

  4. 客户端(client) —随便叫什么都行client 即main方法
    productmanagementsystem.client

3 用户模块实现

3.1 分析

  1. pojo数据承载实体类JavaBean—按照需求写User模块和Product模块
  2. service客户端业务处理(用户操作)
    1. 面向接口设计 interface ProductService 商品增删改查方法
    2. 用户接口实现 UserServiceImpl implements UserService
      • 重写UserService所有方法
        • 登录 注册 充值 查询 修改 删除 各个方法提供判断

3.2 代码实现

3.2.1 Product

package priv.yinying.productmanagementsystem.pojo;

import java.util.Date;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.pojo
 * @Description:
 * @Date 2023/1/31 22:37
 */
public class Product {

    private int id;
    private String name;
    private double price;
    private Date createTime; // 上架日期
    private long num; //库存

    public Product() {
    }

    public Product(int id, String name, double price, Date createTime, long num) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.createTime = createTime;
        this.num = num;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public long getNum() {
        return num;
    }

    public void setNum(long num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", createTime=" + createTime +
                ", num=" + num +
                '}';
    }
}

3.2.2 user

package priv.yinying.productmanagementsystem.pojo;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.pojo
 * @Description:
 * @Date 2023/1/31 22:10
 */
public class User {
    private int id; //表示用户的唯一信息
    private String username;
    private String password;
    private double money;   //余额
    private int state;  //状态 -用户的角色(0、表示管理员  1、普通用户)

    //正式开发还需要账户模块(一个人可以有多个账户)
    //private Order[] order;   //用户对应的订单
    //private Address[] address;   //用户对应的地址-一个用户可以有多个地址

    //JavaBean 三连setget方法 有参构造 无参构造


    public User() {
    }

    public User(int id, String username, String password, double money, int state) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.money = money;
        this.state = state;
    }
    //toString方法可以提供也可以不提供

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }
}


//    public User() {
//        super();
//    }
//    public User(int id, String username, String password, double money, int state) {
//        super();
//        this.id = id;
//        this.username = username;
//        this.password = password;
//        this.money = money;
//        this.state = state;
//    }

3.2.3 ProductService

package priv.yinying.productmanagementsystem.service;

import priv.yinying.productmanagementsystem.pojo.Product;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.service
 * @Description:
 * @Date 2023/1/31 22:50
 */
//查询搜索  增删改查
public interface ProductService {
    //查询所有
    Product[] selectAll();
    //搜索商品(可以重复)
    Product[] search(String name);
    //购买商品
    boolean buyProduct(int id,int num);  //id  数量 库存(已知有的) 全局变量-后面使用static静态变量用户的余额
    //商品上架
    boolean addProduct(Product product);
    //商品下架
    boolean deleteProduct(int id);
    //商品修改
    boolean updateProduct(Product product); //(先查再改)
    //查看商品详情-返回product
    Product selectOne(int id);  //id唯一标识
}

3.2.4 UserService

package priv.yinying.productmanagementsystem.service;

import priv.yinying.productmanagementsystem.pojo.User;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.service
 * @Description:
 * @Date 2023/1/31 23:06
 */
public interface UserService {
    //用户登录(成功返回user 失败返回null)
//    User login(String username,String password); // Missing method body, or declare abstract缺少方法体,或声明抽象
    User login(String username,String password);   //用户名、密码

    //查询用户详情
    User selectOne(int id);

    //用户注册
    boolean register(String username,String password);

    //用户信息修改
    boolean updateUser(User user);

    //用户充值
    boolean topup(double money);


    //删除用户
    boolean deleteUser(int id);
}




3.2.5 UserServiceImpl

package priv.yinying.productmanagementsystem.service;

import priv.yinying.productmanagementsystem.pojo.User;
import priv.yinying.productmanagementsystem.view.UserView;

import java.util.Arrays;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.service
 * @Description:
 * @Date 2023/1/31 23:41
 */
public class UserServiceImpl implements UserService {
    static User [] users = new User[1];
    static int count = 1; //数组添加变量-有效个数  增删改查下标从1开始
    static int id = 1;
    static{
        //初始化管理员账户--只执行一次
      users [0] = new User(id,"admin","123",0,0);
    }
//登录方法
    @Override
    public User login(String username,String password) {
        //判断用户是否存在
        int index = exists(username);
        if(index != -1){    //存在
            // 判断密码是否正确
            if(users[index].getPassword().equals(password)){
                return users[index];
            }
        }
        return null;
    }
    //判断用户是否存在
    public int exists(String username){   //返回int类型下标,或者Boolean类型也可以
        for (int i = 0; i < count; i++) {
            if (username.equals(users[i].getUsername())){
                return i;
            }
        }
        return -1;
    }

 //注册方法
    @Override
    public boolean register(String username, String password) {
        //判断用户是否存在
        int index = exists(username);
        if(index == -1) { //不存在
            //判断数组是否需要扩容
            if(users.length == count) {
                users = Arrays.copyOf(users, users.length + 5);
            }
            //将用户信息添加到数组中
            users[count] = new User(++id,username,password,0,1);//id先加再用
            //数组中有效个数+1
            count++;
            //注册成功
            return true;
        }
        return false;
    }


//查询
    @Override
    public User selectOne(int id) {
        for (int i = 1; i < count; i++) {
            if(id == users[i].getId()) {  //遍历id存在
                return users[i];
            }
        }
        return null; //用户不存在没有
    }

//修改
    @Override
    public boolean updateUser(User user) {   //覆盖  user[i]=user
        int index = 0;  //一定存在,先存在再修改
        for (int i = 1; i < count; i++) {
            if(users[i].getId() == user.getId()) {
                index = i;
                break;
            }
        }
        users[index] = user;
        return true;    //一定存在,
    }


//充值
    @Override
    public boolean topup(double money) {
        User user = UserView.user;
        user.setMoney(user.getMoney()+money);
        updateUser(user);

        return false;
    }

//删除
    @Override
    public boolean deleteUser(int id) {
        int index = -1;
        for (int i = 1; i < count; i++) {
            if(users[i].getId() == id) {
                index = i;
                break;
            }
        }
        //扩容是考虑这种情况:数组长度==有效个数  (避免临界值存在)
        users = Arrays.copyOf(users, users.length+5);

        if(index != -1) {    //首先id存在,删除要覆盖,后一个赋给前一个
            for (int i = index; i <= count; i++) {
                users[i] = users[i+1];
            }
            return true;
        }
        return false;
    }
}

4 用户界面实现

4.1 分析

  1. view 用户页面userview

    • 登录菜单

    • 调用方法实现用户界面【1、登录 2、注册 3、修改用户 4、用户充值 5、退出登录 6、显示用户 7、退出】功能

    • 测试

4.2 代码实现

4.2.1 userview

package priv.yinying.productmanagementsystem.view;

import priv.yinying.productmanagementsystem.pojo.User;
import priv.yinying.productmanagementsystem.service.UserService;
import priv.yinying.productmanagementsystem.service.UserServiceImpl;

import java.util.Random;
import java.util.Scanner;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.view
 * @Description:
 * @Date 2023/2/1 0:43
 */
public class UserView {
    Scanner sc = new Scanner(System.in);
    UserService userService = new UserServiceImpl();

    //表示登录的用户
    public static User user;


    //首页
    public void indexMenu() {
        System.out.println("***********欢迎使用Java2302商品管理系统***********");
        while(true) {
            System.out.println("1、登录\t2、注册\t3、修改用户\t4、用户充值\t5、退出登录\t6、显示用户\t7、退出");
            System.out.println("请输入您的选择");
            int option = sc.nextInt();
            switch (option) {
                case 1:
                    loginMenu();
                    break;
                case 2:
                    registerMenu();
                    break;
                case 3:
                    updateUserMenu();
                    break;
                case 4:
                    topupMenu();
                    break;
                case 5:
                    user = null;
                    break;
                case 6:
                    showUser();
                    break;
                case 7:
                    System.out.println("欢迎下次使用!!!");
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入有误,请重新输入");
                    break;
            }
        }
    }


    //用户充值
    public void topupMenu() {
        System.out.println("*********充值页面*********");
        //判断是否登录过
        if(user == null) {
            System.out.println("您还未登录,请先登录");
            loginMenu();
        }else {
            //判断如果是管理员就不能修改用户信息
            if(user.getState() == 0) {
                System.out.println("您已经是管理员,不能修改用户信息");
            }else {
                System.out.println("请输入充值的金额");
                double money = sc.nextDouble();
                userService.topup(money);
                System.out.println("充值成功!!!!");
            }
        }
    }

    //修改用户菜单
    public void updateUserMenu() {
        System.out.println("*********修改用户页面*********");
        //判断是否登录过
        if(user == null) {
            System.out.println("您还未登录,请先登录");
            loginMenu();
        }else {

            //判断如果是管理员就不能修改用户信息
            if(user.getState() == 0) {
                System.out.println("您已经是管理员,不能修改用户信息");
            }else {
                //展示用户的信息(非管理员)
                showUser();
                System.out.println("请输入原密码");
                String oldPasswrod = sc.next();
                System.out.println("请输入新密码");
                String newPasswrod1 = sc.next();
                System.out.println("请输入确认信密码");
                String newPasswrod2 = sc.next();
                if(!oldPasswrod.equals(user.getPassword())) {
                    System.out.println("原密码输入错误,无法修改");
                    return;
                }
                if(!newPasswrod1.equals(newPasswrod2)) {
                    System.out.println("两次密码不一致,无法修改");
                    return;
                }
                user.setPassword(newPasswrod1);
                userService.updateUser(user);
                //修改完密码之后要重新登录
                user = null;
                loginMenu();
            }
        }
    }

    //展示用户信息
    public void showUser() {
        if(user!=null) {
            System.out.println("当前用户信息为:");
            System.out.println("用户名\t\t密码\t\t用户余额\t\t用户身份");
            System.out.println(user.getUsername()+"\t\t"+user.getPassword()+"\t\t"+user.getMoney()+"\t\t"+"普通用户");
            //仅仅普通用户
        }else {
            System.out.println("暂未登录!!!");
        }
    }

    //注册菜单
    public void registerMenu(){
        System.out.println("*********注册页面*********");
        System.out.println("请输入注册用户名");
        String username = sc.next();
        System.out.println("请输入注册用户密码");
        String password = sc.next();
        //调用注册方法
        boolean flag = userService.register(username, password);
        if(flag) {
            System.out.println("注册成功,请先登录");
            loginMenu();    //直接进入登录界面
        }else {
            System.out.println("很抱歉,注册失败!!!!");
        }
    }

    //登录菜单
    public void loginMenu() {
        System.out.println("*********登录页面*********");
        System.out.println("请输入用户名");
        String username = sc.next();
        System.out.println("请输入用户密码");
        String password = sc.next();
        //随机验证码
        String code1 = code();
        System.out.println("验证码为:"+code1);
        System.out.println("请输入验证码");
        String code2 = sc.next();
        if(code1.equalsIgnoreCase(code2)) { //验证码正确   --(.equalsIgnoreCase 忽略大小写)
            User loginUser = userService.login(username, password);
            if(loginUser == null) {
                System.out.println("用户名或密码不正确");
            }else { //登录成功
                //进入商品页面
                System.out.println("欢迎"+loginUser.getUsername()+"登录成功");
                //将登录的用户使用成员变量user保存
                user = loginUser;


                ProductView productView = new ProductView();
                //进入商品页面
                if(user.getState() == 0) { //menu2页面
                    productView.menu2();
                }else { //menu1页面
                    productView.menu1();
                }
            }
        }else {
            System.out.println("验证码错误");
        }

    }
    //验证码方法
    public String code() {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuffer sb = new StringBuffer();
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(str.length());
            sb.append(str.charAt(index));
        }
        return sb.toString();
    }

}




5 商品模块实现

5.1 分析

  1. ProductServiceIpl 商品(增删改查)接口
    • 重写ProductService所有方法
      • 先判断商品是否存在,再进行对商品的增删改查

5.2 代码实现

5.2.1 ProductServiceIpl

package priv.yinying.productmanagementsystem.service;

import priv.yinying.productmanagementsystem.pojo.Product;
import priv.yinying.productmanagementsystem.view.UserView;

import java.util.Arrays;
import java.util.Date;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.service
 * @Description:
 * @Date 2023/2/1 0:47
 */
public class ProductServiceImpl implements ProductService {
	static Product[] products = new Product[5];
	public static int count = 5;
	public static int id = 0;
	static {
		for (int i = 0; i < products.length; i++) {
			products[i] = new Product(++id, "柠檬手机"+i, 2000+i, new Date(), 100+i);
		}
	}
	// 默认5件商品


	//查询
	@Override
	public Product[] selectAll() {
		return products;
	}

	//搜索 - 从数组中寻找相同元素product并返回
	@Override
	public Product[] search(String name) {
		//定义变量保存搜索出来对应商品的个数
		int size = 0;
		for (int i = 0; i < count; i++) {  //循环到有效个数
			if(products[i].getName().contains(name)) {
				size++;
			}
		}
		Product[] pros = new Product[size];
		int index = 0;

		for (int i = 0; i < count; i++) {
			if(products[i].getName().contains(name)) {
				pros[index] = products[i];
				index++;
			}
		}

		return pros;
	}

	//增加
	@Override
	public boolean addProduct(Product product) {
		//判断是否需要扩容
		if(count == products.length) {
			products = Arrays.copyOf(products, products.length+5);
		}
		//将product对象放入数组中
		products[count] = product;
		//有效个数+1
		count++;
		return true;
	}

	public int exists(int id) {
		for (int i = 0; i < count; i++) {
			if(products[i].getId() == id) {
				return i;
			}
		}
		return -1;
	}


	@Override
	public boolean deleteProduct(int id) {
		//判断是否存在
		int index = exists(id);
		if(index != -1) {//存在
			//扩容:以保证数组的长度与有效个数不相等
			products = Arrays.copyOf(products, products.length+5);
			for (int i = index; i <= count; i++) {
				products[i] = products[i+1];
			}
			return true;
		}
		return false;
	}

	@Override
	public boolean updateProduct(Product product) {
		//判断是否存在
		int index = exists(product.getId());
		if(index != -1) {//存在
			products[index] = product;
			return true;
		}
		return false;
	}

	@Override
	public Product selectOne(int id) {
		for (int i = 0; i < count; i++) {
			if(products[i].getId() == id) {
				return products[i];
			}
		}
		return null;
	}
	@Override
	public boolean buyProduct(int id, int num) {
		//判断是否存在
		int index = exists(id);
		if(index != -1) {
			//判断库存是否充足
			if(num < products[index].getNum()) {
				if(UserView.user.getMoney() >= ( products[index].getPrice() * num)) {
					//修改全局保存的登录用户的余额
					UserView.user.setMoney(UserView.user.getMoney() - ( products[index].getPrice() * num) );
					//修改用户数组中的用户的余额
					UserService userService = new UserServiceImpl();
					userService.updateUser(UserView.user);
					//修改商品库存
					products[index].setNum(products[index].getNum() - num);
					return true;
				}
			}
		}
		return false;
	}

}

6 商品界面实现

6.1 分析

  1. view 产品页面productview
    • 登录菜单
    • 实现商品界面对商品的增删改查

6.2 代码实现

6.2.1 productview

package priv.yinying.productmanagementsystem.view;

import priv.yinying.productmanagementsystem.pojo.Product;
import priv.yinying.productmanagementsystem.service.ProductService;
import priv.yinying.productmanagementsystem.service.ProductServiceImpl;

import java.util.Date;
import java.util.Scanner;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.view
 * @Description:
 * @Date 2023/2/1 0:45
 */
public class ProductView {
    Scanner sc = new Scanner(System.in);
    ProductService productService = new ProductServiceImpl();
    //普通用户
    public void menu1() {
        while(true) {
            System.out.println("1、查询\t2、详情\t3、搜索\t4、购买\t5、返回");
            int option = sc.nextInt();
            switch (option) {
                case 1:
                    showProducts();
                    break;
                case 2:
                    showProduct();
                    break;
                case 3:
                    searchProduct();
                    break;
                case 4:
                    buyProduct();
                    break;
                case 5:
                    return;
                default:
                    System.out.println("输入有误请重新输入!!!");
                    break;
            }
        }
    }

    //查询操作
    public void showProducts() {
        Product[] products = productService.selectAll();
        for(int i = 0; i < ProductServiceImpl.count; i++) {
            System.out.println(products[i]);
        }
    }
    //详情操作
    public void showProduct() {
        System.out.println("请输入商品id");
        int option = sc.nextInt();
        Product product = productService.selectOne(option);
        System.out.println(product);
    }
    //搜索操作
    public void searchProduct() {
        System.out.println("请输入商品名称");
        String name = sc.next();
        Product[] products = productService.search(name);
        for(int i = 0; i <  ProductServiceImpl.count; i++) {
            System.out.println(products[i]);
        }
    }
    //购买操作
    public void buyProduct() {
        System.out.println("请输入商品id");
        int id = sc.nextInt();
        Product product = productService.selectOne(id);
        System.out.println(product);

        System.out.println("请输入购买的数量");
        int num = sc.nextInt();
        boolean flag = productService.buyProduct(id, num);
        if(flag) {
            System.out.println("购买成功");
        }else {
            System.out.println("购买失败");
        }
    }
    //管理员用户
    public void menu2() {
        while(true) {
            System.out.println("1、查询\t2、搜索\t3、上架\t4、下架\t5、修改\t6、返回");
            int option = sc.nextInt();
            switch (option) {
                case 1:
                    showProducts();
                    break;
                case 2:
                    searchProduct();
                    break;
                case 3:
                    addProduct();
                    break;
                case 4:
                    deleteProduct();
                    break;
                case 5:
                    updateProduct();
                    break;
                case 6:
                    return;
                default:
                    System.out.println("输入有误请重新输入!!!");
                    break;
            }
        }
    }

    //上架商品
    public void addProduct() {
        System.out.println("********上架页面********");
        System.out.println("请输入商品名称");
        String name = sc.next();
        System.out.println("请输入商品价格");
        double price = sc.nextDouble();
        System.out.println("请输入商品库存");
        int num = sc.nextInt();
        Product product = new Product(++ProductServiceImpl.id, name, price, new Date(), num);
        productService.addProduct(product);
        System.out.println("添加成功");
    }
    //下架商品
    public void deleteProduct() {
        System.out.println("请输入商品id");
        int id = sc.nextInt();
        boolean flag = productService.deleteProduct(id);
        if(flag) {
            System.out.println("下架成功");
        }else {
            System.out.println("操作失败");
        }
    }
    //修改商品
    public void updateProduct() {
        System.out.println("请输入要修改商品id");
        int id = sc.nextInt();
        Product product = productService.selectOne(id);
        if(product == null) {
            System.out.println("商品不存在!!!");
        }else {
            System.out.println(product);
            System.out.println("请输入商品名称");
            String name = sc.next();
            System.out.println("请输入商品价格");
            double price = sc.nextDouble();
            System.out.println("请输入商品库存");
            int num = sc.nextInt();

            product.setName(name);
            product.setPrice(price);
            product.setNum(num);

            boolean flag = productService.updateProduct(product);
            if(flag) {
                System.out.println("修改成功");
            }else {
                System.out.println("修改失败");
            }
        }
    }
}

7 测试

7.1 Test

package priv.yinying.productmanagementsystem.client;

import priv.yinying.productmanagementsystem.view.UserView;

/**
 * @author yinying
 * @Package priv.yinying.productmanagementsystem.client
 * @Description:
 * @Date 2023/2/1 0:50
 */
public class Test {
    public static void main(String[] args) {
        start();
    }
    public static void start(){
        UserView userView = new UserView();
        userView.indexMenu();

    }
}

部分运行结果展示

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

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

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

相关文章

FluentReader为什么称之为高颜值的rss阅读器

Fluent Reader 这是一款 RSS 阅读器。对于很多年轻的网友来说&#xff0c;RSS 这个名词可能有点陌生。简单来说只要某个网站支持 RSS&#xff0c;你订阅了 RSS 后&#xff0c;一旦网站更新了内容&#xff0c;就会推送到你面前。这时候&#xff0c;我们就需要一款像 Fluent Rea…

全屋智能三国志

刚刚过去的春节假期&#xff0c;对我来说&#xff0c;是一个收集现实素材、感应社会变化的好机会。也确实发现了不少新趋势&#xff0c;一个结论是&#xff1a;智能家居正在酝酿新一轮的市场浪潮。以央视春晚作为切口&#xff0c;每年央视春晚的广告投放&#xff0c;都一定程度…

vscode 配置 plantuml

1、首先安装 plantuml 插件 2、安装 java 开发环境 如果是 mac 系统&#xff0c;直接执行 brew install java &#xff0c;然后按照下图执行下提示中的命令即可 如果是 windows 系统&#xff0c;需要去官网下载 java jdk&#xff0c;安装好之后添加运行路径到 path 中 https://…

基于 ShardingSphere 的分布式数据库负载均衡架构搭建实战

本文主要分为 3 部分&#xff0c;将依次介绍&#xff1a; 基于 ShardingSphere 的分布式数据库「负载均衡架构搭建」要点结合实际的「用户问题案例」&#xff0c;介绍引入「负载均衡」的影响介绍并展示 ShardingSphere 分布式数据库在云上的「一站式解决方案」 文章目录Shardi…

LED背光车载驱动IC 可支持48通道

特性电源电压范围-VDD:3.3V~5.5V-VLED:27V(max)48 个恒流输出通道- 通道恒流输出范围 0~50mA一 通道间电流输出偏差小于3%- 芯片间电流输出偏差小于 3%Low Knee Voltage:0.55V小于20mA0.6V 大于20mA最大支持4扫&#xff0c;内嵌行控制信号通道灰度实现-支持 PWM/PAMPWM驱动 -灰…

云帆文档管理系统版本更新说明:v4.6.0

一、新增及优化功能资料管理新增打包下载管理端增加资料查阅菜单&#xff0c;管理端和用户端用户有同样的查阅权限&#xff0c;方便其快速的查阅企业的资料信息前端下载文档格式添加下载水印&#xff0c;水印显示的是下载的用户和日期采购合同增加智能识别功能资料管理添加关键…

KPI考核系统实战之二:swagger框架

KPI考核系统实战之二&#xff1a;swagger框架一、asp.net core 3.1二、融合swagger1.Nuget安装Swashbuckle.AspNetCore2.Startup.cs 注册Swagger服务&#xff0c;使用swagger中间件一、asp.net core 3.1 使用Visual Studio 2022&#xff0c;搭建asp.net core weiapi开发平台&a…

煤矿皮带运行状态监测预警系统 yolov7

煤矿皮带运行状态监测预警系统通过yolov7网络模型深度学习技术&#xff0c;自动对传输皮带运行状态进行实时监测。当监测到皮带撕裂、跑偏、异物、堆煤等异常情况时&#xff0c;立即抓拍预警及时停止皮带同步回传违规信息到后台。介绍Yolo算法之前&#xff0c;首先先介绍一下滑…

PushKit/Callkit使用经验

前言&#xff1a;如果要求使用这两种库&#xff0c;请在查询资料并自己尝试后&#xff0c;多参考苹果官方的API文档&#xff1a;PushKit&#xff1a;https://developer.apple.com/documentation/pushkit?languageobjcCallKit&#xff1a;https://developer.apple.com/document…

人工智能与模式识别的意义(模式识别与图像处理课程作业)

人工智能与模式识别的意义(模式识别与图像处理课程作业一、 人工智能的意义二、 模式识别的意义2.1、文字识别2.2、语音识别2.3、指纹识别2.4、遥感2.5、医学诊断1、语音识别技术2、生物认证技术3、数字水印技术一、 人工智能的意义 人工智能的发送对于我们社会的各个方面都具有…

Word页面中四个直角

文章目录1、四个直角1&#xff09;代表页边距2&#xff09;页边距的设置3&#xff09;打开或关闭“裁剪标记”2、“裁剪标记”与图片1&#xff09;插入图片超过这个角能打印显示出来吗&#xff1f;3、“裁剪标记”与表格1、四个直角 1&#xff09;代表页边距 页面中的四个角代…

【LoRa网关以及LoRa自组网】以“有人物联网”为例

【LoRa网关以及LoRa自组网】以“有人物联网”为例0.参考资料1. LoRa 自组网协议的理解1.1【LoRa模块WH-L101-L-P-H10 】1.2【LoRa网关设置】1.3【节点、网关、服务器通讯】1.4【一些注意事项】1.5【专业名词】2.【LoRa点对点通讯 】LoRa网关可以实现多个LoRa节点的数据采集&…

咖啡商城|基于Springboot+Vue前后端分离咖啡商城系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

微软开源的 5 个 yyds 课程!

微软在 GitHub 开源了五大课程&#xff0c;面向计算机专业或者入门编程的同学。分别是 Web 开发课程、机器学习课程、物联网课程、数据分析课程、Bash 课程。01为初学者准备的 Web开发课程这个 65k Star 的 Web 开发课程由 Microsoft 的 Azure Cloud Advocates 出品&#xff0…

prometheus登录认证

目标 登录Prometheus的9090端口页面的时候&#xff0c;需要输入用户名和密码&#xff0c;才能进入Prometheus页面。 设置密码 Prometheus配置密码不能是明文&#xff0c;必须经过bcrypt程序对密码进行Hash处理。 vim gen-pass.py 内容如下&#xff1a; import getpass import…

Node,docker 中安装node.js

1.启动docker服务 首先启动docker服务:systemctl start docker 2.获取node最新镜像 启动完成之后拉取node最新镜像&#xff1a;docker pull node 然后开始等待&#xff0c;最后拉取完成会有相应的输出信息。 我们再通过命令确认下node是否拉取成功&#xff1a;docker image…

大文件上传和下载解决方案

前言 前端处理 “大” 一直是一个痛点和难点&#xff0c;比如大文件、大数据量。虽然浏览器硬件有限&#xff0c;但是聪明的工程师总是能够最大化利用浏览器的能力和特性&#xff0c;优雅的解决一个个极端问题&#xff0c;满足用户的多样化需求。 断点上传 对于大文件&#…

Linux中的磁盘管理与打包命令

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

2022.11.29(面经五,笔试+技术面)

2022.11.29&#xff08;面经五&#xff09; 笔试题目不难&#xff0c;多刷力扣就成 1.什么是面向对象&#xff1f; 面向对象&#xff1a;是把构成问题的事务分解成各个对象&#xff0c;而建立对象的目的也不是为了完成一个个步骤&#xff0c;而是为了描述某个事物在解决整个问…

应用笔记 | TSMaster核心功能之标定数据的管理

概述标定模块中&#xff0c;标定数据的管理也是其核心功能。主要包括以下方面的内容&#xff1a;标定数据的载入、标定数据导出、标定数据的刷写&#xff0c;以及配套应用程序的刷写等。下面来详细介绍下这些功能。一、标定数据的载入标定数据的载入路径如下&#xff1a;选择目…