📄 caky.java
字号:
package 学生考试成绩分析程序;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import java.util.*;public class Caky extends JFrame implements ActionListener{ static int[] count={0,0,0,0,0}; static int k,sum=0,icount=0,m; JButton jbExit; static String[] line; static String[] class1; static String[] name; static String[] score; public Caky(String Class,String course){ try{ BufferedReader input =new BufferedReader(new FileReader("score.txt")); String L=input.readLine(); double sc=0; String s3,s4; StringTokenizer tokenizer=new StringTokenizer(L,"*"); m=tokenizer.countTokens(); line=new String[m]; class1=new String[m/7]; name=new String[m/7]; score=new String[m/7]; for(int i=0;tokenizer.hasMoreTokens();i++) { line[i]=tokenizer.nextToken(); } for(int j=0,n=1;j<m;j++,n++) { if(n==1){ class1[icount]=line[j]; name[icount]=line[j+1]; score[icount]=line[j+4]; icount++; } if(n==7){ n=0; } } StringTokenizer scanner3=new StringTokenizer(Class); StringTokenizer scanner4=new StringTokenizer(course); s3=scanner3.nextToken(); s4=scanner4.nextToken(); for(int n=0;n<m/7;n++) { if((class1[n].equals(s3))&&(name[n].equals(s4))){ sc=Double.parseDouble(score[n]); if(sc<=59&&sc>=0) count[0]++; if(sc<=69&&sc>=60) count[1]++; if(sc<=79&&sc>=70) count[2]++; if(sc<=89&&sc>=80) count[3]++; if(sc<=100&&sc>=90) count[4]++; sum++; } } input.close(); } catch(Exception es){ JOptionPane.showMessageDialog(null, "分析失败"); } jbExit=new JButton("EXIT"); JPanel jpExit=new JPanel(); jpExit.add(jbExit); jbExit.addActionListener(this); getContentPane().add(new RectPanel(),BorderLayout.CENTER); getContentPane().add(jpExit,BorderLayout.SOUTH); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setTitle("饼图分析"); this.setLocation(400,300); this.setSize(600,380); this.setVisible(true); } class RectPanel extends JPanel{ protected void paintComponent(Graphics g){ double m=(1-count[0]/sum-count[1]/sum-count[2]/sum-count[3]/sum-count[4]/sum)*1000/5000.0; super.paintComponent(g); g.setColor(Color.BLACK); g.drawRect(getWidth()/10,getHeight()/8,getWidth()/8*7,getHeight()/4*3); g.setColor(Color.GREEN); g.fillArc((getWidth()/10+getWidth()/7*6)/5*2, (getHeight()/8+getHeight()/4*3)/3, getHeight()/4*3/2, getHeight()/4*3/2, 0, (int)(count[0]+m)*360/sum); if ((getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+80+(int)(Math.cos( 360*count[0]/sum/2*3.14/180)*getHeight()/4*3/2/2)<(getWidth()/10+getWidth()/7*6)/5*2+getHeight()/4*3/2) g.drawString("<60分\n "+1000*count[0]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2-80+getHeight()/4*3/2/2+(int)(Math.cos( 360*count[0]/sum/2*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( 360*count[0]/sum/2*3.14/180)*getHeight()/4*3/2/2)); else g.drawString("<60分\n "+1000*count[0]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+5+getHeight()/4*3/2/2+5+(int)(Math.cos( 360*count[0]/sum/2*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( 360*count[0]/sum/2*3.14/180)*getHeight()/4*3/2/2)); g.setColor(Color.BLUE); g.fillArc((getWidth()/10+getWidth()/7*6)/5*2, (getHeight()/8+getHeight()/4*3)/3, getHeight()/4*3/2, getHeight()/4*3/2, (int)(count[0]+m)*360/sum, (int)(count[1]+m)*360/sum); if ((getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+80+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum/2)*3.14/180)*getHeight()/4*3/2/2)<(getWidth()/10+getWidth()/7*6)/5*2+getHeight()/4*3/2) g.drawString("60-69分\n "+1000*count[1]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2-80+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2-20)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); else g.drawString("60-69分\n "+1000*count[1]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+5+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); g.setColor(Color.RED); g.fillArc((getWidth()/10+getWidth()/7*6)/5*2, (getHeight()/8+getHeight()/4*3)/3, getHeight()/4*3/2, getHeight()/4*3/2, (int)(count[0]+m)*360/sum+(int)(count[1]+m)*360/sum, 360*count[2]/sum); if ((getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+80+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum/2)*3.14/180)*getHeight()/4*3/2/2)<(getWidth()/10+getWidth()/7*6)/5*2+getHeight()/4*3/2) g.drawString("70-79分\n "+1000*count[2]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2-80+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); else g.drawString("70-79分\n "+1000*count[2]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+5+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); g.setColor(Color.MAGENTA); g.fillArc((getWidth()/10+getWidth()/7*6)/5*2, (getHeight()/8+getHeight()/4*3)/3, getHeight()/4*3/2, getHeight()/4*3/2,(int)(count[0]+m)*360/sum+((int)(count[1]+m)*360/sum+(int)(count[2]+m)*360/sum), 360*count[3]/sum); if ((getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+80+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum/2)*3.14/180)*getHeight()/4*3/2/2)<(getWidth()/10+getWidth()/7*6)/5*2+getHeight()/4*3/2) g.drawString("80-89分\n "+1000*count[3]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2-90+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); else g.drawString("80-89分\n "+1000*count[3]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+5+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2+12)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); g.setColor(Color.BLACK); g.fillArc((getWidth()/10+getWidth()/7*6)/5*2, (getHeight()/8+getHeight()/4*3)/3, getHeight()/4*3/2, getHeight()/4*3/2,(int)(count[0]+m)*360/sum+(int)(count[1]+m)*360/sum+(int)(count[2]+m)*360/sum+(int)(count[3]+m)*360/sum, (int)(count[4]+m)*360/sum); if ((getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+80+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum+360*count[4]/sum/2)*3.14/180)*getHeight()/4*3/2/2)<(getWidth()/10+getWidth()/7*6)/5*2+getHeight()/4*3/2) g.drawString(">=90分\n "+1000*count[4]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2-80+ getHeight()/4*3/2/2-90+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum+360*count[4]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum+360*count[4]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); else g.drawString(">=90分\n "+1000*count[4]/sum/10.0+"%", (getWidth()/10+getWidth()/7*6)/5*2+ getHeight()/4*3/2/2+10+(int)(Math.cos( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum+360*count[4]/sum/2)*3.14/180)*getHeight()/4*3/2/2), ( (getHeight()/8+getHeight()/4*3)/3+getHeight()/4*3/2/2)-(int)(Math.sin( (360*count[0]/sum+360*count[1]/sum+360*count[2]/sum+360*count[3]/sum+360*count[4]/sum/2)*3.14/180)*getHeight()/4*3/2/2)); g.setColor(Color.BLACK); g.drawString("成绩百分比", getWidth()/9*4, getHeight()/5); g.setColor(Color.GREEN); g.drawString("<60分", getWidth()/6*5, getHeight()/3); g.setColor(Color.BLUE); g.drawString("60-69分", getWidth()/6*5, getHeight()/15*6); g.setColor(Color.RED); g.drawString("70-79分", getWidth()/6*5, getHeight()/15*7); g.setColor(Color.MAGENTA); g.drawString("80-89分", getWidth()/6*5, getHeight()/15*8); g.setColor(Color.BLACK); g.drawString(">=90分", getWidth()/6*5, getHeight()/15*9); g.setColor(Color.LIGHT_GRAY); g.drawRect(getWidth()/4*3, getHeight()/15*4, getWidth()/5, getHeight()/26*10); g.setColor(Color.GREEN); g.fillRect(getWidth()/9*7, getHeight()/10*3,getHeight()/20,getHeight()/20 ); g.setColor(Color.BLUE); g.fillRect(getWidth()/9*7, getHeight()/10*3+getHeight()/15,getHeight()/20,getHeight()/20 ); g.setColor(Color.RED); g.fillRect(getWidth()/9*7, getHeight()/10*3+getHeight()/15*2,getHeight()/20,getHeight()/20 ); g.setColor(Color.MAGENTA); g.fillRect(getWidth()/9*7, getHeight()/10*3+getHeight()/15*3,getHeight()/20,getHeight()/20 ); g.setColor(Color.BLACK); g.fillRect(getWidth()/9*7, getHeight()/10*3+getHeight()/15*4,getHeight()/20,getHeight()/20 ); }}public void actionPerformed(ActionEvent e) { if(e.getSource()==jbExit){ k=0; sum=0; icount=0; m=0; for(int k=0;k<5;k++) count[k]=0; this.setVisible(false); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -