Java之利用双链表实现学生成绩管理系统

        花了一晚上的时间(大约从22点到0点55分)。我总算是写出来了一个用来管理学生成绩信息的系统。用到了双链表。有关双链表的讲解及代码实现请点击此处了解更多详情。

        首先讲一下目录结构,目录结构见下图:

2564170e68d4471f80631e2f396e40be.png

        我定义了包名为DataStructure.LinearList的java包,在包里定义了双链表的数据组织形式LinkedList1.java,接着又定义了双链表的实现类DoubleLinkedList.java。最后使用语句import DataStructure.LinearList.DoubleLinkedList;并写一个实现类用来实现管理系统。

        然后再把焦点转移至实现类的代码上。代码如下所示。这里又额外导入了java.util.Date包用来实现日期显示。导入java.util.Scanner包用来实现接受用户输入。

import DataStructure.LinearList.DoubleLinkedList;
import java.util.Date;
import java.util.Scanner;
class student
{
    private int no;
    private Double Chinese;
    private Double Math;
    private Double English;
    private Double Score;
    private Double Average_Score;
    public student(int no,Double Chinese,Double Math,Double English,Double Score,Double Average_Score)
    {
        this.no=no;
        this.Average_Score=Average_Score;
        this.Score=Score;
        this.English=English;
        this.Math=Math;
        this.Chinese=Chinese;
    }
    public student(){}

    public void setAverage_Score(Double average_Score) {
        Average_Score = average_Score;
    }

    public void setChinese(Double chinese) {
        Chinese = chinese;
    }

    public void setEnglish(Double english) {
        English = english;
    }

    public void setMath(Double math) {
        Math = math;
    }

    public void setScore(Double score) {
        Score = score;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public Double getAverage_Score() {
        return Average_Score;
    }

    public Double getChinese() {
        return Chinese;
    }

    public Double getMath() {
        return Math;
    }

    public Double getEnglish() {
        return English;
    }

    public Double getScore() {
        return Score;
    }

    public int getNo() {
        return no;
    }
}
public class test{
    public static void main(String[] args) {
        DoubleLinkedList manage=new DoubleLinkedList();
        manage.InitList();
        Scanner sc=new Scanner(System.in);
        System.out.println("********************************************");
        System.out.println("\t\t\t\t欢迎使用学生成绩统计系统v1.0");
        System.out.println("\t\t\t\tAuthor:XXXXXXX");
        System.out.println("\t\t\t\tDate:"+new Date());
        System.out.println("********************************************");
        System.out.println("系统菜单功能如下,请输入数字选择相应的功能。");
        System.out.println("1、打印学生的成绩信息   2、输出每门课程的最高分   3、修改学生的成绩");
        System.out.println("4、删除某个学生的信息   5、打印学生的平均成绩     6、学生排序");
        System.out.println("7、退出系统           8、录入学生信息");
        System.out.println("============================================");
        int op = 0;
        while (op<9)
        {
            System.out.println("请输入您要操作选项所对应的数字:");
            op=sc.nextInt();
            switch (op)
            {
                case 1:
                {
                    System.out.println("您是需要打印全部学生的信息还是只打印某个学生的信息!\n输入0是打印全部,输入1是打印其中1位同学的信息");
                    int get_op=sc.nextInt();
                    if (get_op==0)
                    {
                        int i=0;
                        System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                        while (i<manage.ListLength())
                        {
                            student get_msg=(student)manage.GetElem(i);
                            System.out.printf("第%d位学生的成绩       %.1f    %.1f     %.1f     %.1f     %.1f\n",get_msg.getNo(),get_msg.getChinese(),get_msg.getMath(),get_msg.getEnglish(),get_msg.getScore(),get_msg.getAverage_Score());
                            i++;
                        }
                    }
                    else
                    {
                        System.out.println("请输入要打印学生信息对应的序号:");
                        int getch=sc.nextInt();
                        for (int i = 0; i < manage.ListLength(); i++) {
                            student get_msg=(student)manage.GetElem(i);
                            if (get_msg.getNo()==getch)
                            {
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                System.out.printf("第%d位学生的成绩   %.1f    %.1f    %.1f     %.1f        %.1f\n",get_msg.getNo(),get_msg.getChinese(),get_msg.getMath(),get_msg.getEnglish(),get_msg.getScore(),get_msg.getAverage_Score());
                            }
                        }
                    }
                    break;
                }
                case 2:
                {
                    if (manage.ListEmpty())
                    {
                        break;
                    }
                    Double max_chinese=0.0;
                    int temp=0,temp1=0,temp2=0;
                    Double max_math=0.0;
                    Double max_en=0.0;
                    for (int i = 0; i < manage.ListLength(); i++) {
                        student get_msg=(student)manage.GetElem(i);
                        if(max_chinese< get_msg.getChinese())
                        {
                            max_chinese=get_msg.getChinese();
                            temp= get_msg.getNo();
                        }
                        if(max_math<get_msg.getMath())
                        {
                            max_math=get_msg.getMath();
                            temp1=get_msg.getNo();
                        }
                        if(max_en< get_msg.getEnglish())
                        {
                            max_en=get_msg.getEnglish();
                            temp2=get_msg.getNo();
                        }
                    }
                    System.out.printf("语文最高成绩为:%.1f,是第%d位同学\n",max_chinese,temp);
                    System.out.printf("数学最高成绩为:%.1f,是第%d位同学\n",max_math,temp1);
                    System.out.printf("英语最高成绩为:%.1f,是第%d位同学\n",max_chinese,temp2);
                    break;
                }
                case 3:
                {
                    System.out.println("请输入要修改学生的序号:");
                    int getch=sc.nextInt();
                    Boolean tag=false;
                    for (int test = 0; test < manage.ListLength(); test++) {
                        student temp_student=(student) manage.GetElem(test);
                        if (temp_student.getNo()==getch)
                        {
                            tag=true;
                        }
                    }
                    if (!tag)
                    {
                        System.out.println("无此学生信息!");
                        break;
                    }
                    int i=0;
                    while (i<manage.ListLength())
                    {
                        student stu=(student)manage.GetElem(i);
                        if (stu.getNo()==getch)
                        {
                            System.out.printf("您要修改序号为%d的学生的成绩.\n",stu.getNo());
                            System.out.printf("该学生的成绩是:语文:%.1f数学:%.1f英语:%.1f",stu.getChinese(),stu.getMath(),stu.getEnglish());
                            System.out.println("请输入您要修改的科目:0、全部修改。1、修改语文。2、修改数学。3、修改英语");
                            int get_op=sc.nextInt();
                            switch (get_op)
                            {
                                case 0:
                                {
                                    System.out.println("请输入学生的语文成绩:");
                                    Double Chinese=sc.nextDouble();
                                    System.out.println("请输入学生的数学成绩:");
                                    Double Math=sc.nextDouble();
                                    System.out.println("请输入学生的英语成绩:");
                                    Double English= sc.nextDouble();
                                    Double total=Chinese+Math+English;
                                    Double average=total/3;
                                    stu.setChinese(Chinese);
                                    stu.setMath(Math);
                                    stu.setEnglish(English);
                                    stu.setScore(total);
                                    stu.setAverage_Score(average);
                                    break;
                                }
                                case 1:
                                {
                                    System.out.println("请输入学生的语文成绩:");
                                    Double Chinese=sc.nextDouble();
                                    stu.setChinese(Chinese);
                                    Double total=Chinese+stu.getMath()+stu.getEnglish();
                                    Double average=total/3;
                                    stu.setScore(total);
                                    stu.setAverage_Score(average);
                                    break;
                                }
                                case 2:
                                {
                                    System.out.println("请输入学生的数学成绩:");
                                    Double math=sc.nextDouble();
                                    stu.setMath(math);
                                    Double total=stu.getChinese()+math+stu.getEnglish();
                                    Double average=total/3;
                                    stu.setScore(total);
                                    stu.setAverage_Score(average);
                                    break;
                                }
                                case 3:
                                {
                                    System.out.println("请输入学生的英语成绩:");
                                    Double en=sc.nextDouble();
                                    stu.setEnglish(en);
                                    Double total=stu.getChinese()+stu.getMath()+en;
                                    Double average=total/3;
                                    stu.setScore(total);
                                    stu.setAverage_Score(average);
                                    break;
                                }
                                default:
                                {
                                    System.out.println("输入有误,请重新输入吧");
                                    break;
                                }
                            }
                            break;
                        }
                        i++;
                    }
                    break;
                }
                case 4:
                {
                    System.out.println("请输入要删除的学生的序号:");
                    int getch=sc.nextInt();
                    Boolean tag=false;
                    for (int test = 0; test < manage.ListLength(); test++) {
                        student temp_student=(student) manage.GetElem(test);
                        if (temp_student.getNo()==getch)
                        {
                            tag=true;
                        }
                    }
                    if (!tag)
                    {
                        System.out.println("无此学生信息!");
                        break;
                    }
                    int i=0;
                    while (i<manage.ListLength())
                    {
                        student stu=(student)manage.GetElem(i);
                        if (stu.getNo()==getch)
                        {
                            System.out.printf("您要删除序号为%d的学生的成绩.\n",stu.getNo());
                            System.out.printf("该学生的成绩是:语文:%.1f数学:%.1f英语:%.1f\n",stu.getChinese(),stu.getMath(),stu.getEnglish());
                            manage.DeleteElem(i);
                        }
                        i++;
                    }
                    break;
                }
                case 5:
                {
                    for (int i = 0; i < manage.ListLength(); i++) {
                        student stu=(student)manage.GetElem(i);
                        System.out.printf("第%d位学生的平均成绩为:%.1f\n",stu.getNo(),stu.getAverage_Score());
                    }
                    break;
                }
                case 6:
                {
                    System.out.println("排序前成绩是:");
                    int i=0;
                    System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                    while (i<manage.ListLength())
                    {
                        student get_msg=(student)manage.GetElem(i);
                        System.out.printf("第%d位学生的成绩    %.1f    %.1f     %.1f     %.1f     %.1f\n",get_msg.getNo(),get_msg.getChinese(),get_msg.getMath(),get_msg.getEnglish(),get_msg.getScore(),get_msg.getAverage_Score());
                        i++;
                    }
                    System.out.println("请输入您要排序的依据:0、按总分排序。1、语文成绩排序。2、数学成绩排序。3、英语成绩排序");
                    int get_op=sc.nextInt();
                    System.out.println("请输入您是升序排序还是降序排序:1、升序。2、降序。");
                    int get_op1=sc.nextInt();
                    switch (get_op)
                    {
                        case 0:
                        {
                            student []temp=new student[manage.ListLength()];
                            for (int j = 0; j < temp.length; j++) {
                                temp[j]=(student) manage.GetElem(j);
                            }
                            if (get_op1==1)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getScore()>temp[k].getScore())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩   %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else if(get_op1==2)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getScore()<temp[k].getScore())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩   %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else {
                                System.out.println("输入选项有误,请重新输入!");
                            }
                            break;
                        }
                        case 1:
                        {
                            student []temp=new student[manage.ListLength()];
                            for (int j = 0; j < temp.length; j++) {
                                temp[j]=(student) manage.GetElem(j);
                            }
                            if (get_op1==1)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getChinese()>temp[k].getChinese())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩   %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else if(get_op1==2)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getChinese()<temp[k].getChinese())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩   %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else {
                                System.out.println("输入选项有误,请重新输入!");
                            }
                            break;
                        }
                        case 2:
                        {
                            student []temp=new student[manage.ListLength()];
                            for (int j = 0; j < temp.length; j++) {
                                temp[j]=(student) manage.GetElem(j);
                            }
                            if (get_op1==1)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getMath()>temp[k].getMath())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩   %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else if(get_op1==2)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getMath()<temp[k].getMath())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩   %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else {
                                System.out.println("输入选项有误,请重新输入!");
                            }
                            break;
                        }
                        case 3:
                        {
                            student []temp=new student[manage.ListLength()];
                            for (int j = 0; j < temp.length; j++) {
                                temp[j]=(student) manage.GetElem(j);
                            }
                            if (get_op1==1)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getEnglish()>temp[k].getEnglish())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩   %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else if(get_op1==2)
                            {
                                for (int j = 0; j < manage.ListLength()-1; j++) {
                                    for (int k = j+1; k < manage.ListLength(); k++) {
                                        student temp_msg;
                                        if (temp[j].getEnglish()<temp[k].getEnglish())
                                        {
                                            temp_msg=temp[j];
                                            temp[j]=temp[k];
                                            temp[k]=temp_msg;
                                        }
                                    }
                                }
                                System.out.println("排序后成绩是:");
                                System.out.println("   学生序号      语文     数学     英语     总成绩      平均成绩     ");
                                for (int j = 0; j < temp.length; j++) {
                                    System.out.printf("第%d位学生的成绩       %.1f    %.1f     %.1f     %.1f     %.1f\n",temp[j].getNo(),temp[j].getChinese(),temp[j].getMath(),temp[j].getEnglish(),temp[j].getScore(),temp[j].getAverage_Score());
                                }
                            }
                            else {
                                System.out.println("输入选项有误,请重新输入!");
                            }
                            break;
                        }
                        default:
                        {
                            System.out.println("输入有误,请重新输入吧!");
                            break;
                        }
                    }
                    break;
                }
                case 7:
                {
                    manage.DestoryList();
                    System.exit(0);
                    break;
                }
                case 8:
                {
                    System.out.println("请输入学生的序号:");
                    int no= sc.nextInt();
                    System.out.println("请输入学生的语文成绩:");
                    Double Chinese=sc.nextDouble();
                    System.out.println("请输入学生的数学成绩:");
                    Double Math=sc.nextDouble();
                    System.out.println("请输入学生的英语成绩:");
                    Double English= sc.nextDouble();
                    Double total=Chinese+Math+English;
                    Double average=total/3;
                    student stu=new student(no,Chinese,Math,English, total,average);
                    manage.addFirst(stu);
                    System.out.println("录入成功!");
                    break;
                }
                default:
                {
                    System.out.println("输入有误,请重新输入吧");
                    break;
                }
            }
        }
    }
}

需要说明的是。包DataStructure.LinearList.DoubleLinkedList中的方法作用如下:

方法体作用
public void InitList()
初始化双链表
public Boolean DestoryList()
销毁双链表
public Boolean ClearList()
清理双链表
public Boolean ListEmpty()
判断表是否为空
public int ListLength()
返回双链表的长度
public Object GetElem(int index)
使用下标值返回表中元素
public int LocateElem(Object elem)
返回元素在表中的位置
public Object PriorElem(Object elem)
返回指定节点的直接前驱元素
public Object NextElem(Object elem)
返回指定节点的直接后继元素
public Boolean ListInsert(Object elem,int index)
在指定位置插入新节点
public void addFirst(Object elem)
在表头插入元素
public void addAfter(Object elem)
在表尾插入元素
public Boolean DeleteElem(int index)
删除指定位置的节点
public void TraverseList()
遍历双链表
public void TraverseListByReverseOrder()
逆序遍历双链表

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荧光百叶草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值