史上最强学生管理系统之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 }

 

posted on 2017-11-20 23:13  程序猿伊桑  阅读(656)  评论(0编辑  收藏  举报

导航