Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现

目录

  • 一、 题目选择(题目、选题意义)
  • 二、设计目的
    • 1.初衷
    • 2、结合实际
    • 3、工具
  • 三、 总体设计(概要设计)
    • 1、数据库设计
    • 2.前端设计
  • 四、重要模块详细设计
    • 1.框架设计
    • 2.后台控制程序设计
    • 3.前端数据处理设计
    • 4.后台数据库链接文件
  • 五、运行截图
  • 总结


一、 题目选择(题目、选题意义)

1、题目:学生成绩管理系统
2、选题意义
学生成绩管理系统是将学生成绩整理、记录、分析的全过的主体体现。学生成绩记录是学生成绩管理系统的中心环节,对学校教学管理非常要必要,方便学校对近期教师教学质量进行评价和对教师的评级,同时也对学生的学习情况做出判断进而得出应对措施。

二、设计目的

1.初衷

为了巩固所学的javaEE的知识,培养更好的编程技能,和良好的编程习惯。

2、结合实际

更好应对社会需求,为以后就业打下基础,方便与社会接轨。

3、工具

① 编程环境: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

三、 总体设计(概要设计)

1、数据库设计

(1)用户登录注册表user设计
在这里插入图片描述

Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第1张图片

(2)记录用户对应关系表userandrole设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第2张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第3张图片
(3)学生成绩表student_score的设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第4张图片

Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第5张图片
(4)学生信息表student_information设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第6张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第7张图片
(5)学生管理表student_admin设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第8张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第9张图片
(6)角色权限表roleandpermissions的设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第10张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第11张图片
(7)角色表role设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第12张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第13张图片
(8)权限表permission设计
在这里插入图片描述
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第14张图片

2.前端设计

(1)CSS样式设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第15张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第16张图片
Css样式中包含网页所用字体样式、大小、颜色、网页的尺寸、网页的位置等

(2)JS脚本设计
在这里插入图片描述
JS脚本中包含网页的动态样式和各种效果特性等
(3)网页设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第17张图片
其中包含用户登录的页面,和主页面,学生信息展示的页面,成绩展示的页面和信息录取页面等
3.后台设计
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第18张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第19张图片
Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第20张图片
后台设计中包含了链接、读取、修改、添加、删除MySQL数据库的脚本文件和ssm框架与各种仓库归档文件,和读取日志的文件等。

四、重要模块详细设计

1.框架设计

(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>

2.后台控制程序设计

(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);
}

3.前端数据处理设计

(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)
  • 4.后台数据库链接文件

    在这里插入图片描述

    五、运行截图

    (1)主页登录、注册页
    Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第21张图片
    Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第22张图片
    (2)添加学车成绩页面
    Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第23张图片
    (3)查看、修改、删除学生成绩页面其中修改、删除权限归管理员用户所有
    Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第24张图片
    Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第25张图片
    Java EE应用开发-基于SSM的学生成绩管理系统的设计与实现_第26张图片

    总结

    不知不觉一个月过去了,JAVAEE 也学完了,自我总结一下一个月的成果。
    学习的过程除了纠结还是纠结,纠结于循环套循环;纠结于方法里调用方法;纠结于这个线程启动另外一个线程;纠结于类中类;等等。。。一个月就这么纠结过来了。
    总结以下几点供新手参考:
    一、学习JAVA 说难也不难,说易也不易,代码不是重点,思维才是首要的;
    二、学习JAVA 要多看看别人的代码,多多练习,有时候你觉得很难的问题,其实是你的思维短路了,看 了一下别人的代码,我擦 原来这么简单。。
    三、JAVA里面 面向对象 这章很重要,为后面的课程打基础的,多线程,IO流是难点

    你可能感兴趣的:(课程设计,java,spring,javaee,程序设计)