实验六_学生成绩管理

设计一个菜单驱动的学生成绩管理程序,管理n个学生的m门考试科目成绩,实现以下基本功能。

    (1)能够新增学生信息,并计算总分和平均分。

    (2)能够根据学号修改和删除某学生信息。

    (3)能够显示所有学生的成绩信息。

    (4)能够分别按总分和学号进行排序。

    (5)能够根据学号查询该学生的基本信息。

    (6)学生成绩数据最终保存在文件scores.txt中,能够对文件读、写学生数据。

    程序运行时,菜单形式如下。

    Management for Students's scores

    1.Append record

    2.List record

    3.Delete record

    4.Modify record

    5.Search record

    6.Sort in descending order by sum

    7.Sort in ascending order by sum

    8.Sort in descending order by num

    9.Sort in ascending order by num

    W.Write to a File

    R.Read from a File

    0.Exit

    Please input your choice:

    要求用面向对象方法组织程序结构,合理设计各个自定义函数。同时,程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。

 **请在project的文件夹内,与src同级的目录中新建score.txt文件。**

package org.stu;

import java.util.*;
import java.io.*;

public class P6 {
    private static Scanner sc = new Scanner(System.in);
    private static List<Student> list = null;
    private static boolean logic = true;

    public static void main(String[] args) throws Exception {
        init();
        driver();
    }

    public static void driver() throws Exception {

        System.out.println("1.Append record");
        System.out.println("2.List record");
        System.out.println("3.Delete record");
        System.out.println("4.Modify record");
        System.out.println("5.Search record");
        System.out.println("6.Sort in descending order by sum");
        System.out.println("7.Sort in ascending order by sum");
        System.out.println("8.Sort in descending order by num");
        System.out.println("9.Sort in ascending order by num");
        System.out.println("W.Write to a File");
        System.out.println("R.Read from a File");
        System.out.println("0.Exit");
        while (logic) {
            System.out.print("Please input your choice:");
            String reader = sc.next();
            switch (reader) {
                case "0":
                    exit();
                    break;
                case "1":
                    saveStudent();
                    break;
                case "2":
                    listStudent();
                    break;
                case "3":
                    deleteStudent();
                    break;
                case "4":
                    modifyStudent();
                    break;
                case "5":
                    getStudent();
                    break;
                case "6":
                    dSortbySum();
                    break;
                case "7":
                    aSortbySum();
                    break;
                case "8":
                    dSortbySno();
                    break;
                case "9":
                    aSortbySno();
                    break;
                case "W":
                    Files.saveObject(list);
                    break;
                case "R":
                    read();
                    break;
                default:
                    System.out.println("请不要瞎搞");

            }
        }


    }

    //添加一个学生的数据
    public static void saveStudent() {
        float temp = 0;
        Student student = new Student();
        System.out.println("请输入学号");
        student.setSno(sc.next());
        System.out.println("请输入姓名");
        student.setSname(sc.next());
        System.out.println("请输入数据结构成绩");
        student.setDatastructure(sc.nextFloat());
        System.out.println("请输入数据库成绩");
        student.setDatabase(sc.nextFloat());
        System.out.println("请输入算法成绩");
        student.setAlgorithm(sc.nextFloat());

        temp += student.getDatastructure();
        temp += student.getDatabase();
        temp += student.getAlgorithm();

        student.setSum(temp);
        student.setAve(temp / 3);


        list.add(student);

    }

    //列出一个学生的数据
    public static void listStudent() {
        for (Student student : list) {
            System.out.println(student.toString());
        }
    }

    //删除一个学生的数据
    public static void deleteStudent() {
        String sno = null;
        Student temp = null;
        System.out.println("请输入学号");
        sno = sc.next();
        if ((temp = findStudentbySno(sno)) == null) {
            System.out.println("查无此人");
        } else {
            list.remove(temp);
            System.out.println("删除成功");
        }
    }

    //查找指定学生
    public static Student findStudentbySno(String sno) {
        Student target = null;
        for (Student student : list) {
            if (sno.equals(student.getSno())) {
                target = student;
                break;
            }
        }
        return target;
    }

    //查询指定学生
    public static void getStudent() {
        String sno = null;
        System.out.println("请输入学号进行查询");
        sno = sc.next();

        if (findStudentbySno(sno) == null) {
            System.out.println("查无此人");
        } else {
            System.out.println(findStudentbySno(sno).toString());
        }
    }

    //修改指定学生数据
    public static void modifyStudent() {
        String sno = null;
        System.out.println("请输入学号进行修改");
        sno = sc.next();

        if (findStudentbySno(sno) == null) {
            System.out.println("查无此人,失败");
        } else {
            float temp = 0;
            System.out.println("请输入学号");
            findStudentbySno(sno).setSno(sc.next());
            System.out.println("请输入姓名");
            findStudentbySno(sno).setSname(sc.next());
            System.out.println("请输入数据结构成绩");
            findStudentbySno(sno).setDatastructure(sc.nextFloat());
            System.out.println("请输入数据库成绩");
            findStudentbySno(sno).setDatabase(sc.nextFloat());
            System.out.println("请输入算法成绩");
            findStudentbySno(sno).setAlgorithm(sc.nextFloat());

            temp += findStudentbySno(sno).getDatabase();
            temp += findStudentbySno(sno).getDatastructure();
            temp += findStudentbySno(sno).getAlgorithm();

            findStudentbySno(sno).setSum(temp);
            findStudentbySno(sno).setSum(temp / 3);

            System.out.println("修改成功");
        }
    }

    //按总分降序排列
    public static void dSortbySum() {
        Collections.sort(list, new Comparator<Student>() {
            //o1.getSum()-o2.getSum() 升序
            //o2.getSum()-o1.getSum() 降序
            @Override
            public int compare(Student o1, Student o2) {
                return (int) (o2.getSum() - o1.getSum());
            }
        });
        System.out.println("排序完成");
    }

    //按学号降序排列
    public static void dSortbySno() {
        Collections.sort(list, new Comparator<Student>() {
            //o1.getSum()-o2.getSum() 升序
            //o2.getSum()-o1.getSum() 降序
            @Override
            public int compare(Student o1, Student o2) {
                int first = Integer.parseInt(o1.getSno());
                int second = Integer.parseInt(o2.getSno());
                return second - first;
            }
        });
        System.out.println("排序完成");
    }

    //按总分升序排列
    public static void aSortbySum() {
        Collections.sort(list, new Comparator<Student>() {
            //o1.getSum()-o2.getSum() 升序
            //o2.getSum()-o1.getSum() 降序
            @Override
            public int compare(Student o1, Student o2) {
                return (int) (o1.getSum() - o2.getSum());
            }
        });
        System.out.println("排序完成");
    }

    //按学号升序排列
    public static void aSortbySno() {
        Collections.sort(list, new Comparator<Student>() {
            //o1.getSum()-o2.getSum() 升序
            //o2.getSum()-o1.getSum() 降序
            @Override
            public int compare(Student o1, Student o2) {
                int first = Integer.parseInt(o1.getSno());
                int second = Integer.parseInt(o2.getSno());
                return first - second;
            }
        });
        System.out.println("排序完成");
    }

    //退出程序
    public static void exit() {
        logic = false;
    }

    //创建列表
    public static void init() throws Exception {
        if (Files.readObject() != null) {
            list = (ArrayList<Student>) Files.readObject();
        } else {
            list = new ArrayList<Student>();
        }
    }

    //读数据
    public static void read() throws Exception {
        System.out.println(Files.readObject());
    }


}

public class Files {
    private static String filePath = null;
    static{
        try{
            filePath = new File("").getCanonicalPath()+"/scores.txt/";
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    public static void saveObject(Object object) throws Exception{
        ObjectOutputStream out = null;
        FileOutputStream fout = null;
        try{
            fout = new FileOutputStream(filePath);
            out = new ObjectOutputStream(fout);
            out.writeObject(object);
        }finally{
            fout.close();
            out.close();
        }


    }
    public static Object readObject() throws Exception{
        ObjectInputStream in = null;
        FileInputStream fin = null;
        Object object = null;
        try{
            fin = new FileInputStream(filePath);
            if(fin.getChannel().size() == 0){
                return null;
            }
            in = new ObjectInputStream(fin);
            object = in.readObject();
            return object;
        }finally{
            if(fin!=null){
                fin.close();
            }
            if(in!=null){
                in.close();
            }
        }
    }

}
public class Student implements Serializable {
    private String sno;
    private String sname;
    private float datastructure;
    private float database;
    private float algorithm;
    private float ave;
    private float sum;

    public void setSno(String sno) {
        this.sno = sno;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public void setDatastructure(float datastructure) {
        this.datastructure = datastructure;
    }

    public void setDatabase(float database) {
        this.database = database;
    }

    public void setAlgorithm(float algorithm) {
        this.algorithm = algorithm;
    }

    public void setAve(float ave) {
        this.ave = ave;
    }

    public void setSum(float sum) {
        this.sum = sum;
    }

    public String getSno() {
        return sno;
    }

    public String getSname() {
        return sname;
    }

    public float getDatastructure() {
        return datastructure;
    }

    public float getDatabase() {
        return database;
    }

    public float getAlgorithm() {
        return algorithm;
    }

    public float getAve() {
        return ave;
    }

    public float getSum() {
        return sum;
    }

    @Override
    public String toString() {
        return "Student{" +
                "学号:'" + sno + '\'' +
                ", 姓名:'" + sname + '\'' +
                ", 数据结构成绩:" + datastructure +
                ", 数据库成绩:" + database +
                ", 算法成绩:" + algorithm +
                ", 平均分:" + ave +
                ", 总分:" + sum +
                '}';
    }
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Swain_Woo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值