现在的位置: 首页 > 综合 > 正文

对象序列化,向文件中写入对象,然后实现查询

2018年04月25日 ⁄ 综合 ⁄ 共 5869字 ⁄ 字号 评论关闭
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();  
        }   
	}}}

抱歉!评论已关闭.