数据结构实习报告

时间:2024.5.9

数据结构实习报告

一、需求分析1、 程序所实现的功能;2、 程序的输入,包含输入的数据格式和说明;3、 程序的输出,程序输出的形式;4、 测试数据,如果程序输入的数据量比较大,需要给出测试数据;5、 合作人及其分工二、设计说明

1、 主要的数据结构设计说明;2、 程序的主要流程图;3、 程序的主要模块,要求对主要流程图中出现的模块进行说明4、 程序的主要函数及其伪代码说明 (不需要完整的代码) ;5、 合作人设计分工三、上机结果及体会

1、 合作人编码分工2、 实际完成的情况说明(完成的功能,支持的数据类型等);3、 程序的性能分析,包括时空分析;4、 上机过程中出现的问题及其解决方案;5、 程序中可以改进的地方说明;6、 程序中可以扩充的功能及设计实现假想; 说明:1、 如果程序比较大,可以将设计说明分为概要设计和详细设计两部分。概要设计主要负责程序的流程、模块、抽象数据类型设计;详细设计负责程序的数据类型定义和主要函数的说明。2、 设计说明中,不需要写出代码或者模块的详细代码,只需要写出主要函数的伪代码说明。


第二篇:数据结构 实习报告


长 春 理 工 大 学

学 生 实 习 报 告

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.《数据结构》  

更多相关推荐:
数据结构实训报告

数据结构课程设计报告题目班级姓名学号指导教师实现两个链表的合并08计管2班肖丽娜20xx年6月17日目录一课程设计的性质目的及要求3一课程设计性质3二设计目的3三设计要求3二任务描述3三软件环境4四算法设计思想...

中国地质大学(武汉)信息工程学院 数据结构实习报告

数据结构课程设计学生姓名占昭班学号20xx1003494指导教师吴亮中国地质大学武汉信息工程学院20xx年11月1题目nngt20的阶乘问题描述大数运算计算n的阶乘ngt20基本要求1数据的表示和存储11累积运...

数据结构课程实习报告

数据结构课程实习报告一需求分析1本程序要求根据输入建立图书名称表采用散列表实现该表散列函数选用BKDE字符串哈希2若查找成功则在界面出现要查找的图书若查找不成功则输出此书不存在查找不成功2输入344a5ans6...

数据结构~实训报告(模板)

数据结构课程实践设计报告专业:计算机科学与技术班级名称:08统招本科组别:第6组组长:姓名:学号:指导教师:地点:实训基地实验楼南昌理工学院计算机系20##年1月8日一、实训题目:表达式的处理与实现二、实训目的…

数据结构实习报告

数据结构上机实验报告院系计算机科学与技术学院学号0906840440姓名姚凌翔指导老师张宏实验一多项式相乘实验内容及要求题目hchahb要求1输入形式以系数指数ltEntergt的递减序输入最后以00ltEnt...

数据结构实习报告_图

数据结构课程设计实习报告题目学号姓名年级学院专业完成日期授课教师图的基本操作1210522何厚华大二计算机与控制工程学院计算机科学与技术20xx年5月21日辛运帏目录1题目22要求23程序实现331程序运行及编...

数据结构实训报告

山东科技大学泰山科技学院课程实训说明书课程:数据结构项目实训题目:院系:信息工程系专业班级:计算机科学与技术12-1学号:学生姓名:指导教师:20##年5月25日成绩评语:指导教师目录一、设计题目.......…

数据结构多项式相加程序实习报告

实习一实验报告1需求及规格说明本次实习要求完成一个程序实现两个多项式的加法为了练习单链表的操作要求对两个多项式实现合并同类项2设计设计思想每个节点有两个数据系数和次数同时含有指向下一个节点的指针在实现加法的时候...

西北农林科技大学数据结构实习报告书

数据结构与C语言综合训练实习报告信息工程学院数据结构与C语言综合训练报告20xx20xx学年第二学期报告题目文件目录管理系统姓名专年级班级指导教师完成日期1数据结构与C语言综合训练实习报告一综合训练目的和要求本...

数据结构实习报告二叉树

数据结构课程设计实习报告题目:B树的建立,插入与删除学号:姓名:年级:大二学院:信息技术科学学院专业:计算机科学与技术专业1.题目2.B树的表示及基本操作的实现。3.1.掌握B树的存贮结构。4.2.实现B树中关…

数据结构实习报告--集合的并交叉运算

集合的并交和差运算软件工程3班尚杰20xx2344922一需求分析设计目的通过集合运算的实现熟练掌握线性表的基本操作在两种存储结构上的实现其中以各种链表的操作和应用作为重点内容1本演示程序中集合的元素限制在小写...

数据结构实习报告 魔王语言

数据结构实习报告题目设计一个魔王语言解释系统班级信息管理与信息系统111姓名崔佳学号20xx01050903完成日期20xx0602一需求分析1本演示程序中魔王语言限制在小写字母az之间且必须限制在括号内以及大...

数据结构实习报告(28篇)