• 黑马程序员JAVA基础练习之存储学生信息


      题目:有一批学生,每个学生有3门课程,从键盘上输入以下数(姓名,三门成绩)输入格式:如zhangsan,30,40,60计算出总成绩。并把学生的信息和计算出的总分数高低顺序存放到磁盘文件中。

      思路:

      1、创建一个描述学生信息的类:Student类,包含如下属性:姓名(name)、三门成绩(A、B、C) 和总成绩(sum);

      2、建立学生工具类:StudentTool 。其中的方法主要是从键盘上录入学生信息studentInfo() 和 将学生信息写入到磁盘文件中的方法writeToFile() 。

      3、因为学生数量较多,而且还要把学生的信息按分数的高低排序,则选择Set集合中的TreeSet集合。 

      通过理清思路,可以得到如下代码:

      学生类:

      思路:1、定义学生属性:姓名、三门成绩、总成绩。

         2、因为用TreeSet集合存储,则要实现Comparable接口来完成自然排序以及保证元素的唯一性(详情见:黑马程序员-JAVA基础-Java 集合之Set 接口

    )。   3、重写compareTo方法、hashCode方法、equals方法,以及为了方便输出重写toString() 方法。

     1 public class Student implements Comparable{
     2     private String name ; 
     3     private int a , b , c ; 
     4     private int sum ;
     5     public Student(String name , int a , int b ,int c) {
     6         this.name = name ; 
     7         this.a = a ;
     8         this.b = b ; 
     9         this.c = c ;
    10     }
    11 //    get和set方法。
    12     public String getName() {
    13         return name;
    14     }
    15     public void setName(String name) {
    16         this.name = name;
    17     }
    18     public int getA() {
    19         return a;
    20     }
    21     public void setA(int a) {
    22         this.a = a;
    23     }
    24     public int getB() {
    25         return b;
    26     }
    27     public void setB(int b) {
    28         this.b = b;
    29     }
    30     public int getC() {
    31         return c;
    32     }
    33     public void setC(int c) {
    34         this.c = c;
    35     } 
    36     public int getSum() {
    37         return sum;
    38     }
    39     public void setSum(int sum) {
    40         this.sum = sum;
    41     }
    42 //   覆写compareTo方法
    43     public int compareTo(Object o) { 
    44         if ( !(o instanceof Student))
    45             throw new RuntimeException("匹配错误") ;
    46         Student stu = (Student) o ; 
    47 //        按照学生的名字排序
    48         return this.name.compareTo(stu.getName());
    49     }
    50 //    重写hashCode方法
    51     public int hashCode() {
    52         return this.name.hashCode() * 87 + sum ; 
    53     }
    54 //    重写equals方法
    55     public boolean equals(Object o) {
    56         if ( !(o instanceof Student))
    57             throw new RuntimeException("匹配错误") ;
    58         Student stu = (Student) o ; 
    59         if(this.name.equals(stu.getName())&&this.a == stu.getA()&&this.c == stu.getC())
    60             if (this.sum == this.getSum())
    61                 return true ;
    62         return false ;
    63     }
    64     public String toString() {
    65         return "Stuent["+this.name+","+this.a+","+this.b+","+this.c+"]" ;
    66     }
    67 }

      学生工具类:

      思路:1、建立学生录入方法和学生信息存入磁盘的方法。

         2、学生录入方法:通过重载,一个实现自定义比较器,一个则按自然排序。 

     1 public class StudentTool {
     2 //    建立一个学生读入方法,按自然顺序排序。
     3     public Set<Student> studentInfo() throws IOException {
     4         return studentInfo(null);
     5     }
     6 //    建立一个学生读入方法,支持自定义比较器
     7     public Set<Student> studentInfo(Comparator comp) throws IOException {
     8         
     9 //        判断比较器是否为空。
    10         TreeSet<Student> StudentSet = null ;
    11         if ( comp == null)   
    12             StudentSet = new TreeSet<Student>( ) ;
    13         else
    14             StudentSet = new TreeSet<Student>(comp) ;
    15 //        建立键盘录入方法
    16         BufferedReader br = 
    17              new BufferedReader(new InputStreamReader(System.in)) ; 
    18         
    19         String line = null ; 
    20         while ((line = br.readLine()) != null) {
    21 //            判断是否停止录入
    22             if ("over".equals(line))
    23                 break;
    24             String[] info = line.split(",") ;  
    25 //            创建学生对象
    26             Student stu = new Student(info[0] , new Integer(info[1]).intValue()
    27                     ,new Integer(info[2]).intValue(),new Integer(info[3]).intValue());
    28             stu.setSum(stu.getA()+stu.getB() +stu.getC()) ;
    29 //            加入TreeSet集合。
    30             StudentSet.add(stu) ; 
    31         }
    32         br.close() ;
    33         return StudentSet ; 
    34     }
    35 //    将学生信息写入文件:
    36     public void writeToFile(Set<Student> studentSet)throws IOException {
    37         BufferedWriter bufw = 
    38             new BufferedWriter(new FileWriter("D:\\StudentInfo.txt")) ;
    39         for(Student stu : studentSet) {
    40             bufw.write(stu.toString()+"\t") ;
    41             bufw.write(stu.getSum() + "") ;
    42             bufw.newLine(); 
    43         }
    44         bufw.close() ;
    45     }
    46 }

      主函数:

     1 public class StudentDemo {
     2     public static void main(String[] args) throws IOException {
     3 //        创建一个集合对象,用于装学生类。
     4         Set<Student> stuSet = new TreeSet() ; 
     5 //        创建学生工具类对象。
     6         StudentTool stuTool = new StudentTool() ; 
     7 //        录入学生,按成绩的高低排序。
     8 //        stuSet = stuTool.studentInfo(new Comparator() { 
     9 //            public int compare(Object o1, Object o2) { 
    10 //                Student stu1 = (Student) o1 ; 
    11 //                Student stu2 = (Student) o2 ; 
    12 //                if (stu1.getSum() == stu2.getSum())
    13 //                    return stu1.getName().compareTo(stu2.getName());
    14 //                return stu2.getSum() - stu1.getSum() ;
    15 //                
    16 //            }
    17 //        }) ; 
    18         stuSet = stuTool.studentInfo() ;
    19 //        将学生信息写入文档。
    20         stuTool.writeToFile(stuSet) ; 
    21     }
    22 }

      

      

  • 相关阅读:
    【python cookbook】替换字符串中的子串(使用Template)
    python 学习sys
    【python cookbook】 替换字符串中的子串
    Python文件读写
    【python cookbook】python过滤字符串中不属于指定集合的字符
    【python cookbook】改变多行文本字符串的缩进
    python字符编码
    【python cookbook】python访问子字符串
    【python cookbook】python 控制大小写
    过关了
  • 原文地址:https://www.cnblogs.com/jbelial/p/3073540.html
Copyright © 2020-2023  润新知