项目介绍
当今时代,是信息大爆炸的时代,人们每天都能接收到数不清的各类信息,其形式不仅包含传统的文字和图片,还有视频、音频等多阅读资料源也较以往增长了太多。因此市面上各种阅读类应用的用户体验参差不齐,所以设计一个通用的阅读器,小说阅读器小程序采用java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户二部分,管理员服务端:首页、个人中心、用户管理、小说分类管理、书城管理、订单信息管理、小说资讯管理、小说章节管理、书圈、系统管理,用户客户端;首页、书城、小说资讯、书圈、我的等功能,基本上实现了整个小说阅读器小程序信息管理的过程。本系统在一般小说阅读器小程序的基础上增加了最新信息的功能方便用户快速浏览,是一个高效的、动态的、相互友好的小说阅读器小程序。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,微信开发者工具,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net
系统实现
5.1管理员服务端功能模块
管理员登录,管理员通过输入用户名、密码、角色等信息即可进行系统登录,如图5-1所示。
图5-1管理员登录界面图
管理员登录进入小说阅读器小程序可以查看首页、个人中心、用户管理、小说分类管理、书城管理、订单信息管理、小说资讯管理、小说章节管理、书圈、系统管理等内容,如图5-2所示。
图5-2管理员功能界面图
用户管理,在用户管理页面可以查看用户账号、用户姓名、性别、年龄、头像、用户手机等信息,并可根据需要进行详情、删除、修改等操作,如图5-3所示。
图5-3用户管理界面图
小说分类管理,在小说分类管理页面可以查看小说分类等内容,并可根据需要进行详情、删除,修改等操作,如图5-4所示。
图5-4小说分类管理界面图
书城管理,在书城管理页面可以查看小说编号、小说名称、小说分类、图片封面、作者、出版社、总章节、字数、价格等信息,并可根据需要进行详情、查看评论、删除,修改等操作,如图5-5所示。
图5-5书城管理界面图
订单信息管理,在订单信息管理页面可以查看订单编号、小说编号、小说名称、小说分类、图片封面、作者、价格、用户账号、用户姓名、备注、用户手机、是否支付、审核回复、审核状态、审核等信息,并可根据需要进行详情、推送章节、删除,修改等操作,如图5-6所示。
图5-6订单信息管理界面图
小说资讯管理,在小说资讯管理页面可以查看标题、封面、资讯来源、发布时间等信息,并可根据需要进行详情、删除,修改等操作,如图5-7所示。
图5-7小说资讯管理界面图
小说章节管理,在小说章节管理页面可以查看订单编号、小说名称、图片封面、章节、用户账号、用户姓名等信息,并可根据需要进行详情、修改、删除等操作,如图5- 8所示。
图5-8小说章节管理界面图
书圈,在书圈页面可以查看帖子标题、用户名、状态等信息,并可根据需要进行修改操作,如图5- 9所示。
图5-9书圈界面图
轮播图;该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除等操作,如图5- 10所示
图5-10轮播图界面图
5.2用户客户端功能模块
用户注册通过注册窗口,进行在线填写自己的用户账号、密码、用户姓名、性别、年龄、用户手机等,信息编辑完成后核对信息无误后进行选择注册,系统核对用户所输入的账号信息是否准确,核对信息准确无误后系统进入到操作界面。如图5-11所示。
图5-11用户注册界面图
用户登录通过账号、密码页面,进入到小说阅读器小程序主界面,进入到操作界面,进行相对应操作,如图5-12所示。
图5-12用户登录界面图
用户首页页面可以查看首页、书城、小说资讯、书圈、我的等信息,进行提交操作,如图5-13所示。
图5-13用户首页界面图
用户进入书城页面可以填写小说编号、小说名称、小说分类、图片封面、作者、出版社、总章节、字数、价格等信息,进行购买或收藏等操作,如图5-14所示。
图5-14书城界面图
用户进入订单信息页面可以填写订单编号、小说编号、小说名称、小说分类、图片封面、作者、价格、用户账号、用户姓名、备注、用户手机等信息,进行提交等操作,如图5-15所示。
图5-15订单信息界面图
用户进入我的发布页面可以填写标题、内容等信息,进行确认提交操作,如图5-16所示。
图5-16我的发布界面图
用户进入用户信息页面可以填写用户账号、用户姓名、性别、年龄、头像、用户手机等信息,进行保存、退出登录操作,如图5-17所示。
图5-17用户信息界面图
用户进入书圈发帖详情页面可以填写帖子标题、用户名等信息,进行回复、评论等操作,如图5-18所示。
图5-18书圈发帖详情界面图
核心代码
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.XiaoshuofenleiEntity;
import com.entity.view.XiaoshuofenleiView;
import com.service.XiaoshuofenleiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 小说分类
* 后端接口
* @author
* @email
* @date
*/
@RestController
@RequestMapping("oshuofenlei")
public class XiaoshuofenleiController {
@Autowired
private XiaoshuofenleiService xiaoshuofenleiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,XiaoshuofenleiEntity xiaoshuofenlei,
HttpServletRequest request){
EntityWrapper<XiaoshuofenleiEntity> ew = new EntityWrapper<XiaoshuofenleiEntity>();
PageUtils page = xiaoshuofenleiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xiaoshuofenlei), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("st")
public R list(@RequestParam Map<String, Object> params,XiaoshuofenleiEntity xiaoshuofenlei, HttpServletRequest request){
EntityWrapper<XiaoshuofenleiEntity> ew = new EntityWrapper<XiaoshuofenleiEntity>();
PageUtils page = xiaoshuofenleiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xiaoshuofenlei), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("sts")
public R list( XiaoshuofenleiEntity xiaoshuofenlei){
EntityWrapper<XiaoshuofenleiEntity> ew = new EntityWrapper<XiaoshuofenleiEntity>();
ew.allEq(MPUtil.allEQMapPre( xiaoshuofenlei, "xiaoshuofenlei"));
return R.ok().put("data", xiaoshuofenleiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(XiaoshuofenleiEntity xiaoshuofenlei){
EntityWrapper< XiaoshuofenleiEntity> ew = new EntityWrapper< XiaoshuofenleiEntity>();
ew.allEq(MPUtil.allEQMapPre( xiaoshuofenlei, "xiaoshuofenlei"));
XiaoshuofenleiView xiaoshuofenleiView = xiaoshuofenleiService.selectView(ew);
return R.ok("查询小说分类成功").put("data", xiaoshuofenleiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
XiaoshuofenleiEntity xiaoshuofenlei = xiaoshuofenleiService.selectById(id);
return R.ok().put("data", xiaoshuofenlei);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
XiaoshuofenleiEntity xiaoshuofenlei = xiaoshuofenleiService.selectById(id);
return R.ok().put("data", xiaoshuofenlei);
}
/**
* 后端保存
*/
@RequestMapping("ve")
public R save(@RequestBody XiaoshuofenleiEntity xiaoshuofenlei, HttpServletRequest request){
xiaoshuofenlei.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(xiaoshuofenlei);
xiaoshuofenleiService.insert(xiaoshuofenlei);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody XiaoshuofenleiEntity xiaoshuofenlei, HttpServletRequest request){
xiaoshuofenlei.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(xiaoshuofenlei);
xiaoshuofenleiService.insert(xiaoshuofenlei);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody XiaoshuofenleiEntity xiaoshuofenlei, HttpServletRequest request){
//ValidatorUtils.validateEntity(xiaoshuofenlei);
xiaoshuofenleiService.updateById(xiaoshuofenlei);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
xiaoshuofenleiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<XiaoshuofenleiEntity> wrapper = new EntityWrapper<XiaoshuofenleiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = xiaoshuofenleiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
论文参考
目 录
摘 要 I
ABSTRACT II
目 录 II
第1章 绪论 1
1.1背景及意义 1
1.2 研究现状 2
1.3 研究意义 3
第2章 相关技术 4
2.1微信开发者工具 5
2.2 平台开发相关技术 6
第3章 系统分析 7
3.1 系统目标 8
3.2系统流程和逻辑 9
第4章系统概要设计 10
4.1 概述 11
4.2 系统结构 12
4.3 数据库设计 13
4.3.1 数据库实体 14
4.3.2 数据库设计表 15
第5章 系统详细设计 16
5.1管理员服务端功能模块 18
5.2用户客户端功能模块 18
第6章 系统测试 19
6.1系统测试的目的 20
6.2系统测试方法 21
6.3测试结果 22
结 论 23
致 谢 24
参考文献 25