随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

设计思路:

需要考虑的是信息的存储,显示。

首先是接口规范的定义:

 

public interface ISetStudent {  // 规范学生信息设置类
    public Student[] setStudentsArray(Student[] stuArray,Student student, int start);

    public void showAllMsg(Student[] students);
}
public interface IMenu {    // 规范菜单类
    public void choose();
}
public interface IAddStuMsg {   // 规范信息添加类
    public Student AddStudent(Student student);
}

然后是类的创建:

public class Student implements Comparable<Student>{
    private String name;
    private double score;

    public Student() {
    }

    public Student(String name, double score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

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

    public double getScore() {
        return score;
    }

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

    @Override
    public String toString() {      // 变量变字符串
        return "|" + "姓名:" + name +
                ", 成绩:" + score + "|" + "\n";
    }

    @Override
    public int compareTo(Student student) {     // 重写方法,比较大小,小于返回负整数,等于返回0,大于返回正整数
        return (int)(this.score - student.score);
    }


}
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class AddStudentMessage implements IAddStuMsg {
    private OutputStream output;
    public Student AddStudent(Student student) {    // 设置学生姓名和成绩信息,返回学生类
        Scanner sc = new Scanner(System.in);
        System.out.print("姓名:");
        student.setName(sc.next());
        System.out.print("成绩:");
        student.setScore(sc.nextDouble());
        try {
            this.output = new FileOutputStream("D:" + File.separator + "Demo2" + File.separator + "Student.txt",true);   // 设置路径,保存形式为追加内容
            try {
                this.output.write(student.toString().getBytes(StandardCharsets.UTF_8)); // 向文件中写入内容
                return student;
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (this.output != null){
                try {
                    this.output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Scanner;

public class SetStudent implements ISetStudent {
    public Student[] setStudentsArray(Student[] stuArray, Student student, int start) {    // 设置个数并返回学生类数组
        for (int i = start; i < start + 1; i++) {   // 将传入的学生信息存在数组第start位置上,因为只存储一位,所以在i<start+1的位置结束
            stuArray[i] = student;       // 存储学生信息类
        }
        return stuArray;    // 返回学生类数组
    }

    public void showAllMsg(Student[] students) { // 显示数组中所有的学生信息
        for (int i = 0; i < students.length; i++) {
            if (students[i] != null) {   // 如果信息不为空
                System.out.println(students[i].toString());
            }
        }
    }
}
import java.util.Scanner;

public class Menu implements IMenu {
    public void choose() {
        Scanner sc = new Scanner(System.in);
        ISetStudent setStu = new SetStudent();  // 接口的定义使得对象的使用更安全(因为只能使用接口中存在的方法)
        IAddStuMsg addStu = new AddStudentMessage();
        int start = 0;  // 设置将学生对象传入数组的位置,从0开始
        boolean flag = true;    // 控制while循环
        int maxArr = 100;
        Student[] stuArray = new Student[maxArr];  // 存储学生信息的数组
        while (flag) {
            System.out.println("请选择进行的步骤:\n【1】添加数据\n【2】显示所有信息\n【3】结束\n");
            System.out.print("选择:");
            int choose = sc.nextInt();
            if (choose != 3) {
                switch (choose) {
                    case 1:
                        if (start < maxArr){
                            stuArray = setStu.setStudentsArray(stuArray,addStu.AddStudent(new Student()),start);    // 调用AddStudentMessage类AddStudent()添加信息的方法,然后向SetStudent类中传入前面得到的Student对象,将得到的Student对象存入数组中,并传入此时是创建的第几个对象,作为向数组中添加时占的第几个位数
                            start++;
                        }else{
                            System.out.println("装不下了!");
                        }
                        break;
                    case 2:
                        setStu.showAllMsg(stuArray);   // 调用setStudent类中的showAllMsg()方法来打印数组中的信息
                        break;
                }
            }else {
                flag = false;
                System.out.println("结束!");
            }
        }
    }
}

然后是工厂类进行对象的获取:

public class Factory{
    public static IMenu getMenu(){
        return new Menu();
    }
}

最后是客户端调用:

public class MAIN {
    public static void main(String[] args) {
        Factory.getMenu().choose();
    }
}

输出结果:

以上就是输入信息与保存的简单案例。

 

posted on 2022-02-24 14:34  时间完全不够用啊  阅读(508)  评论(0编辑  收藏  举报