博主主页:一季春秋
博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。文末获取联系
精彩专栏推荐订阅 不然下次找不到哟
SpringBoot+Vue项目持续更新中
http://t.csdn.cn/1mgm8
目录
一、项目介绍
二、项目主要技术
三、系统的设计
四、系统的实现
4.1 系统前台功能实现
4.2 管理员功能实现
4.3 科研队伍功能实现
4.4 用户功能实现
五、实现代码
系统阐述的是使用科研管理系统,对于Java、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了springboot框架和MySql数据库技术搭建系统的整体架构。利用这些技术结合实际需求开发了具有个人中心、用户管理、科研队伍管理、队伍信息管理、加入队伍管理、队伍申请管理、科研成果管理、项目成果申报管理、公告信息管理、资源文件管理、信息交流、系统管理等功能的系统,最后对系统进行相应的测试,测试系统有无存在问题以及测试用户权限来优化系统,最后系统达到预期目标。
开发语言:Java
使用框架:spring boot
前端技术:JavaScript、Vue 、css3
开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
数据库:MySQL 5.7/8.0
数据库管理工具:phpstudy/Navicat
JDK版本:jdk1.8
Maven: apache-maven 3.8.1-bin
科研管理系统分三大部分,即管理员管理、科研队伍管理和用户管理。系统按照用户的实际需求开发而来,贴近生活。从管理员出拿到分配好的账号密码可以进入系统,使用相关的系统应用。管理员总体负责整体系统的运行维护,统筹协调。
系统整体模块设计:系统分为管理员、科研队伍和用户三大用户角色,系统管理员有最大的权限,整体功能展示如图所示。
打开系统的网址后,首先看到的就是首页界面。在这里能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。系统首页界面如图所示:
系统注册:在系统注册页面的输入栏中输入用户注册信息进行注册操作,系统注册页面如图所示:
队伍信息:在队伍信息页面的输入栏中输入队伍名称和组长姓名进行查询,可以查看到队伍详细信息,并根据需要进行加入申请、评论或收藏操作;队伍信息页面如图所示:
队伍详细信息
科研成果:在科研成果页面的输入栏中输入成果名称、选择队伍名称和成果类型进行查询,可以查看到科研成果详细信息,并根据需要进行评论或收藏操作;科研成果页面如图所示:
资源文件:在资源文件页面的输入栏中输入资源名称、资源类型和发布人进行查询,可以查看到资源文件详细信息,并根据需要进行评论或收藏操作;资源文件页面如图所示:
个人中心:在个人中心页面输入个人信息可以进行更新操作,并根据需要对我的发布和我的收藏进行详细操作;如图所示:
后台登录,在登录页面选择角色,正确输入用户名和密码后,点击登录进入操作系统进行操作;如图所示。
管理员进入主页面,主要功能包括对个人中心、用户管理、科研队伍管理、队伍信息管理、加入队伍管理、队伍申请管理、科研成果管理、项目成果申报管理、公告信息管理、资源文件管理、信息交流、系统管理等进行操作。管理员主页面如图所示:
管理员点击用户管理。在用户页面输入账号、姓名和选择性别进行查询、新增、用户人数和删除用户列表,并根据需要对用户详情信息进行详情、修改或删除操作;如图所示:
管理员点击科研队伍管理。在科研队伍页面输入队伍账号进行查询、队长人数、新增或删除科研队伍列表,并根据需要对科研队伍详情信息进行详情、修改或删除操作;如图所示:
管理员点击科研成果管理。在科研成果页面输入成果名称、选择队伍名称和成果类型进行查询、导出、成果类型或删除科研成果列表,并根据需要对科研成果详情信息进行详情、查看评论或删除操作;如图所示:
管理员点击资源文件管理。在资源文件页面输入资源名称、资源类型和发布人进行查询、导出或删除资源文件列表,并根据需要对资源文件详情信息进行详情、修改、查看评论或删除操作;如图所示:
科研队伍进入主页面,主要功能包括对个人中心、队伍信息管理、加入队伍管理、科研成果管理、项目成果申报管理、公告信息管理、资源文件管理等进行操作。科研队伍主页面如图所示:
科研队伍点击队伍信息管理。在队伍信息页面输入队伍名称和组长姓名进行查询、新增或删除队伍信息列表,并根据需要对队伍详情信息进行详情、修改或删除操作;如图所示:
科研队伍点击科研成果管理。在科研成果页面输入成果名称、选择队伍名称和成果类型进行查询、导出、新增或删除科研成果列表,并根据需要对科研成果详情信息进行详情、修改、查看评论或删除操作;如图所示:
用户进入主页面,主要功能包括对个人中心、加入队伍管理、队伍申请管理等进行操作。用户主页面如图所示:
用户点击队伍申请管理。在队伍申请页面输入标题、账号、姓名和选择是否通过进行查询、新增或删除队伍申请列表,并根据需要对队伍申请详情信息进行详情、修改或删除操作;如图所示:
队伍信息
/**
* 队伍信息
* 后端接口
* @author
* @email
* @date 2023-04-25 10:50:40
*/
@RestController
@RequestMapping("/duiwuxinxi")
public class DuiwuxinxiController {
@Autowired
private DuiwuxinxiService duiwuxinxiService;
@Autowired
private StoreupService storeupService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,DuiwuxinxiEntity duiwuxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("keyanduiwu")) {
duiwuxinxi.setDuiwuzhanghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper ew = new EntityWrapper();
PageUtils page = duiwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, duiwuxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map params,DuiwuxinxiEntity duiwuxinxi,
HttpServletRequest request){
EntityWrapper ew = new EntityWrapper();
PageUtils page = duiwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, duiwuxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( DuiwuxinxiEntity duiwuxinxi){
EntityWrapper ew = new EntityWrapper();
ew.allEq(MPUtil.allEQMapPre( duiwuxinxi, "duiwuxinxi"));
return R.ok().put("data", duiwuxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(DuiwuxinxiEntity duiwuxinxi){
EntityWrapper< DuiwuxinxiEntity> ew = new EntityWrapper< DuiwuxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( duiwuxinxi, "duiwuxinxi"));
DuiwuxinxiView duiwuxinxiView = duiwuxinxiService.selectView(ew);
return R.ok("查询队伍信息成功").put("data", duiwuxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
DuiwuxinxiEntity duiwuxinxi = duiwuxinxiService.selectById(id);
duiwuxinxi.setClicknum(duiwuxinxi.getClicknum()+1);
duiwuxinxi.setClicktime(new Date());
duiwuxinxiService.updateById(duiwuxinxi);
return R.ok().put("data", duiwuxinxi);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
DuiwuxinxiEntity duiwuxinxi = duiwuxinxiService.selectById(id);
duiwuxinxi.setClicknum(duiwuxinxi.getClicknum()+1);
duiwuxinxi.setClicktime(new Date());
duiwuxinxiService.updateById(duiwuxinxi);
return R.ok().put("data", duiwuxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody DuiwuxinxiEntity duiwuxinxi, HttpServletRequest request){
duiwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(duiwuxinxi);
duiwuxinxiService.insert(duiwuxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody DuiwuxinxiEntity duiwuxinxi, HttpServletRequest request){
duiwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(duiwuxinxi);
duiwuxinxiService.insert(duiwuxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody DuiwuxinxiEntity duiwuxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(duiwuxinxi);
duiwuxinxiService.updateById(duiwuxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
duiwuxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map params,DuiwuxinxiEntity duiwuxinxi, HttpServletRequest request,String pre){
EntityWrapper ew = new EntityWrapper();
Map newMap = new HashMap();
Map param = new HashMap();
Iterator> it = param.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = it.next();
String key = entry.getKey();
String newKey = entry.getKey();
if (pre.endsWith(".")) {
newMap.put(pre + newKey, entry.getValue());
} else if (StringUtils.isEmpty(pre)) {
newMap.put(newKey, entry.getValue());
} else {
newMap.put(pre + "." + newKey, entry.getValue());
}
}
params.put("sort", "clicknum");
params.put("order", "desc");
PageUtils page = duiwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, duiwuxinxi), params), params));
return R.ok().put("data", page);
}
}