基于Springboot的古诗词府学习网站系统设计与实现

目录
1.引言 2
1.1编写目的 2
1.2 背景 2
1.3需求分析 3
(1)用户需求: 3
(2)管理员需求: 4
(3) 安全需求 4
1.4参考资料 4
2项目概述 5
2.1 用户分析 7
2.2 用例分析 7
2.2.1 主用例分析 7
2.2.2 管理员用例分析 17
2.3 活动分析 24
2.3.1 游客活动分析 24
2.3.2 用户活动分析 27
2.3.3 管理员活动分析 30
3. 系统设计 39
3.1 系统架构设计 39
3.1.1 系统逻辑结构 39
3.2 包设计 39
3.3类设计 40
3.2顺序图设计 57
3.4 数据库设计 88
3.4.1 概念结构设计 88
3.4.2逻辑结构设计 88
4. 系统测试 91
(1)黑盒测试 91
(2) ab性能测试 96
5. 系统部署 97
5.1引言 97
5.2编写目的 97
5.3web端使用 97
5.4服务端安装部署 97
6. 系统实现 102
1.3需求分析
(1)用户需求:
古诗词系统,浏览古诗、诗人、用户分享的资源等,具体如下:
①浏览不同类别的诗词,例如思闺、战争、悼亡、思乡、怀古、禅、离别等;
②浏览不同朝代的诗词,例如唐朝、宋朝、元朝等;
③浏览推荐页面(此页面的诗词是根据各个诗词的收藏数排序)
④用户可以在诗词展示页中点击特定的诗词,进入详情页中查看诗词全文、诗词注释以及诗词翻译
⑤在线收藏功能:登录用户在浏览诗词的时候,如果是看到自己的喜欢的诗词内容,可以通过在线收藏的方式,本文转载自http://www.biyezuopin.vip/onews.asp?id=15087把内容产品收藏到自己的收藏夹中,可以下次直接在收藏的内容中查找到自己喜欢的诗词内容,很方便。另外,可以对自己收藏的诗词内容进行搜索以及删除;
⑥评论功能:登录用户可以查看诗词详情页中的评论,并且有发表评论的权限,也可以对自己的评论进行搜索以及删除;
⑦分享功能:用户可以在“分享页面”浏览ji其他用户分享的诗词。也可以自己登录后上传想要分享的内容,其中,分享内容框体可自己手动输入文字,也可通过图片识别文字。
⑧修改功能:用户可以修改自己的个人信息
⑨查看管理员发布的所有通知
⑩在头部搜索栏输入关键字,搜索对应信息的诗词列表集
⑪登录
12、注册
13、找回密码
(2)管理员需求:
①个人信息管理:对自己的个人信息进行修改,并且可以对用户信息进行增删改查;
②收藏、评论管理:对用户收藏的诗词以及发表的评论进行增删改查;
③诗词管理:对数据库中存在的诗词、诗人、朝代信息、诗词类别信息等进行增删改查;
④发布通知,并且对通知进行增删改查
⑤对用户上传的资源进行审核,也可以增删查改
(3)安全需求
①直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码,所以我们系统使用SHA-1将密码加密后再存储进数据库。

package com.springboot.controller;

import com.springboot.bean.Result;
import com.springboot.entity.TUser;

import com.springboot.security.SHA1Test;
import com.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.security.NoSuchAlgorithmException;
import java.util.List;

@Controller
@CrossOrigin(origins = {"http://localhost:3000"},allowCredentials = "true",allowedHeaders = {"X-Custom-Header"},
        maxAge = 3600L, methods={RequestMethod.GET,RequestMethod.POST,RequestMethod.HEAD})
public class AdminController {
    @Autowired
    private UserService userService;

    @GetMapping("/admin/listusers")
    @ResponseBody
    public Result adminlistalluser(String kw, Model model){
        if (kw!=null) kw="%"+kw+"%";
        if (kw==null) kw="%%";
        Result result = new Result();
        //通过关键字查询
        List<TUser> listusers= userService.adminshowAll(kw);
        //放到data中
        result.setData(listusers);
        System.out.println("listusers====="+listusers.toString());
        return result;
    }
    @PostMapping("/admin/listusers")
    @ResponseBody
    public Result adminlistalluserbykw(@RequestBody String kw){
        if (kw!=null) kw="%"+kw+"%";
        if (kw==null) kw="%%";
        System.out.println(kw);
        Result result = new Result();
        //通过关键字查询
        List<TUser> listusers= userService.adminshowAll(kw);
        //放到data中
        result.setData(listusers);
        return result;
    }

    @PostMapping("/admin/deleteuser")
    @ResponseBody
   public Result admindelete(@RequestBody String id){
        Result result = new Result();
        Integer id1=Integer.valueOf(id);
        userService.deleteById(id1);
        result.setDescription("删除成功");//添加返回信息描述
        //添加返回数据
        String kw="%%";
        //通过关键字查询
        List<TUser> listcomms= userService.adminshowAll(kw);
        //放到data中
        result.setData(listcomms);
        return result;
    }

    //添加、修改用户 id存在编辑用户信息,不存在则添加用户
    @PostMapping("/admin/saveuser")
    @ResponseBody
    public Result save(TUser user, RedirectAttributes attr) {
        Result result=new Result();
        try {
            //如果id为0 jpa的save方法起新增的作用;如果save不为0 那么jpa save方法起update作用
            if (user.getId() == 0) {
                //检查邮箱是否已注册
                if (userService.findEmail(user.getEmail()).size() != 0) {//如果该邮箱已注册
                    attr.addFlashAttribute("message", "该邮箱已注册");
                    result.setDescription("该邮箱已注册");
                    result.setCode(400);
                    result.setNextAction("/saveuser");
                    return result;
                }
                //密码加密
                SHA1Test sha1Test = new SHA1Test();
                user.setPassword(sha1Test.toHexString(user.getPassword()));
            }
            //密码加密
            SHA1Test sha1Test = new SHA1Test();
            user.setPassword(sha1Test.toHexString(user.getPassword()));
            userService.saveUser(user);
            result.setDescription("保存成功");
            result.setCode(200);
            result.setData(user);
//            result.setNextAction("/listusers");
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }



    //编辑修改用户信息
    @PostMapping("/admin/modifyuser")
    @ResponseBody
    public Result ModifyUser(TUser user, RedirectAttributes attr) throws NoSuchAlgorithmException {
        Result result=new Result();
        System.out.println("前端传来的数据user====="+user.toString());//前端传来的数据
        //密码加密
        SHA1Test sha1Test = new SHA1Test();
        user.setPassword(sha1Test.toHexString(user.getPassword()));
        userService.save(user);
        result.setDescription("修改用户信息成功!");
        TUser newuser = userService.findById(user.getId());
        result.setData(newuser);
        return result;
    }


//
//    //个人信息管理界面中:更改信息后保存
//    @PostMapping("/admin/modifyuser")
//    @ResponseBody
//    public Result SavePersonalInfo(TUser user, HttpSession session) throws NoSuchAlgorithmException {
//        Result result = new Result();
//        TUser user2=userService.findByEmail(user.getEmail());
//        System.out.println("前端传来的数据user====="+user.toString());//前端修后传来重新写入的数据
//        System.out.println("前端修改前数据user2====="+user2.toString());//前端修改前数据
//        System.out.println("111");
        if(userService.findByEmailNotId(user.getEmail(),user.getId()).size()!=0){
            result.setDescription("该邮箱已绑定账号,修改失败!");
            result.setCode(400);
            System.out.println("222");
            return result;
        }
        else {
        if(userService.findByEmail(user.getEmail()))
            SHA1Test sha1Test = new SHA1Test();
            user.setPassword(sha1Test.toHexString(user.getPassword()));
//        user.setUsername(user2.getUsername());
//            System.out.println("444");
//            userService.modifyUser(user2);
//             System.out.println("555");
//            result.setDescription("修改个人信息成功!");
//            System.out.println("666");
//            TUser usersession = userService.findById(user2.getId());
            session.setAttribute("usersession", usersession);
//            result.setData(usersession);
//            System.out.println("user2==="+user2.toString());
//            System.out.println("usersession==="+usersession.toString());
//            return result;
        }
//    }
//



//    //管理员添加用户
//    @PostMapping("/admin/saveuser")
//    @ResponseBody
//    public Result addUser(TUser user) throws ParseException, NoSuchAlgorithmException {
//        Result result=new Result();
//        //密码加密
//        SHA1Test sha1Test = new SHA1Test();
//        user.setPassword(sha1Test.toHexString(user.getPassword()));
//        userService.save(user);
//        result.setDescription("添加成功");//添加返回信息描述
//        result.setData(user);
//        return  result;
//    }






    /*
    @RequestMapping("/listusers")
    public Result listuserbykw(String kw, ModelMap modelMap, @RequestParam(value = "page", defaultValue = "0") Integer page,
                               @RequestParam(value = "size", defaultValue = "5") Integer size) {
        Result result=new Result();
        modelMap.addAttribute("kw", kw);
        if (kw != null) kw = "%" + kw + "%";
        if (kw == null) kw = "%%";
        Page<TUser> datas = userService.findBookCriteria(page, size, kw);//默认分页从0页面(第一页),取每页20条数据
        modelMap.addAttribute("datas", datas);
        result.setDescription("查询成功");
        result.setCode(200);
        result.setData(datas);
        result.setNextAction("/listusers");
        return result;
//        return datas;
    }

    //添加、修改用户 id存在编辑用户信息,不存在则添加用户
    @PostMapping("/saveuser")
    @CrossOrigin
    public Result save(@RequestBody @Valid TUser user, RedirectAttributes attr) {
        Result result=new Result();
        try {
            //如果id为0 jpa的save方法起新增的作用;如果save不为0 那么jpa save方法起update作用
            if (user.getId() == 0) {
                //检查邮箱是否已注册
                if (userService.findEmail(user.getEmail()).size() != 0) {//如果该邮箱已注册
                    attr.addFlashAttribute("message", "该邮箱已注册");
                    result.setDescription("该邮箱已注册");
                    result.setCode(400);
                    result.setNextAction("/saveuser");
                    return result;
                }
                //密码加密
                SHA1Test sha1Test = new SHA1Test();
                user.setPassword(sha1Test.toHexString(user.getPassword()));
            }
            userService.saveUser(user);
            result.setDescription("保存成功");
            result.setCode(200);
            result.setData(user);
            result.setNextAction("/listusers");
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    //    @RequestMapping
    @GetMapping("/deleteuser/{id}")
    public Result delete(@PathVariable("id") Integer id) {
        Result result=new Result();
        //        userService.deleteById(id);
        if (userService.deleteById(id)) {
            result.setDescription("删除失败");
            result.setCode(400);
            result.setNextAction("/listusers");
            return result;
        }
        else {
            result.setDescription("删除成功");
            result.setCode(200);
            result.setData(id);
            result.setNextAction("/listusers");
            return result;
        }
    }

    @PostMapping("/deleteusers")
    public Result deletes(String ids) {
        Result result=new Result();
        System.out.println("======" + ids);
        List<TUser> users = new ArrayList<>();
        JSONObject json = JSONObject.parseObject(ids);
        JSONArray arr = json.getJSONArray("ids");//前端传递时使用uods作为json数据的键
        int ilen = arr.size();
        for (int i = 0; i < ilen; i++) {//每次循环ilen次来执行ilen个查询,再去删除
            users.add(userService.findById(arr.getInteger(i)));
        }
        if (userService.deletes(users)) {

            result.setDescription("删除失败");
            result.setCode(400);
            result.setNextAction("/listusers");
            return result;
        }
        else {
            result.setDescription("删除成功");
            result.setCode(200);
            result.setData(ids);
            result.setNextAction("/listusers");
            return result;
        }
    }

     */

//    @PostMapping("/delete")
//    public void delete(@PathVariable("id") Integer id,@RequestParam("ids") String ids) {
//        if (id!=null){
//            userService.deleteById(id);
//        }
//        else {
//            // 接收包含stuId的字符串,并将它分割成字符串数组
//            String[] idList = ids.split(",");
//            // 将字符串数组转为List<Intger> 类型
//            List<Integer> LString = new ArrayList<Integer>();
//            for (String idi : idList) {
//                LString.add(new Integer(idi));
//            }
//
//            int ilen = LString.size();
//            for (int i = 0; i < ilen; i++) {
//                userService.deleteById(LString.get(i));
//            }
//        }
//    }
}





在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shejizuopin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值