最简单控制台版输入框学生信息处理平台

功能实现

支持添加、删除、修改、查询、排序功能。

使用并行数组 nos, names, scores,学生信息统一下标。

使用 Scanner 交互输入。

使用冒泡排序实现成绩排序。

package com.xiangmu.day04;

import java.util.Scanner;

public class Test01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int capacity = 100; // 最大学生数量
        int[] nos = new int[capacity];
        String[] names = new String[capacity];
        double[] scores = new double[capacity];
        int count = 0; // 当前学生数量

        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("8. 退出系统");
            System.out.print("请输入操作编号:");
            int choice = sc.nextInt();

            switch (choice) {
                case 1:
                    System.out.print("请输入学号:");
                    int no = sc.nextInt();
                    if (indexOf(nos, count, no) != -1) {
                        System.out.println("学号重复,添加失败!");
                        break;
                    }
                    System.out.print("请输入姓名:");
                    String name = sc.next();
                    System.out.print("请输入成绩:");
                    double score = sc.nextDouble();

                    nos[count] = no;
                    names[count] = name;
                    scores[count] = score;
                    count++;
                    System.out.println("添加成功!");
                    break;

                case 2:
                    System.out.print("请输入要修改的学生学号:");
                    int modNo = sc.nextInt();
                    int modIndex = indexOf(nos, count, modNo);
                    if (modIndex == -1) {
                        System.out.println("查无此学号!");
                    } else {
                        System.out.print("请输入新姓名:");
                        names[modIndex] = sc.next();
                        System.out.print("请输入新成绩:");
                        scores[modIndex] = sc.nextDouble();
                        System.out.println("修改成功!");
                    }
                    break;

                case 3:
                    System.out.print("请输入要删除的学号:");
                    int delNo = sc.nextInt();
                    int delIndex = indexOf(nos, count, delNo);
                    if (delIndex == -1) {
                        System.out.println("查无此学号!");
                    } else {
                        for (int i = delIndex; i < count - 1; i++) {
                            nos[i] = nos[i + 1];
                            names[i] = names[i + 1];
                            scores[i] = scores[i + 1];
                        }
                        count--;
                        System.out.println("删除成功!");
                    }
                    break;

                case 4:
                    System.out.println("学号\t姓名\t成绩");
                    for (int i = 0; i < count; i++) {
                        System.out.println(nos[i] + "\t" + names[i] + "\t" + scores[i]);
                    }
                    break;

                case 5:
                    System.out.print("请输入要查询的学号:");
                    int searchNo = sc.nextInt();
                    int searchIndex = indexOf(nos, count, searchNo);
                    if (searchIndex == -1) {
                        System.out.println("查无此人!");
                    } else {
                        System.out.println("学号:" + nos[searchIndex] + " 姓名:" + names[searchIndex] + " 成绩:" + scores[searchIndex]);
                    }
                    break;

                case 6:
                    System.out.print("请输入要查询的姓名:");
                    String searchName = sc.next();
                    boolean found = false;
                    for (int i = 0; i < count; i++) {
                        if (names[i].equals(searchName)) {
                            System.out.println("学号:" + nos[i] + " 姓名:" + names[i] + " 成绩:" + scores[i]);
                            found = true;
                        }
                    }
                    if (!found) {
                        System.out.println("查无此人!");
                    }
                    break;

                case 7:
                    // 成绩排序(冒泡)
                    for (int i = 0; i < count - 1; i++) {
                        for (int j = 0; j < count - 1 - i; j++) {
                            if (scores[j] < scores[j + 1]) {
                                swap(nos, j, j + 1);
                                swap(names, j, j + 1);
                                swap(scores, j, j + 1);
                            }
                        }
                    }
                    System.out.println("排序后学生信息:");
                    for (int i = 0; i < count; i++) {
                        System.out.println(nos[i] + "\t" + names[i] + "\t" + scores[i]);
                    }
                    break;

                case 8:
                    System.out.println("系统退出!");
                    System.exit(0);

                default:
                    System.out.println("无效操作!");
            }
        }
    }

    // 查找学号的索引
    public static int indexOf(int[] arr, int count, int key) {
        for (int i = 0; i < count; i++) {
            if (arr[i] == key) return i;
        }
        return -1;
    }

    // 重载 swap 方法(int 数组)
    public static void swap(int[] arr, int i, int j) {
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }

    // 重载 swap 方法(String 数组)
    public static void swap(String[] arr, int i, int j) {
        String t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }

    // 重载 swap 方法(double 数组)
    public static void swap(double[] arr, int i, int j) {
        double t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }
}

你应该怎么做,才能写出这样完整的程序?

1. 一步一步拆解功能

比如:

  • 第一步只做“添加学生”;

  • 第二步加入“查询所有学生”;

  • 然后做“根据学号查询”,这样功能逐步累加,逻辑也清晰。

2. 养成结构清晰的编程习惯

比如:

  • 先写方法框架再填内容;

  • 所有功能放在 switch-case 里分块处理;

  • 输入验证要到位,避免异常。

3. 多写多练,不怕试错

  • 每实现一个功能,就运行一遍;

  • 错误不可怕,调试是最好的学习方式;

  • 可以先打印调试信息来观察运行流程。

4. 学会封装重复逻辑

  • 比如查找学号可以封装成一个 indexOf() 方法;

  • 排序时涉及多个数组同步交换,也封装成 swap() 方法,避免重复代码。

功能模块拆解

功能编号 模块名称 说明
1 添加学生信息 学号不能重复,数组末尾添加一条
2 修改学生信息 找到学号所在位置,修改姓名和成绩
3 删除学生信息 找到学号所在位置,向前覆盖数组元素
4 查询所有学生 遍历数组并输出非空学生信息
5 按学号查询 根据输入学号查找并展示该学生
6 按姓名查询 遍历数组匹配姓名,支持重名
7 成绩排序展示 对三个数组进行同步排序(降序)
8 退出系统 使用 System.exit(0) 安全退出程序

 分阶段完成

阶段 目标 建议
第1阶段 实现添加 + 查询所有功能 理解数据结构基本操作
第2阶段 加入修改、删除、查找功能 掌握数组遍历和判断
第3阶段 实现成绩排序 学习排序算法 + 同步数组移动
第4阶段 完善输入校验 + 格式美化 提高用户体验(加入注释等等)

你可能感兴趣的:(最简单控制台版输入框学生信息处理平台)