设计思路:
需要考虑的是信息的存储,显示。
首先是接口规范的定义:
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();
}
}
输出结果:
以上就是输入信息与保存的简单案例。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)