javaSwing酒店管理系统

news2024/11/28 4:36:49

一、 使用方法:

在使用前,需要到druid.properties 配置文件中,修改自己对应于自己数据库的属性;如用户名,密码等

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///hotel?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username=root
password=123456
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

注意:如果是保持数据库连接异常,则说明数据库和jar包版本匹配了,注意升级数据库jar包版本;

二、项目介绍

  1. 本项目主要是基于Swing框架搭建的java桌面应用程序 在项目中主要实现的功能有:

1.开始界面

  • 开始界面为动态代码雨的欢迎效果
    在这里插入图片描述

2.注册界面

  • 注册界面。实现了验证码的生成和验证,以及出生日期的日历控件化的选择,当用户注册成功后,用户名密码就会通过方法传到登录界面从而避免了用户第二次填账号密码的麻烦

    在这里插入图片描述

3.分角色登录

  • 登录主要分为管理员登录和用户登录,管理员登录后有

    • 客房管理功能:这个功能主要实现了对房间的增删改查,以及查看对应房间的评论等;涉及到了多对多的查询

在这里插入图片描述

4.用户管理

  • 用户管理功能:主要的增删改查操作,点击对应的用户右边小框框展示用户的头像

在这里插入图片描述

5.订单管理

  • 订单管理功能:在这里会展示用户的全部订单,通过多对多的查询展示用户的订房信息等;已经对用户的一些信息进行统计;主要用到了ifreechart 框架进行绘制表格

在这里插入图片描述

6.客房服务

  • 客房服务功能:就是给房间添加一些新的设备以及多张配图,方便用户浏览

在这里插入图片描述

7.历史记录

  • 历史记录:主要记录用户的订房退房记录,实现这个功能主要用到mysql的触发器,通过触发器,没删除一个订单,就将对于的订单保存到历史记录表里边;最后导出表格,而我导出的表格用csv文件逗号阵列,比较方便生成

在这里插入图片描述

8.管理员登录

  • 管理员管理,主要是设置权限的1位超级管理员0 为普通管理员

     ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d88c15305f3149caba1e5e256299300d.png)
    
    • 在退出前会有监听事件,会询问用户是否最小化托盘,如果最小化托盘则项目已经在运行中

    • 在登录前,由于想模仿QQ登录功能输入对应的账号显示不同的头像,最后添加了键盘监听功能和数据库查询,所以刚开始会有点卡

9.查看房间

  • 用户登录功能

    • 用户登录后,可以查看房间和其各种资料;

      在这里插入图片描述

10.点评房间

  • 用户也可以点评房间

    在这里插入图片描述

11.充值界面

  • 用户可以对客房进行预订,如果金额不足之前则需要用户进行充值

    • 而充值界面需要用户点击我的头像那里进入个人信息页面

    在这里插入图片描述

  • 用户个人信息还有评论记录都可以在个人信息这里修改删除等

三、文件夹目录说明

image    主要用于保存项目中用到的图片文件的
lib      主要用于保存用项目中用到jar包
sql      整个项目运行的数据和数据库表
src      全部源码
	com.ludashen.control  主要保存各种自定义的控件的
	com.ludashen.dao      数据库交互代码
	com.ludashen.frame    用户交互界面代码
	com.ludashen.hothl    模型对象类
	com.ludashen.panel    面板容器
resource  资源文件,图片等
druid.properties 数据库配置文件

四、 代码

1.runFrame

package com.ludashen.frame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class RunFrame extends JDialog implements ActionListener {
    private int gi=0;
    private Random random = new Random();
    private Dimension screenSize;
    private JPanel graphicsPanel;
    private final static int gap = 20;
    //存放雨点顶部的位置信息(marginTop)
    private int[] posArr;
    //行数
    private int lines;
    //列数
    private int columns;
    public RunFrame() {
        initComponents();
    }
    private void initComponents() {
        setLayout(new BorderLayout());
        graphicsPanel = new GraphicsPanel();
        add(graphicsPanel, BorderLayout.CENTER);
        this.setUndecorated(true);
        setSize(500,400);
        setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setVisible(true);
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        lines = screenSize.height / gap;
        columns = screenSize.width / gap;
        posArr = new int[columns + 1];
        random = new Random();
        for (int i = 0; i < posArr.length; i++) {
            posArr[i] = random.nextInt(lines);
        }

        new Timer(120, this).start();
    }
    private int getChr() {
        return random.nextInt(10);
    }
    //定时器的
    @Override
    public void actionPerformed(ActionEvent e) {
        graphicsPanel.repaint();
    }

    private class GraphicsPanel extends JPanel {
        @Override
        public void paint(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            g2d.setFont(getFont().deriveFont(Font.BOLD));
            g2d.setColor(Color.BLACK);
            g2d.fillRect(0, 0, screenSize.width, screenSize.height);
            //当前列
            int currentColumn = 0;
            for (int x = 0; x < screenSize.width; x += gap) {
                int endPos = posArr[currentColumn];
                g2d.setColor(Color.CYAN);
                g2d.drawString(String.valueOf(getChr()), x, endPos * gap);
                int cg = 0;
                for (int j = endPos - 15; j < endPos; j++) {
                    //颜色渐变
                    cg += 20;
                    if (cg > 255) {
                        cg = 255;
                    }
                    g2d.setColor(new Color(0, cg, 0));
                    g2d.drawString(String.valueOf(getChr()), x, j * gap);
                }
                //每放完一帧,当前列上雨点的位置随机下移1~5行
                posArr[currentColumn] += random.nextInt(5);
                //当雨点位置超过屏幕高度时,重新产生一个随机位置
                if (posArr[currentColumn] * gap > getHeight()) {
                    posArr[currentColumn] = random.nextInt(lines);
                }
                currentColumn++;
            }
            if(gi>6){
                g2d.setFont(new Font("italicc",3,25));
                g2d.setColor(Color.WHITE);
                g2d.drawString("欢迎使用酒店管理系统", getWidth()/2-100, getHeight()/2);
            }
            if(gi++>25){
                dispose();
                new LoginFrame().setVisible(true);
            }
        }
    }

    public static void main(String[] args) {
        new RunFrame();
    }
}

2.UserFrame

package com.ludashen.frame;

import com.ludashen.control.*;

import com.ludashen.dao.CommentDao;
import com.ludashen.dao.HouseDao;
import com.ludashen.dao.RoomInfoDao;
import com.ludashen.dao.UserDao;
import com.ludashen.hothl.Comment;
import com.ludashen.hothl.House;
import com.ludashen.hothl.RoomInfo;


import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;



public class UserFrame extends JFrame {
    private Map<String, Object> userInfo;//保存用户信息的
    private JMenuBar menuBar;
    private JLabel title,img;   //选中列表显示房子标题和图片
    private JTextPane tDetails;     //客房详情
    private JTextPane tComment;     //顾客点评
    private List<House> house;
    private int hid;    //用于记录房子id的
    private String detail;  //记录房子详情的
    private JList buddyList;    //列表信息
    private int choose; //获取当前选择的列
    private List<String> image=new ArrayList<>();//用于放当前房间的片
    private int index;//记录当前放到那张照片了


    public UserFrame(String uid){
        //构造函数根据登录id查找用户信息
        super("酒店管理系统");
        try {
        userInfo= UserDao.users(uid);
        }catch (Exception e){
            JOptionPane.showMessageDialog(null,"没有这个用户请重新登录");
            System.exit(0);
        }
        setTitle("酒店系统----"+userInfo.get("uName")+"在线");
        init();
    }


    private void init() {


        setResizable(false);
        //设置标题图标
        setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/resource/log.png")));

        title= new JLabel();
        img=new JLabel();
        tDetails=new JTextPane();
        tComment=new JTextPane();
        tComment.setEnabled(false);
        tDetails.setEnabled(false);
        tDetails.setBackground(new Color(0x134FAE));
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                if (JOptionPane.showConfirmDialog(null, "是否最小化托盘") != 0) {
                    System.exit(0);
                }
            }
        });
        tDetails.setContentType("text/html");
        tComment.setContentType("text/html");
        title.setFont(new Font("",1,30));


        topBar();

        Tool.SystemTrayInitial(this);
        this.add(mainPanel());
        this.setSize(900,750);
        this.setLocationRelativeTo(null);
    }


    private JPanel mainPanel(){



        JPanel p=new JPanel(null);
        JPanel panel = new JPanel();

        tDetails.setOpaque(false);
        RScrollPane details=new RScrollPane(tDetails,"/resource/bg1.jpg");

        panel.setLayout(new BorderLayout());
        JPanel p2=new JPanel(new BorderLayout());
        JTextField field=new JTextField(50);
        field.setSize(500,30);
        RButton send=new RButton("发送");
        p2.add(field,BorderLayout.WEST);
        p2.add(send,BorderLayout.EAST);
        panel.add(p2, BorderLayout.SOUTH);

        tComment.setOpaque(false);
        RScrollPane comment=new RScrollPane(tComment,"/resource/bg1.jpg");

        panel.add(comment, BorderLayout.CENTER);


        JTabbedPane jTabbedPane =Tool.jTabbedPane(235,450,p,640,215);
        jTabbedPane.setTabPlacement(1);
        Tool.Tabp(jTabbedPane,"酒店详情", "/resource/tabp/applicatio.png",details, "详情");
        Tool.Tabp(jTabbedPane,"点评列表", "/resource/tabp/Comment.png", panel, "列表");

        RButton ding=Tool.rButton(800,5,"预定",p,80);
        title.setBounds(240,5,260,45);
        img.setBounds(240,50,630,400);
        p.add(Tool.getFunButton(500, 10, "/resource/button/back1.png", "/resource/button/back2.png", e->{
            setBackImage();
        }));
        p.add(Tool.getFunButton(600, 10, "/resource/button/next1.png", "/resource/button/next2.png", e -> {
            setNetImage();
        }));

        RButton refresh=Tool.rButton(0,633,"刷新",p,235);

        send.addActionListener(e->{
            Comment comment1=new Comment((String) userInfo.get("uid"),String.valueOf(hid),field.getText());
            if(CommentDao.setCommentDao(comment1)) {
                tComment.setText(commentDao());
                JOptionPane.showMessageDialog(null,"评论成功!");
                field.setText("");
            }
        });

        ding.addActionListener(e ->{
            new YudingDialog(house.get(choose).getHid(),(String) userInfo.get("uid"),(Float) userInfo.get("money")).setVisible(true);
        });

        refresh.addActionListener(e -> {
            reRoom();
        });

        p.add(img);
        p.add(title);
        p.add(listRoom());
        p.add(refresh);
        return p;
    }

    private JScrollPane listRoom(){
        buddyList = new JList();
        buddyList.setOpaque(false);
        reRoom();
        if(house.size()!=0){
            img.setIcon(new ImageIcon((Image) new ImageIcon("image\\room\\"+house.get(0).gethImg()).getImage().getScaledInstance(630, 400,Image.SCALE_DEFAULT )));
            title.setText(house.get(0).gethName());
            image.add(house.get(0).gethImg());
            hid=house.get(0).getHid();
            detail= "<html><h2>详情:"+house.get(0).gethDetails()+"</h2>"+roomInfo()+"</html>";
            tDetails.setText(detail);
            choose=0;
        }
        else {
            tDetails.setText("<h1>没有空房间</h1>");
        }

        buddyList.addListSelectionListener(e -> {
            if(buddyList.getValueIsAdjusting())
            try {
                img.setIcon(new ImageIcon((Image) new ImageIcon("image\\room\\"+house.get(buddyList.getSelectedIndex()).gethImg()).getImage().getScaledInstance(630, 400,Image.SCALE_DEFAULT )));    //设置JLable的图片
                image.clear();
                index=0;
                image.add(house.get(buddyList.getSelectedIndex()).gethImg());
                hid=house.get(buddyList.getSelectedIndex()).getHid();
                detail= "<html><h2>详情:"+house.get(buddyList.getSelectedIndex()).gethDetails()+"</h2>"+roomInfo()+"</html>";
                title.setText(house.get(buddyList.getSelectedIndex()).gethName());
                tDetails.setText(detail);
                tComment.setText(commentDao());
                choose=buddyList.getSelectedIndex();

                for (RoomInfo imgs:RoomInfoDao.getRoomInfo(hid,3)){
                    image.add(imgs.getFuntion());
                }

            }catch (Exception e1){
                buddyList.clearSelection();
            }

        });

        buddyList.setCellRenderer(new FriListCellRenderer());
        buddyList.setFont(new Font(Font.SERIF, Font.PLAIN, 18));
        buddyList.setPreferredSize(new Dimension(230, 72*house.size()));
        RScrollPane jp = new RScrollPane(buddyList,"");
        jp.setBounds(0,0,233,630);
        return jp;
    }

    private void setNetImage() {

        if(index==image.size()-1) {
            JOptionPane.showMessageDialog(null,"已经是最后一张了");
            return;
        }
        else
            index++;
            img.setIcon(new ImageIcon((Image) new ImageIcon("image\\room\\"+image.get(index)).getImage().getScaledInstance(630, 400,Image.SCALE_DEFAULT )));
    }

    private void setBackImage(){
        if(index==0) {
            JOptionPane.showMessageDialog(null,"已经是第一张了");
            return;
        }
        index--;
        img.setIcon(new ImageIcon((Image) new ImageIcon("image\\room\\"+image.get(index)).getImage().getScaledInstance(630, 400,Image.SCALE_DEFAULT )));

    }

    public void reRoom(){
   
  

        house= HouseDao.getHouser(2);
        HouseModel buddy = new HouseModel(house);
        buddyList.setModel(buddy);


    }

    private String roomInfo(){


        List<RoomInfo> roomInfo =RoomInfoDao.getRoomInfo(hid,1);
        StringBuffer str=new StringBuffer();
        for(RoomInfo info:roomInfo){
            str.append("<p>"+info.getName()+":");
            str.append(info.getFuntion()+"</p>");
        }
        return str.toString();
    }
    private String commentDao(){
        int a=0;
        List<Comment> comments= CommentDao.getRoomComment(String.valueOf(hid),1);
        StringBuffer str=new StringBuffer();
        str.append("<html>");
        for (Comment comment:comments){
            if(a%2==0) {
                str.append("<div style='background-color:#3333CC;'><span style='font-size: 20px'>");
                str.append(comment.getUid() + "</span><br>");
                str.append(comment.getComment() + "<br>" + comment.getDate());
                str.append("<br></div>");
            }else {
                str.append("<div  style='background-color:#3300FF;'><span style='font-size: 20px'>");
                str.append(comment.getUid() + "</span><br>");
                str.append(comment.getComment() + "<br>" + comment.getDate());
                str.append("<br></div>");
            }
            a++;
        }
        if (comments.size()==0)
            str.append("占时没有评论");

        str.append("</table></html>");
        return str.toString();
    }





    private void topBar() {
  
 
        menuBar = new JMenuBar();
        menuBar.setLayout(null);
        JButton head=new CircleButton(40,(String)userInfo.get("head"));
        head.setBounds(840, 0, 40, 40);
        head.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                new UserInfoDialog(userInfo).setVisible(true);
            }
        });

        JMenu menu = new JMenu("酒店");
        menu.setBounds(0,0,80,30);
        JMenuItem zmenu = new JMenuItem("酒店简介");
        zmenu.addActionListener(e->{
            IntroduceDialog introduceDialog = new IntroduceDialog();
            introduceDialog.setVisible(true);
            new Thread(introduceDialog).start();
        });
        menu.add(zmenu);
        menuBar.add(head);
        menuBar.add(menu);
        menuBar.setPreferredSize(new Dimension(300, 40));
        setJMenuBar(menuBar);
    }
}

3.loginFrame

package com.ludashen.frame;

import com.ludashen.control.*;
import com.ludashen.dao.AdminDao;
import com.ludashen.dao.ContFile;
import com.ludashen.dao.UserDao;
import jdk.nashorn.internal.scripts.JO;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import java.sql.SQLException;

public class LoginFrame extends JFrame {
    private RPanel RP1;
    private RPanel RP2;
    private JPanel p;
    private JTextField userName;
    private JPasswordField password;
    private static Boolean isAdmin=false;
    private JLabel head;
    ContFile file=new ContFile();
    public LoginFrame(){
        super();
        init();
    }

    public static void setAdmin(Boolean b){
        isAdmin=b;
    }

    private void init(){


        setResizable(false);
        //设置图片
        URL re = getClass().getResource("/resource/log.png");
        ImageIcon ico =new ImageIcon(re);
        setIconImage(Toolkit.getDefaultToolkit().getImage(re));//设置标题图标
        this.setLayout(null);
        RP1=new RPanel("/resource/Lmain.png");
        RP2=new RPanel("/resource/login.png");
        RP1.setBounds(0,0,600,400);
        RP2.setBounds(0,400,600,100);
        RP2.setLayout(null);
        RP1.setLayout(null);


        Tool.jLabel(50,40,"账号:",RP2);
        Tool.jLabel(280,40,"密码:",RP2);
        userName= Tool.jTextField(100, 40, RP2,162);
        password=Tool.passwordField(330, 40, '*',RP2,159);

        head=Tool.jLabel(250,150,"",RP1,100,100);

        userName.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                super.keyReleased(e);
                head.setIcon(new ImageIcon((Image) new ImageIcon("image\\head\\" +UserDao.head(userName.getText())).getImage().getScaledInstance(100, 100,Image.SCALE_DEFAULT )));
            }
        });
        RButton LoginButton=Tool.rButton(500, 39,"登录",RP2,80);
        JLabel register=Tool.jLabel(530, 69,"快速注册",RP2);
        JLabel set=Tool.jLabel(480, 69, "设置",RP2);

        setChangColor(register, new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                new Register().setVisible(true);
                dispose();
            }
        });

        setChangColor(set, new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                new LoginSetDialog().setVisible(true);
            }
        });

        RP1.add(Tool.getFunButton(560, 5, "/resource/close2.png", "/resource/close1.png", e->{
               System.exit(0);
        }));
        RP1.add(Tool.getFunButton(520, 5, "/resource/min1.png", "/resource/min2.png", e -> {
                setExtendedState(JFrame.ICONIFIED);
        }));

        LoginButton.addActionListener(e -> {
            try {
                String pass = file.readFile("pass");
                String[] sp = pass.split("@");
                String name = userName.getText();
                String spass = new String(password.getPassword());
                if (!isAdmin) {
                    if (UserDao.getUser(name, spass)) {
                        if (sp[0].trim().equals("0")) {
                            file.writeFile("pass", "0@" + name + "@" + spass);
                        } else {
                            file.writeFile("pass", "1");
                        }
                        new UserFrame(name).setVisible(true);
                        dispose();
                    } else {
                        JOptionPane.showMessageDialog(null, "您现在正在登陆用户系统,而用户密码或名字错误");
                    }
                } else {
                    if (AdminDao.getAdminLogin(name, spass)) {
                        if (sp[0].trim().equals("0")) {
                            file.writeFile("pass", "0@" + name + "@" + spass);
                        } else {
                            file.writeFile("pass", "1");
                        }
                        new AdminFrame(name).setVisible(true);
                        dispose();
                    } else {
                        JOptionPane.showMessageDialog(null, "您现在正在登陆管理系统,用户密码或名字错误");
                    }

                }
            }catch (Exception e1){
//                new ContFile().writeFile("e.txt",e1.printStackTrace());
                JOptionPane.showMessageDialog(null,e1.getLocalizedMessage());
            }
        });

        pass();
        this.add(RP1);
        this.add(RP2);
        this.setUndecorated(true);//去掉标题栏
        this.setSize(600,500);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(3);
    }

    private void pass(){
        String pass=file.readFile("pass");
        String[] sp=pass.split("@");
        if(sp[0].trim().equals("0")&&sp.length>1){
            userName.setText(sp[1]);
            password.setText(sp[2]);
            head.setIcon(new ImageIcon((Image) new ImageIcon("image\\head\\" +sp[1]).getImage().getScaledInstance(100, 100,Image.SCALE_DEFAULT )));
        }
    }



    private void setChangColor(JLabel jLabel,MouseListener l){

        jLabel.addMouseListener(l);
        jLabel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                super.mouseEntered(e);
                jLabel.setForeground(Color.WHITE);
            }

            @Override
            public void mouseExited(MouseEvent e) {
                super.mouseExited(e);
                jLabel.setForeground(Color.ORANGE);
            }

        });
    }

    public void setUser(String name,String pass){

        userName.setText(name);
        password.setText(pass);
    }

}

五、联系与交流

扣:969060742 运行视频 完整程序资源 sql 程序资源

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

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

相关文章

【C++】:AVL树

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关多态的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结…

C语言 内联函数 + 递归函数

函数分类 内联函数 1&#xff09;内联函数在编译时将函数的代码直接插入到调用它的地方&#xff0c;而不是通过函数调用的方式执行&#xff0c;从而减少了函数调用的开销&#xff0c;提高了代码的执行速度 2&#xff09;使用 inline 关键字来声明 3&#xff09;将函数声明为内联…

深入理解Dubbo-4.Dubbo扩展SPI

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…

Redis探秘:AOF日志与数据持久性之旅

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Redis。你知道吗&#xff0c;Redis作为一个超高效的内存数据库&#xff0c;真的是超级给力。它可以秒速处理数据&#xff0c;让咱们的应用运行得飞快。但是&#xff0c;小黑得告诉你&#xff0c;虽…

四. 基于环视Camera的BEV感知算法-BEVFormer

目标 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. BEVFormerv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章—…

nginx多ip部署

1.修改网卡信息自定义多个IP 进入/etc/sysconfig/network-scripts&#xff0c;编辑ifcfg-ens33网卡文件。将dhcp动态分配修改成static&#xff0c;同时添加ip地址子网掩码、网关和DNS。 修改完成后重启网卡&#xff0c;systemctl restart network 2.修改nginx配置文件 有几个…

【数据结构实践课设】新生报道注册管理信息系统

目录 1.主要框架 2.写入文件 3.读取文件 4.注册学生信息 5.增加学生信息 6.删除学生信息 7.按姓名查询 8.按班级查询 9.按专业查询 10.打印学生信息 11.完整代码 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所…

【S32K3环境搭建】-0.4-使用SEGGER J-Link烧录调试程序

【S32K3_MCAL从入门到精通】合集&#xff1a; S32K3_MCAL从入门到精通https://blog.csdn.net/qfmzhu/category_12519033.html 导入一个编译没有报错的S32K312工程。接着在菜单栏中&#xff0c;依次选择Debug下拉箭头 -- > Debug Configuration&#xff1b; 在弹出的Create…

FL Studio 21注册机激活码序列号下载 附激活码

FL Studio 21 keygen激活码序列号是一款基于同名软件激活程序。操作非常简单。用户只需使用本激活工具生成激活码&#xff0c;即可一键激活软件所有功能&#xff0c;无需付费。去购买注册程序&#xff0c;永久免费使用所有功能。很多用户应该都知道&#xff0c;专业的编辑工具只…

SpringCloud-高级篇(六)

&#xff08;1&#xff09;Seata架构 &#xff08;2&#xff09;部署TC服务 修改注册中心&#xff1a;做服务注册&#xff0c;tc服务配置注册中心&#xff0c;tc服务可以做集群&#xff0c;他也是一个服务 &#xff0c;微服务里面RM 跟TM跟它建立联系肯定是基于注册中心去找&a…

using dapers on diffusers: Dreambooth, Texual Inversion, LoRA and IP-Adapter

using dapers on diffusers: Dreambooth, Texual Inversion, LoRA and IP-Adapter 参考自&#xff1a;https://huggingface.co/docs/diffusers/using-diffusers/loading_adapters 如今&#xff0c;对于 diffusion 模型&#xff0c;有许多高效的训练技术来微调一个定制化的模型&…

gittee使用教学

一、git简介 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效的处理任何大小项目的版本管理。 核心功能&#xff1a; 项目的版本管理 团队协同开发 二、准备工作 1、下载 Git 2、除了选择安装位置以外&#xff0c;其他都无脑安装 3、检查一下安装情况 win…

Android系统中使用Cunit测试C/C++接口

Android系统中使用Cunit测试C/C接口 Cunit是C/C语言的单元测试框架&#xff0c;但常用于Windows和Linux开发中。 Android系统中经常有jni、so库、hal service等都是C/C实现&#xff0c;本文讲解如何将Cunit嵌入Android中&#xff0c;用于测试一些C/C api。 Cunit简介 Cunit是很…

Post Quantum Fuzzy Stealth Signatures and Applications

目录 笔记后续的研究方向摘要引言贡献模块化框架模糊构造实施适用于FIDO Post Quantum Fuzzy Stealth Signatures and Applications CCS 2023 笔记 后续的研究方向 摘要 自比特币问世以来&#xff0c;基于区块链的加密货币中的私人支付一直是学术和工业研究的主题。隐形地址…

Java 何时会触发一个类的初始化

Java 何时会触发一个类的初始化&#xff1f; 使用new关键字创建对象访问类的静态成员变量 或 对类的静态成员变量进行赋值调用类的静态方法反射调用类时&#xff0c;如 Class.forName()初始化子类时&#xff0c;会先初始化其父类&#xff08;如果父类还没有进行过初始化的话&a…

动态规划_最小花费爬楼

//给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 // // 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 // // 请你计算并返回达到楼梯顶部的最低花费。 …

小模型学习(1)-人脸识别

【写作背景】因为最近一直在研究大模型&#xff0c;在与客户进行交流时&#xff0c;如果要将大模型的变革性能力讲清楚&#xff0c;就一定要能将AI小模型的一些原理和效果讲清楚&#xff0c;进而形成对比。当然这不是一件简单的事情&#xff0c;一方面大模型分析问题的的本质原…

C# 使用CancellationTokenSource 取消Task执行

写在前面 在Task创建并执行后&#xff0c;如果状态发生了变化&#xff0c;需要取消正在执行中的Task&#xff0c;除了使用主线程上的共享变量来判断之外&#xff0c;更优雅的方式就是就是用CancellationTokenSource来取消任务的执行。 代码实现 public static void CancelTas…

【AIGC】Midjourney高级进阶版

Midjourney 真是越玩越上头&#xff0c;真是给它的想象力跪了~ 研究了官方API&#xff0c;出一个进阶版教程 命令 旨在介绍Midjourney在Discord频道中的文本框中支持的指令。 1&#xff09;shorten 简化Prompt 该指令可以将输入的Prompt为模型可以理解的语言。模型理解语言…

(2022|ICLR,kNN检索,扩散,仅图像训练)KNN-Diffusion:通过大规模检索生成图像

KNN-Diffusion: Image Generation via Large-Scale Retrieval 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 仅文本图像处理 4. 实验 …