老王悄悄给的文件读写题目 登陆+学生管理系统+文件读写
【管理员登录界面】
-------------------主界面-----------------
1,用户注册
2,用户登录
请输入操作指令:
输入1: 输入用户名和密码,把用户名和密码保存到user.txt文件中
如果用户名重复,则提示用户名重复
输入2: 输入用户名和密码,查找user.txt文件中是否有对应的用户
如果有就登录成功,进入学生管理系统界面。否则登录失败。
【学生管理系统界面】
------------------------学生成绩管理系统菜单---------------------
1添加 2查询 3修改 4删除 5娱乐一下 6统计 7退出
请输入指令:
学生管理系统各部分功能如下
1. 键盘录入添加一个学生信息
2. 显示所有的学生信息在控制台
3. 根据学号删除修改学生信息
4. 根据学号删除学生
5. 从所有学生信息中挑选一个学生人该学生唱歌,歌曲从另一个《歌曲清单.txt》文件中随机挑一个。
6. 统计各个分数段学生的人数
提前准备好:user.ccsoft存储登陆账号信息,stu.ccsoft存储学生信息,歌曲清单.ccsoft存储歌曲信息.
1.创建一个Student类
1 public class Student /* extends User*/{ 2 private String name; 3 private String num; 4 private double score; 5 //空参构造 6 7 public Student() { 8 } 9 10 //全参构造 11 12 public Student(String name, String num, double score) { 13 this.name = name; 14 this.num = num; 15 this.score = score; 16 } 17 18 //getter and Setter 19 20 public String getName() { 21 return name; 22 } 23 24 public void setName(String name) { 25 this.name = name; 26 } 27 28 public String getNum() { 29 return num; 30 } 31 32 public void setNum(String num) { 33 this.num = num; 34 } 35 36 public double getScore() { 37 return score; 38 } 39 40 public void setScore(double score) { 41 this.score = score; 42 } 43 44 //toString 45 46 @Override 47 public String toString() { 48 return "Student{" + 49 "name='" + name + '\'' + 50 ", num='" + num + '\'' + 51 ", score='" + score + '\'' + 52 '}'; 53 } 54 }
2.创建一个User类
1 public class User { 2 private String usesrname; 3 private String passwd; 4 5 public User() { 6 } 7 8 public User(String usesrname, String passwd) { 9 this.usesrname = usesrname; 10 this.passwd = passwd; 11 } 12 13 public String getUsesrname() { 14 return usesrname; 15 } 16 17 public void setUsesrname(String usesrname) { 18 this.usesrname = usesrname; 19 } 20 21 public String getPasswd() { 22 return passwd; 23 } 24 25 public void setPasswd(String passwd) { 26 this.passwd = passwd; 27 } 28 29 @Override 30 public String toString() { 31 return "User{" + 32 "usesrname='" + usesrname + '\'' + 33 ", passwd='" + passwd + '\'' + 34 '}'; 35 } 36 }
3.创建一个测试类
1 import java.io.*; 2 import java.util.ArrayList; 3 import java.util.Random; 4 import java.util.Scanner; 5 6 7 /* 8 * 9 10 输入1: 输入用户名和密码,把用户名和密码保存到user.txt文件中 11 如果用户名重复,则提示用户名重复 12 13 输入2: 输入用户名和密码,查找user.txt文件中是否有对应的用户 14 如果有就登录成功,进入学生管理系统界面。否则登录失败。 15 16 17 【学生管理系统界面】 18 ------------------------学生成绩管理系统菜单--------------------- 19 1添加 2查询 3修改 4删除 5娱乐一下 6统计 7退出 20 请输入指令: 21 22 学生管理系统各部分功能如下 23 1. 键盘录入添加一个学生信息 24 2. 显示所有的学生信息在控制台 25 3. 根据学号删除修改学生信息 26 4. 根据学号删除学生 27 5. 从所有学生信息中挑选一个学生人该学生唱歌,歌曲从另一个《歌曲清单.ccsoft》文件中随机挑一个。 28 6. 统计各个分数段学生的人数 29 30 学生具备的属性 :姓名 / 学号 /成绩 31 * */ 32 public class StuManageSystem { 33 public static void main(String[] args) throws IOException { 34 35 36 boolean flag = false; 37 Scanner sc = new Scanner(System.in); 38 while (true){ 39 //showMainMenu();显示主目录 40 showMainMenu(); 41 int inputNum = sc.nextInt(); 42 if (inputNum==1){ 43 //userRegister();用户注册 44 userRegister(); 45 } 46 else if(inputNum==2){ 47 //boolean returnflag = userLogin();用户登陆 48 flag=userLogin(); 49 if(flag==true){ 50 System.out.println("登陆成功"); 51 break; 52 } 53 else{ 54 System.out.println("登陆失败,请重新登陆!"); 55 } 56 } 57 else if(inputNum==3) { 58 System.out.println("正在退出!"); 59 System.exit(0); 60 } 61 else{ 62 System.out.println("非法输入,请重新尝试"); 63 } 64 65 } 66 67 //showStuManagerSystemMenu();显示学生管理系统主界面 68 for(;;){ 69 showStuManagerSystemMenu(); 70 int secondeInptuNum = sc.nextInt(); 71 if(secondeInptuNum==1) { 72 //1.addStu(); 添加学生信息 73 addStu(); 74 } 75 else if(secondeInptuNum==2){ 76 //2.searchStu();查询学生信息 77 searchStu(); 78 } 79 else if (secondeInptuNum==3){ 80 //modifyStu();修改学生信息 81 modifyStu(); 82 } 83 else if (secondeInptuNum==4){ 84 //4.deleteStu();删除学生信息 85 delseteStu(); 86 } 87 else if(secondeInptuNum ==5){ 88 //5.letsPlay();娱乐一下 89 letsPlay(); 90 } 91 else if(secondeInptuNum==6){ 92 //6.staStuInfo();统计每个分数段学生的人数 93 staStuInfo(); 94 } 95 else if(secondeInptuNum==7){ 96 System.out.println("正在退出"); 97 System.exit(0); 98 } 99 else 100 { 101 System.out.println("输入不正确,请重新输入!"); 102 } 103 } 104 105 106 } 107 /* 108 * 方法名:staStuInfo() 109 * 功能: 中的内容,加载到一个List集合中,统计每个分数段学生的人数 110 * 统计学生的信息 111 * */ 112 private static void staStuInfo() throws IOException { 113 //1.读取所有的学生信息到stuList中,方便以后需的遍历操作. 114 ArrayList<Student> stuList = new ArrayList<>(); 115 //2.定义BufferReader指向一个等待读取的文件 116 BufferedReader br = new BufferedReader( 117 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft") 118 ); 119 //3.遍历文件中的每一行,按照,进行分割,存储早stuList中 120 String line; 121 while((line=br.readLine())!=null){ 122 String[] array = line.split(","); 123 stuList.add(new Student(array[0],array[1],Double.parseDouble(array[2]))); 124 } 125 int section=0,section1=0,section2=0,section3=0,section4=0; 126 ArrayList<Student> arrBujige = new ArrayList<>(); 127 for (int i = 0; i < stuList.size(); i++) { 128 if (stuList.get(i).getScore()<60){ 129 section++; 130 arrBujige.add(stuList.get(i)); 131 } 132 else if (stuList.get(i).getScore()>60 && stuList.get(i).getScore()<70){ 133 section1++; 134 } 135 else if (stuList.get(i).getScore()>70 && stuList.get(i).getScore()<80){ 136 section2++; 137 } 138 else if (stuList.get(i).getScore()>80 && stuList.get(i).getScore()<90){ 139 section3++; 140 } 141 else { 142 section4++; 143 } 144 } 145 System.out.printf("60-70分的人数为%d\n" + 146 "70-80分的人数为%d\n" + 147 "80分-90分的人数为%d\n" + 148 "90-100分的人数为%d\n",section1,section2,section3,section4); 149 //找到不及格的人数 ,并显示成员 150 System.out.println("不及格的人数为:"+section); 151 System.out.println("不及格的人详细信息:"); 152 System.out.println(arrBujige); 153 154 } 155 156 /* 157 * 方法名:letsPlay() 158 * 功能:读取 中的内容,加载到一个List集合中 159 * 从所有学生信息中挑选一个学生人该学生唱歌,歌曲从另一个《歌曲清单.ccsoft》文件中随机挑一个。 160 * 学生具备的三种属性: 姓名, 161 * */ 162 private static void letsPlay() throws IOException { 163 //1.读取所有的学生信息到stuList中,方便以后需的遍历操作. 164 ArrayList<Student> stuList = new ArrayList<>(); 165 //2.定义BufferReader指向一个等待读取的文件 166 BufferedReader br = new BufferedReader( 167 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft") 168 ); 169 //3.遍历文件中的每一行,按照,进行分割,存储早stuList中 170 String line; 171 while((line=br.readLine())!=null){ 172 String[] array = line.split(","); 173 stuList.add(new Student(array[0],array[1],Double.parseDouble(array[2]))); 174 } 175 //4.读取所有的歌曲信息到musicList集合中 176 ArrayList<String> musicList = new ArrayList<>(); 177 //5.定义BufferedReader指向歌曲文件 178 BufferedReader brMusic = new BufferedReader( 179 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\歌曲清单.ccsoft") 180 ); 181 String lineMusic; 182 while((lineMusic=brMusic.readLine())!=null){ 183 musicList.add(lineMusic); 184 } 185 186 //6.随机产生一个索引值,从stuList中get()该索引,找到一个学生 187 System.out.println("开始随机抽取一个学生!\n这位天选之子是:"); 188 Random ra = new Random(); 189 int luckeyBoy = ra.nextInt(stuList.size()); 190 System.out.printf("%d号的%s",luckeyBoy,stuList.get(luckeyBoy).getName()); 191 //7.随机产生一个索引值,从musicList中get()该索引,找到一首歌 192 System.out.println("下面将为其随机生成一首歌:"); 193 int luckyMusic = ra.nextInt(musicList.size()); 194 System.out.println("歌曲是:"+musicList.get(luckyMusic)); 195 //8.让该学生唱这首歌 196 System.out.printf("有请%s的学生唱名称为:%s的歌\n",stuList.get(luckeyBoy).getName(),musicList.get(luckyMusic)); 197 198 } 199 200 /* 201 * 方法名:delseteStu() 202 * 功能:读取中的内容,加载到一个List集合中,然后删除,显示查询学生的信息,然后删除,保存到该文件中 203 * 学生具备的三种属性: 姓名, 204 * */ 205 private static void delseteStu() throws IOException { 206 //1.读取所有的学生信息到stuList中,方便以后需的遍历操作. 207 ArrayList<Student> stuList = new ArrayList<>(); 208 //2.定义BufferReader指向一个等待读取的文件 209 BufferedReader br = new BufferedReader( 210 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft") 211 ); 212 //3.遍历文件中的每一行,按照,进行分割,存储早stuList中 213 String line; 214 while((line=br.readLine())!=null){ 215 String[] array = line.split(","); 216 stuList.add(new Student(array[0],array[1],Double.parseDouble(array[2]))); 217 } 218 219 //4.提示用户输入需要修改的学生学号, 220 System.out.println("请输入需要修改的学号:"); 221 Scanner sc =new Scanner(System.in); 222 String inputNuum = sc.nextLine(); 223 //5.遍历比对,找到了就删除 224 for (int i = 0; i < stuList.size(); i++) { 225 if (stuList.get(i).getNum().equals(inputNuum)){ 226 stuList.remove(i); 227 System.out.println("删除成功!"); 228 } 229 } 230 //6.重新写入文件 231 //指向文件 232 BufferedWriter bw = new BufferedWriter( 233 new FileWriter("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft") 234 ); 235 //开始覆写 236 for (Student student : stuList) { 237 bw.write(student.getName()+","+student.getNum()+","+student.getScore()+"\r\n"); 238 } 239 //闭流 240 bw.close(); 241 } 242 243 /* 244 * 方法名:modifyStu() 245 * 功能:读取 中的内容,加载到一个List集合中,然后修改,显示查询学生的信息,保存到该文件中 246 * 学生具备的三种属性: 姓名, 247 * */ 248 private static void modifyStu() throws IOException { 249 //1.读取文件中所有的学生信息到stuList中,方便后续的遍历操作. 250 ArrayList<Student> stuList = new ArrayList<>(); 251 //从哪读取内容 252 BufferedReader br = new BufferedReader( 253 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft") 254 ); 255 String line; 256 /*一次读文件中的一行*/ 257 while ((line=br.readLine())!=null){ 258 /*读到的每一行,按 逗号 进行拆分 成为String[] array 数组*/ 259 String[] array = line.split(","); 260 /* new 一个User对象当做参数,使用全参构造传递账户名 和 密码 261 * 将该对象添加进userList中. 262 */ 263 264 stuList.add(new Student(array[0],array[1],Double.parseDouble(array[2]))); 265 } 266 // System.out.println(stuList); 267 // 请输入需要修改的学生的学号 268 System.out.println("请输入需要修改的学生的学号!"); 269 Scanner sc = new Scanner(System.in); 270 String inputNum = sc.nextLine(); 271 int flag =0; 272 //遍历比对,找到了重新设置改元素 273 for (int i = 0; i < stuList.size(); i++) { 274 if (stuList.get(i).getNum().equals(inputNum)){ 275 flag=1; 276 System.out.println("找到了!"); 277 System.out.println("请重新设置该学生的姓名:"); 278 String inputStr = sc.nextLine(); 279 System.out.println("请重新设置该学生的成绩:"); 280 double inputScore = sc.nextDouble(); 281 stuList.set(i,new Student(inputStr,inputNum,inputScore)); 282 //提示 283 System.out.println("重新设置该学生信息成功!"); 284 } 285 } 286 if (flag==0){ 287 System.out.println("查无此人!"); 288 } 289 //指向文件 290 BufferedWriter bw = new BufferedWriter( 291 new FileWriter("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft") 292 ); 293 //开始覆写 294 for (Student student : stuList) { 295 bw.write(student.getName()+","+student.getNum()+","+student.getScore()+"\r\n"); 296 } 297 //闭流 298 bw.close(); 299 } 300 301 /* 302 * 方法名:searchStu() 303 * 功能:读取中的内容,加载到一个List集合中,然后查询,显示查询学生的信息 304 * 学生具备的三种属性: 姓名, 305 * */ 306 private static void searchStu() throws IOException { 307 //1.读取文件中所有的学生信息到stuList中,方便后续的遍历操作. 308 ArrayList<Student> stuList = new ArrayList<>(); 309 //从哪读取内容 310 BufferedReader br = new BufferedReader( 311 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft") 312 ); 313 String line; 314 /*一次读文件中的一行*/ 315 while ((line=br.readLine())!=null){ 316 /*读到的每一行,按 逗号 进行拆分 成为String[] array 数组*/ 317 String[] array = line.split(","); 318 /* new 一个User对象当做参数,使用全参构造传递账户名 和 密码 319 * 将该对象添加进userList中. 320 */ 321 322 stuList.add(new Student(array[0],array[1],Double.parseDouble(array[2]))); 323 } 324 // System.out.println(stuList); 325 //请选择 326 System.out.println("输入1,按照姓名查询\n输入2,按照学号查询"); 327 Scanner sc = new Scanner(System.in); 328 String strInput = sc.nextLine(); 329 /*如果输入的是1 ,则调用searchStuName()方法*/ 330 if ("1".equals(strInput)){ 331 System.out.println("请输入姓名:"); 332 String inputName = sc.nextLine(); 333 searchStuName(stuList,inputName); 334 } 335 /*如果是输入的是2,则调用searchStuNum()方法*/ 336 else if("2".equals(strInput)){ 337 System.out.println("请输入学号:"); 338 String inputNum = sc.nextLine(); 339 searchStuNum(stuList,inputNum); 340 } 341 else{ 342 System.out.println("无效输入!"); 343 } 344 345 } 346 /*方法名:searchStuName 按照名字进行查询*/ 347 private static void searchStuName(ArrayList<Student> list,String inputName){ 348 int flag =0; 349 for (Student student : list) { 350 if (student.getName().equals(inputName)){ 351 System.out.println("找到此人!"); 352 System.out.println(student); 353 flag=1; 354 break; 355 } 356 357 } 358 if (flag==0){ 359 System.out.println("查无此人!"); 360 } 361 } 362 /*方法名:searchStuNum 按照学号进行查询*/ 363 private static void searchStuNum(ArrayList<Student> list,String inpuNum){ 364 int flag=0; 365 for (Student student : list) { 366 if (student.getNum().equals(inpuNum)){ 367 System.out.println("找到此人!"); 368 System.out.println(student); 369 flag=1; 370 break; 371 } 372 } 373 if (flag==0){ 374 System.out.println("查无此人!"); 375 } 376 } 377 378 /* 379 * 方法名:addStu() 380 * 功能:添加学生信息到 381 * 学生具备的三种属性: name , num , score 382 * */ 383 private static void addStu() throws IOException { 384 //1.使用BuferWriter指向一个文件 385 BufferedWriter bw = new BufferedWriter(new FileWriter( 386 "C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\stu.ccsoft",true 387 )); 388 //2.请求输入学生的信息 389 Scanner sc = new Scanner(System.in); 390 System.out.println("请输入学生的姓名:"); 391 String name = sc.nextLine(); 392 System.out.println("请输入学生的学号:"); 393 String num = sc.nextLine(); 394 System.out.println("请输入学生的成绩:"); 395 double score = sc.nextDouble(); 396 //3.将学生信息添加到文件中. 397 /* 打印的格式 :陈醇,888,80*/ 398 bw.write(name+","+num+","+score+"\r\n"); 399 400 //4.闭流 401 bw.close(); 402 System.out.println("录入学生信息成功!"); 403 404 } 405 406 /* 407 * 方法名:showStuManagerSystemMenu() 408 * 功能:显示学生管理系统界面,提供用户选择 409 *------------------------学生成绩管理系统菜单--------------------- 410 1添加 2查询 3修改 4删除 5娱乐一下 6统计 7退出 411 * */ 412 private static void showStuManagerSystemMenu() { 413 System.out.println("=====================主界面==================="); 414 System.out.println("╬ 1.添加学生 "); 415 System.out.println("╬ 2.查询学生 "); 416 System.out.println("╬ 3.修改学生 "); 417 System.out.println("╬ 4.删除学生 "); 418 System.out.println("╬ 5.娱乐一下 "); 419 System.out.println("╬ 6.统计学生 "); 420 System.out.println("╬ 7.退 出 "); 421 System.out.println("============================================="); 422 System.out.println("请输入操作指令:"); 423 424 } 425 /* 426 * 方法名:userRegister(); 427 * 方法功能:用来注册一个用户,将用户写入到user.ccsoft"中 428 * */ 429 private static void userRegister() throws IOException { 430 //请输入用户名: 431 System.out.println("请输入用户名:"); 432 Scanner sc = new Scanner(System.in); 433 String inputUser = sc.nextLine(); 434 String passwd=""; 435 436 //判断用户是否存在,定义一个User类型的ArrayList集合,从文件中读取出来,保存到ArrayList<User>中 437 ArrayList<User> userList = new ArrayList<>(); 438 //从哪读取内容 439 BufferedReader br = new BufferedReader( 440 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\user.ccsoft") 441 ); 442 String line; 443 /*一次读文件中的一行*/ 444 while ((line=br.readLine())!=null){ 445 /*读到的每一行,按 逗号 进行拆分 成为String[] array 数组*/ 446 String[] array = line.split(","); 447 /* new 一个User对象当做参数,使用全参构造传递账户名 和 密码 448 * 将该对象添加进userList中. 449 */ 450 userList.add(new User(array[0],array[1])); 451 } 452 // System.out.println(userList); 453 /* 454 * 全部添加进userList数组后, 用循环遍历的方式跟用户输入的账户名inputUser进行比对 455 * 如果比对成功:提示该用户已经存在. 456 * 如果比对不成功:请求用户输入密码 457 * */ 458 int flag =0; 459 for (User user : userList) { 460 if(user.getUsesrname().equals(inputUser)){ 461 flag=1; 462 463 } 464 } 465 if(flag==1) 466 { 467 System.out.println("用户名已经被注册!"); 468 } 469 else{ 470 System.out.println("请输入密码"); 471 passwd=sc.nextLine(); 472 //将新的用户 和 密码添加进userList中 473 userList.add(new User(inputUser,passwd)); 474 475 476 //将userList覆写进 User.ccsoft文件 477 //写到哪里去 478 BufferedWriter bw = new BufferedWriter( 479 new FileWriter("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\user.ccsoft") 480 ); 481 //遍历写入 482 for (User user : userList) { 483 bw.write(user.getUsesrname()+","+user.getPasswd()+"\r\n"); 484 } 485 System.out.println("注册成功!"); 486 bw.close(); 487 } 488 489 } 490 491 /* 492 * 方法名:showMainMenu() 493 * 功能:显示主界面,让用户选择注册,或者登陆 494 * 495 * */ 496 private static void showMainMenu() { 497 System.out.println("=====================主界面==================="); 498 System.out.println("╬ 1.用户注册 "); 499 System.out.println("╬ 2.用户登录 "); 500 System.out.println("╬ 3.退 出 "); 501 System.out.println("============================================="); 502 System.out.println("请输入操作指令:"); 503 504 } 505 /* 506 * 方法名:userLogin() 507 * 功能:用户登陆功能 508 * 类型:boolean类型,返回的如果是true 说明登陆成功 509 * 返回的如果是false,说明明登陆失败. 510 * */ 511 private static boolean userLogin() throws IOException { 512 //1.请求用户输入账户名 513 System.out.println("请输入账户名:"); 514 Scanner sc = new Scanner(System.in); 515 String username = sc.nextLine(); 516 //2.请求用户输入密码 517 System.out.println("请输入密码:"); 518 String passwd = sc.nextLine(); 519 //3.将得到的账户名 和 密码 与 userList中的值进行比较 520 //如果比较相同则登陆成功返回true 521 //如果比较不相同则登陆失败返回false 522 //判断用户是否存在,定义一个User类型的ArrayList集合,从文件中读取出来,保存到ArrayList<User>中 523 ArrayList<User> userList = new ArrayList<>(); 524 //从哪读取内容 525 BufferedReader br = new BufferedReader( 526 new FileReader("C:\\ideaProjects\\job-code\\day10\\src\\老王的题\\user.ccsoft") 527 ); 528 String line; 529 /*一次读文件中的一行*/ 530 while ((line=br.readLine())!=null){ 531 /*读到的每一行,按 逗号 进行拆分 成为String[] array 数组*/ 532 String[] array = line.split(","); 533 /* new 一个User对象当做参数,使用全参构造传递账户名 和 密码 534 * 将该对象添加进userList中. 535 */ 536 userList.add(new User(array[0],array[1])); 537 } 538 // System.out.println(userList); 539 //遍历UserList集合查找是否匹配输入的用户名和密码 540 int flag=0; 541 for (int i = 0; i < userList.size(); i++) { 542 if (userList.get(i).getUsesrname().equals(username)){ 543 if (userList.get(i).getPasswd().equals(passwd)){ 544 flag=1; 545 546 return true; 547 } 548 549 } 550 } 551 return false; 552 } 553 554 }