基于java web的在线网课预约系统


1 项目简介

🔥 Hi,各位同学好呀,这里是L学长!

🥇今天向大家分享一个今年(2023)最新完成的毕业设计项目作品,基于java web的在线网课预约系统

🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分)

  • 难度系数:3分

  • 工作量:3分

  • 创新点:3分

项目分享:见文末!


2 实现效果

废话不多说,先上实现效果

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

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

篇幅有限,本文不做过多展示

3 系统设计

用户功能:注册、登陆、查看个人信息、修改个人信息,修改密码,查看课程信息,查看老师信息、申请课程、完成课程,取消课程,评价课程,修改评价。
老师功能:注册、登陆、查看个人信息、修改个人信息,上传头像,修改密码,查看课程信息,查看老师信息、同意课程、完成课程,取消课程,评价课程,修改评价。
申请课程、完成课程、取消课程、评价课程、修改评价统称为约课功能。
管理员功能:修改密码、审核老师信息、查看老师信息、禁用老师、启用老师、查看用户信息、查看课程信息、审核评价。
在这里插入图片描述

代码结构

在这里插入图片描述APP主入口
•操作
读取配置文件configConstant(Constants me)
配置路由configRoute(Routes me)
配置Template Engine configEngine(Engine me)
DruidPlugin createDruidPlugin()
配置插件 configPlugin(Plugins me)
配置全局拦截器 configInterceptor(Interceptors me)
配置处理器 configHandler(Handlers me)
ClassAction评价信息类
•操作
继承操作extends Model
ClassInfo课程信息类
•操作
继承操作extends Model
Major专业信息类
•操作
继承操作extends Model
User用户基本信息类
•操作
继承操作extends Model
UserInfo用户具体信息类
•操作
继承操作extends Model
MappingKit映射表的文件
•操作
在App.java里添加实体型mapping(ActiveRecordPlugin arp)
IndexController首页控制器
•操作
进入首页Index()
查看单个老师信息single()
添加课程addCls()

LoginController登陆控制器
•操作
进入登陆首页index()
登陆up()
退出out()
注册reg()
OptionController其他控制器
•操作
进入修改密码首页index()
修改密码upwd()
头像设置Imgset()
更新用户信息upinfo()
获取当前用户信息retPage()
SysClsInfoController课程信息控制器
•操作
进入课程管理首页index()
审核通过audit()
审核老师或学生评价不通过auditt()
保存评价信息SaveAction()
查看评价信息action()
处理课程状态ajaxAction()
SysController总控制器
•操作
进入后台管理主页面index()
进入后台欢迎页面center()
SysManController学生控制器
•操作
进入管理学生页面index()
SysTeachController老师控制器
•操作
进入管理老师页面index()
审核、启用、禁用和删除操作ajaxAction()

ClsInfoService课程信息服务
•操作
查询课程信息findClsInfo(Map<String, Object> params)
根据课程编号查评价信息findAction(Long clsid)
根据课程编号查一个课程的详细信息findClsDetail(Long id)
LoginService登陆服务
•操作
查询所有的专业信息allMojor()
根据用户名密码查询用户信息 login(String account, String pwd)
根据用户名查询用户是否存在aexist(String account)
注册用户信息reg(User user, UserInfo userInfo)
OptionService其他服务
•操作
根据userid查询用户信息findUserInfo(Long userid)
UserService用户服务
•操作
查询老师信息findUserInfo(Map<String, Object> params,boolean isman)

4 关键代码

篇幅有限,无法放完整代码,源码分析在工程内

首页模块indexController
public class IndexController extends Controller {
	/*** 首页方法,路由是:/      * */
	public void index() {
		UserService userService = new UserService();
		Map<String, Object> params = new HashMap<String, Object>();
		Long magor_id = getParaToLong("magor_id");
		if (magor_id!=null) {
			params.put("magor_id", magor_id);
		}
		params.put("active", 2);
		setAttr("teachs", userService.findUserInfo(params,false));
	}
	/** * 前台单个老师信息的页面,路由是:/single   * */
	public void single() {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("info_id", getParaToLong("id"));
		UserService userService = new UserService();
		List<Record> list = userService.findUserInfo(params, false);
		if (list==null||list.size()<1) {
			return;
		}
		setAttr("teach", list.get(0));
	}
	/*** 添加课程方法,路由是:/addCls  * */
	public void addCls() {
		ClassInfo classInfo = getModel(ClassInfo.class, "");
		classInfo.set("active", 0);
		classInfo.save();
		render("success.html");
	}}

登陆和注册模块loginController
public class LoginController extends Controller {
	/*** 跳转到登录页面,访问/时默认调用这个方法,路由:/login   */
	public void index() {
		// 默认反回设置文件夹下与方法名同名的jsp文件
	}
	/*** 登录方法,路由:/login/up   * */
	public void up() {
		LoginService service = new LoginService();
		User user = service.login(getPara("username"), getPara("pwd"));
		if (user==null) {
			setAttr("msg", "用户名密码不正确");
			setAttr("result", "false");
			render("index.html");
			return;
		}
		setSessionAttr("curuser", user);
		redirect("/sys");
	}
	/*** 退出方法,路由:/login/out   * */
	public void out() {
		removeSessionAttr("curuser");
		redirect("/");
	}
	/*** 老师注册页面,路由:/login/teareg   * */
	public void teareg() {}
	/*** 学生注册页面,路由:/login/manreg   * */
	public void manreg() {}
	/*** 用户与老师注册,路由:/login/reg   * */
	public void reg() {		
		User user = getModel(User.class,"u");
		user.set("active", 0);
		UserInfo userInfo = getModel(UserInfo.class,"i");
		String role = user.get("role");
		userInfo.set("active", 2);
		//如果是老师注册
		if ("teach".equals(role)) {
			userInfo.set("active", 0);
		}
		//检查用户名是否重复
		LoginService service = new LoginService();
		User user2 = service.aexist(getPara("u.account"));
		if (user2!=null) {
			setAttr("msg", "用户名已经存在");
			setAttr("result", "false");
			if ("teach".equals(role))render("teareg.jsp");
			else render("manreg.jsp");
			return;
		}
		service.reg(user, userInfo);
		if ("teach".equals(role)) setAttr("msg", user.get("nickName")+"老师,恭喜您,在管理员审核通过后就可以开始约课。");
		else setAttr("msg", user.get("nickName")+"已经注册成功!欢迎您使用约课系统");
		setAttr("result", "true");
		render("index.jsp");
	}
}
管理学生模块SysManController
public class SysManController extends Controller {
	/**  * 用户管理页面,路由是:/sys/man   * */
	public void index() {
		UserService userService = new UserService();
		Map<String, Object> params = new HashMap<String, Object>();
		List<Record> list = userService.findUserInfo(params, true);
		setAttr("mans", list);
	}
}

管理老师模块SysTeachController
public class SysTeachController extends Controller {
	/*** 老师管理页面,路由是:/sys/teach  	 * */
	public void index() {
		UserService userService = new UserService();
		Map<String, Object> params = new HashMap<String, Object>();
		setAttr("teachs", userService.findUserInfo(params,false));
	}
	/** * 老师的审核,启用、禁用、删除处理方法,路由是:/sys/teach/ajaxAction * */
	public void ajaxAction() {
		//处理传过来的数据
		String type = getPara("type");
		Long info_id = getParaToLong("info_id");
		UserInfo up_userInfo = UserInfo.dao.findById(info_id);
		//返回结果
		Map<String, Object> result = new HashMap<String, Object>();
		result.put("success", false);
		if ("audit".equals(type)||"enable".equals(type)) {
			up_userInfo.set("active", 2);
			up_userInfo.update();
			result.put("success", true);
		}else if ("disable".equals(type)) {
			up_userInfo.set("active", 3);
			up_userInfo.update();
			result.put("success", true);
		}else if ("del".equals(type)) {
			up_userInfo.set("active", 1);
			up_userInfo.update();
			User user = User.dao.findById(up_userInfo.getLong("user_id"));
			user.set("active", 1);
			user.update();
			result.put("success", true);
		}
		renderJson(result);
	}
}

管理课程和评论模块SysClsInfoController
public class SysClsInfoController extends Controller {
	/**	 * 审核评论通过,路由是/sys/cls/audit	 * */
	public void audit() {
		Long id = getParaToLong("id");
		ClassInfo classInfo = new ClassInfo();
		classInfo.set("id", id);
		classInfo.set("active", 8);
		classInfo.update();
		Db.update("UPDATE zls_class_action set active=1 where class_id=?", id);
		redirect("/sys/cls");
	}
	/**	 * 拒绝老师或学生评论,路由是/sys/cls/auditt	 * */
	public void auditt() {
		Long id = getParaToLong("id");
		Long idd=getParaToLong("idd");	
		Db.update("UPDATE zls_class_action set active=2 where class_id=? and user_id=?", id,idd);
		redirect("/sys/cls");
	}
	/**	 * 保存评价信息,路由是/sys/cls/saveAction	 * */
	public void saveAction() {
		ClassAction classAction = getModel(ClassAction.class, "action");
		Long cls_id = getParaToLong("cls_id");
		String role = getPara("role");
		Integer cls_active = getParaToInt("cls_active");
		//处理课程状态
		ClassInfo classInfo = new ClassInfo();
		classInfo.set("id", cls_id);
		if (cls_active!=1) {
			if (classAction.getLong("id")==null) {
				classInfo.set("active", 6);
			}
		}else {
			if ("man".equals(role)) {
				classInfo.set("active", 2);
			}else {
				classInfo.set("active", 3);
			}
		}
		classInfo.update();
		//处理评价信息
		if (classAction.getLong("id")==null) {
			classAction.set("active", 0);
			classAction.save();
			redirect("/sys/cls");
			return;
		}
		classAction.set("active", 0);
		classAction.update();
		redirect("/sys/cls");
	}
	/**	 * 学生与老师结束课程,对应的路由是:/sys/cls/action	 * */
	public void action() {
		Long id = getParaToLong("id");
		String type = getPara("type");
		setAttr("actionType", type);
		//课程信息
		Record clsInfo = clsInfoService.findClsDetail(id);
		setAttr("clsInfo", clsInfo);
		//评价信息
		List<Record> actions = clsInfoService.findAction(id);
		//如果没有评价直接返回
		if (actions==null||actions.isEmpty()) {
			setAttr("actions", "false");
			return;
		}
		Integer active = clsInfo.getInt("active");
		//如果是查看或者审核
		if (active==8||"aduit".equals(type)) {
			setAttr("actions", actions);
			return;
		}
		User cUser = getSessionAttr("curuser");
		Long userid = cUser.getLong("id");
		for (Record classAction : actions) {
			Long tmp_id = classAction.getLong("user_id");
			if (userid==tmp_id) {
				setAttr("myact", classAction);
			}else {
				setAttr("otheract", classAction);
			}
		}
	}
	ClsInfoService clsInfoService = new ClsInfoService();
	/**	 * 进入后台课程管理页面,路由是:/sys/cls	 * */
	public void index() {
		Map<String, Object> params = new HashMap<String, Object>();
		//判断当前登录人是那个角色
		User cUser = getSessionAttr("curuser");
		String role = cUser.getStr("role");
		if ("teach".equals(role)) {
			params.put("teach_id", cUser.getLong("id"));
		}else if ("man".equals(role)) {
			params.put("man_id", cUser.getLong("id"));
		}
		setAttr("clsInfos", clsInfoService.findClsInfo(params));
	}
	/**	 * 处理课程状态,路由是:/sys/cls/ajaxAction	 * */
	public void ajaxAction() {
		String type = getPara("type");
		Long id = getParaToLong("id");
		Integer active = getParaToInt("active");
		//课程信息
		ClassInfo clsInfo = new ClassInfo();
		clsInfo.set("id", id);
		//判断处理类型
		if ("taccept".equals(type)) {
			clsInfo.set("active", 1);
		}else if ("tcanel".equals(type)) {
			//如果是用户刚申请与开课状态改为4
			if (active==0||active==1) {
				clsInfo.set("active", 4);
			}else {
				//如果学生已经取消
				clsInfo.set("active", 7);
			}
		}else {
			//如果是用户刚申请与开课状态改为5
			if (active==0||active==1) {
				clsInfo.set("active", 5);
			}else {
				//如果如果老师已经取消
				clsInfo.set("active", 7);
			}
		}
		clsInfo.update();
		renderText("true");
	}
}

其他模块OptionController
public class OptionController extends Controller {
	/**	 * 跳转到修改密码的页面,路由是:/sys/option	 * */
	public void index() {}
	/**	 * 修改密码方法,路由是:/sys/option/upwd	 * */
	public void upwd() {
		User user = getModel(User.class,"");
		user.update();
		setAttr("msg", "修改成功!");
		render("index.jsp");
		return;
	}
	/**	 * 跳转到头像设置页面,路由是:/sys/option/img	 * */
	public void img() {}
	/**	 * 设置头像,路由是:/sys/option/imgset	 * */
	public void imgset() {
		String fileName = UUID.randomUUID().toString();
		//上传
		File file = getFile("filename", fileName).getFile();
		//得到url
		String url = fileName+"/"+file.getName();
		//更新到数据库
		User cUser = getSessionAttr("curuser");
		Long userid = cUser.getLong("id");
		OptionService service = new OptionService();
		UserInfo info=service.findUserInfo(userid);
		info.set("img_url", url);
		info.update();
		//回传到页面
		setAttr("msg", "设置头像成功!");
		setAttr("result", "true");
		setAttr("filename", url);
		render("img.html");
	}
	/**	 * 修改信息的方法,对应的路由是:/sys/option/upinfo	 * */
	public void upinfo() {
		User user = getModel(User.class, "user");
		UserInfo userInfo = getModel(UserInfo.class, "info");
		//将老师状态改为未审核
		userInfo.set("active",0);
		if (!user.update()) {
			setAttr("msg", "修改失败");
			render(retPage());
			return;
		}
		if (!userInfo.update()) {
			setAttr("msg", "修改失败");
			render(retPage());
			return;
		}
		setAttr("msg", "修改成功");
		//回传信息
		Long userId = user.getLong("id");
		User new_user = User.dao.findById(userId);
		setSessionAttr("curuser", new_user);
		setAttr("user", new_user);
		Long infoId = userInfo.getLong("id");
		setAttr("info", UserInfo.dao.findById(infoId));
		render(retPage());
	}
	//根据情况反回相应的页面信息
	private String retPage() {
		User cUser = getSessionAttr("curuser");
		//组装返回页面
		StringBuffer sbBuffer = new StringBuffer("info_");
		//处理返回到那个页面
		String role = cUser.get("role");
		sbBuffer.append(role);
		sbBuffer.append(".jsp");
		return sbBuffer.toString();
	}
	/**	 * 跳转到用户信息页面,路由是:/sys/option/info	 * */
	public void info(){
		//用户登录信息
		User cUser = getSessionAttr("curuser");
		setAttr("user", cUser);
		//用户的基本信息
		Long userid = cUser.get("id");
		OptionService service = new OptionService();
		setAttr("info", service.findUserInfo(userid));
		render(retPage());
	}}

5 论文概览

在这里插入图片描述

6 最后

项目分享:见文末!

  • 35
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值