学生信息管理系统java测试报告

Posted 夏黎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学生信息管理系统java测试报告相关的知识,希望对你有一定的参考价值。

package studentinformation;
/**姓名  胡海靖
 * 学号  20183609
 * 班级  信1805-2
 */
class ScoreInformation {
    private String stunumber;//学号
    private String name;//姓名
    private double mathematicsscore;//高等数学成绩
    private double englishiscore;//大学英语成绩
    private double networkscore;//计算机网络成绩
    private double databasescore;//数据库成绩
    private double softwarescore;//软件工程成绩
    
    public ScoreInformation() {};
    public ScoreInformation(String stunumber, String name, double mathematicsscore, double englishscore,
            double networkscore, double databasescore, double softwarescore)
    {
    super();
    this.stunumber = stunumber;
    this.name = name;
    this.mathematicsscore = mathematicsscore;
    this.englishiscore = englishiscore;
    this.networkscore = networkscore;
    this.databasescore = databasescore;
    this.softwarescore = softwarescore;
    }
    public String getstunumber() {
        return stunumber;
    }
    public void setstunumber(String stunumber) {
        this.stunumber=stunumber;
    }
    public String getname() {
        return name;
    }
    public void setname(String name) {
        this.name=name;
    }
    public double getmathematicsscore() {
        return mathematicsscore;
    }
    public void setmathematicsscore(double mathematicsscore) {
        this.mathematicsscore=mathematicsscore;
    }
    public double getenglishiscore() {
        return englishiscore;
    }
    public void setenglishiscore(double englishiscore) {
        this.englishiscore=englishiscore;
    }
    public double getnetworkscore() {
        return networkscore;
    }
    public void setnetworkscore(double networkscore) {
        this.networkscore=networkscore;
    }
    public double getdatabasescore() {
        return databasescore;
    }
    public void setdatabasescore(double databasescore) {
        this.databasescore=databasescore;
    }
    public double getsoftwarescore() {
        return softwarescore;
    }
    public void setsoftwarescore(double softwarescore) {
        this.softwarescore=softwarescore;
    }
}


package studentinformation;
import java.util.Scanner;

/**姓名  胡海靖
 * 学号 20183609
 * 班级 信1805-2
 */

public class ScoreManagement {
    public static void  main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 定义数组预存五个学生的姓名以及学号;
        ScoreInformation[] stu = new ScoreInformation[5];
        stu[0] = new ScoreInformation("20183606", "晏雯慧",1,1,1,1,1);
        stu[1] = new ScoreInformation("20183607", "徐娇美",2,2,2,2,2);
        stu[2] = new ScoreInformation("20183608", "杨一帆",3,3,3,3,3);
        stu[3] = new ScoreInformation("20183609", "胡海靖",4,4,4,4,4);
        stu[4] = new ScoreInformation("20183610", "冯静妃",5,5,5,5,5);
        show(stu);
    }
    public static void show(ScoreInformation[] stu) {//show函数显示主页面
            System.out.println("****************************************");
            System.out.println("       石家庄铁道大学软件工程系           ");
            System.out.println("      学生学籍管理系统2019班版");
            System.out.println("****************************************");
            System.out.println("      1.学生老师成绩录入        ");
            System.out.println("      2.学生考试成绩修改        ");
            System.out.println("      3.计算学生成绩绩点        ");
            System.out.println("      4.退出学籍管理系统        ");
            System.out.println("*****************************************");
            Scanner sc = new Scanner(System.in);// 输入选项
            int choice = sc.nextInt();
            switch(choice) {
                case 1:add(stu);break;//考试成绩录入
                case 2:change(stu);break;//考试成绩修改
                case 3:jisuan(stu);break;//计算学生成绩
                case 4:finish();break;//退出系统
                default:
                {
                    System.out.println("信息错误,该选项不存在");
                    show(stu);
                    break;
                }
            }
        }
    public static void add(ScoreInformation[] stu) {//学生信息的录入
            System.out.println("****************************************");
            System.out.println("   石家庄铁道大学软件工程系学生学籍管理系统2019版      ");
            System.out.println("          学生考试成绩录入界面           ");
            System.out.println("****************************************");
            System.out.println("         学生学号:        ");
            Scanner sc = new Scanner(System.in);
            String number = sc.nextLine();
            int flag = 0,i;
            for (i = 0; i < 5; i++)
            {
                if (stu[i].getstunumber().equals(number))
                {
            
                    System.out.println("*********************************************");
                    System.out.println("     石家庄铁道大学软件工程系学生学籍管理系统 2019 版   ");
                    System.out.println("     学生学号:"+stu[i].getstunumber()   );
                    System.out.println("     学生姓名:"+stu[i].getname()      );
                    System.out.println("     请输入高等数学成绩:"     );
                    System.out.println("***********************************************");
                    double math = sc.nextDouble();
                    System.out.println(stu[i].getname() + "的高数成绩是:" + math);
                    System.out.println("请输入该生的英语成绩");
                    double english = sc.nextDouble();
                    System.out.println(stu[i].getname() + "的英语成绩是:" + english);
                    System.out.println("请输入该生的计算机网络成绩");
                    double network = sc.nextDouble();
                    System.out.println(stu[i].getname() + "的计算机网络成绩是:" + network);
                    System.out.println("请输入该生的数据库成绩");
                    double data = sc.nextDouble();
                    System.out.println(stu[i].getname() + "的数据库成绩是:" + data);
                    System.out.println("请输入该生的软件成绩");
                    double soft = sc.nextDouble();
                    System.out.println("********************************************");
                    System.out.println("    石家庄铁道大学软件工程系学生学籍管理系统 2019 版");
                    System.out.println("     学生姓名:"+stu[i].getname());
                    System.out.println("      高等数学成绩:"+math);
                    System.out.println("      大学英语成绩:"+english);
                    System.out.println("      计算机网络成绩:"+network);
                    System.out.println("      数据库成绩:"+data);
                    System.out.println("      软件工程成绩:"+soft);
                    System.out.println("     该学生成绩已录入完毕,是否提交(Y/N)");
                    System.out.println("**********************************************");
        
                    if (sc.next().equals("Y"))
                    {
                        stu[i].setenglishiscore(english);
                        stu[i].setmathematicsscore(math);
                        stu[i].setdatabasescore(data);
                        stu[i].setnetworkscore(network);
                        stu[i].setsoftwarescore(soft);
                        show(stu);
                    } else
                    {
                        System.out.println("返回录入页面");
                        add(stu);
                    }

                    flag = 1;
                }
            }
            // 如果没有该学生信息,提示重新输入;
            if (flag == 0)
            {
                System.out.println("该学号不存在,请重新输入");
                add(stu);
            }

        }
            
    public static void change(ScoreInformation[] stu)//学生成绩修改
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("******************************************");
        System.out.println("石家庄铁道大学软件工程系学生学籍管理系统2019版");
        System.out.println("学生考试成绩修改页面");
        System.out.println("*******************************************");
        System.out.println("请输入学生学号:");
        
        String number = sc.nextLine();
        int flag = 0;
        for (int i = 0; i < 5; i++)
        {
            if (stu[i].getstunumber().equals(number))
            {
    
                System.out.println("***********************************************");
                System.out.println("石家庄铁道大学软件工程系学生学籍管理系统 2019 版");
                System.out.println("学生考试成绩录入");
                System.out.println("*************************************************");
                System.out.println("    学生学号:"+stu[i].getstunumber());
                System.out.println("    学生姓名:"+stu[i].getname());
                System.out.println("    1、高等数学成绩:"+stu[i].getmathematicsscore());
                System.out.println("    2、大学英语成绩:" + stu[i].getenglishiscore());
                System.out.println("    3、计算机网络成绩:" + stu[i].getnetworkscore());
                System.out.println("    4、数据库成绩:" + stu[i].getdatabasescore());
                System.out.println("    5、软件工程成绩:" + stu[i].getsoftwarescore());
                System.out.println("**************************************************");
                int select = sc.nextInt();
                double chang=0;
                switch (select)
                {
                case 1:
                    System.out.println("       学生考试成绩录入界面             ");
                    System.out.println("*****************************************");
                    System.out.println("         学生学号:"+stu[i].getstunumber());
                    System.out.println("         学生姓名:"+stu[i].getname());
                    System.out.println("         请输入修改后的高数成绩:");
                    chang=sc.nextDouble();
                    System.out.println("********************************************************");
                    System.out.println("         石家庄铁道大学软件工程系学生学籍管理系统                     ");
                    System.out.println("*********************************************************");
                    System.out.println("     学生学号:"+stu[i].getstunumber());
                    System.out.println("     学生姓名:"+stu[i].getname());
                    System.out.println("     1、高等数学成绩:"+chang);
                    System.out.println("     2、大学英语成绩:" + stu[i].getenglishiscore());
                    System.out.println("     3、计算机网络成绩:" + stu[i].getnetworkscore());
                    System.out.println("     4、数据库成绩:" + stu[i].getdatabasescore());
                    System.out.println("     5、软件工程成绩:" + stu[i].getsoftwarescore());
                    System.out.println("********************************************************");
                    System.out.println("     该学生成绩已修改完毕,是否提交(Y/N)");
                    System.out.println("**********************************************************");
                    
                    if(sc.next().equals("Y")) {
                        stu[i].setmathematicsscore(chang);
                        show(stu);
                    }
                    else {
                        change(stu);
                    }
                    break;
                case 2:
                    System.out.println("       学生考试成绩录入界面             ");
                    System.out.println("*****************************************");
                    System.out.println("         学生学号:"+stu[i].getstunumber());
                    System.out.println("         学生姓名:"+stu[i].getname());
                    System.out.println("         请输入修改后的大学英语成绩:");
                    chang=sc.nextDouble();
                    System.out.println("********************************************************");
                    System.out.println("         石家庄铁道大学软件工程系学生学籍管理系统                     ");
                    System.out.println("*********************************************************");
                    System.out.println("     学生学号:"+stu[i].getstunumber());
                    System.out.println("     学生姓名:"+stu[i].getname());
                    System.out.println("     1、高等数学成绩:"+stu[i].getmathematicsscore());
                    System.out.println("     2、大学英语成绩:" + chang);
                    System.out.println("     3、计算机网络成绩:" + stu[i].getnetworkscore());
                    System.out.println("     4、数据库成绩:" + stu[i].getdatabasescore());
                    System.out.println("     5、软件工程成绩:" + stu[i].getsoftwarescore());
                    System.out.println("********************************************************");
                    System.out.println("     该学生成绩已修改完毕,是否提交(Y/N)");
                    System.out.println("**********************************************************");
                    
                    if(sc.next().equals("Y")) {
                        stu[i].setenglishiscore(chang);
                        show(stu);
                    }
                    else {
                        change(stu);
                    }
                    break;
                case 3:
                    System.out.println("       学生考试成绩录入界面             ");
                    System.out.println("*****************************************");
                    System.out.println("         学生学号:"+stu[i].getstunumber());
                    System.out.println("         学生姓名:"+stu[i].getname());
                    System.out.println("         请输入修改后的计算机网络成绩:");
                    chang=sc.nextDouble();
                    System.out.println("********************************************************");
                    System.out.println("         石家庄铁道大学软件工程系学生学籍管理系统                     ");
                    System.out.println("*********************************************************");
                    System.out.println("     学生学号:"+stu[i].getstunumber());
                    System.out.println("     学生姓名:"+stu[i].getname());
                    System.out.println("     1、高等数学成绩:"+stu[i].getmathematicsscore());
                    System.out.println("     2、大学英语成绩:" + stu[i].getenglishiscore());
                    System.out.println("     3、计算机网络成绩:" + chang);
                    System.out.println("     4、数据库成绩:" + stu[i].getdatabasescore());
                    System.out.println("     5、软件工程成绩:" + stu[i].getsoftwarescore());
                    System.out.println("********************************************************");
                    System.out.println("     该学生成绩已修改完毕,是否提交(Y/N)");
                    System.out.println("**********************************************************");
                    
                    if(sc.next().equals("Y")) {
                        stu[i].setnetworkscore(chang);
                        show(stu);
                    }
                    else {
                        change(stu);
                    }
                    break;
                case 4:
                    System.out.println("       学生考试成绩录入界面             ");
                    System.out.println("*****************************************");
                    System.out.println("         学生学号:"+stu[i].getstunumber());
                    System.out.println("         学生姓名:"+stu[i].getname());
                    System.out.println("         请输入修改后的数据库成绩:");
                    chang=sc.nextDouble();
                    System.out.println("********************************************************");
                    System.out.println("         石家庄铁道大学软件工程系学生学籍管理系统                     ");
                    System.out.println("*********************************************************");
                    System.out.println("     学生学号:"+stu[i].getstunumber());
                    System.out.println("     学生姓名:"+stu[i].getname());
                    System.out.println("     1、高等数学成绩:"+stu[i].getmathematicsscore());
                    System.out.println("     2、大学英语成绩:" + stu[i].getenglishiscore());
                    System.out.println("     3、计算机网络成绩:" + stu[i].getnetworkscore());
                    System.out.println("     4、数据库成绩:" + chang);
                    System.out.println("     5、软件工程成绩:" + stu[i].getsoftwarescore());
                    System.out.println("********************************************************");
                    System.out.println("     该学生成绩已修改完毕,是否提交(Y/N)");
                    System.out.println("**********************************************************");
                    
                    if(sc.next().equals("Y")) {
                        stu[i].setdatabasescore(chang);
                        show(stu);
                    }
                    else {
                        change(stu);
                    }
                    break;
                case 5:
                    System.out.println("       学生考试成绩录入界面             ");
                    System.out.println("*****************************************");
                    System.out.println("         学生学号:"+stu[i].getstunumber());
                    System.out.println("         学生姓名:"+stu[i].getname());
                    System.out.println("         请输入修改后的软件工程成绩:");
                    chang=sc.nextDouble();
                    System.out.println("********************************************************");
                    System.out.println("         石家庄铁道大学软件工程系学生学籍管理系统                     ");
                    System.out.println("*********************************************************");
                    System.out.println("     学生学号:"+stu[i].getstunumber());
                    System.out.println("     学生姓名:"+stu[i].getname());
                    System.out.println("     1、高等数学成绩:"+stu[i].getmathematicsscore());
                    System.out.println("     2、大学英语成绩:" + stu[i].getenglishiscore());
                    System.out.println("     3、计算机网络成绩:" + stu[i].getnetworkscore());
                    System.out.println("     4、数据库成绩:" + stu[i].getdatabasescore());
                    System.out.println("     5、软件工程成绩:" + chang);
                    System.out.println("********************************************************");
                    System.out.println("     该学生成绩已修改完毕,是否提交(Y/N)");
                    System.out.println("**********************************************************");
                    
                    if(sc.next().equals("Y")) {
                        stu[i].setsoftwarescore(chang);
                        show(stu);
                    }
                    else {
                        change(stu);
                    }
                    break;
                default:
                    
                    System.out.println("请输入正确信息");
                    change(stu);
                    break;
                }
                flag = 1;
            }
        }
        if (flag == 0)
        {
            System.out.println("学号输入错误,请重新输入学号");
            change(stu);
        }
    }

        
    static void jisuan(ScoreInformation[] stu) {//计算学生成绩绩点
        System.out.println("******************************************");
        System.out.println("   石家庄铁道大学软件工程系学生学籍管理系统2019版    ");
        System.out.println("     学生考试成绩绩点计算界面    ");
        System.out.println("*******************************************");
        System.out.println("     请输入学生学号:");
        Scanner sc=new Scanner(System.in);
        String number=sc.nextLine();
        System.out.println("*********************************************");
        System.out.println("**********************************************");
        System.out.println("     石家庄铁道大学软甲工程系学生学籍管理系统2019版");
        System.out.println("            学生考试成绩绩点计算界面");
        System.out.println("************************************************");
        System.out.println("     学生学号:"+number);
        int i;
        double gao=0,ying=0,ji=0,shu=0,ruan=0;
        for(i=0;i<5;i++)
            if (stu[i].getstunumber().equals(number))
            {
                System.out.println("      学生姓名:"+stu[i].getname());
                //计算高等数学的成绩绩点
                if(stu[i].getmathematicsscore()>=90)  
                    gao=4.0;
                else if(stu[i].getmathematicsscore()>=85&&stu[i].getmathematicsscore()<=89.9)
                    gao=3.7;
                else if(stu[i].getmathematicsscore()>=82&&stu[i].getmathematicsscore()<=84.9)
                    gao=3.3;
                else if(stu[i].getmathematicsscore()>=78&&stu[i].getmathematicsscore()<=81.9)
                    gao=2.7;
                else if(stu[i].getmathematicsscore()>=75&&stu[i].getmathematicsscore()<=77.9)
                    gao=2.3;
                else if(stu[i].getmathematicsscore()>=72&&stu[i].getmathematicsscore()<=74.9)
                    gao=2.0;
                else if(stu[i].getmathematicsscore()>=68&&stu[i].getmathematicsscore()<=71.9)
                    gao=1.7;
                else if(stu[i].getmathematicsscore()>=66&&stu[i].getmathematicsscore()<=67.9)
                    gao=1.5;
                else if(stu[i].getmathematicsscore()>=64&&stu[i].getmathematicsscore()<=65.9)
                    gao=1.0;
                else if(stu[i].getmathematicsscore()<60)
                    gao=0;
                System.out.println("      1.高等数学成绩绩点:"+gao);
                //计算大学英语成绩绩点
                if(stu[i].getenglishiscore()>=90)  
                    ying=4.0;
                else if(stu[i].getenglishiscore()>=85&&stu[i].getenglishiscore()<=89.9)
                    ying=3.7;
                else if(stu[i].getenglishiscore()>=82&&stu[i].getenglishiscore()<=84.9)
                    ying=3.3;
                else if(stu[i].getenglishiscore()>=78&&stu[i].getenglishiscore()<=81.9)
                    ying=2.7;
                else if(stu[i].getenglishiscore()>=75&&stu[i].getenglishiscore()<=77.9)
                    ying=2.3;
                else if(stu[i].getenglishiscore()>=72&&stu[i].getenglishiscore()<=74.9)
                    ying=2.0;
                else if(stu[i].getenglishiscore()>=68&&stu[i].getenglishiscore()<=71.9)
                    ying=1.7;
                else if(stu[i].getenglishiscore()>=66&&stu[i].getenglishiscore()<=67.9)
                    ying=1.5;
                else if(stu[i].getenglishiscore()>=64&&stu[i].getenglishiscore()<=65.9)
                    ying=1.0;
                else if(stu[i].getenglishiscore()<60)
                    ying=0;
                System.out.println("      2.大学英语成绩绩点:"+ying);
                //计算计算机网络成绩绩点
                if(stu[i].getnetworkscore()>=90)  
                    ji=4.0;
                else if(stu[i].getnetworkscore()>=85&&stu[i].getnetworkscore()<=89.9)
                    ji=3.7;
                else if(stu[i].getnetworkscore()>=82&&stu[i].getnetworkscore()<=84.9)
                    ji=3.3;
                else if(stu[i].getnetworkscore()>=78&&stu[i].getnetworkscore()<=81.9)
                    ji=2.7;
                else if(stu[i].getnetworkscore()>=75&&stu[i].getnetworkscore()<=77.9)
                    ji=2.3;
                else if(stu[i].getnetworkscore()>=72&&stu[i].getnetworkscore()<=74.9)
                    ji=2.0;
                else if(stu[i].getnetworkscore()>=68&&stu[i].getnetworkscore()<=71.9)
                    ji=1.7;
                else if(stu[i].getnetworkscore()>=66&&stu[i].getnetworkscore()<=67.9)
                    ji=1.5;
                else if(stu[i].getnetworkscore()>=64&&stu[i].getnetworkscore()<=65.9)
                    ji=1.0;
                else if(stu[i].getnetworkscore()<60)
                    ji=0;
                System.out.println("      3.计算机网络成绩绩点:"+ji);
                //计算数据库成绩绩点
                if(stu[i].getdatabasescore()>=90)  
                    shu=4.0;
                else if(stu[i].getdatabasescore()>=85&&stu[i].getdatabasescore()<=89.9)
                    shu=3.7;
                else if(stu[i].getdatabasescore()>=82&&stu[i].getdatabasescore()<=84.9)
                    shu=3.3;
                else if(stu[i].getdatabasescore()>=78&&stu[i].getdatabasescore()<=81.9)
                    shu=2.7;
                else if(stu[i].getdatabasescore()>=75&&stu[i].getdatabasescore()<=77.9)
                    shu=2.3;
                else if(stu[i].getdatabasescore()>=72&&stu[i].getdatabasescore()<=74.9)
                    shu=2.0;
                else if(stu[i].getdatabasescore()>=68&&stu[i].getdatabasescore()<=71.9)
                    shu=1.7;
                else if(stu[i].getdatabasescore()>=66&&stu[i].getdatabasescore()<=67.9)
                    shu=1.5;
                else if(stu[i].getdatabasescore()>=64&&stu[i].getdatabasescore()<=65.9)
                    shu=1.0;
                else if(stu[i].getdatabasescore()<60)
                    shu=0;
                System.out.println("      4.数据库成绩绩点:"+shu);
                //计算软件工程成绩绩点
                if(stu[i].getdatabasescore()>=90)  
                    ruan=4.0;
                else if(stu[i].getdatabasescore()>=85&&stu[i].getdatabasescore()<=89.9)
                    ruan=3.7;
                else if(stu[i].getdatabasescore()>=82&&stu[i].getdatabasescore()<=84.9)
                    ruan=3.3;
                else if(stu[i].getdatabasescore()>=78&&stu[i].getdatabasescore()<=81.9)
                    ruan=2.7;
                else if(stu[i].getdatabasescore()>=75&&stu[i].getdatabasescore()<=77.9)
                    ruan=2.3;
                else if(stu[i].getdatabasescore()>=72&&stu[i].getdatabasescore()<=74.9)
                    ruan=2.0;
                else if(stu[i].getdatabasescore()>=68&&stu[i].getdatabasescore()<=71.9)
                    ruan=1.7;
                else if(stu[i].getdatabasescore()>=66&&stu[i].getdatabasescore()<=67.9)
                    ruan=1.5;
                else if(stu[i].getdatabasescore()>=64&&stu[i].getdatabasescore()<=65.9)
                    ruan=1.0;
                else if(stu[i].getdatabasescore()<60)
                    ruan=0;
                System.out.println("      5.软件工程成绩绩点:"+ruan);
                //计算平均学分绩点
                double average=0;
                average=(gao*4+ying*3+ji*4+shu*3+ruan*2)/16;
                String result=String.format("%.2f",average);
                System.out.println("    你的平均学分绩点为:"+result);
                if(average>=2)
                    System.out.println("提示信息:你的学分绩点已达到毕业要求!");
                else
                    System.out.println("提示信息:你的学分绩点不满足毕业要求!");
                System.out.println("      是否返回系统主界面:(Y/N)");
                System.out.println("**************************************");
                if(sc.next().equals("Y")) {
                    show(stu);
                }
                else 
                break;
            }
    }
    static void finish() {//退出当前程序
        System.out.println("********************************************");
        System.out.println("   石家庄铁道大学软件工程系学生学籍管理系统2019版");
        System.out.println("             制作人:胡海靖");
        System.out.println("********************************************");
    }
}

代码测试截图:

1.成绩录入

 

 

 2.成绩修改

 

 

 3.计算成绩绩点

 

 4.退出系统

结果:周一java课对自己暑假的学习成果进行了测试,在老师认为的简单的题目的情况下,还是未能在规定的时间写完所有的代码,未能实现老师指定的全部功能,因此只能得取11.5分,而剩余的3.5分丢失的原因:没能完成第三项即求取成绩绩点的功能,还有没能实现(Y/N)的跳转;归根到底为1.打字慢,导致时间不够用;2.没有清晰地逻辑思路,所以在写的时候浪费了很多时间;3.写的代码有点繁琐简单,好多用的都是笨方法,从而导致代码很长;

遇到的问题:由于对数组的学习不彻底,导致开始的时候就出现了问题,对对象数组的学习不扎实;

收获:认识到了自己的不足,和别人差距还很大,更加坚定自己要好好学习的信心。对自己制定严格的学习计划,规定每天敲代码的时间。多多训练自己的不足,形成很好的逻辑思维。

以上是关于学生信息管理系统java测试报告的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记8.2.2 JDBC实战 - GUI学生信息管理系统

Java学习笔记8.2.2 JDBC实战 - GUI学生信息管理系统

JAVA语言课堂测试试卷01学生信息管理系统

java学生信息管理系统实验报告总结,看完这一篇就够了!

java学生信息管理系统实验报告总结,看完这一篇就够了!

JSP学生成绩管理系统