Java项目:在线答疑系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)

源码获取:俺的博客首页 "资源" 里下载! 

项目介绍

基于Springboot + vue实现的在线答疑系统

本系统包含学生、教师、管理员三个角色。

学生角色:

1.注册、登录功能:学生可以通过系统完成注册和登录操作,进入学生专属界面。

2.个人信息修改功能:学生可以查看和修改自己的个人信息,包括姓名、联系方式等。

3.问题发布功能:学生可以在线发布学习中遇到的问题,并等待教师或其他学生的解答。

4.查看疑难解答功能:学生可以查看针对复杂问题的深度讨论和解答,加深对知识点的理解。

5.参与考试功能:学生可以在规定的时间内完成在线考试,系统自动评分并给出反馈。

6.错题本管理功能:系统会自动记录学生的错题,并提供相应的解析和练习,帮助学生巩固知识点。

教师角色:

1.登录功能:教师可以通过系统登录,进入教师专属界面。

2.查看学生信息功能:教师可以查看学生的学习进度、成绩等信息,了解学生的学习状况。

3.发布课程资料功能:教师可以发布相关的课程资料,供学生下载和学习。

4.解答问题功能:教师可以查看学生发布的问题,并提供解答或引导,帮助学生解决问题。

5.参与疑难解答功能:对于复杂问题,教师可以参与深度讨论和解答,提供专业的指导。

6.组织考试功能:教师可以设置在线考试,包括试卷内容、考试时间等,系统自动完成考试的组织和评分。

7.查看错题本功能:教师可以查看学生的错题本,了解学生的薄弱环节,为后续教学提供参考。

管理员角色:

登录、学生管理、教师管理、问题发布管理、疑难解答管理、系统管理等


环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.数据库:MySql 5.7/8.0版本均可;
5.是否Maven项目:是;


技术栈

后端:SpringBoot+Mybaits

前端:Vue+elementui


使用说明

项目运行:
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4.运行项目,在浏览器中输入地址:
地址:http://localhost:8080/springboot65f25/admin/dist/index.html
管理员账户:abo 密码:abo
学生账户:学生1 密码:123456
教师账户:教师1 密码:123456

文档介绍展示:

 试卷管理展示页面:

 系统登录展示页面:

试题管理展示页面:

学生管理展示页面:

教师管理展示页面:

问题发布管理展示页面:

考试管理展示页面:

疑难解答管理展示页面: 

登录管理控制层:

@Controller
@RequestMapping(value="/Member")
public class MemberCotroller {
	@Autowired
	private MemberService memberService;
	//1根据id查询会员信息
	@RequestMapping("/findMemberById")
	public @ResponseBody Member findMemberById(Model model,String m_id){
		System.out.println("===============findMemberById=================");
		System.out.println("m_id:"+m_id);
		int id=Integer.parseInt(m_id);
		Member member=memberService.findMemberById(id);
		System.out.println("member:"+member.getM_name());
		//model.addAttribute("member", member);
		return member;
	}
	//2查询所有会员信息
	@RequestMapping("/findAllMember")
	public String findAllMember(Model model,String type,Integer pageNo,Integer pageSize){
		System.out.println("===========findAllMember==============");
		System.out.println("传到type的值:"+type);
		PagedResult<Member> pagedResult= memberService.findAllMember(pageNo, pageSize);
		model.addAttribute("pagedResult", pagedResult);
		List<Member> memberList=pagedResult.getDataList();
		System.out.println("当前页码:"+pageNo);
		System.out.println("条数:"+pageSize);
		System.out.println("总页面数目:"+pagedResult.getPages());
		model.addAttribute("memberList", memberList);
		if(type.equals("show1")){
			return "jsp/sonpage/member/memberson/findMember";
		}
		if(type.equals("show2")){
			return "jsp/sonpage/member/memberson/delMember";
		}
		return "";
	}
	//3根据名字模糊查询
	@RequestMapping(value ="/findLikeNameMember")
	public String findLikeNameMember(String m_id, String m_name, Model model,String type){
		System.out.println("===========模糊查询会员信息============");
		System.out.println("m_id:"+m_id);
		System.out.println("m_name:"+m_name);
		System.out.println("type:"+type);
		//String m_id=id;
		//String m_name=name;
		Map map = new HashMap();
		map.put("m_id", m_id);
		map.put("m_name", m_name);
		List<Member> memberList=memberService.findLikeNameMember(map);
		model.addAttribute("memberList", memberList);
		if (type.equals("show1")) {
			System.out.println("===========从查询会员信息页面===========");
			if(("").equals(m_id) && ("").equals(m_name)){
				System.out.println("1没有传值");
				return "jsp/sonpage/member/memberson/findMember";
			}
			System.out.println("===================跳回查询页面======================");
			return "jsp/sonpage/member/memberson/findMember";
		}
		if (type.equals("show2")) {
			System.out.println("===========从删除会员信息品页面===========");
			if(("").equals(m_id) && ("").equals(m_name)){
				System.out.println("2没有传值");
				return "forward:findAllMember.action?type?type=show";
			}
			System.out.println("===================跳回删除页面======================");
			return "jsp/sonpage/member/memberson/delMember";
		}
		return "";
	}
	//4添加会员
	@RequestMapping("/addMember")
	public String addMember(Member member,String type){
		System.out.println("===============addMember=================");
		if(member.getM_id() != 0) {
			Member temp = memberService.findMemberByNum(member.getM_id()+"");
			temp.setC_id(member.getC_id());
			if(!StringUtils.isEmpty(member.getM_qq())) {
				temp.setM_qq(member.getM_qq());
			}
			if(!StringUtils.isEmpty(member.getM_tel())) {
				temp.setM_tel(member.getM_tel());
			}
			
			memberService.updateMember(temp);
		}else{
			memberService.addMember(member);
		}
		if(type.equals("show3")){
			return "forward:/Community/findAllCommunity.action?type";
		}else if(type.equals("show")){
			return "jsp/sonpage/member/memberson/addMember";
		}else if(type.equals("show1")){
			return "jsp/sonpage/regist";
		}
		return "";
	}
	//4添加会员
	@RequestMapping("/addMember1")
	public @ResponseBody boolean addMember1(String m_num,String m_pwd,String m_name,String m_sex,String m_class){
		System.out.println("===============addMember=================");
		Member member=new Member();
		member.setM_num(m_num);
		member.setM_pwd(m_pwd);
		member.setM_name(m_name);
		member.setM_sex(m_sex);
		member.setM_class(m_class);
		member.setC_id(1);
		member.setR_id(1);
		memberService.addMember(member);
		return true;
	}
	//5根据id删除会员
	@RequestMapping("/delMember")
	public String delMember(String m_id,String type){
		System.out.println("=============delMember==================");
		System.out.println("m_id:"+m_id);
		System.out.println("type:"+type);
		int id=Integer.parseInt(m_id);
		memberService.delMember(id);
		return "redirect:findAllMember.action?type=show2";
	}
	//6修改会员信息
	@RequestMapping("/updateMember")
	public String updateMember(Member member){
		System.out.println("==========修改会员信息==========");
		memberService.updateMember(member);
		return "redirect:findAllMember.action?type=show1";
	}
	//7批量删除
	@RequestMapping("/delItem")
	public @ResponseBody boolean delItem(Model model, String ids) {
		System.out.println("==========批量删除会员==========");
		System.out.println("ids:"+ids);
		// 用数组接收获取的选中集合
		String[] str = ids.split("_");
		for (int i = 0; i < str.length; i++) {
			int id = Integer.parseInt(str[i]);
			memberService.delMember(id);
			System.out.println("删除的方法执行了");
		}
		//return "forward:findAllMember.action?type=show2";
		return true;

	}
	//8登陆(根据学号查找)
	@RequestMapping("/findMemberByNum")
	public @ResponseBody boolean findMemberByNum(HttpSession session,String num,String pwd){
		System.out.println("===============findMemberByNum=================");
		System.out.println("num:"+num);

		Subject subject = SecurityUtils.getSubject();
		subject.getSession().setAttribute("userType", "Member");
		// 保存至令牌环中,供MyRealm做验证
		UsernamePasswordToken token = new UsernamePasswordToken(num, pwd);
		// 保存用户类型供MyRealm获取

		try {
			// 跳转到MyRealm 做登录用户名和密码验证
			subject.login(token);
			session.setAttribute("num", num);
			session.setAttribute("role", "3");
			System.out.println("MemberCotroller-->>findMemberByNum-->>登录成功");
			return true;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("MemberCotroller-->>findMemberByNum-->>登录失败");
			return false;
		}

		//		Member member=memberService.findMemberByNum(num);
		//		System.out.println("manager:"+member.getM_pwd());
		//		String m_pwd=member.getM_pwd();
		//		session.setAttribute("num", num);
		//		session.setAttribute("role", "3");
		//		if(m_pwd.equals(pwd)){
		//			System.out.println("返回值是真");
		//			return true;
		//		}else{
		//			return false;
		//		}
	}
	//9修改密码
	@RequestMapping("/updateMemberPwd")
	public @ResponseBody boolean updateMemberPwd(Model model,String num,String oldPwd,String newPwd){
		System.out.println("===============updateManagerPwd=================");
		System.out.println("旧密码:"+oldPwd);
		System.out.println("新密码:"+newPwd);
		String M_pwd=newPwd;
		String M_num=num;
		Member manager=memberService.findMemberByNum(num);
		String pwd=manager.getM_pwd();
		if(pwd.equals(oldPwd)){
			memberService.updateMemberPwd(M_pwd,M_num);
			return true;
		}else{
			return false;
		}
	}
}

系统管理员信息: 

@Controller
@RequestMapping(value = "/Manager")
public class ManagerController {
	@Autowired
	private ManagerService managerService;

	// 1根据id查询
	@RequestMapping("/findManagerById")
	public @ResponseBody Manager findManagerById(Model model,String ma_id){
		System.out.println("===============findManagerById=================");
		System.out.println("MA_id:"+ma_id);
		int id=Integer.parseInt(ma_id);
		Manager manager=managerService.findManagerById(id);
		System.out.println("manager:"+manager.getMA_name());
		model.addAttribute("manager", manager);
		return manager;
	}
	// 2查询所有(分页显示)
	@RequestMapping("/findAllManager")
	public String findAllManager(Model model, String type, Integer pageNo,
			Integer pageSize) {
		System.out.println("===========findAllManager==============");
		System.out.println("传到type的值:" + type);
		PagedResult<Manager> pagedResult = (PagedResult<Manager>) managerService
				.findAllManager(pageNo, pageSize);
		model.addAttribute("pagedResult", pagedResult);
		List<Manager> managerList = pagedResult.getDataList();
		System.out.println("当前页码:" + pageNo);
		System.out.println("总页数:" + pageSize);
		System.out.println(pagedResult.getPages());
		model.addAttribute("managerList", managerList);
		if (type.equals("show1")) {
			return "jsp/sonpage/manager/managerson/findManager";
		}
		if (type.equals("show2")) {
			return "jsp/sonpage/manager/managerson/delManager";
		}
		return "";
	}

	// 3模糊查询
	@RequestMapping("/findLikeNameManager")
	public String findLikeNameManager(String ma_id, String ma_name,
			Model model, String type) {
		System.out.println("===========模糊查询系统管理员信息============");
		//String ma_id=id;
		//String ma_name=name;
		System.out.println("ma_id:" + ma_id);
		System.out.println("ma_name:" + ma_name);
		System.out.println("type:" + type);
		Map map = new HashMap();
		map.put("ma_id", ma_id);
		map.put("ma_name", ma_name);
		List<Manager> managerList = managerService.findLikeNameManager(map);
		model.addAttribute("managerList", managerList);
		if (type.equals("show1")) {
			System.out.println("===========从查询管理员信息页面===========");
			if (("").equals(ma_id) && ("").equals(ma_name)) {
				System.out.println("1没有传值");
				System.out.println("===========findAllManager==============");
				System.out.println("传到type的值:" + type);
				PagedResult<Manager> pagedResult = (PagedResult<Manager>) managerService
						.findAllManager(0, 5);
				model.addAttribute("pagedResult", pagedResult);
		        managerList = pagedResult.getDataList();
				System.out.println("当前页码:" + 1);
				System.out.println("总页数:" + 5);
				System.out.println(pagedResult.getPages());
				model.addAttribute("managerList", managerList);
				return "jsp/sonpage/manager/managerson/findManager";
			}
			System.out
					.println("===================跳回查询页面======================");
			return "jsp/sonpage/manager/managerson/findManager";
		}
		if (type.equals("show2")) {
			System.out.println("===========从删除管理员信息页面===========");
			if (("").equals(ma_id) && ("").equals(ma_name)) {
				System.out.println("2没有传值");
				System.out.println("1没有传值");
				System.out.println("===========findAllManager==============");
				System.out.println("传到type的值:" + type);
				PagedResult<Manager> pagedResult = (PagedResult<Manager>) managerService
						.findAllManager(0, 5);
				model.addAttribute("pagedResult", pagedResult);
				managerList = pagedResult.getDataList();
				System.out.println("当前页码:" + 1);
				System.out.println("总页数:" + 5);
				System.out.println(pagedResult.getPages());
				model.addAttribute("managerList", managerList);
				return "jsp/sonpage/manager/managerson/findManager";
			}
			System.out
					.println("===================跳回删除页面======================");
			return "jsp/sonpage/manager/managerson/delManager";
		}
		return "";
	}

	// 4添加系统管理员
	@RequestMapping("/addManager")
	public String addManager(Manager manager) {
		System.out.println("=========添加系统管理员=========");
		System.out.println("姓名:" + manager.getMA_name());
		managerService.addManager(manager);
		return "jsp/sonpage/manager/managerson/addManager";
	}

	// 5删除系统管理员
	@RequestMapping("/delManager")
	public String delManager(String MA_id) {
		System.out.println("===========删除系统管理员===========");
		System.out.println("MA_id:" + MA_id);
		int id = Integer.parseInt(MA_id);
		managerService.delManager(id);
		return "forward:findAllManager.action?type=show2";
	}

	// 6修改系统管理员
	@RequestMapping("/updateManager")
	public String updateManager(Manager manager) {
		System.out.println("=========修改系统管理员=========");
		System.out.println("名字:"+manager.getMA_name());
		managerService.updateManager(manager);
		return "forward:findAllManager.action?type=show1";
	}

	// 8批量删除管理员信息
	@RequestMapping("/delItem")
	public @ResponseBody boolean delItem(Model model, String ids) {
		System.out.println("==========批量删除已审批活动信息==========");
		System.out.println("ids:" + ids);
		// 用数组接收获取的选中集合
		String[] str = ids.split("_");
		for (int i = 0; i < str.length; i++) {
			int id = Integer.parseInt(str[i]);
			managerService.delManager(id);
			System.out.println("删除的方法执行了");
		}
		// return "forward:findAllMember.action?type=show2";
		return true;

	}
	//9登陆(根据学号查找)
	@RequestMapping("/findManagerByNum")
	public @ResponseBody boolean findManagerByNum(HttpSession session,String num,String pwd){
		System.out.println("===============findManagerByNum=================");
		System.out.println("num:"+num);

		Subject subject = SecurityUtils.getSubject();
		subject.getSession().setAttribute("userType", "Manager");
		// 保存至令牌环中,供MyRealm做验证
		UsernamePasswordToken token = new UsernamePasswordToken(num, pwd);
		// 保存用户类型供MyRealm获取
		
		try {
			// 跳转到MyRealm 做登录用户名和密码验证
			subject.login(token);
			session.setAttribute("num", num);
			session.setAttribute("role", "2");
			System.out.println("ManagerController-->>findManagerByNum-->>登录成功");
			return true;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("ManagerController-->>findManagerByNum-->>登录失败");
			return false;
		}
		
//		Manager manager=managerService.findManagerByNum(num);
//		System.out.println("manager:"+manager.getMA_pwd());
//		String MA_pwd=manager.getMA_pwd();
//		session.setAttribute("num", num);
//		session.setAttribute("role", "2");
//		if(MA_pwd.equals(pwd)){
//			System.out.println("返回值是真");
//			return true;
//		}else{
//			return false;
//		}
	}
	
	// 登出
	@RequestMapping("/logout")
	public String logout(Model model) {
		
		try {
			Subject subject = SecurityUtils.getSubject();
			System.out.println("==========>>>>>>>>logout>>>>>>======"+subject.getPrincipal().toString());
			subject.logout();
			System.out.println("****************logout成功*************");
		} catch (Exception e) {
  		}
		return "/jsp/sonpage/login";
	}
	
	//9修改密码
	@RequestMapping("/updateManagerPwd")
	public @ResponseBody boolean updateManagerPwd(Model model,String num,String oldPwd,String newPwd){
		System.out.println("===============updateManagerPwd=================");
		System.out.println("旧密码:"+oldPwd);
		System.out.println("新密码:"+newPwd);
		String MA_pwd=newPwd;
		String MA_num=num;
		Manager manager=managerService.findManagerByNum(num);
		String pwd=manager.getMA_pwd();
		if(pwd.equals(oldPwd)){
			managerService.updateManagerPwd(MA_pwd,MA_num);
			return true;
		}else{
			return false;
		}
	}
}

课程管理控制层:

@RestController
@RequestMapping("/classes/")
public class ClassesController {
    @Autowired
    private IClassesService iClassesService;

    @RequestMapping("add")
    public ServerResponse<String> add(String className, String classNum,Integer limit) {
        return iClassesService.add(className, classNum,limit);
    }

    @RequestMapping("del")
    public ServerResponse<String> del(Integer id) {
        return iClassesService.del(id);
    }

    @RequestMapping("update")
    public ServerResponse<String> update(Integer id, String className, String classNum,Integer limit) {
        return iClassesService.update(id, className, classNum,limit);
    }

    @RequestMapping("find")
    public ServerResponse<Classes> find(Integer id) {
        return iClassesService.find(id);
    }

    @RequestMapping("findAll")
    public ServerResponse<PageInfo<Classes>> findAll(Integer pageNum, Integer pageSize) {
        return iClassesService.findAll(pageNum, pageSize);
    }
}

教师管理控制层:

@RestController
@RequestMapping("/teacher/")
public class TeacherController {
    @Autowired
    private ITeacherService iTeacherService;

    @RequestMapping("add")
    public ServerResponse<String> add(String name, String phone,Integer countLimit) {
        return iTeacherService.add(name, phone,countLimit);
    }

    @RequestMapping("del")
    public ServerResponse<String> del(Integer id) {
        return iTeacherService.del(id);
    }

    @RequestMapping("update")
    public ServerResponse<String> update(Integer id, String name, String phone,Integer countLimit) {
        return iTeacherService.update(id, name, phone,countLimit);
    }

    @RequestMapping("find")
    public ServerResponse<Teacher> find(Integer id) {
        return iTeacherService.find(id);
    }

    @RequestMapping("findAll")
    public ServerResponse<PageInfo<Teacher>> findAll(Integer pageNum, Integer pageSize) {
        return iTeacherService.findAll(pageNum, pageSize);
    }
}

源码获取:俺的博客首页 "资源" 里下载!

开发语言:Jsp Java 服务器: Tomcat 5.0 数据库:sql server 2000 =================系统简介=========================== (1) 用户类别:登录系统的身份定为三种,一是管理员(领导),二是般普通老师,三是学生,只有被授权的用户才可以使用本系统的资源。 (2) 权限管理:系统需要经过有效的身份验证可以登录。用户的身份不同,使用的系统资源也不同。学生只可以对自己的学生信息查询及编辑、查看学校公告信息、在线提问、查询及添加留言信息;普通老师可以对学生管理,问题管理,留言管理,学校公告,添加学生信息等功能;管理员可添加公告、留言、类别、用户信息、学生信息、教师信息及查询修改管理员信息,可以对系统发布公告、查询和添加问题类别等信息,可控制整个系统的登录功能(控制系统、老师、及学生)的登录,拥有整个系统的全部使用权限。 (3) 学生线提问:学生通过学生编号及密码登陆系统后,可以对不同的课目进行提问,同时还可以查询自己所提出的问题信息。 (4) 学生留言:学生可以对普通老师的工作情况进行发表意见,并可以查看所以其对学生回复的记录。 (5) 控制系统:领导可对学生,普通老师用户进行控制,看是否可以登录。 (6) 学生管理:可注册新增学生用户,同时查看学生的相关信息。 (7) 老师管理:可注册新增老师用户信息,同时查看老师的相关信息。 (8) 公告管理:管理员对本系统中的所用子级用户进行发布公告及编辑。 (9) 问题管理:管理员和老师对学生提出的问题进行管理。 (10) 留言管理:本系统使用者可以对普通老师及学生的情况进行发表意见,并可以查看所以其对应的回复记录。 本信息有个人提供,如果有不懂地方需要请联系Q-Q:103648905
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OldWinePot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值