我是二年级学生。我必须完成我的java项目,但如果你们中的任何人都可以提供帮助,我将面临一些问题。我的项目是使用java输入excel工作表中的学生标记并计算标记的平均值。我写了下面的代码,但效果不好......
这是我的代码......
import java.util.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import java.io.*;
public class exceluser {
public static void main(String[] args){
String St_Id = "";
String Name = "";
int Marks = 0;
boolean keepRunning = true;
//Blank workbook
HSSFWorkbook workbook = new HSSFWorkbook();
//Blank sheet
HSSFSheet sheet = workbook.createSheet("Seating Details");
//create heading
Row rowHeading = sheet.createRow(0);
rowHeading.createCell(0).setCellValue("Student ID");
rowHeading.createCell(1).setCellValue("Student(s) Name");
rowHeading.createCell(2).setCellValue("Marks");
//Font size and style loop for my headers
for(int i = 0; i < 3; i++)
{
CellStyle stylerowHeading = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
font.setFontName(HSSFFont.FONT_ARIAL);
font.setFontHeightInPoints((short) 11);
stylerowHeading.setFont(font);
rowHeading.getCell(i).setCellStyle(stylerowHeading);
}
int rownum=1;
while(keepRunning){
Scanner scnr = new Scanner(System.in);
System.out.print("Enter student ID : ");
St_Id = scnr.nextLine();
if(St_Id.equals("EXIT"))
{
System.out.print("You have ended the program");
System.exit(0);
}
else
{
System.out.print("Enter the student name : ");
Name = scnr.nextLine();
System.out.print("Enter the marks of the student : ");
Marks = scnr.nextInt();
//This data needs to be written (Object[])
Map <String, Object[]> data = new TreeMap<String, Object[]>();
data.put("2", new Object[] {St_Id, Name, Marks});
//Iterate over data and write to sheet
Set<String> keyset = data.keySet();
for(String Key : keyset)
{
Row row = sheet.createRow(rownum++);
Object [] objArr = data.get(Key);
int cellnum = 0;
for(Object obj : objArr)
{
Cell cell = row.createCell(cellnum++);
if(obj instanceof String)
{
cell.setCellValue((String)obj);
}
else if(obj instanceof Integer)
cell.setCellValue((Integer)obj);
}
}
if(!(St_Id.equals("EXIT")))
{
rownum++;
}
//Auto size my columns that will be filled out with user input info.
for (int i = 0; i < 3; i++)
{
sheet.autoSizeColumn(i);
}
}
try{
//save to excel file
FileOutputStream out = new FileOutputStream(new File("Student Grading Report.xls"));
workbook.write(out);
out.flush();
out.close();
System.out.println("Record added Succesfully...");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}//pub static void end brace
}//pub class end brace
如果有人可以在这段代码中帮助我...这段代码在执行时在输入一个学生数据后在excel中留下一行而m面临发现学生平均分数的问题.. ???
答案 0 :(得分:1)
这是一项任务,所以我不会给你代码,但会给你一些要考虑的要点。
你真的应该为不同的任务使用不同的方法 - 这将使你的代码更容易理解,也更容易编写和调试。
您目前只能为学生输入一个标记。您可能希望将地图放在循环之外,并将密钥作为学生ID,并为学生标记使用ArrayList
整数。更好的方法是创建一个Student
类来保存这些数据。
要计算平均值,您只需计算该学生列表中的平均值
不要使用System.exit(0)
退出程序,而是使用它将keepRunning
布尔值设置为false以从循环中断开。
在更改上述内容后,请考虑将代码写入循环外的文件中。