当前位置: 首页 > news >正文

SpringBoot+Vue实现前后端分离大学信息及院校推荐网站

文末获取源码

开发语言:Java

框架:springboot+vue

Node:node.js

JDK版本:JDK1.8

服务器:tomcat7

数据库:mysql 5.7/8.0

数据库工具:Navicat11

开发软件:eclipse/idea,Visual 

Maven包:Maven3.3.9

浏览器:谷歌浏览器

目录

一、前言介绍 

二、系统功能分析和描述 

2.1管理员用例

2.2用户用例

三、学生功能模块

3.1学生首页模块

3.2学校资讯模块

3.3学校信息模块

3.4个人信息模块

四、管理员功能模块 

4.1用户管理模块

4.2学校资讯模块

4.3推荐信息模块

4.4学校信息模块

4.5城市分类模块​

五、部分核心代码 

5.1登录关键代码

5.2注册关键代码

5.3用户管理关键代码

5.4站点管理关键代码

5.5更多管理关键代码


一、前言介绍 

系统管理也都将通过计算机进行整体智能化操作,对于大学信息及院校推荐网站所牵扯的管理及数据保存都是非常多的,例如管理员;首页、站点管理(轮播图、公告栏)用户管理(管理员、学生用户)内容管理(交流中心、交流中心分类、学习资讯、资讯分类)更多管理(推荐信息、学校信息、城市分类)这给管理者的工作带来了巨大的挑战,面对大量的信息,传统的管理系统,都是通过笔记的方式进行详细信息的统计,后来出现电脑,通过电脑输入软件将纸质的信息统计到电脑上,这种方式比较传统,而且想要统计数据信息比较麻烦,还受时间和空间的影响,所以为此开发了大学信息及院校推荐网站;为用户提供了方便管理平台,方便管理员查看及维护,并且可以通过需求进行内容的编辑及维护等;对于用户而言,可以随时进行查询所需信息,管理员可以足不出户就可以获取到系统的数据信息等,而且还能节省用户很多时间,所以开发大学信息及院校推荐网站给管理者带来了很大的方便,同时也方便管理员对用户信息进行处理

二、系统功能分析和描述 

使用大学信息及院校推荐网站的分为管理员和用户、两个权限模块。

管理员所能使用的功能主要有:首页、站点管理(轮播图、公告栏)用户管理(管理员、学生用户)内容管理(交流中心、交流中心分类、学习资讯、资讯分类)更多管理(推荐信息、学校信息、城市分类)等。

用户可以实现首页、交流中心、公告信息、学校资讯、学校信息。

2.1管理员用例

管理员登录后可进行首页、站点管理(轮播图、公告栏)用户管理(管理员、学生用户)内容管理(交流中心、交流中心分类、学习资讯、资讯分类)更多管理(推荐信息、学校信息、城市分类),管理员的用例如图 

2.2用户用例

用户注册登录后可进行首页、交流中心、公告信息、学校资讯、学校信息管理,用户用例如图

三、学生功能模块

3.1学生首页模块

学生进入到系统操作界面,可以对首页、交流中心、公告信息、学校资讯、学校信息等功能模块,如图 

3.2学校资讯模块

通过学校资讯可以查看资讯标题、资讯内容、发布时间、点赞数、浏览数等操作,如图 

 

3.3学校信息模块

学校信息推荐页面可查看学校名称、学校排名、所属城市、图片等信息如图

3.4个人信息模块

通过列表可以获取个人信息、进行详情、修改等操作,如图 

四、管理员功能模块 

管理员登录成功后进入到系统操作界面,可以对首页、站点管理(轮播图、公告栏)用户管理(管理员、学生用户)内容管理(交流中心、交流中心分类、学习资讯、资讯分类)更多管理(推荐信息、学校信息、城市分类)等功能模块进行相对应操作。

4.1用户管理模块

通过列表可以获取用户名、密码、角色等信息,进行修改或删除操作,如图

4.2学校资讯模块

4.3推荐信息模块

通过列表可以获取学生信息、第一推荐、第二推荐、第三推荐、备注信息等信息,进行删除或修改操作,如图 

4.4学校信息模块

该页面可以查看学校名称、学校排名、所属城市、建校时间、学校图片、招生分数线、招生时间等进行修改操作,以及图片的删除操作,如图 

4.5城市分类模块

五、部分核心代码 

5.1登录关键代码

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

5.2注册关键代码

/**

     * 注册

     * @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.3用户管理关键代码

public String encryption(String plainText) {

        String re_md5 = new String();

        try {

            MessageDigest md = MessageDigest.getInstance("MD5");

            md.update(plainText.getBytes());

            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");

            for (int offset = 0; offset < b.length; offset++) {

                i = b[offset];

                if (i < 0)

                    i += 256;

                if (i < 16)

                    buf.append("0");

                buf.append(Integer.toHexString(i));

            }

            re_md5 = buf.toString();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return re_md5;

    }

5.4站点管理关键代码

@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();

    }

5.5更多管理关键代码

@RequestMapping(value = "/del")

    @Transactional

    public Map<String, Object> del(HttpServletRequest request) {

        service.delete(service.readQuery(request), service.readConfig(request));

        return success(1);

}

    @Transactional

    public void delete(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");

        sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));

        log.info("[{}] - 删除操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

    }

相关文章:

  • 编程初学者如何缓解迷茫和焦虑?墙裂推荐此文,助你赢在起跑线
  • [创业之路-42] 创业是只有一小部分人活下来的游戏,探究创业失败的20个主要原因与提高成功率
  • FPGA实现SPI协议
  • 2022年金砖国家职业技能大赛(决赛)网络空间安全赛项 | 浙江赛区选拔赛 任务书
  • 第8章 聚合函数
  • Turbot4机器人入门教程-应用-读取图片文件并发布图像话题
  • Redis的性能优化一些方案
  • 你可能不知道的CSS特征查询
  • 【pygame】之小球基础
  • C++ Reference: Standard C++ Library reference: C Library: cstdarg: va_arg
  • Eclipse技巧(一):快速定位文件的层级位置 | 快速查找文件在工程根目录的位置
  • 汇编笔记[04][内存寻址方式]
  • 开发行业门槛越来越高,Android 开发者的未来之路到底在哪里?
  • Java如何为函数定义一个可变长度的参数呢?
  • 【数字设计】哲库科技_2023届_笔试面试题目分享
  • ----------
  • __proto__ 和 prototype的关系
  • Brief introduction of how to 'Call, Apply and Bind'
  • create-react-app项目添加less配置
  • docker-consul
  • IDEA 插件开发入门教程
  • Java 网络编程(2):UDP 的使用
  • JavaScript新鲜事·第5期
  • JS笔记四:作用域、变量(函数)提升
  • MySQL数据库运维之数据恢复
  • Python连接Oracle
  • underscore源码剖析之整体架构
  • 包装类对象
  • 产品三维模型在线预览
  • 关于extract.autodesk.io的一些说明
  • 关于for循环的简单归纳
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序01:wepy框架整合iview webapp UI
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 进程与线程(三)——进程/线程间通信
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #laravel 通过手动安装依赖PHPExcel#
  • $.ajax()参数及用法
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (已解决)什么是vue导航守卫
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .cn根服务器被攻击之后
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Framework杂记
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net分布式压力测试工具(Beetle.DT)
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • [《百万宝贝》观后]To be or not to be?
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]