0、效果展示
1、概述
教研室管理是高校教学管理工作的一项重要内容,为了更方便教师对课程更系统的规划和安排以及教研室对教师的管理和监督。教师可以在这个系统上查看自己的个人信息,课程安排以及教师的个人论文等情况。同时,教务处也能够很方便的查看本系老师的一些信息,课程安排以及论文等情况。实现电子化、网络化、规范化作业流程,减少因距离、时间等产生的交流不畅等问题。设计一个科学合理的教研室管理系统,有着极其重要的意义
教务管理系统是学校管理的一个重要工具。要更高效率的提高教师的管理工作以及加强对教师教学的监督与管理工作,就必须结合自身特点,建立与之相适应的的教务管理系统。本系统是针对华北科技学院基础部当前的教务管理需求,设计开发出的教务管理系统。
教务管理系统作为一个完整的大的系统,其中包含多个功能模块。主要的功能模块包括:教师功能模块,管理员模块以及系统的退出。教师模块包括:教师的个人信息管理,课程安排,论文的提交及查看。管理员模块主要包括:对教师的信息管理,对教师课程的监督和审核,对课程安排的计划和修改。在该系统中,查询信息模块都包括一个扩展的打印功能,使用户更加方便的使用。最后是系统的退出,可以进行用户的注销或是选择退出系统。
2、搭建环境
本文以实现一个教学资料申报网站为目标,从环境搭建到编码实现全过程讲述
我们使用javaweb、J2EE来构建教学资料申报网站,环境使用最新版jdk和tomcat,配合mysql数据库
开发工具使用idea(也可以使用eclipse),数据库管理工具使用Navicat Premium
开发框架使用JavaBean Servlet MVC结构;
没有使用SSH(Struts+Spring+Hibernate)或SSM(Spring+SpringMVC+MyBatis),这两个框架我们在别的项目中再介绍开发过程
在项目中会引入My97DatePicker作为前端日期时间选择工具,使用fckeditor作为富媒体编辑器(也可以使用百度的ueditor)
使用DWR(Direct Web Remoting)用于改善web页面与Java类交互,实现远程服务器端AJAX读取登录数据。
使用JSTL(Java server pages standarded tag library,即JSP标准标签库),此库是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
3、数据表结构
表5 t_gonggao公告表
字段名称 | 自动增长 | 字段类型 | 说明 |
id | - | INT | 编号 |
title | - | varchar | 标题 |
content | - | varchar | 内容 |
shijian | - | varchar | 时间 |
表6 t_ziliao资料
字段名称 | 自动增长 | 字段类型 | 说明 |
id | - | INT | 编号 |
title | - | varchar | 标题 |
content | - | varchar | 内容 |
fujian | - | varchar | 附件 |
fujianYuanshiming | - | varchar | 说明 |
shijian | - | varchar | 时间 |
del | - | varchar | 是否删除 |
表7 jiaoshi教师表
字段名称 | 自动增长 | 字段类型 | 说明 |
id | - | INT | 编号 |
bianhao | - | varchar | 编号 |
name1 | - | varchar | 名称 |
sex | - | varchar | 性别 |
age | - | varchar | 年龄 |
phone | - | varchar | 电话 |
loginpw | - | varchar | 密码 |
del | - | varchar | 是否删除 |
regshijian | - | varchar | 注册时间 |
表8 t_zhuanjia 领导表
字段名称 | 自动增长 | 字段类型 | 说明 |
id | - | INT | 编号 |
bianhao | - | varchar | 编号 |
name | - | varchar | 名称 |
sex | - | varchar | 性别 |
age | - | INT | 年龄 |
loginpw | - | varchar | 密码 |
del | - | varchar | 是否删除 |
4、后端代码示例
package com.action;
import java.io.IOException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.DB;
import com.orm.Tdoc;
import com.orm.Tgeshi;
public class geshi_servlet extends HttpServlet
{
public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException
{
String type=req.getParameter("type");
if(type.endsWith("geshiAdd"))
{
geshiAdd(req, res);
}
if(type.endsWith("geshiMana"))
{
geshiMana(req, res);
}
if(type.endsWith("geshiDel"))
{
geshiDel(req, res);
}
if(type.endsWith("geshiDetail"))
{
geshiDetail(req, res);
}
if(type.endsWith("geshiAll"))
{
geshiAll(req, res);
}
if(type.endsWith("geshiDetailQian"))
{
geshiDetailQian(req, res);
}
}
public void geshiAdd(HttpServletRequest req,HttpServletResponse res)
{
String id=String.valueOf(new Date().getTime());
String title=req.getParameter("title");
String content=req.getParameter("content");
String fujian=req.getParameter("fujian");
String fujianYuanshiming=req.getParameter("fujianYuanshiming");
String shijian=req.getParameter("shijian");
String del="no";
String sql="insert into t_geshi values(id,?,?,?,?,?,?)";
Object[] params={title,content,fujian,fujianYuanshiming,shijian,del};
DB mydb=new DB();
mydb.doPstm(sql, params);
mydb.closed();
req.setAttribute("message", "操作成功");
req.setAttribute("path", "geshi?type=geshiMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL, req, res);
}
public void geshiDel(HttpServletRequest req,HttpServletResponse res)
{
String id=req.getParameter("id");
String sql="delete from t_geshi where id=?";
Object[] params={id};
DB mydb=new DB();
mydb.doPstm(sql, params);
mydb.closed();
req.setAttribute("message", "操作成功");
req.setAttribute("path", "geshi?type=geshiMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL, req, res);
}
public void geshiDetail(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
{
String id=req.getParameter("id");
Tgeshi geshi=new Tgeshi();
String sql="select * from t_geshi where id=?";
Object[] params={id};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
rs.next();
geshi.setId(rs.getString("id"));
geshi.setTitle(rs.getString("title"));
geshi.setContent(rs.getString("content"));
geshi.setFujian(rs.getString("fujian"));
geshi.setFujianYuanshiming(rs.getString("fujianYuanshiming"));
geshi.setShijian(rs.getString("shijian"));
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("geshi", geshi);
req.getRequestDispatcher("admin/geshi/geshiDetail.jsp").forward(req, res);
}
public void geshiDetailQian(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
{
String id=req.getParameter("id");
Tgeshi geshi=new Tgeshi();
String sql="select * from t_geshi where id=?";
Object[] params={id};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
rs.next();
geshi.setId(rs.getString("id"));
geshi.setTitle(rs.getString("title"));
geshi.setContent(rs.getString("content"));
geshi.setFujian(rs.getString("fujian"));
geshi.setFujianYuanshiming(rs.getString("fujianYuanshiming"));
geshi.setShijian(rs.getString("shijian"));
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("geshi", geshi);
req.getRequestDispatcher("qiantai/geshi/geshiDetailQian.jsp").forward(req, res);
}
public void geshiMana2(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
{
List geshiList=new ArrayList();
String sql="select * from t_geshi where del='no'";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
while(rs.next())
{
Tgeshi geshi=new Tgeshi();
geshi.setId(rs.getString("id"));
geshi.setTitle(rs.getString("title"));
geshi.setContent(rs.getString("content"));
geshi.setFujian(rs.getString("fujian"));
geshi.setFujianYuanshiming(rs.getString("fujianYuanshiming"));
geshi.setShijian(rs.getString("shijian"));
geshiList.add(geshi);
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("geshiList", geshiList);
req.getRequestDispatcher("admin/geshi/geshiMana.jsp").forward(req, res);
}
public void geshiMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
{
String userid=req.getParameter("userid");
String page1=req.getParameter("page");
if(page1==null){
page1="1";
}
//分页设置
int EVERYPAGENUM=20;//每页条数
int page=Integer.parseInt(page1); //传递过来的当前页
int cou = 1;//得到信息总数
int pagecount=1; //总页数
String sql1="select count(*) as cou from t_geshi where del='no' ";
Object[] params1={};
DB mydb1=new DB();
try
{
mydb1.doPstm(sql1, params1);
ResultSet rs=mydb1.getRs();
while(rs.next())
{
cou= rs.getInt("cou");
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb1.closed();
if (cou % EVERYPAGENUM == 0) {
pagecount= cou / EVERYPAGENUM;
} else {
pagecount=cou / EVERYPAGENUM + 1;
}
req.setAttribute("EVERYPAGENUM", EVERYPAGENUM);
req.setAttribute("page", page);
req.setAttribute("cou", cou);
req.setAttribute("pagecount", pagecount);
List geshiList=new ArrayList();
String sql="select * from t_geshi where del='no' ";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
for (int i = 0; i < (page - 1) * EVERYPAGENUM; i++) {
rs.next();
}
for (int t = 0; t < EVERYPAGENUM; t++) {
if (rs.next()) {
Tgeshi geshi=new Tgeshi();
geshi.setId(rs.getString("id"));
geshi.setTitle(rs.getString("title"));
geshi.setContent(rs.getString("content"));
geshi.setFujian(rs.getString("fujian"));
geshi.setFujianYuanshiming(rs.getString("fujianYuanshiming"));
geshi.setShijian(rs.getString("shijian"));
geshiList.add(geshi);
} else {
break; //减少空循环的时间
}
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("geshiList", geshiList);
req.getRequestDispatcher("admin/geshi/geshiMana.jsp").forward(req, res);
}
public void geshiAll2(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
{
List geshiList=new ArrayList();
String sql="select * from t_geshi where del='no'";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
while(rs.next())
{
Tgeshi geshi=new Tgeshi();
geshi.setId(rs.getString("id"));
geshi.setTitle(rs.getString("title"));
geshi.setContent(rs.getString("content"));
geshi.setFujian(rs.getString("fujian"));
geshi.setFujianYuanshiming(rs.getString("fujianYuanshiming"));
geshi.setShijian(rs.getString("shijian"));
geshiList.add(geshi);
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("geshiList", geshiList);
req.getRequestDispatcher("qiantai/geshi/geshiAll.jsp").forward(req, res);
}
public void geshiAll(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
{
String userid=req.getParameter("userid");
String page1=req.getParameter("page");
if(page1==null){
page1="1";
}
//分页设置
int EVERYPAGENUM=10;//每页条数
int page=Integer.parseInt(page1); //传递过来的当前页
int cou = 1;//得到信息总数
int pagecount=1; //总页数
String sql1="select count(*) as cou from t_geshi where del='no' ";
Object[] params1={};
DB mydb1=new DB();
try
{
mydb1.doPstm(sql1, params1);
ResultSet rs=mydb1.getRs();
while(rs.next())
{
cou= rs.getInt("cou");
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb1.closed();
if (cou % EVERYPAGENUM == 0) {
pagecount= cou / EVERYPAGENUM;
} else {
pagecount=cou / EVERYPAGENUM + 1;
}
req.setAttribute("EVERYPAGENUM", EVERYPAGENUM);
req.setAttribute("page", page);
req.setAttribute("cou", cou);
req.setAttribute("pagecount", pagecount);
List geshiList=new ArrayList();
String sql="select * from t_geshi where del='no' ";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
for (int i = 0; i < (page - 1) * EVERYPAGENUM; i++) {
rs.next();
}
for (int t = 0; t < EVERYPAGENUM; t++) {
if (rs.next()) {
Tgeshi geshi=new Tgeshi();
geshi.setId(rs.getString("id"));
geshi.setTitle(rs.getString("title"));
geshi.setContent(rs.getString("content"));
geshi.setFujian(rs.getString("fujian"));
geshi.setFujianYuanshiming(rs.getString("fujianYuanshiming"));
geshi.setShijian(rs.getString("shijian"));
geshiList.add(geshi);
} else {
break; //减少空循环的时间
}
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("geshiList", geshiList);
req.getRequestDispatcher("qiantai/geshi/geshiAll.jsp").forward(req, res);
}
public void dispatch(String targetURI,HttpServletRequest request,HttpServletResponse response)
{
RequestDispatcher dispatch = getServletContext().getRequestDispatcher(targetURI);
try
{
dispatch.forward(request, response);
return;
}
catch (ServletException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void destroy()
{
}
}
5、前端代码示例
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page isELIgnored="false" %>
<%
String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3" />
<meta http-equiv="description" content="This is my page" />
<link rel="stylesheet" type="text/css" href="<%=path %>/css/base.css" />
<script language="JavaScript" src="<%=path %>/js/public.js" type="text/javascript"></script>
<script language="javascript">
function geshiAdd()
{
var url="<%=path %>/admin/geshi/geshiAdd.jsp";
window.location.href=url;
}
function geshiDetail(id)
{
var url="<%=path %>/geshi?type=geshiDetail&id="+id;
var n="";
var w="500px";
var h="400px";
var s="resizable:no;help:no;status:no;scroll:yes";
window.location.href=url;
}
function down1(fujianPath,fujianYuashiMing)
{
var url="<%=path %>/updown/updown.jsp?fujianPath="+fujianPath+"&fujianYuashiMing="+fujianYuashiMing;
url=encodeURI(url);
url=encodeURI(url);
window.open(url,"_self");
}
</script>
</head>
<body leftmargin="2" topmargin="2" background='<%=path %>/img/allbg.gif'>
<table width="98%" border="0" cellpadding="2" cellspacing="1" bgcolor="#D1DDAA" align="center" style="margin-top:8px">
<tr bgcolor="#E7E7E7">
<td height="14" colspan="5" background="<%=path %>/img/tbg.gif"> </td>
</tr>
<tr align="center" bgcolor="#FAFAF1" height="22">
<td width="20%">名称</td>
<td width="20%">内容</td>
<td width="20%">附件下载</td>
<td width="20%">发布时间</td>
<td width="20%">操作</td>
</tr>
<c:forEach items="${requestScope.geshiList}" var="geshi">
<tr align='center' bgcolor="#FFFFFF" onMouseMove="javascript:this.bgColor='red';" onMouseOut="javascript:this.bgColor='#FFFFFF';" height="22">
<td bgcolor="#FFFFFF" align="center">
${geshi.title}
</td>
<td bgcolor="#FFFFFF" align="center">
<a href="#" onclick="geshiDetail(${geshi.id})" class="pn-loperator">查看内容</a>
</td>
<td bgcolor="#FFFFFF" align="center">
<a href="#" onclick="down1('${geshi.fujian}','${geshi.fujianYuanshiming}')" style="font-size: 10px;color: red">down</a>
</td>
<td bgcolor="#FFFFFF" align="center">
${geshi.shijian}
</td>
<td bgcolor="#FFFFFF" align="center">
<a class="pn-loperator" href="<%=path %>/geshi?type=geshiDel&id=${geshi.id}">删除</a>
</td>
</tr>
</c:forEach>
</table>
<table width='98%' border='0'style="margin-top:8px;margin-left: 5px;">
<tr>
<td>
<input type="button" value="添加" style="width: 80px;" onclick="geshiAdd()" />
</td>
</tr>
<tr>
<td align="center">
<form action="" method="post" name="formpage">
<input type="hidden" name="pageCount" value="${requestScope.pagecount}" />
<!--//用于给上面javascript传值-->
<input type="hidden" name="page" value="${requestScope.page}" />
<!--//用于给上面javascript传值-->
<input type="hidden" name="jumpurl" value="<%=path%>/geshi?type=geshiMana&kechengid=${requestScope.kechengid}&" />
<!--//用于给上面javascript传值-->
<a href="#" onClick="PageTop()"><strong>首页</strong></a> <a href="#" onClick='PagePre()'><strong>上一页</strong></a>
共${requestScope.cou}条记录,
共计${requestScope.pagecount}页,
当前第${requestScope.page}页 <a href="#" onClick="PageNext()"><strong>下一页</strong></a> <a href="#" onClick="PageLast()"><strong>尾页</strong></a> 第
<input name="busjump" type="text" size="3" value="${requestScope.page}" style=" width:15px"/>
页<a href="#" onClick="bjump()"><strong>跳转</strong></a>
</form>
<script type="text/javascript" src="<%=path%>/qtstyle/js/page.js"></script>
</td>
</tr>
</table>
</body>
</html>