基于ssm框架的Java Web 学生成绩/信息管理系统
基于ssm框架的Java Web 学生成绩/信息管理系统
[![]()
-
学生成绩管理系统/学生信息管理系统
-
学生成绩管理系统/学生信息管理系统
基于ssm框架开发的,使用Eclipse,连接MySQL数据库,存储学生的身份信息、成绩、课程信息,管理员的身份信息。
部分效果图在最下面。
一、数据库环境搭建
创建user表
CREATE TABLE `user` ( `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `password` varchar(20) DEFAULT NULL, PRIMARY KEY (`name`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建student表
CREATE TABLE `student` ( `studentId` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `studentName` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `studentSex` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `studentAge` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '', `studentBifthday` date DEFAULT NULL, `studentDept` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `studentMajor` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `studentClassId` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `studentCellPhone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `studentpad` varchar(20) DEFAULT '123456', PRIMARY KEY (`studentId`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建score表
CREATE TABLE `score` ( `id` int NOT NULL AUTO_INCREMENT, `studentId` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学号', `courseId` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '课程号', `score` varchar(20) NOT NULL COMMENT '成绩', PRIMARY KEY (`id`,`studentId`,`courseId`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=173 DEFAULT CHARSET=utf8;
创建course表
CREATE TABLE `course` ( `id` int NOT NULL AUTO_INCREMENT, `courseId` varchar(10) NOT NULL COMMENT '课程号', `courseName` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '课程名', `schoolYear` varchar(255) NOT NULL COMMENT '学年', `creditHour` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学分', `teacher` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任课老师', PRIMARY KEY (`id`,`courseId`,`courseName`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
二、ssm框架搭建
引入Spring框架所需要的包,Mybatis框架所需要的包,Mybatis与Spring整合的中间包,数据源驱动包,DBCP数据源和连接池需要的包,Spring MVC框架所需要的包。

在项目的src目录下创建log4j.properties文件
# Global logging configurationlog4j.rootLogger=ERROR, stdout# MyBatis logging configuration...log4j.logger.com.itheima=DEBUG# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
在src目录下创建db.properties 文件。编写数据库相关属性和对应值。
jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/studentinfo?serverTimezone=UTCjdbc.username=rootjdbc.password=123456jdbc.maxTotal=30jdbc.maxIdle=10jdbc.initialSize=5
在src目录下,创建Spring的配置文件applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd "> <!-- 读取db.properties文件 --> <context:property-placeholder location="classpath:db.properties" /> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxTotal" value="${jdbc.maxTotal}" /> <property name="maxIdle" value="${jdbc.maxIdle}" /> <property name="initialSize" value="${jdbc.initialSize}" /> </bean> <!-- 事物管理器 依赖于数据源 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 开启事物注解 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置mybatis工厂 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 指定核心配置文件位置 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chen.dao"></property> </bean> <!-- 扫描Service --> <context:component-scan base-package="com.chen.service"></context:component-scan></beans>
在src目录下,创建MyBatis的核心配置文件mybatis-config.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> <!-- 配置别名 --> <typeAliases> <package name="com.chen.pojo" /> </typeAliases></configuration>
在src目录下,创建SpringMVC的配置文件springmvc-config.xml,声明中引入spring-context,使用context:component-scan元素指定需要的类包。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd "> <context:component-scan base-package="com.chen.controller"> </context:component-scan> <mvc:resources location="/js/" mapping="/js/**" /> <mvc:resources location="/css/" mapping="/css/**" /> <mvc:resources location="/fonts/" mapping="/fonts/**" /> <mvc:resources location="/img/" mapping="/img/**" /> <!-- 定义视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 设置前缀 --> <property name="prefix" value="/jsp/"></property> <!-- 设置后缀 --> <property name="suffix" value=".jsp"></property> </bean> <mvc:annotation-driven></mvc:annotation-driven></beans>
修改web.xml,在文件配置SpringMVC前端控制器DispatcherServlet
<!-- 配置加载Spring的配置文件 通过监听器实现的--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置springmvc前置核心控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
创建pojo包
在src目录下,创建一个com.chen.pojo包,在该包下创建持久化类User、Student、Score、Course
//User.javapackage com.chen.pojo;public class User { private String name; private String password; public User() { super(); } public User(String name, String password) { super(); this.name = name; this.password = password; } public User(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [name=" + name + ", password=" + password + "]"; }}
//Student.javapackage com.chen.pojo;public class Student { private String studentId; private String studentName; private String studentSex; private String studentAge; private String studentBifthday; private String studentDept; private String studentMajor; private String studentClassId; private String studentCellPhone; private String studentPad; public Student() { super(); } public Student(String studentId, String studentName, String studentSex, String studentAge, String studentBifthday, String studentDept, String studentMajor, String studentClassId, String studentCellPhone,String studentPad) { super(); this.studentId = studentId; this.studentName = studentName; this.studentSex = studentSex; this.studentAge = studentAge; this.studentBifthday = studentBifthday; this.studentDept = studentDept; this.studentMajor = studentMajor; this.studentClassId = studentClassId; this.studentCellPhone = studentCellPhone; this.studentPad = studentPad; } public String getStudentId() { return studentId; } public void setStudentId(String studentId) { this.studentId = studentId; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public String getStudentSex() { return studentSex; } public void setStudentSex(String studentSex) { this.studentSex = studentSex; } public String getStudentAge() { return studentAge; } public void setStudentAge(String studentAge) { this.studentAge = studentAge; } public String getStudentDept() { return studentDept; } public void setStudentDept(String studentDept) { this.studentDept = studentDept; } public String getStudentMajor() { return studentMajor; } public void setStudentMajor(String studentMajor) { this.studentMajor = studentMajor; } public String getStudentClassId() { return studentClassId; } public void setStudentClassId(String studentClassId) { this.studentClassId = studentClassId; } public String getStudentCellPhone() { return studentCellPhone; } public void setStudentCellPhone(String studentCellPhone) { this.studentCellPhone = studentCellPhone; } public String getStudentBifthday() { return studentBifthday; } public void setStudentBifthday(String studentBifthday) { this.studentBifthday = studentBifthday; } public String getStudentPad() { return studentPad; } public void setStudentPad(String studentPad) { this.studentPad = studentPad; } @Override public String toString() { return "Student [studentId=" + studentId + ", studentName=" + studentName + ", studentSex=" + studentSex + ", studentAge=" + studentAge + ", studentBifthday=" + studentBifthday + ", studentDept=" + studentDept + ", studentMajor=" + studentMajor + ", studentClassId=" + studentClassId + ", studentCellPhone=" + studentCellPhone + ", studentPad=" + studentPad + "]"; }}
//Score.javapackage com.chen.pojo;public class Score { private Integer id; private String studentId; private String courseId; private String score; private Student student; private Course course; public Score() { super(); } public Score(Integer id,String studentId, String courseId, String score, Student student, Course course) { super(); this.id = id; this.studentId = studentId; this.courseId = courseId; this.score = score; this.student = student; this.course = course; } public String getStudentId() { return studentId; } public void setStudentId(String studentId) { this.studentId = studentId; } public String getCourseId() { return courseId; } public void setCourseId(String courseId) { this.courseId = courseId; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public String toString() { return "Score [id=" + id + ", studentId=" + studentId + ", courseId=" + courseId + ", score=" + score + ", student=" + student + ", course=" + course + "]"; } }
//course.javapackage com.chen.pojo;public class Course { private String id; private String courseId; //课程号 private String courseName; //课程名 private String schoolYear; //学年 private String teacher; //任课教师 private String creditHour; //学分 public Course() { super(); } public Course(String id, String courseId, String courseName, String schoolYear, String teacher, String creditHour) { super(); this.id = id; this.courseId = courseId; this.courseName = courseName; this.schoolYear = schoolYear; this.teacher = teacher; this.creditHour = creditHour; } public String getSchoolYear() { return schoolYear; } public void setSchoolYear(String schoolYear) { this.schoolYear = schoolYear; } public String getTeacher() { return teacher; } public void setTeacher(String teacher) { this.teacher = teacher; } public String getCreditHour() { return creditHour; } public void setCreditHour(String creditHour) { this.creditHour = creditHour; } public String getCourseId() { return courseId; } public void setCourseId(String courseId) { this.courseId = courseId; } public String getCourseName() { return courseName; } public void setCourseName(String courseName) { this.courseName = courseName; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public String toString() { return "Course [id=" + id + ", courseId=" + courseId + ", courseName=" + courseName + ", schoolYear=" + schoolYear + ", teacher=" + teacher + ", creditHour=" + creditHour + "]"; } }
创建dao层
在src目录下,创建一个com.chen.dao包,并在包中创建如下图的接口和xml文件

LoginMapper.java
package com.chen.dao;import com.chen.pojo.Student;import com.chen.pojo.User;public interface LoginMapper { public User findUserByName(String name); public Student findUserById(String studentId);}
LoginMapper.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.chen.dao.LoginMapper"> <select id="findUserByName" parameterType="String" resultType="user"> select * from user where name=#{name} </select> <select id="findUserById" parameterType="String" resultType="student"> select * from student where studentId=#{studentId} </select></mapper>
StudentMapper.java
package com.chen.dao;import java.util.HashMap;import java.util.List;import org.apache.ibatis.annotations.Param;import com.chen.pojo.Student;public interface StudentMapper { //添加学生 public int addStudentInfo(Student student); //更新学生 public int updateStudentInfo(Student student); //获取要修改的学生信息 public Student queryStudentById(String id); //删除学生 public int deleteStudentInfoById(@Param("studentId") String id); //查询学生 public List<Student> findByPage(HashMap<String,Object> map); //查询总条数 int selectCount(@Param("studentId")String id); //重置学生密码 public int restStudent(@Param("studentId")String id); //更新密码 public int changePwd(@Param("studentId")String studentId, @Param("newPass")String newPass); }
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.chen.dao.StudentMapper"> <resultMap id="BaseResultMap" type="student"> <id column="studentId" property="studentId" jdbcType="VARCHAR" /> <result column="studentName" property="studentName" jdbcType="VARCHAR" /> <result column="studentSex" property="studentSex" jdbcType="VARCHAR" /> <result column="studentAge" property="studentAge" jdbcType="VARCHAR" /> <result column="studentBifthday" property="studentBifthday" jdbcType="VARCHAR" /> <result column="studentDept" property="studentDept" jdbcType="VARCHAR" /> <result column="studentMajor" property="studentMajor" jdbcType="VARCHAR" /> <result column="studentClassId" property="studentClassId" jdbcType="VARCHAR" /> <result column="studentCellPhone" property="studentCellPhone" jdbcType="VARCHAR" /> </resultMap> <sql id="Base_Column_List"> studentId,studentName,studentSex,studentAge,studentBifthday,studentDept,studentMajor,studentClassId,studentCellPhone </sql> <!-- 添加学生信息 --> <insert id="addStudentInfo" parameterType="student"> INSERT into student(studentId,studentName,studentSex,studentAge,studentBifthday,studentDept,studentMajor,studentClassId,studentCellPhone) values (#{studentId}, #{studentName}, #{studentSex},#{studentAge},#{studentBifthday},#{studentDept},#{studentMajor},#{studentClassId},#{studentCellPhone}) </insert> <!-- 通过学号查询(更新) --> <select id="queryStudentById" parameterType="String" resultType="student"> select * from student where studentId=#{id} </select> <!-- 更新学生信息 --> <update id="updateStudentInfo" parameterType="student"> update student <set> <if test="studentName!=null and studentName!=''"> studentName=#{studentName}, </if> <if test="studentSex!=null and studentSex!=''"> studentSex=#{studentSex}, </if> <if test="studentAge!=null and studentAge!=''"> studentAge=#{studentAge}, </if> <if test="studentBifthday!=null and studentBifthday!=''"> studentBifthday=#{studentBifthday}, </if> <if test="studentDept!=null and studentDept!=''"> studentDept=#{studentDept}, </if> <if test="studentMajor!=null and studentMajor!=''"> studentMajor=#{studentMajor}, </if> <if test="studentClassId!=null and studentClassId!=''"> studentClassId=#{studentClassId}, </if> <if test="studentCellPhone!=null and studentCellPhone!=''"> studentCellPhone=#{studentCellPhone}, </if> </set> where studentId= #{studentId} </update> <!-- 删除学生信息 --> <delete id="deleteStudentInfoById" parameterType="String"> delete from student where studentId=#{studentId} </delete> <!-- 查询学生信息(根据分页数据start 和size查询数据) --> <select id="findByPage" parameterType="Map" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from student <where> <if test="studentId!=null and studentId!='' "> studentId like "%"#{studentId}"%" </if> </where> <if test="start!=null and size!=null"> limit #{start},#{size} </if> </select> <!-- 查询用户记录总数 --> <select id="selectCount" parameterType="String" resultType="int"> select count(*) from student <where> <if test="studentId!=null and studentId!='' "> studentId like "%"#{studentId}"%" </if> </where> </select> <!-- 重置学生密码 --> <update id="restStudent" parameterType="String"> update student set studentPad = 123456 where studentId = #{studentId} </update> <!-- 更新密码 --> <update id="changePwd" parameterType="String"> update student set studentPad = #{newPass} where studentId = #{studentId} </update></mapper>
ScoreMapper.java
package com.chen.dao;import java.util.HashMap;import java.util.List;import org.apache.ibatis.annotations.Param;import com.chen.pojo.Score;public interface ScoreMapper { // 获取要更新成绩的信息 public Score queryScoreById(Score score); // 查询成绩 List<Score> findByPage(HashMap<String,Object> map); // 添加成绩 public int addScoreInfo(Score score); // 更新成绩 public int updateScoreInfo(Score score); // 删除成绩 public int deleteScoreInfoById(String id); //获取总条数 public int selectCount(@Param("id")String id);}
ScoreMapper.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.chen.dao.ScoreMapper"> <select id="queryScoreById" parameterType="score" resultType="score"> select * from score where courseId=#{courseId} and studentId=#{studentId} </select> <insert id="addScoreInfo" parameterType="score"> INSERT into score(studentId,courseId,score) values (#{studentId}, #{courseId},#{score}) </insert> <update id="updateScoreInfo" parameterType="score"> update score set score=#{score} where studentId= #{studentId} and courseId= #{courseId} </update> <delete id="deleteScoreInfoById" parameterType="String"> delete from score where id=#{id} </delete> <select id="findByPage" parameterType="map" resultMap="BaseResultMap"> select * from score LEFT JOIN student ON student.studentId = score.studentId LEFT JOIN course ON score.courseId = course.courseId <where> <if test="id!=null and id!='' "> score.studentId like "%"#{id}"%" </if> </where> <if test="start!=null and size!=null"> limit #{start},#{size} </if> </select> <resultMap id="BaseResultMap" type="score"> <id column="id" property="id"/> <result column="studentId" property="studentId"/> <result column="courseId" property="courseId"/> <result column="score" property="score" /> <association property="student" javaType="student"> <id column="studentId" property="studentId" jdbcType="VARCHAR" /> <result column="studentName" property="studentName" jdbcType="VARCHAR" /> <result column="studentSex" property="studentSex" jdbcType="VARCHAR" /> <result column="studentAge" property="studentAge" jdbcType="VARCHAR" /> <result column="studentBifthday" property="studentBifthday" jdbcType="VARCHAR" /> <result column="studentDept" property="studentDept" jdbcType="VARCHAR" /> <result column="studentMajor" property="studentMajor" jdbcType="VARCHAR" /> <result column="studentClassId" property="studentClassId" jdbcType="VARCHAR" /> <result column="studentCellPhone" property="studentCellPhone" jdbcType="VARCHAR" /> </association> <association property="course" javaType="course"> <id column="id" property="id" jdbcType="VARCHAR" /> <result column="courseId" property="courseId" jdbcType="VARCHAR" /> <result column="courseName" property="courseName" jdbcType="VARCHAR" /> <result column="schoolYear" property="schoolYear" jdbcType="VARCHAR" /> <result column="teacher" property="teacher" jdbcType="VARCHAR" /> <result column="creditHour" property="creditHour" jdbcType="VARCHAR" /> </association> </resultMap> <!-- 查询课程记录总数 --> <select id="selectCount" parameterType="String" resultType="int"> <!-- select count(*) from score,student,course where score.courseId=course.courseId and student.studentId = score.studentId --> select count(*) from score LEFT JOIN student ON student.studentId = score.studentId LEFT JOIN course ON score.courseId = course.courseId <where> <if test="id!=null and id!=''"> score.studentId like "%"#{id}"%" </if> </where> </select></mapper>
CourseMapper.java
package com.chen.dao;import java.util.HashMap;import java.util.List;import org.apache.ibatis.annotations.Param;import com.chen.pojo.Course;public interface CourseMapper { //获取要更新课程的信息 public Course queryCourseById(@Param("courseId") String id); //添加课程 public int addCourseInfo(Course course); // 更新课程 public int updateCourseInfo(Course course); // 删除课程 public int deleteCourseInfoById(@Param("courseId")String id); //查询课程 public List<Course> findByPage(HashMap<String,Object> map); //查询总条数 public int selectCount(@Param("courseId")String id); //通过学号查询课程 public List<Course> query(HashMap<String,Object> map); //查询总条数 public int selectcount(String id); //查询课程 public Course query1(String id);}
CourseMapper.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.chen.dao.CourseMapper"> <resultMap id="BaseResultMap" type="course"> <id column="id" property="id" jdbcType="VARCHAR" /> <result column="courseId" property="courseId" jdbcType="VARCHAR" /> <result column="courseName" property="courseName" jdbcType="VARCHAR" /> <result column="schoolYear" property="schoolYear" jdbcType="VARCHAR" /> <result column="teacher" property="teacher" jdbcType="VARCHAR" /> <result column="creditHour" property="creditHour" jdbcType="VARCHAR" /> </resultMap> <select id="queryCourseById" parameterType="String" resultType="course"> select * from course where courseId=#{courseId} </select> <insert id="addCourseInfo" parameterType="course"> INSERT into course(courseId,courseName,schoolYear,teacher,creditHour) values (#{courseId}, #{courseName},#{schoolYear},#{teacher},#{creditHour}) </insert> <update id="updateCourseInfo" parameterType="course"> update course set courseName=#{courseName},schoolYear=#{schoolYear},teacher=#{teacher},creditHour=#{creditHour} where courseId= #{courseId} </update> <delete id="deleteCourseInfoById" parameterType="String"> delete from course where courseId=#{courseId} </delete> <!-- 查询课程信息(根据分页数据start 和size查询数据) --> <select id="findByPage" parameterType="Map" resultMap="BaseResultMap"> select * from course <where> <if test="courseId!=null and courseId!='' "> courseId like "%"#{courseId}"%" </if> </where> <if test="start!=null and size!=null"> limit #{start},#{size} </if> </select> <!-- 查询课程记录总数 --> <select id="selectCount" parameterType="String" resultType="int"> select count(*) from course <where> <if test="courseId!=null and courseId!='' "> courseId like "%"#{courseId}"%" </if> </where> </select> <select id="selectcount" parameterType="String" resultType="int"> select count(*) from course ,score WHERE score.courseId=course.courseId AND score.studentId=#{id} </select> <select id="query" parameterType="String" resultType="course"> SELECT course.courseId, course.courseName, course.creditHour, course.schoolYear, course.teacher FROM score,course WHERE score.courseId=course.courseId AND score.studentId=#{id} <if test="start!=null and size!=null"> limit #{start},#{size} </if> </select> <select id="query1" parameterType="String" resultType="Course"> select * from course where courseId=#{id} </select></mapper>
创建service包
在src目录下,创建一个com.chen.service包,并在包中创建如下图所示接口与实现类。

LoginService.java
package com.chen.service;import com.chen.pojo.Student;public interface LoginService { boolean login(String name,String password); boolean studentlogin(String name,String password); public Student queryStudentById(String loginUser); public int updateStudentPad(String id,String newPad);}
LoginServiceImpl.java
package com.chen.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.chen.dao.LoginMapper;import com.chen.dao.StudentMapper;import com.chen.pojo.Student;import com.chen.pojo.User;@Servicepublic class LoginServiceImpl implements LoginService { @Autowired private LoginMapper loginMapper; @Autowired private StudentMapper studentMapper; public void setStudentMapper(StudentMapper studentMapper) { this.studentMapper = studentMapper; } public void setUserMapper(LoginMapper loginMapper) { this.loginMapper = loginMapper; } @Override public boolean login(String name, String password) { User user = loginMapper.findUserByName(name); System.out.println(user); if (user!=null&&user.getPassword().equals(password)){ System.out.println("获取用户名密码成功"); return true; } System.out.println("获取用户名密码失败"); return false; } @Override public boolean studentlogin(String name, String password) { Student student = loginMapper.findUserById(name); System.out.println(student); if (student!=null&&student.getStudentPad().equals(password)){ System.out.println("获取用户名密码成功"); return true; } System.out.println("获取用户名密码失败"); return false; } public Student queryStudentById(String loginUser) { return studentMapper.queryStudentById(loginUser); } public int updateStudentPad(String id,String newPad) { return studentMapper.changePwd(id,newPad); } }
StudentService.java
package com.chen.service;import com.chen.pojo.Student;import com.chen.untils.PageBean;public interface StudentService { public int addStudentInfo(Student student); public int updateStudentInfo(Student student); public Student queryStudetnById(String id); public int deleteStudentInfoById(String id); public PageBean<Student> findByPage(int currentPage ,String id); public int restStudent(String id);}
StudentServiceImpl.java
package com.chen.service;import java.util.HashMap;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.chen.dao.StudentMapper;import com.chen.pojo.Student;import com.chen.untils.PageBean;@Servicepublic class StudentServiceImpl implements StudentService { //调用dao层 @Autowired private StudentMapper studentMapper; public void setStudentmapper(StudentMapper studentMapper) { this.studentMapper = studentMapper; } //添加学生信息 @Override public int addStudentInfo(Student student) { return studentMapper.addStudentInfo(student); } //查询要更新的学生信息 @Override public Student queryStudetnById(String id) { return studentMapper.queryStudentById(id); } //更新学生信息 @Override public int updateStudentInfo(Student student) { return studentMapper.updateStudentInfo(student); } //删除学生信息 @Override public int deleteStudentInfoById(String id) { return studentMapper.deleteStudentInfoById(id); } //查询全部学生信息 @Override public PageBean<Student> findByPage(int currentPage,String id) { HashMap<String,Object> map = new HashMap<String,Object>(); PageBean<Student> pageBean = new PageBean<Student>(); pageBean.setCurrPage(currentPage);//封装当前页 pageBean.setId(id); int pageSize=7;//每页显示的数据数 pageBean.setPageSize(pageSize); //封装总记录数 int totalCount = studentMapper.selectCount(id); pageBean.setTotalCount(totalCount); //封装总页数 double tc = totalCount; Double num =Math.ceil(tc/pageSize); //向上取整 pageBean.setTotalPage(num.intValue()); map.put("start",(currentPage-1)*pageSize); map.put("size", pageBean.getPageSize()); map.put("studentId",id); //封装每页显示的数据 List<Student> lists = studentMapper.findByPage(map); pageBean.setLists(lists); return pageBean; } @Override public int restStudent(String id) { return studentMapper.restStudent(id); }}
ScoreService.java
package com.chen.service;import com.chen.pojo.Score;import com.chen.untils.PageBean;public interface ScoreService { public Score queryScoreById(Score score); public PageBean<Score> findByPage(int currentPage,String id); public int addScoreInfo(Score score); public int updateScoreInfo(Score score); public int deleteScoreInfoById(String id);}
ScoreServiceImpl.java
package com.chen.service;import java.util.HashMap;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.chen.dao.ScoreMapper;import com.chen.pojo.Score;import com.chen.untils.PageBean;@Servicepublic class ScoreServiceImpl implements ScoreService { @Autowired private ScoreMapper scoreMapper; public void setScoreMapper(ScoreMapper scoreMapper) { this.scoreMapper = scoreMapper; } //获取要更新成绩的信息 @Override public Score queryScoreById(Score score) { return scoreMapper.queryScoreById(score); } //添加成绩 @Override public int addScoreInfo(Score score) { return scoreMapper.addScoreInfo(score); } //更新成绩 @Override public int updateScoreInfo(Score score) { return scoreMapper.updateScoreInfo(score); } //删除成绩 @Override public int deleteScoreInfoById(String id) { return scoreMapper.deleteScoreInfoById(id); } //查询成绩信息 @Override public PageBean<Score> findByPage(int currentPage, String id) { HashMap<String,Object> map = new HashMap<String,Object>(); PageBean<Score> pageBean = new PageBean<Score>(); pageBean.setId(id); pageBean.setCurrPage(currentPage);//封装当前页数 int pageSize=7;//每页显示数据数 pageBean.setPageSize(pageSize); //封装记录总数 int totalCount = scoreMapper.selectCount(id); pageBean.setTotalCount(totalCount); //封装总页数 double tc = totalCount; Double num =Math.ceil(tc/pageSize);//向上取整 pageBean.setTotalPage(num.intValue()); map.put("start",(currentPage-1)*pageSize); map.put("size", pageBean.getPageSize()); map.put("id",id); //封装每页显示的数据 List<Score> lists = scoreMapper.findByPage(map); System.out.println(lists); pageBean.setLists(lists); return pageBean; }}
CourseService.java
package com.chen.service;import org.apache.ibatis.annotations.Param;import com.chen.pojo.Course;import com.chen.untils.PageBean;public interface CourseService { //获取要修改的课程信息 public Course queryCourseById(String id); //查询课程 public PageBean<Course> findByPage(int currentPage,String id); //添加课程 public int addCourseInfo(Course course); //更新课程 public int updateCourseInfo(Course course); //删除课程 public int deleteCourseInfoById(@Param("courseId") String id); public PageBean<Course> query(int currentPage,String id); public Course query1(String id);}
CourseServiceImpl.java
package com.chen.service;import java.util.HashMap;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.chen.dao.CourseMapper;import com.chen.pojo.Course;import com.chen.untils.PageBean;@Servicepublic class CourseServiceImpl implements CourseService { @Autowired private CourseMapper courseMapper; public void setCourseMapper(CourseMapper courseMapper) { this.courseMapper = courseMapper; } //添加课程 @Override public int addCourseInfo(Course course) { return courseMapper.addCourseInfo(course); } //更新课程 @Override public int updateCourseInfo(Course course) { return courseMapper.updateCourseInfo(course); } //删除课程 @Override public int deleteCourseInfoById(String id) { return courseMapper.deleteCourseInfoById(id); } //获取要更新课程的信息 @Override public Course queryCourseById(String id) { return courseMapper.queryCourseById(id); } //查询课程 @Override public PageBean<Course> findByPage(int currentPage,String id) { HashMap<String,Object> map = new HashMap<String,Object>(); PageBean<Course> pageBean = new PageBean<Course>(); pageBean.setId(id); pageBean.setCurrPage(currentPage);//封装当前页数 int pageSize=7;//每页显示的数据 pageBean.setPageSize(7); //封装记录总数 int totalCount = courseMapper.selectCount(id); pageBean.setTotalCount(totalCount); //封装总页数 double tc = totalCount; Double num =Math.ceil(tc/pageSize);//向上取整 pageBean.setTotalPage(num.intValue()); map.put("start",(currentPage-1)*pageSize); map.put("size", pageBean.getPageSize()); map.put("courseId",id); //封装每页显示的数据 List<Course> lists = courseMapper.findByPage(map); pageBean.setLists(lists); return pageBean; } @Override public PageBean<Course> query(int currentPage,String id) { HashMap<String,Object> map = new HashMap<String,Object>(); PageBean<Course> pageBean = new PageBean<Course>(); pageBean.setId(id); pageBean.setCurrPage(currentPage);//封装当前页数 int pageSize=7;//每页显示的数据 pageBean.setPageSize(7); //封装记录总数 int totalCount = courseMapper.selectcount(id); pageBean.setTotalCount(totalCount); //封装总页数 double tc = totalCount; Double num =Math.ceil(tc/pageSize);//向上取整 pageBean.setTotalPage(num.intValue()); map.put("start",(currentPage-1)*pageSize); map.put("size", pageBean.getPageSize()); map.put("id",id); //封装每页显示的数据 List<Course> lists = courseMapper.query(map); pageBean.setLists(lists); return pageBean; } @Override public Course query1(String id) { return courseMapper.query1(id); }}
创建controller包
在src目录下,创建一个com.chen.controller包,在包下创建如下图

LoginController.java
package com.chen.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.chen.pojo.Student;import com.chen.pojo.User;import com.chen.service.LoginService;@Controller@RequestMapping("/login" )public class LoginController { @Autowired private LoginService loginService; @RequestMapping("/1") public String Login(Model model,User user,HttpServletRequest request,HttpServletResponse response) { if(user.getName().length()** 10) { boolean flag = loginService.studentlogin(user.getName(), user.getPassword()); //ModelAndView modelAndView = new ModelAndView(); if (flag) { HttpSession session = request.getSession(); session.setAttribute("name",user.getName()); session.setMaxInactiveInterval(6000); //modelAndView.setViewName("main1"); System.out.println("登录成功"); return "main1"; } else { //modelAndView.setViewName("login"); System.out.println("登录失败"); model.addAttribute("msg","登录失败!"); return "login"; } //return modelAndView; } else { boolean flag = loginService.login(user.getName(), user.getPassword()); //ModelAndView modelAndView = new ModelAndView(); if (flag) { HttpSession session = request.getSession(); session.setAttribute("name",user.getName()); session.setMaxInactiveInterval(6000); //modelAndView.setViewName("main"); System.out.println("登录成功"); return "main"; } else { //modelAndView.setViewName("login"); System.out.println("登录失败"); model.addAttribute("msg","登录失败!"); return "login"; } //return modelAndView; } } @RequestMapping("/userlogin") public ModelAndView UserLogin(User user ,HttpServletRequest request,HttpServletResponse response) { boolean flag = loginService.login(user.getName(), user.getPassword()); ModelAndView modelAndView = new ModelAndView(); if (flag) { HttpSession session = request.getSession(); session.setAttribute("name",user.getName()); session.setMaxInactiveInterval(6000); modelAndView.setViewName("main"); System.out.println("登录成功"); } else { modelAndView.setViewName("login"); System.out.println("登录失败"); } return modelAndView; } @RequestMapping("/userexit") public String UserExit(User user ,HttpServletRequest request,HttpServletResponse response) { HttpSession session = request.getSession(); session.setAttribute("name",user.getName()); if(user != null){ session.removeAttribute("userName"); request.setAttribute("info",null); } return "logoff"; } @RequestMapping("/updatepad") public String updatePassword(Model model,HttpServletRequest request) { HttpSession session = request.getSession(); String loginedUser = (String)session.getAttribute("name"); System.out.println(loginedUser); String oldPwd = request.getParameter("oldpass"); System.out.println(oldPwd); String newPwd = request.getParameter("newpass"); System.out.println(newPwd); Student student = loginService.queryStudentById(loginedUser); System.out.println(student); if(student.getStudentPad().equals(oldPwd)) { int r = loginService.updateStudentPad(student.getStudentId(), newPwd); if(r > 0) { model.addAttribute("msg","更新成功!"); System.out.println("更新成功!"); }else { model.addAttribute("msg","更新失败!"); System.out.println("更新失败2!"); } }else { model.addAttribute("msg","密码错误!"); System.out.println("更新失败!"); } return "updatepad"; }}
StudentController.java
package com.chen.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.chen.pojo.Student;import com.chen.service.StudentService;@Controller@RequestMapping("/studentInfo")public class StudentController { @Autowired private StudentService studentService; //查询全部 @RequestMapping("/query") public String findStudentInfo(Model model,@RequestParam(value="currentPage",defaultValue="1",required=false)int currentPage,String id ) { model.addAttribute("pagemsg",studentService.findByPage(currentPage, id)); return "studentInfo"; } //添加学生 @RequestMapping("/addstudent") public String AddStudentInfo(Student student,Model model) { Student student1 = studentService.queryStudetnById(student.getStudentId()); if(student1**null) { int rows = studentService.addStudentInfo(student); if (rows > 0) { System.out.println("成功添加" + rows + "条数据!"); model.addAttribute("msg", "添加成功!"); } else { System.out.println("ִ添加失败"); model.addAttribute("msg", "添加失败!"); } return "redirect:query"; } model.addAttribute("msg", "学号重复!"); return "addstudentinfo"; } //获取要更新的学生信息 @RequestMapping("/update") public String findStudentInfo(Student student1 , Model model) { Student student = studentService.queryStudetnById(student1.getStudentId()); System.out.println(student); model.addAttribute("student", student); return "updatestudent"; } //更新学生 @RequestMapping("/updatestudent") public String UpdateStudentinfo(Student student) { int rows = studentService.updateStudentInfo(student); if (rows > 0) { System.out.println("成功更新" + rows + "条数据!"); } else { System.out.println("ִ更新失败"); } return "redirect:query"; } @RequestMapping("/update2") public String findStudent(Student student1 , Model model) { Student student = studentService.queryStudetnById(student1.getStudentId()); System.out.println(student); model.addAttribute("student", student); return "updatestudent2"; } @RequestMapping("/updatestudent2") public String UpdateStudent(Student student) { int rows = studentService.updateStudentInfo(student); if (rows > 0) { System.out.println("成功更新" + rows + "条数据!"); } else { System.out.println("ִ更新失败"); } return "redirect:queryByName"; } //删除学生 @RequestMapping("/deletestudent") @ResponseBody public String DeleteStudent(String id) { //String studentId = request.getParameter("studentId"); int rows = studentService.deleteStudentInfoById(id); if (rows > 0) { System.out.println("成功删除" + rows + "条数据!"); return "OK"; } else { System.out.println("ִ删除失败"); return "FAIL"; } //return "redirect:query"; } //批量删除 @RequestMapping("/delselected") public String DelSelectedServlet(HttpServletRequest request) { String[] name = request.getParameterValues("uid"); int rs = 0; for(int i=0;i<name.length;i++){ rs = rs + studentService.deleteStudentInfoById(name[i]); } if (rs > 0) { System.out.println("成功删除" + rs + "条数据!"); } else { System.out.println("ִ删除失败"); } return "redirect:query"; } //重置学生密码 @RequestMapping("/rest") @ResponseBody public String RestServlet(String id) { int rows = studentService.restStudent(id); if (rows > 0) { System.out.println("成功重置" + rows + "条数据!"); return "OK"; }else{ System.out.println("ִ重置失败"); return "FAIL"; } //return "redirect:query"; } //通过学号获取学生信息 @RequestMapping("/queryByName") public String QueryById(Model model,HttpServletRequest request) { HttpSession session = request.getSession(); String id = (String)session.getAttribute("name"); System.out.println(id); model.addAttribute("student",studentService.queryStudetnById( id)); return "user"; }}
ScoreController.java
package com.chen.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.chen.pojo.Course;import com.chen.pojo.Score;import com.chen.pojo.Student;import com.chen.service.CourseService;import com.chen.service.ScoreService;import com.chen.service.StudentService;@Controller@RequestMapping("/scoreInfo")public class ScoreController { @Autowired private ScoreService scoreService; @Autowired private StudentService studentService; @Autowired private CourseService courseService; //查询全部信息 @RequestMapping("/queryScore") public String findStudentInfo(Model model,@RequestParam(value="currentPage",defaultValue="1",required=false)int currentPage,String id) { model.addAttribute("pagemsg",scoreService.findByPage(currentPage, id)); return "StudentScores"; } //添加成绩信息 @RequestMapping("/addscore") public String AddCourseInfo(Score score,Model model) { Student student = studentService.queryStudetnById(score.getStudentId()); if(student != null) { Course course = courseService.query1(score.getCourseId()); if(course**null){ model.addAttribute("msg", "该课程不存在!"); System.out.println("课程不存在"); return "addscoreinfo"; }else { int rows = scoreService.addScoreInfo(score); if (rows > 0) { System.out.println("成功添加" + rows + "条数据!"); model.addAttribute("msg","添加成功!"); } else { System.out.println("ִ添加失败"); model.addAttribute("msg","添加失败!"); } return "redirect:queryScore"; } } model.addAttribute("msg", "该学生不存在!"); System.out.println("学生不存在"); return "addscoreinfo"; } // 更新成绩 @RequestMapping("/updateScore") public String UpdateCourseInfo(Score score) { int rows = scoreService.updateScoreInfo(score); if (rows > 0) { System.out.println("成功更新" + rows + "条数据!"); } else { System.out.println("ִ更新失败"); } return "redirect:queryScore"; } //获取要修改的成绩 @RequestMapping("/update") public String findCourse(Score score1, Model model) { Score score = scoreService.queryScoreById(score1); System.out.println(score); model.addAttribute("score", score); return "updateScore"; } //删除成绩 @RequestMapping("/deleteScore") @ResponseBody public String DeleteCourse(String id) { int rows = scoreService.deleteScoreInfoById(id); if (rows > 0) { System.out.println("成功删除" + rows + "条数据!"); return "OK"; } else { System.out.println("ִ删除失败"); return "F"; } //return "redirect:queryScore"; } //批量删除 @RequestMapping("/delselected") public String DelCourse(HttpServletRequest request) { String[] name = request.getParameterValues("uid"); int rs = 0; for (int i = 0; i < name.length; i++) { rs = rs + scoreService.deleteScoreInfoById(name[i]); } if (rs > 0) { System.out.println("成功删除" + rs + "条数据!"); } else { System.out.println("ִ删除失败"); } return "redirect:queryScore"; } @RequestMapping("/queryById") public String QueryById(@RequestParam(value="currentPage",defaultValue="1",required=false)int currentPage,Model model,HttpServletRequest request) { HttpSession session = request.getSession(); String id = (String)session.getAttribute("name"); System.out.println(id); model.addAttribute("pagemsg",scoreService.findByPage(currentPage, id)); return "StudentScores2"; }}
CourseController.java
package com.chen.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.chen.pojo.Course;import com.chen.service.CourseService;@Controller@RequestMapping("/courseInfo")public class CourseController { @Autowired private CourseService courseService; // 查询全部 @RequestMapping("/queryCourse") public String findCourseInfo(Model model,@RequestParam(value="currentPage",defaultValue="1",required=false)int currentPage,String id) { model.addAttribute("pagemsg",courseService.findByPage(currentPage, id)); return "courseInfo"; } // 添加课程 @RequestMapping("/addCourse") public String AddCourseInfo(Course course) { int rows = courseService.addCourseInfo(course); if (rows > 0) { System.out.println("成功添加" + rows + "条数据!"); } else { System.out.println("ִ添加失败"); } return "redirect:queryCourse"; } //更新课程 @RequestMapping("/updateCourse") public String UpdateCourseInfo(Course course) { int rows = courseService.updateCourseInfo(course); if (rows > 0) { System.out.println("成功更新" + rows + "条数据!"); } else { System.out.println("ִ更新失败"); } return "redirect:queryCourse"; } @RequestMapping("/update") public String findCourse(Course course1, Model model) { Course course = courseService.queryCourseById(course1.getCourseId()); System.out.println(course); model.addAttribute("course", course); return "updateCourse"; } // 删除课程 @RequestMapping("/deleteCourse") @ResponseBody public String DeleteCourse(String id) { int rows = courseService.deleteCourseInfoById(id); if (rows > 0) { System.out.println("成功删除" + rows + "条数据!"); return "OK"; } else { System.out.println("ִ删除失败"); return "F"; } //return "redirect:queryCourse"; } // 批量删除 @RequestMapping("/delselected") public String DelCourse(HttpServletRequest request) { String[] name = request.getParameterValues("uid"); int rs = 0; for (int i = 0; i < name.length; i++) { rs = rs + courseService.deleteCourseInfoById(name[i]); } if (rs > 0) { System.out.println("成功删除" + rs + "条数据!"); } else { System.out.println("ִ删除失败"); } return "redirect:queryCourse"; } @RequestMapping("/queryById") public String QueryById(@RequestParam(value="currentPage",defaultValue="1",required=false)int currentPage,Model model,HttpServletRequest request) { HttpSession session = request.getSession(); String id = (String)session.getAttribute("name"); System.out.println(id); model.addAttribute("pagemsg",courseService.query(currentPage, id)); return "courseInfo1"; }}
分页
在src目录下创建com.chen.untils包,并创建PageBean类。
package com.chen.untils;import java.util.List;public class PageBean<T> { private int currPage;//当前页数 private int pageSize;//每页显示的记录数 private int totalCount;//总记录数 private int totalPage;//总页数 private String id; private List<T> lists;//每页的显示的数据 public PageBean() { super(); } public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public List<T> getLists() { return lists; } public void setLists(List<T> lists) { this.lists = lists; } public String getId() { return id; } public void setId(String id) { this.id = id; }}
三、前端jsp页面编码
在WebContent目录下,创建名为jsp的文件夹,然后在文件中创建如下页面。

登录页面( login.jsp )
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head> <meta charset="utf-8"> <title>登陆页面</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/stylelogin.css"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/iconfont.css"> <script language="JavaScript"> window.onload=init; function init() { var pop = "${requestScope.msg}"; if(pop != ""){ alert(pop); } } </script></head><body> <div id="maxbox"> <h3>学生成绩管理系统</h3> <form action="${pageContext.request.contextPath}/login/1" ,method="post"> <div class="inputbox"> <div class="inputText"> <span class="iconfont icon-mine"></span> <input name="name" type="text" placeholder="name" autocomplete="off"> </div> <div class="inputText"> <span class="iconfont icon-lock"></span> <input name="password" type="password" placeholder="Password"> </div> <input class="inputButton" type="submit" value="LOGIN"> </div> </form> </div></body></html>
管理员登录模块
header.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>学生成绩管理系统</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/home_page.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script></head><body> <div class="header"> <div class="header1"><img class="img" src="${pageContext.request.contextPath}/img/top02.png" alt="center"></div> <div class="header2">学生成绩管理系统</div> <div class="header3"> <%String name = (String)session.getAttribute("name");out.println(name + " 欢迎你!");%>| <div class="btn-group"> <button type="button" class="btn btn-default dropdown-toggle btn-xs glyphicon glyphicon-cog" data-toggle="dropdown"> <span class="caret"> </span> </button> <ul class="dropdown-menu pull-right" role="menu"> <li><a href="" class="glyphicon glyphicon-user">个人中心</a></li> <li><a href="${pageContext.request.contextPath}/login/userexit" class="glyphicon glyphicon-off">退出登录</a></li> </ul> </div> </div> </div> <div class="nav nav1"> <a href="${pageContext.request.contextPath}/jsp/main.jsp">系统首页</a> <a href="${pageContext.request.contextPath}/userInfo/query">用户信息</a> <a href="${pageContext.request.contextPath}/studentInfo/query">学生信息</a> <a href="${pageContext.request.contextPath}/courseInfo/queryCourse">课程信息</a> <a href="${pageContext.request.contextPath}/scoreInfo/queryScore"> 成绩信息</a> </div> </body> </html>
footer.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>学生信息管理系统</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/home_page.css"></head><body> <div class="footer">Copyright © 2020-2021 CTF,All Rights Reserved.</div></body>
管理员登录首页(main.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>学生信息管理系统</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/home_page.css"></head><body> <jsp:include page="header.jsp" /> <div class="d" id="bodyContainer"> <div style="background: #ffffff;margin: 0px 60px 0px 60px;padding: 50px 150px;height: 77%;"> <div> <img alt="" src="../img/20160526021127672.jpg"> </div> <div> <h1>欢迎访问学生成绩管理系统!</h1> </div> </div> </div> <jsp:include page="footer.jsp" /></body></html>
学生信息页面(studentInfo.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html><head> <title>学生信息管理</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script language="JavaScript"> window.onload=init; function init() { var pop = "${requestScope.msg}"; if(pop != ""){ alert(pop); } } </script> <script language="JavaScript"> function rest(id) { if(confirm('确定要更新该学生的密码吗?')) { $.post("<%=basePath%>studentInfo/rest",{"id":id}, function(data){ if(data **"OK"){ alert("密码更新成功!"); window.location.reload(); }else{ alert("密码更新失败!"); window.location.reload(); } }); } } function deleteStudent(id) { if(confirm('确定要删除该学生?')) { $.post("<%=basePath%>studentInfo/deletestudent",{"id":id}, function(data){ if(data **"OK"){ alert("删除成功!"); window.location.reload(); }else{ alert("删除失败!"); window.location.reload(); } }); } } </script> <script language="JavaScript"> window.onload = function() { document.getElementById("delSelected").onclick = function () { if (confirm("您确定要删除选中信息吗?")) { var flag = false; //判断是否有选中条目 var cbs = document.getElementsByName("uid"); for (var i = 0; i < cbs.length; i++) { if (cbs[i].checked) { flag = true; break; } } if (flag) { document.getElementById("form1").submit(); } } } //获取第一个checkbox document.getElementById("firstCb").onclick = function () { //获取下摆你列表中所有cd var cbs = document.getElementsByName("uid"); //遍历 for (var i = 0; i < cbs.length; i++) { //设置cbs[]的check状态 = firstCb.checked cbs[i].checked = this.checked; } } } </script></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <span class="jfj">学生信息</span><br><br> <form class="form-inline" role="form" action="${pageContext.request.contextPath}/studentInfo/query"> <div class="form-group qu"> <input type="text" id="id" name="id" class="form-control" placeholder="请输入要查询的学号" autocomplete="off"> <input type="submit" class="btn btn-success" value="查询" class="input"> <a href="${pageContext.request.contextPath}/jsp/addstudentinfo.jsp" class="btn btn-info">添加</a> <a href="javascript:void(0);" id="delSelected" class="btn btn-danger">批量删除</a> </div> </form> <form action="${pageContext.request.contextPath}/studentInfo/delselected" id="form1"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered table-hover table-striped"> <thead> <tr> <th><input type="checkbox" id="firstCb" name="firstCb"></th> <th>学号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>出生日期</th> <th>院系</th> <th>专业</th> <th>专业班级</th> <th>电话</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach var="student" items="${requestScope.pagemsg.lists}"> <tr> <td><input type="checkbox" name="uid" id="uid" value="${student.studentId}"></td> <td>${student.studentId}</td> <td>${student.studentName}</td> <td>${student.studentAge}</td> <td>${student.studentSex}</td> <td>${student.studentBifthday}</td> <td>${student.studentDept}</td> <td>${student.studentMajor}</td> <td>${student.studentClassId}</td> <td>${student.studentCellPhone}</td> <td> <a href="${pageContext.request.contextPath}/studentInfo/update?studentId=${student.studentId}" class="btn1 btn-xs glyphicon glyphicon-edit">修改</a> <a href="#" onclick="deleteStudent(${student.studentId})" class="btn2 btn-xs glyphicon glyphicon-trash">删除</a> <a href="#" class="btn3 btn-xs glyphicon glyphicon-repeat" onclick="rest(${student.studentId})">重置密码</a> </td> </tr> </c:forEach> </tbody> </table> </div> </div> </form> <table border="0" cellspacing="0" cellpadding="0" width="900px"> <tr> <td> <span>第${requestScope.pagemsg.currPage }/${requestScope.pagemsg.totalPage}页</span> <span>总记录数:${requestScope.pagemsg.totalCount } 每页显示:${requestScope.pagemsg.pageSize}</span> <span> <c:if test="${requestScope.pagemsg.currPage != 1}"> <a style="color: black;" href="${pageContext.request.contextPath }/studentInfo/query?currentPage=1&id=${requestScope.pagemsg.id}">[首页]</a> <a style="color: black;" href="${pageContext.request.contextPath }/studentInfo/query?currentPage=${requestScope.pagemsg.currPage-1}&id=${requestScope.pagemsg.id}">[上一页]</a> </c:if> <c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}"> <a style="color: black;" href="${pageContext.request.contextPath }/studentInfo/query?currentPage=${requestScope.pagemsg.currPage+1}&id=${requestScope.pagemsg.id}">[下一页]</a> <a style="color: black;" href="${pageContext.request.contextPath }/studentInfo/query?currentPage=${requestScope.pagemsg.totalPage}&id=${requestScope.pagemsg.id}">[尾页]</a> </c:if> </span> </td> </tr> </table> </div> </div> <jsp:include page="footer.jsp" /> </body></html>
添加学生页面(addstudentinfo.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>添加学生信息</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <script language="JavaScript" type="text/javascript"> var first_keywords={}; first_keywords['信息工程学院']=['计算机科学与技术','软件工程','物联网']; first_keywords['商学院']=['电子商务','财务管理','金融']; first_keywords['外国语学院']=['日语','韩语','西班牙语']; first_keywords['土木建筑学院']=['建筑工程','土木工程']; first_keywords['机电工程学院']=['机电工程','车辆工程']; first_keywords['艺术设计与传媒学院']=['广告设计','网媒','舞蹈']; first_keywords['生物与制药学院']=['生物技术','制药工程']; first_keywords['体育学院']=['休闲体育','体育管理学','体育教育']; function change() { var target1 = document.getElementById("studentDept"); var target2 = document.getElementById("studentMajor"); var selected_1 = target1.options[target1.selectedIndex].value; while (target2.options.length) { target2.remove(0); } var initial_list = first_keywords[selected_1]; if (initial_list) { for (var i = 0; i < initial_list.length; i++) { var item = new Option(initial_list[i], initial_list[i]); target2.options.add(item); } } } </script> <script language="JavaScript"> window.onload=init; function init() { var pop = "${requestScope.msg}"; if(pop != ""){ alert(pop); } } </script> <style> input{ border: 0; outline-color: white;/* 轮廓颜色 */ } </style></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <a href="${pageContext.request.contextPath}/studentInfo/query" class="jfj">学生信息></a> <span class="jfj">添加学生</span> <h3>添加学生信息</h3> <form action="${pageContext.request.contextPath}/studentInfo/addstudent" name="addstudent"> <div style="width: 600px; margin: 20px 380px;"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered"> <tr> <td>学号</td> <td><input type="text" name="studentId" placeholder="*必填:学号10位" autocomplete="off" /></td> <td>姓名</td> <td><input type="text" name="studentName" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>年龄</td> <td><input type="text" name="studentAge" placeholder="*必填" autocomplete="off" /></td> <td>性别</td> <td> <input type="radio" name="studentSex" value="男" checked /> 男 <input type="radio" name="studentSex" value="女" /> 女 </td> </tr> <tr> <td>出生日期</td> <td><input type="date" name="studentBifthday" placeholder="*必填" autocomplete="off" /></td> <td>院系</td> <td> <select name="studentDept" id="studentDept" onchange="change()" > <option value="------">-------</option> <option value="信息工程学院">信息工程学院</option> <option value="外国语学院">外国语学院</option> <option value="商学院">商学院</option> <option value="土木建筑学院">土木建筑学院</option> <option value="机电工程学院">机电工程学院</option> <option value="艺术设计与传媒学院">艺术设计与传媒学院</option> <option value="生物与制药学院">生物与制药学院</option> <option value="体育学院">体育学院</option> </select> </td> </tr> <tr> <td>专业</td> <td> <select name="studentMajor" id="studentMajor" > <option value="------">-------</option> </select> </td> <td>班级</td> <td><input type="text" name="studentClassId" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>电话</td> <td colspan="3"><input type="text" id="studentCellPhone" name="studentCellPhone" placeholder="*必填" autocomplete="off" /></td> </tr> </table> </div> </div> <div> <input type="reset" name="reset" value="重置" class="btn btn-sm btn-info" style="margin: 0 50px 0 150px;"> <input type="submit" name="update" value="提交" class="btn btn-sm btn-info " style="margin: 0 100px;"> </div> </div> </form> </div> </div> <jsp:include page="footer.jsp" /></body></html>
更新学生信息(updatestudent.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>更新学生信息</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <script language="JavaScript" type="text/javascript"> var first_keywords={}; first_keywords['信息工程学院']=['计算机科学与技术','软件工程','物联网']; first_keywords['商学院']=['电子商务','财务管理','金融']; first_keywords['外国语学院']=['日语','韩语','西班牙语']; first_keywords['土木建筑学院']=['建筑工程','土木工程']; first_keywords['机电工程学院']=['机电工程','车辆工程']; first_keywords['艺术设计与传媒学院']=['广告设计','网媒','舞蹈']; first_keywords['生物与制药学院']=['生物技术','制药工程']; first_keywords['体育学院']=['休闲体育','体育管理学','体育教育']; function change() { var target1 = document.getElementById("studentDept"); var target2 = document.getElementById("studentMajor"); var selected_1 = target1.options[target1.selectedIndex].value; while (target2.options.length) { target2.remove(0); } var initial_list = first_keywords[selected_1]; if (initial_list) { for (var i = 0; i < initial_list.length; i++) { var item = new Option(initial_list[i], initial_list[i]); target2.options.add(item); } } } </script> <style type="text/css"> input{ border: 0; outline-color: white; } </style></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <a href="${pageContext.request.contextPath}/studentInfo/query" class="jfj">学生信息></a> <span class="jfj">更新学生信息</span> <h3>更新学生信息</h3> <form action="${pageContext.request.contextPath}/studentInfo/updatestudent" name="updatestudent"> <div style="width: 600px; margin: 20px 380px;"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered"> <tr> <td>学号</td> <td><input type="text" name="studentId" readonly value="${student.studentId}" /></td> <td>姓名</td> <td><input type="text" name="studentName" value="${student.studentName}" /></td> </tr> <tr> <td>年龄</td> <td><input type="" name="studentAge" value="${student.studentAge}" /></td> <td>性别</td> <td> <input type="radio" name="studentSex" value="男" ${student.studentSex ** '男' ? 'checked':''} /> 男 <input type="radio" name="studentSex" value="女" ${student.studentSex ** '女' ? 'checked':''} /> 女 </td> </tr> <tr> <td>出生日期</td> <td><input type="date" name="studentBifthday" value="${student.studentBifthday}" /></td> <td>院系</td> <td> <select name="studentDept" id="studentDept" onchange="change()"> <option value="信息工程学院" ${student.studentDept ** '信息工程学院' ? 'selected':''}>信息工程学院</option> <option value="外国语学院" ${student.studentDept ** '外国语学院' ? 'selected':''}>外国语学院</option> <option value="商学院" ${student.studentDept ** '商学院' ? 'selected':''}>商学院</option> <option value="土木建筑学院" ${student.studentDept ** '土木建筑学院' ? 'selected':''}>土木建筑学院</option> <option value="机电工程学院" ${student.studentDept ** '机电工程学院' ? 'selected':''}>机电工程学院</option> <option value="艺术设计与传媒学院" ${student.studentDept ** '艺术设计与传媒学院' ? 'selected':''}>艺术设计与传媒学院</option> <option value="生物与制药学院" ${student.studentDept ** '生物与制药学院' ? 'selected':''}>生物与制药学院</option> <option value="体育学院" ${student.studentDept ** '体育学院' ? 'selected':''}>体育学院</option> </select> </td> </tr> <tr> <td>专业</td> <td> <select name="studentMajor" id="studentMajor"> <option value="软件工程" ${student.studentMajor ** '软件工程' ? 'selected':''}>软件工程</option> <option value="计算机科学与技术" ${student.studentMajor ** '计算机科学与技术' ? 'selected':''}>计算机科学与技术</option> <option value="日语" ${student.studentMajor ** '日语' ? 'selected':''}>日语</option> <option value="电子商务" ${student.studentMajor ** '电子商务' ? 'selected':''}>电子商务</option> <option value="财务管理" ${student.studentMajor ** '财务管理' ? 'selected':''}>财务管理</option> <option value="建筑工程" ${student.studentMajor ** '建筑工程' ? 'selected':''}>建筑工程</option> <option value="机电工程" ${student.studentMajor ** '机电工程' ? 'selected':''}>机电工程</option> <option value="广告设计" ${student.studentMajor ** '广告设计' ? 'selected':''}>广告设计</option> <option value="生物技术" ${student.studentMajor ** '生物技术' ? 'selected':''}>生物技术</option> <option value="休闲体育" ${student.studentMajor ** '休闲体育' ? 'selected':''}>休闲体育</option> </select> </td> <td>班级</td> <td><input type="text" name="studentClassId" value="${student.studentClassId}" /></td> </tr> <tr> <td>电话</td> <td colspan="3"><input type="text" name="studentCellPhone" value="${student.studentCellPhone}" /></td> </tr> </table> <div> <input type="submit" name="update" value="提交" class="btn btn-sm btn-info " style="margin: 0 50px 0 150px;"> <a href="${pageContext.request.contextPath}/studentInfo/query" class="btn btn-sm btn-info" style="margin-left: 50px">返回</a> </div> </div> </div> </div> </form> </div> </div> <jsp:include page="footer.jsp" /> </body></html>
课程信息页面(courseInfo.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html><head> <title>课程信息管理</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script language="JavaScript"> window.onload = function() { document.getElementById("delSelected").onclick = function () { if (confirm("您确定要删除选中信息吗?")) { var flag = false; //判断是否有选中条目 var cbs = document.getElementsByName("uid"); for (var i = 0; i < cbs.length; i++) { if (cbs[i].checked) { flag = true; break; } } if (flag) { document.getElementById("form1").submit(); } } } //获取第一个checkbox document.getElementById("firstCb").onclick = function () { //获取下摆你列表中所有cd var cbs = document.getElementsByName("uid"); //遍历 for (var i = 0; i < cbs.length; i++) { //设置cbs[]的check状态 = firstCb.checked cbs[i].checked = this.checked; } } } function deleteStudent(id) { if(confirm('确定要删除该课程?')) { $.post("<%=basePath%>courseInfo/deleteCourse",{"id":id}, function(data){ if(data **"OK"){ alert("删除成功!"); window.location.reload(); }else{ alert("删除失败!"); window.location.reload(); } }); } } </script></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <span class="jfj">课程信息</span><br><br> <form class="form-inline" role="form" action="${pageContext.request.contextPath}/courseInfo/queryCourse"> <div class="form-group qu"> <input type="text" class="form-control" id="id" name="id" placeholder="请输入要查询的课程号" autocomplete="off"> <input type="submit" class="btn btn-success" value="查询"> <a href="${pageContext.request.contextPath}/jsp/addCourse.jsp" class="btn btn-info ">添加</a> <a href="javascript:void(0);" id="delSelected" class="btn btn-danger"> 批量删除</a> </div> </form> <form action="${pageContext.request.contextPath}/courseInfo/delselected" id="form1"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered table-hover"> <thead> <tr> <th><input type="checkbox" id="firstCb" name="firstCb"></th> <th>课程号</th> <th>课程名</th> <th>学年</th> <th>任课教师</th> <th>学分</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach var="course" items="${requestScope.pagemsg.lists}"> <tr> <td><input type="checkbox" name="uid" id="uid" value="${course.courseId}"></td> <td>${course.courseId }</td> <td>${course.courseName }</td> <td>${course.schoolYear }</td> <td>${course.teacher }</td> <td>${course.creditHour }</td> <td> <a href="${pageContext.request.contextPath}/courseInfo/update?courseId=${course.courseId}" class="btn1 btn-xs glyphicon glyphicon-edit">修改</a> <a href="#" onclick="deleteStudent(${course.courseId})" class="btn2 btn-xs glyphicon glyphicon-trash">删除</a> </td> </tr> </c:forEach> </tbody> </table> </div> </div> </form> <table border="0" cellspacing="0" cellpadding="0" width="900px"> <tr> <td> <span>第${requestScope.pagemsg.currPage }/${requestScope.pagemsg.totalPage}页</span> <span>总记录数:${requestScope.pagemsg.totalCount } 每页显示:${requestScope.pagemsg.pageSize}</span> <span> <c:if test="${requestScope.pagemsg.currPage != 1}"> <a style="color: black;" href="${pageContext.request.contextPath }/courseInfo/queryCourse?currentPage=1&id=${requestScope.pagemsg.id}">首页</a> <a style="color: black;" href="${pageContext.request.contextPath }/courseInfo/queryCourse?currentPage=${requestScope.pagemsg.currPage-1}&id=${requestScope.pagemsg.id}">上一页</a> </c:if> <c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}"> <a style="color: black;" href="${pageContext.request.contextPath }/courseInfo/queryCourse?currentPage=${requestScope.pagemsg.currPage+1}&id=${requestScope.pagemsg.id}">下一页</a> <a style="color: black;" href="${pageContext.request.contextPath }/courseInfo/queryCourse?currentPage=${requestScope.pagemsg.totalPage}&id=${requestScope.pagemsg.id}">尾页</a> </c:if> </span> </td> </tr> </table> </div> </div> <jsp:include page="footer.jsp" /></body></html>
添加课程页面()
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>添加课程信息</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <style> input{ border: 0; outline-color: white; /* 轮廓颜色 */ } </style> <!-- 禁用自动完成 :autocomplete="off" --></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <a href="${pageContext.request.contextPath}/courseInfo/queryCourse" class="jfj">课程信息></a> <span class="jfj">添加课程</span><br><br> <h3>添加课程信息</h3> <form action="${pageContext.request.contextPath}/courseInfo/addCourse" name="addstudent"> <div style="width: 500px; margin: 20px 400px;"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered"> <tr> <td>课程号</td> <td><input type="text" name="courseId" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>课程名</td> <td><input type="text" name="courseName" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>学年</td> <td><input type="text" name="schoolYear" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>任课教师</td> <td><input type="text" name="teacher" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>学分</td> <td><input type="text" name="creditHour" placeholder="*必填" autocomplete="off" /></td> </tr> </table> </div> </div> <div> <input type="reset" name="reset" value="重置" class="btn btn-sm btn-info" style="margin: 0 50px 0 150px;"> <input type="submit" name="update" value="提交" class="btn btn-sm btn-info " style="margin: 0 50px;"> </div> </div> </form> </div> </div> <jsp:include page="footer.jsp" /></body></html>
更新课程页面()
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>更新课程信息</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <a href="${pageContext.request.contextPath}/courseInfo/queryCourse" class="jfj">课程信息></a> <span class="jfj">更新课程</span><br> <br> <h3>更新课程信息</h3> <form action="${pageContext.request.contextPath}/courseInfo/updateCourse" name="updatestudent"> <div style="width: 500px; margin: 20px 400px;"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered"> <tr> <td>课程号</td> <td><input type="text" name="courseId" style="border: 0; outline-color: white;" readonly value="${course.courseId}" /></td> </tr> <tr> <td>课程名</td> <td><input type="text" name="courseName" style="border: 0; outline-color: white;" value="${course.courseName}" /></td> </tr> <tr> <td>学年</td> <td><input type="text" name="schoolYear" style="border: 0; outline-color: white;" value="${course.schoolYear}" /></td> </tr> <tr> <td>任课教师</td> <td><input type="text" name="teacher" style="border: 0; outline-color: white;" value="${course.teacher}" /></td> </tr> <tr> <td>学分</td> <td><input type="text" name="creditHour" style="border: 0; outline-color: white;" value="${course.creditHour}" /></td> </tr> </table> <div> <input type="submit" name="update" value="提交" class="btn btn-sm btn-info " style="margin: 0 50px 0 150px;"> <a href="${pageContext.request.contextPath}/courseInfo/queryCourse" class="btn btn-sm btn-info" style="margin-left: 50px">返回</a> </div> </div> </div> </div> </form> </div> </div> <jsp:include page="footer.jsp" /> </body></html>
成绩信息页面(StudentScores.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%> <html><head> <title>学生成绩管理</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script language="JavaScript"> window.onload = function() { document.getElementById("delSelected").onclick = function () { if (confirm("您确定要删除选中信息吗?")) { var flag = false; //判断是否有选中条目 var cbs = document.getElementsByName("uid"); for (var i = 0; i < cbs.length; i++) { if (cbs[i].checked) { flag = true; break; } } if (flag) { document.getElementById("form1").submit(); } } } //获取第一个checkbox document.getElementById("firstCb").onclick = function () { //获取下摆你列表中所有cd var cbs = document.getElementsByName("uid"); //遍历 for (var i = 0; i < cbs.length; i++) { //设置cbs[]的check状态 = firstCb.checked cbs[i].checked = this.checked; } } } function deleteStudent(id) { if(confirm('确定要删除该学生的成绩?')) { $.post("<%=basePath%>scoreInfo/deleteScore",{"id":id}, function(data){ if(data **"OK"){ alert("删除成功!"); window.location.reload(); }else{ alert("删除失败!"); window.location.reload(); } }); } } </script></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <span class="jfj">成绩信息</span><br><br> <form class="form-inline" role="form" action="${pageContext.request.contextPath}/scoreInfo/queryScore"> <div class="form-group qu"> <input type="text" id="id" name="id" class="form-control" placeholder="请输入要查询的学号" autocomplete="off"> <input type="submit" class="btn btn-success" value="查询" class="input"> <a href="${pageContext.request.contextPath}/jsp/addscoreinfo.jsp" class="btn btn-info">添加</a> <a href="javascript:void(0);" id="delSelected" class="btn btn-danger"> 批量删除</a> </div> </form> <form action="${pageContext.request.contextPath}/scoreInfo/delselected" id="form1"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-hover table-bordered"> <thead> <tr> <th><input type="checkbox" id="firstCb" name="firstCb"></th> <th>学号</th> <th>姓名</th> <th>性别</th> <th>课程名</th> <th>学年</th> <th>任课教师</th> <th>分数</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach items="${requestScope.pagemsg.lists}" var="score"> <tr> <td><input type="checkbox" name="uid" id="uid" value="${score.id}"></td> <td>${score.studentId }</td> <td>${score.student.studentName }</td> <td>${score.student.studentSex }</td> <td>${score.course.courseName }</td> <td>${score.course.schoolYear }</td> <td>${score.course.teacher }</td> <td>${score.score}</td> <td> <a href="${pageContext.request.contextPath}/scoreInfo/update?studentId=${score.studentId}&courseId=${score.courseId}" class="btn1 btn-xs glyphicon glyphicon-edit">修改</a> <a href="#" onclick="deleteStudent(${score.id})" class="btn2 btn-xs glyphicon glyphicon-trash">删除</a> </td> </tr> </c:forEach> </tbody> </table> </div> </div> </form> <table border="0" cellspacing="0" cellpadding="0" width="900px"> <tr> <td> <span>第${requestScope.pagemsg.currPage }/${requestScope.pagemsg.totalPage}页</span> <span>总记录数:${requestScope.pagemsg.totalCount } 每页显示:${requestScope.pagemsg.pageSize} </span> <span> <c:if test="${requestScope.pagemsg.currPage != 1}"> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryScore?currentPage=1&id=${requestScope.pagemsg.id}">[首页]</a> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryScore?currentPage=${requestScope.pagemsg.currPage-1}&id=${requestScope.pagemsg.id}">[上一页]</a> </c:if> <c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}"> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryScore?currentPage=${requestScope.pagemsg.currPage+1}&id=${requestScope.pagemsg.id}">[下一页]</a> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryScore?currentPage=${requestScope.pagemsg.totalPage}&id=${requestScope.pagemsg.id}">[尾页]</a> </c:if> </span> </td> </tr> </table> </div> </div> <jsp:include page="footer.jsp" /> </body></html>
添加成绩信息(addscoreinfo.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>添加成绩信息</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <script language="JavaScript"> window.onload=init; function init() { var pop = "${requestScope.msg}"; if(pop != ""){ alert(pop); } } </script> <style> input{ border: 0; outline-color: white; /* 轮廓颜色 */ } </style> <!-- 禁用自动完成 :autocomplete="off" --></head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <a href="${pageContext.request.contextPath}/scoreInfo/queryScore" class="jfj">成绩信息></a> <span class="jfj">添加成绩</span><br><br> <h3>添加学生成绩</h3> <form action="${pageContext.request.contextPath}/scoreInfo/addscore" name="addstudent"> <div style="width: 500px; margin: 20px 400px;"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered"> <tr> <td>学号</td> <td><input type="text" name="studentId" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>课程号</td> <td><input type="text" name="courseId" placeholder="*必填" autocomplete="off" /></td> </tr> <tr> <td>成绩</td> <td><input type="text" name="score" placeholder="*必填" autocomplete="off" /></td> </tr> </table> </div> </div> <div> <input type="reset" name="reset" value="重置" class="btn btn-sm btn-info" style="margin: 0 50px 0 150px;"> <input type="submit" name="update" value="提交" class="btn btn-sm btn-info " style="margin: 0 50px;"> </div> </div> </form> </div> </div> <jsp:include page="footer.jsp" /></body></html>
更新成绩信息(updateScore.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>更新成绩信息</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <style type="text/css"> input{ border: 0; outline-color: white; } </style> </head><body> <jsp:include page="header.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" class="jfj">首页></a> <a href="${pageContext.request.contextPath}/scoreInfo/queryScore" class="jfj">成绩信息></a> <span class="jfj">更新成绩</span><br><br> <h3>更新成绩信息</h3> <form action="${pageContext.request.contextPath}/scoreInfo/updateScore" name="update"> <div style="width: 500px; margin: 20px 400px;"> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered"> <tr> <td>学号</td> <td><input type="text" name="studentId" readonly value="${score.studentId}" /></td> </tr> <tr> <td>课程号</td> <td><input type="text" name="courseId" readonly value="${score.courseId}" /></td> </tr> <tr> <td>成绩</td> <td><input type="text" name="score" value="${score.score}" /></td> </tr> </table> <div> <input type="submit" name="update" value="提交" class="btn btn-sm btn-info " style="margin: 0 50px 0 150px;"> <a href="${pageContext.request.contextPath}/scoreInfo/queryScore" class="btn btn-sm btn-info" style="margin-left: 50px">返回</a> </div> </div> </div> </div> </form> </div> </div> <jsp:include page="footer.jsp" /> </body></html>
学生登录模块
header2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>学生成绩管理系统</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/home_page.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script></head><body> <div class="header"> <div class="header1"><img class="img" src="${pageContext.request.contextPath}/img/top02.png" alt="center"></div> <div class="header2">学生成绩管理系统</div> <div class="header3"> <%String name = (String)session.getAttribute("name");out.println(name + " 欢迎你!");%>| <div class="btn-group"> <button type="button" class="btn btn-default dropdown-toggle btn-xs glyphicon glyphicon-cog" data-toggle="dropdown"> <span class="caret"> </span> </button> <ul class="dropdown-menu pull-right" role="menu"> <li><a href="${pageContext.request.contextPath}/studentInfo/queryByName" class="glyphicon glyphicon-user">个人中心</a></li> <li><a href="${pageContext.request.contextPath}/login/userexit" class="glyphicon glyphicon-off">退出登录</a></li> </ul> </div> <%-- <a href="${pageContext.request.contextPath}/login/userexit" class="glyphicon glyphicon-off">退出登录</a> --%> </div> </div> <div class="nav nav1"> <a href="${pageContext.request.contextPath}/jsp/main1.jsp">系统首页</a> <a href="${pageContext.request.contextPath}/studentInfo/queryByName">个人中心</a> <a href="${pageContext.request.contextPath}/courseInfo/queryById">课程信息</a> <a href="${pageContext.request.contextPath}/scoreInfo/queryById"> 成绩信息</a> </div></body> </html>
学生登录首页(main1.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>学生信息管理系统</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/home_page.css"></head><body> <jsp:include page="header2.jsp" /> <div class="d" id="bodyContainer"> <div style="background: #ffffff;margin: 0px 60px 0px 60px;padding: 50px 150px;height: 77%;"> <div> <img alt="" src="../img/20160526021127672.jpg"> </div> <div> <h1>欢迎访问学生成绩管理系统!</h1> </div> </div> </div> <jsp:include page="footer.jsp" /></body></html>
个人中心页面(user.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>用户信息</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script></head><body> <jsp:include page="header2.jsp" /> <div class="con1"> <div class="con2"> <div style="width: 800px; margin: 20px 200px;"> <a href="${pageContext.request.contextPath}/jsp/main.jsp" style="color: gray; fint-size: 18px">首页></a> <span style="color: gray; fint-size: 18px">课程信息</span><br> <br> <h2>个人信息</h2> <div style="margin: 0 0 30px 630px;width: 180px;"> <a href="${pageContext.request.contextPath}/jsp/updatepad.jsp?studentPad=${student.studentPad}" class="btn btn-sm btn-info glyphicon glyphicon-edit">修改密码</a> <a href="${pageContext.request.contextPath}/studentInfo/update2?studentId=${student.studentId}" class="btn btn-sm btn-warning glyphicon glyphicon-repeat">修改信息</a><br> </div> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered"> <tr> <td>学号</td> <td>${student.studentId }</td> <td>姓名</td> <td>${student.studentName }</td> </tr> <tr> <td>性别</td> <td>${student.studentSex }</td> <td>年龄</td> <td>${student.studentAge }</td> </tr> <tr> <td>出生日期</td> <td>${student.studentBifthday }</td> <td>院系</td> <td>${student.studentDept }</td> </tr> <tr> <td>专业</td> <td>${student.studentMajor }</td> <td>班级</td> <td>${student.studentClassId }</td> </tr> <tr> <td>电话</td> <td>${student.studentCellPhone }</td> <td>密码</td> <td>******</td> </tr> </table> </div> </div> </div> </div> </div> <jsp:include page="footer.jsp" /> </body></html>
成绩信息页面(StudentScores2.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>学生成绩管理</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"></head><body> <jsp:include page="header2.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main1.jsp" class="jfj">首页></a> <span class="jfj">成绩信息</span><br><br> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-hover table-bordered"> <thead> <tr> <th>学号</th> <th>姓名</th> <th>性别</th> <th>课程名</th> <th>学年</th> <th>任课教师</th> <th>分数</th> </tr> </thead> <tbody> <c:forEach items="${requestScope.pagemsg.lists}" var="score"> <tr> <td>${score.studentId }</td> <td>${score.student.studentName }</td> <td>${score.student.studentSex }</td> <td>${score.course.courseName }</td> <td>${score.course.schoolYear }</td> <td>${score.course.teacher }</td> <td>${score.score}</td> </tr> </c:forEach> </tbody> </table> </div> </div> </form> <table border="0" cellspacing="0" cellpadding="0" width="900px"> <tr> <td> <span>第${requestScope.pagemsg.currPage }/${requestScope.pagemsg.totalPage}页</span> <span>总记录数:${requestScope.pagemsg.totalCount } 每页显示:${requestScope.pagemsg.pageSize} </span> <span> <c:if test="${requestScope.pagemsg.currPage != 1}"> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryById?currentPage=1">[首页]</a> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryById?currentPage=${requestScope.pagemsg.currPage-1}">[上一页]</a> </c:if> <c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}"> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryById?currentPage=${requestScope.pagemsg.currPage+1}">[下一页]</a> <a style="color: black;" href="${pageContext.request.contextPath }/scoreInfo/queryById?currentPage=${requestScope.pagemsg.totalPage}">[尾页]</a> </c:if> </span> </td> </tr> </table> </div> </div> <jsp:include page="footer.jsp" /> </body></html>
课程信息页面(courseInfo1.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><% if(session.getAttribute("name")**null) response.sendRedirect("login.jsp");%><html><head> <title>课程信息管理</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/studentlinfo.css"> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"></head><body> <jsp:include page="header2.jsp" /> <div class="con1"> <div class="con2"> <a href="${pageContext.request.contextPath}/jsp/main1.jsp" class="jfj">首页></a> <span class="jfj">课程信息</span><br><br> <div class="row clearfix"> <div class="col-md-12 column"> <table class="table table-bordered table-hover"> <thead> <tr> <th>课程号</th> <th>课程名</th> <th>学年</th> <th>任课教师</th> <th>学分</th> </tr> </thead> <tbody> <c:forEach var="course" items="${requestScope.pagemsg.lists}"> <tr> <td>${course.courseId }</td> <td>${course.courseName }</td> <td>${course.schoolYear }</td> <td>${course.teacher }</td> <td>${course.creditHour }</td> </tr> </c:forEach> </tbody> </table> </div> </div> <table border="0" cellspacing="0" cellpadding="0" width="900px"> <tr> <td> <span>第${requestScope.pagemsg.currPage }/${requestScope.pagemsg.totalPage}页</span> <span>总记录数:${requestScope.pagemsg.totalCount } 每页显示:${requestScope.pagemsg.pageSize}</span> <span> <c:if test="${requestScope.pagemsg.currPage != 1}"> <a style="color: black;" href="${pageContext.request.contextPath}/courseInfo/queryById?currentPage=1&id=${requestScope.pagemsg.id}">首页</a> <a style="color: black;" href="${pageContext.request.contextPath }/courseInfo/queryById?currentPage=${requestScope.pagemsg.currPage-1}&id=${requestScope.pagemsg.id}">上一页</a> </c:if> <c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}"> <a style="color: black;" href="${pageContext.request.contextPath }/courseInfo/queryById?currentPage=${requestScope.pagemsg.currPage+1}&id=${requestScope.pagemsg.id}">下一页</a> <a style="color: black;" href="${pageContext.request.contextPath }/courseInfo/queryById?currentPage=${requestScope.pagemsg.totalPage}&id=${requestScope.pagemsg.id}">尾页</a> </c:if> </span> </td> </tr> </table> </div> </div> <jsp:include page="footer.jsp" /></body></html>
四、效果图
管理员登录效果图

五、总结
该学生成绩管理系统总体说来基本完成了增删改查,登录分为学生登录和学生管理员登录,学生登录只能查看自己的个人信息、成绩信息、课程信息和修改自己的登录密码。学生管理员登录可以对学生信息、课程信息和成绩信息进行增删改查。数据库的设计方面,建有学生表、管理员表、课程表、成绩表。
刚拿到选题的时候,自己还是有蛮多想法的,但是在一步步实践中放弃了,因为自己学到的技术有限,还不足以让我能做出一个功能很丰富的系统,这恰好是我学习的动力,争取下次做出一个功能完整的系统。
完整代码:
Github:https://github.com/ctf99525/studentInfo.git
百度云:https://pan.baidu.com/s/1h25yMVO62Vf4bXfgoGjgHQ 提取码:ctf6
** 转发于这行代码没有bug!**
版权声明:本文为博主原创文章,遵循

浙公网安备 33010602011771号