黑马程序员技术交流社区

标题: 关于IO版学生管理系统的个人思路浅谈 [打印本页]

作者: 鱼大仙    时间: 2019-3-29 13:39
标题: 关于IO版学生管理系统的个人思路浅谈
本帖最后由 鱼大仙 于 2019-3-29 13:41 编辑

我这里的这个IO版的学生管理系统,这个系统一共就只有5个功能:1 .查看学生 2. 添加学生 3. 修改学生 4. 删除学生 5. 退出
先谈一下思路:
1.查看学生:
   查看学生的功能很好实现,只用将.txt文件中的数据读取到集合当中,然后以特定的格式遍历集合就可以达成我们想要的功能;
2.添加学生:
     添加学生首先我们要先将.txt中的所有学生信息读取到集合中,然后新建一个学生对象,先创建一个学生类,包括学生的学号.姓名.年龄.居住地等信息,(注意,之所以要先读取文档中的学生对象,是要在输入新建学生信息时,进行判断是否有重复学号的信息)这些没什么好说的,然后就直接创建学生对象,将具体的学生的信息添加到学生对象后,将对象储存入集合当中(注意,此处是直接将各种学生信息封装进了学生对象然后将对象储存进入集合),之后再将集合中的元素写入文档;
3.修改学生:
     修改学生其实功能很好实现,通过将文本中储存的学生信息读取到集合中,然后获取集合中的元素,判断一下如果有和用户输入的学号相同的对象,那么我们就直接删除这个对象然后重新输入信息,,添加对象在储存进集合,再将集合写入文本即可;
4.删除学生;
    删除学生的功能和修改学生很类似,我们只需要将文本中的信息读取到集合中,然后获取集合对象,与用户输入的学号进行比对,如果是相同的那么久删除这个对象,再将剩下的集合元素写入文本即可;
5.退出:
   退出功能我们这里使用的是System.out.println("谢谢你的使用");
------------------------------------------------------------------------我是华丽的分割线-------------------------------------------------------------------------------
从上面的方法中我们不难看出,这个学生管理系统的主要的部分就是三部分:1.作为中转储存媒介的集合对象2.将文本中的信息读取到集合中 3.将集合中的元素写入到文本当中
1.集合对象没什么好说的,直接进行创建然后作各方法参数就行,先说一下将文本中储存的信息读取到集合的方法:
这个方法没什么卡点,就普通的创建BufferedReader对象,然后判断一下读取条件就行,代码如下:
public static void readData(String fileName, ArrayList<Student> one) throws IOException {//此方法为将文本中保存的数据读取到集合中
BufferedReader br = new BufferedReader(new FileReader(fileName));
    String a;
    while ((a = br.readLine()) != null) {//此处判断条件是如果读取的下一行数据不为空就继续执行;
        String[] b = a.split(",");
        Student c = new Student();
        c.setId(b[0]);
        c.setName(b[1]);
        c.setAge(b[2]);
        c.setAddress(b[3]);
        one.add(c);
    }
    br.lines();//此处不要忘记换行操作
    br.close();//此处不要忘记释放系统资源
}2.下面我们说一下将集合中的元素写入文本的方法:这个方法同样也很简单,遍历集合,然后通过StringBuilder的对象调用.append()实现学生信息的固定格式,然后转换成字符串,直接写入文本,集体代码如下:public static void writeData(String fileName, ArrayList<Student> one) throws IOException {//此为将数据从集合中写入文本中
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
    for (int i = 0; i < one.size(); i++) {
        Student a = one.get(i);
        StringBuilder sb = new StringBuilder();
        sb.append(a.getId()).append(",").append(a.getName()).append(",").append(a.getAge()).append(",").append(a.getAddress());
        bw.write(sb.toString());
        bw.newLine();
        bw.flush();
    }
    bw.close();
}  接下来剩下可能会卡点的地方应该就是添加学生那一块了,因为我们在添加学生对象之前要先进行判断文本中是否已经有了同样的学号信息,如果有那么我们就要提示已存在,重新输入那么我们这里引入一个小逻辑,就是在遍历比较之前,先创建一个boolean变量,如果满足条件,那么我们就改变这个变量的值具体体现如下:public static void addStudent(String fileName) throws IOException {//此为添加学生的方法
ArrayList<Student> one = new ArrayList<>();
    readData(fileName, one);//这里是调用了读取数据的方法; BufferedWriter bw = new BufferedWriter(new FileWriter(fileName, true));
    Scanner sc = new Scanner(System.in);
    String id;
    while (true) {
        System.out.println("请输入学号");
        id = sc.nextLine();
        boolean flag = false;
        for (int i = 0; i < one.size(); i++) {
            Student a = one.get(i);
            if (a.getId().equals(id)) {
                flag = true;//此处如果相同改变布尔值,以便于下面进行输出语句的书写;
                break;
            }
        }
        if (flag) {
            System.out.println("您输入的学号已被占用,请重试");
        } else {
            break;
        }
    }
    System.out.println("请输入姓名");//此后都是添加对象属性和添加集合对象的方法没什么好说的;
    String s = sc.nextLine();
    System.out.println("请输入居住地");
    String s3 = sc.nextLine();
    System.out.println("请输入年龄");
    String s2 = sc.nextLine();
    System.out.println("++++++++++++++++++++");
    Student a = new Student();
    a.setId(id);
    a.setName(s);
    a.setAge(s2);
    a.setAddress(s3);
    one.add(a);
    writeData(fileName, one);
}后面基本就没什么难点了.就是要明确几个点:1.这个方法的主体思路是以集合为中转站,文本和元素的输出使用为中转两端,所以是先创建从文本中读数据到集合和将集合中元素写入文本的方法2.这个系统各方法之间的参数是文件名变量,集合是各方法自己创建的,不用作为对象,3.优先创建的集合-->文本写入方法和文本-->集合方法有两个参数,一个是集合,一个是文本名,因为各方法只需要执行操作即可,所以不需要返回值;本系统具体的所有程序代码如下:------------------------------------------------------------------------我是华丽的分割线---------------------------------------------------------------------学生对象:package cn.itcast.demo01.bao1.work1;

public class Student {
    private String name;
    private String id;
    private String age;
    private String address;

    public Student() {
    }

    public Student(String name, String id, String age, String address) {
        this.name = name;
        this.id = id;
        this.age = age;
        this.address = address;
    }

    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 getAge() {
        return age;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
----------------------------------------------------------------------------我是华丽的分割线-----------------------------------------------------------------------------------学生系统代码如下:package cn.itcast.demo01.bao1.work1;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class StudentsManager {

    public static void main(String[] args) throws IOException {
        ArrayList<Student> array = new ArrayList<>();
        String fileName = "ab.txt";
        while (true) {
            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("请输入你的选择");
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();
            switch (s) {
                case "1":
                    findAllStudent(fileName);
                    break;
                case "2":
                    addStudent(fileName);
                    break;
                case "3":
                    removeStudent(fileName);
                    break;
                case "4":
                    changeStudent(fileName);
                    break;
                case "5":
                    fault:
                    System.out.println("谢谢你的使用");
                    System.exit(0);
                    break;
            }
        }
    }

    public static void changeStudent(String fileName) throws IOException {//修改学生方法
ArrayList<Student> one = new ArrayList<>();
        readData(fileName, one);
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要修改的学生学号");
        String num = sc.nextLine();
        Student a = new Student();
        boolean flag1 = false;
        for (int i = 0; i < one.size(); i++) {
            a = one.get(i);
            if (num.equals(a.getId())) {
                one.remove(a);
                String id;
                while (true) {
                    System.out.println("请输入学号");
                    id = sc.nextLine();
                    boolean flag = false;
                    for (int ii = 0; ii < one.size(); ii++) {
                        Student b = one.get(ii);
                        if (b.getId().equals(id)) {
                            flag = true;
                            break;
                        }
                    }
                    if (flag) {
                        System.out.println("您输入的学号已被占用,请重试");
                    } else {
                        break;
                    }
                }
                System.out.println("请输入姓名");
                String s = sc.nextLine();
                System.out.println("请输入居住地");
                String s3 = sc.nextLine();
                System.out.println("请输入年龄");
                String s2 = sc.nextLine();
                System.out.println("++++++++++++++++++++");
                Student b = new Student();
                b.setId(id);
                b.setName(s);
                b.setAge(s2);
                b.setAddress(s3);
                one.add(b);
                writeData(fileName, one);
                System.out.println("修改学生成功");
                flag1=true;
                break;
            }
            }
        if (!flag1){
            System.out.println("查无此人");
        }
        }



    public static void writeData(String fileName, ArrayList<Student> one) throws IOException {//此为将数据从集合中写入文本中
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
        for (int i = 0; i < one.size(); i++) {
            Student a = one.get(i);
            StringBuilder sb = new StringBuilder();
            sb.append(a.getId()).append(",").append(a.getName()).append(",").append(a.getAge()).append(",").append(a.getAddress());
            bw.write(sb.toString());
            bw.newLine();
            bw.flush();
        }
        bw.close();
    }

    public static void removeStudent(String fileName) throws IOException {//此为删除学生的方法
Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要删除学生的学号");
        String num = sc.nextLine();
        ArrayList<Student> one = new ArrayList<>();
        readData(fileName, one);
        Student a = new Student();
        boolean flag = false;
        for (int i = 0; i < one.size(); i++) {
            a = one.get(i);
            if (num.equals(a.getId())) {
                one.remove(a);
                System.out.println("删除学生成功");
                flag=true;
                break;
            }
        }
        if (!flag){
            System.out.println("查无此人");
        }
        writeData(fileName, one);
    }


    public static void readData(String fileName, ArrayList<Student> one) throws IOException {//此方法为将文本中保存的数据读取到集合中
BufferedReader br = new BufferedReader(new FileReader(fileName));
        String a;
        while ((a = br.readLine()) != null) {
            String[] b = a.split(",");
            Student c = new Student();
            c.setId(b[0]);
            c.setName(b[1]);
            c.setAge(b[2]);
            c.setAddress(b[3]);
            one.add(c);
        }
        br.lines();
        br.close();
    }

    public static void addStudent(String fileName) throws IOException {//此为添加学生的方法
ArrayList<Student> one = new ArrayList<>();
        readData(fileName, one);
        BufferedWriter bw = new BufferedWriter(new FileWriter(fileName, true));
        Scanner sc = new Scanner(System.in);
        String id;
        while (true) {
            System.out.println("请输入学号");
            id = sc.nextLine();
            boolean flag = false;
            for (int i = 0; i < one.size(); i++) {
                Student a = one.get(i);
                if (a.getId().equals(id)) {
                    flag = true;
                    break;
                }
            }
            if (flag) {
                System.out.println("您输入的学号已被占用,请重试");
            } else {
                break;
            }
        }
        System.out.println("请输入姓名");
        String s = sc.nextLine();
        System.out.println("请输入居住地");
        String s3 = sc.nextLine();
        System.out.println("请输入年龄");
        String s2 = sc.nextLine();
        System.out.println("++++++++++++++++++++");
        Student a = new Student();
        a.setId(id);
        a.setName(s);
        a.setAge(s2);
        a.setAddress(s3);
        one.add(a);
        writeData(fileName, one);
    }


    public static void findAllStudent(String fileName) throws IOException {//此为查看所有学生信息的方法
ArrayList<Student> one = new ArrayList<>();
        readData(fileName, one);
        if (one.size() == 0) {
            System.out.println("没有信息,请重新选择");
        } else {
            System.out.println("姓名" + "\t" + "学号" + "\t" + "年龄" + "\t" + "地址");
            for (int i = 0; i < one.size(); i++) {
                Student c = new Student();
                c = one.get(i);
                System.out.println(c.getName() + "\t" + c.getId() + "\t" + c.getAge() + "\t" + c.getAddress());
            }
        }
    }
}






作者: 鱼大仙    时间: 2019-3-29 13:49
好好学习,天天向上




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2