import javax.swing.*;
import java.awt.*;
import java.util.*;
public class HistogramPanel extends JPanel {
static final Color[] c = new Color[]{Color.MAGENTA,Color.blue,Color.RED,Color.GREEN,Color.pink};
static final String[] str = new String[]{"90 - 100","80 - 89","70 - 79","60 - 69","0 - 59"};
static int[] num = new int[5];
@Override
protected void paintComponent(Graphics g) {
int frameHeight = getHeight();
int frameWidth = getWidth();
String font = "宋体";
int width = 60;
int height = 4;
g.setColor(Color.white);
g.fillRect(0, 0, frameWidth, frameHeight);
g.setColor(Color.BLACK);
g.setFont(new Font(font, 1, 20));
g.setColor(Color.GRAY);
for(int i = 150;i >= 30;i-=20){
g.drawLine(frameWidth / 2 - 210, frameHeight / 3 + i, frameWidth / 2 + 210, frameHeight / 3 + i);
}
g.setColor(Color.BLACK);
g.setFont(new Font(font, 0, 12));
String s;
for(int i = 0;i <= 6;i++){
s = "";
s += 30 - 5*i;
g.drawString(s, frameWidth / 2 - 228, frameHeight / 3 + 35 + i*20);
}
int initHeight = frameHeight / 3 + 150;
int initWidth = frameWidth / 2 - 200;
for (int i = 0; i < 5; i++) {
int h = num[i];
g.setColor(c[i]);
g.fillRect(initWidth + i * (width + 20), initHeight - h * height, width, h * height);
g.fillRect(initWidth + 20 + i * (width + 10), initHeight + 20, 8, 8);
g.setColor(Color.BLACK);
g.drawString(str[i], initWidth + 30 + i * (width + 10), initHeight + 28);
}
}
public static void main(String[] args) {
JFrame frame;
Scanner sc = new Scanner(System.in);
int temp,res,max,min,cnt,jg;
while(true){
System.out.println("=========请输入一组数据============");
System.out.println("数据输入完成后,输入 任意负数 并 敲回车");
frame = new JFrame();
Arrays.fill(num,0);
res = 0;
max = 0;
min = 100;
cnt = 0;
jg = 0;
while(sc.hasNext()){
temp = sc.nextInt();
if(temp < 0)break;
if(temp <= 100 && temp >= 90){
num[0]++;
}else if(temp < 90 && temp >= 80){
num[1]++;
}else if(temp < 80 && temp >= 70){
num[2]++;
}else if(temp < 70 && temp >= 60){
num[3]++;
}else if(temp < 60 && temp >= 0){
num[4]++;
}
cnt++;
max = Math.max(max,temp);
min = Math.min(min,temp);
res += temp;
}
for(int i = 0;i < 4;i++)jg += num[i];
System.out.println("=============结果================");
for(int i = 0;i < 5;i++){
System.out.println("分数段: " + str[i] + "\t人数: " + num[i] + "\t百分比: " + String.format("%.2f",num[i]*100.0/cnt) + "%");
}
System.out.println("最高分: " + max);
System.out.println("最低分: " + min);
System.out.println("平均分: " + String.format("%.2f",res*1.0/cnt));
System.out.println("及格率: " + String.format("%.2f",jg*100.0/cnt) + "%");
System.out.println("=================================");
frame.getContentPane().add(new HistogramPanel());
frame.setSize(800, 600);
frame.setVisible(true);
System.out.println("请输入任意字符,回车后继续");
String s = sc.next();
System.out.println("*******本组数据计算结束*******");
}
}
}