swing java 学生管理系统_学生成绩管理系统(java swing)

import javax.swing.*;importjavax.swing.event.ChangeEvent;importjavax.swing.event.ChangeListener;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.InputStreamReader;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjavax.swing.filechooser.FileNameExtensionFilter;classInterface {

JFrame jf= new JFrame("From:shish");

JPanel jp1= new JPanel(), jp2 = new JPanel(), jpinit = new JPanel(), jpAbout = newJPanel();

JPanel jptitle= newJPanel();

Box vbox1= Box.createVerticalBox(); //底下编辑垂直分布

Box vboxmain = Box.createVerticalBox(); //主要展示面垂直分布

Menu m = new Menu(); //菜单

editBottom eb = new editBottom(); //底部编辑框

Data d = new Data(); //数据处理

File nfile = null; //保存地址

File rfile = null; //读取文件地址

public int now_number = 0; //系统中学生数量

public int now_sum = 0; //是否展示总分

public int now_avg = 0; //是否展示平均分

public int new_file = 0; //是否存在新建的页面

public int fenxi = 0; //是否展示数据分析

public int now_view = 0; //是否为视图状态

public int now_save = 0; //是否保存//主页

public voidinitInterface() {

vboxmain.removeAll();

JTextArea jta= newJTextArea();

jta.setBackground(Color.white);

jta.setText("\n\n\n\n " +

" 欢 迎 \n " +

" 使 用 学 生 管 理 系 统 !\n\n\n " +

" 独学而无友┗( ▔, ▔ )┛则孤陋寡闻 " +

" \n\t\t ღゝ◡╹)ノ♡\n\n\n\n\n\n\n");

jta.setFont(new Font("华文行楷", Font.PLAIN, 34));

jta.setEditable(false);

jpinit.add(jta,"Center");

vboxmain.add(jpinit);

vboxmain.repaint();

jf.add(vboxmain);

}//菜单关于界面

public voidaboutInterface() {

JTextArea jta= newJTextArea();

jta.setBackground(Color.white);

jta.setText("\n\n作者:shish " +

" " +

"\n博客:https://www.cnblogs.com/shish\n" +

"GitHub:https://github.com/shishenhao\n" +

"关于作者:超级无敌的菜鸡\n" +

"声援作者:您的鼓励是作者的最大动力!\n\n\n\n\n\n\n\n\n\n\n");

jta.setFont(new Font("华文行楷", Font.PLAIN, 32));

jta.setEditable(false);

jpAbout.add(jta,"Center");

vboxmain.add(jpAbout);

jf.add(vboxmain);

}//新建一个窗口的界面

public voidnewCreate() {

jptitle.removeAll();

JTextArea jta= new JTextArea(1, 70);

jta.setBackground(Color.white);

jta.setEditable(false);

jta.setFont(new Font("华文行楷", Font.PLAIN, 28));

jta.setText(" \t\t 学 生 成 绩 管 理 系 统 ");

JTextArea jtaa= new JTextArea(1, 70);

jtaa.setBackground(Color.LIGHT_GRAY);

jtaa.setFont(new Font("微软雅黑", Font.PLAIN, 22));

jtaa.setEditable(false);

jtaa.setText("\t 编号 | 学号 | 姓名 | 课程1 | 课程2 | 总分 ");

vboxmain.removeAll();

jptitle.add(jta);

jptitle.add(jtaa);

vboxmain.add(jptitle);

vboxmain.repaint();

jf.setVisible(true);

}//展现数据

public voidshowData() {

JTextArea[] jtas= new JTextArea[20];

vboxmain.removeAll();

jptitle.removeAll();

JTextArea jta= new JTextArea(1, 70);

jta.setBackground(Color.white);

jta.setEditable(false);

jta.setFont(new Font("华文行楷", Font.PLAIN, 28));

jta.setText(" \t\t 学 生 成 绩 管 理 系 统 ");

JTextArea jtaa= new JTextArea(1, 70);

jtaa.setBackground(Color.LIGHT_GRAY);

jtaa.setFont(new Font("微软雅黑", Font.PLAIN, 22));

jtaa.setEditable(false);

jtaa.setText("\t 编号 | 学号 | 姓名 | 课程1 | 课程2 | 总分 ");

jptitle.add(jta);

jptitle.add(jtaa);if (now_number <= 0) {

vboxmain.add(jptitle);

vboxmain.repaint();

jf.setVisible(true);return;

}for (int i = 1; i <= now_number; i++) {

jtas[i]= newJTextArea();

jtas[i].setBackground(Color.white);if (now_sum == 0) {

jtas[i].setText(String.format(" %d %s %s%25.1f%25.1f " +

" ", i, d.zhuyao[i].id, d.zhuyao[i].name, d.zhuyao[i].grade[1], d.zhuyao[i].grade[2]));

}else if (now_sum == 1) {

jtas[i].setText(String.format(" %d %s %s%25.1f%25.1f%24.2f " +

" ", i, d.zhuyao[i].id, d.zhuyao[i].name, d.zhuyao[i].grade[1], d.zhuyao[i].grade[2], d.zhuyao[i].grade[3]));

}

jtas[i].setFont(new Font("华文行楷", Font.PLAIN, 20));

jtas[i].setEditable(false);

jptitle.add(jtas[i]);

}if (now_avg == 1) {

JTextArea jav= newJTextArea();

jav.setBackground(Color.white);

jav.setFont(new Font("华文行楷", Font.PLAIN, 20));

jav.setEditable(false);if (now_sum == 1) {

jav.setText(String.format(" 平均分 " +

" %25.2f%25.2f%23.2f " +

" ", d.avg[1], d.avg[2], d.avg[3]));

}else{

jav.setText(String.format(" 平均分 %25.2f%25.2f " +

" ", d.avg[1], d.avg[2]));

}

jptitle.add(jav);

}

jptitle.add(createEmptyJTA());if (fenxi == 1) {

JTextArea jfx= newJTextArea();

jfx.setBackground(Color.white);

jfx.setFont(new Font("华文行楷", Font.PLAIN, 20));

jfx.setEditable(false);

d.analysis();

jfx.setText(String.format(" 课程1成绩分析:优秀人数(>=85)为 %d 占比 %.2f, " +

"良好人数(>=70)为 %d 占比 %.2f; " +

" \n " +

" 及格人数(>=60)为 %d 占比 %.2f, 不及格人数(<60)为 %d " +

"占比 %.2f。", d.numYouxiu[0], d.youxiuB[0], d.numLianghao[0], d.lianghaoB[0],

d.numJige[0], d.jigeB[0], d.numBujige[0], d.bujigeB[0]));

jfx.append(String.format("\n 课程2成绩分析:优秀人数(>=85)为 %d 占比 %.2f, " +

"良好人数(>=70)为 %d 占比 %.2f; " +

" \n " +

" 及格人数(>=60)为 %d 占比 %.2f, 不及格人数(<60)为 %d " +

"占比 %.2f。", d.numYouxiu[1], d.youxiuB[1], d.numLianghao[1], d.lianghaoB[1],

d.numJige[1], d.jigeB[1], d.numBujige[1], d.bujigeB[1]));

jptitle.add(jfx);

jptitle.add(createEmptyJTA());

}

vboxmain.add(jptitle);

vboxmain.repaint();

jf.setVisible(true);

}//展现视图

public voidshowView(){

JTextArea[] jtas= new JTextArea[20];

vboxmain.removeAll();

jptitle.removeAll();

JTextArea jta= new JTextArea(1, 70);

jta.setBackground(Color.white);

jta.setEditable(false);

jta.setFont(new Font("华文行楷", Font.PLAIN, 28));

jta.setText(" \t\t 学 生 成 绩 管 理 系 统 ");

JTextArea jtaa= new JTextArea(1, 70);

jtaa.setBackground(Color.LIGHT_GRAY);

jtaa.setFont(new Font("微软雅黑", Font.PLAIN, 22));

jtaa.setEditable(false);

jtaa.setText("\t 编号 | 学号 | 姓名 | 课程1 | 课程2 | 总分 ");

jptitle.add(jta);

jptitle.add(jtaa);if (now_number <= 0) {

vboxmain.add(jptitle);

vboxmain.repaint();

jf.setVisible(true);return;

}for (int i = 1; i <= now_number; i++) {

jtas[i]= newJTextArea();

jtas[i].setBackground(Color.white);if (now_sum == 0) {

jtas[i].setText(String.format(" %d %s %s%25.1f%25.1f " +

" ", i, d.vDate[i].id, d.vDate[i].name, d.vDate[i].grade[1], d.vDate[i].grade[2]));

}else if (now_sum == 1) {

jtas[i].setText(String.format(" %d %s %s%25.1f%25.1f%24.2f " +

" ", i, d.vDate[i].id, d.vDate[i].name, d.vDate[i].grade[1], d.vDate[i].grade[2], d.vDate[i].grade[3]));

}

jtas[i].setFont(new Font("华文行楷", Font.PLAIN, 20));

jtas[i].setEditable(false);

jptitle.add(jtas[i]);

}if (now_avg == 1) {

JTextArea jav= newJTextArea();

jav.setBackground(Color.white);

jav.setFont(new Font("华文行楷", Font.PLAIN, 20));

jav.setEditable(false);if (now_sum == 1) {

jav.setText(String.format(" 平均分 " +

" %25.2f%25.2f%23.2f " +

" ", d.avg[1], d.avg[2], d.avg[3]));

}else{

jav.setText(String.format(" 平均分 %25.2f%25.2f " +

" ", d.avg[1], d.avg[2]));

}

jptitle.add(jav);

}

jptitle.add(createEmptyJTA());

JTextArea jzhu= newJTextArea();

jzhu.setFont(new Font("仿宋", Font.PLAIN, 18));

jzhu.setEditable(false);

jzhu.setText(" 注:当前为视图模式,无法进行编辑,返回需要在查看按当前窗口!!!" +

" ");

jptitle.add(jzhu);

vboxmain.add(jptitle);

vboxmain.repaint();

jf.setVisible(true);

}//展示界面

public voidshowFrame() {

Font f= new Font("微软雅黑", Font.PLAIN, 16);

UIManager.put("Menu.font", f);

UIManager.put("MenuItem.font", f);

UIManager.put("CheckBoxMenuItem.font", f);

UIManager.put("ComboBox.font", f);

UIManager.put("Label.font", f);

UIManager.put("Button.font", f);

UIManager.put("FileChooser.font", f);

jf.setSize(1000, 720); //大小

jf.setAlwaysOnTop(true);

jf.setResizable(false);//不可拖动

jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

jf.setBackground(Color.white);

initInterface();

eb.init();

m.init();

jf.setVisible(true);

}//添加特定的空行

publicJTextArea createEmptyJTA() {

JTextArea jkongbai= newJTextArea();

jkongbai.setBackground(Color.LIGHT_GRAY);

jkongbai.setEditable(false);

jkongbai.setFont(new Font("宋体", Font.PLAIN, 4));

jkongbai.setText("\t " +

"\t " +

"\t " +

"\t " +

"\t ");returnjkongbai;

}//菜单

classMenu {

JMenuBar bar= newJMenuBar();

JMenu file, edit, statistic, about, sort_asc, sort_desc, view;

JMenuItem file_new, file_open, file_exit, file_save, file_lsave, file_guanbi, st_result, zuozhe, zhuye;

JMenuItem s_sum, s_avg, chexiao, qinglin, nowView;

JMenuItem course11, coures21, total1, course12, coures22, total2;

JCheckBoxMenuItem edit_show;public int flag = 0;//出现编辑框的判断信号//初始化

public voidinit() {//第一层菜单

file = new JMenu("文件 ");

edit= new JMenu(" 编辑 ");

statistic= new JMenu(" 统计 ");

about= new JMenu(" 关于 ");

view= new JMenu(" 查看 ");//添加菜单

bar.add(file);

bar.add(edit);

bar.add(view);

bar.add(statistic);

bar.add(about);//设置文件菜单

file_new = new JMenuItem(" 新建 ");

file_open= new JMenuItem(" 导入 ");

file_exit= new JMenuItem(" 退出 ");

file_lsave= new JMenuItem(" 另存为 ");

file_save= new JMenuItem(" 保存 ");

file_guanbi= new JMenuItem(" 关闭当前窗口 ");//添加文佳中菜单

file.add(file_new);

file.add(file_open);

file.add(file_save);

file.add(file_lsave);

file.addSeparator();

file.add(file_guanbi);

file.add(file_exit);//添加监视器

file_exit.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==file_exit) {if (new_file == 1) {int op = JOptionPane.showConfirmDialog(jf, " 退出是否进行保存!", "提示", JOptionPane.YES_NO_CANCEL_OPTION);if (op ==JOptionPane.YES_OPTION) {if (now_save != 1 && new_file == 1) {if (nfile == null) {

showFileSaveDialog(jf, nfile);

}if (nfile != null) {

writeText(nfile);

System.exit(0);

}

}

}else if (op ==JOptionPane.NO_OPTION)

System.exit(0);

}else if(new_file == 0){int jop = JOptionPane.showConfirmDialog(jf, "是否退出系统!", "提示", JOptionPane.YES_NO_OPTION);if(jop ==JOptionPane.YES_OPTION){

System.exit(0);

}else

return;

}

}

}

});//退出

file_new.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==file_new) {if (new_file == 1) {

JOptionPane.showMessageDialog(jf,"已存在窗口!", "提示", JOptionPane.WARNING_MESSAGE);return;

}

new_file= 1; //表示新建窗口成功

newCreate();

edit_show.setSelected(true); //出现编辑窗口

}

}

});//新建

file_save.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==file_save) {if (new_file == 1) {if (nfile == null)

showFileSaveDialog(jf, nfile);if (nfile != null) {

d.sort(3, 2);

writeText(nfile);

showData();

now_save= 1;

}

}

}

}

});//保存

file_lsave.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==file_lsave) {

File old= null;if(nfile != null) {

old= newFile(nfile.getPath());

}if (new_file == 1) {

showFileSaveDialog(jf, nfile);if(old != null) {if (nfile.getPath() !=old.getPath()) {

d.sort(3, 2);

writeText(nfile);

showData();

now_save= 1;

}

}else{if (nfile != null) {

d.sort(3, 2);

writeText(nfile);

showData();

now_save= 1;

}

}

}

}

}

});//另存为

file_open.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==file_open) {if (new_file == 1) {

JOptionPane.showMessageDialog(jf,"已有打开窗口,请先关闭窗口!", "提示", JOptionPane.WARNING_MESSAGE);return;

}

showFileOpenDialog(jf);if(rfile != null) {

new_file= 1;

readText(rfile);

nfile= newFile(rfile.getName());

d.calculate();

d.analysis();

showData();

}return;

}

}

});//导入

file_guanbi.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==file_guanbi) {if(now_number != 0) {if (now_save == 0) {if (new_file == 1) {if (nfile == null && rfile != null) {

nfile=rfile;

}else if (nfile == null)

showFileSaveDialog(jf, nfile);if (nfile != null) {

d.sort(3, 2);

writeText(nfile);

}

}

}while (nfile == null && new_file == 1) {int op = JOptionPane.showConfirmDialog(jf, "是否不进行保存?", "提示", JOptionPane.YES_NO_CANCEL_OPTION);if (op ==JOptionPane.YES_OPTION) {break;

}else if (op ==JOptionPane.NO_OPTION) {

showFileSaveDialog(jf, nfile);if (nfile != null) {

d.sort(3, 2);

writeText(nfile);

}

}else return;

}

}

new_file= 0;

now_save= 0;

rfile= null;

nfile= null;

now_number= 0;

now_view= 0;

initInterface();

edit_show.setSelected(false);return;

}

}

});//关闭窗口//设置编辑菜单

edit_show = new JCheckBoxMenuItem(" 编辑窗口 ");

chexiao= new JMenuItem(" 撤销 ");//qinglin = new JMenuItem(" 清零 ");//添加编辑菜单

edit.add(chexiao);//edit.add(qinglin);

edit.addSeparator();

edit.add(edit_show);//添加监视器

edit_show.addChangeListener(newChangeListener() {

@Overridepublic voidstateChanged(ChangeEvent e) {if (e.getSource() ==edit_show) {if (flag == 0) {

vbox1.add(jp1);

vbox1.add(jp2);

vbox1.add(Box.createVerticalStrut(5));

jf.add(vbox1,"South");

}else{

vbox1.removeAll();

vbox1.repaint();

}

flag= (flag + 1) % 2;

jf.setVisible(true);

}

}

});//编辑窗口

chexiao.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==chexiao) {if (!d.revocation()) { //撤销判断

JOptionPane.showMessageDialog(jf, "无撤销内容!", "提示", JOptionPane.WARNING_MESSAGE);return;

}

showData();

now_save= 0;

}

}

});//撤销//编辑查看菜单

nowView = new JMenuItem(" 当前窗口 ");//添加查看菜单

view.add(nowView);//添加监视器

nowView.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {

now_view= 0;if (new_file == 0) {return;

}if (now_number != 0) {

vboxmain.removeAll();

showData();

vboxmain.repaint();

jf.setVisible(true);

}

}

});//显示当前处理数据的页面//编辑统计菜单

sort_asc = new JMenu(" 升序排序 ");

sort_desc= new JMenu(" 降序排序 ");

st_result= new JCheckBoxMenuItem(" 成绩分析 ");

s_sum= new JCheckBoxMenuItem(" 总分 ");

s_avg= new JCheckBoxMenuItem(" 平均分 ");

st_result.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==st_result) {

fenxi= (fenxi + 1) % 2;if (new_file == 0) initInterface();else if (now_number == 0 && new_file != 0) newCreate();else if(now_view == 1) showView();elseshowData();

}

}

});//成绩分析

s_sum.addChangeListener(newChangeListener() {

@Overridepublic voidstateChanged(ChangeEvent e) {if (e.getSource() ==s_sum) {

now_sum= (now_sum + 1) % 2;if (new_file == 0) initInterface();else if (now_number == 0) newCreate();else if(now_view == 1) showView();elseshowData();

}

}

});//总分

s_avg.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==s_avg) {

now_avg= (now_avg + 1) % 2;if (new_file == 0) initInterface();else if (now_number == 0) newCreate();else if(now_view == 1) showView();elseshowData();

}

}

});//平均分//添加统计菜单

statistic.add(s_sum);

statistic.add(s_avg);

statistic.add(st_result);

statistic.addSeparator();

statistic.add(sort_asc);

statistic.add(sort_desc);

course11= new JMenuItem(" 课程1 ");

coures21= new JMenuItem(" 课程2 ");

total1= new JMenuItem(" 总分 ");

course12= new JMenuItem(" 课程1 ");

coures22= new JMenuItem(" 课程2 ");

total2= new JMenuItem(" 总分 ");//添加统计菜单的子菜单

sort_asc.add(course11);

sort_asc.add(coures21);

sort_asc.add(total1);

sort_desc.add(course12);

sort_desc.add(coures22);

sort_desc.add(total2);//添加监视器

course11.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if(e.getSource() ==course11){if(new_file == 1 && now_number > 0) {

now_view= 1;

d.sort(1, 2);

edit_show.setSelected(false);

showView();

jf.setVisible(true);

}

}

}

});//升序,按照课程1

coures21.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if(e.getSource() ==coures21){if(new_file == 1 && now_number > 0) {

now_view= 1;

edit_show.setSelected(false);

d.sort(2, 2);

showView();

jf.setVisible(true);

}

}

}

});//升序,按照课程2

total1.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if(e.getSource() ==total1){if(new_file == 1 && now_number > 0) {

now_view= 1;

edit_show.setSelected(false);

d.sort(3, 2);

s_sum.setSelected(true);

showView();

jf.setVisible(true);

}

}

}

});//升序,按照总分

course12.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if(e.getSource() ==course12){if(new_file == 1 && now_number > 0) {

now_view= 1;

edit_show.setSelected(false);

d.sort(1, 1);

showView();

jf.setVisible(true);

}

}

}

});//降序,按照课程1

coures22.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if(e.getSource() ==coures22){if(new_file == 1 && now_number > 0) {

now_view= 1;

edit_show.setSelected(false);

d.sort(2, 1);

showView();

jf.setVisible(true);

}

}

}

});//降序,按照课程2

total2.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if(e.getSource() ==total2){if(new_file == 1 && now_number > 0) {

now_view= 1;

edit_show.setSelected(false);

s_sum.setSelected(true);

d.sort(3, 1);

showView();

jf.setVisible(true);

}

}

}

});//降序,按照总分//编辑关于菜单

zuozhe = new JMenuItem(" 作者 ");

zhuye= new JMenuItem(" 主页 ");

about.add(zhuye);

about.add(zuozhe);

zhuye.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {

vboxmain.removeAll();

initInterface();

vboxmain.repaint();

edit_show.setSelected(false);

jf.setVisible(true);

}

});//作者

zuozhe.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==zuozhe) {

vboxmain.removeAll();

aboutInterface();

vboxmain.repaint();

edit_show.setSelected(false);

jf.setVisible(true);

}

}

});//主页//展示

jf.setJMenuBar(bar);

}//导入界面

public voidshowFileOpenDialog(Component parent) {//创建一个默认的文件选取器

JFileChooser fileChooser = newJFileChooser();//设置默认显示的文件夹为当前文件夹

fileChooser.setCurrentDirectory(new File("."));//设置文件选择的模式(只选文件、只选文件夹、文件和文件均可选)

fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置是否允许多选

fileChooser.setMultiSelectionEnabled(false);//添加可用的文件过滤器(FileNameExtensionFilter 的第一个参数是描述, 后面是需要过滤的文件扩展名 可变参数)

fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("zip(*.zip, *.rar)", "txt", "zip", "rar"));//设置默认使用的文件过滤器

fileChooser.setFileFilter(new FileNameExtensionFilter("text(*.txt)", "txt"));//打开文件选择框(线程将被阻塞, 直到选择框被关闭)

int result =fileChooser.showOpenDialog(parent);if (result ==JFileChooser.APPROVE_OPTION) {//如果点击了"确定", 则获取选择的文件路径

rfile =fileChooser.getSelectedFile();

System.out.println(rfile);

}

}//保存界面

public voidshowFileSaveDialog(Component parent, File old) {

JFileChooser fileChooser= newJFileChooser();//设置打开文件选择框后默认输入的文件名

fileChooser.setSelectedFile(new File("sort.txt"));while (true) {//打开文件选择框(线程将被阻塞, 直到选择框被关闭)

int result =fileChooser.showSaveDialog(parent);if (result ==JFileChooser.APPROVE_OPTION) {//如果点击了"保存"

nfile =fileChooser.getSelectedFile();

}if(old != null) {if (nfile.getPath() !=old.getPath()) {if (!validateFileName(nfile.getName())) {

JOptionPane.showMessageDialog(jf,"文件名不能包含下列任何字符之一:\n \\ / : * ? \" |", "提示", JOptionPane.WARNING_MESSAGE);if (old != null) nfile = newFile(old.getName());else nfile = null;

result= 0;

}else break;

}else break;

}else{if (nfile !=old) {if (!validateFileName(nfile.getName())) {

JOptionPane.showMessageDialog(jf,"文件名不能包含下列任何字符之一:\n \\ / : * ? \" |", "提示", JOptionPane.WARNING_MESSAGE);if (old != null) nfile = newFile(old.getName());else nfile = null;

result= 0;

}else break;

}else break;

}

}

}//写文件

public voidwriteText(File writeName) {try{

writeName.createNewFile();//创建新文件,有同名的文件的话直接覆盖

try (FileWriter writer = newFileWriter(writeName);

BufferedWriter out= newBufferedWriter(writer)

) {

out.write("编号 学号 姓名 课程1成绩 课程2成绩 总分\n");for (int i = 1; i <= now_number; i++) {

out.write(String.format("%d %s %s%16.1f%16.1f%16.2f\n",

i, d.vDate[i].id, d.vDate[i].name, d.vDate[i].grade[1], d.vDate[i].grade[2], d.vDate[i].grade[3]));

}

out.write(String.format("平均分 %16.2f%16.2f%14.2f", d.avg[1], d.avg[2], d.avg[3]));

}

}catch(IOException e) {

e.printStackTrace();

}

System.out.println("数据写入成功!");

}//读文件

public voidreadText(File readName) {if (readName == null)return;int index = 0;try{

InputStreamReader reader= new InputStreamReader(new FileInputStream(readName)); //建立一个输入流对象reader

BufferedReader br = new BufferedReader(reader); //建立一个对象,它把文件内容转成计算机能读懂的语言

String str = "", next = "";

str= br.readLine(); //去掉开头

str =br.readLine();

next=br.readLine();while (next != null) { //不读最后一行

String[] buff = str.trim().split("\\s+");

d.zhuyao[++index] = new Student(buff[1], buff[2], Double.parseDouble(buff[3]), Double.parseDouble(buff[4]));

now_number++;

str= newString(next);

next= br.readLine(); //一次读入一行数据

}

}catch(Exception e) {

e.printStackTrace();

}

}//保存文件名限制

public booleanvalidateFileName(String name) {if (name.indexOf('\\') != -1 || name.indexOf('/') != -1 ||name.indexOf(':') != -1 || name.indexOf('*') != -1 ||name.indexOf('?') != -1 || name.indexOf('"') != -1 ||name.indexOf('') != -1 ||name.indexOf('|') != -1 || name.indexOf('《') != -1 ||name.indexOf('》') != -1 || name.indexOf('?') != -1) {return false;

}else{return true;

}

}

}//底层编辑窗口

classeditBottom {

JTextField jtf1, jtf2, jtf3, jtf4, jtf5;

JComboBox jcb1;

JButton jb1, jb2, jb3;//初始化

public voidinit() {//生成文本框

jtf1 = new JTextField(8);

jtf2= new JTextField(8);

jtf3= new JTextField(6);

jtf4= new JTextField(6);

jtf5= new JTextField(6);//生成下拉框

String s[] = {" 修改 ", " 增加 ", " 删除 "};

jcb1= newJComboBox(s);//添加

jp1.add(jcb1);

jp1.add(new JLabel(" 编号 "));

jp1.add(jtf5);

jp1.add(new JLabel(" 学号: "));

jp1.add(jtf1);

jp1.add(new JLabel(" 姓名: "));

jp1.add(jtf2);

jp1.add(new JLabel(" 课程1成绩: "));

jp1.add(jtf3);

jp1.add(new JLabel(" 课程2成绩: "));

jp1.add(jtf4);//生成按钮

jb1 = new JButton(" 确定 ");

jb2= new JButton(" 清除 ");

jb3= new JButton(" 例子 ");

jp2.add(jb3);

jp2.add(new JLabel(" "));

jp2.add(jb2);

jp2.add(new JLabel(" "));

jp2.add(jb1);//监听器

jb1.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==jb1) {if (now_view == 0) {if (jcb1.getSelectedItem() == " 修改 ") {try{int p =Integer.parseInt(jtf5.getText());if (p >now_number) {

JOptionPane.showMessageDialog(jf,"不存在该编号!", "提示", JOptionPane.WARNING_MESSAGE);

jtf5.setText("");return;

}if (p >= 10) {

JOptionPane.showMessageDialog(jf,"暂时不支持编号10以上的数据!", "提示", JOptionPane.WARNING_MESSAGE);

jtf5.setText("");return;

}if (!jtf3.getText().equals("")) {if (Double.parseDouble(jtf3.getText()) < 0 || Double.parseDouble(jtf3.getText()) > 100) {

JOptionPane.showMessageDialog(jf,"课程1输入的成绩大于100(小于0)!", "提示", JOptionPane.WARNING_MESSAGE);

jtf3.setText("");return;

}

}if (!jtf4.getText().equals("")) {if (Double.parseDouble(jtf4.getText()) < 0 || Double.parseDouble(jtf4.getText()) > 100) {

JOptionPane.showMessageDialog(jf,"课程2输入的成绩大于100(小于0)!", "提示", JOptionPane.WARNING_MESSAGE);

jtf4.setText("");return;

}

}if(jtf4.getText().equals("") && jtf1.getText().equals("") && jtf2.getText().equals("") && jtf3.getText().equals("")){

JOptionPane.showMessageDialog(jf,"请输入修改数据!", "提示", JOptionPane.WARNING_MESSAGE);return;

}

d.record(1, p);if (!jtf3.getText().equals("")) d.zhuyao[p].grade[1] =Double.parseDouble(jtf3.getText());if (!jtf4.getText().equals("")) d.zhuyao[p].grade[2] =Double.parseDouble(jtf4.getText());if (!jtf2.getText().equals("")) d.zhuyao[p].name = newStringBuffer(jtf2.getText());if (!jtf1.getText().equals("")) d.zhuyao[p].id = newStringBuffer(jtf1.getText());

d.calculate();

d.analysis();

now_save= 0;

showData();

jtf1.setText("");

jtf2.setText("");

jtf3.setText("");

jtf4.setText("");

jtf5.setText("");

}catch(Exception d) {

JOptionPane.showMessageDialog(jf,"输入有误!请重新输入!", "提示", JOptionPane.WARNING_MESSAGE);

jtf3.setText("");

jtf4.setText("");

jtf5.setText("");return;

}

}else if (jcb1.getSelectedItem() == " 增加 ") {try{if (now_number + 1 >= 10) {

JOptionPane.showMessageDialog(jf,"暂时不支持编号10以上的数据!", "提示", JOptionPane.WARNING_MESSAGE);return;

}if (jtf1.getText().equals("")) {

JOptionPane.showMessageDialog(jf,"请输入学生学号!", "提示", JOptionPane.WARNING_MESSAGE);return;

}if (jtf2.getText().equals("")) {

JOptionPane.showMessageDialog(jf,"请输入学生姓名!", "提示", JOptionPane.WARNING_MESSAGE);return;

}if (jtf3.getText().equals("")) {

JOptionPane.showMessageDialog(jf,"请输入课程1的成绩!", "提示", JOptionPane.WARNING_MESSAGE);return;

}else if (!jtf3.getText().equals("")) {if (Double.parseDouble(jtf3.getText()) < 0 || Double.parseDouble(jtf3.getText()) > 100) {

JOptionPane.showMessageDialog(jf,"课程1输入的成绩大于100(小于0)!", "提示", JOptionPane.WARNING_MESSAGE);

jtf3.setText("");return;

}

}if (jtf4.getText().equals("")) {

JOptionPane.showMessageDialog(jf,"请输入课程2的成绩!", "提示", JOptionPane.WARNING_MESSAGE);return;

}else if (!jtf4.getText().equals("")) {if (Double.parseDouble(jtf4.getText()) < 0 || Double.parseDouble(jtf4.getText()) > 100) {

JOptionPane.showMessageDialog(jf,"课程2输入的成绩大于100(小于0)!", "提示", JOptionPane.WARNING_MESSAGE);

jtf4.setText("");return;

}

}

now_number++;

d.record(2, now_number);if (!jtf3.getText().equals(""))

d.zhuyao[now_number].grade[1] =Double.parseDouble(jtf3.getText());else{

JOptionPane.showMessageDialog(jf,"请输入课程1的成绩", "提示", JOptionPane.WARNING_MESSAGE);return;

}if (!jtf4.getText().equals(""))

d.zhuyao[now_number].grade[2] =Double.parseDouble(jtf4.getText());else{

JOptionPane.showMessageDialog(jf,"请输入课程2的成绩", "提示", JOptionPane.WARNING_MESSAGE);return;

}if (!jtf2.getText().equals(""))

d.zhuyao[now_number].name= newStringBuffer(jtf2.getText());else{

JOptionPane.showMessageDialog(jf,"请输入学生姓名", "提示", JOptionPane.WARNING_MESSAGE);return;

}if (!jtf1.getText().equals(""))

d.zhuyao[now_number].id= newStringBuffer(jtf1.getText());else{

JOptionPane.showMessageDialog(jf,"请输入学生学号", "提示", JOptionPane.WARNING_MESSAGE);return;

}

d.calculate();

d.analysis();

now_save= 0;

showData();

jtf1.setText("");

jtf2.setText("");

jtf3.setText("");

jtf4.setText("");

jtf5.setText("");

}catch(Exception d){

JOptionPane.showMessageDialog(jf,"输入有误!请重新输入!", "提示", JOptionPane.WARNING_MESSAGE);

jtf3.setText("");

jtf4.setText("");

jtf5.setText("");return;

}

}else if (jcb1.getSelectedItem() == " 删除 ") {try{int p =Integer.parseInt(jtf5.getText());if (p > now_number || p <= 0) {

JOptionPane.showMessageDialog(jf,"不存在该编号!", "提示", JOptionPane.WARNING_MESSAGE);

jtf5.setText("");return;

}

d.record(3, p);

d.delete(p);

now_save= 0;if (now_number == 0) newCreate();elseshowData();

}catch(Exception d) {

JOptionPane.showMessageDialog(jf,"输入有误!请重新输入!", "提示", JOptionPane.WARNING_MESSAGE);

jtf3.setText("");

jtf4.setText("");

jtf5.setText("");return;

}

}

}else if (now_view == 1) {

JOptionPane.showMessageDialog(jf,"视图模式下无法编辑数据!", "提示", JOptionPane.WARNING_MESSAGE);return;

}

}

}

});//确定

jb2.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==jb2) {

jtf1.setText("");

jtf2.setText("");

jtf3.setText("");

jtf4.setText("");

}

}

});//清除

jb3.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getSource() ==jb3) {int op = JOptionPane.showConfirmDialog(jf, "是否使用例子覆盖原有数据?", "提示", JOptionPane.YES_NO_OPTION);if (op ==JOptionPane.YES_OPTION) {

d.oneExample();

now_save= 0;

showData();

}

}

}

});//例子

}

}//数据类

classStudent {publicStringBuffer id;publicStringBuffer name;public double[] grade = new double[4];

Student() {

}

Student(String id, String name,double grade1, doublegrade2) {this.id = newStringBuffer(id);this.name = newStringBuffer(name);this.grade[1] =grade1;this.grade[2] =grade2;this.grade[3] = grade1 +grade2;

}

Student(Student s) {this.id = newStringBuffer(s.id.toString());this.name = newStringBuffer(s.name.toString());this.grade[1] = s.grade[1];this.grade[2] = s.grade[2];this.grade[3] = s.grade[1] + s.grade[2];

}publicString toString(){return id + " " + name + " " + grade[1] + " " + grade[2]+ " " + grade[3];

}

}//数据处理

classData {//主要数据

Student[] zhuyao = new Student[20];public double avg[] = new double[4];public int[] numYouxiu, numLianghao, numJige, numBujige;public double[] youxiuB, lianghaoB, jigeB, bujigeB;//建立视图的数据

Student[] vDate = new Student[20];//撤销记录数据

Student[] rData = new Student[100];public int now_r = 0; //记录数

public int[] rcaozuo = new int[100];public int[] bianhao = new int[100];//例子

public voidoneExample() {

now_number= 7;

zhuyao[1] = new Student("2018211001", "张铁三", 67, 78);

zhuyao[2] = new Student("2018211002", "李搞四", 99, 98);

zhuyao[3] = new Student("2018211003", "王老五", 52, 88);

zhuyao[4] = new Student("2018211004", "兔歪六", 82, 74);

zhuyao[5] = new Student("2018211005", "蛇数七", 66, 55);

zhuyao[6] = new Student("2018211006", "马爸八", 44, 59);

zhuyao[7] = new Student("2018211007", "羊法九", 84, 85);

zhuyao[8] = new Student("2018211008", "猴老十", 64, 91);

zhuyao[9] = new Student("2018211009", "鸡十一", 78, 77);

calculate();

analysis();

}//分析模块

public voidanalysis() {

numYouxiu= new int[2];

numLianghao= new int[2];

numJige= new int[2];

numBujige= new int[2];

youxiuB= new double[2];

lianghaoB= new double[2];

jigeB= new double[2];

bujigeB= new double[2];for (int i = 1; i <= now_number; i++) {if (zhuyao[i].grade[1] >= 85) numYouxiu[0]++;else if (zhuyao[i].grade[1] >= 70) numLianghao[0]++;else if (zhuyao[i].grade[1] >= 60) numJige[0]++;else if (zhuyao[i].grade[1] < 60) numBujige[0]++;if (zhuyao[i].grade[2] >= 85) numYouxiu[1]++;else if (zhuyao[i].grade[2] >= 70) numLianghao[1]++;else if (zhuyao[i].grade[2] >= 60) numJige[1]++;else if (zhuyao[i].grade[2] < 60) numBujige[1]++;

}for (int i = 0; i < 2; i++) {

youxiuB[i]= (double) numYouxiu[i] /now_number;

lianghaoB[i]= (double) numLianghao[i] /now_number;

jigeB[i]= (double) numJige[i] /now_number;

bujigeB[i]= (double) numBujige[i] /now_number;

}

}//计算总分和平均分

public voidcalculate() {double sum1 = 0, sum2 = 0, sum3 = 0;for (int i = 1; i <= now_number; i++) {

zhuyao[i].grade[3] = zhuyao[i].grade[1] + zhuyao[i].grade[2];

sum1+= zhuyao[i].grade[1];

sum2+= zhuyao[i].grade[2];

sum3+= zhuyao[i].grade[3];

}

avg[1] = sum1 /now_number;

avg[2] = sum2 /now_number;

avg[3] = sum3 /now_number;

}//记录步骤

public void record(int x, intpos) {

rcaozuo[++now_r] =x;

bianhao[now_r]=pos;

rData[now_r]= new Student(zhuyao[pos].id.toString(), zhuyao[pos].name.toString(), zhuyao[pos].grade[1], zhuyao[pos].grade[2]);

}//删除

public void delete(intpos) {for (int i = pos; i <= now_number; i++) {

zhuyao[i]= new Student(zhuyao[i + 1]);

}

now_number--;

calculate();

analysis();

}//撤销模块

public booleanrevocation() {if (now_r <= 0)return false;//if(bianhao[now_r] > now_number){ for (; bianhao[now_r] > now_number ; now_r--) { } }

if (rcaozuo[now_r] == 1) { //撤销修改

zhuyao[bianhao[now_r]] = newStudent(rData[now_r]);

}else if (rcaozuo[now_r] == 2) { //撤销增加

now_number--;

}else if (rcaozuo[now_r] == 3) { //撤销删除

now_number++;for (int i = now_number; i > bianhao[now_r]; i--) {

zhuyao[i]= new Student(zhuyao[i - 1]);

}

zhuyao[bianhao[now_r]]= newStudent(rData[now_r]);

}

calculate();

analysis();

now_r--;return true;

}//排序

public void sort(int flag, intorder){//flag = 1,按照课程1成绩排序//flag = 2,按照课程2成绩排序//flag = 3,按照总分排序//order = 1, 升序,order = 2, 降序

Student temp;for (int i = 1; i <= now_number ; i++) {

vDate[i]= newStudent(zhuyao[i]);

}for (int i = 1; i < now_number; i++) {for (int j = i+1; j <= now_number; j++) {if(flag == 1){if(judge(vDate[i].grade[1], vDate[j].grade[1], order)){

temp= newStudent(vDate[i]);

vDate[i]= newStudent(vDate[j]);

vDate[j]= newStudent(temp);

}

}else if(flag == 2){if(judge(vDate[i].grade[2], vDate[j].grade[2], order)){

temp= newStudent(vDate[i]);

vDate[i]= newStudent(vDate[j]);

vDate[j]= newStudent(temp);

}

}else if(flag == 3){if(judge(vDate[i].grade[3], vDate[j].grade[3], order)){

temp= newStudent(vDate[i]);

vDate[i]= newStudent(vDate[j]);

vDate[j]= newStudent(temp);

}

}

}

}for (int i = 1; i <= now_number ; i++) {

System.out.println(vDate[i]);

}

}//判断大小

public boolean judge(double a, double b, intorder) {if (order == 1) return a >b;else return a

}

}

}public classSGC {public static voidmain(String[] args) {

Interface itf= newInterface();

itf.showFrame();

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值