『Java课设』JavaSwing+MySQL实现医院智慧点餐系统

news2024/10/7 10:16:59

👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟

🏡个人主页:starry陆离

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

『Java课设』JavaSwing+MySQL实现医院智慧点餐系统

  • 1.功能介绍
  • 2.项目包结构
  • 3.数据库设计
  • 4.JDBC数据库连接类
  • 5.登录选择界面(系统入口)
  • 6.管理员页面
  • 7.用户选餐界面

1.功能介绍

这个是大二的Java的课程设计的完整版,功能相对之前发的半成品稍稍丰富些。一开始我们还是按照MVC结构写的,写着写着就视图,用户操作逻辑,数据库数据操作就都写在一起了,比如管理员操作界面(View层)就嵌入了SQL语句直接操作数据库了,好在是一个学习过程。

  1. 系统角色分为用户与管理员

  2. 用户登录系统可以选购餐品并支付

  3. 管理员可以登陆系统管理所有的菜品(增删改查)

  4. 管理所有的订单信息(未完成)

2.项目包结构

image-20221228133554959

image-20221228125833221

3.数据库设计

数据库设计了5个表,分别是用户信息表,管理员信息表,菜品信息表,订单信息表,订单详情表

image-20221228130022269

4.JDBC数据库连接类

不同数据库的连接方式的大同小异,根据开发场景灵活变动就好,我这里用的MySQL8.0所以使用如下两行配置。

		private static final String USER = "root";//数据库用户名,一般是root
		private static final String PWD = "lx0411";//数据库密码
//      连接mysql5.7
//		private static final String URL="jdbc:mysql://localhost:3306/studentgrade";
//		private static final String DRIVER="com.mysql.jdbc.Driver"; //mysql5.7
//      如果用的是mysql8.0,
		private static final String DRIVER="com.mysql.cj.jdbc.Driver";
		private static final String URL= "jdbc:mysql://localhost:3306/catersystem?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; 
		
//      如果用的sqlServer数据库连接
//		private static final String URL="jdbc:sqlserver://localhost:1433;DataBaseName=StudentGrade";
//		private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
//		private static final String USER="sa";
//		private static final String PWD="lxloveth0411";

5.登录选择界面(系统入口)

image-20221228130840108

package view;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import handler.LoginChoiceHandler;

public class LoginChoiceView extends JFrame{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	JLabel titleNameLabel=new JLabel("医院智慧选餐系统",JLabel.CENTER);
	
	JPanel jp1=new JPanel();
	JPanel jp2=new JPanel(new GridLayout(5,1));
	
	JButton userBtn=new JButton ("用户 登录");
	JButton adminBtn=new JButton("管理员登录");
	
	//声明桌面系统托盘SystemTray
    public SystemTray systemTray;
    public TrayIcon trayIcon;
	
    LoginChoiceHandler loginChoiceHandler;
	public LoginChoiceView() {
		super("医院智慧选餐系统");
		
		loginChoiceHandler=new LoginChoiceHandler(this);
		//设置标题的字体,格式,大小
        titleNameLabel.setFont(new Font("华文行楷",Font.PLAIN,40));
        titleNameLabel.setPreferredSize(new Dimension(0,80));
        
        Font centerFont=new Font("楷体",Font.PLAIN,20);
        userBtn.setFont(centerFont);
        adminBtn.setFont(centerFont);
        
        jp1.add(userBtn);
        jp1.add(new JPanel());
        jp1.add(adminBtn);
        
        jp2.add(new JPanel());
        jp2.add(titleNameLabel);
        jp2.add(new JPanel());
        jp2.add(jp1);
        jp2.add(new JPanel());
        
        this.add(jp2);
        
        userBtn.addActionListener(loginChoiceHandler);
        adminBtn.addActionListener(loginChoiceHandler);
        
        //判断当前系统是否支持系统托盘
        if(SystemTray.isSupported()){
            systemTray=SystemTray.getSystemTray();//初始化系统托盘
            URL imgUrl = UserLoginView.class.getClassLoader().getResource("LoginView.jpg");
            trayIcon=new TrayIcon(new ImageIcon(imgUrl).getImage());//初始化托盘图标
            trayIcon.setImageAutoSize(true);//托盘图标可以自动缩放大小
            try {
                systemTray.add(trayIcon);//将托盘图标加入到系统托盘组件中,并抛出异常
            } catch (AWTException e) {
                e.printStackTrace();
            }
            //创建一个事件响应,最小化时销毁资源
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowIconified(WindowEvent e) {
                	LoginChoiceView.this.dispose();
                }
            });

            //托盘事件监听(鼠标单击一次托盘,窗口将会正常显示)
            trayIcon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    int clickCont=e.getClickCount();
                    if(clickCont==1){
                        LoginChoiceView.this.setExtendedState(JFrame.NORMAL);
                    }
                    LoginChoiceView.this.setVisible(true);
                }
            });
        }
        
        //设置窗口图片
	    URL imgUrl=UserLoginView.class.getClassLoader().getResource("LoginView.jpg");
	    setIconImage(new ImageIcon(imgUrl).getImage());
	    //设置窗口基本参数
	    setSize(600,400);
	    setDefaultCloseOperation(EXIT_ON_CLOSE);
	    setLocationRelativeTo(null);
	    setResizable(false);
	    setVisible(true);
        
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new LoginChoiceView();
	}

}

6.管理员页面

image-20221228131020048

package view;
 
import javax.swing.*;


import ext.MainViewTable;
import ext.MainViewTableModel;
import handler.AdminMainHandler;
import req.UserRequest;
import res.TableDTO;
import service.FoodService;
import service.FoodServiceImpl;
import util.DBUtil;
import util.DimensionUtil;

import java.awt.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

public class AdminOperateFrame extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	String adminName;
	String adminId;
	public String lastPressKey;
	
    JLabel adminNameLabel = new JLabel("管理员名:", JLabel.CENTER);
 
    JPanel centerPanel = new JPanel(new BorderLayout());
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    JPanel panel4 = new JPanel();
    
    //增删改查按钮
    public JButton btnAdd = new JButton("增加菜品");
    public JButton btnSave = new JButton("保存菜品");
    JButton btnDelete = new JButton("删除菜品");
    JButton btnAlter = new JButton("更改菜品");
    JButton btnSearch_Food = new JButton("查看菜品");
    //JButton btnSearch_Order = new JButton("查看订单");
    
    //设置字体大小
    Font font=new Font("楷体",Font.PLAIN,20);
    Dimension dimension = new Dimension(130,30);
 
    //创建一个MainViewTable对象
  	public MainViewTable mianViewTable=new MainViewTable();
  	public MainViewTableModel mainViewTableModel;
  	
  	//创建一个MainOrderTable订单table对象
  	public MainViewTable mianOrderTable=new MainViewTable();
  	public MainViewTableModel mainOrderTableModel;
  	//声明一个MainHandler对象
  	AdminMainHandler adminMainHandler;
    private int pageNow=1;//默认显示第一页
	private int pageSize=10;//默认每页显示十条记录
	
 
    //搜索框与搜索按钮
    public JTextField searchField = new JTextField();
    JButton searchBt = new JButton("搜索");
 
    JButton exitBt = new JButton("退出");
 
    public AdminOperateFrame(String adminId) {
        setTitle("医院营养配餐系统");
        this.adminId=adminId;
        adminMainHandler = new AdminMainHandler(this);
 
        layNorth(adminId);
 
        layCenter();
 
        layEast();
 
        laySouth();
 
        centerPanel.add(panel1, BorderLayout.NORTH);
        centerPanel.add(panel2, BorderLayout.CENTER);
        centerPanel.add(panel3, BorderLayout.EAST);
        centerPanel.add(panel4, BorderLayout.SOUTH);
        add(centerPanel);
        
        init();
    }

	private void init() {
		setSize(600, 400);
        setLocationRelativeTo(null);
        setBounds(DimensionUtil.getBounds());
        //设置窗体完全充满整个屏幕
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
	}

	private void laySouth() {
		exitBt.setFont(font);
		exitBt.setPreferredSize(new Dimension(200,50));
        panel4.add(exitBt);
        
        exitBt.addActionListener(adminMainHandler);
	}

	private void layEast() {
		panel3.setLayout(new FlowLayout());
		panel3.setPreferredSize(new Dimension(200,100));
        btnAdd.setFont(font);
        btnAdd.setPreferredSize(dimension);
        btnSave.setFont(font);
        btnSave.setPreferredSize(dimension);
        btnDelete.setFont(font);
        btnDelete.setPreferredSize(dimension);
        btnAlter.setFont(font);
        btnAlter.setPreferredSize(dimension);
        btnSearch_Food.setFont(font);
        btnSearch_Food.setPreferredSize(dimension);
        //btnSearch_Order.setFont(font);
        //btnSearch_Order.setPreferredSize(dimension);
        panel3.add(btnAdd);
        panel3.add(btnSave);
        btnSave.setVisible(false);
        panel3.add(btnDelete);
        panel3.add(btnAlter);
        panel3.add(btnSearch_Food);
        //panel3.add(btnSearch_Order);
        
        btnAdd.addActionListener(adminMainHandler);
        btnSave.addActionListener(adminMainHandler);
        btnDelete.addActionListener(adminMainHandler);
        btnAlter.addActionListener(adminMainHandler);
        btnSearch_Food.addActionListener(adminMainHandler);
        //btnSearch_Order.addActionListener(adminMainHandler);
	}

	private void layNorth(String adminId) {
		panel1.setLayout(new BorderLayout());
        selectAdminName(adminId);
        adminNameLabel.setText("管理员名:"+adminName);
        adminNameLabel.setFont(font);
        searchField.setFont(font);
        searchField.setPreferredSize(dimension);
        searchBt.setFont(font);
        searchBt.setPreferredSize(new Dimension(200,50));
        panel1.add(adminNameLabel, BorderLayout.WEST);
        panel1.add(searchField, BorderLayout.CENTER);
        panel1.add(searchBt, BorderLayout.EAST);
        
        searchBt.addActionListener(adminMainHandler);
	}
    
	private void layCenter() {
		//调用数据库数据,创建一个FoodService和UserRequest实例
  		//获取从数据库中查询到的data与totalCount
  		FoodService foodService=new FoodServiceImpl();
  		UserRequest request=new UserRequest();
  		request.setPageNow(pageNow);
  		request.setPageSize(pageSize);
  		request.setSearchKey(searchField.getText().trim());
  		TableDTO tableDTO = foodService.retrieveFoods(request);
  		Vector<Vector<Object>> data = tableDTO.getData();
  		
  		//自定义的MainViewTableModel
  		mainViewTableModel=MainViewTableModel.assembleModel(data);
  		//将Table与TableModel关联
  		mianViewTable.setModel(mainViewTableModel);
  		//设置渲染方式
  		mianViewTable.renderRule();
  		JScrollPane jScrollPane = new JScrollPane(mianViewTable);
  		
        panel2.setLayout(new BorderLayout());
        panel2.add(jScrollPane, BorderLayout.CENTER);
	}
	
	private void selectAdminName(String adminId) {
		String sql = "select manaName from managerInfo where manaId = ?";
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			//连接数据库,获取数据库连接,getConn()方法已经提前在DBUtil中写好
			conn = DBUtil.getConn();
			System.out.println("数据库连接成功");
			//如果连接失败,则返回false
			if(conn==null) {
				System.out.println("数据库连接失败");
			}
			
			ps = conn.prepareStatement(sql);
			ps.setString(1, adminId);
			
			rs = ps.executeQuery();
			
			//查询遍历
			while(rs.next()) {
				adminName = rs.getString(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//关闭资源
			DBUtil.closeRs(rs);
			DBUtil.closeConn(conn);
			DBUtil.closePs(ps);
		}
	}
	
	public void setPageNow(int pageNow) {
		this.pageNow = pageNow;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNow() {
		return pageNow;
	}
	
	public void reloadTable() {
		/*
		 *调用数据库数据,创建一个FoodService和UserRequest实例
		 *获取从数据库中查询到的data与totalCount
		 *查询完后要更新Model的数据
		 */
		FoodService foodService=new FoodServiceImpl();
		UserRequest request=new UserRequest();
		request.setPageNow(pageNow);
		request.setPageSize(pageSize);
		request.setSearchKey(searchField.getText().trim());
		TableDTO tableDTO = foodService.retrieveFoods(request);
		Vector<Vector<Object>> data = tableDTO.getData();
		
		// 更新调用updataModel实现更新Model
		MainViewTableModel.uptadaModel(data);
		// 设置渲染方式
		mianViewTable.renderRule();
	}
	
    public static void main(String[] args) {
        new AdminOperateFrame("202016");
    }
}

7.用户选餐界面

室友在这里做了一个有趣的处理,点击支付的时候弹出他的微信收款码😁。如果用户想白嫖不支付就退出系统还会有窗口提示(当然并不是真正的需要支付money才能退出系统,你任务管理器一杀我们也没辙,只是考虑了这个场景就实现了这个逻辑)

image-20221228132422330

image-20221228132544580

image-20221228132749950

package view;
/*
 * 待解决问题:
 * 1.关闭窗口提示还没支付
 * 2.同一用户可以选同一个菜品
 * 3.list没有实现更新
 * 4.table里的库存量没有实现更新
 * 5.没有选餐应提示不能实现支付
 */
import javax.swing.*;


import ext.MainViewTable;
import ext.MainViewTableModel;
import handler.UserMainHandler;
import req.UserRequest;
import res.TableDTO;
import service.FoodService;
import service.FoodServiceImpl;
import util.DBUtil;
import util.DimensionUtil;

import java.awt.*;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

public class UserSelectionFrame extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public String userName;
	public int totalMoney;
	public int selId = 1;
	public String userId;
	
    JLabel userNameLabel = new JLabel("用户名:", JLabel.CENTER);
 
    JPanel centerPanel = new JPanel(new BorderLayout());
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    JPanel panel4 = new JPanel();
    JPanel panel5 = new JPanel();
 
    //创建一个MainViewTable对象
  	public MainViewTable mianViewTable=new MainViewTable();
  	public MainViewTableModel mainViewTableModel;
  	//声明一个MainHandler对象
  	UserMainHandler userMainHandler;
    private int pageNow=1;//默认显示第一页
	private int pageSize=10;//默认每页显示十条记录
	JButton btSelect = new JButton("选购");
 
    //搜索框与搜索按钮
    Font centerFont=new Font("楷体",Font.PLAIN,20);
    Dimension dimension = new Dimension(200,50);
    JTextField searchField = new JTextField();
    JButton searchBt = new JButton("搜索");
 
    public DefaultListModel<Object> listModel = new DefaultListModel<Object>();
    public JList<Object> selectedList = new JList<Object>(listModel);
    JLabel selectedLabel = new JLabel("已选菜品:",JLabel.CENTER);
 
    public JLabel totalPriceLabel = new JLabel("总价: 0");
    JButton payBt = new JButton("支付");
 
    public UserSelectionFrame(String userId) {
        setTitle("医院营养配餐系统");
        this.userId = userId;
        userMainHandler = new UserMainHandler(this);
        
        //根据用户Id查询出用户名userName,显示在userNameLabel上
        selectUesrName(userId);
 
        layNorth();
 
        layCenter();
 
        layWest();
 
        laySouth();
        
        init();
    }

	private void selectUesrName(String userId) {
		String sql = "select userName from userInfo where userId = ?";
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			//连接数据库,获取数据库连接,getConn()方法已经提前在DBUtil中写好
			conn = DBUtil.getConn();
			System.out.println("数据库连接成功");
			//如果连接失败,则返回false
			if(conn==null) {
				System.out.println("数据库连接失败");
			}
			
			ps = conn.prepareStatement(sql);
			ps.setString(1, userId);
			
			rs = ps.executeQuery();
			
			//查询遍历
			while(rs.next()) {
				userName = rs.getString(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//关闭资源
			DBUtil.closeRs(rs);
			DBUtil.closeConn(conn);
			DBUtil.closePs(ps);
		}
	}

	private void init() {
		add(centerPanel);
        setSize(600, 400);
        setLocationRelativeTo(null);
        setBounds(DimensionUtil.getBounds());
        //设置窗体完全充满整个屏幕
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        //在关闭窗口的时候强制支付,应该改成提示“暂时还没支付”
        addWindowListener(new UserMainHandler(this));
        setVisible(true);
	}
	
	private void layNorth() {
		
        panel1.setLayout(new BorderLayout());
        userNameLabel.setText("用户名:"+userName);
        
        panel1.add(userNameLabel, BorderLayout.WEST);
        userNameLabel.setPreferredSize(dimension);
        userNameLabel.setFont(centerFont);
        
        panel1.add(searchField, BorderLayout.CENTER);
        searchField.setPreferredSize(dimension);
        searchField.setFont(centerFont);
        
        panel1.add(searchBt, BorderLayout.EAST);
        searchBt.setPreferredSize(new Dimension(200,50));
        searchBt.setFont(centerFont);
        
        centerPanel.add(panel1, BorderLayout.NORTH);
        
        searchBt.addActionListener(userMainHandler);
	}
	
	private void layCenter() {
		//调用数据库数据,创建一个FoodService和UserRequest实例
		//获取从数据库中查询到的data与totalCount
		FoodService foodService=new FoodServiceImpl();
		UserRequest request=new UserRequest();
		request.setPageNow(pageNow);
		request.setPageSize(pageSize);
		request.setSearchKey(searchField.getText().trim());
		TableDTO tableDTO = foodService.retrieveFoods(request);
		Vector<Vector<Object>> data = tableDTO.getData();
		showPreNext(tableDTO.getTotalCount());
				
		panel2.setLayout(new BorderLayout());
        //自定义的MainViewTableModel
  		mainViewTableModel=MainViewTableModel.assembleModel(data);
  		//将Table与TableModel关联
  		mianViewTable.setModel(mainViewTableModel);
  		//设置渲染方式
  		mianViewTable.renderRule();
  		JScrollPane jScrollPane = new JScrollPane(mianViewTable);
  		panel2.add(jScrollPane,BorderLayout.CENTER);
  		
  		btSelect.setPreferredSize(new Dimension(150,50));
  		btSelect.setFont(centerFont);
  		panel5.add(btSelect);
  		panel2.add(panel5, BorderLayout.EAST);
  		centerPanel.add(panel2, BorderLayout.CENTER);
  		btSelect.addActionListener(userMainHandler);
	}
	
    private void layWest() {
		panel3.setLayout(new BorderLayout());
        selectedList.setPreferredSize(dimension);
        selectedList.setFont(centerFont);
        panel3.add(selectedLabel, BorderLayout.NORTH);
        selectedLabel.setPreferredSize(dimension);
        selectedLabel.setFont(centerFont);
        panel3.add(selectedList, BorderLayout.CENTER);
        centerPanel.add(panel3, BorderLayout.WEST);
	}
    
	private void laySouth() {
		totalPriceLabel.setFont(centerFont);
		panel4.add(totalPriceLabel);
		
		payBt.setFont(centerFont);
        panel4.add(payBt);
        
        centerPanel.add(panel4, BorderLayout.SOUTH);
        payBt.addActionListener(userMainHandler);
	}
	
	private void showPreNext(int totalCount) {
		if(totalCount%pageSize==0) {
		}else {
		}
	}
	
	public void setPageNow(int pageNow) {
		this.pageNow = pageNow;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNow() {
		return pageNow;
	}
	
	
	public void reloadTable() {
		
		/*
		 *调用数据库数据,创建一个FoodService和UserRequest实例
		 *获取从数据库中查询到的data与totalCount
		 *查询完后要更新Model的数据
		 */
		FoodService foodService=new FoodServiceImpl();
		UserRequest request=new UserRequest();
		request.setPageNow(pageNow);
		request.setPageSize(pageSize);
		request.setSearchKey(searchField.getText().trim());
		TableDTO tableDTO = foodService.retrieveFoods(request);
		Vector<Vector<Object>> data = tableDTO.getData();
		
		
		// 更新调用updataModel实现更新Model
		MainViewTableModel.uptadaModel(data);
		// 设置渲染方式
		mianViewTable.renderRule();
		// 调用上一页与下一页按钮是否可见
		showPreNext(tableDTO.getTotalCount());
	}    
}
 {
		return pageNow;
	}
	
	
	public void reloadTable() {
		
		/*
		 *调用数据库数据,创建一个FoodService和UserRequest实例
		 *获取从数据库中查询到的data与totalCount
		 *查询完后要更新Model的数据
		 */
		FoodService foodService=new FoodServiceImpl();
		UserRequest request=new UserRequest();
		request.setPageNow(pageNow);
		request.setPageSize(pageSize);
		request.setSearchKey(searchField.getText().trim());
		TableDTO tableDTO = foodService.retrieveFoods(request);
		Vector<Vector<Object>> data = tableDTO.getData();
		
		
		// 更新调用updataModel实现更新Model
		MainViewTableModel.uptadaModel(data);
		// 设置渲染方式
		mianViewTable.renderRule();
		// 调用上一页与下一页按钮是否可见
		showPreNext(tableDTO.getTotalCount());
	}    
}

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

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

相关文章

设计模式:责任链模式的应用场景及源码应用

一、概述 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是将链中每一个节点看作是一个对象&#xff0c;每个节点处理的请求均不同&#xff0c;且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时&#xff0c;会沿着链的路径依次传递给每一个…

AI代码实时生成工具teleportHQ

来源&#xff1a;投稿 作者&#xff1a;ΔU 编辑&#xff1a;学姐 今天给大家分享一款AI代码实时生成工具teleportHQ&#xff0c;teleportHQ本质上是一个低代码开发平台&#xff0c;但是首次将计算机视觉应用到低代码开发上&#xff0c;teleportHQ允许用户通过熟悉的设计工具界…

JSX的基本使用

JSX的基本使用1.JSX简介1.1 JSX是react的核心内容1.2 createElement的问题1.3 createElement的问题1.4 JSX注意点2 使用prettier插件格式化react代码3 JSX中嵌入JavaScript表达式4 条件渲染5 列表渲染6 样式处理1.JSX简介 JSX是JavaScript XML的简写&#xff0c;表示了在Javas…

Linux 下 rpm管理包

一、 .rpm的文件格式 以.rpm格式发布的软件里面封装的都是经过编译过的二进制形式的软件&#xff0c;可以直接安装。.rpm格式的文件又称为rpm软件包&#xff0c;简称rpm包。 二、 rpm文件名的格式 三、 rpm命令的使用与软件的安装 Linux中安装rpm软件包有3种方法&#xff1…

新手小白入门之泛型

一、背景 JAVA推出泛型以前&#xff0c;程序员可以构建一个元素类型为Object的集合&#xff0c;该集合能够存储任意的数据类型对象&#xff0c;而在使用该集合的过程中&#xff0c;需要程序员明确知道存储每个元素的数据类型&#xff0c;否则很容易引发ClassCastException异常…

嵌入式书籍推荐

现在嵌入式软件工程师的数量需求方面是越来越旺盛&#xff0c;但是在人才供给方面却出现了缺口&#xff0c;个大公司对于嵌入式开发工程师职位出现供不应求的局面&#xff0c;正是有很多人看到这了大好的环境&#xff0c;纷纷选择开始学习嵌入式开发&#xff0c;学习的方式也是…

第十六讲:神州交换机访问控制列表的配置

访问控制列表ACL&#xff08;Access Control Lists&#xff09;数据定义工具&#xff0c;基于用户自行定义的数据的参数区分不同的数据流&#xff0c;是在交换机和路由器上经常采用的一种防火墙技术&#xff0c;它可以对经过网络设备的数据包根据一定规则进行过滤。它有以下一些…

CloudFlare 的路由拦截

因为腾讯需要对网站进行校验。 校验的方法是使用一个 tencent18250331897192314951.txt 文件&#xff0c;在这个文件中放入腾讯指定的内容。 我们使用的是 Discourse 这个社区系统&#xff0c;这个社区系统对这种问题的响应比较头痛。 解决方案 解决方案就是从域名服务商哪…

NX 系统环境 python3.6 部署 PPOCR 报错记录

NX 系统环境 python3.6 部署 PPOCR 报错记录 前言&#xff08;这环境&#xff0c;就硬配&#xff09; 问&#xff1a;为什么要用系统环境&#xff0c;不用 conda&#xff1f;答&#xff1a;因为 conda 的 ARM 端 python 最低只支持 3.7&#xff0c;而 paddlepaddle 提供的 Je…

c#入门-系统特性

特性 特性可以给成员添加元数据。这有两个作用&#xff1a; 这是一个元数据&#xff0c;可以利用反射获取到如果编译器认识这个特性&#xff0c;那么可以与特性进行交互。 第一点涉及到反射的内容&#xff0c;先略过。 而第二点要求的编译器认实这个特性&#xff0c;就仅限于…

在Linux上安装和使用ZFS

真正的文件系统终极者 ZFS 文件系统的英文名称为 ZettabyteFileSystem&#xff0c;也叫动态文件系统&#xff0c;是第一个 128 位文件系统。最初是由 Sun 公司为 Solaris10 操作系统开发的文件系统。作为 OpenSolaris 开源计划的一部分&#xff0c;ZFS 于 2005 年 11 月发布&a…

《MySQL 8从零开始学(视频教学版)》简介

#好书推荐##好书奇遇季#《MySQL 8从零开始学&#xff08;视频教学版&#xff09;》&#xff0c;定价89元&#xff0c;京东当当天猫都有发售。本书面向MySQL 8数据库初学者&#xff0c;是MySQL数据库畅销入门书。 配套资源 本书配套400个实例和14个综合案例的源码、PPT课件、近2…

/etc/passwd详解

目录 一、统一性和标准化 二、功能和权限 三、内容详解 1、/etc/passwd为按行记录的文本文件&#xff0c;每行记录一个用户的信息 2、每行信息内容 四、参考文献 一、统一性和标准化 各版本的Linux操作系统的/etc/passwd功能和内容格式基本相同。 &#xff08;1&#xf…

Spark环境搭建(Stand alone模式)

Sand alone 架构 Standalone模式是Spark自带的一种集群模式&#xff0c;不同于前面本地模式启动多个进程来模拟集群的环境&#xff0c;Standalone模式是真实地在多个机器之间搭建Spark集群的环境&#xff0c;完全可以利用该模式搭建多机器集群&#xff0c;用于实际的大数据处理…

红黑树的迭代器红黑树与AVL树的比较

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、红黑树泛型实现map&#xff0c;set对多出来的模板参数的解释二、map和set对红黑树迭代器的封装①迭代器operator②operator--三、红黑树…

Web3中文|全球首个中华武术收藏级卡牌系列发布,传武文化的未来在元宇宙?

谈及中华武术的传承与发展&#xff0c;大家首先能想到什么&#xff1f;小说、电影、动画、游戏……等等&#xff0c;都是曾经的载体。作为中华文化极其重要的一部分&#xff0c;武术是国人独有的标签&#xff0c;太多经典作品珠玉在前&#xff0c;如今武术的传承&#xff0c;需…

【JavaScript】跟着pink学习第二天部分案例

1.猜数字游戏 三次机会&#xff0c;猜1~50之间的一个整数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vi…

12月第4周榜单丨B站UP主排行榜(飞瓜数据B站)发布!

飞瓜轻数发布2022年12月19日-12月25日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的…

【Python百日进阶-数据分析】Day140 - plotly表:plotly.graph_objects.Table()

文章目录一、语法二、参数三、返回值四、实例4.1 基本表4.2 样式表4.3 使用 Pandas 数据框4.4 Dash中的表4.5 更改行和列大小4.6 交替行颜色4.7 基于变量的行颜色4.8 基于变量的单元格颜色一、语法 构造一个新的 Table 对象 用于查看详细数据的表格视图。数据以行和列的网格排…

screen命令简要说明

screen命令简要说明 screen命令有什么用 screen命令虚拟了一个终端(session)&#xff0c;可在终端内运行命令&#xff0c;多次运行screen命令可以虚拟多个不同的终端&#xff1b; 每个session可以开启多个窗口&#xff0c;每个窗口有自己的shell&#xff0c;可以在不同的窗口…