(1)设计图形化界面,至少包括文本类控件类。接收从键盘输入姓名、学号、成绩,并保存到文本文件中,重复进行。(2)从文件中读取各学生的成绩,并计算所有学生成绩的平均值、最大值和最小值,排序后输出到另一文本文件。
较为简单版本(直接创建相应的文本文档,降低了难度)
缺点:当计算成绩之后,再添加学生信息,无法读取之前录入的学生信息
效果图
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.Collections;
import java.util.Vector;
public class Question_5 {
public static void main(String[]args) throws Exception{
JFrame myFrame=new JFrame("录入学生信息");
myFrame.setBounds(100,100,400,250);
myFrame.setResizable(false);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setLayout(new FlowLayout(FlowLayout.CENTER));
JPanel NamePanel=new JPanel();
JLabel NameLabel=new JLabel("Name:");
JTextField NameText=new JTextField(30);
NamePanel.add(NameLabel);
NamePanel.add(NameText);
JPanel IDPanel=new JPanel();
JLabel IDLabel=new JLabel(" ID:");
JTextField IDText=new JTextField(30);
IDPanel.add(IDLabel);
IDPanel.add(IDText);
JPanel MarkPanel=new JPanel();
JLabel MarkLabel=new JLabel(" Mark :");
JTextField MarkText=new JTextField(30);
MarkPanel.add(MarkLabel);
MarkPanel.add(MarkText);
JPanel ResultPanel=new JPanel();
JLabel MaxLabel=new JLabel("Max:");
JTextField MaxText=new JTextField(5);
JLabel AverageLabel=new JLabel("Average:");
JTextField AverageText=new JTextField(5);
JLabel MinLabel=new JLabel("Min:");
JTextField MinText=new JTextField(5);
ResultPanel.add(MaxLabel);
ResultPanel.add(MaxText);
ResultPanel.add(AverageLabel);
ResultPanel.add(AverageText);
ResultPanel.add(MinLabel);
ResultPanel.add(MinText);
JPanel ElectPanel=new JPanel();
JButton AddBtn=new JButton(" Add ");
JButton ConBtn=new JButton("Continue");
JButton CounterBtn=new JButton("Counter");
ElectPanel.add(AddBtn);
ElectPanel.add(ConBtn);
ElectPanel.add(CounterBtn);
myFrame.add(NamePanel);
myFrame.add(IDPanel);
myFrame.add(MarkPanel);
myFrame.add(ResultPanel);
myFrame.add(ElectPanel);
myFrame.setVisible(true);
File StudentFile=new File("D:\\JAVA_Code_Homework\\4\\Student.txt");
File StudentMark=new File("D:\\JAVA_Code_Homework\\4\\StudentMark.txt");
FileOutputStream Fos=new FileOutputStream(StudentFile);
FileInputStream fis=new FileInputStream(StudentFile);
FileOutputStream fos=new FileOutputStream(StudentMark);
AddBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String Ins=NameText.getText()+" "+IDText.getText()+"#"+MarkText.getText()+"\n";
byte[] bytes=new byte[1024];
bytes=Ins.getBytes();
Fos.write(bytes,0,bytes.length);
System.out.println("信息录入成功");
}catch(IOException e1){
System.out.println(e1);
}
}
});
ConBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
NameText.setText("");
IDText.setText("");
MarkText.setText("");
}
});
CounterBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BufferedReader bf=new BufferedReader(new InputStreamReader(fis));
String s;
Vector<Double> MarkArray=new Vector<>(0);
Double sum=0.0;
try {
while ((s = bf.readLine() )!= null) {
String temp=s.substring(s.indexOf('#')+1);
MarkArray.add(Double.parseDouble(temp));
}
Collections.sort(MarkArray);
for(int i=0;i<MarkArray.size();i++){
sum+=MarkArray.get(i);
}
MaxText.setText(String.valueOf(MarkArray.get(0)));
AverageText.setText(String.valueOf(sum/MarkArray.size()));
MinText.setText(String.valueOf(MarkArray.get((MarkArray.size()-1))));
String Ins=MaxText.getText()+" "+AverageText.getText()+" "+MinText.getText()+"\n";
byte[] b=new byte [1024];
b=Ins.getBytes();
fos.write(b,0,b.length);
System.out.println("成绩录入成功");
}catch(IOException e1) {
}
}
});
}
}