@TOC
10909ssm大学生兼职跟踪系统
系统概述
进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文档、数据等。而且我们通过总体设计,大致可以划分出了程序的模块,以及功能。但是只是一个初步的分类,并没有真正的实现。
整体设计,只是一个初步设计,而且,对于一个项目,我们可以进行多个整体设计,通过对比,包括性能的对比、成本的对比、效益的对比,来最终确定一个最优的设计方案,选择优秀的整体设计可以降低开发成本,增加公司效益,从这一点来讲,整体设计还是非常重要的。
大学生兼职跟踪系统工作原理图如图4-1所示:
图4-1 系统工作原理图
4.2 系统结构设计
系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。大学生兼职跟踪系统的整体结构设计如图4-2所示。
图4-2 系统结构图
4.3数据库设计
数据库是计算机信息系统的基础。目前,电脑系统的关键与核心部分就是数据库。数据库开发的优劣对整个系统的质量和速度有着直接影响。
4.3.1 数据库设计原则
数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示学生工作环境中所涉及的事物,属性则是对实体特性的描述。在系统设计当中数据库起着决定性的因素。下面设计出这几个关键实体的实体—关系图。
4.3.2 数据库实体
数据模型中的实体(Entity),也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。例如,公司中的每个员工,家里中的每个家具。
本系统的E-R图如下图所示:
1、兼职招聘信息实体图如图4-3所示:
图4-3兼职招聘信息实体图
2、商家信息实体图如图4-4所示:
图4-4商家信息实体图
3、学生信息实体图如图4-5所示:
图4-5学生信息实体图 ######### 4、管理员信息管理实体图如图4-6所示:
图4-6管理员信息管理实体图
4.3.3 数据库表设计
数据库的表信息属于设计的一部分,下面介绍数据库中的各个表的详细信息。
表名:token
功能:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | ` |
`主键 || |userid|bigint||用户id||| |username|varchar|100|用户名||| |tablename|varchar|100|表名||| |role|varchar|100|角色||| |token|varchar|200|密码||| |addtime|timestamp||新增时间||CURRENT_TIMESTAMP| |expiratedtime|timestamp||过期时间||CURRENT_TIMESTAMP|
表名:shangjia
功能:商家
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 编号 | ` |
`主键 || |addtime|timestamp||添加时间||CURRENT_TIMESTAMP| |shangjiazhanghao|varchar|200|商家账号||| |mima|varchar|200|密码||| |shangjiamingcheng|varchar|200|商家名称||| |jingyingfanwei |int||经营范围||| |shangjiaguimo|varchar|200|商家规模||| |farendaibiao|varchar|200|法人代表||| |lianxifangshi|varchar|200|联系方式||| |shangjiadizhi|varchar|200|收件地址||| |yingyezhizhao|varchar|200|营业执照|||
表名: xuesheng
功能:学生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | ` |
`主键 || |addtime|timestamp||添加时间||CURRENT_TIMESTAMP| |xuehao|varchar|200|学号||| |mima|varchar|200|密码||| |xingming|varchar|200|姓名||| |xingbie|varchar|200|性别||| |nianling|varchar|200|年龄||| |xueyuan|varchar|200|学院||| |zhuanye|varchar|200|专业||| |dianhua|varchar|200|电话||| |youxiang|varchar|200|邮箱||| |shenfenzheng|varchar|200|身份证||| |zhaopian|varchar|200|照片|||
表名:shangjiatousu
功能:商家投诉
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | ` |
`主键 || |addtime|timestamp||添加时间||CURRENT_TIMESTAMP| |xuehao|varchar|200|学号||| |xingming|int||姓名||| |dianhua|date||电话||| |shangjiazhanghao|varchar|200|商家账号||| |shangjiamingcheng|varchar|200|商家名称||| |tousuleixing|varchar|200|投诉类型||| |tousushijian|varchar|200|投诉时间||| |tousushuoming|varchar|200|投诉说明||| |sfsh|varchar|200|是否审核||| |shhf|varchar|200|审核回复|||
表名:tousuchuli
功能:投诉处理
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | ` |
主键 || |addtime|timestamp||添加时间||CURRENT\_TIMESTAMP| |shangjiazhanghao|varchar|200|商家账号||| |
`shangjiamingcheng |int||商家名称||| |tousuleixing|varchar|200|投诉类型||| |chufajieguo|date||处罚结果||| |fakuanjine|varchar|200|罚款金额||| |chulishijian|varchar|200|处理时间||| |xiangqingshuoming|varchar|200|详情说明||| #########
#########
5系统界面实现
5.1 登录
管理员输入个人的账号、密码和角色登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的账号、密码和角色不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入输入自己的账号、密码,直到账号密码输入成功后,会提登录成功的信息。网站管理员登录效果图如图5-1所示:
图5-1管理员登录界面
5.2 管理员功能模块
5.2.1 个人中心
管理员对个人中心进行编辑填写原密码、新密码、确认密码并进行添加、删除、修改以及查看、修改密码等操作。程序成效图如下图5-2所示:
图5-2个人中心界面图
5.2.2 商家管理
管理员对商家管理进行编辑商家账号、密码、商家名称、经营范围、商家规模、法人代表、联系方式、商家地址、营业执照等操作并可以进行删除、修改以及查看等操作。程序效果图如下图5-3所示:
图5-3商家管理界面
5.2.3 学生管理
管理员对学生管理进行编辑学号、密码、姓名、性别、年龄、学院、专业、电话、邮箱、身份证、照片等操作并可以进行删除、修改以及查看等操作。程序效果图如下图5-4所示:
图5-4学生管理界面
5.2.4 兼职招聘管理
管理员对兼职招聘管理进行编辑商家账号、商家名称、招聘标题、兼职岗位、招聘人数、岗位薪酬、工作天数、工作时长等等修改以及删除等操作。程序效果图如下图5-5所示:
图5-5兼职招聘管理界面
5.2.5兼职应聘管理
管理员对兼职应聘管理进行填写商家账号、商家名称、兼职岗位、岗位薪酬、工作天数、工作时长、学号、姓名、性别、年龄、专业、电话等等进行删除、修改以及查看等操作。程序效果图如下图5-6所示:
图5-6兼职应聘管理界面
5.2.6论坛管理
管理员对论坛管理进行编辑帖子标题、用户名、状态等等操作并可以进行删除、修改以及查看等操作。程序效果图如下图5-7所示:
图5-7论坛管理界面
5.2.7 轮播图管理
管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改,以及图片的删除,程序效果图如下图5-8所示:
图5-8轮播图管理界面
5.3 学生前后台功能模块
前台首页详情页面进:首页、兼职招聘、兼职论坛、系统公告、我的、跳转到后台等操作。程序效果图如下图5-9所示:
图5-9前台首页管理功能界面
5.3.1 兼职招聘
学生进入系统可以进行兼职招聘,通过填写商家账号、商家名称、兼职岗位、招聘人数、岗位薪酬、工作天数、工作时长、商家规模、联系方式、商家地址、发布日期进行登陆操作。程序效果图如下图5-10所示:
图5-10兼职招聘界面
5.3.2兼职论坛
学生进入兼职论坛可以标题、类型、内容等等信息,并可以进行查看等操作。程序效果图如下图5-11所示:
图5-11兼职论坛界面
5.3.3我的发布
学生进入我的发布可以对标题、发布时间进行查看等操作。程序效果图如下图5-12所示:
图5-12我的发布界面
5.3.4兼职应聘管理
学生进入兼职应聘管理可以对进行查看商家账号、商家名称、兼职岗位、岗位薪酬、工作天数、工作时长、学号、姓名、性别、年龄、专业、电话等操作。程序效果图如下图5-13所示:
图5-13兼职应聘管理界面
5.3.5商家投诉管理
学生进入商家投诉管理可以对学号、姓名、电话、商家账号、商家名称、投诉类型、投诉时间、投诉说明、审核回复查看、修改,并可以进行删除等操作。程序效果图如下图5-14所示:
图5-14商家投诉管理界面
5.4 商家功能模块
5.4.1兼职招聘管理
商家进入兼职招聘管理可以对商家账号、商家名称、招聘标题、兼职岗位、招聘人数、岗位薪酬、工作天数、工作时长、商家规模、联系方式、商家地址、发布日期查看、修改,并可以进行删除等操作。程序效果图如下图5-15所示:
图5-15兼职招聘管理界面
5.4.2兼职应聘管理
商家进入兼职应聘管理可以对商家账号、商家名称、兼职岗位、岗位薪酬、工作天数、工作时长、学号、姓名、性别、年龄、专业、电话、应聘时间、审核回复,查看、删除、详情等操作。程序效果图如下图5-16所示:
图5-16兼职应聘管理界面
5.4.3投诉处理管理
商家进入投诉处理管理可以对商家账号、商家名称、投诉类型、处理结果、罚款金额、处理时间、详情说明,查看、详情等操作。程序效果图如下图5-17所示:
图5-17投诉处理管理界面
NewsServiceImpl.java
package com.service.impl;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;
import com.dao.NewsDao;
import com.entity.NewsEntity;
import com.service.NewsService;
import com.entity.vo.NewsVO;
import com.entity.view.NewsView;
@Service("newsService")
public class NewsServiceImpl extends ServiceImpl<NewsDao, NewsEntity> implements NewsService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<NewsEntity> page = this.selectPage(
new Query<NewsEntity>(params).getPage(),
new EntityWrapper<NewsEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<NewsEntity> wrapper) {
Page<NewsView> page =new Query<NewsView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<NewsVO> selectListVO(Wrapper<NewsEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public NewsVO selectVO(Wrapper<NewsEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<NewsView> selectListView(Wrapper<NewsEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public NewsView selectView(Wrapper<NewsEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
}
TokenServiceImpl.java
package com.service.impl;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.TokenDao;
import com.entity.TokenEntity;
import com.entity.TokenEntity;
import com.service.TokenService;
import com.utils.CommonUtil;
import com.utils.PageUtils;
import com.utils.Query;
/**
* token
* @author yangliyuan
* @date 2019年10月10日 上午9:17:59
*/
@Service("tokenService")
public class TokenServiceImpl extends ServiceImpl<TokenDao, TokenEntity> implements TokenService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<TokenEntity> page = this.selectPage(
new Query<TokenEntity>(params).getPage(),
new EntityWrapper<TokenEntity>()
);
return new PageUtils(page);
}
@Override
public List<TokenEntity> selectListView(Wrapper<TokenEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public PageUtils queryPage(Map<String, Object> params,
Wrapper<TokenEntity> wrapper) {
Page<TokenEntity> page =new Query<TokenEntity>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public String generateToken(Long userid,String username, String tableName, String role) {
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
String token = CommonUtil.getRandomString(32);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, 1);
if(tokenEntity!=null) {
tokenEntity.setToken(token);
tokenEntity.setExpiratedtime(cal.getTime());
this.updateById(tokenEntity);
} else {
this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
}
return token;
}
@Override
public TokenEntity getTokenEntity(String token) {
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("token", token));
if(tokenEntity == null || tokenEntity.getExpiratedtime().getTime()<new Date().getTime()) {
return null;
}
return tokenEntity;
}
}
TousuchuliServiceImpl.java
package com.service.impl;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;
import com.dao.TousuchuliDao;
import com.entity.TousuchuliEntity;
import com.service.TousuchuliService;
import com.entity.vo.TousuchuliVO;
import com.entity.view.TousuchuliView;
@Service("tousuchuliService")
public class TousuchuliServiceImpl extends ServiceImpl<TousuchuliDao, TousuchuliEntity> implements TousuchuliService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<TousuchuliEntity> page = this.selectPage(
new Query<TousuchuliEntity>(params).getPage(),
new EntityWrapper<TousuchuliEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<TousuchuliEntity> wrapper) {
Page<TousuchuliView> page =new Query<TousuchuliView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<TousuchuliVO> selectListVO(Wrapper<TousuchuliEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public TousuchuliVO selectVO(Wrapper<TousuchuliEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<TousuchuliView> selectListView(Wrapper<TousuchuliEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public TousuchuliView selectView(Wrapper<TousuchuliEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
}
HomeProgress.vue
<template>
<div class="home-progress">
<div class="title">月访问量</div>
<div class="tip">同上期增长</div>
<el-progress
class="progress"
:text-inside="true"
:stroke-width="24"
:percentage="20"
status="success"
></el-progress>
<div class="title">月用户量</div>
<div class="tip">同上期增长</div>
<el-progress
class="progress"
:text-inside="true"
:stroke-width="24"
:percentage="50"
status="success"
></el-progress>
<div class="title">月收入</div>
<div class="tip">同上期减少</div>
<el-progress
class="progress"
:text-inside="true"
:stroke-width="24"
:percentage="28"
status="exception"
></el-progress>
</div>
</template>
<script>
export default {};
</script>
<style lang="scss">
.home-progress {
background: #ffffff;
height: 400px;
padding: 20px;
.title {
color: #666666;
font-weight: bold;
font-size: 20px;
margin-top: 10px;
}
.tip {
color: #888888;
font-size: 16px;
margin-top: 10px;
}
.progress {
margin-top: 10px;
}
}
</style>
声明
本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。