A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马云 中级黑马   /  2012-3-23 17:03  /  2070 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马云 于 2012-3-23 17:05 编辑

/*
有五个学生,每个学生有3门课的成绩
从键盘输入以上数据(包括姓名,三门课成绩)
输入的格式:如:zhangsan,30,40,60计算出总成绩,
并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。
1)描述学生对象
2)定义一个可操作学生对象的工具类
思想:
1,通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。
2。因为学生有很多,那么就需要存储,使用到集合,因为要对学生的总分排序。所以可以使用treeSet
3,将集合的信息写入到一个文件中
*/

Student.java
  1. package demo;
  2. public class Student implements Comparable<Student>{
  3.         String name;
  4.         int chiaeseSco;
  5.         int math;
  6.         int english;
  7.         public Student(String name,int chia,int math,int eng){
  8.                 this.name=name;
  9.                 this.chiaeseSco=chia;
  10.                 this.math=math;
  11.                 this.english=eng;
  12.         }
  13.         public String getName() {
  14.                 return name;
  15.         }
  16.         public void setName(String name) {
  17.                 this.name = name;
  18.         }
  19.         public int getChiaeseSco() {
  20.                 return chiaeseSco;
  21.         }
  22.         public void setChiaeseSco(int chiaeseSco) {
  23.                 this.chiaeseSco = chiaeseSco;
  24.         }
  25.         public int getMath() {
  26.                 return math;
  27.         }
  28.         public void setMath(int math) {
  29.                 this.math = math;
  30.         }
  31.         public int getEnglish() {
  32.                 return english;
  33.         }
  34.         public void setEnglish(int english) {
  35.                 this.english = english;
  36.         }
  37.         public String toString() {
  38.                
  39.                 return "name:"+name+"      chiaeseSco:"+chiaeseSco+"      math:"+math+"      english:"+english+"      sum"+this.scoSum();
  40.         }
  41.         public int scoSum(){
  42.                 return chiaeseSco+math+english;
  43.         }
  44.         public int compareTo(Student o) {
  45.                
  46.                 int num=o.scoSum()-this.scoSum();
  47.                 if(num==0){
  48.                         return this.getName().compareTo(o.getName());
  49.                 }
  50.                 return num;
  51.         }
  52.        

  53. }
  54. /*
  55. 有五个学生,每个学生有3门课的成绩
  56. 从键盘输入以上数据(包括姓名,三门课成绩)
  57. 输入的格式:如:zhangsan,30,40,60计算出总成绩,
  58. 并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。
  59. 1)描述学生对象
  60. 2)定义一个可操作学生对象的工具类
  61. 思想:
  62. 1,通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。
  63. 2。因为学生有很多,那么就需要存储,使用到集合,因为要对学生的总分排序。所以可以使用treeSet
  64. 3,将集合的信息写入到一个文件中
  65. */
复制代码
IOexample.java
  1. package demo;

  2. import java.io.*;
  3. import java.util.TreeSet;

  4. public class IOexample {
  5.         public static void main(String[] args) {
  6.                 BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
  7.                 TreeSet<Student> stus=new TreeSet<Student>();
  8.                 String data=null;
  9.                 Student stu=null;
  10.                 try {
  11.                         while((data=bfr.readLine())!=null){
  12.                                 if(!data.equals("")){
  13.                                         if(data.equals("over")){
  14.                                                 //此入如果输入over将集合的数据写入到文件流
  15.                                                 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("student.file"));
  16.                                                 for(Student s:stus){
  17.                                                         oos.writeObject(s);
  18.                                                 }
  19.                                         }else{
  20.                                                 stu=split(data);
  21.                                                 stus.add(stu);
  22.                                                 data=null;
  23.                                         }
  24.                                 }else{
  25.                                         break;
  26.                                 }
  27.                         }
  28.                 } catch (IOException e) {
  29.                         e.printStackTrace();
  30.                 }
  31.         }
  32.        
  33.         //切割传入的字符串对象,返回一个Student对象
  34.         static Student split(String str){
  35.                 String name = "";
  36.                 int chiaeseSco = 0;
  37.                 int math = 0;
  38.                 int english = 0;
  39.                 if(validata(str)==3){
  40.                        
  41.                         str=trimAll(str);
  42.                         String[] tempStu=str.split(",");
  43.                         //转换Student字符串对象
  44.                         if(tempStu.length==4){
  45.                                 name=tempStu[0];
  46.                                 chiaeseSco=Integer.parseInt(tempStu[1]);
  47.                                 math=Integer.parseInt(tempStu[2]);
  48.                                 english=Integer.parseInt(tempStu[3]);
  49.                                 return new Student(name,chiaeseSco,math,english);
  50.                         }else{
  51.                                 return null;
  52.                         }
  53.                        
  54.                 }
  55.                 return null;
  56.         }
  57.        
  58.         //删除所有输入的空格(Ok没问题)
  59.         static String trimAll(String str){
  60.                 char[] ch=str.toCharArray();
  61.                 StringBuilder sb=new StringBuilder();
  62.                 for(int i=0;i<str.length();i++){
  63.                         if(ch[i]!=' '){
  64.                                 sb.append(ch[i]);
  65.                         }
  66.                 }
  67.                 return sb.toString();
  68.         }
  69.        
  70.         //校验格式(OK没有问题)
  71.         static int validata(String str){
  72.                 char[] ch=str.toCharArray();
  73.                 int count=0;
  74.                 for(int i=0;i<str.length();i++){
  75.                         if(ch[i]==','){//使用逗号split
  76.                                 count++;
  77.                         }
  78.                 }
  79.                 return count;

  80. }
  81. }

复制代码
那里不足的地方大家一块论论啊!

异常基本都没有处理,大家改的就在后边跟贴吧!!!

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

6 个回复

倒序浏览
不能沉了啊!
回复 使用道具 举报
student.file 贴出来
回复 使用道具 举报
liumeng 发表于 2012-3-23 17:35
student.file 贴出来

你运行下就有了,我的在公司电脑上了。
回复 使用道具 举报
这个题既然是获取键盘录入生成对象,那么set、get方法可以不用,而且你上面用到ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("student.file"));  你需要序列化对象吗? 题目只是说让以高到底存入到txt文件中, 还有你需要把Student对象存入集合中,以实现排序,那么你必须在这个Student重写equals和hashcode方法。来判断存入的对象是否有重复,应该实现姓名和各科成绩相同就作为同一个人。  
回复 使用道具 举报
有public int compareTo(Student o) {

45.               

46.                int num=o.scoSum()-this.scoSum();

47.                if(num==0){

48.                        return this.getName().compareTo(o.getName());

49.                }

50.                return num;

51.        }

回复 使用道具 举报
马强 中级黑马 2012-3-24 08:00:17
7#
异常是一定要有地
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马