史上最强学生管理系统之IO版
既上一博发布的ArrayList版本之后,新一版的IO版又来了,其实只是在上一个版本里面添加了IO流的内容,将存入更改的信息更新到了文件中而已,这个版本网上仍然很多,本人只是在某些方面稍加修改,因为自己刚学的时候也参考了最基础的版本,觉得在某些方面还有些不足(当然本人写的仍然还有很多不足之处啦哈哈^_^),这里也贴出自己的代码,说几年自己的劳动成功也好,说为了让更多新人作为参考也罢,大牛勿喷,不足之处欢迎大家指正。
这个版本的话个人建议还是先自己创建一个文本文件(也是本人一开始写的时候的一个不足之处,很简单的一两行代码可以搞定),否则第一次查询的时候会出现找不到异常,其实可以在findStudent(destFileName)方法体内创建一个BufferedWriter对象,其中调用的是FileWriter带两个参数的构造方法,将续写功能开启( 本人还没试过,理论上应该可以避免这个异常,欢迎有心人告知一下谢谢)
主类:
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.FileReader; 4 import java.io.FileWriter; 5 import java.io.IOException; 6 import java.util.ArrayList; 7 import java.util.Scanner; 8 9 10 public class BestStuManagerIO { 11 public static void main(String[] args) throws IOException { 12 Scanner scanner = new Scanner(System.in); 13 String destFileName = "student.txt"; 14 15 while (true) {// 为的是每次操作之后都能回到这个页面 16 System.out.println("********欢迎使用学生管理系统********"); 17 System.out.println("请选择您要进行的操作:1.查询 2.添加 3.修改 4.删除 5.退出"); 18 String choiceNum = scanner.nextLine(); 19 switch (choiceNum) { 20 case "1": 21 // 查询学生信息 22 findStudent(destFileName); 23 break; 24 case "2": 25 // 添加学生信息 26 addStudent(destFileName); 27 break; 28 case "3": 29 // 修改学生信息 30 updateStudent(destFileName); 31 break; 32 case "4": 33 // 删除学生信息 34 deleteStudent(destFileName); 35 break; 36 case "5": 37 // 退出 38 // 因为选择退出跟选择除了1234是一样的,所以用case穿透 39 default: 40 System.out.println("谢谢您的使用,再见!"); 41 System.exit(0);// 退出系统,同时也退出了整个while无限循环 42 break; 43 } 44 } 45 } 46 47 /** 48 * 将集合中的数据写入到文本中 49 * 50 * @param list 51 * @param destFileName 52 * @throws IOException 53 */ 54 private static void arrayList2File(ArrayList<Student> list, String destFileName) throws IOException { 55 // 创建输出缓冲流对象 56 BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName)); 57 BufferedReader br = new BufferedReader(new FileReader(destFileName)); 58 if (br.readLine() == null) { 59 // System.out.println("学号\t\t姓名\t年龄\t居住地"); 60 bw.write("学号\t姓名\t年龄\t居住地"); 61 bw.newLine(); 62 bw.flush(); 63 } 64 65 for (int x = 0; x < list.size(); x++) { 66 Student s = list.get(x); 67 StringBuilder sb = new StringBuilder(); 68 sb.append(s.getSid()).append(" ").append(s.getName()).append(" ").append(s.getAge()).append(" ") 69 .append(s.getAddress()); 70 71 bw.write(sb.toString()); 72 bw.newLine(); 73 bw.flush(); 74 } 75 76 bw.close(); 77 } 78 79 /** 80 * 从文件中读取数据到集合中 81 * 82 * @param list 83 * 接受文件数据的集合 84 * @param srcFileName 85 * 文件名 86 * @throws IOException 87 */ 88 private static void StudentFile2Array(ArrayList<Student> list, String srcFileName) throws IOException { 89 // 创建输入缓冲流对象 90 BufferedReader br = new BufferedReader(new FileReader(srcFileName)); 91 92 String blank = br.readLine();//这行代码用于吸收文本文件中的第一行,因为第一行写的是标题,不应该出现在下面的循环中 93 String line; 94 while ((line = br.readLine()) != null) { 95 String[] datas = line.split(" "); 96 Student s = new Student(); 97 s.setSid(datas[0]); 98 s.setName(datas[1]); 99 s.setAge(datas[2]); 100 s.setAddress(datas[3]); 101 list.add(s); 102 } 103 104 br.close(); 105 } 106 107 /** 108 * 这是删除学生的方法 109 * 110 * @param array 111 * @throws IOException 112 */ 113 public static void deleteStudent(String destFileName) throws IOException { 114 ArrayList<Student> array = new ArrayList<Student>(); 115 StudentFile2Array(array, destFileName); 116 Scanner scanner = new Scanner(System.in); 117 boolean flag = true; 118 119 while (flag) { 120 System.out.println("请输入你想删除信息学生的学号"); 121 String id = scanner.nextLine(); 122 123 // 这里需要讨论到底有没有输入的这个学号的这个学生 124 125 int index = -1;// 定义变量index为-1 126 for (int i = 0; i < array.size(); i++) { 127 Student stu = array.get(i); 128 if (id.equals(stu.getSid())) {// 如果输入的id跟集合中学生的id有一样的,那么把这个学生的id赋值给index 129 index = i; 130 break; 131 } 132 } 133 if (index != -1) {// 如果不等于-1,说明进去过上面的判断条件,也就是有输入的id的学生,所以我们修改这个学生的信息就行了 134 System.out.println("有你需要的学生信息,请问是否确认删除? 1.(是) 2.(否,重新选择操作) 其他.(退出)"); 135 String choice = scanner.nextLine(); 136 if (choice.equals("1")) { 137 array.remove(index); 138 arrayList2File(array, destFileName); 139 System.out.println("学生信息删除成功"); 140 } else if (choice.equals("2")) { 141 return; 142 } else { 143 System.out.println("谢谢使用,再见"); 144 System.exit(0); 145 } 146 flag = false; 147 } else { 148 System.out.println("您想删除信息的学生不存在,您可以选择:1.(重新输入) 2.(重新选择操作) 其他:(退出系统)"); 149 String choice = scanner.nextLine(); 150 if (choice.equals("1")) { 151 152 } else if (choice.equals("2")) { 153 return; 154 } else { 155 System.out.println("谢谢使用,再见"); 156 System.exit(0); 157 } 158 } 159 } 160 161 } 162 163 /** 164 * 这是修改集合内学生信息的方法 165 * 166 * @param array 167 * @throws IOException 168 */ 169 public static void updateStudent(String destFileName) throws IOException { 170 // 创建集合对象 171 ArrayList<Student> array = new ArrayList<Student>(); 172 // 从文件中把数据读取到集合中 173 StudentFile2Array(array, destFileName); 174 Scanner scanner = new Scanner(System.in); 175 boolean flag = true; 176 177 while (flag) { 178 System.out.println("请输入你想修改信息学生的学号"); 179 String id = scanner.nextLine(); 180 181 // 这里需要讨论到底有没有输入的这个学号的这个学生 182 183 int index = -1;// 定义变量index为-1 184 for (int i = 0; i < array.size(); i++) { 185 Student stu = array.get(i); 186 if (id.equals(stu.getSid())) {// 如果输入的id跟集合中学生的id有一样的,那么把这个学生的id赋值给index 187 index = i; 188 break; 189 } 190 } 191 if (index != -1) {// 如果不等于-1,说明进去过上面的判断条件,也就是有输入的id的学生,所以我们修改这个学生的信息就行了 192 System.out.println("有你查找的学生信息,请问需要修改哪一项:1.(全部) 2.(姓名) 3.(年龄) 4.(居住地) 5.(放弃修改,重新选择操作) 6.(退出)"); 193 String choice = scanner.nextLine(); 194 if (choice.equals("1")) { 195 Student sNew = new Student(); 196 System.out.println("请输入学生姓名"); 197 String name = scanner.nextLine(); 198 System.out.println("请输入学生年龄"); 199 String age = scanner.nextLine(); 200 System.out.println("请输入学生居住地 "); 201 String address = scanner.nextLine(); 202 sNew.setSid(id); 203 sNew.setName(name); 204 sNew.setAge(age); 205 sNew.setAddress(address); 206 array.set(index, sNew); 207 arrayList2File(array, destFileName); 208 System.out.println("学生信息全部更新成功"); 209 } else if (choice.equals("2")) { 210 Student s = array.get(index); 211 System.out.println("请输入修改后的姓名"); 212 String name = scanner.nextLine(); 213 s.setName(name); 214 arrayList2File(array, destFileName); 215 System.out.println("学生姓名信息更新成功"); 216 } else if (choice.equals("3")) { 217 Student s = array.get(index); 218 System.out.println("请输入修改后的年龄"); 219 String age = scanner.nextLine(); 220 s.setAge(age); 221 arrayList2File(array, destFileName); 222 System.out.println("学生年龄信息更新成功"); 223 } else if (choice.equals("4")) { 224 Student s = array.get(index); 225 System.out.println("请输入修改后的居住地"); 226 String address = scanner.nextLine(); 227 s.setAddress(address); 228 arrayList2File(array, destFileName); 229 System.out.println("学生居住地信息更新成功"); 230 } else if (choice.equals("5")) { 231 return; 232 } else { 233 System.out.println("谢谢使用,再见"); 234 System.exit(0); 235 } 236 flag = false; 237 } else { 238 System.out.println("您想修改的学生不存在,您可以选择:1.(重新输入) 2.(重新选择操作) 其他:(退出系统)"); 239 String choice = scanner.nextLine(); 240 if (choice.equals("1")) { 241 242 } else if (choice.equals("2")) { 243 return; 244 } else { 245 System.out.println("谢谢使用,再见"); 246 System.exit(0); 247 } 248 } 249 } 250 } 251 252 /** 253 * 这是查询所有学生信息的方法 254 * 255 * @param array 256 * 需要被查询的学生信息的集合 257 * @throws IOException 258 */ 259 public static void findStudent(String destFileName) throws IOException { 260 Scanner scanner = new Scanner(System.in); 261 ArrayList<Student> array = new ArrayList<Student>(); 262 StudentFile2Array(array, destFileName); 263 // 如果现在没有录入学生信息 264 if (array.size() <= 0) { 265 System.out.println("现在还没有学生信息,您可以选择:1.(重新选择操作) 其他.(退出系统)"); 266 String choice = scanner.nextLine(); 267 if (choice.equals("1")) { 268 return; 269 } else { 270 System.out.println("谢谢使用,再见"); 271 System.exit(0); 272 } 273 } 274 275 System.out.println("学号\t姓名\t年龄\t居住地"); 276 for (int i = 0; i < array.size(); i++) { 277 Student stu = array.get(i); 278 System.out.println(stu.getSid() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress()); 279 280 } 281 } 282 283 /** 284 * 这是向ArrayList集合中添加学生的方法 285 * 286 * @param array 287 * 需要被操作的ArrayList集合 288 * @throws IOException 289 */ 290 public static void addStudent(String destFileName) throws IOException { 291 ArrayList<Student> array = new ArrayList<Student>(); 292 StudentFile2Array(array, destFileName); 293 Student stu = new Student(); 294 Scanner scanner = new Scanner(System.in); 295 String id; 296 while (true) { 297 boolean flag = false;// 定义flag标记学号是否冲突 298 System.out.println("请输入学生学号:"); 299 id = scanner.nextLine(); 300 for (int i = 0; i < array.size(); i++) { 301 if (id.equals(array.get(i).getSid())) { 302 System.out.println("您添加的学号已经存在,您可以选择:1.(重新输入学号) 2.(重新选择操作) 其他.(退出系统)"); 303 String choice = scanner.nextLine(); 304 if (choice.equals("1")) { 305 flag = true; 306 break; 307 } else if (choice.equals("2")) { 308 return; 309 } else { 310 System.out.println("谢谢使用,再见"); 311 System.exit(0); 312 } 313 } 314 } 315 if (flag == false) { 316 break; 317 } 318 } 319 System.out.println("请输入学生姓名:"); 320 String name = scanner.nextLine(); 321 System.out.println("请输入学生年龄:"); 322 String age = scanner.nextLine(); 323 System.out.println("请输入学生居住地:"); 324 String address = scanner.nextLine(); 325 stu.setSid(id); 326 stu.setName(name); 327 stu.setAge(age); 328 stu.setAddress(address); 329 array.add(stu); 330 arrayList2File(array, destFileName); 331 System.out.println("添加学生信息成功"); 332 } 333 }
学生类:
1 public class Student { 2 private String sid; 3 private String name; 4 private String age; 5 private String address; 6 7 public Student() { 8 super(); 9 } 10 11 public Student(String sid, String name, String age, String address) { 12 super(); 13 this.sid = sid; 14 this.name = name; 15 this.age = age; 16 this.address = address; 17 } 18 19 public String getSid() { 20 return sid; 21 } 22 23 public void setSid(String sid) { 24 this.sid = sid; 25 } 26 27 public String getName() { 28 return name; 29 } 30 31 public void setName(String name) { 32 this.name = name; 33 } 34 35 public String getAge() { 36 return age; 37 } 38 39 public void setAge(String age) { 40 this.age = age; 41 } 42 43 public String getAddress() { 44 return address; 45 } 46 47 public void setAddress(String address) { 48 this.address = address; 49 } 50 51 52 }