⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createstatementaction.java

📁 基于STRUTS的试卷分析系统,实现JFREECHART画图片和POI生成EXCEL文档,开发平台:eclipse3.0+myclipse+tomcat5.0+mysql4.0
💻 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 + -