java经典示例—学生成绩管理系统

2,906 阅读8分钟
原文链接: bingyishow.top

前言

这是继前文 《java数组-学生成绩管理系统。(简)》 的一个复杂版。此次总共分为8个功能。由三个java文件构成。具体如下。
歌曲:一不小心试试新功能吧!

体会

通过此次编写体会到了程序之间严格的紧密性。可以将想实现的一个功能分成3个或多个框架。将主功能、定义成员、构造函数各分为了三个文件。编程时思路不易混乱。

实验问题及解决方法

问题:编写删除功能时,输入任意数字后,删除只会删除第一个。
解决:i参数传递错误,后单独定义,并添加if判断。
问题:添加完学生信息后,没输出学生信息。
解决:后自定义功能8是否需要输出所有学生的信息。

功能介绍

功能如下:

  • 添加学生信息
  • 查找学生信息
  • 修改学生信息
  • 删除学生信息
  • 输入学生成绩
  • 根据某门成绩进行排序
  • 根据总分进行排序
  • 输出所有学生
下面为功能的核心代码。所有源码在文章底部。并附上代码源文件。

功能1代码

public void creat(Student2[] s) {//添加学生信息
        for(int i=0,j=1;i<s.length;i++,j++) {//定义i为数组的下标值,先进行判断,判断后在决定是否赋值,j为学生的序号
            if(s[i]==null) {//判断类的数组元素是否为空,若为空则为其赋值
                System.out.println("请输入学生姓名:");
                Student2 s1=new Student2();
                s1.setName(in.next());
                System.out.println("请输入学生年龄:");
                s1.setAge(in.nextInt());
                s[i]=s1;
                s[i].setNum(j);
            }
            else {
                j-=1;        //若此数组元素不为空,则其序号直接从此处跳过,为下一空元素的序号变量赋值
                continue;//若数组元素不为空,则跳过此元素
            }
        }
        System.out.println("学生信息存储成功");
    }

功能2代码

public int find(int num,Student2[] s) {//查找学生,此处定义其为int类型的函数,便于在之后的代码中调用。
        int i,j;
        for(i=0,j=0;i<s.length;i++,j++) {
            if(s[i]==null)        //判断数组中学生信息是否为空,若为空则直接跳过
                continue;
            else if(num==s[i].getNum()) {//判断输入查找的序号是否与不为空的学生序号相同
            print(s,i);            //调用输出函数
            i=s.length+1;        //若查找到学生的信息,则在此处使用为i重新赋值
            break;
        }
        }
        if(i<=s.length) {            //在此处使用if语句判断i,若有此学生信息,则i的值大于数组s的长度
            System.out.println("系统中无此学生信息!");
            j=s.length+1;}//若无要查找的学生信息,则为其赋值为数组的长度加一,便于在以后的调用中进行判断
        return j;            
    }

功能3代码

public void change(int num,Student2[] s) {//修改学生信息
        int i;
        int yy;
        i=find(num,s);//将find函数中的j返回给i,为之下的代码提供判断的基础
        if(i<s.length) {//判断i是否小于数组的长度,若小于则数组中有此学生,可以进行修改,反之。
            System.out.println("--请选择要修改的信息--");
            System.out.println("1、姓名");
            System.out.println("2、年龄");
            System.out.println("3、Java成绩");
            System.out.println("4、c#成绩");
            System.out.println("5、HTML成绩");
            System.out.println("6、sql成绩");
            yy=in.nextInt();
            switch(yy) {
            case 1: 
            System.out.println("请输入要修改的姓名:");
            s[i].setName(in.next());
            break;
            case 2:
            System.out.println("请输入要修改的年龄:");
            s[i].setAge(in.nextInt());
            break;
            case 3:
            System.out.println("请输入要修改的Java成绩:");
            s[i].setJava(in.nextInt());
            break;
            case 4:
            System.out.println("请输入要修改的C#成绩:");
            s[i].setC_shapt(in.nextInt());
            break;
            case 5:
            System.out.println("请输入要修改的html成绩:");
            s[i].setHtml(in.nextInt());
            break;
            case 6:
            System.out.println("请输入要修改的sql:");
            s[i].setSql(in.nextInt());
            break;
            }
            int sum=s[i].getJava()+s[i].getC_shapt()+s[i].getHtml()+s[i].getSql();
            s[i].setSum(sum);//此处将成绩的总分赋值
            int avg=sum/4;
            s[i].setAvg(avg);//此处将成绩的平均分赋值
            
        }
    }

功能4代码

public void delete(int num,Student2[] s) {//删除学生
        int i;
        i=find(num,s);//将find函数中的j返回给i,为之下的代码提供判断的基础
        if(i<s.length) {//判断i是否小于数组的长度,若小于则数组中有此学生,可以删除,若i大于数组长度,则无此学生信息,直接跳过
        System.out.println("确认删除此学生信息?‘Y/N’");
        if(in.next().equals("Y")) {
            s[i]=null;//在此处将所指定的数组元素赋值为空
            System.out.println("删除成功!");
        }                
        else
            System.out.println("删除取消");
        }
    }

功能5代码

public void getscore(int num,Student2[] s) {//写入学生成绩
        int i;
        i=find(num,s);//将find函数中的j返回给i,为之下的代码提供判断的基础
        if(i<s.length) {//判断i是否小于数组的长度,若小于则数组中有此学生,可以进行成绩录入,若i大于数组长度,则无此学生信息,直接跳过
            System.out.println("请分别输入下列科目的成绩:");
            System.out.println("java   C#   html   sql");
            s[i].setJava(in.nextInt());
            s[i].setC_shapt(in.nextInt());
            s[i].setHtml(in.nextInt());
            s[i].setSql(in.nextInt());
            int sum=s[i].getJava()+s[i].getC_shapt()+s[i].getHtml()+s[i].getSql();
            s[i].setSum(sum);//此处将成绩的总分赋值
            int avg=sum/4;
            s[i].setAvg(avg);//此处将成绩的平均分赋值
            i=s.length+1;
            }
    }

功能6代码

public void makeas(String lesson,Student2[] s) {//按指定科目进行排序
        if(lesson.equals("java")) {//进行java的成绩排序
            for(int i=0,j=i+1;i<s.length;i++) {
                if(s[i].getJava()<s[j].getJava()) {
                    Student2 s1=new Student2();
                    s1=s[i];
                    s[i]=s[i+1];
                    s[i+1]=s1;
                }
            }
        }
                if(lesson.equals("C#")) {//进行C#的成绩排序
            for(int i=0,j=i+1;i<s.length;i++) {
                if(s[i].getC_shapt()<s[j].getC_shapt()) {
                    Student2 s1=new Student2();
                    s1=s[i];
                    s[i]=s[i+1];
                    s[i+1]=s1;
                }
            }
        }
                if(lesson.equals("html")) {//进行HTML的成绩排序
            for(int i=0,j=i+1;i<s.length;i++) {
                if(s[i].getHtml()<s[j].getHtml()) {
                    Student2 s1=new Student2();
                    s1=s[i];
                    s[i]=s[i+1];
                    s[i+1]=s1;
                }
            }
        }
                if(lesson.equals("sql")) {//进行sql的成绩排序
            for(int i=0,j=i+1;i<s.length;i++) {
                if(s[i].getSql()<s[j].getSql()) {
                    Student2 s1=new Student2();
                    s1=s[i];
                    s[i]=s[i+1];
                    s[i+1]=s1;
                }
            }
        }
               System.out.println("序号"+'\t'+"姓名"+'\t'+"年龄"+'\t'+"java"+'\t'+"C#"+'\t'+"html"+'\t'+"sql"+'\t'+"总分"+'\t'+"平均分");
        for(int i=0;i<s.length;i++) {
            System.out.println(s[i]);
        }
    }

功能7代码

public void makesum(Student2[] s) {//按总分排序
        int y=0;
        for(int i=0;i<s.length;i++)
            if(s[i]!=null)
                y+=1;
        Student2 x[]=new Student2[y];
        for(int i=0,j=0;i<s.length;i++,j++) {
            if(s[i]!=null)//将s中所有不为空的数组元素赋值给x数组,即x中所有的元素都不为空
                x[j]=s[i];
            else
            {
                j-=1;//当s中数组元素为空时,由于j在for循环中会有自加,所以在此处将j再进行自减运算,使x的元素中间无空的元素
                continue;
            }
        }
        System.out.println("序号"+'\t'+"姓名"+'\t'+"年龄"+'\t'+"java"+'\t'+"C#"+'\t'+"html"+'\t'+"sql"+'\t'+"总分"+'\t'+"平均分");
        if(x.length==1)//判断如果x的长度为1,则直接输出
            System.out.println(x[0]);
        else {
        for(int k=0,j=k+1;k<x.length;k++) {//当x的长度不为1时,则将x的元素逐个相比,并进行冒泡排序
            if(x[k].getSum()<x[j].getSum()) {
            Student2 s1=new Student2();
            s1=x[k];
            x[k]=x[j];
            x[j]=s1;
            }
        }
        for(int i=0;i<x.length;i++) {//将排序后的x数组逐个输出
            System.out.println(x[i]);
        }
      }
    }

功能8代码

public void All(Student2[] s) {//输出所有学生
        System.out.println("序号"+'\t'+"姓名"+'\t'+"年龄"+'\t'+"java"+'\t'+"C#"+'\t'+"html"+'\t'+"sql"+'\t'+"总分"+'\t'+"平均分");
        for(int i=0;i<s.length;i++) {
            if(s[i]==null) {
                System.out.println("未曾录入学生信息");
                continue;
            }
            else
            {System.out.println(s[i]);}
        }
    }
到此核心代码结束,下面是 主程序源码 及 定义的成员函数源码

主程序源码

package work3;

import java.util.Scanner;
public class Student1 {
public static void main(String args[]) {
    Scanner in=new Scanner(System.in);
    System.out.println("---请输入要录 入的学生个数:---");
    int many=in.nextInt();
    Student2 s[]=new Student2[many];
    System.out.println("--请选择您要进行的操作--");
    System.out.println("1、添加学生信息");
     System.out.println("2、查找学生信息");
    System.out.println("3、修改学生信息");
    System.out.println("4、删除学生信息");
    System.out.println("5、输入学生成绩");
    System.out.println("6、根据某门成绩进行排序");
    System.out.println("7、根据总分进行排序");
    System.out.println("8、输出所有学生");
    System.out.println("9、退出系统");
    Student3 St=new Student3();
    String x;
    boolean y;
    do{    
    System.out.println("请选择您要继续进行的操作:");
    x=in.next();
    y=true;            
    switch(x) {
    case "1":St.creat(s);break;
    case "2":System.out.println("请输入要查找的学生的序号:");
        St.find(in.nextInt(),s);break;
    case "3":System.out.println("请输入要修改的学生序号:");
        St.change(in.nextInt(), s);break;
    case "4":System.out.println("请输入要删除的学生序号:");
        St.delete(in.nextInt(), s);break;
    case "5":System.out.println("请输入录入成绩的学生序号:");
        St.getscore(in.nextInt(), s);break;
    case "6":System.out.println("请输入要排序的成绩:");
        St.makeas(in.next(), s);break;
    case "7":System.out.println("按总分排序如下:");
        St.makesum(s);break;
    case "8":System.out.println("所有学生如下:");
        St.All(s);break;
    case "9":y=false;            
        System.out.println("您已退出学生系统!");break;

    default: System.out.println("无此功能!");
    }
  }while(y);
 }
}

定义函数源码

package work3;

public class Student2{
    private int num;
    private String name;
    private int age;
    private int java;
    private int C_shapt;
    private int html;
    private int sql;
    private int sum;
    private int avg;
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getSum() {
        return sum;
    }
    public void setSum(int sum) {
        this.sum = sum;
    }
    public int getAvg() {
        return avg;
    }
    public void setAvg(int avg) {
        this.avg = avg;
    }
    public int getJava() {
        return java;
    }
    public void setJava(int java) {
        this.java = java;
    }
    public int getC_shapt() {
        return C_shapt;
    }
    public void setC_shapt(int c_shapt) {
        C_shapt = c_shapt;
    }
    public int getHtml() {
        return html;
    }
    public void setHtml(int html) {
        this.html = html;
    }
    public int getSql() {
        return sql;
    }
    public void setSql(int sql) {
        this.sql = sql;
    }
    public String toString() {                
        return this.num+"\t"+this.name+"\t"+this.age+"\t"+
            this.java+"\t"+this.C_shapt+"\t"+this.html+"\t"
                +this.sql+"\t"+this.sum+"\t"+this.avg;
    }
    }
至此源码基本都在这里了,本程序已经提交至github,可至github中下载完整代码

github

声明:程序由博主自行编写,只提供研究学习使用,可以自行修改但不接受任何形式的利益交易。不可做任何收费行为。请悉知!项目地址:github.com/icewing7788…