文末联系获取源码
开发语言:Java
框架:springboot
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7/8.0
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器
小程序框架:uniapp
小程序开发软件:HBuilder X
小程序运行软件:微信开发者
一、前言介绍
对网络安全进行了一定的考察和分析后,决定设计一个信息化的网络安全科普系统,采用Java语言技术进行开发,Mysql,数据库进行数据存储,结合微信小程序技术和SpringBoot,框架,通过采用这些技术在功能方面更加的完善,界面方面也更加的美观,符合现代人的审美。经过技术的发展目前的网络安全科普里一般也采用了计算机类的科普宣传网,但是都是综合性的平台,信息种类杂乱,所以经过一番考研调查后,诀决定设计单纯的网络安全科普系统,这样不单单是方便了管理员,对于用户来说了解网络安全信息也更加的方便,直接通过系统就可以进行查阅科普知识、案例分析,然后在线评价、交流、答题。
二、系统功能设计
根据系统的功能分析设计出本系统的功能为科普知识管理、用户管理、反馈交流管理、答题管理等。本系统的权限分为用户和管理员两种。界面分为管理员界面和用户界面。本系统的功能结构图如下图所示:
三、小程序端
3.1用户登录功能的实现界面
登录功能是识别身份的唯一途径,本系统中的用户为普通用户、管理员。用户在登录时输入的信息需要流入数据库中进行对比。如管理员输入 admin admin,数据库则需要对比管理员信息表中是否有admin admin的数据。存在该条数据才可以登录成功,不存在该条数据时会提示错误。用户登录界面的设计效果如下图所示:
3.2首页界面的实现
首页操作界面是门户,一个好的首页界面才可以吸引住用户。本操作界面里含有导航栏、系统名称、信息搜索窗口、案例分析展示模块和科普知识信息展示模块等。首页操作界面功能的实现界面如下图所示:
3.3用户注册功能的实现界面
游客可以注册,注册成为用户后才可以答题。用户注册功能的实现界面如下图所示:
3.4科普知识信息功能的实现界面
在科普知识信息界面里可以学习详细的科普知识。科普知识浏览功能的实现界面如下图所示:
3.5案例分析功能的实现界面
用户可以了解案例,通过案例学习知识。案例分析功能的实现界面如下图所示:
3.6在线评论功能的实现界面
用户可以实现评论发表自己的看法和疑问,在线评论功能的实现界面如下图所示:
3.7答题功能的实现界面
用户可以浏览题目和进行答题。答题功能实现界面如下图所示:
3.8建议反馈功能的实现界面
用户有问题可以进行留言,用户建议反馈功能的实现界面如下图所示:
3.9交流论坛功能的实现
用户可以浏览帖子和发表新的帖子,交流论坛功能的实现界面如下图所示:
3.10我的功能实现
在我的界面里用户可以管理收藏信息、答题信息、帖子信息等。我的功能实现界面如下图所示:
四、系统后台管理员功能实现
4.1个人中心功能的实现界面
管理员可以对密码、资料进行修改。个人中心功能的实现界面如下图所示:
4.2科普知识管理功能的实现界面
本功能包括对科普知识的添加、删除、修改、查询。添加科普知识时填写科普知识名称、简介等就可以完成,查询科普知识时填写查询条件即可以查询出来相对应的科普知识信息。添加科普知识信息功能的实现界面如下图所示:
4.3建议反馈管理功能的实现界面
建议反馈管理包括审核用户的留言内容和回复用户留言。建议反馈管理功能的实现界面如下图所示:
4.4用户管理功能的实现
用户信息可在本功能里进行管理,可以查看用户的注册资料。用户注册管理功能的实现界面如下图所示:
4.5在线答题功能的实现
管理员可以设置答题信息,实现界面如下图所示:
五、部分核心代码
5.1登录系统主要代码
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", username));
if(user==null || !user.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(), username,"yonghu", "用户" );
return R.ok().put("token", token);
}
5.2上传文件关键代码
@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
if (file.isEmpty()) {
throw new EIException("上传文件不能为空");
}
String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
String fileName = new Date().getTime()+"."+fileExt;
File dest = new File(upload.getAbsolutePath()+"/"+fileName);
file.transferTo(dest);
/**
* 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
* 请将以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替换成你本地项目的upload路径,
* 并且项目路径不能存在中文、空格等特殊字符
*/
// FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
if(StringUtils.isNotBlank(type) && type.equals("1")) {
ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
if(configEntity==null) {
configEntity = new ConfigEntity();
configEntity.setName("faceFile");
configEntity.setValue(fileName);
} else {
configEntity.setValue(fileName);
}
configService.insertOrUpdate(configEntity);
}
return R.ok().put("file", fileName);
}