1、新建一个学生实体类,用于存放学生的各项信息
2、新建一个链表节点类,每个节点存放一个学生信息及下一个节点的引用
3、添加一个主操作类,并添加本系统的菜单方法
4、定义链表的头节点,当前最后一个节点,以及主控制逻辑信息。
5、选择1,使用io流逐行读取存有学生信息的文本文件,对每行字符串,采用\t分割后得到一个字符串数组,数据各项即为一个学生的具体信息。然后新建一个节点加入到链表。
6、如果选择2,则遍历链表中的所有节点,输出每个节点的学生信息。
7、如果选择3则根据用户从控制台输入的学生信息,初始化一个节点,添加到链表。
8、如果选择功能4,则从链表中逐个节点对比,直到找到和用户输入的学号相匹配的节点信息,删除该节点。
9、如果选择的是5,则从链表中逐行对比,直到找到和用户输入的学号相匹配的节点信息,然后将该节点信息更改为用户输入的新属性信息。
10、如果选择的是6则使用io流将当前链表中的节点学生信息,写入到文本文件中。使用\t分割学生的各项属性,每个学生一行。
11、运行结果
12、全部代码:import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Scanner;class Student { //学号 String sno; //姓名 String name; //班级 String clazz; public Student(String sno, String name, String clazz) { super(); this.sno = sno; this.name = name; this.clazz = clazz; }}/*** 链表节点*/class Node { Student stu; Node next;}public class Main { private static 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.修改学生"); System.out.println(" 6.导出学生信息到文件"); System.out.println(" 0.退出"); } public static void main(String[] args) { Node head = new Node(); Node current = head; Scanner scn = new Scanner(System.in); String cmd = ""; do { menu(); System.out.print("请输入你得选择:(0-6)"); cmd = scn.nextLine(); if (cmd.equals("1")) { System.out.print("请输入导入的文件:"); String filepath = scn.nextLine(); try { BufferedReader br = new BufferedReader( new FileReader(filepath)); String line = null; while ((line = br.readLine()) != null) { String[] stuInfos = line.split("\t"); Student s = new Student(stuInfos[0], stuInfos[1], stuInfos[2]); Node node = new Node(); node.stu = s; current.next = node; current = node; } br.close(); System.out.println("导入成功!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else if (cmd.equals("2")) { Node tmp = head.next; while (tmp != null) { Student s = tmp.stu; System.out.println(s.sno + "," + s.name + "," + s.clazz); tmp = tmp.next; } } else if (cmd.equals("3")) { System.out.print("请输入学号:"); String sno = scn.nextLine(); System.out.print("请输入姓名:"); String name = scn.nextLine(); System.out.print("请输入班级:"); String clazz = scn.nextLine(); Student s = new Student(sno, name, clazz); Node node = new Node(); node.stu = s; current.next = node; current = node; System.out.println("添加成功!"); } else if (cmd.equals("4")) { System.out.print("请输入学号:"); String sno = scn.nextLine(); Node pre = head; Node tmp = head.next; while (tmp != null && !tmp.stu.sno.equals(sno)) { pre = tmp; tmp = tmp.next; } if (tmp != null) { pre.next = tmp.next; System.out.println("删除成功!"); } } else if (cmd.equals("5")) { System.out.print("请输入学号:"); String sno = scn.nextLine(); Node tmp = head.next; while (tmp != null && !tmp.stu.sno.equals(sno)) { tmp = tmp.next; } if (tmp != null) { System.out.print("请输入姓名:"); String name = scn.nextLine(); System.out.print("请输入班级:"); String clazz = scn.nextLine(); Student s = tmp.stu; s.name = name; s.clazz = clazz; System.out.println("修改成功!"); } } else if (cmd.equals("6")) { System.out.print("请输入保存路径:"); String filepath = scn.nextLine(); try { FileWriter fw = new FileWriter(filepath); Node tmp = head.next; while (tmp != null) { Student s = tmp.stu; fw.write(s.sno + "\t" + s.name + "\t" + s.clazz + "\n"); fw.flush(); tmp = tmp.next; } fw.close(); System.out.println("导出成功!"); } catch (IOException e) { e.printStackTrace(); } } } while (!cmd.equals("0")); System.out.println("退出成功!"); scn.close(); System.exit(0); }}