【计算机毕业设计】基于SpringBoot+Vue网络云端日记本系统的设计与实现

2023-09-21 11:33:23

博主主页:一季春秋
博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。

🍅文末获取联系🍅

精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

SpringBoot+Vue项目持续更新中

http://t.csdn.cn/1mgm8

目录

一、项目介绍 

二、项目主要技术 

三、网络云端日记本系统分析

3.1 系统功能分析

3.2 系统用例分析

四、系统详细设计与实现

4.1 登录模块

4.2 注册模块

4.3 用户管理模块

4.4 日记信息模块

4.5 备忘录信息模块

4.6 提醒信息模块

4.7 公告信息模块

4.8 日记信息统计

4.9 用户日记信息模块

五、实现代码

5.1 注册逻辑代码 

5.2 日记信息关键代码


一、项目介绍 

本设计主要实现集人性化、高效率、便捷等优点于一身的网络云端日记本系统,完成系统用户、分类管理、日记信息、备忘录信息、提醒信息、公告信息等功能模块。系统通过浏览器与服务器进行通信,实现数据的交互与变更。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。网络云端日记本系统使用Java语言,采用基于MVVM模式的搜springboot技术进行开发,使用 MyEclipse 2017 CI 10 编译器编写,数据方面主要采用的是微软的MySQL关系型数据库来作为数据存储媒介,配合Vue 技术完成系统的开发。

二、项目主要技术 

开发语言:Java

使用框架:spring boot

前端技术:JavaScript、Vue 、css3

开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:jdk1.8

Maven: apache-maven 3.8.1-bin

三、网络云端日记本系统分析

3.1 系统功能分析

网络云端日记本系统的设计与实现是为了让使用者更加方便的进行管理员工相关联的一些信息,使用者查找管理的时候能够节省大量的时间和精力,有效减少不必要的查找时间。系统在功能上划分为管理员端以及系统用户这两大部分。

管理员端:

(1)个人资料:管理在登录以后可以修改自己的个人资料以及对自己账号登录的密码进行修改;

(2)系统用户:管理员可以对系统中所有的用户角色进行管控,包含了管理员以及系统用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。

(3)日记信息:管理员点击“日记信息”会显示出所有的日记信息,支持通过日记信息状态或者输入日记编号或者日记名称对日记信息进行查询,如果想要添加新的日记信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条日记信息,点击“删除”进行删除。

(4)备忘录信息:管理员点击“备忘录信息”会显示出所有的备忘录信息,支持输入标题名称或者用户信息对备忘录信息进行查询,如果想要添加新的备忘录信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条备忘录信息,点击“删除”进行删除,也可以点击后面的“提醒”按钮对备忘录信息的提醒信息进行更新维护;

(5)提醒信息:管理员点击“提醒信息”会显示出所有的提醒信息,支持通过提醒信息状态或者输入标题名称或者用户信息对提醒信息进行查询,如果想要添加新的提醒信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条提醒信息,点击“删除”进行删除。

(6)公告信息:点击“公告信息”这个按钮可以查看到系统中所有的公告信息,支持通过公告编号或者公告标题进行查询公告信息,如果想要添加新的公告信息,点击“添加”按钮然后根据提示输入公告信息,点击“提交”后,在公告信息界面就会显示新增的公告信息,可以点击某一公告信息查看公告信息的详情,也可以直接点击“删除”进行删除公告信息;

系统用户端:

(1)注册登录:当用户想要对系统中所实现的功能进行查询管理的时候,就必须进行登录到系统当中,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,用户的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录;

(2)个人资料:学生在登录以后可以修改自己的个人资料以及对自己账号登录的密码进行修改;

(3)日记信息:管理员点击“日记信息”会显示出所有的日记信息,支持通过日记信息状态或者输入日记编号或者日记名称对日记信息进行查询,如果想要添加新的日记信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条日记信息,点击“删除”进行删除。

(4)备忘录信息:管理员点击“备忘录信息”会显示出所有的备忘录信息,支持通过标题名称或者用户信息或者用户姓名对备忘录信息进行查询,如果想要添加新的备忘录信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条备忘录信息,点击“删除”进行删除。

(5)公告信息:点击“公告信息”这个菜单,可以查看到系统中所有添加的公告信息,支持通过公告编号或者公告标题对公告信息进行查询,如果想要了解某一公告信息的详细信息,点击后面的“详情”会进入详情界面;

3.2 系统用例分析

网络云端日记本系统中系统用户角色用例图如图所示: 

网络云端日记本系统中管理员角色用例图如图所示: 

四、系统详细设计与实现

4.1 登录模块

管理员和用户在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员和用户的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图所示。

4.2 注册模块

注册模块满足用户部分,当用户想要进行用户相关信息的查询管理的时候,就必须进行登录,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,注册的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录,其主界面展示如下图所示。

4.3 用户管理模块

管理员可以对系统中所有的用户角色进行管控,包含了管理员以及用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户,这里以管理员用户为例。界面如下图所示。 

4.4 日记信息模块

管理员点击“日记信息”会显示出所有的日记信息,支持输入日记编号或者日记名称对日记信息进行查询,如果想要添加新的日记信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条日记信息,点击“删除”进行删除,界面如下图所示。

4.5 备忘录信息模块

管理员点击“备忘录信息”会显示出所有的备忘录信息,支持输入标题名称或者用户信息或者用户姓名对备忘录信息进行查询,如果想要添加新的备忘录信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条备忘录信息,点击“删除”进行删除,也可以点击后面的“提醒”按钮对备忘录信息的提醒信息进行更新维护。界面如下图所示。

4.6 提醒信息模块

管理员和用户点击“提醒信息”这个按钮可以查看到系统中的提醒信息,支持通过标题名称或者用户信息或者用户性别进行查询提醒信息,如果想要添加新的提醒信息,点击“添加”按钮然后根据提示输入提醒信息,点击“提交”后,在提醒信息界面就会显示新增的提醒信息,可以点击某一提醒信息查看提醒信息的详情,也可以直接点击“删除”进行删除提醒信息。界面如下图所示。

4.7 公告信息模块

点击“公告信息”这个菜单,可以查看到系统中所有添加的公告信息,支持通过公告编号或者公告标题对公告信息进行查询,只有管理员用户可以添加新的公告信息,点击“添加”按钮,根据提示输入公告信息,点击“提交”按钮,新的公告信息就在系统中显示出来了,也可以对添加的公告信息进行删除。界面如下图所示。

4.8 日记信息统计

 

4.9 用户日记信息模块

五、实现代码

5.1 注册逻辑代码 

/**
     * 注册
     * @param user
     * @return
     */
    @PostMapping("register")
    public Map<String, Object> signUp(@RequestBody User user) {
        // 查询用户
        Map<String, String> query = new HashMap<>();
        query.put("username",user.getUsername());
        List list = service.select(query, new HashMap<>()).getResultList();
        if (list.size()>0){
            return error(30000, "用户已存在");
        }
        user.setUserId(null);
        user.setPassword(service.encryption(user.getPassword()));
        service.save(user);
        return success(1);
}

/**
     * 用户ID:[0,8388607]用户获取其他与用户相关的数据
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Integer userId;

    /**
     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
     */

    @Basic
    @Column(name = "state")
    private Integer state;

    /**
     * 所在用户组:[0,32767]决定用户身份和权限
     */

    @Basic
    @Column(name = "user_group")
    private String userGroup;

    /**
     * 上次登录时间:
     */

    @Basic
    @Column(name = "login_time")
    private Timestamp loginTime;

    /**
     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
     */

    @Basic
    @Column(name = "phone")
    private String phone;

    /**
     * 手机认证:[0,1](0未认证|1审核中|2已认证)
     */

    @Basic
    @Column(name = "phone_state")
    private Integer phoneState;

    /**
     * 用户名:[0,16]用户登录时所用的账户名称
     */

    @Basic
    @Column(name = "username")
    private String username;

    /**
     * 昵称:[0,16]
     */

    @Basic
    @Column(name = "nickname")
    private String nickname;

    /**
     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
     */

    @Basic
    @Column(name = "password")
    private String password;

    /**
     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
     */

    @Basic
    @Column(name = "email")
    private String email;

    /**
     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)
     */

    @Basic
    @Column(name = "email_state")
    private Integer emailState;

    /**
     * 头像地址:[0,255]
     */

    @Basic
    @Column(name = "avatar")
    private String avatar;

    /**
     * 创建时间:
     */

    @Basic
    @Column(name = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Timestamp createTime;

    @Basic
    @Transient
    private String code;
}

5.2 日记信息关键代码

@PostMapping("/add")
    @Transactional
    public Map<String, Object> add(HttpServletRequest request) throws IOException {
        service.insert(service.readBody(request.getReader()));
        return success(1);
    }

    @Transactional
    public Map<String, Object> addMap(Map<String,Object> map){
        service.insert(map);
        return success(1);
}

    public Map<String,Object> readBody(BufferedReader reader){
        BufferedReader br = null;
        StringBuilder sb = new StringBuilder("");
        try{
            br = reader;
            String str;
            while ((str = br.readLine()) != null){
                sb.append(str);
            }
            br.close();
            String json = sb.toString();
            return JSONObject.parseObject(json, Map.class);
        }catch (IOException e){
            e.printStackTrace();
        }finally{
            if (null != br){
                try{
                    br.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
        return null;
}

    public void insert(Map<String,Object> body){
        StringBuffer sql = new StringBuffer("INSERT INTO ");
        sql.append("`").append(table).append("`").append(" (");
        for (Map.Entry<String,Object> entry:body.entrySet()){
            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
        }
        sql.deleteCharAt(sql.length()-1);
        sql.append(") VALUES (");
        for (Map.Entry<String,Object> entry:body.entrySet()){
            Object value = entry.getValue();
            if (value instanceof String){
                sql.append("'").append(entry.getValue()).append("'").append(",");
            }else {
                sql.append(entry.getValue()).append(",");
            }
        }
        sql.deleteCharAt(sql.length() - 1);
        sql.append(")");
        log.info("[{}] - 插入操作:{}",table,sql);
        Query query = runCountSql(sql.toString());
        query.executeUpdate();
    }
更多推荐

openGauss学习笔记-70 openGauss 数据库管理-创建和管理普通表-查看表数据

文章目录openGauss学习笔记-70openGauss数据库管理-创建和管理普通表-查看表数据70.1查询数据库所有表的信息70.2查询表的属性70.3查询表的数据量70.4查询表的所有数据70.5查询字段的数据70.6过滤字段的重复数据70.7查询字段为某某的所有数据70.8按照字段进行排序openGauss学习

深入学习 Redis Sentinel - 基于 DockerCompose 编排哨兵分布式架构,理解工作原理

目录一、哨兵模式1.1、为何引入哨兵模式1.2、RedisSentinel分布式架构1.2.1、概述1.2.2、工作原理(redis哨兵的核心功能)1.监控:2.自动故障转移:3.通知1.2.3、问题:哨兵结点只有一个可以么?1.3、使用Docker和DockerCompose模拟部署哨兵模式1.3.1、前言1.3.2

搭建ELK+Filebead+zookeeper+kafka实验

部署Zookeeper集群准备3台服务器做Zookeeper集群192.168.10.17192.168.10.21192.168.10.221.安装前准备关闭防火墙systemctlstopfirewalldsystemctldisablefirewalldsetenforce0安装JDKyuminstall-yja

Vulnhub实战-DC9

前言本次的实验靶场是Vulnhub上面的DC-9,其中的渗透测试过程比较多,最终的目的是要找到其中的flag。一、信息收集对目标网络进行扫描arp-scan-l对目标进行端口扫描nmap-sC-sV-oAdc-9192.168.1.131扫描出目标开放了22和80两个端口,访问目标的80端口。对目标进行目录扫描与分析。

第三十章 Classes - 方法生成器

[toc]第三十章Classes-方法生成器方法生成器方法生成器是类编译器在类编译期间调用的程序。它的输出是该方法的实际运行时实现。方法生成器提供了一种继承方法的方法,可以生成根据继承类或属性的需要定制的高性能、专用代码。在IRIS库中,方法生成器广泛用于数据类型和存储类。ClassQueries类可以包含类查询。类查

【自学开发之旅】Flask-会话保持-API授权-注册登录

http-无状态-无法记录是否已经登陆过#会话保持–sessioncookiesession–保存一些在服务端cookie–保存一些数据在客户端session在单独服务器D上保存,前面数个服务器A,B,C上去取就好了,业务解耦。—》》现在都是基于token的验证。以上是基于BS架构API授权由服务端完全把控三张表,ap

【Linux基础】第29讲 Linux用户和用户组权限控制命令(一)

1useradd添加新用户(注意:当前用户必须有添加用户的权限)1)基本语法useradd用户名(功能描述:添加新用户)2)案例root@sue-virtual-machine:/usr/local#useraddhadoop2passwd设置用户密码1)基本语法passwd用户名(功能描述:设置用户密码)2)案例ro

JavaScript与jQuery(下篇)

JavaScript与jQuery笔记(下篇)一、获取jquery二、jquery选择器三、jquery事件四、jquery操作Dom元素————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶ ̄),谢谢~~jQueryjquery库,里面存在大量的javascript函数一、获取jqueryhttps://w

【1++的C++进阶】之特殊类设计

👍作者主页:进击的1++🤩专栏链接:【1++的C++进阶】文章目录一,设计一个类使其不能被拷贝二,设计一个类只能在堆上创建对象三,设计一个类只能在栈上创建对象四,设计一个类不能够被继承五,单例模式一,设计一个类使其不能被拷贝我们有三种方法能够设计此种类拷贝构造函数私有化拷贝构造函数只声明不定义拷贝构造函数后加del

Django05_反向解析

Django05_反向解析5.1反向解析概述随着功能的不断扩展,路由层的url发生变化,就需要去更改对应的视图层和模板层的url,非常麻烦,不便维护。这个时候我们可以通过反向解析,将url解析成对应的试图函数通过path或re_path中的name属性进行解析反向解析一般用在模板中的超链接及视图中的重定向在之前内容中,

美国零售电商平台Target,值得入驻吗?如何入驻?

Target是美国最大的零售商之一,在品牌出海为大势所趋的背景下,它在北美电商中的地位节节攀升。Target商店在众多垂直领域提供各种价格实惠的自有品牌,吸引越来越多的跨境商家入驻,如美妆、家居、鞋服、日用百货等,随着电子商务平台Target+的推出,其在线业务在过去几年中显着增长。&nbsp;&nbsp;为什么品牌需

热文推荐