public class SutdentManager {
public static void main(String[] args) throws Exception {
// 学生管理系统的主界面代码编写
// c创建集合对象
// ArrayList<Student> array = new ArrayList<Student>();
// 定义持久储存的文件路径
String fileName = "d:\\Student.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.退出");
// 键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的选择");
String number = sc.nextLine();
// 用switch语句实现选择
switch (number) {
case "1":
findallstudent(fileName);
break;
case "2":
addstudent(fileName);
break;
case "3":
deletestudent(fileName);
break;
case "4":
modifystudent(fileName);
break;
case "5":
System.out.println("(感谢您的使用,再见)");
System.exit(0);// JVM退出
break;
default:
System.out.println("(你输入的选择有误,请重新选择)");
break;
}
}
}
// 从文本文件中读取到集合
public static void readData(String filename, ArrayList<Student> array) throws Exception {
// 创建缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader(filename));
String line;
while ((line = br.readLine()) != null) {
String[] datas = line.split(",");
Student s = new Student();
s.setSnumber(datas[0]);
s.setName(datas[1]);
s.setGender(datas[2]);
s.setAge(datas[3]);
s.setAddress(datas[4]);
array.add(s);
}
br.close();
}
// 从集合中的数据写入文件
public static void writerData(String fileName, ArrayList<Student> array) throws Exception {
// 创建输出缓冲流对象
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
StringBuilder sb = new StringBuilder();
sb.append(s.getSnumber()).append("---").append(s.getName()).append("---").append(s.getGender()).append("---").append(s.getAge()).append("---").append(s.getAddress());
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
bw.close();
}
// 学生管理系统查看所有学生
public static void findallstudent(String fileName) throws Exception {
// 添加集合对象
ArrayList<Student> array = new ArrayList<Student>();
// 先从文件中把数据读取到集合中
readData(fileName, array);
// 判断集合中是否有数据,如果没有 就给出提示 不继续往下执行
if (array.size() == 0) {
System.out.println("(对不起,目前没有学生信息,请添加 谢谢)");
return;
}
// \t是一个tab键,用来加空格的
System.out.println("学号\t姓名\t性别\t年龄\t居住的");
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getSnumber() + "\t" + s.getName() + "\t" + s.getGender() + "\t" + s.getAge() + "\t"
+ s.getAddress());
}
}
// 学生管理系统的添加学生
public static void addstudent(String fileName) throws Exception {
// 添加集合对象
ArrayList<Student> array = new ArrayList<Student>();
// 先从文件中把数据读取到集合中
readData(fileName, array);
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 为了让snumber能够被访问到,定义在循环外面
String snumber;
while (true) {
System.out.println("请输入学生学号");
snumber = sc.nextLine();
// 判断学号是否被占用
// 定义一个标记
boolean flag = false;
// 遍历集合,得到每个学号
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
// 获取该学生的学号 和键盘录入的进行比较
if (s.getSnumber().equalsIgnoreCase(snumber)) {
flag = true;
break;
}
}
if (flag) {
System.out.println("(您输入的学号已被占用,请重新输入)");
} else {
break;
}
}
System.out.println("请输入学生姓名");
String name = sc.nextLine();
System.out.println("请输入学生性别");
String gender = sc.nextLine();
System.out.println("请输入学生年龄");
String age = sc.nextLine();
System.out.println("请输入学生居住的");
String address = sc.nextLine();
// 创建学生对象
Student s = new Student();
s.setSnumber(snumber);
s.setName(name);
s.setGender(gender);
s.setAge(age);
s.setAddress(address);
// 对象添加到集合
array.add(s);
// 把数据中的集合重新写回到文件
writerData(fileName, array);
// 给出提示
System.out.println("(添加学生成功)");
}
// 学生管理系统的删除学生
public static void deletestudent(String fileName) throws Exception {
// 添加集合对象
ArrayList<Student> array = new ArrayList<Student>();
// 先从文件中把数据读取到集合中
readData(fileName, array);
// 删除学生的思路:键盘录入一个学号 到集合中去查找 看是否有学生使用,如果有就删除
// 键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("(请输入你要删除学生的学号)");
String snumber = sc.nextLine();
// 定义一个索引
int index = -1;
// 遍历集合
for (int i = 0; i < array.size(); i++) {
// 获取到集合中的每一个对象
Student s = array.get(i);
// 拿录入的学号和集合中的学好进行比较
if (s.getSnumber().equalsIgnoreCase(snumber)) {
index = i;
break;
}
}
if (index == -1) {
System.out.println("(对不起,您输入的学号不存在,请重新输入)");
} else {
array.remove(index);
// 把数据中的集合重新写回到文件
writerData(fileName, array);
System.out.println("(删除成功)");
}
}
// 修改学生
public static void modifystudent(String fileName) throws Exception {
// 添加集合对象
ArrayList<Student> array = new ArrayList<Student>();
// 先从文件中把数据读取到集合中
readData(fileName, array);
// 修改学生思路:键盘录入学号,到集合中查找是否存在,如果有就修改
// 创建键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("(请输入要修改的学生学号)");
String snumber = sc.nextLine();
// 定义一个索引
int index = -1;
// 遍历集合
for (int i = 0; i < array.size(); i++) {
// 获取每一个对象
Student s = array.get(i);
// 和录入的进行比较
if (s.getSnumber().equalsIgnoreCase(snumber)) {
index = i;
break;
}
}
if (index == -1) {
System.out.println("(您要修改的学生信息不存在,,请重新输入)");
} else {
System.out.println("请输入新学生姓名");
String name = sc.nextLine();
System.out.println("请输入新学生性别");
String gender = sc.nextLine();
System.out.println("请输入新学生年龄");
String age = sc.nextLine();
System.out.println("请输入新学生居住的");
String address = sc.nextLine();
// 创建学生对象
Student s = new Student();
s.setSnumber(snumber);
s.setName(name);
s.setGender(gender);
s.setAge(age);
s.setAddress(address);
// 对应集合
array.set(index, s);
// 把数据中的集合重新写回到文件
writerData(fileName, array);
// 结果
System.out.println("(修改成功)");
}
}
}
报错的:
线程“main”java.lang.ArrayIndexOutOfBoundsException中出现异常异常:1
位于com.lms.SutdentManager.readData(SutdentManager.java:80)
位于com.lms.SutdentManager.findallstudent(SutdentManager.java:116)
位于com.lms.SutdentManager.main(SutdentManager.java:46)
原文中的行数,文章的报错行数是24 58 94
选择哪个 那个的输入 输出 和 读取文件的set方法就报错