📄 createstatementaction.java
字号:
/*
* Name:xxx.java
* Version:1.0
* Copyright(c) MA-LF, WANG-X. 2006 All right reserved.
* Created:2006-5-7
* Author:WANG-X
* Updated: 2006-5-7 WANG-X
*
*/
package com.hbnu.action;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.hbnu.common.CodingConvert;
/**
* @author jackie
* @version 1.0
*
*/
public class CreateStatementAction extends Action{
/**
* <br>画面初始化处理<br>
*
* @param mapping ActionMapping对象
* @param form ActionForm对象
* @param request HttpServletRequest对象
* @param response HttpServletResponse对象
* @return af ActionForward对象
* @throws Exception
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
Map statementMap = new HashMap();
Map detailMap = new HashMap();
Map sj401Map = new HashMap();
Map sj401detail = new HashMap();
statementMap = (Map) request.getSession().getAttribute("SJ301InfoMap");
detailMap = (Map) request.getSession().getAttribute("SJ301detailMap");
//为SJ401填充MAP,SJ401Map从Sj301Action得到
sj401Map = (Map) request.getSession().getAttribute("SJ401Map");
//提取ArrayList
ArrayList list_ps_scorse = (ArrayList)statementMap.get("list_ps_scorse");
ArrayList list_sy_scorse = (ArrayList)statementMap.get("list_sy_scorse");
ArrayList list_qm_scorse = (ArrayList)statementMap.get("list_qm_scorse");
ArrayList list_zp_scorse = (ArrayList)statementMap.get("list_zp_scorse");
ArrayList list_beizhu = (ArrayList)statementMap.get("list_beizhu");
ArrayList list_xuefen = (ArrayList)statementMap.get("list_xuefen");
ArrayList list_xuhao = (ArrayList)statementMap.get("list_xuhao");
ArrayList list_name = (ArrayList)statementMap.get("list_name");
//计算各个分数段的人数
int m =0;float sum = 0;
ArrayList high = new ArrayList();
ArrayList low = new ArrayList();
// number1包含三类,40以下,40到50;50到60
int number2 = 0;int number3 = 0;
int number4 = 0;int number5 = 0;
int ssize2 = list_qm_scorse.size();
int chartnumber1 =0 ;int chartnumber2 =0 ;int chartnumber3 =0 ;
for ( int i = 0; i< ssize2;i++){
//考虑到分数有可能带小数,故用FLOAT型
float tempNumber = Float.parseFloat(String.valueOf( list_qm_scorse.get(i)));
sum += tempNumber;
if(tempNumber < 40 ){
chartnumber1++;m++;
low.add(list_qm_scorse.get(i));
}
else if ((tempNumber>40)&&(tempNumber<50)){
chartnumber2++;m++;
low.add(list_qm_scorse.get(i));
}
else if ((tempNumber>50)&&(tempNumber<60)){
chartnumber3++;m++;
low.add(list_qm_scorse.get(i));
}
else if ((tempNumber>60)&&(tempNumber<70)){
number2++;m++;
low.add(list_qm_scorse.get(i));
}
else if ((tempNumber>70)&&(tempNumber<80)){
number3++;m++;
high.add(list_qm_scorse.get(i));
}
else if ((tempNumber>80)&&(tempNumber<90)){
number4++;m++;
high.add(list_qm_scorse.get(i));
}
else if (tempNumber>90){
number5++;m++;
high.add(list_qm_scorse.get(i));
}
}
//计算各个分数段占的比重
float number1 = chartnumber1 + chartnumber2 + chartnumber3;
float percent1 = number1/(float) m;
float percent2 = (float)number2/(float) m;
float percent3 = (float)number3/(float) m;
float percent4 = (float)number4/(float) m;
float percent5 = (float)number5/(float) m;
//将各个分数段的人数放入ArrayList
ArrayList fenshuduanList = new ArrayList();
fenshuduanList.add(String.valueOf(chartnumber1));
fenshuduanList.add(String.valueOf(chartnumber2));
fenshuduanList.add(String.valueOf(chartnumber3));
fenshuduanList.add(String.valueOf(number2));
fenshuduanList.add(String.valueOf(number3));
fenshuduanList.add(String.valueOf(number4));
fenshuduanList.add(String.valueOf(number5));
//ArrayList的大小
int ssize = list_ps_scorse.size();
int absentNum = ssize - m ;
sj401detail.put("shikao_number",String.valueOf(m));
sj401detail.put("absent_number",String.valueOf(absentNum));
sj401detail.put("yingkao_number",String.valueOf(ssize));
sj401detail.put("number1",String.valueOf(number1));
sj401detail.put("number2",String.valueOf(number2));
sj401detail.put("number3",String.valueOf(number3));
sj401detail.put("number4",String.valueOf(number4));
sj401detail.put("number5",String.valueOf(number5));
sj401detail.put("percent1",String.valueOf(percent1));
sj401detail.put("percent2",String.valueOf(percent2));
sj401detail.put("percent3",String.valueOf(percent3));
sj401detail.put("percent4",String.valueOf(percent4));
sj401detail.put("percent5",String.valueOf(percent5));
//求平均分、最高分、最低分
float average = sum / m;
float lowest = 0 ; float highest = 0;
//调用类的方法求得最小值与最大值
Caculate tail = new Caculate();
lowest = tail.jisuan1(list_qm_scorse,ssize2);
highest = tail.jisuan2(list_qm_scorse,ssize2);
sj401detail.put("average",String.valueOf(average));
sj401detail.put("lowest",String.valueOf(lowest));
sj401detail.put("highest",String.valueOf(highest));
//提取detailMap信息
String className = String.valueOf(detailMap.get("txt_classes"));
String courseName = String.valueOf(detailMap.get("txt_course"));
String userName = String.valueOf(detailMap.get("username")); //用户名称
String ps_scorse = String.valueOf(detailMap.get("txt_ps_scorse"));//哪种平时成绩
String sy_scorse = String.valueOf(detailMap.get("txt_sy_scorse"));//哪种实验成绩
//将信息放入detailSj401Map中
Map detailSj401Map = new HashMap();
detailSj401Map.put("username",userName);
detailSj401Map.put("coursename",courseName);
detailSj401Map.put("classname",className);
detailSj401Map.put("coursename",courseName);
detailSj401Map.put("coursename",courseName);
/**建立一个Excel文件 */
HSSFWorkbook wb = new HSSFWorkbook();
String baobiaoname = String.valueOf(className + courseName);
//当将EXCEL文件默认为当前路径时,就生成不了EXCEL报表,具体原因暂不明确
FileOutputStream fileOut = new FileOutputStream("d:/" +className + courseName + ".xls");
/** 建立Excel文件的一个页面 */
HSSFSheet sheet = wb.createSheet();
/**使用中文显示式样*/
wb.setSheetName(0,"课程成绩表",HSSFWorkbook.ENCODING_UTF_16);
/** 建立页面的行 */
HSSFRow row = null;
/** 建立单元格 */
HSSFCell cell = null;
/* 创建字符串数组 */
String[] strRow = new String[8];
/* 加入字段名称 */
row = sheet.createRow((short) 0);
strRow = new String[] { "序号", "姓名",ps_scorse ,sy_scorse,"期末成绩" ,"总评成绩","获得学分","备注"};
for (int j = 0; j < 8; j++) {
cell = row.createCell((short) j);
/*使用中文显示式样*/
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(strRow[j]);
}
/* 取出数据,保存到Excel文件中 */
for (int i = 0; i < ssize; i++) {
CodingConvert convert = new CodingConvert();
ArrayList tempList = new ArrayList();
tempList.add(list_xuhao.get(i));
tempList.add(list_name.get(i));
tempList.add(list_ps_scorse.get(i));
tempList.add(list_sy_scorse.get(i));
tempList.add(list_qm_scorse.get(i));
tempList.add(list_zp_scorse.get(i));
tempList.add(list_xuefen.get(i));
tempList.add(list_beizhu.get(i));
row = sheet.createRow((short) i + 1);
for (int j = 0; j < 8; j++) {
cell = row.createCell((short) j);
//当只用cell.setEncoding(HSSFCell.ENCODING_UTF_16)时,中文还是乱码,
//只有将每个单元格再进行中文转化才会显示正确中文
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(convert.toGb(String.valueOf(tempList.get(j))));
}
}
try {
wb.setPrintArea(0,"$A$1:$H$" + ssize +"");//设置打印区域
wb.write(fileOut);
fileOut.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
//传递到Sj401Action
request.getSession().setAttribute("sj401DetailMap",sj401Map);
request.getSession().setAttribute("scoreList",fenshuduanList);
request.getSession().setAttribute("sj501detailmap",sj401detail);
return (mapping.findForward("success"));
}
}
class Caculate{
float jisuan1(ArrayList low ,int chartnumber1){
float lowest = Float.parseFloat(String.valueOf( low.get(0)));
if (low!=null&&!low.isEmpty()){
for(int i = 1; i< chartnumber1; i++){
float temp = Float.parseFloat(String.valueOf( low.get(i)));
if ( lowest > temp){
lowest = temp;
}
}
}
return lowest;
}
float jisuan2(ArrayList high, int number5){
float highest = Float.parseFloat(String.valueOf( high.get(0)));
if (high!=null&&!high.isEmpty()){
for(int i = 0; i< number5; i++){
float temp2 = Float.parseFloat(String.valueOf( high.get(i)));
if( highest< temp2){
highest = temp2;
}
}
}
return highest;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -