STUDENT
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Scanner;
/**
* 班级
*
* @author daydream
*
*/
public class Classteam implements Serializable{
transient static BufferedReader keyboard=new BufferedReader(new InputStreamReader(System.in));
private String name;
private LinkedHashMap<String, Student> mapclass=new LinkedHashMap<>();
private LinkedList<Student> listclass=new LinkedList<>();
private int number=0;//总人数
private double total=0;//总分数
private double ave=0;//平均数
private Student lowest,top;//最高和最低成绩
private int[]classify=new int[5];//成绩分类
public Classteam(){}
public Classteam(String name){
this.name=name;
}
public String getName() {
return name;
}
/*
* LinkedHashMap是有序的,有序是指存入的顺序有序,HashMap是无序的,
*/
/*
* 录入学生
*/
public void readStudent(){
String id;
String name;
String scoreStr;
double score;
try {
System.out.print("-------------------------------------\n请输入学生信息\n");
System.out.print("id\t");
id=keyboard.readLine();
if(mapclass.containsKey(id))
System.out.println("该学号已经被录入过了");
else{
System.out.print("name\t");
name=keyboard.readLine();
System.out.print("score\t");
scoreStr=keyboard.readLine();
if (Match.matchScore(scoreStr)) {
score=Double.parseDouble(scoreStr);
inputStudent(id, name, score);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* input student in this class
* 将学生加入班级
*/
public void inputStudent(String id,String name, double score){
int rank;
int toclass=-1;
Student student=new Student(id,name, score);
number++;
listclass.add(student);
mapclass.put(id, new Student(id,name, score));
toclass=(int) (score-60<0?0:(score-50)/10);
classify[toclass>=5?4:toclass]++;
total+=score;
ave=total/number;
lowest=listclass.get(listclass.size()-1);
top=listclass.get(0);
}
/*
* get the rank
* 班级名次排序
*/
public void sort(){
Collections.sort(listclass);
for (Student student : listclass) {
student.setRank(listclass.indexOf(student)+1);
mapclass.put(student.getId(),new Student(student,listclass.indexOf(student)+1));
}
System.out.println("-------------------------------------\n排序成功");
}
/*
* print all the student
*/
public void getMyclass(){
System.out.println("-------------------------------------\n成绩单");
for (Student student : listclass) {
System.out.println(student);
}
}
/*
* get the right student from the class by name or id
* 查找学生
*/
public void getStudent(){
String choose;
System.out.print("1.学号查找\n2.姓名查找\t");
try {
choose=keyboard.readLine();
if(choose.equals("1"))
getStudentId();
else if(choose.equals("2")) {
getStudentName();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void getStudentId(){
String id;
System.out.print("请输入学号\t");
try {
id=keyboard.readLine();
if(mapclass.containsKey(id))
System.out.println(mapclass.get(id));
else {
System.out.println("没有该学生");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void getStudentName(){
String name=null;
String getone;
System.out.print("请输入学生姓名\t");
try {
name=keyboard.readLine();
for (Student student : listclass) {
if(name.equals(student.getName())){
getone=name;
System.out.println(student);
}
}
if(name==null){
System.out.println("没有该学生");
}
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* get the Analysis
* 成绩分析
*/
public void getAnalysis(){
System.out.println("-------------------------------------\n成绩分析");
System.out.println("总人数:"+number+"\n平均分"+ave+"\n最高分\n"+top+"\n最低分\n"+lowest);
switch (5) {
case 5:System.out.println("\t等级:"+"\t人数"+"\t百分比");
case 4:System.out.printf("\t%-5s%5d\t%2.2f %%\n","优等:",classify[4],(classify[4]/(double)number)*100);
case 3:System.out.printf("\t%-5s%5d\t%2.2f %%\n","良等:",classify[3],(classify[3]/(double)number)*100);
case 2:System.out.printf("\t%-5s%5d\t%2.2f %%\n","中等:",classify[2],(classify[2]/(double)number)*100);
case 1:System.out.printf("\t%-5s%5d\t%2.2f %%\n","及格:",classify[1],(classify[1]/(double)number)*100);
case 0:System.out.printf("\t%-5s%5d\t%2.2f %%\n","不及格:",classify[0],(classify[0]/(double)number)*100);
}
}
}
FILEOUT
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
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.util.Vector;
/**
* 将school进行文件的输入输出
* @author daydream
*
*/
public class FileInAOut {
static File file=new File("school");
/*
* 写文件
*/
public static void outputFile(School school){
try {
ObjectOutputStream objout=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
objout.writeObject(school);//无法序列,因为其中包含了未序列化的元素Scanner对象等
objout.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("1");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("2");
}
System.out.println("文件存储成功");
}
/*
* 读文件
*/
public static School inputFile(){//如果该方法为静态必须
ObjectInputStream objin;
// Student student;
School school = null;
try {
objin = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
while(true){
// listclass.add((Student)objin.readObject());
school=(School)objin.readObject();
}
} catch (FileNotFoundException e) {
//e.printStackTrace();
System.out.println("该文件为空");
}
catch (EOFException e) {
//e.printStackTrace();
System.out.println("文件读取结束");
} catch (IOException e) {
e.printStackTrace();
System.out.println("没有历史文件记录");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("没有历史文件记录");
}
return school;
}
}
GRADE
/*
* 管理成绩
*/
public class GradeManage {
public static String[] Type ={
// "1.录入学生成绩\n2.排名\n3.查找学生信息\n4.成绩分析\n5.打印所有的学生信息\n6.存储文件\n"
"inputStudent","sort","serchStudent","getAnalysis","printAll","outFile"
};
public static void printMenue(){
System.out.println("-------------------------------\n"
+ "1.录入学生成绩\n2.排名\n3.查找学生信息\n4.成绩分析\n5.打印所有的学生信息\n6.存储文件\n"
+ "-------------------------------");
}
public void doTransaction(String types,Classteam classteam){
switch (types) {
case "inputStudent":
classteam.readStudent();
break;
case "sort":
classteam.sort();
break;
case "serchStudent":
classteam.getStudent();
break;
case "getAnalysis":
classteam.getAnalysis();
break;
case "printAll":
classteam.getMyclass();
break;
case "outFile":
FileInAOut.outputFile(Menue.school);
break;
default:
System.out.println("您输入的的选项不在");
break;
}
}
}
MATCH
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则比较
* @author daydream
*
*/
public class Match {
public static boolean matchScore(String score){
String regex="^(\\d?\\d(\\.\\d*)?)|(100)$";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(score);
if (matcher.matches()) {
return true;
}else{
System.out.println("格式不正确,请输入0-100的成绩,如90.51");
return false;
}
}
}
MENUE
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
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.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Scanner;
import java.util.Vector;
/**
* 入口,选择班级,选择操作
* @author daydream
*
*/
public class Menue {
static Scanner scanner=new Scanner(System.in);
static School school;
public static void main(String[] args) {
GradeManage gradeManage=new GradeManage();
Classteam classteam = null;
classteam=getClassteam();
classteam.getMyclass();
System.out.println("请输入整数");
int choose;
while (true) {
classteam.getMyclass();
GradeManage.printMenue();
try {
choose=scanner.nextInt();
gradeManage.doTransaction(GradeManage.Type[choose-1], classteam);
} catch (Exception e) {
System.out.println("请输入整数");
}
}
}
/*
*
*/
public static Classteam getClassteam(){
int i=1;
int choose=0;
Classteam classteam = null;
while (classteam==null) {
school=FileInAOut.inputFile();
if (school!=null) {
school.getClassName();
System.out.println("1.选择班级输入(班级名)\n2.新建\n3.退出");
choose=scanner.nextInt();
if (choose==3) {
break;
}
classteam=chooseClass(choose,classteam);
}
else{
school=new School();
System.out.println("没有任何班级\n1.新建\n2.退出");
choose=scanner.nextInt();
if (choose==2) {
break;
}
classteam=chooseClass(choose+1,classteam);
}
}
return classteam;
}
/*
*
*/
public static Classteam chooseClass(int choose,Classteam classteam){
if(choose==1){
System.out.println("请输入班级名字");
String name=scanner.next();
classteam=school.getClassteam(name);
if (classteam==null) {
System.out.println("没有该班级");
}
}
if(choose==2){
System.out.println("请输入文件名");
String name=scanner.next();
classteam=new Classteam(name);
school.addClassteam(classteam);
}
return classteam;
}
}
/*
* 1.fileInAOut.outputFile(filename, class1);没有new一个对象所以报错nullpointer
*
*/
SCHOOL
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
public class School implements Serializable{
private LinkedHashMap<String, Classteam> mapschool=new LinkedHashMap<>();
public void getClassName(){
int i=1;
Iterator<String> iterator=mapschool.keySet().iterator();
if (iterator.hasNext()) {
System.out.println("班级如下");
while(iterator.hasNext()){
System.out.println(i+"."+iterator.next());
}
System.out.println("------------------");
}
}
public Classteam getClassteam(String name){
return mapschool.get(name);
}
public void addClassteam(Classteam classteam){
mapschool.put(classteam.getName(), classteam);
}
}
STUDENT
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Serializable;
/**
* 学生
* 属性 姓名、成绩、名次
* @author daydream
*
*/
public class Student implements Comparable<Student>,Serializable{
private String id;
private String name;
private double score;
private int rank;
public Student(String id,String name,double score){
this.id=id;
this.name=name;
this.score=score;
}
public Student(Student student,int rank){
this.id=student.getId();
this.name=student.getName();
this.score=student.getScore();
this.rank=rank;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public String toString(){
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("\t学号"+id+"\t姓名:"+name+"\t排名:"+rank+"\t分数:"+score);
return stringBuffer.toString();
}
/*
* 重写equal比较值,而非地址
* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this==((Student)obj)) {
return true;
}
if ((id.equals(((Student)obj).id)&&name.equals(((Student)obj).getName()))&&(score==((Student)obj).getScore())) {
return true;
}
else return false;
};
/*
* 比较排序
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(Student student) {
if(student==this)
return 0;
else{
int result=-String.valueOf(score).compareTo(String.valueOf(student.score));
return result;
}
}
}