一个最简单的学生管理程序。就是最后一个问题没弄出来,郁闷。要求是:
编写一个程序,用MAP实现学生成绩单的存储和查询,并且对成绩进行排序存储到TREESET中,求出平均成绩、最大值和最小值。
就只有求最大和最小值了。高手请看看吧。我是这样的,希望能够有耐心花1分种看看这段丑陋的代码:
package sameproblem;import java.io.*;
//编写一个程序,用MAP实现学生成绩单的存储和查询,并且对成绩进行排序存储到TREESET中,求出平均成绩、最大值和最小值。
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeSet;
class Student{
String ID;
String Name;
double Grade;
public Student(String id, String name, int grade) {
ID = id;
Name = name;
Grade = grade;
}
public double getGrade() {
return Grade;
}
public void setGrade(int grade) {
Grade = grade;
}
public String getID() {
return ID;
}
public void setID(String id) {
ID = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String toString(){
   return ID+"  "+Name+"  "+Grade;
}
void say(){ System.out.println(toString());
}
}
class MapAndTreeset {
   Map con=new HashMap();
   double num;
public char readCommand(){
BufferedReader br = new 
            BufferedReader(new InputStreamReader(System.in)); 
        char c=0;
       try{
      
          c=(char)br.read(); 
       }catch(IOException ie){
       System.exit(1);
       }
        //System.out.println(c);
       return c;     
}
void showMenu(){
System.out.println("请选择:");
System.out.println("1 添加学生信息");
System.out.println("2 学生信息列表");
System.out.println("3 查询学生信息");
System.out.println("4 所有学生平均成绩");
System.out.println("5 所有学生的最高成绩");
System.out.println("6 所有学生的最低成绩");
System.out.println("7 退出");

}
    void newStudent() throws IOException{
     Student astu=new Student(doID(),doName(),doInt());
con.put(astu.ID, astu);
    
    }
    void searchStudent() throws IOException{
 
System.out.println("请输入查询ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String c=in.readLine();

Student d=(Student)con.get(c);
System.out.println(d);
//return c; }
    static String doID() throws IOException{
System.out.println("请输入ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static String doName() throws IOException{
System.out.println("请输入名字:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static int doInt() throws IOException{
System.out.println("请输入成绩:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int s=Integer.parseInt(in.readLine());
return s;
}
public void listStudents(){
System.out.println("ID "+"Name "+"Grade");
Collection emps=con.values();
Iterator it=emps.iterator();
while(it.hasNext()){
((Student)it.next()).say();
}
}
public void count(){
double sum=0;

Collection emps=con.values();
//TreeSet a=new Collection();
//TreeSet set=new TreeSet();
Iterator it=emps.iterator();
while(it.hasNext()){
for(int i=0;i<emps.size();i++){
sum=sum+((Student)it.next()).Grade;

}
num=sum/(double)emps.size();
//Student max=(Student) ((TreeSet) emps).first();
System.out.println("所有学生的平均成绩为: "+num);
//max.say();就是这些地方,不知道怎么放到TreeSet中取最大和最小值。唉~弄了好久了
//System.out.println(max.say());
}
}
public static void main(String args[]) throws IOException{
MapAndTreeset demo=new MapAndTreeset();
    boolean flag=true;
while(flag){
demo.showMenu();
char c=demo.readCommand();
switch(c){
case '1':
demo.newStudent();
break;
case '2':
demo.listStudents();
break;
case '3':
demo.searchStudent();
break;
case '4':
demo.count();
case '5':
break;

case '6':
break;
case '7':
flag=false;
break;
default:
System.out.println("Command not found!Please choise again.");
}
}
}
}

解决方案 »

  1.   

    有一些包没有导入我改了一下得到了正确的结果只要把import部分该一下就可以了。我能正常运行的源代码:
    ----------------------------------------------------------------
    import java.util.*;
    import java.io.*;
    class Student{
        String ID;
        String Name;
        double Grade;
        public Student(String id, String name, int grade) {
            ID = id;
            Name = name;
            Grade = grade;
        }
        public double getGrade() {
            return Grade;
        }
        public void setGrade(int grade) {
            Grade = grade;
        }
        public String getID() {
            return ID;
        }
        public void setID(String id) {
            ID = id;
        }
        public String getName() {
            return Name;
        }
        public void setName(String name) {
            Name = name;
        }
        public String toString(){
            return ID+"  "+Name+"  "+Grade;
        }
        void say(){
            
            System.out.println(toString());
        }
    }
    class MapAndTreeset {
        Map con=new HashMap();
        double num;
        public char readCommand(){
            BufferedReader br = new
                    BufferedReader(new InputStreamReader(System.in));
            char c=0;
            try{
                
                c=(char)br.read();
            }catch(IOException ie){
                System.exit(1);
            }
            //System.out.println(c);
            return c;
        }
        void showMenu(){
            System.out.println("请选择:");
            System.out.println("1 添加学生信息");
            System.out.println("2 学生信息列表");
            System.out.println("3 查询学生信息");
            System.out.println("4 所有学生平均成绩");
            System.out.println("5 所有学生的最高成绩");
            System.out.println("6 所有学生的最低成绩");
            System.out.println("7 退出");
            
        }
        void newStudent() throws IOException{
            Student astu=new Student(doID(),doName(),doInt());
            con.put(astu.ID, astu);
            
        }
        void searchStudent() throws IOException{
            
            System.out.println("请输入查询ID:");
            BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
            String c=in.readLine();
            
            Student d=(Student)con.get(c);
            System.out.println(d);
    //return c;
            
        }
        static String doID() throws IOException{
            System.out.println("请输入ID:");
            BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
            String s=in.readLine();
            return s;
        }
        static String doName() throws IOException{
            System.out.println("请输入名字:");
            BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
            String s=in.readLine();
            return s;
        }
        static int doInt() throws IOException{
            System.out.println("请输入成绩:");
            BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
            int s=Integer.parseInt(in.readLine());
            return s;
        }
        public void listStudents(){
            System.out.println("ID "+"Name "+"Grade");
            Collection emps=con.values();
            Iterator it=emps.iterator();
            while(it.hasNext()){
                ((Student)it.next()).say();
            }
        }
        public void count(){
            double sum=0;
            
            Collection emps=con.values();
    //TreeSet a=new Collection();
    //TreeSet set=new TreeSet();
            Iterator it=emps.iterator();
            while(it.hasNext()){
                for(int i=0;i<emps.size();i++){
                    sum=sum+((Student)it.next()).Grade;
                    
                }
                num=sum/(double)emps.size();
    //Student max=(Student) ((TreeSet) emps).first();
                System.out.println("所有学生的平均成绩为: "+num);
    //max.say();就是这些地方,不知道怎么放到TreeSet中取最大和最小值。唉~弄了好久了
    //System.out.println(max.say());
            }
        }
        public static void main(String args[]) throws IOException{
            MapAndTreeset demo=new MapAndTreeset();
            boolean flag=true;
            while(flag){
                demo.showMenu();
                char c=demo.readCommand();
                switch(c){
                    case '1':
                        demo.newStudent();
                        break;
                    case '2':
                        demo.listStudents();
                        break;
                    case '3':
                        demo.searchStudent();
                        break;
                    case '4':
                        demo.count();
                    case '5':
                        break;
                        
                    case '6':
                        break;
                    case '7':
                        flag=false;
                        break;
                    default:
                        System.out.println("Command not found!Please choise again.");
                }
            }
        }
    }
    运行时结果:
    -------------------------------------------------------------------------
    请选择:
    1 添加学生信息
    2 学生信息列表
    3 查询学生信息
    4 所有学生平均成绩
    5 所有学生的最高成绩
    6 所有学生的最低成绩
    7 退出
    1
    请输入ID:
    33
    请输入名字:
    33
    请输入成绩:
    78
    请选择:
    1 添加学生信息
    2 学生信息列表
    3 查询学生信息
    4 所有学生平均成绩
    5 所有学生的最高成绩
    6 所有学生的最低成绩
    7 退出
    2
    ID Name Grade
    33  33  78.0
    请选择:
    1 添加学生信息
    2 学生信息列表
    3 查询学生信息
    4 所有学生平均成绩
    5 所有学生的最高成绩
    6 所有学生的最低成绩
    7 退出
    3
    请输入查询ID:
    33
    33  33  78.0
    请选择:
    1 添加学生信息
    2 学生信息列表
    3 查询学生信息
    4 所有学生平均成绩
    5 所有学生的最高成绩
    6 所有学生的最低成绩
    7 退出
    4
    所有学生的平均成绩为: 78.0
    请选择:
    1 添加学生信息
    2 学生信息列表
    3 查询学生信息
    4 所有学生平均成绩
    5 所有学生的最高成绩
    6 所有学生的最低成绩
    7 退出
      

  2.   

    这个程序是没有问题的,我import TreeSet包是为了把Map集合放到TreeSet中,但是怎么放呢?
    放进去之后怎么排序,我的目的是要取出集合中最大的和最小的值。
    我把取最大和最小的方法一起加到了count()中,是为了实验,成功后再做二个方法来放这两个逻辑。
    大家加油啊,帮帮忙。谢谢各位了~
      

  3.   

    结果还是我自己弄出来了,方法实在是很笨拙。唉~技术实在是有待提高。
    需要代码的朋友可以看一看。
    //编写一个程序,用MAP实现学生成绩单的存储和查询,并且对成绩进行排序存储到TREESET中,求出平均成绩、最大值和最小值。
    import java.io.*;
    import java.util.*;
    class Student{
    String ID;
    String Name;
    double Grade;
           Student(){
            
           }
    public Student(String id, String name, int grade) {
    ID = id;
    Name = name;
    Grade = grade;
    }
    public double getGrade() {
    return Grade;
    }
    public void setGrade(int grade) {
    Grade = grade;
    }
    public String getID() {
    return ID;
    }
    public void setID(String id) {
    ID = id;
    }
    public String getName() {
    return Name;
    }
    public void setName(String name) {
    Name = name;
    }
    public String toString(){
       return ID+"  "+Name+"  "+Grade;
    }
    void say(){ System.out.println(toString());
    }
    }
    class MapAndTreeset {
       Map con=new TreeMap();
       Set set=new TreeSet();
       double num;
    public char readCommand(){
    BufferedReader br = new 
                BufferedReader(new InputStreamReader(System.in)); 
            char c=0;
           try{
          
              c=(char)br.read(); 
           }catch(IOException ie){
           System.exit(1);
           }
            //System.out.println(c);
           return c;     
    }
    void showMenu(){
    System.out.println("请选择:");
    System.out.println("..............1 添加学生信息...........");
    System.out.println("..............2 学生信息列表...........");
    System.out.println("..............3 查询学生信息...........");
    System.out.println("..............4 所有学生平均成绩........");
    System.out.println("..............5 所有学生的最高成绩.......");
    System.out.println("..............6 所有学生的最低成绩.......");
    System.out.println("..............7 退出..................");

    }
        void newStudent() throws IOException{
         Student astu=new Student(doID(),doName(),doInt());
         //Integer id=new Integer(Integer.parseInt(astu.ID));
    con.put(astu.ID, astu);
    set.add(astu.ID);
        
        }
        void searchStudent() throws IOException{
     
    System.out.println("请输入查询ID:");
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    String c=in.readLine();

    Student d=(Student)con.get(c);
    System.out.println(d);
    //return c; }
        static String doID() throws IOException{
    System.out.println("请输入ID:");
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    String s=in.readLine();
    return s;
    }
    static String doName() throws IOException{
    System.out.println("请输入名字:");
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    String s=in.readLine();
    return s;
    }
    static int doInt() throws IOException{
    System.out.println("请输入成绩:");
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    int s=Integer.parseInt(in.readLine());
    return s;
    }
    public void listStudents(){
    System.out.println("ID "+"Name "+"Grade");
    Collection emps=con.values();
    Iterator it=emps.iterator();
    while(it.hasNext()){
    ((Student)it.next()).say();
    }
    }
    public void count(){
    double sum=0;

    Collection emps=con.values();
    Iterator it=emps.iterator();
    while(it.hasNext()){
    for(int i=0;i<emps.size();i++){
    sum=sum+((Student)it.next()).Grade;
    }
    num=sum/(double)emps.size();
    System.out.println("所有学生的平均成绩为: "+num);
    }
    }
    public void maxGrade(){
    Iterator it2=set.iterator();
    Student value=new Student();
    while(it2.hasNext()){
    //String xx=(String)((TreeSet)set).firt();
    String keys=(String)it2.next();
    value=(Student)con.get(keys);
    }
    value.say();
    }
    public void mixGrade(){
    Iterator it2=set.iterator();
    Student value=new Student();
    if(it2.hasNext()){
    String keys=(String)it2.next();
    value=(Student)con.get(keys);
    }
    value.say();
    }
    public static void main(String args[]) throws IOException{
    MapAndTreeset demo=new MapAndTreeset();
        boolean flag=true;
    while(flag){
    demo.showMenu();
    char c=demo.readCommand();
    switch(c){
    case '1':
    demo.newStudent();
    break;
    case '2':
    demo.listStudents();
    break;
    case '3':
    demo.searchStudent();
    break;
    case '4':
    demo.count();
    break;
    case '5':
    demo.maxGrade();
    break;
    case '6':
    demo.mixGrade();
    break;
    case '7':
    flag=false;
    break;
    default:
    System.out.println("Command not found!Please choise again.");
    }
    }
    }
    }
      

  4.   

    从map中放入set很简单:
    Map <String,Integer>map = new HashMap<String,Integer>();
    map.put("1",99);
    ................
    看你的程序定义了;
    Set <Map.Entry<String, Integer>> set = new TreeSet();
    对set排序
    你可以实现一个Comparator
    如:
    如果你有student类
    则可在student类中实现
    也可以单独实现
    Student s1 = (Student)arg0;
    Student s2 = (Student)arg1;
    if(s1.getScore()==s2.getScore()){
    return 0;
    }else if(s1.getScore()<s2.getScore()){
    return -1;
    }else{
    return 1;
         }
    其他的根据你的程序来具体确定了。思路是这样的!
      

  5.   

    遍历一次不就得了,MAX = 0;MIN = 0
    IF(TEMP>MAX){
    MAX = TEMP;
    }
    IF(TEMP<MIN){
    MIN = TEMP;
    }
      

  6.   

    你的Student如果实现Comparator接口,就很好排序了。排序后,
    取第一个和最后一个,就是你要的。
    实现Comparator接口的class排序,基本是最优化的排序了。
      

  7.   

    http://blog.csdn.net/lcllcl987/archive/2005/06/27/405112.aspx