Java项目练习10_实现一个简单的学生成绩管理系统

(上一节练习,基于Tcp协议的复杂多线程Socket通信模型

Java项目练习:第10期

实现一个简单的学生成绩管理系统(60分钟)

需求描述:

基于命令行模拟实现一个简单的学生成绩信息管理系统,要求实现以下功能:

  1. 设计学生信息类,要求信息包括学号、姓名、成绩等属性;
  2. 涉及主功能菜单,要求功能涵盖:
    • 输入学生信息
    • 由姓名查询
    • 由学号查询
    • 由学号排序(升序)
    • 由分数排序(降序)
    • 保存学生数据
    • 加载学生数据
  3. 将内存中的集合框架对象进行持久化,下一次运行系统时可直接调用

考察知识点:

  • 文件IO操作基础
  • 命令行输出控制
  • Java集合基础
  • 网络编程socket通信
package d20181216;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;


class Student implements Serializable {

    /**
     * 实体类:
     */
    private static final long serialVersionUID = 4888503192302777566L;
    private String id; // 学号字段
    private String name; // 名称
    private String age; // 年龄
    private String adderss; // 地址
    private String score; // 分数

    public Student() {

    }

    // 为了方便封装数据提供了有参构造
    public Student(String id, String name, String age, String adderss, String score) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.adderss = adderss;
        this.score = score;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getScore() {
        return score;
    }

    public void setScore(String score) {
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getAdderss() {
        return adderss;
    }

    public void setAdderss(String adderss) {
        this.adderss = adderss;
    }

}


public class StudentManager {

    public static void main(String[] args) throws ClassNotFoundException, IOException {

        // 程序开始加载本地数据
        ArrayList<Student> array = new ArrayList<Student>();
        File file = new File("Date.txt");
        if (file.exists() && file.length() > 0) {
            // 本地数据存在则加载数据(判断大小是因为,如果空文件会报空指针异常)
            ArrayList<Student> list = load();
            array = list;
        } else {
            // 如果本地不存在数据,则创建文件
            file.createNewFile();
        }

        while (true) {
            // 主界面 1.打印表头 2.输入信息 3.

            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退出");

            // 录入信息
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你想要选择的功能:");
            String choice = sc.nextLine();

            // 选择
            switch (choice) {
                case "1":
                    // 1查询所有学生
                    findAllStudent(array);
                    break;
                case "2":
                    // 2增加学生
                    addStudent(array);
                    store(array);
                    break;
                case "3":
                    // 3根据学号查询
                    selectById(array);
                    break;
                case "4":
                    // 按学号排序查询
                    orderById(array);
                    break;
                case "5":
                    // 5按照分数排序查询
                    orderByScore(array);
                    break;
                case "6":
                    // 退出
                    store(array);
                    System.out.println("谢谢你的使用");
                    System.exit(0);
                    break;

                default:
                    System.out.println("此功能暂未开放");
                    break;
            }

        }
    }

    // 根据分数排序
    private static void orderByScore(ArrayList<Student> array) {
        if (array.size() <= 0) {
            System.out.println("数据库为空!!");
            return;
        }

        // 为了保护原始数据,采用克隆副本进行排序
        List<Student> cList = (ArrayList<Student>) array.clone();

        // 排序按照分数
        Collections.sort(cList, new Comparator<Student>() {

            public int compare(Student s1, Student s2) {
                Double id1 = new Double(s1.getScore());
                Double id2 = new Double(s2.getScore());

                Integer result = id1 > id2 ? 1 : id1 < id2 ? -1 : 0;
                return result;
            }
        });

        // 打印输出分数
        System.out.println("学号\t\t姓名\t年龄\t地址\t成绩");
        for (int i = 0; i < cList.size(); i++) {
            Student st = cList.get(i);
            System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss() + "\t"
                    + st.getScore());

        }

    }

    // 根据学号排序
    private static void orderById(ArrayList<Student> array) {
        if (array.size() <= 0) {
            System.out.println("数据库为空!!");
            return;
        }

        List<Student> cList = (ArrayList<Student>) array.clone();

        // Collections.copy(array, cList);

        Collections.sort(cList, new Comparator<Student>() {

            public int compare(Student s1, Student s2) {
                Integer id1 = Integer.parseInt(s1.getId());
                Integer id2 = Integer.parseInt(s2.getId());
                Integer result = id1 > id2 ? 1 : id1 < id2 ? -1 : 0;
                return result;
            }
        });

        System.out.println("学号\t\t姓名\t年龄\t地址\t成绩");
        for (int i = 0; i < cList.size(); i++) {
            Student st = cList.get(i);
            System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss() + "\t"
                    + st.getScore());

        }
    }

    // 根据学号查询
    private static void selectById(ArrayList<Student> array) {
        System.out.println("请输入要查询的学号");
        Scanner sc = new Scanner(System.in);
        String id = sc.nextLine();

        if (id == null) {
            System.out.println("输入为空!");
            return;
        }

        if (array.size() <= 0) {
            System.out.println("数据库为空!!");
            return;
        }
        boolean flag = false;
        Student st = null;
        for (int i = 0; i < array.size(); i++) {
            st = array.get(i);
            if (id.equals(st.getId())) {
                flag = true;
                break;
            }
        }

        if (flag) {
            System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss());
        } else {
            System.out.println("数据库中未查询到数据!请修改学号");
        }

    }

    // 存储数据
    public static void store(ArrayList<Student> array) throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Date.txt"));
        oos.writeObject(array);
        oos.flush();
        oos.close();
    }

    // 加载数据:
    public static ArrayList<Student> load() throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Date.txt"));
        Object obj = ois.readObject();
        ois.close();
        ArrayList<Student> list = (ArrayList<Student>) obj;
        return list;

    }

    // 查询所有学生信息方法
    public static void findAllStudent(ArrayList<Student> array) {
        if (array.size() <= 0) {
            System.out.println("当前管理系统暂时没有信息");

        } else {
            System.out.println("学号\t\t姓名\t年龄\t地址\t成绩");
            for (int i = 0; i < array.size(); i++) {
                Student st = array.get(i);
                System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss()
                        + "\t" + st.getScore());

            }
        }

    }

    // 添加学生信息的方法
    public static void addStudent(ArrayList<Student> array) {
        // 键盘录入信息
        Scanner sc = new Scanner(System.in);
        String id;
        while (true) {
            System.out.println("请输入学号");
            boolean flag = false;
            id = sc.nextLine();
            // 添加判断是否已经有了这个学号
            for (int i = 0; i < array.size(); i++) {
                Student s = array.get(i);
                String userId = s.getName();
                if (userId.equals(id)) {
                    flag = true;
                    break;
                }

            }
            if (flag == true) {
                System.out.println("当前学号已经被占用,请重新输入");
                // continue;

            } else {
                break;
            }
        }
        System.out.println("请输入姓名");
        String name = sc.nextLine();
        System.out.println("请输入年龄");
        String age = sc.nextLine();
        System.out.println("请输入住址");
        String adderss = sc.nextLine();
        System.out.println("请输入成绩");
        String score = sc.nextLine();
        // 创建学生对象
        Student st = new Student(id, name, age, adderss, score);
        // 添加到集合中
        array.add(st);

    }

}

(完结)

  • 22
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值