java使用链表写一个简单的控制台学生管理系统
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);
}
}