Java EE期末报告

您所在的位置:网站首页 基于java的学生成绩管理系统中期报告 Java EE期末报告

Java EE期末报告

2023-07-15 02:05| 来源: 网络整理| 查看: 265

目录

引言

题目要求

设计阶段

数据库设计

Controller层设计

运行效果图:

SSM框架搭建:

基础配置

配置Maven

测试:

学生管理系统的编码阶段:

dao层与*Mapper.xml映射关系

Service层和dao层的关系:

controller层与Service层的关系:

jsp和Controller前后端进行数据交互

分页技术的实现:

 Student相关的代码:

messageController.jsp

basePageStudent.jsp

listStudent.jsp

studentInfo.jsp

addStudent.jsp

studentController.java

参考书籍及博客:

工程的github:

引言

对java本身不是很熟悉,想着到期末了,也要学点有用的东西,就选择了SSM框架。如果有错,还请指教。

(功能进一步完善,主要是数据处理的异常。代码也上传到github。-----2019/6/19)

题目要求

 教师登录后可以录入自己任课课程的学生的成绩,可以修改、查看、成绩.查看学生成绩时,要求用到分页技术

学生登录后可以选课,选课后不可更改。可以查看自己所上课程的成绩

教务人员登录后可以录入教师任课信息,可以修改学生选课信息。

设计阶段 数据库设计

Controller层设计

运行效果图:

SSM框架搭建: 基础配置

选择创建project,然后就跳到这个页面,选择Maven,然后打勾,然后选择下面蓝色的选项,然后next

 groupId一般是域名的反写,也作为项目中类的包名(在java目录下下面会提到),artifactId是工程名

 记得添加蓝色的这一行,不然后面可能会报错

然后的等创建结束后,生成的目录如下:(创建的过程很慢的,一定要等创建完,中间可能会出现没有main文件夹(遇到这个问题百度),这个目录一定是自动生成的)  

然后创建其他文件夹,如下图,然后对照着下面有颜色的文件夹,分别右击,选择Mark Directory As,分别标记(test目录的两个文件夹分别标记为test source root和test resource root; main目录下的java和resource分别标记为source root和resource root),不标记的话后面的会在配置文件中报错的:

配置Maven

配置pox.xml,  这个文件夹就5和6行(groupId和artifactId)是不同的,就是上面说的创建项目要填的,直接把整个复制过去,然后在IDEA的右下角会出现一个“import....”,点击然后就会自己下载相关配置文件了。我出现过的问题都有记录在配置文件中说明情况和解决方法,可以仔细看下。(这个文件有一处,在最后面)

4.0.0 com.springmvc STUDENT 1.0-SNAPSHOT war STUDENT Maven Webapp http://www.example.com UTF-8 1.7 1.7 4.2.5.RELEASE 3.2.4 1.6.6 1.2.12 org.springframework spring-core ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-oxm ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-test ${spring.version} org.mybatis mybatis ${mybatis.version} org.mybatis mybatis-spring 1.2.2 mysql mysql-connector-java 5.1.29 junit junit 4.11 test javax.servlet jstl 1.2 javax.servlet.jsp jsp-api 2.2.1-b03 provided javax.servlet servlet-api 2.5 provided com.fasterxml.jackson.core jackson-core 2.7.1 com.fasterxml.jackson.core jackson-annotations 2.7.1 com.fasterxml.jackson.core jackson-databind 2.7.1 net.sf.json-lib json-lib 2.4 jdk15 commons-lang commons-lang 2.4 commons-logging commons-logging 1.1 commons-pool commons-pool 1.5.6 commons-dbcp commons-dbcp 1.4 commons-beanutils commons-beanutils 1.8.3 commons-httpclient commons-httpclient 3.1 commons-collections commons-collections 3.1 commons-codec commons-codec 1.9 javax.annotation jsr250-api 1.0 net.sf.ezmorph ezmorph 1.0.6 javax.activation activation 1.1 taglibs standard 1.1.2 log4j log4j ${log4j.version} org.slf4j slf4j-api ${slf4j.version} org.slf4j slf4j-log4j12 ${slf4j.version} commons-fileupload commons-fileupload 1.3.1 commons-io commons-io 2.4 STUDENT maven-clean-plugin 3.1.0 maven-resources-plugin 3.0.2 maven-compiler-plugin 3.8.0 maven-surefire-plugin 2.22.1 maven-war-plugin 3.2.2 maven-install-plugin 2.5.2 maven-deploy-plugin 2.8.2 org.mybatis.generator mybatis-generator-maven-plugin 1.3.2 true true

 generator.properties配置数据库(不用这个也是可以的,只是要改generatorConfig.xml里面的配置内容),只需要修改引号标注的内容(引号千万别留着,下面也是一样)

driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/"数据库名"?useUnicode=true&characterEncoding=utf-8 username="mysql登录名" password=“密码” #entity 包名和 java目录 modelPackage=com.springmvc.entity modelProject=src/main/java #sqlmap包名 和resources目录 sqlPackage=sqlmap sqlProject=src/main/resources #mapper包名和 java目录 mapperPackage=com.springmvc.dao mapperProject=src/main/java #table=“表名”

generatorConfig.xml配置文件:(classPathEntry需要改成你相应的jar,在External Libraries下找到mysql的包,然后右击copy path,这个包也是会自己下载的,所以在External Libraries下可以找到)

jdbc.properties配置

driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/“数据库名”?useUnicode=true&characterEncoding=utf-8 username=“登录名” #下面输入自己数据库的密码 password=“密码” #定义初始连接数 initialSize=0 #定义最大连接数 maxActive=20 #定义最大空闲 maxIdle=20 #定义最小空闲 minIdle=1 #定义最长等待时间 maxWait=60000

log4j.properties配置(log4j.appender.D.File =/JAVA/Code/STUDENT/error.log,这个是日志输出的路径)

### set log levels ### log4j.rootLogger = INFO,D ###输出到控制台### log4j.logger.toConsole=debug,stdout log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern =%d{yyyy-MM-dd HH\:mm\:ss} [%5p] - %c -%F(%L) -%m%n ### 输出到日志文件 ### ## 其中File 可以采用绝对路径 亦可以采用相对路径 catalina.home 是tomcat目录 如果没有logs文件夹 将会报错 ## ## 更加倾向于将日志文件放在 tomcat的日志目录下${catalina.home}/logs/salesmanb2bError.log ## ## 绝对路径如:e:/salesmanb2bError.log ## log4j.logger.daily=INFO,D log4j.appender.D = org.apache.log4j.DailyRollingFileAppender #log4j.appender.D.File = ${catalina.home}/ log4j.appender.D.File =/JAVA/Code/STUDENT/error.log log4j.appender.D.Append = true log4j.appender.D.Threshold = INFO log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern =%d{yyyy-MM-dd HH\:mm\:ss} [%5p] - %c -%F(%L) -%m%n ##log4j.logger.org.apache.ibatis=debug,stdout ##log4j.logger.java.sql=debug,stdout

上面的文件配置完成后,就双击下图蓝色部分(双击一次就好了,多了可能会在*Mapper.xml文件中生成相同的代码,这时候就需要到*Mapper.xml文件中删除重复的部分) (这个会在sqlmap文件加生成xml文件)

 

配置tomcat

配置的话到这边就结束了,启动tomcat可以显示hello word。

测试:

在StudentMapper中添加@Repository,然后点击StudentMapper这个接口名,然后按alt+enter,选择create test,就会出现如下第二图,然后选择要测试的接口,按next就可以。

 

 接着在test文件夹下就会多出一个java文件然后修改如成如下代码,接着按34行的那个绿色按钮就会进行测试,看是否链接数据库(我这是之前做测试的,测试的是别的函数,根据自己创建好的@Test那个函数测试自己想测试的)其他部分基本一样。

package com.springmvc.dao; import com.springmvc.entity.Student; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.List; import static org.junit.Assert.*; public class StudentMapperTest { private ApplicationContext applicationContext; @Autowired private StudentMapper studentMapper; @Before public void setUp() throws Exception{ //加载spring配置文件 applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); //导入需要测试的 studentMapper = applicationContext.getBean(StudentMapper.class); } @After public void tearDown() throws Exception{ } @Test public void s_getTotal(){ Student student=studentMapper.selectByPrimaryKey(1); System.out.println(student.getName()); System.out.println(studentMapper.getTotal()); List list; list=studentMapper.list(1,1); System.out.println(list.get(0).getName()); } }

 这是我点击绿色按钮执行的结果:

 

 

学生管理系统的编码阶段:

(我这边只说student的部分内容,只提重要的部分,代码就到下面的github上看,然后关于student相关的代码我会整理出来,在最后面会附带上去,就是那种可以运行的)

dao层与*Mapper.xml映射关系

如下图,这几个文件是自动生成的。DAO层是与数据库相应的mapper.xml相对应的。

如下面两图,dao层和xml相映射的,在xml文件中添加select,里面的id和Mapper里面的函数名称要是一模一样的。然后xml中的#{param1}是就是Mapper中函数的参数。然后在entity中的Student也要添加相应的函数和变量(在entity中添加的目的是为了到时候从数据库中取出来的数据能够有地方存放,建议是把这两个设置为static,因为都是共同的东西,或者干脆就不要在Student类中添加,等需要的时候再new个对象或着List来存放,其实我把这两个添加进去也没有用到过这两个函数)

 

Service层和dao层的关系:

service层是把dao层(即数据库那一层)给封装好,用于controller层的调用,那么contorller就不用接触到数据库层的相关代码,相当与,就是体现了模块的独立性吧

service层的接口设计:接口名称自己定义,接口的实现在Impl目录下的StudentServiceImpl

请看下面蓝色部分。@Autowired  StudentMapper studentMapper;这个是用于调用Mapper接口,因为StudentMapper不是类,而是接口,所以一定要有@Autowired,不然会报错。接着就像下面的是——deleteByPrimaryKey函数一样,调用接口函数。

controller层与Service层的关系:

Service封装好了数据库部分,controller就可以正常调用Service层的接口了,记住,是调用接口而不是调用Impl里的那个类。@RequestMapping("")是用于和jsp页面进行数据交互用的,后面会说。

jsp和Controller前后端进行数据交互

这边举例一个函数(listStudent)这个是使用ModelAndView(上面的addStudent使用另一种方法,jsp和后台传值的方法有很多,可以自己百度看看):

RequestMapping中的value的值和listStudent.jsp文件中的(就是第二张图的蓝色部分的值)对应,意思就是说,在jsp页面这个按钮按下后,后台要处理的函数在那个java函数中(就是第一张图的listStudent函数),然后new ModelAndView("listStudent")这个意思是加载视图页面是哪个(就是MVC的概念),这边是函数处理后要跳转的页面(listStudent.jsp)。然后request.getParameter("page.count")是获取jsp文件中参数名为page.count的参数,mav.addObject("page", page);就是将处理好的参数传递给jsp页面,如下第三图的蓝色部分,这个就是和mav.addObject("page", page)中的"page"一样的参数。(意思就是说在jsp页面可以直接使用java中的变量)

分页技术的实现:

在util(一般是用来存放工具的)

中创建Page.java,然后在listStudent函数中使用。

这边的代码是用来分页的,就是分页中显示下面的那个数字,这个和上图相对应,这个只要理解varStatus标签就很好理解下面的代码了。

 page.java代码:

package com.springmvc.util; public class Page { int start; // 开始数据 int count; // 每一页的数量 int total; // 总共的数据量 public Page(int start, int count) { super(); this.start = start; this.count = count; } public boolean isHasPreviouse(){ if(start==0) return false; return true; } public boolean isHasNext(){ if(start==getLast()) return false; return true; } public int getTotalPage(){ int totalPage; // 假设总数是50,是能够被5整除的,那么就有10页 if (0 == total % count) totalPage = total /count; // 假设总数是51,不能够被5整除的,那么就有11页 else totalPage = total / count + 1; if(0==totalPage) totalPage = 1; return totalPage; } public int getLast(){ int last; // 假设总数是50,是能够被5整除的,那么最后一页的开始就是40 if (0 == total % count) last = total - count; // 假设总数是51,不能够被5整除的,那么最后一页的开始就是50 else last = total - total % count; last = last $(function () { $("ul.pagination li.disabled a").click(function () { return false; }); $() }); function del() { var msg = "您真的确定要删除吗?\n\n请确认!"; if (confirm(msg) == true) { return true; } else { return false; } } 查找学生: 学生列表 - 共${page.total+1 }人 学号 姓名 年龄 性别 出生日期 家庭地址 身份证号 电话号码 编辑 删除 ${s.num} ${s.name} ${s.age} ${s.sex} ${s.birthday} ${s.address} ${s.idcard} ${s.tel} studentInfo.jsp 个人信息 个人信息 学号: 姓名: 密码: 年龄: 性别: 出生日期: 地址: 电话: 身份证号: addStudent.jsp 添加学生 增加学生 学号: 姓名: 密码: 年龄: 性别: 男 女 出生日期: 地址: 电话: 身份证号: 提 交 studentController.java package com.springmvc.controller; import com.springmvc.entity.Course; import com.springmvc.entity.Score; import com.springmvc.entity.Student; import com.springmvc.service.CourseService; import com.springmvc.service.ScoreService; import com.springmvc.service.StudentService; import com.springmvc.util.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedList; import java.util.List; @Controller @RequestMapping("") public class StudentController { @Autowired private StudentService studentService; @Autowired private ScoreService scoreService; @Autowired private CourseService courseService; // 获取分页参数 int start = 0; int count = 10; Page page = new Page(start, count); Integer student_current_id=-1; @RequestMapping("BaseStudentPage") public String rtnStuIndexPage(){ return "listStudent"; } @RequestMapping("StudentInfoPage") public ModelAndView stuInfo(@RequestParam("student_id")int id){ ModelAndView mav = new ModelAndView("StudentInfo"); if(student_current_id.equals(-1)){ student_current_id=id; } Student student = new Student(); student = studentService.s_selectByPrimaryKey(id); mav.addObject("stu_info",student); return mav; } @RequestMapping("StudentScorePage") public ModelAndView stuScore(@RequestParam("pagestart")int pagestart,HttpServletRequest request){ ModelAndView mav = new ModelAndView("StudentScore"); try { start = pagestart; count = Integer.parseInt(request.getParameter("page.count")); } catch (Exception e) { } page.setStart(start); List scores = new LinkedList(); scores = scoreService.sc_selectByStudent(student_current_id); int total = studentService.s_getTotal(); page.setTotal(total-1); mav.addObject("page", page); mav.addObject("stu_scores",scores); return mav; } @RequestMapping("StudentCoursePage") public ModelAndView stuCourse(@RequestParam("student_id")int id){ ModelAndView mav = new ModelAndView("StudentCourse"); if(student_current_id.equals(-1)){ student_current_id=id; } Course course = new Course(); course = courseService.c_selectByPrimaryKey(id); mav.addObject("stu_course",course); return mav; } @RequestMapping("StudentAddCoursePage") public ModelAndView stuAddCourse(@RequestParam("student_id")int id){ ModelAndView mav = new ModelAndView("addCourse"); if(student_current_id.equals(-1)){ student_current_id=id; } Course course = new Course(); course = courseService.c_selectByPrimaryKey(id); mav.addObject("stu_course",course); return mav; } @RequestMapping(value = "/addStudent", method = {RequestMethod.POST, RequestMethod.GET}) public String addStudent(HttpServletRequest request, HttpServletResponse response) { Student student = new Student(); int studentID = Integer.parseInt(request.getParameter("student_id")); String name = request.getParameter("name"); int age = Integer.parseInt(request.getParameter("age")); String sex = request.getParameter("sex"); String address=request.getParameter("address"); int password=Integer.parseInt(request.getParameter("password")); int idcard = Integer.parseInt(request.getParameter("IDCard")); int tel = Integer.parseInt(request.getParameter("tel")); Date birthday = null; // String 类型按照 yyyy-MM-dd 的格式转换为 java.util.Date 类 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { birthday = simpleDateFormat.parse(request.getParameter("birthday")); } catch (ParseException e) { e.printStackTrace(); } student.setNum(studentID); student.setName(name); student.setAge(age); student.setSex(sex); student.setBirthday(birthday); student.setPassword(password); student.setAddress(address); student.setIdcard(idcard); student.setTel(tel); studentService.s_insert(student); //为啥不能使用redirect: return "listStudent"; } @RequestMapping(value = "/listStudent", method = {RequestMethod.POST, RequestMethod.GET}) public ModelAndView listStudent(@RequestParam("pagestart")int pagestart,HttpServletRequest request) { ModelAndView mav = new ModelAndView("listStudent"); try { start = pagestart; count = Integer.parseInt(request.getParameter("page.count")); } catch (Exception e) { } page.setStart(start); List students = studentService.s_list(page.getStart(), page.getCount()); int total = studentService.s_getTotal(); page.setTotal(total-1); mav.addObject("page", page); mav.addObject("students", students); return mav; } @RequestMapping("/deleteStudent") public String deleteStudent(@RequestParam("del_id")int id) { studentService.s_deleteByPrimaryKey(id); return "listStudent"; } @RequestMapping("/editStudent") public ModelAndView editStudent(@RequestParam("edit_id")int id) { ModelAndView mav = new ModelAndView("editStudent"); Student student = studentService.s_selectByPrimaryKey(id); mav.addObject("update_student", student); return mav; } @RequestMapping(value = "/updateStudent", method = {RequestMethod.POST, RequestMethod.GET}) public String updateStudent(HttpServletRequest request) { Student student=new Student(); String tel = request.getParameter("tel"); String name = request.getParameter("name"); String studentID = request.getParameter("student_id"); String age = request.getParameter("age"); String sex = request.getParameter("sex"); String pass = request.getParameter("password"); String idcard =request.getParameter("IDCard"); String address =request.getParameter("address"); Date birthday = null; // String 类型按照 yyyy-MM-dd 的格式转换为 java.util.Date 类 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { birthday = simpleDateFormat.parse(request.getParameter("birthday")); } catch (ParseException e) { e.printStackTrace(); } Integer i_age=Integer.parseInt(age); student.setName(name); student.setAge(i_age); student.setNum(Integer.parseInt(studentID)); student.setSex(sex); student.setBirthday(birthday); student.setPassword(Integer.parseInt(pass)); student.setTel(Integer.parseInt(tel)); student.setIdcard(Integer.parseInt(idcard)); student.setAddress(address); studentService.s_updateByPrimaryKeySelective(student); return "listStudent"; } @RequestMapping(value = "/addStudentPage", method = {RequestMethod.POST, RequestMethod.GET}) public String addStudentPage(){ return "addStudent"; } @RequestMapping(value = "/searchStudent", method = {RequestMethod.POST, RequestMethod.GET}) public ModelAndView searchStudent(HttpServletRequest request) { ModelAndView mav = new ModelAndView("listStudent"); int ind=Integer.parseInt(request.getParameter("searchStudent")); List students = new LinkedList(); Student student=studentService.s_selectByPrimaryKey(ind); students.add(student); mav.addObject("students", students); return mav; } } 参考书籍及博客:

https://www.cnblogs.com/toutou/p/ssm_spring.html https://www.jianshu.com/p/6a594fbea51d h

ttps://www.cnblogs.com/mumudechengzhang/p/7682361.html

https://www.cnblogs.com/Samuel-Leung/p/10691158.html 

https://blog.csdn.net/jianghao233/article/details/81879370

工程的github:

https://github.com/Iconzjy/SSM_JavaEE_FinalReport_Student

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3