Java项目:03 基于Springboot的销售培训考评管理系统

项目介绍

  • 企业的销售要进行培训,由技术人员进行辅导并考评检测培训效果,所以有了这个小系统。
  • 实现了系统的登录验证、请求拦截验证、基础模块(用户管理、角色管理、销售管理)、业务模块(评分管理、评分结果)。
  • 除了基本的CRUD之外,其中评分结果模块实现了数据可视化及图表的联动。

主要角色有管理员、销售、评委

环境要求

1.运行环境:最好是java jdk1.8,我们在这个平台上运行的。其他版本理论上也可以。

2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;

3.tomcat环境:Tomcat7.x,8.X,9.x版本均可

4.硬件环境:windows7/8/10 4G内存以上;或者Mac OS;

5.是否Maven项目:是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven.项目

6.数据库:MySql5.7/8.0等版本均可;

技术栈

  • 技术框架:jQuery + MySQL5.7 + mybatis + shiro + Layui + HTML + CSS + JS + jpa
  • 运行环境:jdk8 + IntelliJ IDEA + maven3 + mariaDB

使用说明

1.使用Navicati或者其它工具,在mysql中创建对应sq文件名称的数据库,并导入项目的sql文件;

2.使用IDEA/Eclipse/MyEclipse导入项目,修改配置,运行项目;

3.将项目中config-propertiesi配置文件中的数据库配置改为自己的配置,然后运行;

运行指导

idea导入源码空间站顶目教程说明(Vindows版)-ssm篇:

http://mtw.so/5MHvZq

源码地址:http://codegym.top。

运行截图

界面QQ截图20240113113107

QQ截图20240113113148

QQ截图20240113113155

QQ截图20240113113206

QQ截图20240113113217

QQ截图20240113113225

代码

UserController

package cn.temptation.web;import cn.temptation.dao.RoleDao;
import cn.temptation.dao.UserDao;
import cn.temptation.domain.Role;
import cn.temptation.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class UserController {@Autowiredprivate UserDao userDao;@Autowiredprivate RoleDao roleDao;@RequestMapping("/user")public String index() {return "user";}@RequestMapping("/user_list")@ResponseBodypublic Map<String, Object> userList(@RequestParam Map<String, Object> queryParams) {Map<String, Object> result = new HashMap<>();try {Integer page = Integer.parseInt(queryParams.get("page").toString());Integer limit = Integer.parseInt(queryParams.get("limit").toString());String condition = (String) queryParams.get("condition");String keyword = (String) queryParams.get("keyword");// 创建查询规格对象Specification<User> specification = (Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {Predicate predicate = null;Path path = null;if (condition != null && !"".equals(condition) && keyword != null && !"".equals(keyword)) {switch (condition) {case "username":    // 用户名称path = root.get("username");predicate = cb.like(path, "%" + keyword + "%");break;case "rolename":    // 角色名称path = root.join("role", JoinType.INNER);predicate = cb.like(path.get("rolename"), "%" + keyword + "%");break;}}return predicate;};Pageable pageable = PageRequest.of(page - 1, limit, Sort.Direction.ASC, "userid");Page<User> users = userDao.findAll(specification, pageable);result.put("code", 0);result.put("msg", "查询OK");result.put("count", users.getTotalElements());result.put("data", users.getContent());} catch (Exception e) {e.printStackTrace();result.put("code", 500);result.put("msg", "服务器内部错误");result.put("count", 0);result.put("data", new ArrayList());}return result;}@RequestMapping("/user_delete")@ResponseBodypublic Integer userDelete(@RequestParam String userid) {try {userDao.deleteById(Integer.parseInt(userid));return 0;} catch (Exception e) {e.printStackTrace();}return -1;}@RequestMapping("/user_view")public String view(Integer userid, Model model) {User user = new User();if (userid != null) {user = userDao.getOne(userid);}model.addAttribute("user", user);return "user_view";}@RequestMapping("/role_load")@ResponseBodypublic List<Role> roleList() {return roleDao.findAll();}@RequestMapping("/user_update")@ResponseBodypublic Integer userUpdate(User user) {try {userDao.save(user);return 0;} catch (Exception e) {e.printStackTrace();}return -1;}
}

ScoreController

package cn.temptation.web;import cn.temptation.dao.SalesDao;
import cn.temptation.dao.ScoreDao;
import cn.temptation.domain.Sales;
import cn.temptation.domain.Score;
import cn.temptation.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import javax.persistence.criteria.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class ScoreController {@Autowiredprivate ScoreDao scoreDao;@Autowiredprivate SalesDao salesDao;@RequestMapping("/score")public String index() {return "score";}@RequestMapping("/score_list")@ResponseBodypublic Map<String, Object> scoreList(@RequestParam Map<String, Object> queryParams, HttpServletRequest request) {Map<String, Object> result = new HashMap<>();try {HttpSession session = request.getSession();User user = (User) session.getAttribute("user");Integer page = Integer.parseInt(queryParams.get("page").toString());Integer limit = Integer.parseInt(queryParams.get("limit").toString());String condition = (String) queryParams.get("condition");String keyword = (String) queryParams.get("keyword");// 创建查询规格对象Specification<Score> specification = (Root<Score> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {Predicate predicate = null;Path path = null;// 从session中取出当前用户信息,获取该用户创建的数据if (null != user) {path = root.join("user", JoinType.INNER);predicate = cb.equal(path.get("userid"), user.getUserid());}if (condition != null && !"".equals(condition) && keyword != null && !"".equals(keyword)) {switch (condition) {case "salesname":    // 销售名称path = root.join("sales", JoinType.INNER);predicate = cb.like(path.get("salesname"), "%" + keyword + "%");break;}}return predicate;};Pageable pageable = PageRequest.of(page - 1, limit, Sort.Direction.ASC, "scoreid");Page<Score> scores = scoreDao.findAll(specification, pageable);result.put("code", 0);result.put("msg", "查询OK");result.put("count", scores.getTotalElements());result.put("data", scores.getContent());} catch (Exception e) {e.printStackTrace();result.put("code", 500);result.put("msg", "服务器内部错误");result.put("count", 0);result.put("data", new ArrayList());}return result;}@RequestMapping("/score_delete")@ResponseBodypublic Integer scoreDelete(@RequestParam String scoreid) {try {scoreDao.deleteById(Integer.parseInt(scoreid));return 0;} catch (Exception e) {e.printStackTrace();}return -1;}@RequestMapping("/score_view")public String view(Integer scoreid, Model model) {Score score = new Score();if (scoreid != null) {score = scoreDao.findByScoreid(scoreid);}model.addAttribute("score", score);return "score_view";}@RequestMapping("/sales_load")@ResponseBodypublic List<Sales> salesList() {return salesDao.findAll();}@RequestMapping("/score_update")@ResponseBodypublic Integer scoreUpdate(Score score, HttpServletRequest request) {try {HttpSession session = request.getSession();User user = (User) session.getAttribute("user");if (null != user) {score.setUser(user);}scoreDao.save(score);return 0;} catch (Exception e) {e.printStackTrace();}return -1;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/345543.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Docker 进行 Go 应用程序引导指南

为在 Docker 中部署的 Go 应用程序做准备 在使用 Go 开发 Web 应用程序时&#xff0c;无论是用于 HTTP 还是其他类型的服务&#xff0c;部署到不同的阶段或环境&#xff08;本地开发、生产环境等&#xff09;都是一个常见的考虑因素。在本文中&#xff0c;我们将探讨在 Docker …

【Matlab】在Matlab中安装优化工具yalmip的方法

最近博主想做一些关于多目标优化的问题&#xff0c;因为之前对Matlab有一定经验&#xff0c;所以直接在网上查找了如何在Matlab上实现多目标优化的文献&#xff0c;看到有人提到了yamip&#xff0c;于是博主就试着在Matlab中安装yamip&#xff0c;将其中遇到的问题和一些经验和…

21. 合并两个有序链表

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1…

【详解】结构体的内存对齐(每步配图)

目录 引言&#xff1a; 为什么存在结构体内存对齐? 结构体内存对齐规则&#xff1a; 练习一&#xff1a; 测试代码&#xff1a; 结果如下&#xff1a; 第二个练习&#xff1a;结构体的嵌套问题 测试代码&#xff1a; 代码结果如下&#xff1a; 两个关于结构体的易错…

WPF实现右键选定TreeViewItem

在WPF中&#xff0c;TreeView默认情况是不支持右键选定的&#xff0c;也就是说&#xff0c;当右键点击某节点时&#xff0c;是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时&#xff0c;往往希望在弹出菜单的同时选中该节点&#xff0c;以使得菜单针对选中的节点生…

Day28 17电话号码的字母组合 39组合求和 40组合求和II

17 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 因为输入的数字的数量是不确定的&#xff0c;所以for循环的次数也是不确定的&…

2024最新外卖CPS分销微信小程序源码【前端+后台+数据库+分销功能】

内容目录 一、详细介绍二、效果展示三、源代码下载地址 一、详细介绍 外卖侠CPS全套源码是一款为外卖平台提供分销功能的微信小程序。用户可以通过你的链接去领取外卖红包&#xff0c;然后去下单点外卖&#xff0c;既能省钱&#xff0c;又能获得佣金。该小程序带有商城、影票、…

制作 Kali 可启动 USB 驱动器

Kali USB驱动器&#xff0c;轻松安全&#xff0c;获取最新镜像&#xff0c;开始强大的安全测试&#xff01; Kali 可启动 USB 驱动器的优点&#xff1a; 不会更改主机系统的硬盘驱动器或已安装的操作系统&#xff0c;并且要返回正常操作&#xff0c;您只需删除“Kali Live”U…

【Docker篇】使用Docker操作镜像

文章目录 &#x1f6f8;镜像&#x1f33a;基本操作⭐docker --help⭐docker pull [ 参数 ]⭐docker images⭐docker save -- 导出⭐docker rmi -- 删除⭐docker load -- 导入 &#x1f6f8;镜像 镜像是指在计算机领域中&#xff0c;通过复制和创建一个与原始对象相似的副本的过…

【并发编程篇】详解Forkjoin

文章目录 &#x1f354;什么是Forkjoin&#x1f388;Forkjoin的方法&#x1f386;代码实现 &#x1f354;什么是Forkjoin Fork/Join 是一种在多线程领域中常用的算法或技术&#xff0c;它的核心思想是将大任务分割成若干个小任务&#xff0c;然后将这些小任务分配给多个线程并…

程序设计语言的基本成分

程序设计语言的基本成分 1、程序设计语言的数据成分2、程序设计语言的运算成分3、程序设计语言的控制成分4、程序设计语言的传输成分5、函数 程序设计语言的基本成分包括数据、运算、控制和传输等。 1、程序设计语言的数据成分 程序设计语言的数据成分指一种程序设计语言的数据…

如何用ChatGPT写教案设计?以“沁园春雪”为例

1. 引言 随着人工智能技术的飞速发展&#xff0c;ChatGPT已成为教育领域的一大创新工具。ChatGPT不仅能够模拟人类对话&#xff0c;还可以帮助设计互动丰富、内容丰富的教案。本文将探索如何利用ChatGPT进行教案教学设计&#xff0c;特别是通过“沁园春雪”这一案例&#xff0…