• daydayup>Poi操作


    学生的成绩统计在excel中,给出按学分绩排名的名次(学分绩等于各科成绩的加权平均,为了解决教师判分标准不统一的问题,其中单科成绩折算公式为:单科成绩=(个人单科成绩/本课程最高成绩)*100)。

    所用知识

    hibernate编程式事务

    poi访问excel表

    一、新建项目,导入mysql,poi,hibernate,junit,mysql驱动的jar包

    代码具体如下:

    1、Score.java

    package com.wsz.entity;
    
    public class Score {
    	private Integer id; // 主键
    	private String studentNumber; // 学号
    	private String name; // 姓名
    	private String courseName; // 课程名
    	private Double score; // 课程成绩
    	private Double highestScore; // 课程最高成绩
    	private Double creditPoints; // 学分
    
    
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getStudentNumber() {
    		return studentNumber;
    	}
    
    	public void setStudentNumber(String studentNumber) {
    		this.studentNumber = studentNumber;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getCourseName() {
    		return courseName;
    	}
    
    	public void setCourseName(String courseName) {
    		this.courseName = courseName;
    	}
    
    	public Double getScore() {
    		return score;
    	}
    
    	public void setScore(Double score) {
    		this.score = score;
    	}
    
    	public Double getHighestScore() {
    		return highestScore;
    	}
    
    	public void setHighestScore(Double highestScore) {
    		this.highestScore = highestScore;
    	}
    
    	public Double getCreditPoints() {
    		return creditPoints;
    	}
    
    	public void setCreditPoints(Double creditPoints) {
    		this.creditPoints = creditPoints;
    	}
    }
    

    2、Score.hbm.xml映射文件

    <?xml version="1.0"?>
    			<!DOCTYPE hibernate-mapping PUBLIC 
    				"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    				"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.wsz.entity.Score">
    		<id name="id">
    			<generator class="identity" />
    		</id>
    		<property name="studentNumber" />
    		<property name="name" />
    		<property name="courseName" />
    		<property name="score" />
    		<property name="highestScore" />
    		<property name="creditPoints" />
    	</class>
    </hibernate-mapping>

    3、hibernate配置文件   hibernate.cfg.xml

    <!DOCTYPE hibernate-configuration PUBLIC
    			"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    			"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    			<hibernate-configuration>
    				<!--一个数据库一个session-factory定义-->
    				<session-factory>
    					<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_score</property>
    					<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    					<property name="hibernate.connection.username">root</property>
    					<property name="hibernate.connection.password">admin</property>
    				    <property name="hibernate.current_session_context_class">thread</property> 
    					<!--数据库方言,不同数据库的方言不同-->
    					<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    					<!--执行时会输出sql语句,方便调试-->
    					<property name="hibernate.show_sql">true</property>
    					<!--所有的实体对象的配置文件都要在这里关联起来-->
    					<mapping resource="com/wsz/entity/Score.hbm.xml"/>
    				</session-factory>
    			</hibernate-configuration>

    4、ScoreDao.java

    package com.wsz.entity;
    
    import org.hibernate.Session;
    
    public class ScoreDao {
    	
    	public void addScore(Score score) {
    		Session session = null;
    		try {
    			session = HibernateUtils.getSessionFactory().getCurrentSession();
    			session.beginTransaction();
    			
    			session.save(score);
    
    			session.getTransaction().commit();
    		}catch(Exception e) {
    			e.printStackTrace();
    			session.getTransaction().rollback();
    		}
    	}
    	
    
    }
    

    5、初始化数据

    package com.wsz.entity;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    import junit.framework.TestCase;
    
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    public class InitDate  extends TestCase {
    	 String strFilePath = "C:\\";// 设置路径
    	 String strFileName = "控计学院" + ".xls";// 设置名称
    	ScoreDao scoreDao=new ScoreDao();
    
    	// 导入excel表数据到数据库
    	public  void importScore() {
    		try {
    			File fSource = new File(strFilePath + strFileName);
    			FileInputStream in = new FileInputStream(fSource);
    			HSSFWorkbook workbook = new HSSFWorkbook(in);
    			HSSFSheet sheet = workbook.getSheetAt(0); // 默认读取第一个工作簿
    
    			int count = sheet.getLastRowNum();
    			System.out.println(count); // 数据的行数
    
    			HSSFRow temprow = sheet.getRow(0);
    			System.out.println(temprow.getCell(0).getStringCellValue());
    			System.out.println(temprow.getCell(1).getStringCellValue());
    			System.out.println(temprow.getCell(2).getStringCellValue());
    			System.out.println(temprow.getCell(3).getStringCellValue());
    			System.out.println(temprow.getCell(4).getStringCellValue());
    			System.out.println(temprow.getCell(5).getStringCellValue());
    
    			for (int i = 1; i < count + 1; i++) {
    				Score score = new Score();
    
    				HSSFRow row = sheet.getRow(i);
    				score.setStudentNumber(row.getCell(0).getStringCellValue());
    				score.setName(row.getCell(1).getStringCellValue());
    				score.setCourseName(row.getCell(2).getStringCellValue());
    				score.setCreditPoints(Double.valueOf(row.getCell(3).getStringCellValue()));
    				score.setScore(Double.valueOf(row.getCell(4).getStringCellValue()));
    				score.setHighestScore(Double.valueOf(row.getCell(5).getStringCellValue()));
    			
    				// 保存数据
    				scoreDao.addScore(score);
    				
    				System.out.println(score.getId());
    				System.out.println(score.getStudentNumber());
    				System.out.println(score.getName());
    				System.out.println(score.getCourseName());
    				System.out.println(score.getScore());
    				System.out.println(score.getHighestScore());
    				System.out.println(score.getCreditPoints());
    
    			}
    
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    6、ExportDB.java

    package com.wsz.entity;
    
    import org.hibernate.cfg.Configuration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    
    public class ExportDB {
    	public static void main(String[] args) {
    		
    		//读取hibernate.cfg.xml文件
    		Configuration cfg = new Configuration().configure();
    		
    		SchemaExport export = new SchemaExport(cfg);
    		
    		export.create(true, true);
    	}
    }

    7、HibernateUtils.java

    package com.wsz.entity;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtils {
    	private static SessionFactory factory;
    	static {
    		try {
    			Configuration cfg = new Configuration().configure();
    			factory = cfg.buildSessionFactory();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	
    	public static SessionFactory getSessionFactory() {
    		return factory;
    	}
    	// factory.getCurrentSession()可以用于同一线程的多个方法,以保证使用同一个Session
    	public static Session getSession() {
    		return factory.openSession();
    	}
    
    	public static void closeSession(Session session) {
    		if (session != null) {
    			if (session.isOpen()) {
    				session.close();
    			}
    		}
    	}
    }

    8、查看排名的sql语句(没写client)

    select name ,sum(score/highestScore*creditPoints*100)/sum(creditPoints) as “成绩” from score group by name  order by sum(score/highestScore*creditPoints*100)/sum(creditPoints) desc;

     9、结果:

  • 相关阅读:
    PTA(Basic Level)1012.数字分类
    PTA(Basic Level)1011.A+B和C
    PTA(Basic Level)1008.数组元素循环右移问题
    PTA(Basic Level)1009.说反话
    PTA(Basic Level)1010.一元多项式求导
    Leetcode 38.报数 By Python
    Leetcode 35.搜索插入位置 By Python
    查看Linux的所有线程
    Linux内核模块编程——Hello World模块
    JSP内置对象总结
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637166.html
Copyright © 2020-2023  润新知