1、题目:学生成绩管理系统
2、选题意义
学生成绩管理系统是将学生成绩整理、记录、分析的全过的主体体现。学生成绩记录是学生成绩管理系统的中心环节,对学校教学管理非常要必要,方便学校对近期教师教学质量进行评价和对教师的评级,同时也对学生的学习情况做出判断进而得出应对措施。
为了巩固所学的javaEE的知识,培养更好的编程技能,和良好的编程习惯。
更好应对社会需求,为以后就业打下基础,方便与社会接轨。
① 编程环境:win10
② 编程语言:jdk-8u251-windows-x64.exe
③ 编程软件:Eclipse IDE for Enterprise Java Developers - 2020-03;apache-maven-3.6.3
④ 服务器软件:Apache Tomcat 9.0
⑤ 数据库软件:mysql-5.7.20-winx64;Navicat for MySQL
(2)记录用户对应关系表userandrole设计
(3)学生成绩表student_score的设计
(4)学生信息表student_information设计
(5)学生管理表student_admin设计
(6)角色权限表roleandpermissions的设计
(7)角色表role设计
(8)权限表permission设计
(1)CSS样式设计
Css样式中包含网页所用字体样式、大小、颜色、网页的尺寸、网页的位置等
(2)JS脚本设计
JS脚本中包含网页的动态样式和各种效果特性等
(3)网页设计
其中包含用户登录的页面,和主页面,学生信息展示的页面,成绩展示的页面和信息录取页面等
3.后台设计
后台设计中包含了链接、读取、修改、添加、删除MySQL数据库的脚本文件和ssm框架与各种仓库归档文件,和读取日志的文件等。
(1)所需jar包(pom.xml)及pom.xml设计
<!-- jar包的版本-->
<spring.version>4.3.9.RELEASE</spring.version>
<aspectj.version>1.6.11</aspectj.version>
<junit.version>4.12</junit.version>
<mysql.version>5.1.38</mysql.version>
<mybatis.version></mybatis.version>
<mybatis-spring.version>1.3.1</mybatis-spring.version>
<mybatis.version>3.4.4</mybatis.version>
<jstl.version>1.2</jstl.version>
<jackson.version>1.9.13</jackson.version>
<fastjson.version>1.2.46</fastjson.version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${
spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${
spring.version}</version>
</dependency>
<!-- springframe end -->
<!--mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${
mysql.version}</version>
</dependency>
<!--使用AspectJ方式注解需要相应的包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${
aspectj.version}</version>
</dependency>
<!--使用AspectJ方式注解需要相应的包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${
aspectj.version}</version>
</dependency>
<!-- batis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${
mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${
mybatis.version}</version>
</dependency>
<!-- json所需jar start -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${
jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${
jackson.version}</version>
</dependency>
<!-- json所需jar end -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<!-- 不指定单元测试,节约时间 -->
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<!-- 指定在package命令时执行 -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
(2)spring.xml设计
<!-- 可实现json字符串自动转化为实体类 -->
<mvc:annotation-driven />
<!-- 实体 json 自动映射转化 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 启用Spring对基于@AspectJ aspects的配置支持 -->
<!-- 激活自动代理功能 -->
<aop:aspectj-autoproxy />
<!-- 事务管理 注解开启-->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- Initialization for data source -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="" />
<property name="username" value="" />
<property name="password" value="" />
</bean>
<!-- Initialization for TransactionManager -->
<!-- 开启事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- mybatis的配置开始 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.mdy.student.bean" />
<!-- mybatis的设置-->
<property name="configLocation" value="classpath:orm/mybatis-config.xml" />
<!-- mapper类的配置文件的自动装载-->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mdy.student.mapper" />
</bean>
<!-- mybatis的配置结束 -->
(3)web.xml主要内容
<!-- 上下文监听器 不启用spring自动注入可能会失败 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>Student</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- servlet的配置文件加载 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- spring mvc 的配置-->
<param-value>classpath*:spring/mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Student</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(4)mvc-config.xml设计
<mvc:annotation-driven/>
<context:component-scan base-package="com.mdy.student.web" />
<!-- js,css等静态文件的配置,否则会被spring的过滤器拦截-->
<mvc:resources mapping="/js/**" location="/resources/js/" cache-period="#{60 * 60}" />
<mvc:resources mapping="/css/**" location="/resources/css/" cache-period="#{60 * 60}" />
<!--<mvc:default-servlet-handler />-->
<!-- jsp页面资源的访问配置,使用spring mvc时直接return jsp文件名-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀配置-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀配置-->
<property name="suffix" value=".jsp"/>
</bean>
(1)页码Java文件Page.java设计
public class Page<T> {
private int index;//mybatis在分页时所需的下标
private int pageNum;// 设置完页码后要设置总数据量才计算start和end
private int pageTotal;//总页数
public static final int pageMax = 15;//一页所显示的数据量
private long totalData;//总数据量
private int start;//分页栏的起始数
private int end;//分页栏的终止数
private List<T> list;//查询得到的数据
//搜索栏所需的字段
private String id;
private String name;
private char level;
private String scoreN;
private String sortType;
private String sort;
private double scoreU;// 左
private double scoreD;// 右
public Page() {
this.scoreU = 0;
this.scoreD = 100;
this.pageNum = 1;
}
//设置总数据量的同时计算分页时起始和终止量
public void setTotalDate(long totalData) {
int t = 1;
if ((int) totalData % pageMax == 0) {
t = 0;
}
this.pageTotal = (int) (totalData / pageMax + t);
this.totalData = totalData;
this.start = pageNum - 2;
if (this.start <= 0) {
this.start = 1;
}
this.end = this.start + 4;
if (this.end >= pageTotal) {
this.end = pageTotal;
}
}
// 设置页数时计算当前数据下标
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
this.index = (this.pageNum - 1) * pageMax;
}
(2)控制层设计
//produces表明返回格式为json,consumes表明接收数据为json,实际上接收表单数据直接用spring自带的自动类型转化会更方便,用json需要额外的配置
@RequestMapping(value = "/searchStudentJson", method = RequestMethod.POST, produces = "application/json",consumes="application/json")
//表明返回json格式的数据
@ResponseBody
public Page<Student> searchStudentJson(@RequestBody Page<Student> pagebean, ModelMap model) {
//返回一个Page对象
return studentService.searchStudent(pagebean);
}
(1)前端数据处理(jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link href="../css/main.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查看成绩</title>
<script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../js/resetForm.js"></script>
<script type="text/javascript" src="../js/ajaxSetViewData.js"></script>
<scr success : function(result) {
createTable(result)
initPage(result)ipt type="text/javascript">
//为了使用el,只能将js写在外面
function search(number) {
var json = {
};
//将表单数据转化为json数组
var data = $('#form').serializeArray();
//将json数组转化为json,否则控制层会报错,控制层的修改操作博主并没有找到,只能在js处解决
$.each(data, function() {
if (json[this.name]) {
if (!json[this.name].push) {
json[this.name] = [ json[this.name] ];
}
json[this.name].push(this.value || '');
} else {
json[this.name] = this.value || '';
}
})
json.pageNum = number
$.ajax({
type : "POST",
dataType : "json",
//contentType : "application/json",
url : "${pageContext.request.contextPath}/manager/searchStudentJson",
data : JSON.stringify(json),
//$('#form').serialize() 若不使用json,直接使用这个就行了
//resetForm(result)
$('#number').html(result.pagNum)
$('#numberMax').html(result.pageTotal)
},
error : function() {
alert("出错")
}
});
}
</script>
<script type="text/javascript" src="../js/CheckPage.js"></script>
</head>
<body onload="search(1)">
<%@include file="主页.jsp"%>
<div>
<form action="searchStudent" method="post" id="form">
<%@include file="searchBar.jsp"%>
<%@include file="ViewData(JSON).jsp"%>
<%@include file="page.jsp"%>
</form>
</div>
</body>
</html>
(2)动态显示表格数据和分页栏的js设计
function checkdel(){
return confirm("真的要删除吗");
}
function createTable(result) {
$("#body").html("")
for (var i = 0; i < result.list.length; ++i) {
var s = ""
+ result.list[i].id
+ " "
+ ""
+ result.list[i].name
+ " "
+ ""
+ result.list[i].chinese
+ " "
+ ""
+ result.list[i].math
+ " "
+ ""
+ result.list[i].english
+ " "
+ ""
+ result.list[i].per
+ " "
+ ""
+ result.list[i].homework
+ " "
+ ""
+ result.list[i].level
+ " "
+ "编辑 删除 "
$("#body").append(s)
}
}
function initPage(result) {
var s = ""
$('#tip').html(s)
var t;
if (parseInt(result.pageNum) - 1 < 0) {
s += "上一页"
} else {
t = parseInt(result.pageNum) - 1
s += "" + "上一页" + ""
}
for (t = parseInt(result.start); t <= parseInt(result.end); t++) {
if (t != parseInt(result.pageNum)) {
s += "[" + t + "]"
} else {
s += "[" + t + "]"
}
}
if (parseInt(result.pageNum) + 1 > parseInt(result.pageTotal)) {
s += "下一页"
} else {
t = parseInt(result.pageNum) + 1
s += "" + "下一页" + ""
}
s += "尾页"
$('#tip').append(s)
(1)主页登录、注册页
(2)添加学车成绩页面
(3)查看、修改、删除学生成绩页面其中修改、删除权限归管理员用户所有
不知不觉一个月过去了,JAVAEE 也学完了,自我总结一下一个月的成果。
学习的过程除了纠结还是纠结,纠结于循环套循环;纠结于方法里调用方法;纠结于这个线程启动另外一个线程;纠结于类中类;等等。。。一个月就这么纠结过来了。
总结以下几点供新手参考:
一、学习JAVA 说难也不难,说易也不易,代码不是重点,思维才是首要的;
二、学习JAVA 要多看看别人的代码,多多练习,有时候你觉得很难的问题,其实是你的思维短路了,看 了一下别人的代码,我擦 原来这么简单。。
三、JAVA里面 面向对象 这章很重要,为后面的课程打基础的,多线程,IO流是难点