Java+Swing+Mysql实现超市管理系统

news2024/9/29 18:07:17

一、系统介绍

1.开发环境

操作系统:Win10

开发工具 :IDEA2018

JDK版本:jdk1.8

数据库:Mysql8.0

2.技术选型

Java+Swing+Mysql

3.功能模块

4.系统功能

1.系统登录登出

管理员可以登录、退出系统

2.商品信息管理

管理员可以对商品信息进行查询、添加、修改、删除等操作。

3.出库信息管理

管理员可以对出库信息进行查询、添加、修改、删除等操作。

4.入库信息管理

管理员可以对入库信息进行查询、添加、修改、删除等操作。

5.客户信息管理

管理员可以对客户信息进行查询、添加、修改、删除等操作。

6.供应商信息管理

管理员可以对供应商信息进行查询、添加、修改、删除等操作。

5.工程结构

二、系统展示

1.登录页面

2.主页面

3.商品展示

4.商品新增

5.出库展示

6.出库新增

7.入库展示

8.入库新增

9.客户展示

10.客户新增

11.供应商展示

12.供应商新增

13.关于我们

三、部分代码

AdminDao

package com.sjsq.dao;

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

import com.sjsq.model.Admin;
import com.sjsq.utils.DBUtil;

/**
 * 管理员登录
 */
public class AdminDao {

    /**
     * 登录
     *
     * @param username
     * @param password
     * @return
     * @throws Exception
     */
    public boolean login(String username, String password) throws Exception {
        List<Object> paramList = new ArrayList<>();
        paramList.add(username);
        paramList.add(password);
        Admin admin = DBUtil.getObject("select * from t_admin where username=? and password=?", paramList, Admin.class);
        if (admin != null) {
            return true;
        }
        return false;
    }

}

CustomerDao

package com.sjsq.dao;

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

import com.sjsq.model.Customer;
import com.sjsq.utils.DBUtil;
import com.sjsq.utils.StringUtil;

/**
 * 客户信息操作
 */
public class CustomerDao {

    /**
     * 查询所有客户
     *
     * @return
     * @throws Exception
     */
    public List<Customer> getAll() throws Exception {
        return DBUtil.getQueryList("select * from t_customer order by id asc", Customer.class);
    }

    /**
     * 条件查询
     *
     * @param name
     * @return
     * @throws Exception
     */
    public List<Customer> search(String name) throws Exception {
        List<Object> paramList = new ArrayList<>();
        StringBuffer sb = new StringBuffer("select * from t_customer where 1=1");
        if (!StringUtil.isEmpty(name)) {
            sb.append(" and name like ?");
            paramList.add("%" + name + "%");
        }
        sb.append(" order by id asc");
        return DBUtil.getQueryList(sb.toString(), paramList, Customer.class);
    }

    /**
     * 保存客户信息
     *
     * @param customer
     * @return
     * @throws Exception
     */
    public int save(Customer customer) throws Exception {
        List<Object> paramList = new ArrayList<>();
        paramList.add(customer.getName());
        paramList.add(customer.getPhone());
        paramList.add(customer.getAddress());
        return DBUtil.execute("insert into t_customer(name,phone,address) values(?,?,?)", paramList);
    }

    /**
     * 更新客户信息
     *
     * @param customer
     * @return
     * @throws Exception
     */
    public int update(Customer customer) throws Exception {
        List<Object> paramList = new ArrayList<>();
        paramList.add(customer.getName());
        paramList.add(customer.getPhone());
        paramList.add(customer.getAddress());
        paramList.add(customer.getId());
        return DBUtil.execute("update t_customer set name=?,phone=?,address=? where id=?", paramList);
    }

    /**
     * 根据id查询客户信息
     *
     * @param id
     * @return
     * @throws Exception
     */
    public Customer getById(int id) throws Exception {
        List<Object> paramList = new ArrayList<>();
        paramList.add(id);
        return DBUtil.getObject("select * from t_customer where id=?", paramList, Customer.class);
    }

    /**
     * 删除
     *
     * @param id
     * @return
     * @throws Exception
     */
    public int delete(int id) throws Exception {
        List<Object> paramList = new ArrayList<>();
        paramList.add(id);
        return DBUtil.execute("delete from t_customer where id=?", paramList);
    }

}

StringUtil

package com.sjsq.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串转化类
 */
public class StringUtil {

    //数据库字段驼峰命名转换
    private static Pattern linePattern = Pattern.compile("_(\\w)");
    private static Pattern humpPattern = Pattern.compile("[A-Z]");

    // 判断字符串为空
    public static boolean isEmpty(String str) {
        if ("".equals(str) || str == null) {
            return true;
        } else {
            return false;
        }
    }

    // 判断字符串不为空
    public static boolean isNotEmpty(String str) {
        if (!"".equals(str) && str != null) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 下划线转驼峰
     */
    public static String lineToHump(String str) {
        str = str.toLowerCase();
        Matcher matcher = linePattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 驼峰转下划线(单写法,效率低于{@link #humpToLine2(String)})
     */
    public static String humpToLine(String str) {
        return str.replaceAll("[A-Z]", "_$0").toLowerCase();
    }


    /**
     * 驼峰转下划线,效率比上面高
     */
    public static String humpToLine2(String str) {
        Matcher matcher = humpPattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

}

LoginFrame

package com.sjsq.view;

import com.sjsq.dao.AdminDao;
import com.sjsq.utils.StringUtil;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 登录系统
 */
public class LoginFrame extends JFrame {

    private JPanel contentPane;
    private JTextField unameText;
    private JPasswordField pwdText;

    private AdminDao userDao = new AdminDao();

    /**
     * 主函数
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    LoginFrame frame = new LoginFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * 创建窗体
     */
    public LoginFrame() {
        setTitle("超市商品信息管理系统");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        setLocationRelativeTo(null);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = new JLabel("系统登录");
        lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 25));
        lblNewLabel.setBounds(177, 32, 108, 25);
        contentPane.add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("账号:");
        lblNewLabel_1.setBounds(98, 89, 54, 15);
        contentPane.add(lblNewLabel_1);

        JLabel lblNewLabel_2 = new JLabel("密码:");
        lblNewLabel_2.setBounds(98, 152, 54, 15);
        contentPane.add(lblNewLabel_2);

        unameText = new JTextField();
        unameText.setBounds(148, 86, 166, 21);
        contentPane.add(unameText);
        unameText.setColumns(10);

        pwdText = new JPasswordField();
        pwdText.setBounds(148, 149, 166, 21);
        contentPane.add(pwdText);

        JButton btnNewButton = new JButton("登录");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                String username = unameText.getText();
                String password = pwdText.getText();
                if (StringUtil.isEmpty(username)) {
                    JOptionPane.showMessageDialog(contentPane, "请输入账号", "系统提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                if (StringUtil.isEmpty(password)) {
                    JOptionPane.showMessageDialog(contentPane, "请输入密码", "系统提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                try {
                    // 登录账号验证
                    boolean flag = userDao.login(username, password);
                    if (flag) {
                        //跳转主界面
                        JOptionPane.showMessageDialog(contentPane, "登录成功!");
                        MainFrame main = new MainFrame();
                        main.setVisible(true);
                        // 释放所有本机屏幕资源
                        dispose();
                    } else {
                        JOptionPane.showMessageDialog(contentPane, "用户名密码错误!", "系统提示", JOptionPane.WARNING_MESSAGE);
                        return;
                    }
                } catch (Exception e1) {
                    e1.printStackTrace();
                    JOptionPane.showMessageDialog(contentPane, "登录异常:" + e1.getMessage(), "系统提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }

            }
        });
        btnNewButton.setBounds(146, 202, 76, 23);
        contentPane.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("退出");
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        btnNewButton_1.setBounds(237, 202, 76, 23);
        contentPane.add(btnNewButton_1);
    }

}

CustomerAddFrame

package com.sjsq.view;

import com.sjsq.dao.CustomerDao;
import com.sjsq.model.Customer;
import com.sjsq.utils.StringUtil;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 新增客户信息类
 */
public class CustomerAddFrame extends JFrame {

    // 定义内容面板
    private JPanel contentPane;
    // 定义姓名文本
    private JTextField nameText;
    private JTextField phoneText;
    private JTextField addressText;

    private CustomerDao customerDao = new CustomerDao();


    /**
     * Create the frame.
     */
    public CustomerAddFrame() {
        setTitle("新增客户信息");
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setBounds(100, 100, 353, 351);
        setLocationRelativeTo(null);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = new JLabel("客户名称:");
        lblNewLabel.setBounds(29, 34, 92, 15);
        contentPane.add(lblNewLabel);

        // 创建空白文本
        nameText = new JTextField();
        // 设置位置大小
        nameText.setBounds(113, 31, 182, 21);
        // 添加到面板
        contentPane.add(nameText);
        // 设置内容宽度
        nameText.setColumns(15);

        JLabel lblNewLabel_1 = new JLabel("联系电话:");
        lblNewLabel_1.setBounds(29, 84, 92, 15);
        contentPane.add(lblNewLabel_1);

        phoneText = new JTextField();
        phoneText.setBounds(113, 81, 182, 21);
        contentPane.add(phoneText);
        phoneText.setColumns(10);

        JLabel lblNewLabel_5 = new JLabel("客户地址:");
        lblNewLabel_5.setBounds(29, 148, 91, 15);
        contentPane.add(lblNewLabel_5);

        addressText = new JTextField();
        addressText.setBounds(113, 145, 182, 21);
        contentPane.add(addressText);
        addressText.setColumns(10);


        JButton btnNewButton = new JButton("保存");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 获取输入的信息
                String name = nameText.getText();
                String phone = phoneText.getText();
                String address = addressText.getText();
                // 判断输入为空,弹出相应提示
                if (StringUtil.isEmpty(name)) {
                    JOptionPane.showMessageDialog(contentPane, "请输入客户名称", "系统提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }

                if (StringUtil.isEmpty(phone)) {
                    JOptionPane.showMessageDialog(contentPane, "请输入联系电话", "系统提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }

                if (StringUtil.isEmpty(address)) {
                    JOptionPane.showMessageDialog(contentPane, "请输入客户地址", "系统提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }

                // 创建对象
                Customer customer = new Customer();
                // 保存信息到对象中
                customer.setName(name);
                customer.setPhone(phone);
                customer.setAddress(address);
                try {
                    // 新增信息
                    customerDao.save(customer);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                    JOptionPane.showMessageDialog(contentPane, "保存异常:" + e1.getMessage(), "系统提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                JOptionPane.showMessageDialog(contentPane, "保存成功!");
                dispose();
            }
        });
        btnNewButton.setBounds(113, 215, 74, 23);
        contentPane.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("取消");
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        btnNewButton_1.setBounds(220, 215, 74, 23);
        contentPane.add(btnNewButton_1);
    }

}

四、其他

1.更多系统

Java+Swing系统系列实现

Java+Swing实现斗地主游戏

Java+Swing实现图书管理系统

Java+Swing实现医院管理系统

Java+Swing实现考试管理系统

Java+Swing实现酒店管理系统

Java+Swing实现超市管理系统

Java+Swing实现电影购票系统

Java+Swing实现仓库管理系统-1

Java+Swing实现仓库管理系统-2

Java+Swing实现进销存管理系统

Java+Swing实现自助取款机系统

Java+Swing实现通讯录管理系统

Java+Swing实现停车场管理系统

Java+Swing实现学生信息管理系统-1

Java+Swing实现学生信息管理系统-2

Java+Swing实现学生宿舍管理系统

Java+Swing实现学生选课管理系统

Java+Swing实现学生成绩管理系统

Java+Swing实现学校教材管理系统

Java+Swing实现学校教务管理系统

Java+Swing实现企业人事管理系统

Java+Swing实现电子相册管理系统

Java+Swing实现超市管理系统-TXT存储数据

Java+Swing实现自助取款机系统-TXT存储数据

Java+Swing实现宠物商店管理系统-TXT存储数据

Java+JSP系统系列实现

Java+JSP实现学生图书管理系统

Java+JSP实现学生信息管理系统

Java+JSP实现用户信息管理系统

Java+JSP实现教师信息管理系统

Java+JSP实现学生宿舍管理系统

Java+JSP实现商品信息管理系统

Java+JSP实现宠物信息管理系统

Java+JSP实现学生成绩管理系统

Java+Servlet系统系列实现

Java+Servlet+JSP实现航空订票系统

Java+Servlet+JSP实现新闻发布系统

Java+Servlet+JSP学生宿舍管理系统

Java+Servlet+JSP实现图书管理系统

Java+Servlet+JSP实现停车场管理系统

Java+Servlet+JSP实现房屋租赁管理系统

Java+Servlet+JSP实现学生信息管理系统

Java+Servlet+JSP实现学生选课管理系统

Java+Servlet+JSPl实现学生选课签到系统

Java+Servlet+JSP实现宠物诊所管理系统

Java+Servlet+JSP实现学生成绩管理系统-1

Java+Servlet+JSP实现学生成绩管理系统-2

Java+SSM系统系列实现

Java+SSM+JSP实现网上考试系统

Java+SSM+JSP实现宠物商城系统

Java+SSM+JSP实现超市管理系统

Java+SSM+JSP实现学生成绩管理系统

Java+SSM+JSP实现学生信息管理系统

Java+SSM+JSP实现药品信息管理系统

Java+SSM+JSP实现汽车信息管理系统

Java+SSM+Jspl实现商品信息管理系统

Java+SSM+JSP+Maven实现网上书城系统

Java+SSM+JSP+Maven实现学校教务管理系统

Java+SSH系统系列实现

Java+SSH+JSP实现在线考试系统

Java+SSH+JSP实现医院在线挂号系统

Java+Springboot系统系列实现

Java+Springboot+H-ui+Maven实现营销管理系统

Java+Springboot+Bootstrap+Maven实现网上商城系统

Java+Springboot+Bootstrap+Maven实现景区旅游管理系统

1.更多JavaWeb系统请关注专栏。

https://blog.csdn.net/helongqiang/category_10020130.html

2.更多JavaSwing系统请关注专栏。

https://blog.csdn.net/helongqiang/category_6229101.html

2.源码下载

sql在sql文件夹下面

系统账号信息如下,此处是管理员权限

账号:admin 密码:admin

3.运行项目

关注B站:水坚石青

后期有更多干货视频推出!!!

Eclipse如何导入JavaSwing项目超详细教程

4.备注

如有侵权请联系我删除。

5.支持博主

如果您觉得此文对您有帮助,请点赞加关注加收藏。祝您生活愉快!

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

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

相关文章

MapReduce小试牛刀

部署完hadoop单机版后&#xff0c;试下mapreduce是怎么分析处理数据的 Word Count Word Count 就是"词语统计"&#xff0c;这是 MapReduce 工作程序中最经典的一种。它的主要任务是对一个文本文件中的词语作归纳统计&#xff0c;统计出每个出现过的词语一共出现的次…

【云原生kubernetes】k8s 常用调度策略使用详解

一、前言 通过之前的学习&#xff0c;我们了解到k8s集群中最小工作单位是pod&#xff0c;对于k8s集群来说&#xff0c;一个pod的完整生命周期是由一系列调度策略来控制&#xff0c;这些调度策略具体是怎么工作的呢&#xff1f;本文将详细讨论下这个问题。 二、k8s调度策略简介…

K8S---Pod进阶资源限制以及探针

目录 一、Pod 进阶 1、资源限制 2、Pod 和 容器 的资源请求和限制&#xff1a; 3、CPU 资源单位 4、内存 资源单位 5、实例操作 5.1 示例1 5.2 示例2 6、重启策略&#xff08;restartPolicy&#xff09; 6.1 示例1 二、健康检查&#xff1a;又称为探针&#xff08;P…

华为OD机试题,用 Java 解【机器人走迷宫】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

电动针阀流量控制和电气比例阀压力控制在液氮低温控制中的应用

摘要&#xff1a;为了解决室温至液氮温区温控系统中需要昂贵的低温电动阀门进行液氮介质流量调节的问题&#xff0c;本文提供了三种不同精度的液氮温区内的低温温度控制解决方案。解决方案的技术核心是通过采用电动针阀和电气比例阀在室温环境下来快速调节外部气源流量或压力大…

Nginx网站服务——编译安装、基于授权和客户端访问控制

文章目录一、Nginx概述1.1、Nginx的特点1.2、Nginx编译安装1.3、Nginx运行控制1.4、Nginx和Apache的区别二、编译安装Nginx服务的操作步骤2.1、关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2.2、安装依赖包2.3、创建运行用户、组&#xff08;Nginx 服务程序默认…

【2023全网最全教程】从0到1开发自动化测试框架(建议收藏)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点&#xff1a; 首先&#xff0c;功能点多且细&#xff0c;测试工作量大&#xff0c;容易遗漏&#xff1b;其次&#xff0c;代码模块常改动&#xff0c;回归测试很频繁&#xff0c;测试重复低效&#xff1b;最后&#x…

Java 多线程 --- 多线程的相关概念

Java 多线程 --- 多线程的相关概念Race Condition 问题并发编程的性质 --- 原子性, 可见性, 有序性上下文切换 (Context Switch)线程的一些故障 --- 死锁, 活锁, 饥饿死锁 (Deadlock)活锁(Livelock)死锁和活锁的区别饥饿(Starvation)背景: 操作系统 — 线程/进程 同步 Race Co…

Windows操作系统的体系结构、运行环境和运行状态

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。说Windows操作系统的运行环境和运行状态&#xff0c;首先要介绍一下Windows操作系统的体系结构&#xff0c;然后再要说到最重要的两个概念:核…

【架构师】零基础到精通——微服务体系

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;软件设计师/鸿蒙高级工程师认证&#xff0c;在备战高级架构师/系统分析师&#xff0c;欢迎关注小弟&#xff01; 博主小留言…

Iterator和Genertator

一、Iterator迭代器和for of原理 * 遍历器&#xff08;Iterator&#xff09;是一种机制(接口)&#xff1a;为各种不同的数据结构提供统一的访问机制&#xff0c;任何数据结构只要部署Iterator接口&#xff0c;就可以完成遍历操作「for of循环」&#xff0c;依次处理该数据结构的…

【C++入门(下篇)】C++引用,内联函数,auto关键字的学习

前言&#xff1a; 在上一期我们进行了C的初步认识&#xff0c;了解了一下基本的概念还学习了包括&#xff1a;命名空间&#xff0c;输入输出以及缺省参数等相关的知识。今天我们将进一步对C入门知识进行学习&#xff0c;主要还需要大家掌握我们接下来要学习的——引用&#xf…

基于SpringCloud的可靠消息最终一致性06:轮询事务消息

上一节把可靠消息最终一致性的正常逻辑代码顺序执行了一次,并且对于同一个事务消息,在正常情况下它要被发送至少两次。 这是因为在发送消息之前,TransactionMessageService就已经把消息保存到了数据库中。而在首次消费完消息后,TransactionMessageListener并没有从数据库中…

冯诺依曼体系结构与操作系统的概念及理解

一、 冯诺依曼体系结构1、概念2、内存的作用3、硬件原理解释软件行为二、操作系统的概念及基本作用1、概念2、设计操作系统的目的3、操作系统的主要作用4、什么是管理5、管理的目的6、操作系统如何为我们服务一、 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们…

只需四步,手把手教你打造专属数字人

伴随ChatGPT的问世&#xff0c;在技术与商业运作上都日渐发展成熟的数字人产业正持续升温。去年9月&#xff0c;北京市发布了国内首个数字人产业专项支持政策&#xff0c;提出将依托国家文化专网将数字人纳入文化数据服务平台。以数字人、ChatGPT为代表的互联网3.0创新应用产业…

【2023】OAK智能深度相机用户实际应用项目(附开源代码)

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

Linux环境内存管理——分配内存和释放内存

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows程序员如何学习Linux环境内存管理。由于很多程序在Windows环境下开发好后&#xff0c;还要部署到Linux服务器上去&#xff0c;所以作为Windows程序员有必要学习Linux环境的内存…

IntelliJ IDEA 实用插件推荐(包含使用教程)

IntelliJ IDEA 实用插件推荐 背景&#xff1a;电脑重装了&#xff0c;重新下载了最新版的IntelliJ IDEA&#xff0c;感觉默认模式有点枯燥&#xff0c;于是决定从网上下载一些实用美观的插件优化自己以后吃饭的工具&#xff0c;现在推荐的都是目前还能用的&#xff08;亲身实践…

【java】Java 内存模型

文章目录前言什么是 Java 内存模型为什么需要 Java 内存模型顺序一致性内存模型Happens-Before 规则总结前言 在并发编程中&#xff0c;当多个线程同时访问同一个共享的可变变量时&#xff0c;会产生不确定的结果&#xff0c;所以要编写线程安全的代码&#xff0c;其本质上是对…

C语言青蛙跳台阶【图文详解】

青蛙跳台阶前言1. 题目介绍2. 解题思路3. 利用图片来演示青蛙跳台阶的原理4. 如何用C语言实现青蛙跳台阶前言 在本文&#xff0c;我们要与一只活泼可爱的小青蛙合作&#xff0c;带领着它跳上台阶&#xff0c;这个小家伙精力充沛&#xff0c;特别擅长于跳跃。我们要让它做我们的…