数据结构实习报告
一、需求分析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.《数据结构》