zoukankan      html  css  js  c++  java
  • 学生成绩管理系统(java swing)

    import javax.swing.*;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import javax.swing.filechooser.FileNameExtensionFilter;
    
    class Interface {
        JFrame jf = new JFrame("From:shish");
        JPanel jp1 = new JPanel(), jp2 = new JPanel(), jpinit = new JPanel(), jpAbout = new JPanel();
        JPanel jptitle = new JPanel();
        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 void initInterface() {
            vboxmain.removeAll();
            JTextArea jta = new JTextArea();
            jta.setBackground(Color.white);
            jta.setText("
    
    
    
                                                      " +
                    " 欢 迎 
                             " +
                    "           使 用 学 生 管 理 系 统 !
    
    
             " +
                    "                   独学而无友┗( ▔, ▔ )┛则孤陋寡闻             " +
                    "              
    		 ღゝ◡╹)ノ♡
    
    
    
    
    
    
    ");
            jta.setFont(new Font("华文行楷", Font.PLAIN, 34));
            jta.setEditable(false);
            jpinit.add(jta, "Center");
            vboxmain.add(jpinit);
            vboxmain.repaint();
            jf.add(vboxmain);
        }
        // 菜单关于界面
        public void aboutInterface() {
            JTextArea jta = new JTextArea();
            jta.setBackground(Color.white);
            jta.setText("
    
    作者:shish                                     " +
                    "                                                      " +
                    "
    博客:https://www.cnblogs.com/shish
    " +
                    "GitHub:https://github.com/shishenhao
    " +
                    "关于作者:超级无敌的菜鸡
    " +
                    "声援作者:您的鼓励是作者的最大动力!
    
    
    
    
    
    
    
    
    
    
    ");
            jta.setFont(new Font("华文行楷", Font.PLAIN, 32));
            jta.setEditable(false);
            jpAbout.add(jta, "Center");
            vboxmain.add(jpAbout);
            jf.add(vboxmain);
        }
        // 新建一个窗口的界面
        public void newCreate() {
            jptitle.removeAll();
            JTextArea jta = new JTextArea(1, 70);
            jta.setBackground(Color.white);
            jta.setEditable(false);
            jta.setFont(new Font("华文行楷", Font.PLAIN, 28));
            jta.setText("                               		               学 生 成 绩 管 理 系 统  ");
            JTextArea jtaa = new JTextArea(1, 70);
            jtaa.setBackground(Color.LIGHT_GRAY);
            jtaa.setFont(new Font("微软雅黑", Font.PLAIN, 22));
            jtaa.setEditable(false);
            jtaa.setText("	                 编号         |        学号         |        姓名        |       课程1        |        课程2        |        总分          ");
            vboxmain.removeAll();
            jptitle.add(jta);
            jptitle.add(jtaa);
            vboxmain.add(jptitle);
            vboxmain.repaint();
            jf.setVisible(true);
        }
        // 展现数据
        public void showData() {
            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("                               		               学 生 成 绩 管 理 系 统  ");
            JTextArea jtaa = new JTextArea(1, 70);
            jtaa.setBackground(Color.LIGHT_GRAY);
            jtaa.setFont(new Font("微软雅黑", Font.PLAIN, 22));
            jtaa.setEditable(false);
            jtaa.setText("	                 编号         |        学号         |        姓名        |       课程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] = new JTextArea();
                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 = new JTextArea();
                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 = new JTextArea();
                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;                " +
                                "                              
                          " +
                                "    及格人数(>=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("
     课程2成绩分析:优秀人数(>=85)为 %d 占比 %.2f,  " +
                                "良好人数(>=70)为 %d 占比 %.2f;                " +
                                "                              
                          " +
                                "    及格人数(>=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 void showView(){
            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("                               		               学 生 成 绩 管 理 系 统  ");
            JTextArea jtaa = new JTextArea(1, 70);
            jtaa.setBackground(Color.LIGHT_GRAY);
            jtaa.setFont(new Font("微软雅黑", Font.PLAIN, 22));
            jtaa.setEditable(false);
            jtaa.setText("	                 编号         |        学号         |        姓名        |       课程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] = new JTextArea();
                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 = new JTextArea();
                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 = new JTextArea();
            jzhu.setFont(new Font("仿宋", Font.PLAIN, 18));
            jzhu.setEditable(false);
            jzhu.setText("           注:当前为视图模式,无法进行编辑,返回需要在查看按当前窗口!!!" +
                    "                                                  ");
            jptitle.add(jzhu);
            vboxmain.add(jptitle);
            vboxmain.repaint();
            jf.setVisible(true);
        }
        // 展示界面
        public void showFrame() {
            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);
        }
        // 添加特定的空行
        public JTextArea createEmptyJTA() {
            JTextArea jkongbai = new JTextArea();
            jkongbai.setBackground(Color.LIGHT_GRAY);
            jkongbai.setEditable(false);
            jkongbai.setFont(new Font("宋体", Font.PLAIN, 4));
            jkongbai.setText("	                                                                                               " +
                    "	                                                                                                        " +
                    "	                                                                                                        " +
                    "	                                                                                                        " +
                    "	                                                                                                        ");
            return jkongbai;
        }
        // 菜单
        class Menu {
            JMenuBar bar = new JMenuBar();
            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 void init() {
                // 第一层菜单
                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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (e.getSource() == file_lsave) {
                            File old = null;
                            if(nfile != null) {
                                old = new File(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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 = new File(rfile.getName());
                                d.calculate();
                                d.analysis();
                                showData();
                            }
                            return;
                        }
                    }
                }); // 导入
                file_guanbi.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ChangeListener() {
                    @Override
                    public void stateChanged(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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();
                            else showData();
                        }
                    }
                }); // 成绩分析
                s_sum.addChangeListener(new ChangeListener() {
                    @Override
                    public void stateChanged(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();
                            else showData();
                        }
                    }
                });  // 总分
                s_avg.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(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();
                            else showData();
                        }
                    }
                });  // 平均分
                // 添加统计菜单
                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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        vboxmain.removeAll();
                        initInterface();
                        vboxmain.repaint();
                        edit_show.setSelected(false);
                        jf.setVisible(true);
                    }
                }); // 作者
                zuozhe.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (e.getSource() == zuozhe) {
                            vboxmain.removeAll();
                            aboutInterface();
                            vboxmain.repaint();
                            edit_show.setSelected(false);
                            jf.setVisible(true);
                        }
                    }
                }); // 主页
    
                // 展示
                jf.setJMenuBar(bar);
            }
    
            // 导入界面
            public void showFileOpenDialog(Component parent) {
                // 创建一个默认的文件选取器
                JFileChooser fileChooser = new JFileChooser();
    
                // 设置默认显示的文件夹为当前文件夹
                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 void showFileSaveDialog(Component parent, File old) {
                JFileChooser fileChooser = new JFileChooser();
                // 设置打开文件选择框后默认输入的文件名
                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, "文件名不能包含下列任何字符之一:
     \ / : * ? " <《》 > |", "提示", JOptionPane.WARNING_MESSAGE);
                                if (old != null) nfile = new File(old.getName());
                                else nfile = null;
                                result = 0;
                            } else break;
                        } else break;
                    }else{
                        if (nfile != old) {
                            if (!validateFileName(nfile.getName())) {
                                JOptionPane.showMessageDialog(jf, "文件名不能包含下列任何字符之一:
     \ / : * ? " <《》 > |", "提示", JOptionPane.WARNING_MESSAGE);
                                if (old != null) nfile = new File(old.getName());
                                else nfile = null;
                                result = 0;
                            } else break;
                        } else break;
                    }
                }
            }
            // 写文件
            public void writeText(File writeName) {
                try {
                    writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
                    try (FileWriter writer = new FileWriter(writeName);
                         BufferedWriter out = new BufferedWriter(writer)
                    ) {
                        out.write("编号       学号           姓名         课程1成绩      课程2成绩      总分
    ");
                        for (int i = 1; i <= now_number; i++) {
                            out.write(String.format("%d    %s    %s%16.1f%16.1f%16.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]));
                        }
                        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 void readText(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 = new String(next);
                        next = br.readLine(); // 一次读入一行数据
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            // 保存文件名限制
            public boolean validateFileName(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 || name.indexOf('?') != -1) {
                    return false;
                } else {
                    return true;
                }
            }
        }
        // 底层编辑窗口
        class editBottom {
            JTextField jtf1, jtf2, jtf3, jtf4, jtf5;
            JComboBox jcb1;
            JButton jb1, jb2, jb3;
    
            // 初始化
            public void init() {
                // 生成文本框
                jtf1 = new JTextField(8);
                jtf2 = new JTextField(8);
                jtf3 = new JTextField(6);
                jtf4 = new JTextField(6);
                jtf5 = new JTextField(6);
                // 生成下拉框
                String s[] = {"     修改      ", "     增加      ", "     删除      "};
                jcb1 = new JComboBox(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(new ActionListener() {
                    @Override
                    public void actionPerformed(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 = new StringBuffer(jtf2.getText());
                                        if (!jtf1.getText().equals("")) d.zhuyao[p].id = new StringBuffer(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 = new StringBuffer(jtf2.getText());
                                        else {
                                            JOptionPane.showMessageDialog(jf, "请输入学生姓名", "提示", JOptionPane.WARNING_MESSAGE);
                                            return;
                                        }
                                        if (!jtf1.getText().equals(""))
                                            d.zhuyao[now_number].id = new StringBuffer(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();
                                        else showData();
                                    } 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(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (e.getSource() == jb2) {
                            jtf1.setText("");
                            jtf2.setText("");
                            jtf3.setText("");
                            jtf4.setText("");
                        }
                    }
                });// 清除
                jb3.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(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();
                            }
                        }
                    }
                });// 例子
            }
        }
        // 数据类
        class Student {
            public StringBuffer id;
            public StringBuffer name;
            public double[] grade = new double[4];
    
            Student() {
            }
    
            Student(String id, String name, double grade1, double grade2) {
                this.id = new StringBuffer(id);
                this.name = new StringBuffer(name);
                this.grade[1] = grade1;
                this.grade[2] = grade2;
                this.grade[3] = grade1 + grade2;
            }
    
            Student(Student s) {
                this.id = new StringBuffer(s.id.toString());
                this.name = new StringBuffer(s.name.toString());
                this.grade[1] = s.grade[1];
                this.grade[2] = s.grade[2];
                this.grade[3] = s.grade[1] + s.grade[2];
            }
    
            public String toString(){
                return id + " " + name + " " + grade[1] + " " + grade[2]+ " " + grade[3];
            }
    
        }
        // 数据处理
        class Data {
            // 主要数据
            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 void oneExample() {
                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 void analysis() {
                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 void calculate() {
                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, int pos) {
                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(int pos) {
                for (int i = pos; i <= now_number; i++) {
                    zhuyao[i] = new Student(zhuyao[i + 1]);
                }
                now_number--;
                calculate();
                analysis();
            }
            // 撤销模块
            public boolean revocation() {
                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]] = new Student(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]] = new Student(rData[now_r]);
                }
                calculate();
                analysis();
                now_r--;
                return true;
            }
            // 排序
            public void sort(int flag, int order){
                // flag = 1,按照课程1成绩排序
                // flag = 2,按照课程2成绩排序
                // flag = 3,按照总分排序
                // order = 1, 升序,order = 2, 降序
                Student temp;
                for (int i = 1; i <= now_number ; i++) {
                    vDate[i] = new Student(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 = new Student(vDate[i]);
                                vDate[i] = new Student(vDate[j]);
                                vDate[j] = new Student(temp);
                            }
                        } else if(flag == 2){
                            if(judge(vDate[i].grade[2], vDate[j].grade[2], order)){
                                temp = new Student(vDate[i]);
                                vDate[i] = new Student(vDate[j]);
                                vDate[j] = new Student(temp);
                            }
                        } else if(flag == 3){
                            if(judge(vDate[i].grade[3], vDate[j].grade[3], order)){
                                temp = new Student(vDate[i]);
                                vDate[i] = new Student(vDate[j]);
                                vDate[j] = new Student(temp);
                            }
                        }
                    }
                }
                for (int i = 1; i <= now_number ; i++) {
                    System.out.println(vDate[i]);
                }
    
            }
            // 判断大小
            public boolean judge(double a, double b, int order) {
                if (order == 1)  return a > b;
                else  return a < b;
            }
        }
    }
    
    public class SGC {
        public static void main(String[] args) {
            Interface itf = new Interface();
            itf.showFrame();
        }
    }
  • 相关阅读:
    C. Shaass and Lights 解析(思維、組合)
    D. Binary String To Subsequences(队列)(贪心)
    CodeForces 1384B2. Koa and the Beach (Hard Version)(贪心)
    CodeForces 1384B1. Koa and the Beach (Easy Version)(搜索)
    CodeForces 1384C. String Transformation 1(贪心)(并查集)
    CodeForces 1384A. Common Prefixes
    POJ-2516 Minimum Cost(最小费用最大流)
    POJ3261-Milk Patterns(后缀数组)
    HDU-1300 Pearls(斜率DP)
    HDU-4528 小明系列故事-捉迷藏(BFS)
  • 原文地址:https://www.cnblogs.com/shish/p/12819438.html
Copyright © 2011-2022 走看看