基于Java Web的传智播客crm企业管理系统的设计与实现

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于Java Web的传智播客crm企业管理系统的设计与实现。

功能需求

本文研究的是通过构建CRM企业管理系统的优势进行信息化管理,通过调查和分析现在企业业务的相关信息,综合对大部分企业的现状和未来发展趋势进行分析,进而提出比较好的管理策略和方针。下面是针对传智播客企业进行系统内容进行分析和设计。
1.登录功能:员工登录、修改密码、重新登录。
2.人力资源部: 部门管理、职员管理、员工管理。
3.教学部:课程类别、班级管理。
4.咨询部: 咨询管理、学报管理。
5.学工部:学生管理。
6.就业部:就业情况分析、就业管理。

具备以下功能:

通过确定各个模块之间的数据关系和功能区别,合理划分多个功能模块,传智播客CRM企业管理系统中的功能可分为6大模块,针对研究内容以及相关分析确定各个模块中的功能,这如下所示。
1.登录功能:员工登录[表单校验、必须使用登录拦截器]、修改密码[表单校验]、重新登录。
2.人力资源部:
2.1 部门管理(添加部门、编辑部门、查询所有部门)。
2.2 职务管理(添加职务、编辑职务、查询所有职务)。
2.3 员工管理(添加员工[ajax级联]、编辑员工、查询所有员工、删除员工)。
3.教学部:
3.1 课程类别(添加类别、修改类别、查询所有类别[条件查询] [分页])。
3.2 班级管理(添加班级、编辑班级、查询所有班级、上传课表、下载课表)。
4.咨询部:
4.1 咨询学生管理(添加咨询[ajax级联]、查看咨询、编辑咨询、添加跟踪、录入学籍)。
4.2 查询报名学生[分页 + 条件]。
5.学工部:
5.1 在校学生管理(查询学生[条件查询 | ajax级联]、添加学生[ajax级联]、编辑学生、升级/转班[ajax级联]、流失) – 此处的ajax操作都是之前已经编写过的。
5.2 学生升级/转班。
5.3 学生流失情况。
6.就业部:
6.1 就业情况(添加就业信息[ajax级联]、编辑就业信息、查询所有[分页])。

系统设计

企业管理系统的设计,对每个模块都进行功能细化,每个细节点都考了到,对设计的菜单按钮都要有明确的说明实现的意义所在。

部分效果图

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据库设计

系统中用到了11张表,针对每个表都进行了设计,下面对部分核心表进行汇总罗列展示。

(1)员工信息表
在这里插入图片描述

(2)班级信息表
在这里插入图片描述

(3)课程信息表
在这里插入图片描述
(4)学工部信息表
在这里插入图片描述

部分代码
public class CrmClassServiceImpl implements CrmClassService {
	/**
	 * 定义crmClassDao属性及其setter方法
	 */
	private CrmClassDao crmClassDao;
	public void setCrmClassDao(CrmClassDao crmClassDao) {
		this.crmClassDao = crmClassDao;
	}
	/**
	 * 查询所有
	 */
	public List<CrmClass> findAll() {
		return crmClassDao.findAll();
	}
	/**
	 * 通过id查询
	 */
	public CrmClass findById(String classId) {
		return this.crmClassDao.findById(classId);
	}
	/**
	 * 添加或更新
	 */
	public void saveOrEdit(CrmClass crmClass) {
		this.crmClassDao.saveOrUpdate(crmClass);
	}
	/**
	 * 更新课表
	 */
	public void updateSchedule(CrmClass crmClass) {
		//获取班级
		CrmClass findClass = this.crmClassDao.findById(crmClass.getClassId());
		findClass.setUploadFilename(crmClass.getUploadFilename());
		findClass.setUploadPath(crmClass.getUploadPath());
		findClass.setUploadTime(new Date());
	}

}


package cn.itcast.crm.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import cn.itcast.crm.dao.CrmLessontypeDao;
import cn.itcast.crm.domain.CrmLessontype;
import cn.itcast.crm.service.CrmLessontypeService;
import cn.itcast.crm.page.Page;

public class CrmLessontypeServiceImpl implements CrmLessontypeService {
    //定义crmLessonTypeDao属性和其setter方法
	private CrmLessontypeDao crmLessonTypeDao;
	public void setCrmLessonTypeDao(CrmLessontypeDao crmLessonTypeDao) {
		this.crmLessonTypeDao = crmLessonTypeDao;
	}
	/**
	 * 保存或更新
	 */
	public void saveOrUpdate(CrmLessontype crmLessontype) {
		this.crmLessonTypeDao.saveOrUpdate(crmLessontype);
	}
	/**
	 * 通过id查询
	 */
	public CrmLessontype findLessontypeById(String lessonTypeId) {
		return this.crmLessonTypeDao.findById(lessonTypeId);
	}
	
	/**
	 * 分页查询所有(HQL)
	 */
	public Page<CrmLessontype> findAllWithPageHQL(CrmLessontype crmLessontype,
			int pageNum, int pageSize) {
		//1 条件
		//1.1 拼凑hql 及 对应的参数(顺序、可重复)
		StringBuilder hqlBuilder = new StringBuilder();
		List<Object> paramsList = new ArrayList<Object>();
		//1.2 条件
		// * 名称
		if(StringUtils.isNotBlank(crmLessontype.getLessonName())){
			hqlBuilder.append(" and c.lessonName like ? ");
			paramsList.add("%"+crmLessontype.getLessonName()+"%");
		}
		// * 简介
		if(StringUtils.isNotBlank(crmLessontype.getRemark())){
			hqlBuilder.append(" and c.remark like ? ");
			paramsList.add("%"+crmLessontype.getRemark()+"%");
		}
		
		// * 学时
		if(StringUtils.isNotBlank(crmLessontype.getStartTotal())){
			hqlBuilder.append(" and c.total >= ? ");
			paramsList.add(Integer.parseInt(crmLessontype.getStartTotal()));
		}
		if(StringUtils.isNotBlank(crmLessontype.getEndTotal())){
			hqlBuilder.append(" and c.total <= ? ");
			paramsList.add(Integer.parseInt(crmLessontype.getEndTotal()));
		}
		
		// * 费用
		if(StringUtils.isNotBlank(crmLessontype.getStartCost())){
			hqlBuilder.append(" and c.lessonCost >= ? ");
			paramsList.add(Double.parseDouble(crmLessontype.getStartCost()));
		}
		if(StringUtils.isNotBlank(crmLessontype.getEndCost())){
			hqlBuilder.append(" and c.lessonCost <= ? ");
			paramsList.add(Double.parseDouble(crmLessontype.getEndCost()));
		}				
		//1.3 
		String conditionHQL = hqlBuilder.toString();
		Object params[] = paramsList.toArray();				
		//2 分页  limit ?,?
		// 2.1 查询总记录数
		int totalRecord = this.crmLessonTypeDao.getTotalRecord();		
		// 2.2 封装数据
		Page<CrmLessontype> page = new Page<CrmLessontype>(pageNum, pageSize, totalRecord); 		
		// 2.3 查询分页数据
		List<CrmLessontype> data = this.crmLessonTypeDao.findAllWithPage(conditionHQL, params, page.getStartIndex(), pageSize);
		page.setData(data);				
		return page;
	}
	/**
	 * 查询所有
	 */
	public List<CrmLessontype> findAll() {		
		return this.crmLessonTypeDao.findAll();
	}

}
安装部署需求

eclipse运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在eclipse中运行打包;

本项目用到的技术和框架

1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL5.7
4.框架:jsp+ssh

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 Eclipse
语言 JDK1.8 、jsp、ssh
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】Vue3.0(十七)Vue 3.0中Pinia的深度使用指南(基于setup语法糖)

上篇文章&#xff1a; 【Vue】Vue3.0&#xff08;十一&#xff09;Vue 3.0 中 computed 计算属性概念、使用及示例 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月10日15点23分 文章…

常用的c++新特性-->day03

断言和异常 断言断言的基本使用 静态断言静态断言的基本使用 异常异常基本使用c98异常案例 noexceptnoexcept简单案例 断言 断言的基本使用 #include <iostream> #include <cassert>// >>>>>>>>>>>>>>>> 断言的…

11月7日星期四今日早报简报微语报早读

11月7日星期四&#xff0c;农历十月初七&#xff0c;早报#微语早读。 1、河南&#xff1a;旅行社组织1000人次境外游客在豫住宿2夜以上&#xff0c;可申请激励奖补&#xff1b; 2、主播宣称下播后商品恢复原价构成欺诈&#xff0c;广州市监&#xff1a;罚款5万元&#xff1b;…

数据结构-并查集专题(1)

一、前言 因为要开始准备年底的校赛和明年年初的ACM、蓝桥杯、天梯赛&#xff0c;于是开始按专题梳理一下对应的知识点&#xff0c;先从简单入门又值得记录的内容开始&#xff0c;并查集首当其冲。 二、我的模板 虽然说是借用了jiangly鸽鸽的板子&#xff0c;但是自己也小做…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

【spark面试】spark的shuffle过程

概述 所有的shuffle的过程本质上就是一个task将内存中的数据写入磁盘&#xff0c;然后另一个task将磁盘中的数据读入内存的过程。 对于mapreduce来说&#xff0c;我们将内存中的数据写入磁盘成为maptask&#xff0c;将磁盘中的数据读入内存称为reducetask。 而对于spark来说&…

MySQL —— Innodb 索引数据结构

文章目录 不用平衡二叉树或红黑树作为索引B树适合作为索引比B树更适合作为索引的结构——B树总结 MySQL 使用 B树索引数据结构&#xff08;因为默认使用 innodb 存储引擎&#xff09; B树&#xff1a;有序数组 平衡多叉树&#xff1b;B树&#xff1a;有序数组链表 平衡多叉树…

shell中执行hive指令以及hive中执行shell和hdfs指令语法

0. 简介 主要介绍了三种环境命令执行语法&#xff1a; shell中执行hive指令hive中执行shell指令hive中执行hdfs指令 1. shell中执行hive指令 语法&#xff1a;hive [-hiveconf xy]* [<-i filename>]* [<-f filename> | <-e query-string>] [-S] 说明&…

MySQL系列之如何在Linux只安装客户端

导览 前言Q&#xff1a;如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…

C++20 概念与约束(3)—— 约束的进阶用法

1、再谈约束主句与从句 上一篇文章中提到过约束可以无限嵌套。末尾也提到不考虑嵌套约束的情况下&#xff0c;模板因为 SFINAE 规则的存在&#xff0c;其中 requires 子句只要存在返回值&#xff0c;只有可能是 true 这一种结果。在非模板中&#xff0c;如果 requires 子句中的…

进程启动时,main 函数是如何被找到的?

Linux中一个进程是如何被启动起来的&#xff1f; 一、进程是怎么启动的&#xff1f;二、进程内存空间分段三、进程的入口函数四、总结 一、进程是怎么启动的&#xff1f; 当一个程序被执行时&#xff0c;怎么看出进程的运行呢&#xff1f;一个进程是怎么启动的&#xff1f;为什…

关于 el-table 的合计行问题

目录 一.自定义合计行 二.合计行不展示&#xff0c;只有缩放/变大窗口或者F12弹出后台时才展示 三.合计行出现了表格滚动条下方 四.合计行整体样式的修改 五.合计行单元格样式修改 1.css 2.jsx方式 六.合计行单元格合并 一.自定义合计行 通过 show-summary 属性开启合计…

十三:java web(5)-- Spring数据持久层

目录 Spring 数据持久层 1. Spring 与 JDBC 1.1 使用 Spring 管理数据库连接 1.1.2 Apache Commons DBCP 基于配置文件xml 使用 1.1.3 Apache Commons DBCP 基于配置类使用 1.1.4 HikariCP 基于配置文件xml 使用 推荐使用 Spring Boot 默认连接池 1.1.5 HikariCP 基于配置…

初学者指南:用例图——开启您的软件工程之旅

目录 背景&#xff1a; 基本组成&#xff1a; 关联&#xff08;Assciation&#xff09;&#xff1a; 包含&#xff08;Include&#xff09;&#xff1a; 扩展&#xff08;Extend&#xff09;&#xff1a; 泛化&#xff08;Inheritance&#xff09;&#xff1a; 完整银行…

基于单片机洗衣机控制器的设计(论文+源码)

1需求分析 在智能洗衣机系统设计中&#xff0c;考虑到洗衣机在实际应用过程中&#xff0c;需要满足用户对于不同衣物清洁、消毒的应用要求&#xff0c;对设计功能进行分析&#xff0c;具体如下&#xff1a; 通过按键实现洗衣机不同工作模式的切换&#xff0c;包括标准模式&am…

qt QFontDialog详解

1、概述 QFontDialog 是 Qt 框架中的一个对话框类&#xff0c;用于选择字体。它提供了一个可视化的界面&#xff0c;允许用户选择所需的字体以及相关的属性&#xff0c;如字体样式、大小、粗细等。用户可以通过对话框中的选项进行选择&#xff0c;并实时预览所选字体的效果。Q…

Python学习从0到1 day27 第三阶段 Spark ③ 数据计算 Ⅱ

目录 一、Filter方法 功能 语法 代码 总结 filter算子 二、distinct方法 功能 语法 代码 总结 distinct算子 三、SortBy方法 功能 语法 代码 总结 sortBy算子 四、数据计算练习 需求&#xff1a; 解答 总结 去重函数&#xff1a; 过滤函数&#xff1a; 转换函数&#xff1a; 排…

今天,智谱「新清影」上线,率先进入有声视频生成时代!还要继续开源宠粉

来&#xff0c;你先把手机音量打开&#xff0c;然后去“听”下面一段视频&#xff1a; 你是不是一脸懵逼&#xff1f;不知道我想表达什么&#xff1f; 视频是AI生成的并不奇怪&#xff0c;但你可能没法相信&#xff0c;这个视频的音效&#xff0c;也是AI生成的。 火车鸣笛 你…

「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件

本篇将带你实现一个自定义评分星级组件&#xff0c;用户可以通过点击星星进行评分&#xff0c;并实时显示评分结果。为了让界面更具吸引力&#xff0c;我们还将添加一只小猫图片作为评分的背景装饰。 关键词 UI互动应用评分系统自定义星级组件状态管理用户交互 一、功能说明 …

pdf转excel;pdf中表格提取

一、问题描述 在工作中或多或少会遇到&#xff1a;需要将某份pdf中的表格数据提取出来&#xff0c;以便能够“修改使用”数据 可将pdf中的表格提取出来&#xff0c;解决办法还有点复杂 尤其涉及“pdf中表格不是标准的单元格”的时候&#xff0c;提取数据到excel不太容易 比…