Java 文件存储的简单的学生管理系统

​ 上次写的学生管理系统,在后续查看时发现几处逻辑上的错误,并且在程序关闭后程序内的数据就会消失,此次利用文件对数据进行存储,具体详解在代码注释中。

​ zMain类是一个测试类,主要用于合理的组合调用其他类中已实现的方法,对功能的整合。

import java.io.IOException;
import java.util.Scanner;
//合理的组合调用其他类中已实现的方法
public class zMain {
    public static void main(String[] args) throws IOException {
        boolean s1=true;
        Plan plan = new Plan();
        plan.newFile01();
        Scanner scanner = new Scanner(System.in);
        while (s1){
            plan.menu();
            switch (scanner.nextInt()){
                case 1:plan.add();
                break;
                case 2:plan.remove01();
                break;
                case 3:plan.set01();
                break;
                case 4:plan.get01();
                break;
                case 5:s1=false;
                break;
            }
        }
    }
}

​ 定义一个student类,封装的一个体现,用来声明学生的属性。

/*
   封装:该藏藏,该露露(外界访问必须提供类内提供的接口进行)
   1、提高程序的安全性,保护数据
   2、隐藏代码的实现细节
   3、统一接口
   4、增加了系统的可维护性
*/
public class Student {
    private String name;//姓名
    private String id;//学号
    private String sex;//性别
    private String age;//年龄

    /*
    1.由于这些属性都是私有的因此,我们需要提供一些可以操作这些属性的方法
    2.外界访问由get/set提供的接口进行访问
    3.get/set快捷:Alt+Insert
     */

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

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

    @Override
    //对 toString()方法进行重写方便后续数据的输出
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

​ 定义一个Plan类,类中是集合的实现和功能方法块的实现。

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
//在此处用到集合的允许不同类型的数据共同存放以及集合的增、删、改、查的功能
public class Plan {
    Scanner scanner=new Scanner(System.in);

    //磁盘路径
    String fileName="F:\\学生管理系统.txt";

    //在F盘中创建一个文件(可改为其他盘)
    public void newFile01() throws IOException {
        File file=new File(fileName);
        boolean exists = file.exists();//判断文件是否存在
        if (exists){//存在不创建文件
        }else {//不存在
            file.createNewFile();
        }
    }


    //add()方法用来从键盘中收集数据并存放于集合中(增)
    public void add() throws IOException {
        ArrayList<Student> aList=new ArrayList();
        //把文件中的数据导入集合中
        redFile(fileName,aList);

        Student student=new Student();
        System.out.println("请输入姓名:");
        student.setName(scanner.next());
        System.out.println("请输入学号:");
        student.setId(scanner.next());
        System.out.println("请输入性别:");
        student.setSex(scanner.next());
        System.out.println("请输入年龄:");
        student.setAge(scanner.next());
        //把student中的数据存放到集合中
        aList.add(student);

        //把集合中的数据输出到文件中
        writeFile(fileName,aList);
    }

    //按照学号删除学生的信息(删)
    public void remove01() throws IOException {
        ArrayList<Student> aList=new ArrayList();
        //把文件中的数据导入集合中
        redFile(fileName,aList);

        if (aList.size() == 0) {
            System.out.println("您还没有录入学生信息");
        } else {
            int temp=0;
            System.out.println("请输入要删除学生的学号:");
            String id=scanner.next();
            //利用for循环遍历出aList集合中的ID属性,再由if语句进行判断是否存在该学生
            for (int i=0;i<aList.size();i++) {
                if (aList.get(i).getId().equals(id)){
                    aList.remove(i);//按下标删除
                    //把集合中的数据输出到文件中
                    writeFile(fileName,aList);
                    System.out.println("删除成功!");
                    temp=1;
                    break;
                }
                }
            if (temp==0){
                System.out.println("此学生的信息尚未录入!");
            }
        }
    }

    //按照学号更改学生信息
    public void set01() throws IOException {
        ArrayList<Student> aList=new ArrayList();
        //把文件中的数据导入集合中
        redFile(fileName,aList);

        if (aList.size()==0){
            System.out.println("您还没有录入学生信息");
        }else{
            System.out.println("请输入要修改学生的学号:");
            String id=scanner.nextLine();
            int n=0;
            for (Student temp:aList){
                if (temp.getId().equals(id)){
                    set02(temp);
                    System.out.println("修改完成!");
                    n=1;
                }
                }
            if (n==0){
                System.out.println("此学生的信息尚未录入!");
            }
        }
        //把集合中的数据输出到文件中
        writeFile(fileName,aList);
    }

    public void set02(Student student){
        System.out.println("请选择你要修改的信息!");
        System.out.println("1.姓名");
        System.out.println("2.学号");
        System.out.println("3.性别");
        System.out.println("4.年龄");
        switch (scanner.nextInt()){
            case 1:
                System.out.println("请输入修改后的姓名:");
                student.setName(scanner.next());
                break;
            case 2:
                System.out.println("请输入修改后的学号:");
                student.setId(scanner.nextLine());
                break;
            case 3:
                System.out.println("请输入修改后的性别:");
                student.setSex(scanner.next());
                break;
            case 4:
                System.out.println("请输入年龄:");
                student.setAge(scanner.nextLine());
                break;
        }
        menu();
    }

    //显示所有的学生信息(查)
    public void get01() throws IOException {
       ArrayList<Student> aList=new ArrayList();
        //把文件中的数据导入集合中
        redFile(fileName,aList);
        if (aList.size()==0){
            System.out.println("您还没有录入学生信息");
        }else{
            for (Student temp:aList){
                System.out.println(temp.toString());
            }
        }
        //把集合中的数据输出到文件中
        //writeFile(fileName,aList);

    }

    //把文件中的数据导入ArrayList集合中
    public static void redFile(String fileName,ArrayList<Student> arrayList) throws IOException {
        //创建一个输入(字符流)对象
        FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        //利用while循环把文件中的所数据都导入到集合中
        String temp="0";
        while ((temp=bufferedReader.readLine())!=null){
            Student student=new Student();//每一次都需要一个新的student来生成新的集合属性
            //创建一个数组临时文件中的数据,方便存入到集合中
            String[] arry = temp.split(",");       //temp.split(",");原字符串在“,”处进行分割成子字符串
            student.setName(arry[0]);
            student.setId(arry[1]);
            student.setSex(arry[2]);
            student.setAge(arry[3]);


            arrayList.add(student);
        }
        //关闭输入IO流
        bufferedReader.close();
    }

    //把ArrayList集合中的数据输出到文件中
    public void writeFile(String fileName,ArrayList<Student> arrayList) throws IOException {
        //创建一个输出(字符流)对象
        FileWriter fileWriter = new FileWriter(fileName);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
      //  ArrayList<Student> aList =arrayList;
        Student student;
        for (int i = 0; i < arrayList.size(); i++) {
            student=arrayList.get(i);
            //利用StringBuilder类中的append方法把集合中的数据进行特定的连接为一个数组
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.
                    append(student.getName()).
                    append(",").
                    append(student.getId()).
                    append(",").
                    append(student.getSex()).
                    append(",").
                    append(student.getAge());

            bufferedWriter.write(stringBuilder.toString());
            bufferedWriter.newLine();       //创建新行
            bufferedWriter.flush();         //关闭缓冲
        }
        //关闭输出IO流
        bufferedWriter.close();
    }

    //菜单
    public void menu(){
        System.out.println("请选择您的操作!");
        System.out.println("1.录入学生信息");
        System.out.println("2.删除学生信息");
        System.out.println("3.更改学生信息");
        System.out.println("4.查看学生信息");
        System.out.println("5.退出");
    }

}
  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值