JAVASE期末大作业商城管理项目分享

同步视频分享:https://www.bilibili.com/video/BV19oxteZEi3/?share_source=copy_web&vd_source=23299b0b57096c0bbced9f14616531b8
该项目旨在帮助初学者更好地掌握 Java 编程语言,了解基础的业务结构,并为学生在完成 Java 课程的期末大作业时提供参考和借鉴。

一、项目演示

1.1 登录界面

在这里插入图片描述

1.2 管理界面

在这里插入图片描述

1.3 用户管理界面

在这里插入图片描述

1.4 新增用户界面

在这里插入图片描述

二、技术介绍

  • jdk17

三、项目启动

源码地址:https://gitee.com/huang-jianmingm/shop-manager-system

3.1 进入giee拉取项目

在这里插入图片描述
在这里插入图片描述
使用IDEA打开项目:
在这里插入图片描述
粘贴刚刚的地址,然后克隆:
在这里插入图片描述

3.2 移动数据存储文件

在这里插入图片描述
项目的基础结构如上图所示,database 目录中存放着我们的序列化文件,这些文件用于数据存储。我们需要将 database 目录下的文件移动到配置文件中指定的路径,这样才能正确读取到数据。具体如下图所示,文件移动到和 ser.properties 中配置的位置一致。具体为何要这样子防止,在代码介绍时解释。
在这里插入图片描述

3.3 启动

找到项目启动类直接启动即可,启动后使用账号:admin;密码:123456进行登录。
在这里插入图片描述

四、项目结构

4.1 项目总体结构

在这里插入图片描述

4.2 gui结构介绍

在这里插入图片描述

4.3 pojo和service

在这里插入图片描述

五、代码介绍

5.1 启动类

public class ShopManagerSystem {
    public static void main(String[] args) {
        // 展示登录界面
        LoginView.showLoginUI();
    }

}

该类是整个项目的入口

5.2 登录功能

启动后进入登录界面,如下图所示:
在这里插入图片描述
具体登录代码:

        // 按钮
        JButton jbu = new JButton("登陆");
        jf.add(jbu);   //给窗体添加一个按钮对象

        // 添加登录监听器
        jbu.addActionListener(e -> {
            String username = jtf1.getText();
            String password = jtf2.getText();
            // 获取用户信息
            Map<String, User> userHashMap = UserMapper.getUserHashMap();
            // 验证账号和密码,如果正确显示登陆成功的界面
            if (userHashMap.get(username) == null) { // 账号错误
                JOptionPane.showMessageDialog(jf, "账号不存在", "提示", JOptionPane.ERROR_MESSAGE);
            } else if (!userHashMap.get(username).getPassword().equals(password)) { // 密码错误
                JOptionPane.showMessageDialog(jf, "密码错误", "提示", JOptionPane.ERROR_MESSAGE);
            } else {
                // 登录成功进入管理界面
                LoginView.closeLoginUI();
                ManagerView.init(userHashMap.get(username).getNickname());
            }
        });
  1. 当输入账号和密码之后就会触发登录监听器,执行登录监听器的代码
  2. 在监听器中获取我们刚刚输入的账号和密码,和数据文件中的用户做对比,如果匹配则登录成功,否则登录失败。

获取数据文件中用户的具体代码:

public class UserMapper {
    // 用户信息的哈希映射
    private static Map<String, User> userHashMap = new HashMap<>();
    // 用户信息 -> 数据存储
    private static List<User> userList;

    // 静态初始化块,在类加载时执行,用于初始化用户信息
    static {
        // 初始化系统用户
        userList = new ArrayList<>();
        SerializeUtil<User> userSerializeUtil = new SerializeUtil<>();
        userList.addAll(userSerializeUtil.deserializeObj("user"));

//        userList.add(new User("1", "admin", "123456", "管理员", "admin"));
//        userList.add(new User("2", "common", "123456", "员工", "worker"));
        userList.forEach(user -> userHashMap.put(user.getUsername(), user));
    }

    // 获取用户信息的静态方法
    public static Map<String, User> getUserHashMap() {
        return userHashMap;
    }

    public static List<User> getUserList() {
        return userList;
    }
}
  1. 当UserMapper加载时,静态代码块会随着类加载而加载,在静态代码块中对数据文件中的对象进行序列化
  2. 将序列化后的数据封装到Map数据结构中

序列化工具类:SerializeUtil,主要涉及到了IO流的读取,具体详情可查看代码。

5.3 管理界面功能

管理界面如下图所示,其中主要包含基础的增删改查功能。这里,功能的实现并不复杂,复制的主要是页面的构建,具体可查看对应的代码,代码中都有注释。
在这里插入图片描述

public class UserServiceImpl implements UserService {
    @Override
    public void addUser(User user) {
        List<User> userList = UserMapper.getUserList();
        long count = userList.stream().filter(u -> Objects.equals(u.getId(), user.getId()) || Objects.equals(u.getUsername(), user.getUsername())).count();
        if (count > 0) throw new RuntimeException("主键或账号已存在");
        userList.add(user);
    }

    @Override
    public void updateUser(User user) {
        List<User> userList = UserMapper.getUserList();
        // 根据id找到要修改的用户
        User temp = userList.stream().filter(u -> Objects.equals(u.getId(), user.getId())).findFirst().orElse(null);
        // 修改用户信息
        assert temp != null;
        temp.setNickname(user.getNickname());
        temp.setPassword(user.getPassword());
        temp.setUsername(user.getUsername());
        temp.setRole(user.getRole());
    }

    @Override
    public void deleteById(String id) {
        List<User> userList = UserMapper.getUserList();
        User temp = userList.stream().filter(u -> Objects.equals(u.getId(), id)).findFirst().orElse(null);
        userList.remove(temp);
    }

    @Override
    public User queryUserById(String id) {
        List<User> userList = UserMapper.getUserList();
        return userList.stream().filter(u -> Objects.equals(u.getId(), id)).findFirst().orElse(null);
    }

    @Override
    public List<User> queryUser(String nickname) {
        List<User> userList = UserMapper.getUserList();
        return userList.stream().filter(u -> u.getNickname().contains(nickname)).collect(Collectors.toList());
    }
}
  1. 首先通过UserMapper获取用户数据的List集合
  2. 新增、修改、编辑、删除、查询list集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明仔爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值