数据结构 实习报告

长 春 理 工 大 学

学 生 实 习 报 告

20## 20## 学年第一学期

实习类别:             课程设计                 

学    院:             计算机学院               

专    业:             网络工程                 

班    级:                                 

姓    名:                         

20##年12月 29 日


一、需求分析

参加运动会有n个学校,学校编号为1……n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1......m,女子m+1......m+w.不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)

【功能要求】:

1)        可以输入各个项目的前三名或前五名的成绩;

2)        能统计各学校总分;

3)        可以按学校编号、学校总分、男女团体总分排序输出;

4)        可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

5)输出形式:有中文提示,各学校分数为整形

6)存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

二、       算法的基本思想   

算法的主要思路是:

1.函数main()用来输入m,n,w,将其用作参数确定input()中数组的大小;

基本思路如下:

(1)提示并等待输入m,n,w

(2)完成后进入主菜单

(3)按提示完成相应功能

2.函数input()用来录入前三名或前五名的成绩;

基本思路如下:

(1)根据传进来的参数,确定数组dele[]大小

(2)输入项目名称,根据标志确定录入前三名的还是前五名的成绩

(3)分别存入数组中

3.函数divide()将处理dele[]中数据,并将其存放到二维数组中,并形成学校—信息的形式

基本思路如下:

(1)创建二维数组school[][],第一个参数是学校,第二个是dele[]中的信息

(2)将信息分别放入到对应得位置

(3)形成学校—信息

4.函数malesort(),femalesort() 用来处理男女团体的得分的排序。

基本思路如下:

(1)调用divide()。

(2)根据” 男”,”女”的标志分别得到每个学校的男女得分

(3)分别用冒泡排序法的到从大到小的排序

5.函数 sumScore()用来的到学校的总分

基本思路如下:

(1)创建school[]的一维数组

(2)调用divide()函数

(3)循环累加各项得分,得到各学校总分

6.函数sumsort(boolean b)用来按学校编号、学校总分排序

基本思路如下:

(1)调用sumScore()

(2)若b=false,则利用冒泡排序法,按学校编号由大到小排序

(3)若b=true,则利用冒泡排序法,按学校总分由大到小排序

7.函数search() 用来  /按学校编号  和  项目查询

基本思路如下:

(1)输入学校编号和项目

(2)判断是否有数据,并对其处理

(3)输出此学校在某项目的运动员详细信息

8.函数searchitem()用来按按项目查前三或前五的成绩

基本思路如下:

(1)输入某项目的名称

(2)判断是否存在此项目

(3)得到前三或前五名学校的编号

8.函数outFile() 用来存数据记录

基本思路如下:

(1)创建FileWriter对象

(2)写入文件信息

9. 主要代码如下:

public class Text {

    public static Scanner s = new Scanner(System.in);

    static Severdele sd;

    public static void main(String[] args) {

        int n, m, w;

        String str1[] = { "跳远", "跳高", "接力", "标枪" };//可取前三名的项目

        String str2[] = { "长跑", "短跑", "铅球", "1000米" };//可取前五项

        System.out.println("可取前三名的有:");

        for (int i = 0; i < str1.length; i++)//循环输出Str1

            System.out.println(str1[i] + " ");

        System.out.println("  ");

        System.out.println("可取前五项:");

        for (int i = 0; i < str2.length; i++)//循环输出Str2

            System.out.println(str2[i] + " ");

        System.out.println("  ");

        System.out.println("参赛学校个数  可取前三名项目的个数   可取前五名项目的个数 :");

        n = s.nextInt();//参赛学校个数 

        m = s.nextInt();//可取前三名项目的个数

        w = s.nextInt();//可取前五名项目的个数

        System.out.println(n + "个学校参加项目" + m + "可以取前三的项目和" + w + "个可取前五的项目");

        System.out.println();

        sd = new Severdele(n, m, w);//创建Severdele的对象

        boolean bool = true;//起始条件    false 为退出程序    true 为进行

        int p;//用于Switch 的选择

        while (bool) {

            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 其他退出");

            p = s.nextInt();

            switch (p) {

            case 1:

                sd.input();//输入成绩

                break;

            case 2:

                sort();//进入排序的的菜单

                break;

            case 3:

                sd.search();//按学校编号查询某项信息

                break;

            case 4:

                sd.searchitem();//按项目查询前三或前五的学校

                break;

            case 5:

                sd.outFile();//数据存入

                break;

            case 6://其他退出

                bool = false;

                System.out.println("退出了");

                break;

            }

        }

    }

    public static void sort() {

        boolean bool = true;

        int k;

        while (bool) {

            System.out.println("1   按学校编号排序 ");

            System.out.println("2  学校总分排序");

            System.out.println("3  男团总分排序");

            System.out.println("4  女团总分排序");

            System.out.println("5  其他退出  ");

            k = s.nextInt();

            switch (k) {

            case 1:

                sd.sumsort(false);

                break;

            case 2:

                sd.sumsort(true);

                break;

            case 3:

                sd.malesort();

                break;

            case 4:

                sd.femalesort();

                break;

            case 5:

                bool = false;

                System.out.println("退出了");

                break;

            }

        }

    }

}

public void input(){

            stu=new Dele[3*m+5*w];//数组的大小 

            //System.out.println(stu.length);

        for(int i=0;i

        {

            stu[i]=new Dele();//循环创建  Stu对象

        }  

            String numitem;//项目名

            int numSchool;//学校编号

            int nameStudent;//学生的编号

            int rank;//名次

            int score;//得分

            String sexStudent;//性别

            int j,i;

            j=i=0;

            //int j=0;

            boolean flag1=false;//标志  用来判断是取前三的  还是去前五的项目

            boolean flag2=false;

            for(;i<3*m+5*w;){

                String str1[]={"跳远","跳高","接力","标枪"};//定好的项目   st1 取前三    st2取前五

                String str2[]={"长跑","短跑","铅球","1000米"};

                System.out.println("输入项目名称:");

                numitem=s.next();

                stu[i].setNumitem(numitem);

               

                for(int k=0;k

                   

                    if(str1[k].equals(numitem)){

                        flag1=true;

                        flag2=false;

                    }

                    elseif(str2[k].equals(numitem)){

                        flag1=false;

                        flag2=true;

                    }

                }

                if(flag1){

                    System.out.println("前三名学校编号   选手编号   取得名次  得分  性别");

                for(j=i;j

                    numSchool=s.nextInt();

                    nameStudent=s.nextInt();

                    rank=s.nextInt();

                    score=s.nextInt();

                    sexStudent=s.next();

                   

                    stu[j].setNumitem(numitem);

                    stu[j].setNumSchool(numSchool);

                    stu[j].setNameStudent(nameStudent);

                    stu[j].setRank(rank);

                    stu[j].setScore(score);

                    stu[j].setSexStudent(sexStudent);

                    System.out.println("录入完成");

                }

                i=j;

               

                }

                elseif(flag2){

                    System.out.println("前五名的....");

                    for(j=i;j

                        numSchool=s.nextInt();

                        nameStudent=s.nextInt();

                        rank=s.nextInt();

                        score=s.nextInt();

                        sexStudent=s.next();

                        stu[j].setNumitem(numitem);

                        stu[j].setNumSchool(numSchool);

                        stu[j].setNameStudent(nameStudent);

                        stu[j].setRank(rank);

                        stu[j].setScore(score);

                        stu[j].setSexStudent(sexStudent);

                        System.out.println("录入完成");

                    }

                    i=j;

                }else{

                    System.out.println("项目名错,重新输入");

                }

            }

        }

public void divide(){

            Dele dd[]=new Dele[3*m+5*w];

            pp=new Dele[n][3*m+5*w];//n代表每个学校   里面有详细信息   如运动员编号  得分  性别等 

            for(int i=0;i

                for(int j=0;j

                    pp[i][j]=new Dele();//向每个学校添加详细信息

            for(int i=0;i

                dd[i]=new Dele();

            for(int i=0;i

                dd[i]=stu[i];//将stu[]里的信息 装入dd[]

            }

            for(int i=0,k=0;i

                if(dd[i]!=null){

                    pp[k][0]=dd[i];

                    for(int j=i+1;j

    if(dd[j]!=null&&dd[i].getNumSchool()==dd[j].getNumSchool()){

                            pp[k][j]=dd[j];

                            dd[j]=null;

                        }

                    k++;

                }

            }

        }

    public void malesort(){

        String man="男";

        School ss1[]=new School[n];

        for(int i=0;i

            ss1[i]=new School();

        int maleschoolscore[]=newint[n];

        this.divide();

        for(int i=0;i

            for(int j=0;j

                if(man.equals(pp[i][j].getSexStudent()))

                    maleschoolscore[i]+=pp[i][j].getScore();

            }

        for(int i=0;i

            ss1[i].setSchoolnum(pp[i][0].getNumSchool());

            ss1[i].setSchoolscore(maleschoolscore[i]);

        }

        int i,j;

        School  index;//男团排序

        for(i=0;i

            for(j=i+1;j

                if(ss1[i].getSchoolscore()

                    index=ss1[i];

                    ss1[i]=ss1[j];

                    ss1[j]=index;

                }

        System.out.println("学校男团体总分排序:");

        for(i=0;i

            System.out.println(ss1[i].getSchoolnum()+"  "+ss1[i].getSchoolscore());

    }

    public void femalesort(){

        String woman="女";

        School ss1[]=new School[n];

        for(int i=0;i

            ss1[i]=new School();

        int femaleschoolscore[]=newint[n];

        this.divide();

        for(int i=0;i

            for(int j=0;j

                if(woman.equals(pp[i][j].getSexStudent()))

                    femaleschoolscore[i]+=pp[i][j].getScore();

            }

        for(int i=0;i

            ss1[i].setSchoolnum(pp[i][0].getNumSchool());

            ss1[i].setSchoolscore(femaleschoolscore[i]);

        }

        int i,j;

        School  index;//女团排序

        for(i=0;i

            for(j=i+1;j

                if(ss1[i].getSchoolscore()

                    index=ss1[i];

                    ss1[i]=ss1[j];

                    ss1[j]=index;

                }

        System.out.println("学校女团体总分排序:");

        for(i=0;i

            System.out.println(ss1[i].getSchoolnum()+"  "+ss1[i].getSchoolscore());

    }

    public void sumScore(){//得到学校的总分

        schoolscore=newint[n];

        ss=new School[n];

        for(int i=0;i

            ss[i]=new School();

        this.divide();

        for(int i=0;i

            for(int j=0;j

                schoolscore[i]+=pp[i][j].getScore();

            }

        for(int i=0;i

            ss[i].setSchoolnum(pp[i][0].getNumSchool());

            ss[i].setSchoolscore(schoolscore[i]);

        }

    }

    public void sumsort(boolean b){

        int i,j;

        School index;

        this.sumScore();

        if(b){                //b  为标志  false--按学校编号排序    true--按总分

            for(i=0;i

                for(j=i+1;j

                    if(ss[i].getSchoolscore()

                        index=ss[i];

                        ss[i]=ss[j];

                        ss[j]=index;

                    }

            }

            System.out.println("按学校总分排序:");

            for(i=0;i

                System.out.println(ss[i].getSchoolnum()+"  "+ss[i].getSchoolscore());

        }

        else{

            for(i=0;i

                for(j=i+1;j

                    if(ss[i].getSchoolnum()

                        index=ss[i];

                        ss[i]=ss[j];

                        ss[j]=index;

                    }

            }

            System.out.println("按学校编号排序:");

            for(i=0;i

                System.out.println(ss[i].getSchoolnum()+"  "+ss[i].getSchoolscore());

        }

    }

    public void search(){//按学校编号  和  项目查询

        int num;

        String name;

        boolean bl=true;

        System.out.println("输入学号和项目名:");

        num=s.nextInt();

        name=s.next();

        for(int i=0;i

            if(num==stu[i].getNumSchool()&&name.equals(stu[i].getNumitem())){

                System.out.println("学校"+num+"的"+name+"信息:");

                bl=false;

                System.out.println(stu[i].getNumSchool()+" "+stu[i].getNumitem()+" "+stu[i].getNameStudent()+" "+stu[i].getSexStudent()+" "+stu[i].getRank()+" "+stu[i].getScore());   

            }

        if(bl){

            System.out.println("无信息");

        }

    }

    public void searchitem(){//按按项目查前三或前五的成绩

        String itemname;

        boolean t =true;

        System.out.println("输入项目:");

        itemname=s.next();

        System.out.println("该项目前三或前五的学校信息:");

        for(int i=0;i

            if(itemname.equals(stu[i].getNumitem())){

                t=false;

                System.out.println(stu[i].getNumSchool()+" "+stu[i].getNumitem()+" "+stu[i].getNameStudent()+" "+stu[i].getSexStudent()+" "+stu[i].getRank()+" "+stu[i].getScore());

            }

            if(t){

                System.out.println("   ");

            }

        }

    }

    public void outFile(){

        FileWriter f;

        try {

            f=new FileWriter("Score.txt");

            for(int i=0;i

                f.write(Integer.toString(stu[i].getNumSchool()));

                f.write("  ");

                f.write(stu[i].getNumitem());

                f.write("   ");

                f.write(" "+stu[i].getNameStudent());

                f.write("   ");

                f.write(stu[i].getSexStudent());

                f.write("   ");

                f.write(" "+stu[i].getRank());

                f.write("   ");

                f.write(" "+stu[i].getScore());

                f.write("\n");

            }

            f.close();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

三、测试数据

程序运行实例如下:

四、系统文件使用说明  

五、心得体会  

通过这次的实践,让我感觉到存储结构的重要性,以及数组使用的广泛性。数组的应用在数据结构中补课缺少的。所以要充分的学习数组以及数组的应用。再次同时,我也学到了许多团队合作的要领,例如分工明确,讨论需求分析等。加强了我的团队合作意识。

六、参考文献  

1.《JAVA程序设计》  

2.《数据结构》  

相关推荐