java成绩管理系统附源码

前言

对于计算机专业的学生来讲,一定对于学生成绩管理系统课程设计十分印象深刻。设计、上机、编码、写报告、答辩等一系列流程,虽然很简单,但也可以综合运用我们所学的一些知识了。

今天就来复习以下这个课题,用 Java SE 来实现该课题,也算是补上当初上课的时候没有好好写的遗憾吧。

虽然很简单,但是对于刚涉足编程学习的人来讲,还是有一定难度的,既要考虑界面打印,也要考虑条件判断、循环语句、输入输出控制等等技巧,所以在这里简单地实现一下,方便给初学的小伙伴们一个参考(对于我的界面比较丑的问题,就不要过于纠结了,下去可以自己调整,我们只关注功能实现)。

对于学生成绩管理系统,主要可以分为如下几个功能:

录入学生成绩

统计学生成绩

查找学生成绩

修改学生成绩

删除学生成绩

按平均分排序

显示所有成绩

退出管理系统

进入系统之后,我们应该有系统菜单,然后根据提示选择我们所要进行的操作。

录入学生成绩

该功能是每次录入学生的成绩信息,或者在当前数据的基础上添加录入新的学生成绩信息;

统计学生成绩

主要是对学生的成绩进行统计,然后输出平均分,并打印出对应信息;

查找学生成绩

根据输入的学号来查找对应学生的相关成绩信息;

修改学生成绩

根据输入的学号来对对应学生的成绩进行修改;

删除学生成绩

根据输入的学生学号,删除对应学生的成绩信息;

按平均分排序

按照平均分降序排序;

显示所有成绩

便利所有学生成绩,然后打印出来;

退出管理系统

退出菜单;

功能设计与实现

主界面

主要是打印出来系统功能的选择菜单,然后根据我们的输入进入不同的子功能模块;

package com.cunyu;import java.util.ArrayList;import java.util.Scanner;/** * @author : cunyu * @version : 1.0 * @className : Manager * @date : 2021/4/4 23:54 * @description : 管理系统 */public class Manager {    public static Scanner scanner = new Scanner(System.in);    public static ArrayList<Student> students = new ArrayList<>();    public static void main(String[] args) {        while (true) {            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("-------------【0】退出管理系统-------------");            Student student = new Student();            System.out.println("输入你的选择【0-7】");            String choice = scanner.next();            switch (choice) {                case "1":                    // 录入成绩                    student.addScore(students);                    break;                case "2":                    // 统计信息                    student.showAvg(students);                    break;                case "3":                    // 查找成绩                    student.lookupStudent(students);                    break;                case "4":                    // 修改成绩                    student.modifyStudent(students);                    break;                case "5":                    // 删除成绩                    student.deleteStudent(students);                    break;                case "6":                    // 按照平均分排序                    student.sortStudent(students);                    break;                case "7":                    // 显示所有成绩                    student.showAllStudent(students);                    break;                case "0":                    System.exit(0);                default:                    break;            }        }    }}

主类设计

系统主要是针对学生成绩信息管理的,所以我们设计一个学生类,包括一系列属性(也就是简单的个人信息和各科成绩);

package com.cunyu;/** * @author : cunyu * @version : 1.0 * @className : Student * @date : 2021/4/4 23:31 * @description : 学生类 */public class Student {    //    班级    private String grade;    //    学号    private long id;    //    姓名    private String name;    //    高数    private float math;    //    英语    private float english;    //    体育    private float sport;    //    Java    private float java;    //    C++    private float cPlusPlus;    //    政治    private float polity;    //    算法    private float algorithm;    //    平均分    private double average;        // 各种 setter/getter 以及构造函数}

录入学生成绩

首先录入学号,判断是否可用,不可用则重新输入,可用则输入其他信息;

然后将信息赋值到学生对象,最后将该学生对象加入集合就可以了。

/*** @param students 学生对象列表* @return* @description 录入学生信息* @date 2021/4/5 9:14* @author cunyu1943* @version 1.0*/public void addScore(ArrayList<Student> students) {    System.out.println("----------录入学生数据----------");    System.out.println("请依次输入如下数据:");    long id;    while (true) {        System.out.println("学号");        id = scanner.nextInt();        if (isValid(students, id)) {            System.out.println("学号重复,请重新输入");        } else {            break;        }    }    System.out.println("年级");    String grade = scanner.next();    System.out.println("姓名");    String name = scanner.next();    System.out.println("数学");    float math = scanner.nextFloat();    System.out.println("英语");    float english = scanner.nextFloat();    System.out.println("体育");    float sport = scanner.nextFloat();    System.out.println("Java");    float java = scanner.nextFloat();    System.out.println("C++");    float cPlusPlus = scanner.nextFloat();    System.out.println("政治");    float polity = scanner.nextFloat();    System.out.println("算法");    float algorithm = scanner.nextFloat();    //        创建对象,并设置属性,然后将其加入学生对象集合    Student student = new Student();    student.setId(id);    student.setGrade(grade);    student.setName(name);    student.setMath(math);    student.setAlgorithm(algorithm);    student.setEnglish(english);    student.setcPlusPlus(cPlusPlus);    student.setJava(java);    student.setSport(sport);    student.setPolity(polity);    //        获取平均分    double avg = getAvg(student);    student.setAverage(avg);    //        添加到集合    students.add(student);    //        提示信息    System.out.println("添加成功");}

统计学生成绩

主要实现对于各学生平均成绩的统计,然后打印出信息;

/*** @param students 学生对象集合* @return* @description 显示简单统计数据* @date 2021/4/5 10:08* @author cunyu1943* @version 1.0*/public void showAvg(ArrayList<Student> students) {    System.out.println("----------输出学生统计数据----------");    if (students.size() == 0) {        System.out.println("当前无数据,请先添加数据!");    } else {        System.out.println("班级\t\t学号\t\t姓名\t\t平均分");        System.out.println("---------------------------------");        for (Student student : students) {            System.out.format("%s\t\t%d\t\t%s\t\t%.2f\n", student.getGrade(), student.getId(), student.getName(), student.getAvg(student));        }    }}

查找学生成绩

先判断是否有数据,有数据再进行后续操作。然后通过对输入的学号进行匹配,找到对应学号的学生成绩信息并打印;

/*** @param students 学生对象集合* @return* @description 查找对应学号学生的成绩信息* @date 2021/4/5 12:59* @author cunyu1943* @version 1.0*/public void lookupStudent(ArrayList<Student> students) {    System.out.println("----------查找学生成绩----------");    if (students.size() == 0) {        System.out.println("当前无数据,请添加后重试");    } else {        System.out.println("请输入要查找学生的学号:");        long id = scanner.nextLong();        int flag = -1;        Student student = new Student();        //        查找对应学号,找到就退出        for (int i = 0; i < students.size(); i++) {            student = students.get(i);            if (student.getId() == id) {                flag = i;                break;            }        }        if (flag == -1) {            System.out.println("未找到对应学号的学生,请确认后重新输入!");        } else {            System.out.println("对应学号的学生成绩如下:");            System.out.println("班级\t\t学号\t\t姓名\t\t数学\t\t英语\t\t体育\t\tJava\t\tC++\t\t政治\t\t算法\t\t平均分");            System.out.format("%s\t%d\t\t%s\t\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", student.getGrade(), student.getId(), student.getName(), student.getMath(), student.getEnglish(), student.getSport(), student.getJava(), student.getcPlusPlus(), student.getPolity(), student.getAlgorithm(), student.getAvg(student));            System.out.println("查找信息成功!");        }    }}

修改学生成绩

先判断是否有数据,有数据再进行后续操作。然后通过对输入的学号进行匹配,找到对应学号的学生,然后对其成绩信息进行修改,但不修改个人其他信息;

/*** @param students 学生对象集合* @return* @description 修改对应学号学生的信息* @date 2021/4/5 12:59* @author cunyu1943* @version 1.0*/public void modifyStudent(ArrayList<Student> students) {    System.out.println("----------修改学生成绩----------");    if (students.isEmpty()) {        System.out.println("当前无数据,请添加后重试");    } else {        System.out.println("请输入要修改学生的学号:");        long id = scanner.nextLong();        for (Student student : students) {            if (id == student.getId()) {                System.out.println("请重新输入该学生的成绩");                System.out.println("数学");                float math = scanner.nextFloat();                System.out.println("英语");                float english = scanner.nextFloat();                System.out.println("体育");                float sport = scanner.nextFloat();                System.out.println("Java");                float java = scanner.nextFloat();                System.out.println("C++");                float cPlusPlus = scanner.nextFloat();                System.out.println("政治");                float polity = scanner.nextFloat();                System.out.println("算法");                float algorithm = scanner.nextFloat();                student.setMath(math);                student.setAlgorithm(algorithm);                student.setEnglish(english);                student.setcPlusPlus(cPlusPlus);                student.setJava(java);                student.setSport(sport);                student.setPolity(polity);                //                获取平均分                double avg = getAvg(student);                student.setAverage(avg);                System.out.println("修改成功!");            } else {                System.out.println("未找到对应学号的学生,请确认后重新输入!");            }            break;        }    }}

删除学生成绩

先判断是否有数据,有数据再进行后续操作。然后通过对输入的学号进行匹配,找到对应学号的学生,然后将其从集合中删除即可;

/**    * @param students 学生对象集合    * @return    * @description 删除学生成绩    * @date 2021/4/5 14:28    * @author cunyu1943    * @version 1.0    */public void deleteStudent(ArrayList<Student> students) {    System.out.println("----------删除学生成绩----------");    if (students.isEmpty()) {        System.out.println("当前无数据,请添加后重试");    } else {        System.out.println("输入要删除学生成绩的学号");        long id = scanner.nextLong();        int index = -1;        for (int i = 0; i < students.size(); i++) {            Student student = students.get(i);            if (student.getId() == id) {                index = i;                break;            }        }        if (index == -1) {            System.out.println("未找到对应学号学生信息,请确认后再删除!");        } else {            students.remove(index);            System.out.println("----------删除成功----------");        }    }}

按平均分排序

先判断是否有数据,有数据再进行后续操作。然后对集合中的学生的平均成绩进行排序,然后依次从高到低打印出学生信息;

/*** @param students 学生对象集合* @return* @description 按照平均分排序* @date 2021/4/5 14:29* @author cunyu1943* @version 1.0*/public void sortStudent(ArrayList<Student> students) {    if (students.isEmpty()) {        System.out.println("当前无数据,请添加后重试");    } else {        for (int i = 0; i < students.size() - 1; i++) {            if (students.get(i).getAvg(students.get(i)) < students.get(i + 1).getAvg(students.get(i + 1))) {                Student tmp = students.get(i);                students.set(i, students.get(i + 1));                students.set(i + 1, tmp);            }        }        System.out.println("排序后的学生成绩");        System.out.println("班级\t\t学号\t\t姓名\t\t数学\t\t英语\t\t体育\t\tJava\t\tC++\t\t政治\t\t算法\t\t平均分");        for (Student student : students) {            System.out.format("%s\t%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", student.getGrade(), student.getId(), student.getName(), student.getMath(), student.getEnglish(), student.getSport(), student.getJava(), student.getcPlusPlus(), student.getPolity(), student.getAlgorithm(), student.getAvg(student));        }    }}

显示所有成绩

先判断是否有数据,有数据再进行后续操作。遍历学生对象集合,然后打印出各个学生的成绩信息。

/*** @param students 学生对象集合* @return* @description 显示所有学生成绩* @date 2021/4/5 14:30* @author cunyu1943* @version 1.0*/public void showAllStudent(ArrayList<Student> students) {    if (students.isEmpty()) {        System.out.println("当前无数据,请先添加数据");    } else {        System.out.println("----------所有学生成绩如下----------");        System.out.println("班级\t\t学号\t\t姓名\t\t数学\t\t英语\t\t体育\t\tJava\t\tC++\t\t政治\t\t算法\t\t平均分");        for (Student student : students) {            System.out.format("%s\t%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", student.getGrade(), student.getId(), student.getName(), student.getMath(), student.getEnglish(), student.getSport(), student.getJava(), student.getcPlusPlus(), student.getPolity(), student.getAlgorithm(), student.getAvg(student));        }    }}

总程序

将上述所有模块整合之后,我们得到最终的程序;

Manager.java

package com.cunyu;import java.util.ArrayList;import java.util.Scanner;/** * @author : cunyu * @version : 1.0 * @className : Manager * @date : 2021/4/4 23:54 * @description : 管理系统 */public class Manager {    public static Scanner scanner = new Scanner(System.in);    public static ArrayList<Student> students = new ArrayList<>();    public static void main(String[] args) {        while (true) {            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("-------------【0】退出管理系统-------------");            Student student = new Student();            System.out.println("输入你的选择");            String choice = scanner.next();            switch (choice) {                case "1":                    student.addScore(students);                    break;                case "2":                    student.showAvg(students);                    break;                case "3":                    student.lookupStudent(students);                    break;                case "4":                    student.modifyStudent(students);                    break;                case "5":                    student.deleteStudent(students);                    break;                case "6":                    student.sortStudent(students);                    break;                case "7":                    student.showAllStudent(students);                    break;                case "0":                    System.exit(0);                default:                    break;            }        }    }}

Student.java

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容