package com.hua.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.hua.dao.StudentBasicInforDAO;
import com.hua.dao.StudentGradeDAO;
import com.hua.entity.CriterStudent;
import com.hua.entity.GradeAnalysisResult;
import com.hua.entity.StudentBasicInformation;
import com.hua.entity.StudentGrade;
import com.hua.entity.User;
import com.hua.impl.StudentBasicInforDAOImpl;
import com.hua.impl.StudentGradeDAOIpml;
/**
* 学生成绩servlet
* 1.教务员查询学生成绩
* 2.获取学生成绩后统计分析:计算总分,平均分,绩点等等
* 3.学生用户查询自己的成绩
* @author hua
*
*/
@WebServlet("*.grade")
public class CoursegradeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取ServletPath:/addUser.do
String servletPath = request.getServletPath();
//2.去除 / 和 .do ,得到类似于addUser这样的字符串
String methodName = servletPath.substring(1, servletPath.length() - 6);
try {
//3.利用反射获取methodName对应的方法
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4.利用反射调用对应的方法
method.invoke(this, request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
//成绩统计分析:比如计算绩点,绩点排名等等
@SuppressWarnings("unused")
private void gradeAnalysis(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
String yearTerm = request.getParameter("yearTerm");
//获取要查询的所有学生的信息,放进List中
List<StudentBasicInformation> students = getStudent(request, response);
//获取每一位学生与其对应的所有的成绩,作为键值对存入map中
Map<StudentBasicInformation,List<StudentGrade>> map = getAllGradeMap(students, yearTerm);
//获取每一位学生的成绩统计分析结果
Map<StudentBasicInformation, GradeAnalysisResult> results = getAnalysisResult(map);
//将每一位学生的成绩分析结果放入session中
session.setAttribute("results", results);
//重定向到jsp显示页面
response.sendRedirect(request.getContextPath() + "/acdemic_dean/acdemic/grademanagement/gradeanalysis.jsp");
}
//获取成绩分析结果,把结果放入一个数组中
private Map<StudentBasicInformation, GradeAnalysisResult> getAnalysisResult(
Map<StudentBasicInformation, List<StudentGrade>> map) {
//List results = new ArrayList();
Map<StudentBasicInformation, GradeAnalysisResult> GradeMap = new HashMap<>();
for(Map.Entry<StudentBasicInformation,List<StudentGrade>> entry : map.entrySet()){
StudentBasicInformation stu = entry.getKey();
List<StudentGrade> studentGrades = entry.getValue();
int courseCount = studentGrades.size(); //获取课程门数
if(courseCount != 0){
int score = getScore(studentGrades); //获取总分
double averScore = score / courseCount; //平均分
double gradePoint = getGradePoint(studentGrades); //平均学分绩点
double averCreditGrade = (gradePoint + 5) * 10; //平均学分成绩
//使平均分、平均学分绩点、平均学分成绩输出两位小数(四舍五入)
DecimalFormat df = new DecimalFormat("#.00");
GradeAnalysisResult gradeAnalysisResult = new GradeAnalysisResult(stu.getStudentId(),
courseCount, score, df.format(gradePoint), df.format(averCreditGrade), df.format(averScore));
GradeMap.put(stu, gradeAnalysisResult);
}
}
return GradeMap;
}
//求平均学分绩点
private double getGradePoint(List<StudentGrade> studentGrades) {
StudentGrade studentGrade = null;
double credit = 0.0,sum = 0.0;
Iterator<StudentGrade> iter = studentGrades.iterator();
while(iter.hasNext()){
studentGrade= iter.next();
sum = sum + studentGrade.getGradePoint() * studentGrade.getCredit();
credit = credit + studentGrade.getCredit();
}
return sum / credit;
}
private int getScore(List<StudentGrade> studentGrades) {
int score = 0;
Iterator<StudentGrade> iter = studentGrades.iterator();
StudentGrade studentGrade = null;
while(iter.hasNext()){
studentGrade= iter.next();
score = score + studentGrade.getScore();
}
return score;
}
//教务员查询学生成绩
@SuppressWarnings("unused")
private void deanQuery(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
String yearTerm = request.getParameter("yearTerm");
List<StudentBasicInformation> students = getStudent(request, response);
Map<StudentBasicInformation,List<StudentGrade>> map = getAllGradeMap(students, yearTerm);
session.setAttribute("map", map);
response.sendRedirect(request.getContextPath() + "/acdemic_dean/acdemic/grademanagement/gradequery.jsp");
}
private Map<StudentBasicInformation, List<StudentGrade>> getAllGradeMap(
List<StudentBasicInformation> students, String yearTerm) {
Map<StudentBasicInformation,List<StudentGrade>> map = new HashMap<>();
StudentGradeDAO sgd = new StudentGradeDAOIpml();
for(StudentBasicInformation sbi : students){
List<StudentGrade> studentGrades = sgd.getAllWithYearTerm(sbi.getStudentId(),yearTerm);
map.put(sbi, studentGrades);
}
return map;
}
//获取条件查询到的所有学生信息
private List<StudentBasicInformation> getStudent(
HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String academy = request.getParameter("academy"); //学院
String profession = request.getParameter("profession");
String className = request.getParameter("className");
String studentId = request.getParameter("studentId");
String studentName = request.getParameter("studentName");
CriterStudent cs = new CriterStudent(academy, profession, className, studentName, studentId);
StudentBasicInforDAO sbi = new StudentBasicInforDAOImpl();
return sbi.getForListWithCriterStudent(cs);
}
//学生用户查询自己的成绩
@SuppressWarnings("unused")
private void studentQuery(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
List<StudentGrade> studentGrades = getAllcourseGradeList(user);
session.setAttribute("studentGrades", studentGrades);
response.sendRedirect(request.getContextPath() + "/student/informationinquiry/coursegrade.jsp");
}
private List<StudentGrade> getAllcourseGradeList(User user) {
StudentGradeDAO sgd = new StudentGradeDAOIpml();
return sgd.getAllCourseGrade(Long.parseLong(user.getUsername()));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
教务管理系统javaweb项目 运行环境:window系统,Apache Tomcat v7.0.84、JDK1.8 开发环境:J2EE eclipse、navicat for mysql 运用的技术:MVC设计模式、DAO模式、Servlet、JSP、Filter、MySQL数据库
资源推荐
资源详情
资源评论
收起资源包目录
教务管理系统javaweb项目 (222个子文件)
CoursegradeServlet.class 9KB
ApplyStudentListServlet.class 8KB
StudentGrade.class 7KB
LevelExaminationGradeServlet.class 6KB
ExamArrange.class 5KB
AdminUserServlet.class 5KB
Teacher.class 5KB
JwTeacher.class 5KB
OptionalCourseServlet.class 5KB
StudentBasicInformation.class 5KB
LevelExamination.class 5KB
LevelExamServlet.class 5KB
CourseScheduleServlet.class 5KB
CourseScheduleShow.class 4KB
OptionalCourse.class 4KB
StudentInformationServlet.class 4KB
ValidateColorServlet.class 4KB
JwTeacherInformationServlet.class 4KB
User.class 4KB
TeacherInformationServlet.class 4KB
GradeAnalysisResult.class 4KB
CourseSchedule.class 4KB
StudentGradeDAOIpml.class 3KB
DAO.class 3KB
StudentBasicInforDAOImpl.class 3KB
FindPasswordServlet.class 3KB
LevelExam.class 3KB
LoginFilter.class 3KB
OptionalCourseDAOImpl.class 3KB
ExamArrangeServlet.class 3KB
ExamArrangeDAOImpl.class 3KB
UserDAOImpl.class 3KB
CourseScheduleDAOImpl.class 3KB
LevelExamDAOImpl.class 3KB
PostponeExamApply.class 3KB
JwTeacherDAOImpl.class 3KB
ModifyPasswordFilter.class 3KB
ExemptionApply.class 3KB
TeacherDAOImpl.class 3KB
StudentBasicInforDAOImplTest.class 3KB
StudentOptCourseDAOImpl.class 2KB
PostponeExamapplyServlet.class 2KB
LevelExamListDAOImpl.class 2KB
LoginChangeServlet.class 2KB
ExemptionApplyServlet.class 2KB
LoginCheckCodeFilter.class 2KB
ModifyPasswordServlet.class 2KB
FindMMCheckCodeFilter.class 2KB
CriterStudent.class 2KB
LevelExaminationDAOImpl.class 2KB
TeacherDAOImplTest.class 2KB
AdministratorJspFilter.class 2KB
AcdemicDeanJspFilter.class 2KB
StudentGradeDAOIpmlTest.class 2KB
TeacherFilter.class 2KB
StudentFilter.class 2KB
PostponeExamApplyDAOImpl.class 2KB
StudentOptCourse.class 2KB
LevelExamList.class 2KB
ExemptionApplyDAOImpl.class 2KB
UserDAOImplTest.class 2KB
HttpFilter.class 2KB
LogoutServlet.class 1KB
CriterUser.class 1KB
EncodingFilter.class 1KB
JDBCUtils.class 1KB
JDBCUtilsTest.class 807B
StudentGradeDAO.class 732B
ExamArrangeDAO.class 717B
StudentBasicInforDAO.class 710B
OptionalCourseDAO.class 698B
CourseScheduleDAO.class 690B
StudentOptCourseDAO.class 688B
LevelExaminationDAO.class 669B
LevelExamListDAO.class 664B
LevelExamDAO.class 663B
UserDAO.class 586B
Student.class 544B
JwTeacherDAO.class 445B
TeacherDAO.class 435B
PostponeExamApplyDAO.class 434B
ExemptionApplyDAO.class 419B
.classpath 893B
org.eclipse.wst.common.component 489B
org.eclipse.wst.jsdt.ui.superType.container 49B
mysql-connector-java-5.1.45-bin.jar 976KB
mchange-commons-java-0.2.3.4.jar 568KB
c3p0-0.9.2.1.jar 414KB
standard.jar 384KB
commons-dbutils-1.7.jar 95KB
jstl.jar 20KB
CoursegradeServlet.java 7KB
StudentGrade.java 7KB
AdminUserServlet.java 6KB
ExamArrange.java 6KB
Teacher.java 5KB
LevelExamination.java 5KB
JwTeacher.java 5KB
ApplyStudentListServlet.java 5KB
StudentBasicInformation.java 5KB
共 222 条
- 1
- 2
- 3
资源评论
进击的大海贼
- 粉丝: 1w+
- 资源: 196
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功