成绩录入系统

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;
        }
    }


}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值