- /**
- 需求:
- 有五个学生,每个学生有3门课的成绩,
- 从键盘输入以上数据(包括姓名,三门课成绩)
- 输入的格式:如:zhangsan,70,80,90计算出总成绩,
- 并把学生的信息和计算出的总成绩高低顺序存放在stud.txt文件中
- */
- /*
- 思路:
- 1.编写学生类,包含姓名和三门课成绩,总成绩
- 2.创建流,源设备是键盘,目的是硬盘内stud.txt,纯文本,需要缓冲区
- 3.按键盘录入数据建立学生对象学生对象,并将学生对象录入集合
- 4.编写比较器,按总成绩排序,并让集合实现比较器排序
- 5.输出流输出
- */
- import java.io.*;
- import java.util.*;
- class Student
- {
- private String name;
- private int[] sc;
- private int sum = 0;
- //构造方法直接计算总成绩
- Student(String name,int[] sc)
- {
- this.name = name;
- this.sc = sc;
- for(int i:sc)
- sum += i;
- }
- //返回三门成绩的字符串
- public String getSc()
- {
- StringBuilder str = new StringBuilder();
- for(int i:sc)
- str.append(i+",");
- //去除末尾逗号
- str.substring(0,str.length()-2);
- return str.toString();
- }
- //返回姓名
- public String getName()
- {
- return name;
- }
- //返回总成绩
- public int getSum()
- {
- return sum;
- }
- }
- //实现比较器,通过成绩排序
- class Sum implements Comparator<Student>
- {
- public int compare(Student stu1,Student stu2)
- {
- int i;
- i = (stu1.getSum()+"").compareTo(stu2.getSum()+"");
- //成绩相同比较名字
- if(i == 0)
- return stu1.getName().compareTo(stu2.getName());
- return i;
- }
- }
- class StudentDemo
- {
- public static void main(String[] args) throws IOException
- {
- System.out.println("请按\"姓名,分数1,分数2,分数3\"的格式输入学生成绩:");
- outIO(inIO());
- System.out.println("成绩已录入");
- }
- //根据键盘录入创建学生对象
- public static TreeSet<Student> inIO()throws IOException
- {
- TreeSet<Student> st = new TreeSet<Student>(new Sum());
- BufferedReader br =
- new BufferedReader(new InputStreamReader(System.in));
- //输入五次
- for (int x=0;x<5 ;x++ )
- {
- String stu = br.readLine();
- //分割录入字符串
- String[] stuarr = stu.split(",");
- //将成绩部分转化为int数组
- int[] sc = new int[3];
- for (int i = 0;i<3 ;i++ )
- {
- sc[i] = Integer.parseInt(stuarr[i+1]);
- }
- st.add(new Student(stuarr[0],sc));
- }
- br.close();
- return st;
- }
- public static void outIO(Set<Student> st) throws IOException
- {
- //打印流,参数true表示每次运行打印命令自动刷新
- PrintWriter pw = new PrintWriter(new FileOutputStream("stud.txt"),true);
- //迭代学生,打印成绩
- Iterator<Student> it = st.iterator();
- while (it.hasNext())
- {
- Student stu = it.next();
- pw.println(stu.getName()+" 单科成绩:"+stu.getSc()+" 总分:"+stu.getSum());
- }
- pw.close();
- }
- }
复制代码
|
|