Java项目:SSH的自动排课系统-遗传算法

作者主页:夜未央5788

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

本系统分为三个角色:管理员、老师和学生
管理员功能如下:登录、班级信息管理、教师信息管理、教室信息管理、课程录入、课程排课、用户管理、专业信息管理、自动排课
老师功能如下:登录,查询排课
学生功能如下:登录,查询排课

环境需要

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

6.数据库:MySql 5.7/8.0等版本均可;

技术栈

1. 后端:Spring Struts Hibernate 

2. 前端:JSP+css+javascript+jQuery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2.使用IDEA/Eclipse/MyEclipse导入项目,配置项目;
3.将项目中WebRoot/WEB-INF/applicationContext.xml配置文件中的数据库配置改为自己的配置,然后运行;
4.登录地址:http://localhost:8080/schedule/login.jsp

5、登录账号:管理员 admin/123  老师 ls/123  学生 xs/123

运行截图

学生角色

 

 老师角色

 

管理员角色

 

 

 

 

 

 

 

 

 

相关代码 

courseAction

package com.action;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.dao.CommonDAO;
import com.dao.CourseDAO;
import com.model.Classes;
import com.model.Classroom;
import com.model.Course;
import com.model.Professional;
import com.model.Schedule;
import com.model.Teacher;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class courseAction extends ActionSupport
{
	ArrayList kecheng = new ArrayList();
	ArrayList banji = new ArrayList();
	ArrayList jiaoshi = new ArrayList();
	ArrayList laoshi = new ArrayList();
	String no;
	String suc;
	private CommonDAO commonDAO;
	
	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getSuc() {
		return suc;
	}
	public void setSuc(String suc) {
		this.suc = suc;
	}

	public CommonDAO getCommonDAO() {
		return commonDAO;
	}
	public void setCommonDAO(CommonDAO commonDAO) {
		this.commonDAO = commonDAO;
	}
	//添加专业
	public String professionalAdd()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String professionalname=request.getParameter("professionalname");
		Professional p=new Professional();
		p.setProfessionalname(professionalname);
		commonDAO.save(p);
		suc="";
		return "success";
	}
	//修改专业
	public String professionalEdit()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String professionalname=request.getParameter("professionalname");
		String professionalid=request.getParameter("id");
		Professional p=new Professional();
		p.setProfessionalid(Integer.valueOf(professionalid));
		p.setProfessionalname(professionalname);
		commonDAO.update(p);
		suc="";
		return "success";
	}
	
	//添加班级
	public String classesAdd()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String professionalid=request.getParameter("professionalid");
		String grade=request.getParameter("grade");
		String classesname=request.getParameter("classesname");
		String count=request.getParameter("count");
		Classes c=new Classes();
		c.setClassesname(classesname);
		c.setProfessionalid(Integer.valueOf(professionalid));
		c.setGrade(grade);
		c.setCount(count);
		commonDAO.save(c);
		suc="";
		return "success";
	}
	
	//修改班级
	public String classesEdit()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String classesid=request.getParameter("id");
		String professionalid=request.getParameter("professionalid");
		String grade=request.getParameter("grade");
		String classesname=request.getParameter("classesname");
		String count=request.getParameter("count");
		Classes c=new Classes();
		c.setClassesid(Integer.valueOf(classesid));
		c.setClassesname(classesname);
		c.setProfessionalid(Integer.valueOf(professionalid));
		c.setGrade(grade);
		c.setCount(count);
		commonDAO.update(c);
		suc="";
		return "success";
	}
	
	//添加班级
	public String classroomAdd()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String classroomname=request.getParameter("classroomname");
		String count=request.getParameter("count");
		Classroom c=new Classroom();
		c.setClassroomname(classroomname);
		c.setCount(count);
		commonDAO.save(c);
		suc="";
		return "success";
	}
	
	//修改班级
	public String classroomEdit()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String classroomid=request.getParameter("id");
		String classroomname=request.getParameter("classroomname");
		String count=request.getParameter("count");
		Classroom c=new Classroom();
		c.setClassroomid(Integer.valueOf(classroomid));
		c.setClassroomname(classroomname);
		c.setCount(count);
		commonDAO.update(c);
		suc="";
		return "success";
	}
	 
	//添加课程
	public String courseAdd()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String coursename=request.getParameter("coursename");
		String studyweek=request.getParameter("studyweek");
		String classtime=request.getParameter("classtime");
		String professionalid=request.getParameter("professionalid");
		String grade=request.getParameter("grade");
		String publicclass=request.getParameter("publicclass");
		String begintime=request.getParameter("begintime");
		String endtime=request.getParameter("endtime");
		Course c=new Course();
		c.setCoursename(coursename);
		c.setStudyweek(studyweek);
		c.setClasstime(classtime);
		c.setProfessionalid(Integer.valueOf(professionalid));
		c.setGrade(grade);
		c.setPublicclass(publicclass);
		c.setBegintime(begintime);
		c.setEndtime(endtime);
		commonDAO.save(c);
		suc="";
		return "success";
	}
	
	//修改课程
	public String courseEdit()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String courseid=request.getParameter("id");
		String coursename=request.getParameter("coursename");
		String studyweek=request.getParameter("studyweek");
		String classtime=request.getParameter("classtime");
		String professionalid=request.getParameter("professionalid");
		String grade=request.getParameter("grade");
		String publicclass=request.getParameter("publicclass");
		String begintime=request.getParameter("begintime");
		String endtime=request.getParameter("endtime");
		Course c=new Course();
		c.setCourseid(Integer.valueOf(courseid));
		c.setCoursename(coursename);
		c.setStudyweek(studyweek);
		c.setClasstime(classtime);
		c.setProfessionalid(Integer.valueOf(professionalid));
		c.setGrade(grade);
		c.setPublicclass(publicclass);
		c.setBegintime(begintime);
		c.setEndtime(endtime);
		commonDAO.update(c);
		suc="";
		return "success";
	}
	
	//添加教师
	public String teacherAdd()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String teachername=request.getParameter("teachername");
		String courseid=request.getParameter("courseid");
		Teacher t=new Teacher();
		t.setTeachername(teachername);
		t.setCourseid(Integer.valueOf(courseid));
		commonDAO.save(t);
		suc="";
		return "success";
	}
	
	//修改教师
	public String teacherEdit()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String teacherid=request.getParameter("id");
		String teachername=request.getParameter("teachername");
		String courseid=request.getParameter("courseid");
		Teacher t=new Teacher();
		t.setTeacherid(Integer.valueOf(teacherid));
		t.setTeachername(teachername);
		t.setCourseid(Integer.valueOf(courseid));
		commonDAO.update(t);
		suc="";
		return "success";
	}
	
	public String courseplanEdit()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		String scheduleId=request.getParameter("id");
		Schedule ns=(Schedule)commonDAO.findById(Integer.parseInt(scheduleId), "Schedule");
		String professionalid=request.getParameter("professionalid");
		String teacherid=request.getParameter("teacherid");
		String classroomid=request.getParameter("classroomid");
		ns.setProfessionalid(Integer.parseInt(professionalid));
		ns.setTeacherid(Integer.parseInt(teacherid));
		ns.setClassroomid(Integer.parseInt(classroomid));
		commonDAO.update(ns);
		suc="";
		return "success";
	}
	
	public void coursePlan()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		HttpServletResponse response=(HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE); 
		String zhuanye = request.getParameter("professionalid");
		String nianji = request.getParameter("grade");
		
		ArrayList kecheng = this.getKecheng(zhuanye,nianji);
		ArrayList banji = this.getBanji(zhuanye,nianji);
		ArrayList jiaoshi = this.getJiaoshi();
		ArrayList laoshi = this.getLaoshi();
		String[] begin = null;
		String[] end = null;
		int[] beginInt = new int[3];
		int[] endInt = new int[3];
		int[][] xy = new int[5][6];
		
		for(int i = 0;i < kecheng.size();i++){
			boolean bool = true;
			int flag = 0;
			int a = 0;//总共的教学周
			int b = 0;//每周的课时数
			ArrayList al = (ArrayList)kecheng.get(i);
			begin = al.get(6).toString().split("-");
			end = al.get(7).toString().split("-");
			for(int j = 0;j < begin.length;j++){
				beginInt[j] = Integer.parseInt(begin[j]);
				endInt[j] = Integer.parseInt(end[j]);
			}
			
			Calendar c = Calendar.getInstance();
			c.set(beginInt[0],beginInt[1]-1,beginInt[2]);
			c.add(Calendar.DATE,-1);
			while(bool){
				c.add(Calendar.DATE,1);
				flag++;
				if(c.get(Calendar.MONTH)+1 == endInt[1] && c.get(Calendar.DATE) == endInt[2]){
					bool = false;
				}
			}
			
			if(flag%5 == 0){
				a = flag/5;
			}else{
				a = flag/5+1;
			}
			if(Integer.parseInt(al.get(3).toString())%a == 0){
				b = Integer.parseInt(al.get(3).toString())/a;
			}else{
				b = Integer.parseInt(al.get(3).toString())/a+1;
			}
			for(int n = 0;n < 6;n++){
				for(int w = 0;w < 5;w++){
					if(xy[w][n] == 0){
						xy[w][n] = Integer.parseInt(al.get(0).toString());
					}else{
						continue;
					}
					b--;
					if(b == 0){
						break;
					}
				}
				if(b == 0){
					break;
				}
			}
		}
		
		ArrayList paike = new ArrayList();
		for(int i = 0;i < banji.size();i++){
			ArrayList all = new ArrayList();
			ArrayList allRow = new ArrayList();
			ArrayList banjiRow = (ArrayList)banji.get(i);
			int flag = 0;
			for(int x = 0;x < 5;x++){
				for(int y = 0;y < 6;y++){
					if(xy[x][y+1] != 0){
						flag = xy[x][y];
						xy[x][y] = xy[x][y+1];
						xy[x][y+1] = flag;
					}else{
						break;
					}
				}
			}
			for(int x = 0;x < 5;x++){
				ArrayList allCol = new ArrayList();
				for(int y = 0;y < 6;y++){
					allCol.add(""+xy[x][y]);
				}
				allRow.add(allCol);
			}
			all.add(allRow);
			all.add(banjiRow);
			paike.add(all);
		}

		request.setAttribute("zhuanyeid",zhuanye);
		request.setAttribute("nianji",nianji);
		request.setAttribute("paike",paike);
		request.setAttribute("kecheng",kecheng);
		RequestDispatcher rd=request.getRequestDispatcher("courseplanauto.jsp");
		try {
			rd.forward(request,response);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	public void coursePlanSave()
	{
		ActionContext ac=ActionContext.getContext();
		HttpServletRequest request=(HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 
		HttpServletResponse response=(HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE); 
		ArrayList save = (ArrayList)request.getSession().getAttribute("save");
		String a = request.getParameter("a");
		String b = request.getParameter("b");
		String c = request.getParameter("c");
		String[] laoshiid = new String[save.size()];
		String[] jiaoshiid = new String[save.size()];
		int flag1 = 0;
		int flag2 = 0;
		for(int i = 0;i < Integer.parseInt(a);i++){
			for(int j = 0;j <Integer.parseInt(b);j++){
				for(int m = 0;m < Integer.parseInt(c);m++){
					if(request.getParameter("laoshi"+i+""+j+""+m) != null && !request.getParameter("laoshi"+i+""+j+""+m).equals("")){
						laoshiid[flag1] = request.getParameter("laoshi"+i+""+j+""+m);
						flag1++;
					}
					if(request.getParameter("jiaoshi"+i+""+j+""+m) != null && !request.getParameter("jiaoshi"+i+""+j+""+m).equals("")){
						jiaoshiid[flag2] = request.getParameter("jiaoshi"+i+""+j+""+m);
						flag2++;
					}
				}
			}
		}
		int flag = this.saveKebiao(save,laoshiid,jiaoshiid);
		if(flag == 1){
			request.setAttribute("chenggong","1");
		}
		if(flag == 2){
			request.setAttribute("chongfu","1");
		}
		RequestDispatcher rd=request.getRequestDispatcher("courseplanauto.jsp");
		try {
			rd.forward(request,response);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		
	}
	
	public ArrayList getKecheng(String zhuanye,String nianji){
		try {
			String hql="select a,b  from Course a,Professional b where a.professionalid=b.professionalid and a.professionalid='"+zhuanye+"' and a.grade='"+nianji+"'";
			List<Object[]> list=commonDAO.findByHql(hql);
			for(int i=0;i<list.size();i++){
				ArrayList alRow = new ArrayList();
				Course c = (Course)list.get(i)[0];
				Professional p=(Professional)list.get(i)[1];
				alRow.add(c.getCourseid());
				alRow.add(c.getCoursename());
				alRow.add(c.getStudyweek());
				alRow.add(c.getClasstime());
				alRow.add(c.getPublicclass());
				alRow.add(c.getGrade());
				alRow.add(c.getBegintime());
				alRow.add(c.getEndtime());
				alRow.add(p.getProfessionalid());
				alRow.add(p.getProfessionalname());
				kecheng.add(alRow);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return kecheng;
	}
	
	public ArrayList getBanji(String zhuanye,String nianji){
		try {
			banji=new ArrayList();
			String hql=" from Classes where professionalid='"+zhuanye+"' and grade='"+nianji+"'";
			List<Classes> list=commonDAO.findByHql(hql);
			for(int i=0;i<list.size();i++){
				Classes c=list.get(i);
				ArrayList alRow = new ArrayList();
				alRow.add(c.getClassesid());
				alRow.add(c.getClassesname());
				alRow.add(c.getGrade());
				alRow.add(c.getProfessionalid());
				alRow.add(c.getCount());
				banji.add(alRow);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return banji;
	}
	
	public ArrayList getJiaoshi(){
		try {
			String hql=" from Classroom ";
			List<Classroom> list=commonDAO.findByHql(hql);
			jiaoshi=new ArrayList();
			for(int i=0;i<list.size();i++){
				Classroom c=list.get(i);
				ArrayList alRow = new ArrayList();
				alRow.add(c.getClassroomid());
				alRow.add(c.getClassroomname());
				alRow.add(c.getCount());
				jiaoshi.add(alRow);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return jiaoshi;
	}
	
	public ArrayList getLaoshi(){
		try {
			laoshi=new ArrayList();
			String hql=" from Teacher ";
			List<Teacher> list=commonDAO.findByHql(hql);
			for(int i=0;i<list.size();i++){
				Teacher t=list.get(i);
				ArrayList alRow = new ArrayList();
				alRow.add(t.getTeacherid());
				alRow.add(t.getTeachername());
				alRow.add(t.getCourseid());
				laoshi.add(alRow);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return laoshi;
	}
	
	public int saveKebiao(ArrayList save,String[] laoshiid,String[] jiaoshiid){
		int temp = 0;
		try {
			int i;
			for(i = 0;i < save.size();i++){
				ArrayList saveRow = (ArrayList)save.get(i);
				String sql=" from Schedule where professionalid='"+saveRow.get(0)+"' and grade='"+saveRow.get(1)+"' and week='"+saveRow.get(2)+"' and kejie='"+saveRow.get(3)+"' and courseid='"+saveRow.get(4)+"' and classesid='"+saveRow.get(5)+"' and teacherid='"+laoshiid[i]+"' and classroomid='"+jiaoshiid[i]+"'";
				List<Teacher> list=commonDAO.findByHql(sql);
				if(list.size()>0){
					temp = 2;
					break;
				}else{
					Schedule s =new Schedule();
					//s.setScheduleid(Integer.parseInt((String)saveRow.get(0)));
					s.setProfessionalid(Integer.parseInt((String)saveRow.get(0)));
					s.setGrade(String.valueOf(saveRow.get(1)));
					s.setWeek(Integer.parseInt((String)saveRow.get(2)));
					s.setKejie(Integer.parseInt((String)saveRow.get(3)));
					s.setCourseid(Integer.parseInt((String) saveRow.get(4)));
					s.setClassesid((Integer) saveRow.get(5));
					s.setTeacherid(Integer.parseInt(laoshiid[i]));
					s.setClassroomid(Integer.parseInt(jiaoshiid[i]));
					commonDAO.save(s);
				}
			}
			if(i == save.size()){
				temp = 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return temp;
	}
	
}

如果也想学习本系统,下面领取。关注并回复:132ssh

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
软件简介:鑫钜排课系统是一套智能排课系统 ,专门解决令头头疼的学校排课问题。 手工排课一向是学校教务工作中最令人头疼的事,非常费时费神,而且由于人工操作时多多少少会有些失误。往往经过一两天的冥思苦想排出来的课程表,却总会发现纰漏,导致课程表需要修改。而修改课程表一般都是牵一发而动全身,令人非常苦恼。 鑫钜排课系统的出现解决了以上所有难题,本系统特聘一位从事20余年学校教务工作的老师,根据自己多年来排课经验,全程跟踪系统开发,集众家排课软件之长,操作简单,直观;排课算法先进,合理分配每天的课程节次,排出来的课更合理、更科学,完全符合中小学排课的需要。让您从此告别繁琐的手工排课,只要设置好学校班数、节数、课程、教师任课,系统就会自动排出所有课程表。一个几十个班的学校,从信息开始录入到开始打印课程表的整个过程一般一个小时内就可以完全搞定,这在手工排课阶段,几乎是不可想象的。而且电脑自动排课的过程只需几秒钟,排完之后觉得不满意,完全可以根据系统提示进行调整。 功能特点:鑫钜排课系统还有很多特点都领先于同类软件,如: 1.傻瓜型的向导操作模式:《鑫钜排课系统》的向导操作模式使得对电脑一知半解的用户也可以操作自如。并采用教务工作者的思路来设计软件,即使不懂电脑的老教务主任操作起来也会有一种似曾相识的感觉。 2一流的排课算法: 《鑫钜排课系统》采用优秀的排课算法,自动排课无论速度及准确性是其它排课软件不可比拟的 3.直观的调课功能。能采用直观的卡片式显示方法,用不同的颜色显示哪些课可以调,哪些课不能调,调课直观,方便,像玩游戏一样,让您排出的课符合您的要求。 4.方便的查询功能。任意选中课表中某一节课(或几节课),能查询哪些老师在上课,哪些老师在休息,这样方便领导选派教师安排临时性的工作,或考勤查岗等事务,也可以在调课过程中利用它发现哪些课不合理,以便进行调整. 5.教学工作量统计功能。能自动统计全校任课教师的教学工作量,并导出到Excel(电子表格)中编辑、打印。以便根据您的需要计算出教师的教学工作量津贴等。 6.能合理分配场地受限的课程。例如:微机课、体育课。如果您学校只有一间微机教室,那么在同一课时排课系统会只安排一节微机课。 7.能设置教师在哪节课不排课。例如:有些老师每周固定时间开会,固定时间教研等。 8..能设置课程的不排节次。例如:体育不安排在上午第一、二节。 9.能根据您的需要安排固定课。例如:班会课、劳动课、自习课等安排在固定的某一节课;也可以用来做手工排课,如:把某班的语文课固定在第一节课上。 10.方便、灵活的打印功能。总功课表、班级课表、个人课表能一键导出到Excel(电子表格)中编辑、打印,让你打出更精美的课表。班级课表和个人课表还可以用A4纸张直接打印出来。 11.强大的手动调课功能。系统能够自动提示可调课程位置,可以方便地调动课程。 12.采用24小时在线升级技术。采用在线升级技术,令升级更方便。 13.立足用户的本地化改造。如校方对排课系统的某些功能需求有异,可在第一时间为校方做调整完善。 使用范围:适用于各类中学、小学、全日制、半日制、中专类院校等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜未央5788

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

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

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

打赏作者

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

抵扣说明:

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

余额充值