本帖最后由 马云 于 2012-3-23 17:05 编辑
/*
有五个学生,每个学生有3门课的成绩
从键盘输入以上数据(包括姓名,三门课成绩)
输入的格式:如:zhangsan,30,40,60计算出总成绩,
并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。
1)描述学生对象
2)定义一个可操作学生对象的工具类
思想:
1,通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。
2。因为学生有很多,那么就需要存储,使用到集合,因为要对学生的总分排序。所以可以使用treeSet
3,将集合的信息写入到一个文件中
*/
Student.java- package demo;
- public class Student implements Comparable<Student>{
- String name;
- int chiaeseSco;
- int math;
- int english;
- public Student(String name,int chia,int math,int eng){
- this.name=name;
- this.chiaeseSco=chia;
- this.math=math;
- this.english=eng;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getChiaeseSco() {
- return chiaeseSco;
- }
- public void setChiaeseSco(int chiaeseSco) {
- this.chiaeseSco = chiaeseSco;
- }
- public int getMath() {
- return math;
- }
- public void setMath(int math) {
- this.math = math;
- }
- public int getEnglish() {
- return english;
- }
- public void setEnglish(int english) {
- this.english = english;
- }
- public String toString() {
-
- return "name:"+name+" chiaeseSco:"+chiaeseSco+" math:"+math+" english:"+english+" sum"+this.scoSum();
- }
- public int scoSum(){
- return chiaeseSco+math+english;
- }
- public int compareTo(Student o) {
-
- int num=o.scoSum()-this.scoSum();
- if(num==0){
- return this.getName().compareTo(o.getName());
- }
- return num;
- }
-
- }
- /*
- 有五个学生,每个学生有3门课的成绩
- 从键盘输入以上数据(包括姓名,三门课成绩)
- 输入的格式:如:zhangsan,30,40,60计算出总成绩,
- 并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。
- 1)描述学生对象
- 2)定义一个可操作学生对象的工具类
- 思想:
- 1,通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。
- 2。因为学生有很多,那么就需要存储,使用到集合,因为要对学生的总分排序。所以可以使用treeSet
- 3,将集合的信息写入到一个文件中
- */
复制代码 IOexample.java- package demo;
- import java.io.*;
- import java.util.TreeSet;
- public class IOexample {
- public static void main(String[] args) {
- BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
- TreeSet<Student> stus=new TreeSet<Student>();
- String data=null;
- Student stu=null;
- try {
- while((data=bfr.readLine())!=null){
- if(!data.equals("")){
- if(data.equals("over")){
- //此入如果输入over将集合的数据写入到文件流
- ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("student.file"));
- for(Student s:stus){
- oos.writeObject(s);
- }
- }else{
- stu=split(data);
- stus.add(stu);
- data=null;
- }
- }else{
- break;
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- //切割传入的字符串对象,返回一个Student对象
- static Student split(String str){
- String name = "";
- int chiaeseSco = 0;
- int math = 0;
- int english = 0;
- if(validata(str)==3){
-
- str=trimAll(str);
- String[] tempStu=str.split(",");
- //转换Student字符串对象
- if(tempStu.length==4){
- name=tempStu[0];
- chiaeseSco=Integer.parseInt(tempStu[1]);
- math=Integer.parseInt(tempStu[2]);
- english=Integer.parseInt(tempStu[3]);
- return new Student(name,chiaeseSco,math,english);
- }else{
- return null;
- }
-
- }
- return null;
- }
-
- //删除所有输入的空格(Ok没问题)
- static String trimAll(String str){
- char[] ch=str.toCharArray();
- StringBuilder sb=new StringBuilder();
- for(int i=0;i<str.length();i++){
- if(ch[i]!=' '){
- sb.append(ch[i]);
- }
- }
- return sb.toString();
- }
-
- //校验格式(OK没有问题)
- static int validata(String str){
- char[] ch=str.toCharArray();
- int count=0;
- for(int i=0;i<str.length();i++){
- if(ch[i]==','){//使用逗号split
- count++;
- }
- }
- return count;
- }
- }
复制代码 那里不足的地方大家一块论论啊!
异常基本都没有处理,大家改的就在后边跟贴吧!!! |