记一次java计算加权平均成绩

思路很简单,用poi读取单元格的数据,封装到实体类。这里为了计算方便,创建了课程实体类Classes和学生Student实体类。
Classes主要记录:学生班级classes,学生姓名name,课程学分credit,课程成绩grade,学生姓名name,学号id,由于源文件单元格的格式是文本类型,因此在设置creditgrade时,要进行类型转换。
Student,主要记录:加权平均成绩grade,学生姓名name,学生班级classes,,学号id

怎样记录和组织1w+的数据

采取,读取完一个学生的成绩,就计算一次的策略。把每一行成绩扔进栈中,然后判断,下一行的学生名字与栈顶学生名字是否一致,一致就入栈,不一致就进行计算,把栈内元素清空,存储下一个学生的信息。
每次计算完毕,把数据封装进Student实体类,扔进List集合。

数据处理完毕,写数据到磁盘

这里只需要匹配学生班级,将各班的学生分开,然后写入磁盘。

目录结构

代码展示

Student

package com.henu.entity;public class Student {private String name;private String classes;private String id;private Double grade;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getClasses() {return classes;}public void setClasses(String classes) {this.classes = classes;}public String getId() {return id;}public void setId(String id) {this.id = id;}public Double getGrade() {return grade;}public void setGrade(Double grade) {this.grade = grade;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", classes='" + classes + '\'' +", id='" + id + '\'' +", grade=" + grade +'}';}
}

Classes

package com.henu.entity;public class Classes {private String classes;private String id;private double credit;private double grade;private String name;public String getClasses() {return classes;}public void setClasses(String classes) {this.classes = classes;}public String getId() {return id;}public void setId(String id) {this.id = id;}public double getCredit() {return credit;}public void setCredit(String credit) {this.credit = Double.parseDouble(credit);}public double getGrade() {return grade;}public void setGrade(String grade) {this.grade = Double.parseDouble(grade);}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Classes{" +"classes='" + classes + '\'' +", id='" + id + '\'' +", credit=" + credit +", grade=" + grade +", name='" + name + '\'' +'}';}
}

POIUtils

package com.henu.utils;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;import com.henu.entity.Classes;
import com.henu.entity.Student;
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.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;public class POIUtils {public static final int ST_NAME = 6;public static final int ST_ID = 5;public static final int ST_CLASS = 4;public static final int CL_CREDIT = 9;public static final int CL_GRADE = 13;public static void getExcelAsFile(String file) throws FileNotFoundException, IOException, InvalidFormatException {InputStream ins = null;Workbook wb = null;ins = new FileInputStream(new File(file));wb = WorkbookFactory.create(ins);ins.close();//得到Excel工作表对象Sheet sheet = wb.getSheetAt(0);//总行数int trLength = sheet.getLastRowNum();//得到Excel工作表的行Row row = sheet.getRow(0);//总列数int tdLength = row.getLastCellNum();Stack<Classes> stack = new Stack<Classes>();Row rows = null;HSSFCell cells = null;List<Student> students = new ArrayList<Student>();for (int i = 4; i < trLength; i++) {rows = sheet.getRow(i);Classes classes = new Classes();//学生姓名cells = (HSSFCell) rows.getCell(ST_NAME);classes.setName(cells.getStringCellValue());//学生课程学分cells = (HSSFCell) rows.getCell(CL_CREDIT);classes.setCredit(cells.getStringCellValue());//学生该课取得的成绩cells = (HSSFCell) rows.getCell(CL_GRADE);classes.setGrade(cells.getStringCellValue());//学生号cells = (HSSFCell) rows.getCell(ST_ID);classes.setId(cells.getStringCellValue());//学生班级cells = (HSSFCell) rows.getCell(ST_CLASS);classes.setClasses(cells.getStringCellValue());String str = stack.empty() ? "" : stack.peek().getName();if (stack.empty() || str.equals(classes.getName())) {stack.push(classes);} else {Student student = new Student();student.setName(stack.peek().getName());student.setClasses(stack.peek().getClasses());student.setId(stack.peek().getId());double credits = 0.0;double grades = 0.0;Classes temp = new Classes();while (!stack.empty()) {temp = stack.pop();credits += temp.getCredit();grades += temp.getGrade() * temp.getCredit();}stack.push(classes);student.setGrade(grades / credits);students.add(student);}}//成绩计算完毕,创建excel存储数据CreateExcel(students);}//写数据到excelpublic static void CreateExcel(List<Student> list) {String[] str = {"数据科学与大数据技术","数据科学与大数据技术(明德计划)","计算机科学与技术","信息安全","自动化","全部"};for (String s : str) {HSSFWorkbook wb = write(list,s);try {FileOutputStream fout = new FileOutputStream("out/"+s+".xls");wb.write(fout);fout.close();} catch (Exception e) {e.printStackTrace();}}System.out.println("All done!");}public static HSSFWorkbook write(List<Student> list, String fileName) {HSSFWorkbook write = new HSSFWorkbook();HSSFSheet sheet = write.createSheet("new Sheet");HSSFRow rowHeader = sheet.createRow(0);rowHeader.createCell(0).setCellValue("班级");rowHeader.createCell(1).setCellValue("姓名");rowHeader.createCell(2).setCellValue("学号");rowHeader.createCell(3).setCellValue("成绩");int row_id = 1;for (Student student : list) {if (student.getClasses().equals(fileName)||fileName.equals("全部")){HSSFRow row = sheet.createRow(row_id);row_id++;row.createCell(0).setCellValue(student.getClasses());row.createCell(1).setCellValue(student.getName());row.createCell(2).setCellValue(student.getId());row.createCell(3).setCellValue(student.getGrade());}}write.setSheetName(0, fileName);return write;}public static void main(String[] args) {try {getExcelAsFile("in/test.xls");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InvalidFormatException e) {e.printStackTrace();}}
}

Java计算加权平均成绩相关推荐

  1. Java计算平均成绩

    编写一个程序,根据用户输入的总人数和总成缋计算平均成绩.要求程序能够处理总人数或者总成绩不是数字时的情况. 根据题目要求得知,在程序中需要对多种异常情况进行不同的处理.此时可以在 try 语句后定义两 ...

  2. 输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出java,c++实现

    题目: /*    输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出 */ 代码部分: C++实现 #include<iostream> using names ...

  3. 1.6 Java项目实战:计算平均成绩

    编写一个程序,根据用户输入的总人数和总成绩计算平均成绩.要求程序能够处理总人数或者总成绩不是数字时的情况. 使用多重 catch 语句时,Java 虚拟机会把实际拋出的异常对象依次和各个 catch ...

  4. java计算并显示学生的成绩_Java开学测试-学生成绩管理系统

    题目: 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishiscore,networkscore ...

  5. java mapreduce程序_简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行...

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

  6. java中计算平均成绩_Java计算平均成绩

    编写一个程序,根据用户输入的总人数和总成缋计算平均成绩.要求程序能够处理总人数或者总成绩不是数字时的情况. 根据题目要求得知,在程序中需要对多种异常情况进行不同的处理.此时可以在 try 语句后定义两 ...

  7. java考试成绩平均计算_Java计算平均成绩

    编写一个程序,根据用户输入的总人数和总成绩计算平均成绩.要求程序能够处理总人数或者总成绩不是数字时的情况. 根据题目要求得知,在程序中需要对多种异常情况进行不同的处理.此时就用到了在<Java ...

  8. java计算平均值_Java计算平均成绩

    编写一个程序,根据用户输入的总人数和总成绩计算平均成绩.要求程序能够处理总人数或者总成绩不是数字时的情况. 根据题目要求得知,在程序中需要对多种异常情况进行不同的处理.此时就用到了在<Java ...

  9. 用java输出学生信息表代码_使用java导出学生成绩表-excel成绩表

    本文简单研究使用java导出学生成绩表,使用到的导出Excel的技术为Apache poi,相关的技术可以查看我之前的文章.之前导出的Excel的格式为03版的xls,使用的jar为poi-3.10- ...

  10. 计算学生成绩的最高分、最低分和平均分(数组全是方法)

    代码: 1 package com.mon10.day24; 2 3 import java.util.Scanner; 4 5 /** 6 * 类说明 :计算学生成绩的最高分.最低分和平均分 7 * ...

最新文章

  1. vector容器中erase(删除)的使用
  2. 四种Sandcastle方法生成c#.net帮助类帮助文档
  3. push_heap算法 (即满足max-heap条件,最大值在根节点)
  4. LEETCODE- The First Day (C++)
  5. pom.xml文件详解
  6. 包头市民族中学2021高考成绩查询,2021庆阳高考成绩查询系统入口
  7. Web项目之网络爬虫
  8. Appium框架中Android下EditText内容清除
  9. 神经元与网络结构概论
  10. 关于Julia 和Matlab速度的比较!(以偏概全)。
  11. 联合分布概率密度函数
  12. LCP 19. 秋叶收藏集(C++)---动态规划解题
  13. 家庭用计算机选购调查报告,【调查报告】计算机选购调查报告.doc
  14. 江苏大学计算机学院林琳,计算机学院教师岗副高及以下、其它专技中级及以下人员岗位聘用结果公示...
  15. PMBOK项目管理知识体系指南—PMP项目管理学习笔记。
  16. 你有多久没有体会过“饥饿”的感觉?写在袁隆平仙逝的第7天
  17. 小白必看——UG NX模具分模原理知识,如何确定分型面
  18. MTK9652处理器怎么样
  19. Android视频流解码
  20. python-xlrd使用手册

热门文章

  1. QTcpSocket网络通讯多客户端功能
  2. 《游戏设计理论》参考版
  3. XP同步时间服务器地址
  4. 未来教育全国计算机考试,未来教育.全国计算机等级考试
  5. 使用u盘量产工具修复写保护的u盘
  6. python的文件操作和异常处理
  7. APP抓包工具——Fiddler
  8. 4r照片尺寸是多大_4寸照片尺寸多少厘米 多少像素
  9. excel常用函数公式及技巧搜集4
  10. 计算机学院三下乡,重庆理工大学计算机学院”三下乡“教师情牵故乡