import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Arrays; import java.util.HashSet; import java.util.Scanner; import java.util.Set; @SuppressWarnings("serial") class Student implements Comparable<Student> ,Serializable{ public String getStudentName() { return studentName; } public String getStudentId() { return studentId; } public String getChineseGrade() { return chineseGrade; } public String getMathGrade() { return mathGrade; } public String getEnglishGrade() { return englishGrade; } private String studentName; private String studentId; private String chineseGrade; private String mathGrade; private String englishGrade; public Student(String studentName, String studentId, String chineseGrade, String mathGrade, String englishGrade) { this.studentName = studentName; this.studentId = studentId; this.chineseGrade = chineseGrade; this.mathGrade = mathGrade; this.englishGrade = englishGrade; } @Override public int compareTo(Student stu) { if(this.studentId.compareTo(stu.studentId)>0) return 1; return 0; } } public class Main { public static String messages[]={ "语文成绩要求输入整数,请重新输入:", "语文成绩要求输入0-100,请重新输入:", "数学成绩要求输入整数,请重新输入:", "数学成绩要求输入0-100,请重新输入:", "英语成绩要求输入整数,请重新输入:", "英语成绩要求输入0-100,请重新输入:" }; public static boolean nameValidate(String name){ if(name.length()<1||name.length()>15)return false; return true; } public static int idValidate(String id){ if(id.length()!=8)return 1; if(!id.matches("[0-9]*"))return 2; return 3; } public static String gradeValidate(String cGrade,String mGrade,String eGrade){ if(!cGrade.matches("[0-9]*"))return "failcGrade1"; if(cGrade.length()>3)return "failcGrade2"; int cgrade=Integer.parseInt(cGrade); if(cgrade<0||cgrade>100)return "failcGrade2"; if(!mGrade.matches("[0-9]*")) return "failmGrade1"; if(mGrade.length()>3)return "failmGrade2"; int mgrade=Integer.parseInt(mGrade); if(mgrade<0||mgrade>100)return "failmGrade2"; if(!eGrade.matches("[0-9]*")) return "faileGrade1"; if(eGrade.length()>3)return "faileGrade2"; int egrade=Integer.parseInt(eGrade); if(egrade<0||egrade>100)return "faileGrade2"; return "success"; } public static int numberValidate(String s){ if(!s.matches("[0-9]*")) return 1; if(s.length()>3)return 2; int egrade=Integer.parseInt(s); if(egrade<0||egrade>100)return 2; return 3; } public static void main(String[] args) throws IOException { Scanner scanner=new Scanner(new BufferedInputStream(System.in)); FileOutputStream outStream = new FileOutputStream("E:/1.txt",true); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outStream); int number; System.out.println("请输入学生个数(0-100整数):"); while(true){ String n=scanner.next(); int res=numberValidate(n); while(res!=3){ if(res==1){ System.out.println("学生个数是由数字字符构成,你的输入不符合要求,请重新输入:"); n=scanner.next(); res=numberValidate(n); }else { System.out.println("学生个数最多100个,请重新输入:"); n=scanner.next(); res=numberValidate(n); } } number=Integer.parseInt(n); if(number!=0)break; else { System.out.println("学生个数不能为0,请重新输入:"); } } Student student[]=new Student[number]; System.out.println("请输入每个学生的信息:"); for(int i=0;i<number;i++){ String name,id,eString,cString,mString; System.out.println("请输入学生姓名(1-15位字符):"); name=scanner.next(); while(!nameValidate(name)){ System.out.println("姓名不符合要求,要求姓名的长度为1-15位字符,请重新输入学生姓名:"); name=scanner.next(); } System.out.println("请输入学生学号(长度为8的数字字符):"); id=scanner.next(); int result=idValidate(id); while(result!=3){ if(result==1){ System.out.println("学号输入位数不正确,要求8位,请重新输入:"); id=scanner.next(); result=idValidate(id); }else { System.out.println("学号是由数字字符构成,你的输入不符合要求,请重新输入学号:"); id=scanner.next(); result=idValidate(id); } } System.out.println("请输入语文成绩(0-100整数):"); cString=scanner.next(); System.out.println("请输入数学成绩(0-100整数):"); mString=scanner.next(); System.out.println("请输入英语成绩(0-100整数):"); eString=scanner.next(); String str=gradeValidate(cString, mString, eString); while(str.compareTo("success")!=0){ if(str.compareTo("failcGrade1")==0){ System.out.println(messages[0]); cString=scanner.next(); str=gradeValidate(cString, mString, eString); } if(str.compareTo("failcGrade2")==0){ System.out.println(messages[1]); cString=scanner.next(); str=gradeValidate(cString, mString, eString); } if(str.compareTo("failmGrade1")==0){ System.out.println(messages[2]); mString=scanner.next(); str=gradeValidate(cString, mString, eString); } if(str.compareTo("failmGrade2")==0){ System.out.println(messages[3]); mString=scanner.next(); str=gradeValidate(cString, mString, eString); } if(str.compareTo("faileGrade1")==0){ System.out.println(messages[4]); eString=scanner.next(); str=gradeValidate(cString, mString, eString); } if(str.compareTo("faileGrade2")==0){ System.out.println(messages[5]); eString=scanner.next(); str=gradeValidate(cString, mString, eString); } } student[i]=new Student(name, id, cString, mString, eString); } Arrays.sort(student); objectOutputStream.writeObject(student); while(true){ System.out.println("请输入要查询学生的学号:"); String findId=scanner.next(); if(findId.compareTo("0")==0){ System.out.println("结束查找!"); break; } int result=idValidate(findId); while(result!=3){ if(result==1){ System.out.println("学号输入位数不正确,要求8位,请重新输入:"); findId=scanner.next(); result=idValidate(findId); }else { System.out.println("学号是由数字字符构成,你的输入不符合要求,请重新输入学号:"); findId=scanner.next(); result=idValidate(findId); } } FileInputStream freader; try { freader = new FileInputStream("E:/1.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(freader); boolean isFindStudent=false; Student get_Students[]=new Student[number]; get_Students=(Student[])objectInputStream.readObject(); for(int pos=0;pos<get_Students.length;pos++){ if(findId.compareTo(get_Students[pos].getStudentId())==0){ System.out.println("该学号的学生成绩为:语文:"+get_Students[pos].getChineseGrade()+" 数学:"+get_Students[pos].getMathGrade()+" 英语:"+get_Students[pos].getEnglishGrade()); isFindStudent=true;break; } } if(!isFindStudent){ System.out.println("学号:"+findId+"没有找到!"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }}}