Repository: zhiyuncloud/aixuexiao
Branch: master
Commit: 58cd5d35cca8
Files: 101
Total size: 150.8 KB
Directory structure:
gitextract__ax_k9m7/
├── .classpath
├── .project
├── .settings/
│ ├── .jsdtscope
│ ├── org.eclipse.core.resources.prefs
│ ├── org.eclipse.jdt.core.prefs
│ ├── org.eclipse.wst.common.component
│ ├── org.eclipse.wst.common.project.facet.core.xml
│ ├── org.eclipse.wst.jsdt.ui.superType.container
│ └── org.eclipse.wst.jsdt.ui.superType.name
├── README.md
├── WebContent/
│ ├── META-INF/
│ │ └── MANIFEST.MF
│ ├── WEB-INF/
│ │ ├── lib/
│ │ │ ├── aopalliance-1.0.jar
│ │ │ ├── asm-3.3.1.jar
│ │ │ ├── aspectjweaver.jar
│ │ │ ├── c3p0-0.9.2-pre4.jar
│ │ │ ├── cglib-2.2.2.jar
│ │ │ ├── commons-logging-1.1.1.jar
│ │ │ ├── dom4j-1.6.1.jar
│ │ │ ├── javassist-3.17.1-GA.jar
│ │ │ ├── jstl-1.2.jar
│ │ │ ├── log4j-1.2.17.jar
│ │ │ ├── mchange-commons-java-0.2.2.jar
│ │ │ ├── mybatis-3.2.2.jar
│ │ │ ├── mybatis-spring-1.2.0.jar
│ │ │ ├── mysql-connector-java-5.1.19-bin.jar
│ │ │ ├── slf4j-api-1.7.5.jar
│ │ │ ├── slf4j-log4j12-1.7.5.jar
│ │ │ ├── spring-aop-3.2.3.RELEASE.jar
│ │ │ ├── spring-aspects-3.2.3.RELEASE.jar
│ │ │ ├── spring-beans-3.2.3.RELEASE.jar
│ │ │ ├── spring-context-3.2.3.RELEASE.jar
│ │ │ ├── spring-core-3.2.3.RELEASE.jar
│ │ │ ├── spring-expression-3.2.3.RELEASE.jar
│ │ │ ├── spring-jdbc-3.2.3.RELEASE.jar
│ │ │ ├── spring-orm-3.2.3.RELEASE.jar
│ │ │ ├── spring-tx-3.2.3.RELEASE.jar
│ │ │ ├── spring-web-3.2.3.RELEASE.jar
│ │ │ ├── spring-webmvc-3.2.3.RELEASE.jar
│ │ │ └── xstream-1.3.1.jar
│ │ ├── springMVC-servlet.xml
│ │ ├── views/
│ │ │ ├── addclasses.jsp
│ │ │ ├── addclassesnews.jsp
│ │ │ ├── addexam.jsp
│ │ │ ├── addstudentmessage.jsp
│ │ │ ├── addstudents.jsp
│ │ │ ├── classes.jsp
│ │ │ ├── common/
│ │ │ │ ├── css.jsp
│ │ │ │ ├── js.jsp
│ │ │ │ ├── navbar.jsp
│ │ │ │ └── sidebar.jsp
│ │ │ ├── examdetail.jsp
│ │ │ ├── exams.jsp
│ │ │ ├── login.jsp
│ │ │ ├── messages.jsp
│ │ │ ├── replys.jsp
│ │ │ ├── students.jsp
│ │ │ └── viewexam.jsp
│ │ └── web.xml
│ └── assets/
│ ├── css/
│ │ └── ace-fonts.css
│ └── font/
│ └── FontAwesome.otf
├── app_aixuexiao.sql
└── src/
├── com/
│ └── aixuexiao/
│ ├── dao/
│ │ ├── BaseDao.java
│ │ ├── ClassesDao.java
│ │ ├── ClassesNewsDao.java
│ │ ├── ExamDao.java
│ │ ├── MessageDao.java
│ │ ├── ReplyDao.java
│ │ ├── StudentDao.java
│ │ ├── StudentMessageDao.java
│ │ └── sqlmap/
│ │ ├── ClassesMapper.xml
│ │ ├── ClassesNewsMapper.xml
│ │ ├── ExamMapper.xml
│ │ ├── MessageMapper.xml
│ │ ├── ReplyMapper.xml
│ │ ├── StudentMapper.xml
│ │ └── StudentMessageMapper.xml
│ ├── model/
│ │ ├── Article.java
│ │ ├── Classes.java
│ │ ├── ClassesNews.java
│ │ ├── Exam.java
│ │ ├── ExamMark.java
│ │ ├── Message.java
│ │ ├── Reply.java
│ │ ├── Student.java
│ │ └── StudentMessage.java
│ ├── service/
│ │ ├── ClassesService.java
│ │ ├── ExamService.java
│ │ ├── StudentService.java
│ │ └── WeixinService.java
│ ├── util/
│ │ ├── ExamUtil.java
│ │ └── WeixinUtil.java
│ └── web/
│ ├── controller/
│ │ ├── ClassesController.java
│ │ ├── ExamController.java
│ │ ├── LoginController.java
│ │ ├── StudentController.java
│ │ └── WeixinController.java
│ └── interceptor/
│ └── ManagerInterceptor.java
├── db.properties
├── log4j.properties
├── spring.xml
└── sqlMapConfig.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .classpath
================================================
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_45">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/asm-3.3.1.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/cglib-2.2.2.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/dom4j-1.6.1.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/javassist-3.17.1-GA.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jstl-1.2.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/log4j-1.2.17.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/mybatis-spring-1.2.0.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/slf4j-log4j12-1.7.5.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-aop-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-aspects-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-beans-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-context-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-core-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-expression-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-jdbc-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-tx-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-web-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-webmvc-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/xstream-1.3.1.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/mybatis-3.2.2.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-orm-3.2.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/aopalliance-1.0.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/aspectjweaver.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/c3p0-0.9.2-pre4.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/mchange-commons-java-0.2.2.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/mysql-connector-java-5.1.19-bin.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/slf4j-api-1.7.5.jar"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
================================================
FILE: .project
================================================
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>aixuexiao</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>
================================================
FILE: .settings/.jsdtscope
================================================
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="WebContent"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
<attributes>
<attribute name="hide" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
<classpathentry kind="output" path=""/>
</classpath>
================================================
FILE: .settings/org.eclipse.core.resources.prefs
================================================
eclipse.preferences.version=1
encoding//WebContent/WEB-INF/views/common/css.jsp=UTF-8
encoding//WebContent/WEB-INF/views/common/js.jsp=UTF-8
encoding//WebContent/WEB-INF/views/common/navbar.jsp=UTF-8
encoding//WebContent/WEB-INF/views/common/sidebar.jsp=UTF-8
================================================
FILE: .settings/org.eclipse.jdt.core.prefs
================================================
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
================================================
FILE: .settings/org.eclipse.wst.common.component
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="aixuexiao">
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<property name="context-root" value="aixuexiao"/>
<property name="java-output-path" value="/aixuexiao/build/classes"/>
</wb-module>
</project-modules>
================================================
FILE: .settings/org.eclipse.wst.common.project.facet.core.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="Apache Tomcat v6.0"/>
<fixed facet="jst.web"/>
<fixed facet="java"/>
<fixed facet="wst.jsdt.web"/>
<installed facet="java" version="1.6"/>
<installed facet="jst.web" version="2.5"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
================================================
FILE: .settings/org.eclipse.wst.jsdt.ui.superType.container
================================================
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
================================================
FILE: .settings/org.eclipse.wst.jsdt.ui.superType.name
================================================
Window
================================================
FILE: README.md
================================================
aixuexiao
=========
一个基于SAE Java平台的微信平台公众帐号应用例子。
详情访问:http://aixuexiao.sinaapp.com
微信公众帐号:爱学校(aixuexiao)
微信公众帐号功能为作为学生家长和学校老师之间的沟通桥梁。
学生家长可通过和微信公众帐号交互来获取学生在校的考试情况/班级动态/老师留言等信息。
当然需要学校老师在微信公众帐号后台添加学生留言/班级动态/考试信息等数据。
应用基于SAE Java平台开发,使用(Spring/SpringMVC/Mybatis)框架开发,有相同需求(在SAE Java平台搭建微信公众帐号后台)的同学可用拿去作为参考,当然也可用作为在SAE Java平台中使用框架的例子程序作为参考。
微信的验证和回复的入口程序在com.aixuexiao.web.controller.WeixinController.java中。
其中initWeixinURL(对应URL:/weixin GET)方法为验证方法。
replyMessage(对应URL:/weixin POST)方法则是回复方法。
直接下载本项目在SAE Java平台上搭建需要改动地方:
1.在你创建SAE应用的MySQL中执行应用根目录下的app_aixuexiao.sql文件(包括表结构和部分测试数据);
2.修改src下db.properties文件中的数据库信息ak、sk分别设置为你SAE应用中的ak和sk即可。
注:时间仓促且第一次使用SpringMVC,不优雅的代码敬请指出。
有任何问题可用联系我,看到第一时间回复
zhiyun.cloud@gmail.com
@智云同学
================================================
FILE: WebContent/META-INF/MANIFEST.MF
================================================
Manifest-Version: 1.0
Class-Path:
================================================
FILE: WebContent/WEB-INF/springMVC-servlet.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
<property name="messageConverters">
<list>
<bean class = "org.springframework.http.converter.StringHttpMessageConverter">
<property name = "supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
<context:component-scan base-package="com.aixuexiao.web.controller"/>
<mvc:annotation-driven />
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/manager/**"/>
<bean class="com.aixuexiao.web.interceptor.ManagerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
================================================
FILE: WebContent/WEB-INF/views/addclasses.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ӱ༶</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-list-alt"></i>
Ӱ༶
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form action="addclasses" id="addclasses" class="form-horizontal" method="post">
<div class="control-group">
<label class="control-label" for="id">༶</label>
<div class="controls">
<input type="text" name="id" id="id" placeholder=༶>*
<span class="help-inline"><c:if test="${param.notice==null}">꼶Ϊ302</c:if> <font color="red"><c:if test="${param.notice!=null}">${param.notice}</c:if></font></span>
</div>
</div>
<div class="control-group">
<label class="control-label" for="name">༶</label>
<div class="controls">
<input type="text" id="name" value="${param.name}" name="name" placeholder="༶">*
</div>
</div>
<div class="control-group">
<label class="control-label" for="headteacher"></label>
<div class="controls">
<input type="text" value="${param.headteacher}" name="headteacher" id="headteacher" placeholder="">*
</div>
</div>
<div class="form-actions">
<button class="btn btn-info" id="add" type="button">
<i class="icon-ok bigger-110"></i>
Ӱ༶
</button>
<button class="btn btn-info" type="button" onclick="location.href='<%=request.getContextPath() %>/manager/classes'" >
<i class="icon-arrow-left"></i>
</button>
</div>
</form>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#add').on('click', function() {
if($.trim($("#id").val())==''||isNaN($('#id').val())){
alert('ȷİ༶ţ');
return;
}else if($.trim($("#name").val())==''){
alert('༶ƣ');
return;
}else if($.trim($("#headteacher").val())==''){
alert('ƣ');
return;
}else{
$("#addclasses").submit();
}
});
});
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/addclassesnews.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>༶̬</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-comment"></i>
̬
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form action="addclassesnews" id="addclassesnews" method="post">
<label for="form-field-8">Ϊ <b>${cls.name}</b> ༶̬:<b>${cls.headteacher}</b> </label>
<input type="hidden" name="classid" value="${cls.id}">
<textarea class="span12" name="content" id="content" rows="4" placeholder="̬"></textarea>
<br>
<button class="btn btn-info" id="leavemessage" type="button">
<i class="icon-inbox"></i>
</button>
<button class="btn btn-info" type="button" onclick="location.href='<%=request.getContextPath() %>/manager/classes'" >
<i class="icon-arrow-left"></i>
</button>
<br><br>
<c:if test="${param.notice != null}">
<div class="alert alert-info">
<button type="button" class="close" data-dismiss="alert">
<i class="icon-remove"></i>
</button>
<i class="icon-ok"></i>
<strong>${param.notice}</strong>
</div>
</c:if>
</form>
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="6%"></th>
<th width="20%">ʱ</th>
<th></th>
<th width="10%"></th>
</tr>
</thead>
<tbody>
<c:forEach items="${cnlist}" var="cn" varStatus="sta" >
<tr>
<td>${sta.index+1}</td>
<td>${cn.inserttime}</td>
<td>${cn.content}</td>
<td><button class="btn btn-mini btn-danger" onclick="if(window.confirm('ȷɾ̬')==true)location.href='<%=request.getContextPath() %>/manager/deleteclassesnews?classesid=${cn.classid}&id=${cn.id}'"><i class="icon-remove"></i>ɾ̬</button></td>
</tr>
</c:forEach>
</tbody>
</table>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#leavemessage').on('click', function() {
if($.trim($("#content").val())==''){
alert('');
return;
}else{
$("#addclassesnews").submit();
}
});
});
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/addexam.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ӿ</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-file"></i>
ӿ
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form action="addexammark" id="addexammark" class="form-horizontal" method="post">
<input type="hidden" name="classid" value="${exam.classid }" />
<input type="hidden" name="course" value="${exam.course }" />
<input type="hidden" name="fullmarks" value="${exam.fullmarks }" />
<input type="hidden" name="remark" value="${exam.remark }" />
<label for="form-field-8"> ¼ <b>${exam.classid}</b> <b>${exam.course}</b> Գɼ <b>${exam.fullmarks}</b> </label>
<hr>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="10%">ѧ</th>
<th width="10%">ѧ</th>
<th width="10%"></th>
<th >ע</th>
</tr>
</thead>
<tbody>
<c:forEach items="${stlist}" var="student" varStatus="sta" >
<tr>
<td>${student.id }<input type="hidden" name="examMarks[${sta.index}].studentid" value="${student.id}"></td>
<td>${student.name }<input type="hidden" name="examMarks[${sta.index}].studentname" value="${student.name}"><input type="hidden" name="examMarks[${sta.index}].classid" value="${student.classid}"></td>
<td><input type="text" class="mark" name="examMarks[${sta.index}].mark" ></td>
<td><input type="text" class="input-xxlarge" name="examMarks[${sta.index}].remark" ></td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="form-actions">
<button class="btn btn-info" id="add" type="button">
<i class="icon-ok bigger-110"></i>
</button>
<button class="btn btn-info" type="button" onclick="location.href='<%=request.getContextPath() %>/manager/exams'" >
<i class="icon-arrow-left"></i>
</button>
</div>
</form>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#add').on('click', function() {
var flag = true;
$(".mark").each(function(){
if($(this).val() == ""||isNaN($(this).val())||$(this).val() < 0||$(this).val()> ${exam.fullmarks}) {
alert('д');
flag = false;
return false;
}
});
if(flag)$("#addexammark").submit();
});
});
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/addstudentmessage.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-comment"></i>
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form action="addmessage" id="addmessage" method="post">
<label for="form-field-8"> <b>${student.name}</b> ͬѧ:<b>${student.id}</b> </label>
<input type="hidden" name="studentid" value="${student.id}">
<textarea class="span12" name="content" id="content" rows="4" placeholder=""></textarea>
<br>
<button class="btn btn-info" id="leavemessage" type="button">
<i class="icon-inbox"></i>
</button>
<button class="btn btn-info" type="button" onclick="location.href='<%=request.getContextPath() %>/manager/students'" >
<i class="icon-arrow-left"></i>
</button>
<br><br>
<c:if test="${param.notice != null}">
<div class="alert alert-info">
<button type="button" class="close" data-dismiss="alert">
<i class="icon-remove"></i>
</button>
<i class="icon-ok"></i>
<strong>${param.notice}</strong>
</div>
</c:if>
</form>
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="6%"></th>
<th width="20%">ʱ</th>
<th></th>
<th width="10%"></th>
</tr>
</thead>
<tbody>
<c:forEach items="${studentMessageList}" var="message" varStatus="sta" >
<tr>
<td>${sta.index+1}</td>
<td>${message.inserttime}</td>
<td>${message.content}</td>
<td><button class="btn btn-mini btn-danger" onclick="if(window.confirm('ȷɾԣ')==true)location.href='<%=request.getContextPath() %>/manager/deletemessage?studentid=${student.id}&messageid=${message.id}'"><i class="icon-remove"></i>ɾ</button></td>
</tr>
</c:forEach>
</tbody>
</table>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#leavemessage').on('click', function() {
if($.trim($("#content").val())==''){
alert('');
return;
}else{
$("#addmessage").submit();
}
});
});
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/addstudents.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ѧ</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-list-alt"></i>
ѧ
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<label for="form-field-8"> <b>${cls.name}</b> ѧΣ${cls.headteacher } </label>
<br>
<form class="form-inline" id="savestudent" method="post" action="addstudent" >
<input type="hidden" name="classid" value="${cls.id}">
<label class="control-label" >: </label>
<input type="text" id="id" name="id" value="${cls.id}${length+1}" >
<label class="control-label" >: </label>
<input type="text" name="name" id="name" placeholder="">
<label class="control-label" >ע: </label>
<input type="text" name="remark" id="remark" class="input-xlarge" placeholder="ע">
<button class="btn btn-small btn-info" id="addstudent" type="button">
<i class="icon-ok"></i>
ѧ
</button>
<button class="btn btn-small btn-info" onclick="location.href='<%=request.getContextPath() %>/manager/classes'" type="button">
<i class="icon-arrow-left"></i>
</button>
</form>
<c:if test="${param.notice != null}">
<div class="alert alert-info">
<button type="button" class="close" data-dismiss="alert">
<i class="icon-remove"></i>
</button>
<i class="icon-ok"></i>
<strong>${param.notice}</strong>
</div>
</c:if>
<hr>
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="5%">#</th>
<th width="10%">ѧ</th>
<th width="15%">ѧ</th>
<th>ע</th>
<th width="15%"></th>
</tr>
</thead>
<tbody>
<c:forEach items="${stlist}" var="student" varStatus="sta" >
<tr>
<td>${sta.index+1}</td>
<td>${student.id}</td>
<td>${student.name}</td>
<td>${student.remark}</td>
<td>
<a href="#myModal" role="button" onclick="setvalue('${student.id}','${student.name}','${student.remark}')" class="btn btn-mini btn-info" data-toggle="modal"><i class="icon-edit"></i>༭</a>
<button class="btn btn-mini btn-danger" onclick="if(window.confirm('ȷɾѧ${student.name}')==true)location.href='<%=request.getContextPath() %>/manager/deletestudent?studentid=${student.id}&classid=${student.classid}'"><i class="icon-remove"></i>ɾ</button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form action="updatestudent" id="updatestudent" method="post" class="form-inline">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h3 id="myModalLabel">༭ѧ</h3>
</div>
<div class="modal-body">
<input type="hidden" name="classid" value="${cls.id}">
<input type="hidden" name="id" id="editid" >
<label class="control-label" >: </label>
<input type="text" name="name" class="input-medium" id="editname" >
<br><br><label class="control-label" >ע: </label>
<input type="text" name="remark" id="editremark" class="input-xlarge" >
</div>
<div class="modal-footer">
<button type="button" id="modify" class="btn btn-small btn-primary"></button>
</div>
</form>
</div>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#addstudent').on('click', function() {
if($.trim($("#id").val())==''||isNaN($('#id').val())){
alert('ȷѧţ');
return;
}else if($.trim($("#name").val())==''){
alert('ѧ');
return;
}else{
$("#savestudent").submit();
}
});
$('#modify').on('click', function() {
if($.trim($("#editname").val())==''){
alert('ѧ');
return;
}else{
$("#updatestudent").submit();
}
});
});
function setvalue(id,name,remark){
$("#editid").val(id);
$("#editname").val(name);
$("#editremark").val(remark);
}
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/classes.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>༶Ϣ</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-list-alt"></i>
༶Ϣ
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form class="form-inline" method="get" action="<%=request.getContextPath() %>/manager/classes">
<input type="hidden" name="pagenum" value="${pagenum}">
ƣ<input type="text" name="name" value="${classes.name}" class="input-medium search-query">
<button type="submit" class="btn btn-purple btn-small">
<i class="icon-search icon-on-right bigger-110"></i>
</button>
<button type="button" onclick="location.href='<%=request.getContextPath() %>/manager/addclassespage'" class="btn btn-purple btn-small">
Ӱ༶
<i class="icon-plus-sign icon-on-right bigger-110"></i>
</button>
</form>
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="20%">༶</th>
<th width="20%">༶</th>
<th width="20%">ѧ</th>
<th width="20%"></th>
<th width="20%" ></th>
</tr>
</thead>
<tbody>
<c:forEach items="${classesList}" var="classes" >
<tr>
<td>${classes.id}</td>
<td>${classes.name}</td>
<td>${classes.studentcount}</td>
<td>${classes.headteacher}</td>
<td >
<button class="btn btn-mini btn-primary" onclick="location.href='<%=request.getContextPath() %>/manager/classesnewspage?classesid=${classes.id}'" ><i class=" icon-envelope"></i> ̬</button>
<button class="btn btn-mini btn-primary" onclick="location.href='<%=request.getContextPath() %>/manager/managerstudentpage?classesid=${classes.id}'" ><i class="icon-user"></i> ѧ</button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="dataTables_paginate paging_bootstrap pagination">
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/classes?pagenum=${pagenum-1}'" <c:if test="${pagenum <= 1}">disabled="disabled"</c:if> >«</button>
<button class="btn btn-success btn-mini" disabled="disabled"> ${pagenum} ҳ</button>
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/classes?pagenum=${pagenum+1}'" <c:if test="${length < 10}">disabled="disabled"</c:if> >»</button>
</div>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/common/css.jsp
================================================
<!--basic styles-->
<link href="<%=request.getContextPath()%>/assets/css/bootstrap.min.css" rel="stylesheet" />
<link href="<%=request.getContextPath()%>/assets/css/bootstrap-responsive.min.css" rel="stylesheet" />
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/font-awesome.min.css" />
<!--[if IE 7]>
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/font-awesome-ie7.min.css" />
<![endif]-->
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-fonts.css" />
<!--ace styles-->
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace.min.css" />
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-responsive.min.css" />
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-skins.min.css" />
<!--[if lte IE 8]>
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-ie.min.css" />
<![endif]-->
================================================
FILE: WebContent/WEB-INF/views/common/js.jsp
================================================
<!--basic scripts-->
<!--[if !IE]>-->
<script type="text/javascript">
window.jQuery || document.write("<script src='<%=request.getContextPath()%>/assets/js/jquery-2.0.3.min.js'>"+"<"+"/script>");
</script>
<!--<![endif]-->
<!--[if IE]>
<script type="text/javascript">
window.jQuery || document.write("<script src='<%=request.getContextPath()%>/assets/js/jquery-1.10.2.min.js'>"+"<"+"/script>");
</script>
<![endif]-->
<script type="text/javascript">
if("ontouchend" in document) document.write("<script src='<%=request.getContextPath()%>/assets/js/jquery.mobile.custom.min.js'>"+"<"+"/script>");
</script>
<script src="<%=request.getContextPath()%>/assets/js/bootstrap.min.js"></script>
<!--page specific plugin scripts-->
<!--ace scripts-->
<script src="<%=request.getContextPath()%>/assets/js/ace-elements.min.js"></script>
<script src="<%=request.getContextPath()%>/assets/js/ace.min.js"></script>
<!--inline scripts related to this page-->
================================================
FILE: WebContent/WEB-INF/views/common/navbar.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<div class="navbar">
<div class="navbar-inner">
<div class="container-fluid">
<a href="<%=request.getContextPath()%>/" class="brand">
<small>
<i class="icon-briefcase"></i>
爱学校
</small>
</a><!--/.brand-->
</div><!--/.container-fluid-->
</div><!--/.navbar-inner-->
</div>
================================================
FILE: WebContent/WEB-INF/views/common/sidebar.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div class="sidebar" id="sidebar">
<ul class="nav nav-list">
<li <c:if test="${sidebar=='students'}">class="active"</c:if> >
<a href="<%=request.getContextPath()%>/manager/students">
<i class="icon-user"></i>
<span class="menu-text"> 学生列表 </span>
</a>
</li>
<li <c:if test="${sidebar=='classes'}">class="active"</c:if> >
<a href="<%=request.getContextPath()%>/manager/classes">
<i class="icon-list-alt"></i>
<span class="menu-text"> 班级列表 </span>
</a>
</li>
<li <c:if test="${sidebar=='exams'}">class="active"</c:if> >
<a href="<%=request.getContextPath()%>/manager/exams">
<i class="icon-file"></i>
<span class="menu-text"> 考试列表 </span>
</a>
</li>
<li <c:if test="${sidebar=='messages'||sidebar=='replys'}">class="active"</c:if>>
<a href="#" class="dropdown-toggle">
<i class="icon-comment"></i>
<span class="menu-text"> 微信消息 </span>
<b class="arrow icon-angle-down"></b>
</a>
<ul class="submenu">
<li <c:if test="${sidebar=='messages'}">class="active"</c:if> >
<a href="<%=request.getContextPath()%>/manager/messages">
<i class="icon-double-angle-right"></i>
接收消息
</a>
</li>
<li <c:if test="${sidebar=='replys'}">class="active"</c:if> >
<a href="<%=request.getContextPath()%>/manager/replys">
<i class="icon-double-angle-right"></i>
回复消息
</a>
</li>
</ul>
</li>
</ul><!--/.nav-list-->
<div class="sidebar-collapse" id="sidebar-collapse">
<i class="icon-double-angle-left"></i>
</div>
</div>
================================================
FILE: WebContent/WEB-INF/views/examdetail.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-comment"></i>
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<label for="form-field-8"> <b>${student.name}</b> :<b>${student.id}</b>ͬѧĿ </label>
<br>
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="6%"></th>
<th>ԿĿ</th>
<th>ʱ</th>
<th>ɼ</th>
<th>Ծܷ</th>
<th>༶߷</th>
<th>༶ͷ</th>
<th>༶</th>
<th></th>
</tr>
</thead>
<tbody>
<c:forEach items="${emlist}" var="em" varStatus="sta" >
<tr>
<td>${sta.index+1}</td>
<td>${em.exam.course}</td>
<td>${em.exam.examtime}</td>
<td><b>${em.mark}</b></td>
<td>${em.exam.fullmarks}</td>
<td>${em.exam.average}</td>
<td>${em.exam.topmark}</td>
<td>${em.exam.lowestmark}</td>
<td>${em.rank}</td>
</tr>
</c:forEach>
</tbody>
</table>
<button class="btn btn-info" type="button" onclick="location.href='<%=request.getContextPath() %>/manager/students'" >
<i class="icon-arrow-left"></i>
</button>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#leavemessage').on('click', function() {
if($.trim($("#content").val())==''){
alert('');
return;
}else{
$("#addmessage").submit();
}
});
});
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/exams.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ϣ</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-user"></i>
Ϣ
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form class="form-inline" method="get" action="<%=request.getContextPath() %>/manager/exams">
<input type="hidden" name="pagenum" value="${pagenum}">
Ŀ<input type="text" name="course" value="${exam.course}" class="input-medium search-query">
<select name="classid">
<option value="0">ѡ༶</option>
<c:forEach items="${clsList}" var="cls" >
<option <c:if test="${exam.classid == cls.id}">selected="selected"</c:if> value="${cls.id}">${cls.name}</option>
</c:forEach>
</select>
<button type="submit" class="btn btn-purple btn-small">
<i class="icon-search icon-on-right bigger-110"></i>
</button>
<a href="#myModal" role="button" class="btn btn-purple btn-small" data-toggle="modal"><i class="icon-plus-sign icon-on-right bigger-110"></i>ӿ</a>
</form>
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="5%"></th>
<th width="10%">ԿĿ</th>
<th width="10%">༶</th>
<th width="8%"></th>
<th width="8%"></th>
<th width="8%">߷</th>
<th width="8%">ͷ</th>
<th>ʱ</th>
<th width="12%" ></th>
</tr>
</thead>
<tbody>
<c:forEach items="${examList}" var="exam" >
<tr>
<td>${exam.id}</td>
<td>${exam.course}</td>
<td>${exam.classid}</td>
<td>${exam.fullmarks}</td>
<td>${exam.average}</td>
<td>${exam.topmark}</td>
<td>${exam.lowestmark}</td>
<td>${exam.examtime}</td>
<td >
<button class="btn btn-mini btn-purple" onclick="location.href='<%=request.getContextPath() %>/manager/viewexam?id=${exam.id}'" ><i class="icon-file"></i></button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="dataTables_paginate paging_bootstrap pagination">
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/students?pagenum=${pagenum-1}'" <c:if test="${pagenum <= 1}">disabled="disabled"</c:if> >«</button>
<button class="btn btn-success btn-mini" disabled="disabled"> ${pagenum} ҳ</button>
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/students?pagenum=${pagenum+1}'" <c:if test="${length < 10}">disabled="disabled"</c:if> >»</button>
</div>
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h3 id="myModalLabel">ӿ</h3>
</div>
<form action="addexam" id="addexam" method="post" class="form-inline">
<div class="modal-body">
<label class="control-label" >Ŀ: </label>
<input type="text" name="course" class="input-medium" id="addcourse" >
<label class="control-label" >: </label>
<input type="text" name="fullmarks" class="input-medium" id="addfullmarks" >
<br><br><label class="control-label" >༶: </label>
<select name="classid">
<c:forEach items="${clsList}" var="cls" >
<option value="${cls.id}">${cls.name}</option>
</c:forEach>
</select>
<br><br><label class="control-label" >ע: </label>
<input type="text" name="remark" id="addremark" class="input-xlarge" >
</div>
<div class="modal-footer">
<button type="button" id="add" class="btn btn-small btn-primary"></button>
</div>
</form>
</div>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#add').on('click', function() {
if($.trim($("#addfullmarks").val())==''||isNaN($('#addfullmarks').val())){
alert('Ծ֣');
return;
}else if($.trim($("#addcourse").val())==''){
alert('뿼ԿĿ');
return;
}else{
$("#addexam").submit();
}
});
});
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/login.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>爱学校</title>
<meta name="description" content="User login page" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!--basic styles-->
<link href="<%=request.getContextPath()%>/assets/css/bootstrap.min.css" rel="stylesheet" />
<link href="<%=request.getContextPath()%>/assets/css/bootstrap-responsive.min.css" rel="stylesheet" />
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/font-awesome.min.css" />
<!--[if IE 7]>
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/font-awesome-ie7.min.css" />
<![endif]-->
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-fonts.css" />
<!--ace styles-->
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace.min.css" />
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-responsive.min.css" />
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-skins.min.css" />
<!--[if lte IE 8]>
<link rel="stylesheet" href="<%=request.getContextPath()%>/assets/css/ace-ie.min.css" />
<![endif]-->
</head>
<body class="login-layout">
<br><br>
<div class="main-container container-fluid">
<div class="main-content">
<div class="row-fluid">
<div class="span12">
<div class="login-container">
<div class="row-fluid">
<div class="center">
<h1>
<i class="icon-leaf green"></i>
<span class="red"> 爱学校</span>
<span class="white"></span>
</h1>
<h4 class="blue">© <a href="http://weibo.com/2098099627" target="_blank">智云同学</a></h4>
</div>
</div>
<div class="space-6"></div>
<div class="row-fluid">
<div class="position-relative">
<div id="login-box" class="login-box visible widget-box no-border">
<div class="widget-body">
<div class="widget-main">
<c:if test="${message == null }">
<h4 class="header blue lighter bigger">
<i class="icon-coffee green"></i>
Please Enter Your Information
</h4>
</c:if>
<c:if test="${message != null }">
<h4 class="header red lighter bigger">
<i class="icon-coffee green"></i>
${message}
</h4>
</c:if>
<div class="space-6"></div>
<form action="<%=request.getContextPath()%>/login" method="post" id="login" >
<fieldset>
<label>
<span class="block input-icon input-icon-right">
<input type="text" class="span12" name="username" <c:if test="${username!=null}">value="${username}"</c:if> placeholder="Username" />
<i class="icon-user"></i>
</span>
</label>
<label>
<span class="block input-icon input-icon-right">
<input type="password" class="span12" name="password" value="123456" placeholder="Password" />
<i class="icon-lock"></i>
</span>
</label>
<div class="space"></div>
<div class="clearfix">
<button onclick="document.getElementById('login').submit();" class="width-35 pull-right btn btn-small btn-primary">
<i class="icon-key"></i>
Login
</button>
</div>
<div class="space-4"></div>
</fieldset>
</form>
<div class="social-or-login center">
<span class="bigger-110">爱学校(aixuexiao)</span>
</div>
<div class="social-login center">
<img alt="爱学校" src="<%=request.getContextPath()%>/assets/images/getqrcode.jpeg" style="height: 100px;width: 100px;" >
</div>
</div><!--/widget-main-->
</div><!--/widget-body-->
</div><!--/login-box-->
</div><!--/position-relative-->
</div>
</div>
</div><!--/.span-->
</div><!--/.row-fluid-->
</div>
</div><!--/.main-container-->
<!--basic scripts-->
<!--[if !IE]>-->
<script type="text/javascript">
window.jQuery || document.write("<script src='<%=request.getContextPath()%>/assets/js/jquery-2.0.3.min.js'>"+"<"+"/script>");
</script>
<!--<![endif]-->
<!--[if IE]>
<script type="text/javascript">
window.jQuery || document.write("<script src='<%=request.getContextPath()%>/assets/js/jquery-1.10.2.min.js'>"+"<"+"/script>");
</script>
<![endif]-->
<script type="text/javascript">
if("ontouchend" in document) document.write("<script src='<%=request.getContextPath()%>/assets/js/jquery.mobile.custom.min.js'>"+"<"+"/script>");
</script>
<script src="<%=request.getContextPath()%>/assets/js/bootstrap.min.js"></script>
<!--page specific plugin scripts-->
<!--ace scripts-->
<script src="<%=request.getContextPath()%>/assets/js/ace-elements.min.js"></script>
<script src="<%=request.getContextPath()%>/assets/js/ace.min.js"></script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/messages.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ŽϢ</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-comment"></i>
ŽϢ
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr >
<th width="5%">#</th>
<th width="15%">MsgId</th>
<th width="10%">MsgType</th>
<th width="15%">FromUserName</th>
<th width="25%">CreateTime</th>
<th width="30%">Content</th>
</tr>
</thead>
<tbody>
<c:forEach items="${messageList}" var="message" varStatus="st" >
<tr>
<td>${st.index+1}</td>
<td>${message.msgId}</td>
<td>${message.msgType}</td>
<td>${message.fromUserName}</td>
<td>${message.createTime}</td>
<td>${message.content}</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="dataTables_paginate paging_bootstrap pagination">
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/messages?pagenum=${pagenum-1}'" <c:if test="${pagenum <= 1}">disabled="disabled"</c:if> >«</button>
<button class="btn btn-success btn-mini" disabled="disabled"> ${pagenum} ҳ</button>
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/messages?pagenum=${pagenum+1}'" <c:if test="${length < 10}">disabled="disabled"</c:if> >»</button>
</div>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/replys.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ŽϢ</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-comment"></i>
ŻظϢ
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr >
<th width="5%">#</th>
<th width="10%">MsgType</th>
<th width="15%">FromUserName</th>
<th width="25%">CreateTime</th>
<th >Content</th>
</tr>
</thead>
<tbody>
<c:forEach items="${replyList}" var="reply" varStatus="st" >
<tr>
<td>${st.index+1}</td>
<td>${reply.msgType}</td>
<td>${reply.fromUserName}</td>
<td>${reply.createTime}</td>
<td>${reply.content}</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="dataTables_paginate paging_bootstrap pagination">
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/replys?pagenum=${pagenum-1}'" <c:if test="${pagenum <= 1}">disabled="disabled"</c:if> >«</button>
<button class="btn btn-success btn-mini" disabled="disabled"> ${pagenum} ҳ</button>
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/replys?pagenum=${pagenum+1}'" <c:if test="${length < 10}">disabled="disabled"</c:if> >»</button>
</div>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/students.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ѧϢ</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-user"></i>
ѧϢ
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form class="form-inline" method="get" action="<%=request.getContextPath() %>/manager/students">
<input type="hidden" name="pagenum" value="${pagenum}">
<input type="text" name="name" value="${student.name}" class="input-medium search-query">
<select name="classid">
<option value="0">ѡ༶</option>
<c:forEach items="${clsList}" var="cls" >
<option <c:if test="${student.classid == cls.id}">selected="selected"</c:if> value="${cls.id}">${cls.name}</option>
</c:forEach>
</select>
<button type="submit" class="btn btn-purple btn-small">
<i class="icon-search icon-on-right bigger-110"></i>
</button>
</form>
<table id="sample-table-1" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="15%">ѧ</th>
<th width="15%">ѧ</th>
<th width="15%">༶</th>
<th>ע</th>
<th width="20%" ></th>
</tr>
</thead>
<tbody>
<c:forEach items="${studentList}" var="student" >
<tr>
<td><a href="#">${student.id}</a></td>
<td>${student.name}</td>
<td>${student.classid}</td>
<td>${student.remark}</td>
<td >
<button class="btn btn-mini btn-primary" onclick="location.href='<%=request.getContextPath() %>/manager/leavemessage?studentid=${student.id}'" ><i class="icon-comment"></i></button>
<button class="btn btn-mini btn-primary" onclick="location.href='<%=request.getContextPath() %>/manager/examdetail?studentid=${student.id}'"><i class="icon-file"></i></button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="dataTables_paginate paging_bootstrap pagination">
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/students?pagenum=${pagenum-1}'" <c:if test="${pagenum <= 1}">disabled="disabled"</c:if> >«</button>
<button class="btn btn-success btn-mini" disabled="disabled"> ${pagenum} ҳ</button>
<button class="btn btn-success btn-mini" onclick="location.href='<%=request.getContextPath() %>/manager/students?pagenum=${pagenum+1}'" <c:if test="${length < 8}">disabled="disabled"</c:if> >»</button>
</div>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/views/viewexam.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%@include file="/WEB-INF/views/common/css.jsp" %>
</head>
<body>
<%@ include file="/WEB-INF/views/common/navbar.jsp" %>
<div class="main-container container-fluid">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<%@ include file="/WEB-INF/views/common/sidebar.jsp" %>
<div class="main-content">
<div class="page-content">
<div class="page-header position-relative">
<h1>
<small>
<i class="icon-file"></i>
</small>
</h1>
</div>
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->
<form action="addexammark" id="addexammark" class="form-horizontal" method="post">
<input type="hidden" name="classid" value="${exam.classid }" />
<input type="hidden" name="course" value="${exam.course }" />
<input type="hidden" name="fullmarks" value="${exam.fullmarks }" />
<input type="hidden" name="remark" value="${exam.remark }" />
<label for="form-field-8"> <b>${exam.classid}</b> <b>${exam.course}</b>
<b>${exam.fullmarks}</b>֣
ƽ<b>${exam.average}</b>֣
߷<b>${exam.topmark}</b>֣
ͷ<b>${exam.lowestmark}</b>֣
ע${exam.remark}
</label><br>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>ѧ</th>
<th>ѧ</th>
<th></th>
<th></th>
<th>ע</th>
</tr>
</thead>
<tbody>
<c:forEach items="${exam.examMarks}" var="em" >
<tr>
<td>${em.studentid}</td>
<td>${em.studentname}</td>
<td>${em.rank}</td>
<td>${em.mark}</td>
<td>${em.remark}</td>
</tr>
</c:forEach>
</tbody>
</table>
<button class="btn btn-info" type="button" onclick="location.href='<%=request.getContextPath() %>/manager/exams'" >
<i class="icon-arrow-left"></i>
</button>
</form>
<!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div><!--/.row-fluid-->
</div><!--/.page-content-->
</div><!--/.main-content-->
</div><!--/.main-container-->
<%@include file="/WEB-INF/views/common/js.jsp" %>
<script type="text/javascript">
$(function() {
$('#add').on('click', function() {
var flag = true;
$(".mark").each(function(){
if($(this).val() == ""||isNaN($(this).val())||$(this).val() < 0||$(this).val()> ${exam.fullmarks}) {
alert('д');
flag = false;
return false;
}
});
if(flag)$("#addexammark").submit();
});
});
</script>
</body>
</html>
================================================
FILE: WebContent/WEB-INF/web.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>aixuexiao</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/assets/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<distributable/>
</web-app>
================================================
FILE: WebContent/assets/css/ace-fonts.css
================================================
/* included only when we don't want to use fonts from google server */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 300;
src: local('Open Sans Light'), local('OpenSans-Light'), url(../font/DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woff) format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans'), local('OpenSans'), url(../font/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
}
================================================
FILE: app_aixuexiao.sql
================================================
--
-- 表的结构 `class`
--
CREATE TABLE IF NOT EXISTS `class` (
`id` smallint(5) unsigned NOT NULL COMMENT '班级编号,302表示三年级二班',
`name` char(16) NOT NULL COMMENT '班级名称,三年级二班',
`headteacher` char(8) NOT NULL COMMENT '班主任姓名',
`studentcount` tinyint(4) NOT NULL COMMENT '学生数量',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- 转存表中的数据 `class`
--
INSERT INTO `class` (`id`, `name`, `headteacher`, `studentcount`) VALUES
(302, '三年级二班', '赖导', 7),
(301, '三年级一班', '曾近荣', 7);
-- --------------------------------------------------------
--
-- 表的结构 `class_news`
--
CREATE TABLE IF NOT EXISTS `class_news` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '公告编号',
`classid` int(10) unsigned NOT NULL COMMENT '考试班级',
`content` varchar(128) NOT NULL,
`inserttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `index_class_news` (`classid`,`inserttime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- 转存表中的数据 `class_news`
--
INSERT INTO `class_news` (`id`, `classid`, `content`, `inserttime`) VALUES
(1, 302, '大家好,三年级二班将于本周六举行家长会,届时请各位学生家长准时到达开会,谢谢!', '2013-08-21 10:42:04'),
(2, 301, '各位学生家长注意了,最近有不少同学出现逃学的情况,还号称“逃学威龙”。', '2013-08-21 10:48:20');
-- --------------------------------------------------------
--
-- 表的结构 `exam`
--
CREATE TABLE IF NOT EXISTS `exam` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '考试编号',
`classid` int(10) unsigned NOT NULL COMMENT '考试班级',
`course` char(8) NOT NULL COMMENT '科目',
`examtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '考试时间',
`fullmarks` decimal(4,1) NOT NULL COMMENT '满分',
`average` decimal(4,1) DEFAULT NULL COMMENT '平均分',
`topmark` decimal(4,1) DEFAULT NULL COMMENT '最高分',
`lowestmark` decimal(4,1) DEFAULT NULL COMMENT '最低分',
`remark` varchar(32) NOT NULL COMMENT '考试说明',
PRIMARY KEY (`id`),
KEY `index_exams` (`id`),
KEY `index_classes` (`classid`,`course`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- 转存表中的数据 `exam`
--
INSERT INTO `exam` (`id`, `classid`, `course`, `examtime`, `fullmarks`, `average`, `topmark`, `lowestmark`, `remark`) VALUES
(1, 301, '英语', '2013-08-21 10:56:07', 100.0, 84.1, 100.0, 59.0, '精诚中学三年级二班下学期英语单元测验'),
(2, 302, '数学', '2013-08-22 11:02:20', 100.0, 88.3, 100.0, 78.0, '数学单元测验');
-- --------------------------------------------------------
--
-- 表的结构 `exam_mark`
--
CREATE TABLE IF NOT EXISTS `exam_mark` (
`classid` int(10) unsigned NOT NULL COMMENT '考试班级',
`studentid` int(10) unsigned NOT NULL COMMENT '学生编号',
`studentname` char(8) NOT NULL COMMENT '学生姓名',
`examid` int(10) unsigned NOT NULL COMMENT '考试编号',
`mark` decimal(4,1) NOT NULL COMMENT '分数',
`examtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '考试时间',
`rank` tinyint(4) DEFAULT NULL COMMENT '班级排名',
`remark` varchar(32) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`classid`,`studentid`,`examid`),
KEY `index_exam_mark` (`classid`,`studentid`,`studentname`,`examid`,`mark`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- 转存表中的数据 `exam_mark`
--
INSERT INTO `exam_mark` (`classid`, `studentid`, `studentname`, `examid`, `mark`, `examtime`, `rank`, `remark`) VALUES
(301, 3011, '周星星', 1, 59.0, '2013-08-21 10:56:07', 7, '逃课就是这个下场'),
(301, 3013, '大飞', 1, 60.0, '2013-08-21 10:56:07', 6, '这次给你及格了'),
(301, 3014, '黄小龟', 1, 84.0, '2013-08-21 10:56:07', 5, '好好学习天天向上'),
(301, 3017, '林大岳', 1, 91.0, '2013-08-21 10:56:07', 4, '继续努力'),
(301, 3012, '曹达华', 1, 97.0, '2013-08-21 10:56:07', 3, '不错,有进步'),
(301, 3016, '汤朱迪', 1, 98.0, '2013-08-21 10:56:07', 2, '这次发挥有点小失常哟'),
(301, 3015, '仙蒂', 1, 100.0, '2013-08-21 10:56:07', 1, '满分不错,值得表扬'),
(302, 3027, '许博淳', 2, 78.0, '2013-08-22 11:02:20', 7, '要加油了'),
(302, 3022, '柯景腾', 2, 80.0, '2013-08-22 11:02:20', 6, '上课认真听讲'),
(302, 3024, '谢明和', 2, 87.0, '2013-08-22 11:02:20', 5, '好好学习天天向上'),
(302, 3026, '胡家玮', 2, 88.0, '2013-08-22 11:02:20', 4, '继续努力'),
(302, 3023, '曹国胜', 2, 90.0, '2013-08-22 11:02:20', 3, '有进步'),
(302, 3025, '廖英宏', 2, 95.0, '2013-08-22 11:02:20', 2, '非常好'),
(302, 3021, '沈佳宜', 2, 100.0, '2013-08-22 11:02:20', 1, '非常不错,好好保持');
-- --------------------------------------------------------
--
-- 表的结构 `message`
--
CREATE TABLE IF NOT EXISTS `message` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tousername` char(32) NOT NULL,
`fromusername` char(32) NOT NULL,
`msgtype` enum('TEXT','IMAGE','LOCATION','LINK','EVENT') NOT NULL,
`createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`msgId` char(64) NOT NULL,
`content` varchar(128) DEFAULT NULL,
`picurl` varchar(128) DEFAULT NULL,
`title` varchar(32) DEFAULT NULL,
`description` varchar(128) DEFAULT NULL,
`url` varchar(128) DEFAULT NULL,
`locationx` char(10) DEFAULT NULL,
`locationy` char(10) DEFAULT NULL,
`scale` char(8) DEFAULT NULL,
`label` varchar(32) DEFAULT NULL,
`event` varchar(16) DEFAULT NULL,
`eventkey` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_user` (`msgtype`,`tousername`,`fromusername`,`createtime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- 表的结构 `reply`
--
CREATE TABLE IF NOT EXISTS `reply` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tousername` char(32) NOT NULL,
`fromusername` char(32) NOT NULL,
`msgtype` enum('TEXT','MUSIC','NEWS') NOT NULL,
`createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`content` varchar(512) NOT NULL COMMENT '回复消息内容',
`musicurl` varchar(128) DEFAULT NULL,
`hqmusicurl` varchar(128) DEFAULT NULL,
`articlecount` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_user` (`msgtype`,`tousername`,`fromusername`,`createtime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
-- 表的结构 `reply_article`
--
CREATE TABLE IF NOT EXISTS `reply_article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`replyid` int(10) unsigned NOT NULL,
`title` varchar(32) NOT NULL,
`description` varchar(64) NOT NULL,
`picurl` varchar(128) NOT NULL,
`url` varchar(128) NOT NULL,
PRIMARY KEY (`id`),
KEY `index_replyid` (`replyid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- 表的结构 `student`
--
CREATE TABLE IF NOT EXISTS `student` (
`id` int(10) unsigned NOT NULL COMMENT '学生学号,通常为班级编号加上序号,如3021',
`classid` int(10) unsigned NOT NULL COMMENT '所属班级编号',
`name` char(8) NOT NULL COMMENT '学生姓名',
`remark` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_classes` (`classid`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- 转存表中的数据 `student`
--
INSERT INTO `student` (`id`, `classid`, `name`, `remark`) VALUES
(3021, 302, '沈佳宜', '佳宜(女主角)'),
(3022, 302, '柯景腾', '柯腾(男主角)'),
(3023, 302, '曹国胜', '老曹(柯腾的挚友)'),
(3024, 302, '谢明和', '阿和(柯腾的挚友)'),
(3025, 302, '廖英宏', '该边(柯腾的挚友)'),
(3026, 302, '胡家玮', '弯弯(沈佳宜的好友)'),
(3027, 302, '许博淳', '勃起(柯腾的挚友)'),
(3011, 301, '周星星', '周星驰'),
(3012, 301, '曹达华', '吴孟达'),
(3013, 301, '大飞', '张耀扬'),
(3014, 301, '黄小龟', '黄一山'),
(3015, 301, '仙蒂', '朱茵'),
(3016, 301, '汤朱迪', '梅艳芳'),
(3017, 301, '林大岳', '黄秋生');
-- --------------------------------------------------------
--
-- 表的结构 `student_message`
--
CREATE TABLE IF NOT EXISTS `student_message` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '消息编号',
`studentid` int(10) unsigned NOT NULL COMMENT '学生编号',
`inserttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`content` varchar(128) NOT NULL,
PRIMARY KEY (`id`),
KEY `index_student_message` (`studentid`,`inserttime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- 转存表中的数据 `student_message`
--
INSERT INTO `student_message` (`id`, `studentid`, `inserttime`, `content`) VALUES
(1, 3011, '2013-08-21 11:09:44', '不准逃课'),
(2, 3021, '2013-08-22 10:56:15', '好好学习天天向上哈');
================================================
FILE: src/com/aixuexiao/dao/BaseDao.java
================================================
package com.aixuexiao.dao;
import javax.annotation.Resource;
import org.mybatis.spring.SqlSessionTemplate;
public class BaseDao {
@Resource(name="readSqlSession")
public SqlSessionTemplate readSqlSession;
@Resource(name="writerSqlSession")
public SqlSessionTemplate writerSqlSession;
}
================================================
FILE: src/com/aixuexiao/dao/ClassesDao.java
================================================
package com.aixuexiao.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.aixuexiao.model.Classes;
@Component("classesDao")
public class ClassesDao extends BaseDao {
public List<Classes> findAllClasses() {
return this.readSqlSession.selectList("com.aixuexiao.dao.ClassesDao.selectAllClasses");
}
public List<Classes> findClasses(int start,int size,Classes classes) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("start", start);
map.put("size", size);
map.put("classes", classes);
return this.readSqlSession.selectList("com.aixuexiao.dao.ClassesDao.selectClasses",map);
}
public void addClasses(Classes classes){
writerSqlSession.insert("com.aixuexiao.dao.ClassesDao.addClasses", classes);
}
public Classes findClassesById(int id){
return readSqlSession.selectOne("com.aixuexiao.dao.ClassesDao.selectClassesById", id);
}
public void updateClassStudentCount(int classid){
writerSqlSession.update("com.aixuexiao.dao.ClassesDao.updateClassStudentCount", classid);
}
}
================================================
FILE: src/com/aixuexiao/dao/ClassesNewsDao.java
================================================
package com.aixuexiao.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.ClassesNews;
@Component("classesNewsDao")
public class ClassesNewsDao extends BaseDao {
public List<ClassesNews> findClassesNewsByClassId(int classid,int limit) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("classid", classid);
map.put("limit", limit);
return this.readSqlSession.selectList("com.aixuexiao.dao.ClassesNewsDao.selectClassesNewsByClassId",map);
}
public void addClassesNews(ClassesNews classesNews){
writerSqlSession.insert("com.aixuexiao.dao.ClassesNewsDao.addClassesNews", classesNews);
}
public void deleteClassesNewsById(int id){
writerSqlSession.delete("com.aixuexiao.dao.ClassesNewsDao.deleteClassesNewsById", id);
}
}
================================================
FILE: src/com/aixuexiao/dao/ExamDao.java
================================================
package com.aixuexiao.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.Exam;
import com.aixuexiao.model.ExamMark;
@Component("examDao")
public class ExamDao extends BaseDao {
public List<ExamMark> findExamMarkByStudentId(int studentid,int limit) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("studentid", studentid);
map.put("limit", limit);
return this.readSqlSession.selectList("com.aixuexiao.dao.ExamDao.selectExamMarkByStudentId",map);
}
public List<Exam> findExam(int start,int size,Exam exam){
Map<String,Object> map = new HashMap<String,Object>();
map.put("start", start);
map.put("size", size);
map.put("exam", exam);
return this.readSqlSession.selectList("com.aixuexiao.dao.ExamDao.selectExam",map);
}
public void addExam(Exam exam){
writerSqlSession.insert("com.aixuexiao.dao.ExamDao.addExam", exam);
}
public void addExamMark(ExamMark examMark){
writerSqlSession.insert("com.aixuexiao.dao.ExamDao.addExamMark", examMark);
}
public Exam findExamById(int id){
return this.readSqlSession.selectOne("com.aixuexiao.dao.ExamDao.selectExamById",id);
}
}
================================================
FILE: src/com/aixuexiao/dao/MessageDao.java
================================================
package com.aixuexiao.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.aixuexiao.model.Message;
@Component("messageDao")
public class MessageDao extends BaseDao {
public int addMessage(Message message) {
return this.writerSqlSession.insert("com.aixuexiao.dao.MessageDao.addMessage", message);
}
public List<Message> findMessage(int start,int size) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("start", start);
map.put("size", size);
return this.readSqlSession.selectList("com.aixuexiao.dao.MessageDao.selectMessage",map);
}
}
================================================
FILE: src/com/aixuexiao/dao/ReplyDao.java
================================================
package com.aixuexiao.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.aixuexiao.model.Article;
import com.aixuexiao.model.Reply;
@Component("replyDao")
public class ReplyDao extends BaseDao {
public void addReply(Reply reply) {
this.writerSqlSession.insert("com.aixuexiao.dao.ReplyDao.addReply", reply);
}
public void addArticle(Article article){
this.writerSqlSession.insert("com.aixuexiao.dao.ReplyDao.addArticle", article);
}
public List<Reply> findReply(int start,int size) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("start", start);
map.put("size", size);
return this.readSqlSession.selectList("com.aixuexiao.dao.ReplyDao.selectReply",map);
}
}
================================================
FILE: src/com/aixuexiao/dao/StudentDao.java
================================================
package com.aixuexiao.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.aixuexiao.model.Student;
@Component("studentDao")
public class StudentDao extends BaseDao {
public Student findStudentById(int id) {
return this.readSqlSession.selectOne("com.aixuexiao.dao.StudentDao.selectStudentById",id);
}
public List<Student> findStudent(int start,int size,Student student) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("start", start);
map.put("size", size);
map.put("student", student);
return this.readSqlSession.selectList("com.aixuexiao.dao.StudentDao.selectStudent",map);
}
public List<Student> findStudentByClassesId(int classesid) {
return this.readSqlSession.selectList("com.aixuexiao.dao.StudentDao.selectStudentByClassesId",classesid);
}
public int addStudent(Student student) {
return this.writerSqlSession.insert("com.aixuexiao.dao.StudentDao.addStudent", student);
}
public int deleteStudentById(int studentid) {
return this.writerSqlSession.delete("com.aixuexiao.dao.StudentDao.deleteStudentById", studentid);
}
public int updateStudent(Student student) {
return this.writerSqlSession.update("com.aixuexiao.dao.StudentDao.updateStudent", student);
}
}
================================================
FILE: src/com/aixuexiao/dao/StudentMessageDao.java
================================================
package com.aixuexiao.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.aixuexiao.model.Message;
import com.aixuexiao.model.StudentMessage;
@Component("studentMessageDao")
public class StudentMessageDao extends BaseDao {
public List<StudentMessage> findStudentMessageByStudentId(int studentid,int limit) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("studentid", studentid);
map.put("limit", limit);
return this.readSqlSession.selectList("com.aixuexiao.dao.StudentMessageDao.selectStudentMessageByStudentId",map);
}
public int addStudentMessage(StudentMessage studentMessage) {
return this.writerSqlSession.insert("com.aixuexiao.dao.StudentMessageDao.addStudentMessage", studentMessage);
}
public int deleteStudentMessageById(int id) {
return this.writerSqlSession.delete("com.aixuexiao.dao.StudentMessageDao.deleteStudentMessageById", id);
}
}
================================================
FILE: src/com/aixuexiao/dao/sqlmap/ClassesMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aixuexiao.dao.ClassesDao">
<select id="selectAllClasses" parameterType="int" resultMap="classesMap" >
select id,name,headteacher,studentcount
from class
order by id
</select>
<select id="selectClassesById" parameterType="int" resultMap="classesMap" >
select id,name,headteacher,studentcount
from class
where id = #{id}
</select>
<update id="updateClassStudentCount" parameterType="int">
update class set studentcount = (select count(id) from student where classid = #{id})
where id = #{id}
</update>
<select id="selectClasses" parameterType="java.util.HashMap" resultMap="classesMap" >
select id,name,headteacher,studentcount
from class
<where>
<if test="classes.name!=null">
name like CONCAT('%','${classes.name}','%' )
</if>
</where>
order by id
limit #{start},#{size}
</select>
<insert id="addClasses" parameterType="com.aixuexiao.model.Classes">
insert into class (id,name,headteacher,studentcount)
values(#{id},#{name},#{headteacher},#{studentcount})
</insert>
<resultMap type="Classes" id="classesMap">
<id property="id" column="id" />
<result property="name" column="name"/>
<result property="headteacher" column="headteacher"/>
<result property="studentcount" column="studentcount"/>
</resultMap>
</mapper>
================================================
FILE: src/com/aixuexiao/dao/sqlmap/ClassesNewsMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aixuexiao.dao.ClassesNewsDao">
<select id="selectClassesNewsByClassId" parameterType="int" resultMap="classesNewsMap" >
select id,classid,content,inserttime
from class_news
where classid = #{classid}
order by inserttime desc
limit #{limit}
</select>
<insert id="addClassesNews" parameterType="com.aixuexiao.model.ClassesNews">
insert into class_news (classid,content,inserttime )
values(#{classid},#{content},#{inserttime})
</insert>
<delete id="deleteClassesNewsById" parameterType="int" >
delete from class_news where id = #{id}
</delete>
<resultMap type="ClassesNews" id="classesNewsMap">
<id property="id" column="id" />
<result property="classid" column="classid"/>
<result property="content" column="content"/>
<result property="inserttime" column="inserttime"/>
</resultMap>
</mapper>
================================================
FILE: src/com/aixuexiao/dao/sqlmap/ExamMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aixuexiao.dao.ExamDao">
<select id="selectExam" parameterType="java.util.HashMap" resultMap="examMap" >
select id,classid,course,examtime,fullmarks,average,topmark,lowestmark,remark
from exam
<where>
<if test="exam.classid != 0">classid = #{exam.classid}</if>
<if test="exam.course != null and exam.course != ''">and course = #{exam.course}</if>
</where>
order by id
limit #{start},#{size}
</select>
<select id="selectExamById" parameterType="int" resultMap="examMap" >
select id,classid,course,examtime,fullmarks,average,topmark,lowestmark,remark
from exam
where id = #{id}
</select>
<select id="selectExamMarkByStudentId" parameterType="int" resultMap="examMarkMap" >
select examid,classid,studentid,studentname,examtime,mark,rank,remark
from exam_mark
where studentid = #{studentid}
order by examtime desc
limit #{limit}
</select>
<select id="selectExamMarkByExamId" parameterType="int" resultMap="examMarkMap" >
select examid,classid,studentid,studentname,examtime,mark,rank,remark
from exam_mark
where examid = #{examid}
</select>
<insert id="addExam" parameterType="com.aixuexiao.model.Exam">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into exam (classid,course,examtime,fullmarks,average,topmark,lowestmark,remark)
values(#{classid},#{course},#{examtime},#{fullmarks},#{average},#{topmark},#{lowestmark},#{remark})
</insert>
<insert id="addExamMark" parameterType="com.aixuexiao.model.ExamMark">
insert into exam_mark (examid,classid,studentid,studentname,examtime,mark,rank,remark)
values(#{examid},#{classid},#{studentid},#{studentname},#{examtime},#{mark},#{rank},#{remark})
</insert>
<resultMap type="Exam" id="examMap">
<id property="id" column="id" />
<result property="classid" column="classid"/>
<result property="course" column="course"/>
<result property="examtime" column="examtime"/>
<result property="fullmarks" column="fullmarks"/>
<result property="average" column="average"/>
<result property="topmark" column="topmark"/>
<result property="lowestmark" column="lowestmark"/>
<result property="remark" column="remark"/>
<collection property="examMarks" column="id" ofType="ExamMark" select="selectExamMarkByExamId"/>
</resultMap>
<resultMap type="ExamMark" id="examMarkMap">
<result property="examid" column="examid"/>
<result property="classid" column="classid"/>
<result property="studentid" column="studentid"/>
<result property="studentname" column="studentname"/>
<result property="examtime" column="examtime"/>
<result property="mark" column="mark"/>
<result property="rank" column="rank"/>
<result property="remark" column="remark"/>
<association property="exam" javaType="Exam" column="examid" select="selectExamById"/>
</resultMap>
</mapper>
================================================
FILE: src/com/aixuexiao/dao/sqlmap/MessageMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aixuexiao.dao.MessageDao">
<insert id="addMessage" parameterType="com.aixuexiao.model.Message">
insert into message (tousername,fromusername,msgtype,createtime,msgid,content,picurl,title,description,url,locationx,locationy,scale,label,event,eventkey)
values(#{toUserName},#{fromUserName},#{msgType},#{createTime},#{msgId},#{content},#{picUrl},#{title},#{description},#{url},#{locationX},#{locationY},#{scale},#{label},#{event},#{eventKey})
</insert>
<select id="selectMessage" parameterType="int" resultMap="messageMap" >
select id,tousername,fromusername,msgtype,createtime,msgid,content,picurl,title,description,url,locationx,locationy,scale,label,event,eventkey
from message
order by createtime desc
limit #{start},#{size}
</select>
<resultMap type="Message" id="messageMap">
<id property="id" column="id" />
<result property="toUserName" column="tousername"/>
<result property="fromUserName" column="fromusername"/>
<result property="msgType" column="msgtype"/>
<result property="createTime" column="createtime"/>
<result property="msgId" column="msgid"/>
<result property="picUrl" column="picurl"/>
<result property="title" column="title"/>
<result property="description" column="description"/>
<result property="url" column="url"/>
<result property="locationX" column="locationx"/>
<result property="locationY" column="locationy"/>
<result property="scale" column="scale"/>
<result property="label" column="label"/>
<result property="event" column="event"/>
<result property="eventKey" column="eventkey"/>
</resultMap>
</mapper>
================================================
FILE: src/com/aixuexiao/dao/sqlmap/ReplyMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.aixuexiao.dao.ReplyDao">
<insert id="addReply" parameterType="com.aixuexiao.model.Reply">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into reply(tousername,fromusername,msgtype,createtime,content,musicurl,hqmusicurl,articlecount)
values (#{toUserName},#{fromUserName},#{msgType},#{createTime},#{content},#{musicUrl},#{hQMusicUrl},#{articleCount})
</insert>
<insert id="addArticle" parameterType="com.aixuexiao.model.Article">
INSERT INTO reply_article (replyid,title,description,picurl,url )
VALUES(#{replyId},#{title},#{description},#{picUrl},#{url})
</insert>
<select id="selectReply" parameterType="int" resultMap="replyMap">
select id,tousername,fromusername,msgtype,createtime,content,musicurl,hqmusicurl,articlecount
from reply
order by createtime desc
limit #{start},#{size}
</select>
<select id="selectReplyById" parameterType="int" resultMap="replyMap">
select id,tousername,fromusername,msgtype,createtime,content,musicurl,hqmusicurl,articlecount
from reply
where id = #{id}
</select>
<select id="selectArticleByReplyId" parameterType="int" resultMap="articleMap">
select id,replyid,title,description,picurl,url
from reply_article
where replyid = #{replyid}
</select>
<resultMap type="Reply" id="replyMap">
<id property="id" column="id" />
<result property="toUserName" column="tousername"/>
<result property="fromUserName" column="fromusername"/>
<result property="msgType" column="msgtype"/>
<result property="createTime" column="createtime"/>
<result property="content" column="content"/>
<result property="musicUrl" column="musicurl"/>
<result property="hQMusicUrl" column="hqmusicurl"/>
<result property="articleCount" column="articlecount"/>
<collection property="articles" column="id" ofType="Article" select="selectArticleByReplyId"/>
</resultMap>
<resultMap type="Article" id="articleMap">
<id property="id" column="id" />
<result property="title" column="title"/>
<result property="description" column="description"/>
<result property="picUrl" column="picurl"/>
<result property="url" column="url"/>
<result property="replyId" column="replyid"/>
<association property="reply" javaType="Reply" column="replyid" select="selectReplyById"/>
</resultMap>
</mapper>
================================================
FILE: src/com/aixuexiao/dao/sqlmap/StudentMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aixuexiao.dao.StudentDao">
<select id="selectStudentById" parameterType="int" resultMap="studentMap" >
select id,classid,name,remark
from student
where id = #{id}
</select>
<select id="selectStudentByClassesId" parameterType="int" resultMap="studentMap" >
select id,classid,name,remark
from student
where classid = #{classid}
</select>
<select id="selectStudent" parameterType="java.util.HashMap" resultMap="studentMap" >
select id,classid,name,remark
from student
<where>
<if test="student.classid != 0">classid = #{student.classid}</if>
<if test="student.name != null and student.name != ''">and name like CONCAT('%','${student.name}','%' )</if>
</where>
order by id
limit #{start},#{size}
</select>
<update id="updateStudent" parameterType="com.aixuexiao.model.Student">
update student
set classid=#{classid},name=#{name},remark=#{remark}
where id = #{id}
</update>
<insert id="addStudent" parameterType="com.aixuexiao.model.Student">
insert into student (id,classid,name,remark )
values(#{id},#{classid},#{name},#{remark})
</insert>
<delete id="deleteStudentById" parameterType="int" >
delete from student where id = #{id}
</delete>
<resultMap type="Student" id="studentMap">
<id property="id" column="id" />
<result property="classid" column="classid"/>
<result property="name" column="name"/>
<result property="remark" column="remark"/>
</resultMap>
</mapper>
================================================
FILE: src/com/aixuexiao/dao/sqlmap/StudentMessageMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aixuexiao.dao.StudentMessageDao">
<select id="selectStudentMessageByStudentId" parameterType="int" resultMap="studentMessageMap" >
select id,studentid,content,inserttime
from student_message
where studentid = #{studentid}
order by inserttime desc
limit #{limit}
</select>
<insert id="addStudentMessage" parameterType="com.aixuexiao.model.StudentMessage">
insert into student_message (studentid,content,inserttime )
values(#{studentid},#{content},#{inserttime})
</insert>
<delete id="deleteStudentMessageById" parameterType="int" >
delete from student_message where id = #{id}
</delete>
<resultMap type="StudentMessage" id="studentMessageMap">
<id property="id" column="id" />
<result property="studentid" column="studentid"/>
<result property="content" column="content"/>
<result property="inserttime" column="inserttime"/>
</resultMap>
</mapper>
================================================
FILE: src/com/aixuexiao/model/Article.java
================================================
package com.aixuexiao.model;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
/**
* 图文消息
* @author lizy
*/
public class Article {
@XStreamOmitField
private int id;//数据库存储的id
// 图文消息名称
@XStreamAlias("Title")
private String title;
// 图文消息描述
@XStreamAlias("Description")
private String description;
// 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80,限制图片链接的域名需要与开发者填写的基本资料中的Url一致
@XStreamAlias("PicUrl")
private String picUrl;
// 点击图文消息跳转链接
@XStreamAlias("Url")
private String url;
@XStreamOmitField
private int replyId;
private Reply reply;
public Article() {}
public Article(String title, String description, String picUrl, String url) {
this.title = title;
this.description = description;
this.picUrl = picUrl;
this.url = url;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getReplyId() {
return replyId;
}
public void setReplyId(int replyId) {
this.replyId = replyId;
}
public Reply getReply() {
return reply;
}
public void setReply(Reply reply) {
this.reply = reply;
}
}
================================================
FILE: src/com/aixuexiao/model/Classes.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
/**
* 班级实体
*/
public class Classes implements Serializable {
/**
* 班级编号
*/
private int id;
/**
* 班级名称 如: 三年级二班
*/
private String name;
/**
* 班主任
*/
private String headteacher;
/**
* 学生数量
*/
private int studentcount;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHeadteacher() {
return headteacher;
}
public void setHeadteacher(String headteacher) {
this.headteacher = headteacher;
}
public int getStudentcount() {
return studentcount;
}
public void setStudentcount(int studentcount) {
this.studentcount = studentcount;
}
}
================================================
FILE: src/com/aixuexiao/model/ClassesNews.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
import java.util.Date;
/**
* 班级动态
*/
public class ClassesNews implements Serializable {
/**
* 公告编号
*/
private int id;
/**
* 班级编号
*/
private int classid;
/**
* 公告内容
*/
private String content;
/**
* 发布时间
*/
private Date inserttime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getInserttime() {
return inserttime;
}
public void setInserttime(Date inserttime) {
this.inserttime = inserttime;
}
}
================================================
FILE: src/com/aixuexiao/model/Exam.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 考试实体
*/
public class Exam implements Serializable {
/**
* 考试编号
*/
private int id;
/**
* 班级编号
*/
private int classid;
/**
* 考试科目
*/
private String course;
/**
* 考试时间
*/
private Date examtime;
/**
* 考试满分
*/
private BigDecimal fullmarks;
/**
* 平均分
*/
private BigDecimal average;
/**
* 最高分
*/
private BigDecimal topmark;
/**
* 最低分
*/
private BigDecimal lowestmark;
/**
* 考试备注
*/
private String remark;
/**
* 考试的成绩列表
*/
private List<ExamMark> examMarks;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
public Date getExamtime() {
return examtime;
}
public void setExamtime(Date examtime) {
this.examtime = examtime;
}
public BigDecimal getFullmarks() {
return fullmarks;
}
public void setFullmarks(BigDecimal fullmarks) {
this.fullmarks = fullmarks;
}
public BigDecimal getAverage() {
return average;
}
public void setAverage(BigDecimal average) {
this.average = average;
}
public BigDecimal getTopmark() {
return topmark;
}
public void setTopmark(BigDecimal topmark) {
this.topmark = topmark;
}
public BigDecimal getLowestmark() {
return lowestmark;
}
public void setLowestmark(BigDecimal lowestmark) {
this.lowestmark = lowestmark;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public List<ExamMark> getExamMarks() {
return examMarks;
}
public void setExamMarks(List<ExamMark> examMarks) {
this.examMarks = examMarks;
}
}
================================================
FILE: src/com/aixuexiao/model/ExamMark.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 考试分数
*/
public class ExamMark implements Serializable,Comparable<ExamMark> {
/**
* 考试编号
*/
private int examid;
/**
* 班级编号
*/
private int classid;
/**
* 学生编号
*/
private int studentid;
/**
* 学生姓名
*/
private String studentname;
/**
* 考试时间
*/
private Date examtime;
/**
* 分数
*/
private BigDecimal mark;
/**
* 排名
*/
private int rank;
/**
* 考试备注
*/
private String remark;
/**
* 所属考试实体
*/
private Exam exam;
public int getExamid() {
return examid;
}
public void setExamid(int examid) {
this.examid = examid;
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public int getStudentid() {
return studentid;
}
public void setStudentid(int studentid) {
this.studentid = studentid;
}
public Date getExamtime() {
return examtime;
}
public void setExamtime(Date examtime) {
this.examtime = examtime;
}
public BigDecimal getMark() {
return mark;
}
public void setMark(BigDecimal mark) {
this.mark = mark;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Exam getExam() {
return exam;
}
public void setExam(Exam exam) {
this.exam = exam;
}
public String getStudentname() {
return studentname;
}
public void setStudentname(String studentname) {
this.studentname = studentname;
}
@Override
public int compareTo(ExamMark em) {
return this.mark.compareTo(em.mark);
}
@Override
public String toString() {
return "ExamMark [examid=" + examid + ", classid=" + classid
+ ", studentid=" + studentid + ", examtime=" + examtime
+ ", mark=" + mark + ", rank=" + rank + ", remark=" + remark
+ ", exam=" + exam + "]";
}
}
================================================
FILE: src/com/aixuexiao/model/Message.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
import java.util.Date;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
/**
* 微信消息(服务端接收到的)
* @author lizy
*/
public class Message implements Serializable{
public static final String TEXT = "text";
public static final String IMAGE = "image";
public static final String LOCATION = "location";
public static final String LINK = "link";
public static final String EVENT = "event";
@XStreamOmitField
private int id;//数据库存储的id
// 开发者微信号
private String toUserName;
// 发送方帐号(一个OpenID)
private String fromUserName;
// 消息创建时间
private Date createTime;
// 消息类型(text/image/location/link)
private String msgType;
// 消息id,64位整型
private String msgId;
// 消息内容 (文本消息专有)
private String content;
//图片链接 (图片消息专有)
private String picUrl;
// 消息标题 (链接消息专有)
private String title;
// 消息描述 (链接消息专有)
private String description;
// 消息链接 (链接消息专有)
private String url;
//地理位置纬度 Location_X(地理位置专有)
private String locationX;
//地理位置经度 Location_Y(地理位置专有)
private String locationY;
// 地图缩放大小 (地理位置专有)
private String scale;
// 地理位置信息 (地理位置专有)
private String label;
//事件类型,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件) (事件推送专有)
private String event;
//事件KEY值,与自定义菜单接口中KEY值对应(事件推送专有)
private String eventKey;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getToUserName() {
return toUserName;
}
public void setToUserName(String toUserName) {
this.toUserName = toUserName;
}
public String getFromUserName() {
return fromUserName;
}
public void setFromUserName(String fromUserName) {
this.fromUserName = fromUserName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getMsgType() {
return msgType;
}
public void setMsgType(String msgType) {
this.msgType = msgType;
}
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getLocationX() {
return locationX;
}
public void setLocationX(String locationX) {
this.locationX = locationX;
}
public String getLocationY() {
return locationY;
}
public void setLocationY(String locationY) {
this.locationY = locationY;
}
public String getScale() {
return scale;
}
public void setScale(String scale) {
this.scale = scale;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
public String getEventKey() {
return eventKey;
}
public void setEventKey(String eventKey) {
this.eventKey = eventKey;
}
}
================================================
FILE: src/com/aixuexiao/model/Reply.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
/**
* 回复用户的消息
* @author lizy
*/
public class Reply implements Serializable {
public static final String TEXT = "text";
public static final String MUSIC = "music";
public static final String NEWS = "news";
public static final String ERROR_CONTENT = "查询失败,请检查你的回复是否正确。\n查询最近考试情况请回复:学号_考试(如:3021_考试)\n 查询最近最近10次考试情况请回复:学号_考试历史(如:3021_考试历史)\n 查询老师留言情况请回复:学号_留言(如:3021_留言)\n查询老师留言记录(最近10次)情况请回复:学号_留言历史(如:3021_留言历史)\n\n 查询班级动态情况请回复:学号_动态(如:3021_动态)\n查询班级动态记录(最近10次)情况请回复:学号_动态历史(如:3021_动态历史)\n";
public static final String WELCOME_CONTENT = "欢迎订阅爱学校,你可以回复指定内容来了解学生考试情况,老师留言和班级动态。\n查询最近考试情况请回复:学号_考试(如:3021_考试)\n 查询最近最近10次考试情况请回复:学号_考试历史(如:3021_考试历史)\n 查询老师留言情况请回复:学号_留言(如:3021_留言)\n查询老师留言记录(最近10次)情况请回复:学号_留言历史(如:3021_留言历史)\n\n 查询班级动态情况请回复:学号_动态(如:3021_动态)\n查询班级动态记录(最近10次)情况请回复:学号_动态历史(如:3021_动态历史)\n";
@XStreamOmitField
private int id;//数据库存储id
// 开发者微信号
@XStreamAlias("ToUserName")
private String toUserName;
// 发送方帐号(一个OpenID)
@XStreamAlias("FromUserName")
private String fromUserName;
// 消息创建时间
@XStreamAlias("CreateTime")
private Date createTime;
// 消息类型(text/music/news)
@XStreamAlias("MsgType")
private String msgType;
//回复的消息内容,长度不超过2048字节 (文本消息专有)
@XStreamAlias("Content")
private String content;
//音乐链接 (音乐消息专有)
@XStreamAlias("MusicUrl")
private String musicUrl;
//高质量音乐链接,WIFI环境优先使用该链接播放音乐 (音乐消息专有)
@XStreamAlias("HQMusicUrl")
private String hQMusicUrl;
//图文消息个数,限制为10条以内 (图文消息专有)
@XStreamAlias("ArticleCount")
private int articleCount;
//多条图文消息信息,默认第一个item为大图
@XStreamAlias("Articles")
private List<Article> articles;
public static void main(String[] args) {
System.out.println("http://mmsns.qpic.cn/mmsns/UKMLIAeREF9IyZGhfvF8f0CAKDzEvXwCibLKUM4kmsfGnZvFM7EJlrg/0".length());
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getToUserName() {
return toUserName;
}
public void setToUserName(String toUserName) {
this.toUserName = toUserName;
}
public String getFromUserName() {
return fromUserName;
}
public void setFromUserName(String fromUserName) {
this.fromUserName = fromUserName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getMsgType() {
return msgType;
}
public void setMsgType(String msgType) {
this.msgType = msgType;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getMusicUrl() {
return musicUrl;
}
public void setMusicUrl(String musicUrl) {
this.musicUrl = musicUrl;
}
public String gethQMusicUrl() {
return hQMusicUrl;
}
public void sethQMusicUrl(String hQMusicUrl) {
this.hQMusicUrl = hQMusicUrl;
}
public int getArticleCount() {
return articleCount;
}
public void setArticleCount(int articleCount) {
this.articleCount = articleCount;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
}
================================================
FILE: src/com/aixuexiao/model/Student.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
/**
* 学生实体
*/
public class Student implements Serializable {
/**
* 学生编号
*/
private int id;
/**
* 班级编号
*/
private int classid;
/**
* 学生姓名
*/
private String name;
/**
* 备注
*/
private String remark;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
================================================
FILE: src/com/aixuexiao/model/StudentMessage.java
================================================
package com.aixuexiao.model;
import java.io.Serializable;
import java.util.Date;
/**
* 给学生的留言
*/
public class StudentMessage implements Serializable {
/**
* 留言编号
*/
private int id;
/**
* 学生编号
*/
private int studentid;
/**
* 公告内容
*/
private String content;
/**
* 发布时间
*/
private Date inserttime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStudentid() {
return studentid;
}
public void setStudentid(int studentid) {
this.studentid = studentid;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getInserttime() {
return inserttime;
}
public void setInserttime(Date inserttime) {
this.inserttime = inserttime;
}
}
================================================
FILE: src/com/aixuexiao/service/ClassesService.java
================================================
package com.aixuexiao.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.aixuexiao.dao.ClassesDao;
import com.aixuexiao.dao.ClassesNewsDao;
import com.aixuexiao.dao.StudentDao;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.ClassesNews;
import com.aixuexiao.model.Student;
@Service("classesService")
public class ClassesService {
@Resource(name="studentDao")
private StudentDao studentDao;
@Resource(name="classesDao")
private ClassesDao classesDao;
@Resource(name="classesNewsDao")
private ClassesNewsDao classesNewsDao;
/**
* 将数据库中Classes数据分页查出
* @param start 其实数据条数
* @param size 展示数据每页的大小
*/
public List<Classes> listClasses(int start,int size,Classes classes){
return classesDao.findClasses(start, size,classes);
}
public void deleteClassesNewsById(int id){
classesNewsDao.deleteClassesNewsById(id);
}
/**
* 添加班级动态到数据库
* @param classesNews
*/
public void addClassesNews(ClassesNews classesNews){
classesNewsDao.addClassesNews(classesNews);
}
/**
* 获取指定班级的班级动态(钱1000个)
* @param classid 班级id
* @return
*/
public List<ClassesNews> findClassesNewsByClassId(int classid){
return classesNewsDao.findClassesNewsByClassId(classid, 1000);
}
/**
* 添加班级到数据库中
* @param classes 班级对象
*/
public void addClasses(Classes classes){
classesDao.addClasses(classes);
}
/**
* 根据id查找对应的Classes对象
* @param id 班级编号
* @return
*/
public Classes findClassesById(int id){
return classesDao.findClassesById(id);
}
/**
* 根据学生编号查找对应的学生
* @param studentid 学生编号
* @return 学生数据
*/
public Student findStudentById(int studentid){
return studentDao.findStudentById(studentid);
}
/**
* 根据班级id查找对应班级所有学生
* @param classesid 班级id
* @return
*/
public List<Student> findStudentByClassesId(int classesid){
return studentDao.findStudentByClassesId(classesid);
}
/**
* 添加学生信息至数据库中
* @param student 学生对象
*/
public void addStudent(Student student){
studentDao.addStudent(student);
}
/**
* 删除数据库中对应id的学生信息
* @param student 学生对象
*/
public void deleteStudentById(int studentid){
studentDao.deleteStudentById(studentid);
}
/**
* 自动更新指定班级的学生数量
* @param classid 班级id
*/
public void updateClassStudentCount(int classid){
classesDao.updateClassStudentCount(classid);
}
public void updateStudentBy(Student student) {
studentDao.updateStudent(student);
}
}
================================================
FILE: src/com/aixuexiao/service/ExamService.java
================================================
package com.aixuexiao.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.aixuexiao.dao.ClassesDao;
import com.aixuexiao.dao.ExamDao;
import com.aixuexiao.dao.StudentDao;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.Exam;
import com.aixuexiao.model.ExamMark;
import com.aixuexiao.model.Student;
@Service("examService")
public class ExamService {
@Resource(name="studentDao")
private StudentDao studentDao;
@Resource(name="classesDao")
private ClassesDao classesDao;
@Resource(name="examDao")
private ExamDao examDao;
/**
* 保存考试信息
* @param exam
*/
public void addExam(Exam exam){
examDao.addExam(exam);
for(ExamMark em:exam.getExamMarks()){
em.setExamid(exam.getId());
examDao.addExamMark(em);
}
}
/**
* 根据考试id查找数据库中考试信息
* @param id
* @return
*/
public Exam findExamById(int id){
return examDao.findExamById(id);
}
/**
* 将数据库中Student数据分页查出
* @param start 其实数据条数
* @param size 展示数据每页的大小
*/
public List<Exam> listExam(int start,int size,Exam exam){
return examDao.findExam(start,size,exam);
}
public List<Student> findStudentByClassesId(int classesid) {
return studentDao.findStudentByClassesId(classesid);
}
/**
* 根据学生编号查找对应的学生
* @param studentid 学生编号
* @return 学生数据
*/
public Student findStudentById(int studentid){
return studentDao.findStudentById(studentid);
}
/**
* 将数据库中Classes数据全部查出
*/
public List<Classes> findAllClasses(){
return classesDao.findAllClasses();
}
}
================================================
FILE: src/com/aixuexiao/service/StudentService.java
================================================
package com.aixuexiao.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.aixuexiao.dao.ClassesDao;
import com.aixuexiao.dao.ExamDao;
import com.aixuexiao.dao.StudentDao;
import com.aixuexiao.dao.StudentMessageDao;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.ExamMark;
import com.aixuexiao.model.Student;
import com.aixuexiao.model.StudentMessage;
@Service("studentService")
public class StudentService {
@Resource(name="studentDao")
private StudentDao studentDao;
@Resource(name="classesDao")
private ClassesDao classesDao;
@Resource(name="studentMessageDao")
private StudentMessageDao studentMessageDao;
@Resource(name="examDao")
private ExamDao examDao;
/**
* 根据学生编号查找对应的考试信息
* @param id 学生编号
* @param limit
* @return
*/
public List<ExamMark> findExamMarkByStudentId(int id ,int limit){
return examDao.findExamMarkByStudentId(id, limit);
}
/**
* 将数据库中Student数据分页查出
* @param start 其实数据条数
* @param size 展示数据每页的大小
*/
public List<Student> listStudent(int start,int size,Student student){
return studentDao.findStudent(start,size,student);
}
/**
* 根据学生编号查找对应的学生
* @param studentid 学生编号
* @return 学生数据
*/
public Student findStudentById(int studentid){
return studentDao.findStudentById(studentid);
}
/**
* 添加老师给学生的微信留言到数据库
* @param studentMessage
*/
public void addStudentMessage(StudentMessage studentMessage){
studentMessageDao.addStudentMessage(studentMessage);
}
/**
* 根据id删除老师给学生的微信留言
* @param id
*/
public void deleteStudentMessageById(int id){
studentMessageDao.deleteStudentMessageById(id);
}
/**
* 将数据库中Classes数据全部查出
*/
public List<Classes> findAllClasses(){
return classesDao.findAllClasses();
}
/**
* 根据学生id查询对应学生的留言记录
* @param studentid 学生id
* @param limit 展示数据每页的大小
*/
public List<StudentMessage> listMessageByStudentId(int studentid,int limit){
return studentMessageDao.findStudentMessageByStudentId(studentid, limit);
}
}
================================================
FILE: src/com/aixuexiao/service/WeixinService.java
================================================
package com.aixuexiao.service;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.aixuexiao.dao.ClassesNewsDao;
import com.aixuexiao.dao.ExamDao;
import com.aixuexiao.dao.MessageDao;
import com.aixuexiao.dao.ReplyDao;
import com.aixuexiao.dao.StudentDao;
import com.aixuexiao.dao.StudentMessageDao;
import com.aixuexiao.model.Article;
import com.aixuexiao.model.ClassesNews;
import com.aixuexiao.model.Exam;
import com.aixuexiao.model.ExamMark;
import com.aixuexiao.model.Message;
import com.aixuexiao.model.Reply;
import com.aixuexiao.model.Student;
import com.aixuexiao.model.StudentMessage;
@Service("weixinService")
public class WeixinService {
@Resource(name="messageDao")
private MessageDao messageDao;
@Resource(name="replyDao")
private ReplyDao replyDao;
@Resource(name="examDao")
private ExamDao examDao;
@Resource(name="studentDao")
private StudentDao studentDao;
@Resource(name="studentMessageDao")
private StudentMessageDao studentMessageDao;
@Resource(name="classesNewsDao")
private ClassesNewsDao classesNewsDao;
/**
* 查询学生最近一次考试情况
* @param studentid 学生编号
* @return 返回考试情况字符串
*/
public String getSingleExamMarkStringByStudentId(int studentid){
StringBuilder sb = new StringBuilder();
Student student = studentDao.findStudentById(studentid);
if(student == null){
sb.append("您好,未找到编号为").append(studentid).append("的学生!");
}else{
List<ExamMark> list = examDao.findExamMarkByStudentId(studentid, 1);
sb.append("您好,编号为").append(studentid).append("的学生(").append(student.getName());
if(list == null || list.size()<1 || list.get(0).getExam()==null){
sb.append(")无考试记录!");
}else{
ExamMark em = list.get(0);
Exam e = em.getExam();
DateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
sb.append(")最近一次考试记录如下:\n").append("科目:").append(e.getCourse())
.append("\n分数:").append(em.getMark())
.append("\n班级排名:").append(em.getRank())
.append("\n考试时间:").append(sf.format(em.getExamtime()))
.append("\n老师备注:").append(em.getRemark())
.append("\n试卷满分:").append(e.getFullmarks())
.append("\n班级均分:").append(e.getAverage())
.append("\n班级最高分:").append(e.getTopmark())
.append("\n班级最低分:").append(e.getLowestmark())
.append("\n考试说明:").append(e.getRemark());
}
}
return sb.toString();
}
/**
* 查询学生历次考试情况(最近10次)
* @param studentid 学生编号
* @return 返回考试情况字符串
*/
public String getExamMarkHistoryStringByStudentId(int studentid){
StringBuilder sb = new StringBuilder();
Student student = studentDao.findStudentById(studentid);
if(student == null){
sb.append("您好,未找到编号为").append(studentid).append("的学生!");
}else{
sb.append("您好,编号为").append(studentid).append("的学生(").append(student.getName());
List<ExamMark> list = examDao.findExamMarkByStudentId(studentid, 10);
if(list == null || list.size()<1 || list.get(0).getExam()==null){
sb.append(")无考试记录!");
}else{
DateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Exam e = null;
sb.append(")最近10次考试情况如下:");
for(ExamMark em : list){
e = em.getExam();
sb.append("\n考试时间:").append(sf.format(em.getExamtime()))
.append("\n科目:").append(e.getCourse())
.append("\n分数:").append(em.getMark())
.append("\n班级排名:").append(em.getRank())
.append("\n老师备注:").append(em.getRemark())
.append("\n试卷满分:").append(e.getFullmarks())
.append("\n班级均分:").append(e.getAverage())
.append("\n班级最高分:").append(e.getTopmark())
.append("\n班级最低分:").append(e.getLowestmark())
.append("\n考试说明:").append(e.getRemark())
.append("\n------分割线-------");
}
}
}
return sb.toString();
}
/**
* 根据学生编号查询学生最近的老师留言信息
* @param studentid 学生编号
* @return 以字符串形式返回老师留言信息
*/
public String getSingleStudentMessageByStudentId(int studentid){
StringBuilder sb = new StringBuilder();
Student student = studentDao.findStudentById(studentid);
if(student == null){
sb.append("您好,未找到编号为").append(studentid).append("的学生!");
}else{
sb.append("您好,编号为").append(studentid).append("的学生(").append(student.getName());
List<StudentMessage> list = studentMessageDao.findStudentMessageByStudentId(studentid, 1);
if(list == null || list.size()<1 ){
sb.append(")无老师留言!");
}else{
sb.append(")最近老师留言如下:");
DateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
StudentMessage sm = list.get(0);
sb.append("\n留言时间:").append(sf.format(sm.getInserttime()))
.append("\n留言内容:").append(sm.getContent());
}
}
return sb.toString();
}
/**
* 根据学生编号查询学生的老师留言信息记录(最近10次)
* @param studentid 学生编号
* @return 以字符串形式返回老师留言信息
*/
public String getStudentMessageHistoryByStudentId(int studentid){
StringBuilder sb = new StringBuilder();
Student student = studentDao.findStudentById(studentid);
if(student == null){
sb.append("您好,未找到编号为").append(studentid).append("的学生!");
}else{
sb.append("您好,编号为").append(studentid).append("的学生(").append(student.getName());
List<StudentMessage> list = studentMessageDao.findStudentMessageByStudentId(studentid, 10);
if(list == null || list.size()<1 ){
sb.append(")无老师留言!");
}else{
sb.append(")最近(10次)老师留言如下:");
DateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
for(StudentMessage sm : list){
sb.append("\n留言时间:").append(sf.format(sm.getInserttime()))
.append("\n留言内容:").append(sm.getContent())
.append("\n------分割线-------");
}
}
}
return sb.toString();
}
/**
* 根据学生编号查询学生所在班级的班级动态
* @param studentid 学生编号
* @return 以字符串形式返回学生所在班级的班级动态
*/
public String getSingleClassesNewsByStudentId(int studentid){
StringBuilder sb = new StringBuilder();
Student student = studentDao.findStudentById(studentid);
if(student == null){
sb.append("您好,未找到编号为").append(studentid).append("的学生!");
}else{
sb.append("您好,编号为").append(studentid).append("的学生(").append(student.getName());
List<ClassesNews> list = classesNewsDao.findClassesNewsByClassId(student.getClassid(), 1);
if(list == null || list.size()<1 ){
sb.append(")所在班级无班级动态!");
}else{
sb.append(")最近班级动态如下:");
DateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
ClassesNews cn = list.get(0);
sb.append("\n动态时间:").append(sf.format(cn.getInserttime()))
.append("\n动态内容:").append(cn.getContent());
}
}
return sb.toString();
}
/**
* 根据学生编号查询学生所在班级的班级动态
* @param studentid 学生编号
* @return 以字符串形式返回学生所在班级的班级动态
*/
public String getClassesNewsHistoryByStudentId(int studentid){
StringBuilder sb = new StringBuilder();
Student student = studentDao.findStudentById(studentid);
if(student == null){
sb.append("您好,未找到编号为").append(studentid).append("的学生!");
}else{
sb.append("您好,编号为").append(studentid).append("的学生(").append(student.getName());
List<ClassesNews> list = classesNewsDao.findClassesNewsByClassId(student.getClassid(), 10);
if(list == null || list.size()<1 ){
sb.append(")所在班级无班级动态!");
}else{
sb.append(")最近班级动态如下:");
DateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
for(ClassesNews cn:list){
sb.append("\n动态时间:").append(sf.format(cn.getInserttime()))
.append("\n动态内容:").append(cn.getContent())
.append("\n------分割线-------");
}
}
}
return sb.toString();
}
/**
* 新增Message对象到数据库中
*/
public void addMessage(Message message) {
messageDao.addMessage(message);
}
/**
* 将数据库中Message数据分页查出
* @param start 其实数据条数
* @param size 展示数据每页的大小
*/
public List<Message> listMessage(int start,int size){
return messageDao.findMessage(start,size);
}
/**
* 将数据库中Message数据分页查出
* @param start 其实数据条数
* @param size 展示数据每页的大小
*/
public List<Reply> listReply(int start,int size){
return replyDao.findReply(start,size);
}
/**
* 保存回复消息至数据库中,如果为news类型消息将article一并保存
*/
public void addReply(Reply reply){
replyDao.addReply(reply);
if(Reply.NEWS.equals(reply.getMsgType())&&null != reply.getArticles()){
List<Article> articles = reply.getArticles();
for(Article a: articles){
a.setReplyId(reply.getId());
replyDao.addArticle(a);
}
}
}
}
================================================
FILE: src/com/aixuexiao/util/ExamUtil.java
================================================
package com.aixuexiao.util;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.aixuexiao.model.Exam;
import com.aixuexiao.model.ExamMark;
/**
* 考试相关工具类
*/
public class ExamUtil {
/**
* 为考试成绩排序 并计算平均分/最高分/最低发
* @param exam 考试对象
* @return
*/
public static Exam sortExamMark(Exam exam){
List<ExamMark> ems = exam.getExamMarks();
Collections.sort(ems);//对分数进行排序
BigDecimal topmark = null,lowestmark = null,total = new BigDecimal(0);
int rank = ems.size();
for(int i = 0;i<ems.size();i++){
ExamMark em = ems.get(i);
if(i==0)lowestmark = em.getMark();//最低分
if(i==ems.size()-1)topmark = em.getMark();//最高分
em.setExamtime(exam.getExamtime());
em.setRank(rank--);
total = total.add(em.getMark());
}
exam.setAverage(total.divide(new BigDecimal(ems.size()),2, BigDecimal.ROUND_DOWN));
exam.setTopmark(topmark);
exam.setLowestmark(lowestmark);
return exam;
}
}
================================================
FILE: src/com/aixuexiao/util/WeixinUtil.java
================================================
package com.aixuexiao.util;
import java.io.InputStream;
import java.io.Writer;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.aixuexiao.model.Article;
import com.aixuexiao.model.ExamMark;
import com.aixuexiao.model.Message;
import com.aixuexiao.model.Reply;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;
/**
* 微信相关工具类
*/
public class WeixinUtil {
public static String singleExamMarkToString(ExamMark em){
if(null==em || em.getExam()==null)
return null;
StringBuilder sb = new StringBuilder();
return sb.toString();
}
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
// 对所有xml节点的转换都增加CDATA标记
boolean cdata = true;
@SuppressWarnings("unchecked")
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
}
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
/**
* 将回复消息对象转换成xml字符串
* @param reply 回复消息对象
* @return 返回符合微信接口的xml字符串
*/
public static String replyToXml(Reply reply){
String type = reply.getMsgType();
if(Reply.TEXT.equals(type)){
xstream.omitField(Reply.class, "articles");
xstream.omitField(Reply.class, "articleCount");
xstream.omitField(Reply.class, "musicUrl");
xstream.omitField(Reply.class, "hQMusicUrl");
}else if(Reply.MUSIC.equals(type)){
xstream.omitField(Reply.class, "articles");
xstream.omitField(Reply.class, "articleCount");
xstream.omitField(Reply.class, "content");
}else if(Reply.NEWS.equals(type)){
xstream.omitField(Reply.class, "content");
xstream.omitField(Reply.class, "musicUrl");
xstream.omitField(Reply.class, "hQMusicUrl");
}
xstream.autodetectAnnotations(true);
xstream.alias("xml", reply.getClass());
xstream.alias("item", new Article().getClass());
return xstream.toXML(reply);
}
/**
* 存储数据的Map转换为对应的Message对象
* @param map 存储数据的map
* @return 返回对应Message对象
*/
public static Message mapToMessage(Map<String,String> map){
if(map == null) return null;
String msgType = map.get("MsgType");
Message message = new Message();
message.setToUserName(map.get("ToUserName"));
message.setFromUserName(map.get("FromUserName"));
message.setCreateTime(new Date(Long.parseLong(map.get("CreateTime"))));
message.setMsgType(msgType);
message.setMsgId(map.get("MsgId"));
if(msgType.equals(Message.TEXT)){
message.setContent(map.get("Content"));
}else if(msgType.equals(Message.IMAGE)){
message.setPicUrl(map.get("PicUrl"));
}else if(msgType.equals(Message.LINK)){
message.setTitle(map.get("Title"));
message.setDescription(map.get("Description"));
message.setUrl(map.get("Url"));
}else if(msgType.equals(Message.LOCATION)){
message.setLocationX(map.get("Location_X"));
message.setLocationY(map.get("Location_Y"));
message.setScale(map.get("Scale"));
message.setLabel(map.get("Label"));
}else if(msgType.equals(Message.EVENT)){
message.setEvent(map.get("Event"));
message.setEventKey(map.get("EventKey"));
}
return message;
}
/**
* 解析request中的xml 并将数据存储到一个Map中返回
* @param request
*/
public static Map<String, String> parseXml(HttpServletRequest request){
Map<String, String> map = new HashMap<String, String>();
try {
InputStream inputStream = request.getInputStream();
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
Element root = document.getRootElement();
List<Element> elementList = root.elements();
for (Element e : elementList)
//遍历xml将数据写入map
map.put(e.getName(), e.getText());
inputStream.close();
inputStream = null;
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* sha1加密算法
* @param key需要加密的字符串
* @return 加密后的结果
*/
public static String sha1(String key) {
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(key.getBytes());
String pwd = new BigInteger(1, md.digest()).toString(16);
return pwd;
} catch (Exception e) {
e.printStackTrace();
return key;
}
}
}
================================================
FILE: src/com/aixuexiao/web/controller/ClassesController.java
================================================
package com.aixuexiao.web.controller;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.ClassesNews;
import com.aixuexiao.model.Student;
import com.aixuexiao.service.ClassesService;
/**
* 包含班级列表菜单内的所有操作
*/
@Controller
public class ClassesController {
public static int pagesize = 10;
@Resource(name="classesService")
private ClassesService classesService;
@RequestMapping(value="/manager/classes",method=RequestMethod.GET)
public ModelAndView listStudent(String pagenum,Classes classes){
ModelAndView mv=new ModelAndView();
mv.setViewName("classes");
mv.addObject("sidebar","classes");
int num = 1;
if(null!=pagenum){
num = Integer.parseInt(pagenum);
}
List<Classes> list = classesService.listClasses((num-1)*pagesize, pagesize,classes);
mv.addObject("classesList", list);
mv.addObject("length", list.size());
mv.addObject("pagenum", num);
mv.addObject("classes", classes);
return mv;
}
@RequestMapping(value="/manager/addclassespage",method=RequestMethod.GET)
public ModelAndView addClassesPage(){
ModelAndView mv=new ModelAndView();
mv.setViewName("addclasses");
mv.addObject("sidebar","classes");
return mv;
}
@RequestMapping(value="/manager/addclasses",method=RequestMethod.POST)
public ModelAndView addClasses(Classes classes){
ModelAndView mv=new ModelAndView();
Classes cls = classesService.findClassesById(classes.getId());
if(null==cls){
mv.setViewName("redirect:/manager/classes");
classes.setStudentcount(0);
classesService.addClasses(classes);
}else{
mv.setViewName("redirect:/manager/addclassespage");
mv.addObject("name", classes.getName());
mv.addObject("headteacher", classes.getHeadteacher());
mv.addObject("notice","已存在编号为"+classes.getId()+"的班级");
}
return mv;
}
@RequestMapping(value="/manager/managerstudentpage",method=RequestMethod.GET)
public ModelAndView studentPage(int classesid){
ModelAndView mv=new ModelAndView();
Classes cls = classesService.findClassesById(classesid);
List<Student> stlist = classesService.findStudentByClassesId(classesid);
mv.setViewName("addstudents");
mv.addObject("sidebar","classes");
mv.addObject("cls",cls);
mv.addObject("stlist",stlist);
mv.addObject("length", stlist.size());
return mv;
}
@RequestMapping(value="/manager/classesnewspage",method=RequestMethod.GET)
public ModelAndView classesnewsPage(int classesid){
ModelAndView mv=new ModelAndView();
Classes cls = classesService.findClassesById(classesid);
List<ClassesNews> cnlist= classesService.findClassesNewsByClassId(classesid);
mv.setViewName("addclassesnews");
mv.addObject("sidebar","classes");
mv.addObject("cls",cls);
mv.addObject("cnlist",cnlist);
return mv;
}
@RequestMapping(value="/manager/addclassesnews",method=RequestMethod.POST)
public ModelAndView addClassesNews(ClassesNews classesNews){
ModelAndView mv=new ModelAndView();
classesNews.setInserttime(new Date());
classesService.addClassesNews(classesNews);
mv.addObject("notice","添加班级动态成功");
mv.addObject("classesid",classesNews.getClassid());
mv.setViewName("redirect:/manager/classesnewspage");
return mv;
}
@RequestMapping(value="/manager/deleteclassesnews",method=RequestMethod.GET)
public ModelAndView deleteClassesNews(int classesid,int id){
ModelAndView mv=new ModelAndView();
mv.setViewName("redirect:/manager/classesnewspage");
mv.addObject("classesid",classesid);
classesService.deleteClassesNewsById(id);
mv.addObject("notice","删除动态成功");
return mv;
}
@RequestMapping(value="/manager/addstudent",method=RequestMethod.POST)
public ModelAndView addStudent(Student student){
ModelAndView mv=new ModelAndView();
Student stu = classesService.findStudentById(student.getId());
if(stu==null){
classesService.addStudent(student);
classesService.updateClassStudentCount(student.getClassid());
mv.addObject("notice","添加学生成功");
}else{
mv.addObject("notice","已经存在编号为"+student.getId()+"的学生("+stu.getName()+")!");
}
mv.addObject("classesid",student.getClassid());
mv.setViewName("redirect:/manager/managerstudentpage");
return mv;
}
@RequestMapping(value="/manager/deletestudent",method=RequestMethod.GET)
public ModelAndView deleteStudent(int studentid,int classid){
ModelAndView mv=new ModelAndView();
classesService.deleteStudentById(studentid);
classesService.updateClassStudentCount(classid);
mv.addObject("classesid",classid);
mv.addObject("notice","删除学生信息成功");
mv.setViewName("redirect:/manager/managerstudentpage");
return mv;
}
@RequestMapping(value="/manager/updatestudent",method=RequestMethod.POST)
public ModelAndView updateStudent(Student student){
ModelAndView mv=new ModelAndView();
classesService.updateStudentBy(student);
mv.addObject("classesid",student.getClassid());
mv.addObject("notice","编辑学生信息成功");
mv.setViewName("redirect:/manager/managerstudentpage");
return mv;
}
}
================================================
FILE: src/com/aixuexiao/web/controller/ExamController.java
================================================
package com.aixuexiao.web.controller;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.Exam;
import com.aixuexiao.model.Student;
import com.aixuexiao.service.ExamService;
import com.aixuexiao.util.ExamUtil;
/**
* 包含考试列表菜单内的所有操作
*/
@Controller
public class ExamController {
public static final int pagesize = 10;
@Resource(name="examService")
private ExamService examService;
@RequestMapping(value="/manager/exams",method=RequestMethod.GET)
public ModelAndView listStudent(String pagenum,Exam exam){
ModelAndView mv=new ModelAndView();
mv.setViewName("exams");
mv.addObject("sidebar","exams");
int num = 1;
if(null!=pagenum){
num = Integer.parseInt(pagenum);
}
List<Exam> list = examService.listExam((num-1)*pagesize, pagesize,exam);
List<Classes> clslist = examService.findAllClasses();
mv.addObject("examList", list);
mv.addObject("clsList", clslist);
mv.addObject("length", list.size());
mv.addObject("pagenum", num);
mv.addObject("exam", exam);
return mv;
}
@RequestMapping(value="/manager/addexam",method=RequestMethod.POST)
public ModelAndView addExam(Exam exam){
ModelAndView mv=new ModelAndView();
mv.setViewName("addexam");
mv.addObject("sidebar","exams");
List<Student> stlist = examService.findStudentByClassesId(exam.getClassid());
mv.addObject("exam",exam);
mv.addObject("stlist",stlist);
return mv;
}
@RequestMapping(value="/manager/viewexam",method=RequestMethod.GET)
public ModelAndView viewExam(int id){
ModelAndView mv=new ModelAndView();
mv.setViewName("viewexam");
mv.addObject("sidebar","exams");
Exam exam = examService.findExamById(id);
mv.addObject("exam",exam);
return mv;
}
@RequestMapping(value="/manager/addexammark",method=RequestMethod.POST)
public ModelAndView addExamMark(Exam exam){
ModelAndView mv=new ModelAndView();
mv.addObject("sidebar","exams");
mv.setViewName("redirect:/manager/exams");
exam.setExamtime(new Date());
exam = ExamUtil.sortExamMark(exam);//为分数排序
examService.addExam(exam);
return mv;
}
}
================================================
FILE: src/com/aixuexiao/web/controller/LoginController.java
================================================
package com.aixuexiao.web.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller()
public class LoginController {
private static final String USERNAME = "zhiyun";
private static final String PASSWORD = "123456";
@RequestMapping("/")
public String index(){
return "login";
}
@RequestMapping(value="/login",method=RequestMethod.POST)
public ModelAndView login(String username,String password,HttpServletRequest request){
ModelAndView mv=new ModelAndView("");
if( USERNAME.equals(username)&& PASSWORD.equals(password)){
request.getSession().setAttribute("user", username);
mv.setViewName("redirect:/manager/students");
}else{
mv.setViewName("forward:/");
mv.addObject("username",username);
mv.addObject("message", "username or password error ");
}
return mv;
}
@RequestMapping(value="/loginout",method=RequestMethod.POST)
public ModelAndView loginOut(HttpServletRequest request){
ModelAndView mv=new ModelAndView();
mv.setViewName("/");
request.getSession().removeAttribute("user");
return mv;
}
}
================================================
FILE: src/com/aixuexiao/web/controller/StudentController.java
================================================
package com.aixuexiao.web.controller;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.aixuexiao.model.Classes;
import com.aixuexiao.model.ExamMark;
import com.aixuexiao.model.Student;
import com.aixuexiao.model.StudentMessage;
import com.aixuexiao.service.StudentService;
/**
* 包含学生列表菜单内的所有操作
*/
@Controller
public class StudentController {
public static final int pagesize = 8;
@Resource(name="studentService")
private StudentService studentService;
@RequestMapping(value="/manager/students",method=RequestMethod.GET)
public ModelAndView listStudent(String pagenum,Student student){
ModelAndView mv=new ModelAndView();
mv.setViewName("students");
mv.addObject("sidebar","students");
int num = 1;
if(null!=pagenum){
num = Integer.parseInt(pagenum);
}
List<Student> list = studentService.listStudent((num-1)*pagesize, pagesize,student);
List<Classes> clslist = studentService.findAllClasses();
mv.addObject("studentList", list);
mv.addObject("clsList", clslist);
mv.addObject("length", list.size());
mv.addObject("pagenum", num);
mv.addObject("student", student);
return mv;
}
@RequestMapping(value="/manager/leavemessage",method=RequestMethod.GET)
public ModelAndView leavemessage(int studentid){
ModelAndView mv=new ModelAndView();
Student student = studentService.findStudentById(studentid);
if(null == student){
mv.setViewName("redirect:/manager/students");
}else{
mv.setViewName("addstudentmessage");
mv.addObject("sidebar","students");
mv.addObject("student",student);
List<StudentMessage> list = studentService.listMessageByStudentId(studentid, 100);
mv.addObject("studentMessageList", list);
}
return mv;
}
@RequestMapping(value="/manager/examdetail",method=RequestMethod.GET)
public ModelAndView examdetail(int studentid){
ModelAndView mv=new ModelAndView();
Student student = studentService.findStudentById(studentid);
if(null == student){
mv.setViewName("redirect:/manager/students");
}else{
mv.setViewName("examdetail");
mv.addObject("sidebar","students");
mv.addObject("student",student);
List<ExamMark> list = studentService.findExamMarkByStudentId(studentid, 100);
mv.addObject("emlist", list);
}
return mv;
}
@RequestMapping(value="/manager/addmessage",method=RequestMethod.POST)
public ModelAndView addmessage(StudentMessage studentMessage){
ModelAndView mv=new ModelAndView();
mv.setViewName("redirect:/manager/leavemessage");
mv.addObject("studentid",studentMessage.getStudentid());
studentMessage.setInserttime(new Date());
studentService.addStudentMessage(studentMessage);
mv.addObject("notice","留言成功");
return mv;
}
@RequestMapping(value="/manager/deletemessage",method=RequestMethod.GET)
public ModelAndView deletemessage(int studentid,int messageid){
ModelAndView mv=new ModelAndView();
mv.setViewName("redirect:/manager/leavemessage");
mv.addObject("studentid",studentid);
studentService.deleteStudentMessageById(messageid);
mv.addObject("notice","删除成功");
return mv;
}
}
================================================
FILE: src/com/aixuexiao/web/controller/WeixinController.java
================================================
package com.aixuexiao.web.controller;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.aixuexiao.model.ExamMark;
import com.aixuexiao.model.Message;
import com.aixuexiao.model.Reply;
import com.aixuexiao.service.WeixinService;
import com.aixuexiao.util.WeixinUtil;
@Controller()
public class WeixinController {
private static final String TOKEN = "aixuexiao";
public static int pagesize = 10;
@Resource(name="weixinService")
private WeixinService weixinService;
@RequestMapping(value="/test",method=RequestMethod.GET,produces="text/html;charset=UTF-8")
@ResponseBody
public String test(HttpServletRequest request){
return weixinService.getStudentMessageHistoryByStudentId(30202);
}
//接收微信公众号接收的消息,处理后再做相应的回复
@RequestMapping(value="/weixin",method=RequestMethod.POST,produces="text/html;charset=UTF-8")
@ResponseBody
public String replyMessage(HttpServletRequest request){
//仅处理微信服务端发的请求
if (checkWeixinReques(request)) {
Map<String, String> requestMap = WeixinUtil.parseXml(request);
Message message = WeixinUtil.mapToMessage(requestMap);
weixinService.addMessage(message);//保存接受消息到数据库
String replyContent = Reply.WELCOME_CONTENT;
String type = message.getMsgType();
if (type.equals(Message.TEXT)) {//仅处理文本回复内容
String content = message.getContent();//消息内容
String [] cs = content.split("_");//消息内容都以下划线_分隔
if(cs.length == 2){
int studentid ;//学生编号
String process = cs[1];//操作
try {
studentid = Integer.parseInt(cs[0]);
if("考试".equals(process)){
replyContent = weixinService.getSingleExamMarkStringByStudentId(studentid);
}else if("考试历史".equals(process)){
replyContent = weixinService.getExamMarkHistoryStringByStudentId(studentid);
}else if("留言".equals(process)){
replyContent = weixinService.getSingleStudentMessageByStudentId(studentid);
}else if("留言历史".equals(process)){
replyContent = weixinService.getStudentMessageHistoryByStudentId(studentid);
}else if("动态".equals(process)){
replyContent = weixinService.getSingleClassesNewsByStudentId(studentid);
}else if("动态历史".equals(process)){
replyContent = weixinService.getClassesNewsHistoryByStudentId(studentid);
}
} catch (NumberFormatException e) {
replyContent = Reply.ERROR_CONTENT;
}
}
}
//拼装回复消息
Reply reply = new Reply();
reply.setToUserName(message.getFromUserName());
reply.setFromUserName(message.getToUserName());
reply.setCreateTime(new Date());
reply.setMsgType(Reply.TEXT);
reply.setContent(replyContent);
weixinService.addReply(reply);//保存回复消息到数据库
//将回复消息序列化为xml形式
String back = WeixinUtil.replyToXml(reply);
System.out.println(back);
return back;
}else{
return "error";
}
}
//微信公众平台验证url是否有效使用的接口
@RequestMapping(value="/weixin",method=RequestMethod.GET,produces="text/html;charset=UTF-8")
@ResponseBody
public String initWeixinURL(HttpServletRequest request){
String echostr = request.getParameter("echostr");
if (checkWeixinReques(request) && echostr != null) {
return echostr;
}else{
return "error";
}
}
/**
* 根据token计算signature验证是否为weixin服务端发送的消息
*/
private static boolean checkWeixinReques(HttpServletRequest request){
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
if (signature != null && timestamp != null && nonce != null ) {
String[] strSet = new String[] { TOKEN, timestamp, nonce };
java.util.Arrays.sort(strSet);
String key = "";
for (String string : strSet) {
key = key + string;
}
String pwd = WeixinUtil.sha1(key);
return pwd.equals(signature);
}else {
return false;
}
}
/**
* 收到消息列表页面
*/
@RequestMapping(value="/manager/messages",method=RequestMethod.GET)
public ModelAndView listMessage(String pagenum){
ModelAndView mv=new ModelAndView();
mv.addObject("sidebar","messages");
mv.setViewName("messages");
int num = 1;
if(null!=pagenum){
num = Integer.parseInt(pagenum);
}
List<Message> list = weixinService.listMessage((num-1)*pagesize, pagesize);
mv.addObject("messageList", list);
mv.addObject("pagenum", num);
mv.addObject("length", list.size());
return mv;
}
/**
* 回复消息列表页面
*/
@RequestMapping(value="/manager/replys",method=RequestMethod.GET)
public ModelAndView listReply(String pagenum){
ModelAndView mv=new ModelAndView();
mv.addObject("sidebar","replys");
mv.setViewName("replys");
int num = 1;
if(null!=pagenum){
num = Integer.parseInt(pagenum);
}
List<Reply> list = weixinService.listReply((num-1)*pagesize, pagesize);
mv.addObject("replyList", list);
mv.addObject("pagenum", num);
mv.addObject("length", list.size());
return mv;
}
}
================================================
FILE: src/com/aixuexiao/web/interceptor/ManagerInterceptor.java
================================================
package com.aixuexiao.web.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 用于过滤未登陆用户访问管理内容的拦截器
* @author lizy
*/
public class ManagerInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object obj, Exception e)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object obj, ModelAndView mav) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
request.setCharacterEncoding("UTF-8");
if(request.getSession().getAttribute("user")!=null){
return true;
}else{
response.sendRedirect(request.getContextPath()+"/");
//System.out.println("request.getSession().getAttribute(\"user\")"+request.getSession().getAttribute("user"));
return false;
}
}
}
================================================
FILE: src/db.properties
================================================
db.read.database=app_aixuexiao
db.read.host=r.rdc.sae.sina.com.cn
db.read.port=3307
db.read.userName=ak
db.read.password=sk
db.write.database=app_aixuexiao
db.write.host=w.rdc.sae.sina.com.cn
db.write.port=3307
db.write.userName=ak
db.write.password=sk
================================================
FILE: src/log4j.properties
================================================
log4j.rootLogger=INFO,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %5p %c\:(%F\:%L) %n - %m%n
================================================
FILE: src/spring.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<tx:annotation-driven transaction-manager="transactionManager"/>
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.aixuexiao"/>
<!-- 加载配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:db.properties</value>
</list>
</property>
</bean>
<!-- 配置数据源 -->
<bean id="readDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl">
<value><![CDATA[jdbc:mysql://${db.read.host}:${db.read.port}/${db.read.database}?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true]]></value>
</property>
<property name="user" value="${db.read.userName}" />
<property name="password" value="${db.read.password}" />
<property name="maxPoolSize" value="12" />
<property name="minPoolSize" value="0" />
<property name="maxStatements" value="100" />
<property name="initialPoolSize" value="3" />
<property name="maxIdleTime" value="10"/>
<property name="idleConnectionTestPeriod" value="10" />
<property name="testConnectionOnCheckin" value="true" />
<property name="testConnectionOnCheckout" value="false" />
<property name="preferredTestQuery" value="SELECT 1 FROM DUAL" />
</bean>
<!-- 配置读的 ibatis (从库)-->
<bean id="readSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="readDataSource" />
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
</bean>
<bean id="readSqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="readSqlSessionFactory" />
</bean>
<!-- 配置数据源(主库) -->
<bean id="writeDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl">
<value><![CDATA[jdbc:mysql://${db.write.host}:${db.write.port}/${db.write.database}?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true]]></value>
</property>
<property name="user" value="${db.write.userName}" />
<property name="password" value="${db.write.password}" />
<property name="maxPoolSize" value="12" />
<property name="minPoolSize" value="0" />
<property name="maxStatements" value="100" />
<property name="initialPoolSize" value="3" />
<property name="maxIdleTime" value="10"/>
<property name="idleConnectionTestPeriod" value="10" />
<property name="testConnectionOnCheckin" value="true" />
<property name="testConnectionOnCheckout" value="false" />
<property name="preferredTestQuery" value="SELECT 1 FROM DUAL" />
</bean>
<!-- 配置写的ibatis (主库)-->
<bean id="writerSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="writeDataSource" />
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
</bean>
<bean id="writerSqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="writerSqlSessionFactory" />
</bean>
<!-- 事务控制 (主库)-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="writeDataSource" />
</bean>
</beans>
================================================
FILE: src/sqlMapConfig.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置mybatis的缓存,延迟加载等等一系列属性 -->
<settings>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允许使用列标签代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<!-- <setting name="useGeneratedKeys" value="true" /> -->
<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 对于批量更新操作缓存SQL以提高性能 -->
<setting name="defaultExecutorType" value="BATCH" />
<!-- 数据库超过25000秒仍未响应则超时 -->
<setting name="defaultStatementTimeout" value="25000" />
</settings>
<typeAliases>
<typeAlias alias="Message" type="com.aixuexiao.model.Message" />
<typeAlias alias="Reply" type="com.aixuexiao.model.Reply" />
<typeAlias alias="Article" type="com.aixuexiao.model.Article" />
<typeAlias alias="Student" type="com.aixuexiao.model.Student" />
<typeAlias alias="Classes" type="com.aixuexiao.model.Classes" />
<typeAlias alias="Exam" type="com.aixuexiao.model.Exam" />
<typeAlias alias="ExamMark" type="com.aixuexiao.model.ExamMark" />
<typeAlias alias="StudentMessage" type="com.aixuexiao.model.StudentMessage" />
<typeAlias alias="ClassesNews" type="com.aixuexiao.model.ClassesNews" />
</typeAliases>
<mappers>
<mapper resource="com/aixuexiao/dao/sqlmap/ReplyMapper.xml"/>
<mapper resource="com/aixuexiao/dao/sqlmap/MessageMapper.xml"/>
<mapper resource="com/aixuexiao/dao/sqlmap/StudentMapper.xml"/>
<mapper resource="com/aixuexiao/dao/sqlmap/ExamMapper.xml"/>
<mapper resource="com/aixuexiao/dao/sqlmap/StudentMessageMapper.xml"/>
<mapper resource="com/aixuexiao/dao/sqlmap/ClassesNewsMapper.xml"/>
<mapper resource="com/aixuexiao/dao/sqlmap/ClassesMapper.xml"/>
</mappers>
</configuration>
gitextract__ax_k9m7/
├── .classpath
├── .project
├── .settings/
│ ├── .jsdtscope
│ ├── org.eclipse.core.resources.prefs
│ ├── org.eclipse.jdt.core.prefs
│ ├── org.eclipse.wst.common.component
│ ├── org.eclipse.wst.common.project.facet.core.xml
│ ├── org.eclipse.wst.jsdt.ui.superType.container
│ └── org.eclipse.wst.jsdt.ui.superType.name
├── README.md
├── WebContent/
│ ├── META-INF/
│ │ └── MANIFEST.MF
│ ├── WEB-INF/
│ │ ├── lib/
│ │ │ ├── aopalliance-1.0.jar
│ │ │ ├── asm-3.3.1.jar
│ │ │ ├── aspectjweaver.jar
│ │ │ ├── c3p0-0.9.2-pre4.jar
│ │ │ ├── cglib-2.2.2.jar
│ │ │ ├── commons-logging-1.1.1.jar
│ │ │ ├── dom4j-1.6.1.jar
│ │ │ ├── javassist-3.17.1-GA.jar
│ │ │ ├── jstl-1.2.jar
│ │ │ ├── log4j-1.2.17.jar
│ │ │ ├── mchange-commons-java-0.2.2.jar
│ │ │ ├── mybatis-3.2.2.jar
│ │ │ ├── mybatis-spring-1.2.0.jar
│ │ │ ├── mysql-connector-java-5.1.19-bin.jar
│ │ │ ├── slf4j-api-1.7.5.jar
│ │ │ ├── slf4j-log4j12-1.7.5.jar
│ │ │ ├── spring-aop-3.2.3.RELEASE.jar
│ │ │ ├── spring-aspects-3.2.3.RELEASE.jar
│ │ │ ├── spring-beans-3.2.3.RELEASE.jar
│ │ │ ├── spring-context-3.2.3.RELEASE.jar
│ │ │ ├── spring-core-3.2.3.RELEASE.jar
│ │ │ ├── spring-expression-3.2.3.RELEASE.jar
│ │ │ ├── spring-jdbc-3.2.3.RELEASE.jar
│ │ │ ├── spring-orm-3.2.3.RELEASE.jar
│ │ │ ├── spring-tx-3.2.3.RELEASE.jar
│ │ │ ├── spring-web-3.2.3.RELEASE.jar
│ │ │ ├── spring-webmvc-3.2.3.RELEASE.jar
│ │ │ └── xstream-1.3.1.jar
│ │ ├── springMVC-servlet.xml
│ │ ├── views/
│ │ │ ├── addclasses.jsp
│ │ │ ├── addclassesnews.jsp
│ │ │ ├── addexam.jsp
│ │ │ ├── addstudentmessage.jsp
│ │ │ ├── addstudents.jsp
│ │ │ ├── classes.jsp
│ │ │ ├── common/
│ │ │ │ ├── css.jsp
│ │ │ │ ├── js.jsp
│ │ │ │ ├── navbar.jsp
│ │ │ │ └── sidebar.jsp
│ │ │ ├── examdetail.jsp
│ │ │ ├── exams.jsp
│ │ │ ├── login.jsp
│ │ │ ├── messages.jsp
│ │ │ ├── replys.jsp
│ │ │ ├── students.jsp
│ │ │ └── viewexam.jsp
│ │ └── web.xml
│ └── assets/
│ ├── css/
│ │ └── ace-fonts.css
│ └── font/
│ └── FontAwesome.otf
├── app_aixuexiao.sql
└── src/
├── com/
│ └── aixuexiao/
│ ├── dao/
│ │ ├── BaseDao.java
│ │ ├── ClassesDao.java
│ │ ├── ClassesNewsDao.java
│ │ ├── ExamDao.java
│ │ ├── MessageDao.java
│ │ ├── ReplyDao.java
│ │ ├── StudentDao.java
│ │ ├── StudentMessageDao.java
│ │ └── sqlmap/
│ │ ├── ClassesMapper.xml
│ │ ├── ClassesNewsMapper.xml
│ │ ├── ExamMapper.xml
│ │ ├── MessageMapper.xml
│ │ ├── ReplyMapper.xml
│ │ ├── StudentMapper.xml
│ │ └── StudentMessageMapper.xml
│ ├── model/
│ │ ├── Article.java
│ │ ├── Classes.java
│ │ ├── ClassesNews.java
│ │ ├── Exam.java
│ │ ├── ExamMark.java
│ │ ├── Message.java
│ │ ├── Reply.java
│ │ ├── Student.java
│ │ └── StudentMessage.java
│ ├── service/
│ │ ├── ClassesService.java
│ │ ├── ExamService.java
│ │ ├── StudentService.java
│ │ └── WeixinService.java
│ ├── util/
│ │ ├── ExamUtil.java
│ │ └── WeixinUtil.java
│ └── web/
│ ├── controller/
│ │ ├── ClassesController.java
│ │ ├── ExamController.java
│ │ ├── LoginController.java
│ │ ├── StudentController.java
│ │ └── WeixinController.java
│ └── interceptor/
│ └── ManagerInterceptor.java
├── db.properties
├── log4j.properties
├── spring.xml
└── sqlMapConfig.xml
SYMBOL INDEX (281 symbols across 30 files)
FILE: app_aixuexiao.sql
type `class` (line 4) | CREATE TABLE IF NOT EXISTS `class` (
type `class_news` (line 24) | CREATE TABLE IF NOT EXISTS `class_news` (
type `exam` (line 46) | CREATE TABLE IF NOT EXISTS `exam` (
type `exam_mark` (line 75) | CREATE TABLE IF NOT EXISTS `exam_mark` (
type `message` (line 114) | CREATE TABLE IF NOT EXISTS `message` (
type `reply` (line 143) | CREATE TABLE IF NOT EXISTS `reply` (
type `reply_article` (line 160) | CREATE TABLE IF NOT EXISTS `reply_article` (
type `student` (line 176) | CREATE TABLE IF NOT EXISTS `student` (
type `student_message` (line 209) | CREATE TABLE IF NOT EXISTS `student_message` (
FILE: src/com/aixuexiao/dao/BaseDao.java
class BaseDao (line 7) | public class BaseDao {
FILE: src/com/aixuexiao/dao/ClassesDao.java
class ClassesDao (line 11) | @Component("classesDao")
method findAllClasses (line 15) | public List<Classes> findAllClasses() {
method findClasses (line 19) | public List<Classes> findClasses(int start,int size,Classes classes) {
method addClasses (line 27) | public void addClasses(Classes classes){
method findClassesById (line 31) | public Classes findClassesById(int id){
method updateClassStudentCount (line 35) | public void updateClassStudentCount(int classid){
FILE: src/com/aixuexiao/dao/ClassesNewsDao.java
class ClassesNewsDao (line 12) | @Component("classesNewsDao")
method findClassesNewsByClassId (line 16) | public List<ClassesNews> findClassesNewsByClassId(int classid,int limi...
method addClassesNews (line 24) | public void addClassesNews(ClassesNews classesNews){
method deleteClassesNewsById (line 28) | public void deleteClassesNewsById(int id){
FILE: src/com/aixuexiao/dao/ExamDao.java
class ExamDao (line 13) | @Component("examDao")
method findExamMarkByStudentId (line 17) | public List<ExamMark> findExamMarkByStudentId(int studentid,int limit) {
method findExam (line 24) | public List<Exam> findExam(int start,int size,Exam exam){
method addExam (line 32) | public void addExam(Exam exam){
method addExamMark (line 36) | public void addExamMark(ExamMark examMark){
method findExamById (line 40) | public Exam findExamById(int id){
FILE: src/com/aixuexiao/dao/MessageDao.java
class MessageDao (line 11) | @Component("messageDao")
method addMessage (line 14) | public int addMessage(Message message) {
method findMessage (line 18) | public List<Message> findMessage(int start,int size) {
FILE: src/com/aixuexiao/dao/ReplyDao.java
class ReplyDao (line 12) | @Component("replyDao")
method addReply (line 15) | public void addReply(Reply reply) {
method addArticle (line 19) | public void addArticle(Article article){
method findReply (line 23) | public List<Reply> findReply(int start,int size) {
FILE: src/com/aixuexiao/dao/StudentDao.java
class StudentDao (line 11) | @Component("studentDao")
method findStudentById (line 15) | public Student findStudentById(int id) {
method findStudent (line 19) | public List<Student> findStudent(int start,int size,Student student) {
method findStudentByClassesId (line 27) | public List<Student> findStudentByClassesId(int classesid) {
method addStudent (line 31) | public int addStudent(Student student) {
method deleteStudentById (line 35) | public int deleteStudentById(int studentid) {
method updateStudent (line 39) | public int updateStudent(Student student) {
FILE: src/com/aixuexiao/dao/StudentMessageDao.java
class StudentMessageDao (line 12) | @Component("studentMessageDao")
method findStudentMessageByStudentId (line 16) | public List<StudentMessage> findStudentMessageByStudentId(int studenti...
method addStudentMessage (line 23) | public int addStudentMessage(StudentMessage studentMessage) {
method deleteStudentMessageById (line 27) | public int deleteStudentMessageById(int id) {
FILE: src/com/aixuexiao/model/Article.java
class Article (line 10) | public class Article {
method Article (line 33) | public Article() {}
method Article (line 35) | public Article(String title, String description, String picUrl, String...
method getId (line 44) | public int getId() {
method setId (line 48) | public void setId(int id) {
method getTitle (line 52) | public String getTitle() {
method setTitle (line 55) | public void setTitle(String title) {
method getDescription (line 58) | public String getDescription() {
method setDescription (line 61) | public void setDescription(String description) {
method getPicUrl (line 64) | public String getPicUrl() {
method setPicUrl (line 67) | public void setPicUrl(String picUrl) {
method getUrl (line 70) | public String getUrl() {
method setUrl (line 73) | public void setUrl(String url) {
method getReplyId (line 77) | public int getReplyId() {
method setReplyId (line 81) | public void setReplyId(int replyId) {
method getReply (line 85) | public Reply getReply() {
method setReply (line 89) | public void setReply(Reply reply) {
FILE: src/com/aixuexiao/model/Classes.java
class Classes (line 8) | public class Classes implements Serializable {
method getId (line 32) | public int getId() {
method setId (line 36) | public void setId(int id) {
method getName (line 40) | public String getName() {
method setName (line 44) | public void setName(String name) {
method getHeadteacher (line 48) | public String getHeadteacher() {
method setHeadteacher (line 52) | public void setHeadteacher(String headteacher) {
method getStudentcount (line 56) | public int getStudentcount() {
method setStudentcount (line 60) | public void setStudentcount(int studentcount) {
FILE: src/com/aixuexiao/model/ClassesNews.java
class ClassesNews (line 9) | public class ClassesNews implements Serializable {
method getId (line 31) | public int getId() {
method setId (line 35) | public void setId(int id) {
method getClassid (line 39) | public int getClassid() {
method setClassid (line 43) | public void setClassid(int classid) {
method getContent (line 48) | public String getContent() {
method setContent (line 52) | public void setContent(String content) {
method getInserttime (line 56) | public Date getInserttime() {
method setInserttime (line 60) | public void setInserttime(Date inserttime) {
FILE: src/com/aixuexiao/model/Exam.java
class Exam (line 11) | public class Exam implements Serializable {
method getId (line 63) | public int getId() {
method setId (line 67) | public void setId(int id) {
method getClassid (line 71) | public int getClassid() {
method setClassid (line 75) | public void setClassid(int classid) {
method getCourse (line 79) | public String getCourse() {
method setCourse (line 83) | public void setCourse(String course) {
method getExamtime (line 87) | public Date getExamtime() {
method setExamtime (line 91) | public void setExamtime(Date examtime) {
method getFullmarks (line 96) | public BigDecimal getFullmarks() {
method setFullmarks (line 100) | public void setFullmarks(BigDecimal fullmarks) {
method getAverage (line 104) | public BigDecimal getAverage() {
method setAverage (line 108) | public void setAverage(BigDecimal average) {
method getTopmark (line 112) | public BigDecimal getTopmark() {
method setTopmark (line 116) | public void setTopmark(BigDecimal topmark) {
method getLowestmark (line 120) | public BigDecimal getLowestmark() {
method setLowestmark (line 124) | public void setLowestmark(BigDecimal lowestmark) {
method getRemark (line 128) | public String getRemark() {
method setRemark (line 132) | public void setRemark(String remark) {
method getExamMarks (line 136) | public List<ExamMark> getExamMarks() {
method setExamMarks (line 140) | public void setExamMarks(List<ExamMark> examMarks) {
FILE: src/com/aixuexiao/model/ExamMark.java
class ExamMark (line 10) | public class ExamMark implements Serializable,Comparable<ExamMark> {
method getExamid (line 57) | public int getExamid() {
method setExamid (line 61) | public void setExamid(int examid) {
method getClassid (line 65) | public int getClassid() {
method setClassid (line 69) | public void setClassid(int classid) {
method getStudentid (line 73) | public int getStudentid() {
method setStudentid (line 77) | public void setStudentid(int studentid) {
method getExamtime (line 81) | public Date getExamtime() {
method setExamtime (line 85) | public void setExamtime(Date examtime) {
method getMark (line 89) | public BigDecimal getMark() {
method setMark (line 93) | public void setMark(BigDecimal mark) {
method getRank (line 97) | public int getRank() {
method setRank (line 101) | public void setRank(int rank) {
method getRemark (line 105) | public String getRemark() {
method setRemark (line 109) | public void setRemark(String remark) {
method getExam (line 113) | public Exam getExam() {
method setExam (line 117) | public void setExam(Exam exam) {
method getStudentname (line 122) | public String getStudentname() {
method setStudentname (line 126) | public void setStudentname(String studentname) {
method compareTo (line 130) | @Override
method toString (line 135) | @Override
FILE: src/com/aixuexiao/model/Message.java
class Message (line 12) | public class Message implements Serializable{
method getId (line 64) | public int getId() {
method setId (line 67) | public void setId(int id) {
method getToUserName (line 70) | public String getToUserName() {
method setToUserName (line 73) | public void setToUserName(String toUserName) {
method getFromUserName (line 76) | public String getFromUserName() {
method setFromUserName (line 79) | public void setFromUserName(String fromUserName) {
method getCreateTime (line 82) | public Date getCreateTime() {
method setCreateTime (line 85) | public void setCreateTime(Date createTime) {
method getMsgType (line 88) | public String getMsgType() {
method setMsgType (line 91) | public void setMsgType(String msgType) {
method getMsgId (line 94) | public String getMsgId() {
method setMsgId (line 97) | public void setMsgId(String msgId) {
method getContent (line 100) | public String getContent() {
method setContent (line 103) | public void setContent(String content) {
method getPicUrl (line 106) | public String getPicUrl() {
method setPicUrl (line 109) | public void setPicUrl(String picUrl) {
method getTitle (line 112) | public String getTitle() {
method setTitle (line 115) | public void setTitle(String title) {
method getDescription (line 118) | public String getDescription() {
method setDescription (line 121) | public void setDescription(String description) {
method getUrl (line 124) | public String getUrl() {
method setUrl (line 127) | public void setUrl(String url) {
method getLocationX (line 130) | public String getLocationX() {
method setLocationX (line 133) | public void setLocationX(String locationX) {
method getLocationY (line 136) | public String getLocationY() {
method setLocationY (line 139) | public void setLocationY(String locationY) {
method getScale (line 142) | public String getScale() {
method setScale (line 145) | public void setScale(String scale) {
method getLabel (line 148) | public String getLabel() {
method setLabel (line 151) | public void setLabel(String label) {
method getEvent (line 154) | public String getEvent() {
method setEvent (line 157) | public void setEvent(String event) {
method getEventKey (line 160) | public String getEventKey() {
method setEventKey (line 163) | public void setEventKey(String eventKey) {
FILE: src/com/aixuexiao/model/Reply.java
class Reply (line 14) | public class Reply implements Serializable {
method main (line 58) | public static void main(String[] args) {
method getId (line 62) | public int getId() {
method setId (line 66) | public void setId(int id) {
method getToUserName (line 70) | public String getToUserName() {
method setToUserName (line 74) | public void setToUserName(String toUserName) {
method getFromUserName (line 78) | public String getFromUserName() {
method setFromUserName (line 82) | public void setFromUserName(String fromUserName) {
method getCreateTime (line 86) | public Date getCreateTime() {
method setCreateTime (line 90) | public void setCreateTime(Date createTime) {
method getMsgType (line 94) | public String getMsgType() {
method setMsgType (line 98) | public void setMsgType(String msgType) {
method getContent (line 103) | public String getContent() {
method setContent (line 107) | public void setContent(String content) {
method getMusicUrl (line 111) | public String getMusicUrl() {
method setMusicUrl (line 115) | public void setMusicUrl(String musicUrl) {
method gethQMusicUrl (line 119) | public String gethQMusicUrl() {
method sethQMusicUrl (line 123) | public void sethQMusicUrl(String hQMusicUrl) {
method getArticleCount (line 127) | public int getArticleCount() {
method setArticleCount (line 131) | public void setArticleCount(int articleCount) {
method getArticles (line 135) | public List<Article> getArticles() {
method setArticles (line 139) | public void setArticles(List<Article> articles) {
FILE: src/com/aixuexiao/model/Student.java
class Student (line 8) | public class Student implements Serializable {
method getId (line 30) | public int getId() {
method setId (line 34) | public void setId(int id) {
method getClassid (line 38) | public int getClassid() {
method setClassid (line 42) | public void setClassid(int classid) {
method getName (line 46) | public String getName() {
method setName (line 50) | public void setName(String name) {
method getRemark (line 54) | public String getRemark() {
method setRemark (line 58) | public void setRemark(String remark) {
FILE: src/com/aixuexiao/model/StudentMessage.java
class StudentMessage (line 9) | public class StudentMessage implements Serializable {
method getId (line 31) | public int getId() {
method setId (line 35) | public void setId(int id) {
method getStudentid (line 39) | public int getStudentid() {
method setStudentid (line 43) | public void setStudentid(int studentid) {
method getContent (line 49) | public String getContent() {
method setContent (line 53) | public void setContent(String content) {
method getInserttime (line 57) | public Date getInserttime() {
method setInserttime (line 61) | public void setInserttime(Date inserttime) {
FILE: src/com/aixuexiao/service/ClassesService.java
class ClassesService (line 16) | @Service("classesService")
method listClasses (line 33) | public List<Classes> listClasses(int start,int size,Classes classes){
method deleteClassesNewsById (line 37) | public void deleteClassesNewsById(int id){
method addClassesNews (line 45) | public void addClassesNews(ClassesNews classesNews){
method findClassesNewsByClassId (line 54) | public List<ClassesNews> findClassesNewsByClassId(int classid){
method addClasses (line 62) | public void addClasses(Classes classes){
method findClassesById (line 71) | public Classes findClassesById(int id){
method findStudentById (line 80) | public Student findStudentById(int studentid){
method findStudentByClassesId (line 89) | public List<Student> findStudentByClassesId(int classesid){
method addStudent (line 97) | public void addStudent(Student student){
method deleteStudentById (line 106) | public void deleteStudentById(int studentid){
method updateClassStudentCount (line 114) | public void updateClassStudentCount(int classid){
method updateStudentBy (line 118) | public void updateStudentBy(Student student) {
FILE: src/com/aixuexiao/service/ExamService.java
class ExamService (line 17) | @Service("examService")
method addExam (line 33) | public void addExam(Exam exam){
method findExamById (line 46) | public Exam findExamById(int id){
method listExam (line 55) | public List<Exam> listExam(int start,int size,Exam exam){
method findStudentByClassesId (line 59) | public List<Student> findStudentByClassesId(int classesid) {
method findStudentById (line 68) | public Student findStudentById(int studentid){
method findAllClasses (line 75) | public List<Classes> findAllClasses(){
FILE: src/com/aixuexiao/service/StudentService.java
class StudentService (line 18) | @Service("studentService")
method findExamMarkByStudentId (line 39) | public List<ExamMark> findExamMarkByStudentId(int id ,int limit){
method listStudent (line 49) | public List<Student> listStudent(int start,int size,Student student){
method findStudentById (line 58) | public Student findStudentById(int studentid){
method addStudentMessage (line 66) | public void addStudentMessage(StudentMessage studentMessage){
method deleteStudentMessageById (line 74) | public void deleteStudentMessageById(int id){
method findAllClasses (line 81) | public List<Classes> findAllClasses(){
method listMessageByStudentId (line 90) | public List<StudentMessage> listMessageByStudentId(int studentid,int l...
FILE: src/com/aixuexiao/service/WeixinService.java
class WeixinService (line 26) | @Service("weixinService")
method getSingleExamMarkStringByStudentId (line 53) | public String getSingleExamMarkStringByStudentId(int studentid){
method getExamMarkHistoryStringByStudentId (line 87) | public String getExamMarkHistoryStringByStudentId(int studentid){
method getSingleStudentMessageByStudentId (line 125) | public String getSingleStudentMessageByStudentId(int studentid){
method getStudentMessageHistoryByStudentId (line 151) | public String getStudentMessageHistoryByStudentId(int studentid){
method getSingleClassesNewsByStudentId (line 179) | public String getSingleClassesNewsByStudentId(int studentid){
method getClassesNewsHistoryByStudentId (line 205) | public String getClassesNewsHistoryByStudentId(int studentid){
method addMessage (line 231) | public void addMessage(Message message) {
method listMessage (line 241) | public List<Message> listMessage(int start,int size){
method listReply (line 250) | public List<Reply> listReply(int start,int size){
method addReply (line 258) | public void addReply(Reply reply){
FILE: src/com/aixuexiao/util/ExamUtil.java
class ExamUtil (line 14) | public class ExamUtil {
method sortExamMark (line 21) | public static Exam sortExamMark(Exam exam){
FILE: src/com/aixuexiao/util/WeixinUtil.java
class WeixinUtil (line 32) | public class WeixinUtil {
method singleExamMarkToString (line 35) | public static String singleExamMarkToString(ExamMark em){
method createWriter (line 43) | public HierarchicalStreamWriter createWriter(Writer out) {
method replyToXml (line 69) | public static String replyToXml(Reply reply){
method mapToMessage (line 97) | public static Message mapToMessage(Map<String,String> map){
method parseXml (line 130) | public static Map<String, String> parseXml(HttpServletRequest request){
method sha1 (line 155) | public static String sha1(String key) {
FILE: src/com/aixuexiao/web/controller/ClassesController.java
class ClassesController (line 22) | @Controller
method listStudent (line 32) | @RequestMapping(value="/manager/classes",method=RequestMethod.GET)
method addClassesPage (line 50) | @RequestMapping(value="/manager/addclassespage",method=RequestMethod.GET)
method addClasses (line 58) | @RequestMapping(value="/manager/addclasses",method=RequestMethod.POST)
method studentPage (line 75) | @RequestMapping(value="/manager/managerstudentpage",method=RequestMeth...
method classesnewsPage (line 88) | @RequestMapping(value="/manager/classesnewspage",method=RequestMethod....
method addClassesNews (line 100) | @RequestMapping(value="/manager/addclassesnews",method=RequestMethod.P...
method deleteClassesNews (line 112) | @RequestMapping(value="/manager/deleteclassesnews",method=RequestMetho...
method addStudent (line 123) | @RequestMapping(value="/manager/addstudent",method=RequestMethod.POST)
method deleteStudent (line 139) | @RequestMapping(value="/manager/deletestudent",method=RequestMethod.GET)
method updateStudent (line 150) | @RequestMapping(value="/manager/updatestudent",method=RequestMethod.POST)
FILE: src/com/aixuexiao/web/controller/ExamController.java
class ExamController (line 23) | @Controller
method listStudent (line 31) | @RequestMapping(value="/manager/exams",method=RequestMethod.GET)
method addExam (line 51) | @RequestMapping(value="/manager/addexam",method=RequestMethod.POST)
method viewExam (line 62) | @RequestMapping(value="/manager/viewexam",method=RequestMethod.GET)
method addExamMark (line 72) | @RequestMapping(value="/manager/addexammark",method=RequestMethod.POST)
FILE: src/com/aixuexiao/web/controller/LoginController.java
class LoginController (line 11) | @Controller()
method index (line 17) | @RequestMapping("/")
method login (line 23) | @RequestMapping(value="/login",method=RequestMethod.POST)
method loginOut (line 38) | @RequestMapping(value="/loginout",method=RequestMethod.POST)
FILE: src/com/aixuexiao/web/controller/StudentController.java
class StudentController (line 23) | @Controller
method listStudent (line 31) | @RequestMapping(value="/manager/students",method=RequestMethod.GET)
method leavemessage (line 51) | @RequestMapping(value="/manager/leavemessage",method=RequestMethod.GET)
method examdetail (line 67) | @RequestMapping(value="/manager/examdetail",method=RequestMethod.GET)
method addmessage (line 83) | @RequestMapping(value="/manager/addmessage",method=RequestMethod.POST)
method deletemessage (line 94) | @RequestMapping(value="/manager/deletemessage",method=RequestMethod.GET)
FILE: src/com/aixuexiao/web/controller/WeixinController.java
class WeixinController (line 23) | @Controller()
method test (line 33) | @RequestMapping(value="/test",method=RequestMethod.GET,produces="text/...
method replyMessage (line 41) | @RequestMapping(value="/weixin",method=RequestMethod.POST,produces="te...
method initWeixinURL (line 96) | @RequestMapping(value="/weixin",method=RequestMethod.GET,produces="tex...
method checkWeixinReques (line 111) | private static boolean checkWeixinReques(HttpServletRequest request){
method listMessage (line 132) | @RequestMapping(value="/manager/messages",method=RequestMethod.GET)
method listReply (line 152) | @RequestMapping(value="/manager/replys",method=RequestMethod.GET)
FILE: src/com/aixuexiao/web/interceptor/ManagerInterceptor.java
class ManagerInterceptor (line 13) | public class ManagerInterceptor implements HandlerInterceptor{
method afterCompletion (line 15) | @Override
method postHandle (line 21) | @Override
method preHandle (line 26) | @Override
Condensed preview — 101 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (189K chars).
[
{
"path": ".classpath",
"chars": 3200,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"src\" path=\"src\"/>\n\t<classpathentry kind=\"con\" "
},
{
"path": ".project",
"chars": 1006,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>aixuexiao</name>\n\t<comment></comment>\n\t<projects>\n\t</"
},
{
"path": ".settings/.jsdtscope",
"chars": 491,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"src\" path=\"WebContent\"/>\n\t<classpathentry kind"
},
{
"path": ".settings/org.eclipse.core.resources.prefs",
"chars": 260,
"preview": "eclipse.preferences.version=1\nencoding//WebContent/WEB-INF/views/common/css.jsp=UTF-8\nencoding//WebContent/WEB-INF/views"
},
{
"path": ".settings/org.eclipse.jdt.core.prefs",
"chars": 357,
"preview": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\norg.eclipse.jdt.core.compi"
},
{
"path": ".settings/org.eclipse.wst.common.component",
"chars": 472,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project-modules id=\"moduleCoreId\" project-version=\"1.5.0\">\n <wb-module deploy"
},
{
"path": ".settings/org.eclipse.wst.common.project.facet.core.xml",
"chars": 335,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<faceted-project>\n <runtime name=\"Apache Tomcat v6.0\"/>\n <fixed facet=\"jst.web\""
},
{
"path": ".settings/org.eclipse.wst.jsdt.ui.superType.container",
"chars": 49,
"preview": "org.eclipse.wst.jsdt.launching.baseBrowserLibrary"
},
{
"path": ".settings/org.eclipse.wst.jsdt.ui.superType.name",
"chars": 6,
"preview": "Window"
},
{
"path": "README.md",
"chars": 733,
"preview": "aixuexiao\n=========\n\n一个基于SAE Java平台的微信平台公众帐号应用例子。\n\n详情访问:http://aixuexiao.sinaapp.com\n微信公众帐号:爱学校(aixuexiao)\n\n\n微信公众帐号功能为作为"
},
{
"path": "WebContent/META-INF/MANIFEST.MF",
"chars": 39,
"preview": "Manifest-Version: 1.0\r\nClass-Path: \r\n\r\n"
},
{
"path": "WebContent/WEB-INF/springMVC-servlet.xml",
"chars": 1988,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n xmlns:context=\"http"
},
{
"path": "WebContent/WEB-INF/views/addclasses.jsp",
"chars": 3051,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/addclassesnews.jsp",
"chars": 3291,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/addexam.jsp",
"chars": 3543,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/addstudentmessage.jsp",
"chars": 3318,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/addstudents.jsp",
"chars": 5453,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/classes.jsp",
"chars": 3602,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/common/css.jsp",
"chars": 942,
"preview": "<!--basic styles-->\n<link href=\"<%=request.getContextPath()%>/assets/css/bootstrap.min.css\" rel=\"stylesheet\" />\n<link hr"
},
{
"path": "WebContent/WEB-INF/views/common/js.jsp",
"chars": 946,
"preview": "<!--basic scripts-->\n<!--[if !IE]>-->\n<script type=\"text/javascript\">\n\twindow.jQuery || document.write(\"<script src='<%="
},
{
"path": "WebContent/WEB-INF/views/common/navbar.jsp",
"chars": 394,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%>\n<div class=\"navbar\">\n\t<div class="
},
{
"path": "WebContent/WEB-INF/views/common/sidebar.jsp",
"chars": 1695,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%>\n<%@ taglib prefix=\"c\" uri=\"http:/"
},
{
"path": "WebContent/WEB-INF/views/examdetail.jsp",
"chars": 2607,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/exams.jsp",
"chars": 5559,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/login.jsp",
"chars": 5500,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%>\n<%@ taglib prefix=\"c\" uri=\"http:/"
},
{
"path": "WebContent/WEB-INF/views/messages.jsp",
"chars": 2687,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/replys.jsp",
"chars": 2584,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/students.jsp",
"chars": 3635,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/views/viewexam.jsp",
"chars": 3123,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"GBK\"%>\n<!DOCTYPE html>\n<html lang=\"en\">\n\t<"
},
{
"path": "WebContent/WEB-INF/web.xml",
"chars": 1192,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://java"
},
{
"path": "WebContent/assets/css/ace-fonts.css",
"chars": 512,
"preview": "/* included only when we don't want to use fonts from google server */\r\n@font-face {\r\n font-family: 'Open Sans';\r\n fon"
},
{
"path": "app_aixuexiao.sql",
"chars": 7850,
"preview": "--\n-- 表的结构 `class`\n--\nCREATE TABLE IF NOT EXISTS `class` (\n `id` smallint(5) unsigned NOT NULL COMMENT '班级编号,302表示三年级二班"
},
{
"path": "src/com/aixuexiao/dao/BaseDao.java",
"chars": 298,
"preview": "package com.aixuexiao.dao;\n\nimport javax.annotation.Resource;\n\nimport org.mybatis.spring.SqlSessionTemplate;\n\npublic cla"
},
{
"path": "src/com/aixuexiao/dao/ClassesDao.java",
"chars": 1110,
"preview": "package com.aixuexiao.dao;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springfra"
},
{
"path": "src/com/aixuexiao/dao/ClassesNewsDao.java",
"chars": 902,
"preview": "package com.aixuexiao.dao;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springfra"
},
{
"path": "src/com/aixuexiao/dao/ExamDao.java",
"chars": 1268,
"preview": "package com.aixuexiao.dao;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springfra"
},
{
"path": "src/com/aixuexiao/dao/MessageDao.java",
"chars": 658,
"preview": "package com.aixuexiao.dao;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springfra"
},
{
"path": "src/com/aixuexiao/dao/ReplyDao.java",
"chars": 791,
"preview": "package com.aixuexiao.dao;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springfra"
},
{
"path": "src/com/aixuexiao/dao/StudentDao.java",
"chars": 1313,
"preview": "package com.aixuexiao.dao;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springfra"
},
{
"path": "src/com/aixuexiao/dao/StudentMessageDao.java",
"chars": 982,
"preview": "package com.aixuexiao.dao;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springfra"
},
{
"path": "src/com/aixuexiao/dao/sqlmap/ClassesMapper.xml",
"chars": 1640,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.or"
},
{
"path": "src/com/aixuexiao/dao/sqlmap/ClassesNewsMapper.xml",
"chars": 1088,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.or"
},
{
"path": "src/com/aixuexiao/dao/sqlmap/ExamMapper.xml",
"chars": 3302,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.or"
},
{
"path": "src/com/aixuexiao/dao/sqlmap/MessageMapper.xml",
"chars": 1870,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.or"
},
{
"path": "src/com/aixuexiao/dao/sqlmap/ReplyMapper.xml",
"chars": 2723,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.or"
},
{
"path": "src/com/aixuexiao/dao/sqlmap/StudentMapper.xml",
"chars": 1755,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.or"
},
{
"path": "src/com/aixuexiao/dao/sqlmap/StudentMessageMapper.xml",
"chars": 1142,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.or"
},
{
"path": "src/com/aixuexiao/model/Article.java",
"chars": 1682,
"preview": "package com.aixuexiao.model;\n\nimport com.thoughtworks.xstream.annotations.XStreamAlias;\nimport com.thoughtworks.xstream."
},
{
"path": "src/com/aixuexiao/model/Classes.java",
"chars": 810,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\n\n/**\n * 班级实体\n */\npublic class Classes implements Serializable"
},
{
"path": "src/com/aixuexiao/model/ClassesNews.java",
"chars": 800,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * 班级动态\n */\npublic class ClassesN"
},
{
"path": "src/com/aixuexiao/model/Exam.java",
"chars": 1955,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\nimport java.math.BigDecimal;\nimport java.util.Date;\nimport ja"
},
{
"path": "src/com/aixuexiao/model/ExamMark.java",
"chars": 2027,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\nimport java.math.BigDecimal;\nimport java.util.Date;\n\n/**\n * 考"
},
{
"path": "src/com/aixuexiao/model/Message.java",
"chars": 3534,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\nimport com.thoughtworks.xstream.annot"
},
{
"path": "src/com/aixuexiao/model/Reply.java",
"chars": 3397,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\nimport java.util.Date;\nimport java.util.List;\n\nimport com.tho"
},
{
"path": "src/com/aixuexiao/model/Student.java",
"chars": 729,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\n\n/**\n * 学生实体\n */\npublic class Student implements Serializable"
},
{
"path": "src/com/aixuexiao/model/StudentMessage.java",
"chars": 821,
"preview": "package com.aixuexiao.model;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * 给学生的留言\n */\npublic class Studen"
},
{
"path": "src/com/aixuexiao/service/ClassesService.java",
"chars": 2466,
"preview": "package com.aixuexiao.service;\n\nimport java.util.List;\n\nimport javax.annotation.Resource;\n\nimport org.springframework.st"
},
{
"path": "src/com/aixuexiao/service/ExamService.java",
"chars": 1565,
"preview": "package com.aixuexiao.service;\n\nimport java.util.List;\n\nimport javax.annotation.Resource;\n\nimport org.springframework.st"
},
{
"path": "src/com/aixuexiao/service/StudentService.java",
"chars": 2053,
"preview": "package com.aixuexiao.service;\n\nimport java.util.List;\n\nimport javax.annotation.Resource;\n\nimport org.springframework.st"
},
{
"path": "src/com/aixuexiao/service/WeixinService.java",
"chars": 8214,
"preview": "package com.aixuexiao.service;\n\nimport java.text.DateFormat;\nimport java.text.SimpleDateFormat;\nimport java.util.List;\n\n"
},
{
"path": "src/com/aixuexiao/util/ExamUtil.java",
"chars": 977,
"preview": "package com.aixuexiao.util;\n\nimport java.math.BigDecimal;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimpo"
},
{
"path": "src/com/aixuexiao/util/WeixinUtil.java",
"chars": 5029,
"preview": "package com.aixuexiao.util;\n\n\nimport java.io.InputStream;\nimport java.io.Writer;\nimport java.math.BigInteger;\nimport jav"
},
{
"path": "src/com/aixuexiao/web/controller/ClassesController.java",
"chars": 5411,
"preview": "package com.aixuexiao.web.controller;\r\n\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\n\r\nimport javax.annotation.Res"
},
{
"path": "src/com/aixuexiao/web/controller/ExamController.java",
"chars": 2457,
"preview": "package com.aixuexiao.web.controller;\r\n\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\n\r\nimport javax.annotation.Res"
},
{
"path": "src/com/aixuexiao/web/controller/LoginController.java",
"chars": 1347,
"preview": "package com.aixuexiao.web.controller;\r\n\r\n\r\nimport javax.servlet.http.HttpServletRequest;\r\n\r\nimport org.springframework.s"
},
{
"path": "src/com/aixuexiao/web/controller/StudentController.java",
"chars": 3433,
"preview": "package com.aixuexiao.web.controller;\r\n\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\n\r\nimport javax.annotation.Res"
},
{
"path": "src/com/aixuexiao/web/controller/WeixinController.java",
"chars": 5394,
"preview": "package com.aixuexiao.web.controller;\r\n\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimpo"
},
{
"path": "src/com/aixuexiao/web/interceptor/ManagerInterceptor.java",
"chars": 1103,
"preview": "package com.aixuexiao.web.interceptor;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServ"
},
{
"path": "src/db.properties",
"chars": 259,
"preview": "db.read.database=app_aixuexiao\ndb.read.host=r.rdc.sae.sina.com.cn\ndb.read.port=3307\ndb.read.userName=ak\ndb.read.password"
},
{
"path": "src/log4j.properties",
"chars": 260,
"preview": "log4j.rootLogger=INFO,console\r\nlog4j.appender.console=org.apache.log4j.ConsoleAppender\r\nlog4j.appender.console.layout=or"
},
{
"path": "src/spring.xml",
"chars": 4969,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n xmlns:xsi=\"http"
},
{
"path": "src/sqlMapConfig.xml",
"chars": 2509,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \r\n<!DOCTYPE configuration PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \r\n\"http:/"
}
]
// ... and 29 more files (download for full content)
About this extraction
This page contains the full source code of the zhiyuncloud/aixuexiao GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 101 files (150.8 KB), approximately 46.8k tokens, and a symbol index with 281 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.