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();
        }
    }
  • 相关阅读:
    看net2.0头晕眼花,是不是该做个具体的程序呢
    安装SQLServer2000时,提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机"
    刚装的WIN7,用了一下午,记一下备忘
    不同系统开启和关闭fso的方法(转)
    希腊字母以及发音
    meta 标签的作用
    电信禁止路由上网的最佳破解方法(转)
    安装系统
    网络工程师笔记
    GHOST操作
  • 原文地址:https://www.cnblogs.com/shish/p/12819438.html
Copyright © 2011-2022 走看看