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();
}
}}}
对象序列化,向文件中写入对象,然后实现查询
最新推荐文章于 2021-03-02 06:17:45 发布