搜档网
当前位置:搜档网 › 云南大学软件学院数据结构实验4

云南大学软件学院数据结构实验4

云南大学软件学院数据结构实验4
云南大学软件学院数据结构实验4

实验难度: A □ B □ C □

学期:2017秋季学期

任课教师:

实验题目:

组员及组长:

承担工作:

联系电话:

电子邮件:

完成提交时间:年月日

一、【实验构思(Conceive)】(10%)

(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析)

首先输入迷宫数据,在计算机的屏幕上显示一个8行8列的矩阵表示迷宫。矩阵中的每个数据或为通路(以0表示),或为墙(以1表示),所求路径必须是简单路径,即在求得的路径上不能重复出现同一道块。假设以栈S记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作为“当前位置入栈”;从当前路径删除前一通道块的操作为“出栈”。若找到出口,则从栈中弹出数据,在屏幕上显示从入口到出口的路径坐标。

二、【实验设计(Design)】(20%)

(本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等)

1、定义坐标(X,Y):

struct Coor

{

int row;

int column;

int direction;

};

2、定义方向:

struct Move

{

int row;

int column;

};

3、定义/链表结点:

struct LinkNode

{

Coor data;

LinkNode *next;

};

4、定义栈:

class stack

{

private:

LinkNode *top;

public:

stack();

~stack();

void Push(Coor data);

Coor Pop();

Coor GetPop();

void Clear();

bool IsEmpty();

};

5.流程图:

三、【实现(Implement)】(30%)

(本部分应包括:抽象数据类型各操作的具体实现代码、关键操作的具体算法实现、函数实现,主程序实现等,并给出关键算法的时间复杂度分析。如有界面则需包括界面的关键实现方法等。)

1.定义迷宫定义移动的4个方向:

Move move[4]={{0,1},{1,0},{0,-1},{-1,0}};

2.几个函数功能的描述:

stack(); //构造函数,置空栈

~stack(); //析构函数

void Push(Coor data); //把元素data压入栈中

Coor Pop(); //使栈顶元素出栈

Coor GetPop(); //取出栈顶元素

void Clear(); //把栈清空

bool IsEmpty(); //判断栈是否为空

bool Mazepath(int **maze,int m,int n);

//寻找迷宫maze中从(0,0)到(m,n)的路径

//到则返回true,否则返回false

void PrintPath(stack p); //输出迷宫的路径

void PrintPath2(int m,int n,stack p,int **maze); //输出路径

void Restore(int **maze,int m,int n); //恢复迷宫

3.主函数实现:

int main()

{

system("color f5");

int m=0,n=0;

int **maze; //定义二维指针存取迷宫

cout << "**************欢迎使用迷宫游戏模拟程序*************" << endl;

cout << "* 软件工程*" << endl;

cout << "* 孙越*" << endl;

cout << "* 20161120232 *" << endl;

cout << "***************************************************" << endl;

maze=GetMaze(m,n); //调用GetMaze函数,得到迷宫

if(Mazepath(maze,m,n)) //调用Mazepath函数获取路径

cout<<"迷宫路径探索成功!\n";

else

cout<<"路径不存在!\n";

return 0;

}

4.复杂度分析:

空间复杂度:O(1);

时间复杂度:

随机生成迷宫:O(n*n);

探寻出口:O(n*n);

输出迷宫:O(n*n);

判断当前位置可通:O(1)。

四、【测试结果(Testing)】(10%)

(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析,可附截图)

1. 选择以坐标形式输出迷宫:输出如下图所示:

2.选择以方阵形式输出迷宫:输出如下图所示(其中8代表路径,1代表墙)

3.迷宫不存在,路径探索失败:

五、【实验总结】(10%)

(本部分应包括:自己在实验中完成的任务,及存在的问题,所完成实验过程中的具体经验总结、心得)

通过该题目的设计过程,我加深了对栈的逻辑结构,存储结构及入栈出栈过程的理解,对栈的基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。但是程序依旧还存在一些问题,比如开始的时候,调试过程中自己定义不可通取值从ch>='0'&&ch<='9'都可以执行,但是在执行过程中显示迷宫时有“吃墙”现象,有一部分“墙”出现缺失。经过反复调试程序,最后发现在定义

if(maze[p][q]==1)

cout<<"□";

出错,后来改为

if(maze[p][q]>=1)

cout<<"□";

后,吃图现象再没有发生。但是处理了这个问题后还是会在显示迷宫模块的时候有一些迷宫方格,但经过多次调试后还是没能解决。

六、思考题或【项目运作描述(Operate)】(10%)

(注:选择C难度的才需要填写“项目运作描述”,其他难度的只需完成思考题)(项目运作描述应包括:项目的成本效益分析,应用效果等的分析。)接到实验项目后,其实第一个想法是看实验指导书,看了实验指导书之后知道了要设计该程序大概需要什么模块函数,然后根据这些模块一个个做出分析。跟据实现提示,计算机解迷宫通常用的是“穷举求解”方法,即从人口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。用二维数组指针存储迷宫数据,通常设定人口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。

主要操作如下:

1、生成迷宫:根据提示输入数据,然后生成一个8行8列的迷宫。

2、探索迷宫路径:由输入的入口位置开始,对相邻的(上,下,左,右)四个方向的方块进行探索,若可通则“纳入路径”,否则顺着“来向”退到“前一通道块”,朝着“来向”之外的其它方向继续探索。

3、保存迷宫路径:若探索到出口则把探索到的路径压入另一个栈中,并最后弹出路径坐标,输出在屏幕上。

将一个个函数完善后,最重要的就处理函数接口,怎样使各个子模块实施其的详细功能是一个很重要的问题,只有解决了这个问题才能充分调用这些函数,让主程序能够有效调用这些函数。其中最主要的函数就是获取迷宫的二维指针函数和寻找迷宫路径函数,需要弄清楚二维数组指针的操作。最后就是在main()函数中调用这些函数,画了一个函数调用的流程图,根据流程图调用函数,即可实现迷宫问题的操作。

七、【代码】(10%)

(本部分应包括:完整的代码及充分的注释。注意纸质的实验报告无需包括此部分。格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)

#include

#include

#include

#define true 1

#define false 0

using namespace std;

struct Coor //定义描当前位置的结构类型

{

int row;

int column;

int direction;

};

struct Move //定义下一个位置的方向

{

int row;

int column;

};

struct LinkNode //链表结点

{

Coor data;

LinkNode *next;

};

class stack //定义栈

{

private:

LinkNode *top;

public:

stack(); //构造函数,置空栈

~stack(); //析构函数

void Push(Coor data); //把元素data压入栈中

Coor Pop(); //使栈顶元素出栈

Coor GetPop(); //取出栈顶元素

void Clear(); //把栈清空

int IsEmpty(); //判断栈是否为空

};

stack::stack() //构造函数,置空栈

{

top=NULL;

}

stack::~stack() //析构函数

{

}

void stack::Push(Coor x)//把元素data压入栈中

{

LinkNode *TempNode;

TempNode=new LinkNode;

TempNode->data=x;

TempNode->next=top;

top=TempNode;

}

Coor stack::Pop() //使栈顶元素出栈

{

Coor Temp;

LinkNode *TempNode;

TempNode=top;

top=top->next;

Temp=TempNode->data;

delete TempNode;

return Temp;

}

Coor stack::GetPop() //取出栈顶元素

{

return top->data;

}

void stack::Clear() //清空栈

{

top=NULL;

}

int stack::IsEmpty() //判断是否空栈

{

if(top==NULL)

return true;

else

return false;

}

Move move[4]={{0,1},{1,0},{0,-1},{-1,0}}; //定义移动的4个方向

int Mazepath(int **maze,int m,int n); //寻找迷宫maze中从(0,0)到(m,n)的路径,找到则返回true,否则返回false

void PrintPath(stack p); //输出迷宫的路径

void PrintPath2(int m,int n,stack p,int **maze); //输出路径

void Restore(int **maze,int m,int n); //恢复迷宫

int** GetMaze(int &m,int &n); //获取迷宫

//返回存取迷宫的二维指针

int main()

{

system("color f5");

int m=0,n=0;

int **maze; //定义二维指针存取迷宫

cout << "**************欢迎使用迷宫游戏模拟程序*************" << endl;

cout << "* 软件工程*" << endl;

cout << "* 孙越*" << endl;

cout << "* 20161120232 *" << endl;

cout << "***************************************************" << endl;

maze=GetMaze(m,n); //调用GetMaze函数,得到迷宫

if(Mazepath(maze,m,n)) //调用Mazepath函数获取路径

cout<<"迷宫路径探索成功!\n";

else

cout<<"路径不存在!\n";

return 0;

}

int** GetMaze(int &m,int &n)//获取迷宫

{ //返回存取迷宫的二维指针

int **maze;

int i=0,j=0;

cout<<"请输入迷宫的行数和列数:(中间用空格键分开)";

int a,b;

cin>>a>>b;

cout<<"请输入迷宫内容:(0表示通路,1表示不连通。中间用空格键分开)\n";

m=a;

n=b;

maze=new int *[m+2]; //申请长度等于行数加2的二级指针

for(i= 0;i

{

maze[i]=new int[n+2];

}

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

cin>>maze[i][j];

//给迷宫的四周加一堵墙,即把迷宫四周定义为1

for(i=0;i

maze[i][0]=maze[i][n+1]=1;

for(i=0;i

maze[0][i]=maze[m+1][i]=1;

for(int p=0;p

{

for(int q=0;q<=n+2;++q)

{

if(maze[p][q]==0)

cout<<"■";

if(maze[p][q]>=1)

cout<<"□";

}

cout<

}

return maze;//返回存贮迷宫的二维指针maze

}

int Mazepath(int **maze,int m,int n)//寻找迷宫maze中从(0,0)到(m,n)的路径,找到则返回true,否则返回false

{

stack q,p; //定义栈p、q,分别存探索迷宫的存储和路径过程

Coor Temp1,Temp2;

int row,column,loop;

Temp1.row=1;

Temp1.column=1;

q.Push(Temp1); //将入口位置入栈

p.Push(Temp1);

maze[1][1]=8; //标志入口位置已到达过

while(!q.IsEmpty()) //栈q非空,则反复探索

{

Temp2=q.GetPop(); //获取栈顶元素

if(!(p.GetPop().row==q.GetPop().row&&p.GetPop().column==q.GetPop().column))

p.Push(Temp2); //如果有新位置入栈,则把上一个探索的位置存入栈p

for(loop=0;loop<4;loop++) //探索当前位置的4个相邻位置

{

row=Temp2.row+move[loop].row; //计算出新位置x位置值

column=Temp2.column+move[loop].column; //计算出新位置y位置值

if(maze[row][column]==0) //判断新位置是否可达

{

Temp1.row=row;

Temp1.column=column;

maze[row][column]=8; //标志新位置已到达过

q.Push(Temp1); //新位置入栈

}

if((row==(m))&&(column==(n))) //成功到达出口

{

Temp1.row=m;

Temp1.column=n;

Temp1.direction=0;

p.Push(Temp1); //把最后一个位置入栈

char choose;

cout<<"请选择以坐标形式(row,column,direction)输出迷宫选(1)或以方阵形式输出迷宫选(2):";

cin>>choose;

if(choose=='1')

{

PrintPath(p); //坐标显示输出

Restore(maze,m,n);

}

else

{

PrintPath2(m,n,p,maze); //矩阵显示输出

Restore(maze,m,n);

}

return 1; //表示成功找到路径

}

}

if(p.GetPop().row==q.GetPop().row&&p.GetPop().column==q.GetPop().column)

//如果没有新位置入栈,则返回到上一个位置

{

p.Pop();

q.Pop();

}

}

return 0; //表示查找失败,即迷宫无路经

}

void PrintPath(stack p) //输出路径

{

cout<<"迷宫的路径为\n";

cout<<"括号内的内容分别表示为(行坐标,列坐标,数字化方向,方向)\n";

stack t; //定义一个栈,按从入口到出口存取路径

int a,b;

Coor data;

LinkNode *temp;

temp=new LinkNode; //申请空间

temp->data=p.Pop(); //取栈p的顶点元素,即第一个位置

t.Push(temp->data); //第一个位置入栈t

delete temp; //释放空间

while(!p.IsEmpty()) //栈p非空,则反复转移

{

temp=new LinkNode;

temp->data=p.Pop(); //获取下一个位置

//得到行走方向

a=t.GetPop().row-temp->data.row; //行坐标方向

b=t.GetPop().column-temp->data.column;//列坐标方向

if(a==1) temp->data.direction=1; //方向向下,用1表示

else if(b==1) temp->data.direction=2; //方向向右,用2表示

else if(a==-1) temp->data.direction=3;//方向向上,用3表示

else if(b==-1) temp->data.direction=4;//方向向左,用4表示

t.Push(temp->data); //把新位置入栈

delete temp;

}

cout<<"坐标(row,column,direction)中x在指向当前位置所在的行数,y指向当前位置所在的列数,";

cout<<"direction表示下一位置走向。"<

//输出路径,包括行坐标,列坐标,下一个位置方向

while(!t.IsEmpty()) //栈非空,继续输出

{

data=t.Pop();

cout<<'('<

switch(data.direction) //输出相应的方向

{

case 1:cout<<"↓)\n";break;

case 2:cout<<"→)\n";break;

case 3:cout<<"↑)\n";break;

case 4:cout<<"←)\n";break;

case 0:cout<<")\n";break;

}

}

}

void PrintPath2(int m,int n,stack p,int **maze)//输出路径

{

cout<<"迷宫的路径为\n";

for (int i = 0; i < m+2; ++i )

{

for (int j = 0; j < n+2; ++j)

cout << maze[i][j]<<" ";

cout << endl;

}

}

void Restore(int **maze,int m,int n)//恢复迷宫

{

int i,j;

for(i=0;i

for(j=0;j

{

if(maze[i][j]==8) //恢复探索过位置,即把-1恢复为0

maze[i][j]=0;

}

}

云南大学软件学院数据结构实验三实验报告——文件加密译码器

云南大学软件学院数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 学期: 任课教师: 实验题目: 实验三栈和队列及其应用 小组长: 联系电话: 电子邮件: 完成提交时间:年月日

云南大学软件学院2010学年秋季学期 《数据结构实验》成绩考核表 学号:姓名:本人承担角色:课题分析,算法设计,程序编写,后期调试,完成实验报告 综合得分:(满分100分) 指导教师:年月日 (注:此表在难度为C时使用,每个成员一份。)

云南大学软件学院2010学年秋季学期 《数据结构实验》成绩考核表 学号:姓名:本人承担角色:课题分析,算法设计,后期调试 综合得分:(满分100分) 指导教师:年月日(注:此表在难度为C时使用,每个成员一份。)

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识) 本次实验的目的在于使我们深入了解栈和队列的特性,以便在实际问题背景下灵活运用它们;同时还将巩固对这两种结构构造方法的理解。 核心算法:加密与解密算法。 加密算法:将文件各位取反,再加上密码值。构成密文。 解密算法:将密文减去密码值,在按位取反,获得明文。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 定义一个类MyClass: class MyClass { char *buffer; //定义存储文件的缓存 char name[MAX_PATH]; //来存储用户输入的文件名 char pass[16]; //来存储用户输入的密码 DWORD size, psdlen; //定义变量存储文件的长度,密码的长度DWORD GetSize(); //检查文件的长度 void EncAlg(DWORD bsize); //声明加密函数 void DecAlg(DWORD bsize); //声明解密函数 public: MyClass(char *, char *); //声明构造函数 ~MyClass(); //声明析构函数 FILE *fp; //指向文件流的指针

软件工程实验报告4

软 件 工 程 项 目 分 析火 车 票 售 票 系 统 姓名:杨如意 学号: 111100 班级:2010级JA V A一班 院系:计算机与信息工程学院软件工程(JA V A方向)

火车票售票系统 一、项目概述 1.1项目简介 火车票售票系统是一款针对全国各大乘客集散地,方便工作人员和乘客顺利抵达目的地的便捷操作软件,乘客集散地只需安装本系统,配备专业的操作人员,即可安全、有序地完成人员输送任务。 1.2项目功能 火车票售票系统可登记全国各地的客运专线、包括发车时间、到达时间、经过各中转站时间、在各中转站等待时间及发车时间、各站点间距离、票价、各列车车厢容量、座位分布、列车类型、列车车号、车票信息、预定信息、乘客身份信息、乘客携带物品限定信息、车票代售点信息、网络购票、货运信息、网络购票常见问题解决方式、铁路常识等。 1.3功能模块介绍 车票票面信息:包含乘车区间(始发站、终点站)、发车时间、发车日期、乘客身份信息(身份证号、姓名)、乘客所乘列车座位信息(列车车厢号、座位号)、乘客乘车须知、票价、座位类型(硬座、硬卧、软座、软卧)。网络购票信息:查询列车信息(列车时刻表、列车车次)、余票信息、票价信息、退票信息、列车正晚点信息、车票代售点信息、预订信息、货运运费、货运业务咨询。 列车信息:列车车次、列车所属类型(普快、动车、空调特快等)、列车始发站、终点站、中转站、始发时间、到达时间、各站点停靠时间、乘车区间及价格、列车运行时长、已运行时长。 候车室信息:列车车次、列车运行时间(发车时间、到达时间)、对应车次所在候车区域、对应区域所要发车车次。 1.4系统运行要求 该系统主要是针对输送长途旅客。对于后台程序的运行,只需植入到电脑中,由经过培训的售票员操作,熟悉操作流程,对各问题所需操作及应用到的模块等综合问题的解答。 二、可行性研究 2.1可行性研究过程 本系统是针对全国各地的旅客,因此这一问题的解决,这一项目的实现,将更简化整个操作流程,减少人工操作以及由人工操作所引起的人为失误,大大降低了对数据的操作量。本系统所需的是项目人员的研究及整个

云南大学830大学物理考试大纲

云南大学830-《大学物理》考试大纲 一、考查目标 大学物理考试内容涵盖力学、热学、电磁学、光学四门课程。要求考生熟练地掌握普通物理的基础知识和基本理论,具备一定的分析问题和解决问题的能力。 二、考试形式与试卷结构 1、试卷满分及考试时间 试卷满分为150分,考试时间为180分钟。 2、试卷的内容结构 力学 30% 热学 20% 电磁学 30% 光学 20% 3、试卷的题型结构 计算题共10 - 12小题。 三、考察的知识及范围 (一)力学 1. 质点运动学: 矢径;参考系;运动方程;瞬时速度;瞬时加速度;切向加速度; 法向加速度;圆周运动;运动的相对性。 2.质点动力学:

惯性参照系;牛顿运动定律;功;功率;质点的动能;弹性势能; 重力势能;保守力;功能原理;机械能守恒与转化定律;动量、冲量、动量定理;动量守恒定律。 3.刚体的转动: 角速度矢量;质心;转动惯量;转动动能;转动定律;力矩;力矩的功;定轴转动中的转动动能定律;角动量和冲量矩;角动量定理;角动量守恒定律。 4.简谐振动和波: 运动学特征(位移、速度、加速度,简谐振动过程中的振幅、角频率、频率、位相、初位相、相位差、同相和反相);动力学分析;振动方程;旋转矢量表示法;谐振动的能量;谐振动的合成; 波的产生与传播;面简谐波波动方程;波的能量、能流密度;波的叠加与干涉;驻波;多普勒效应。 5.狭义相对论基础: 伽利略变换;经典力学的时空观;狭义相对论的相对性原理;光速不变原理;洛仑兹变换;同时性的相对性;狭义相对论的时空观;狭义相对论的动力学基础;相对论的质能守恒定律。 (二)热学 1.气体分子运动论: 理想气体状态方程,理想气体的压强公式,麦克斯韦速率分布律,玻耳兹曼分布律,能量按自由度均分定理,气体的输运过程。 2.热力学: 热力学第一定律,热力学第一定律的应用,循环过程、卡诺循环,

软件工程实验报告(总)

信息工程学院 软件工程实验报告 专业: 班级: 学号: 姓名: 指导老师:

实验一:软件开发的过程计划 实验课时:2课时 一、实验目的 项目计划的目的是为项目的研发和管理工作制定合理的行动纲领,以便所有相关人员按照计划有条不紊地开展工作。 ⑴估计项目的总体规模、工作量和成本。 ⑵制定项目计划,重点放在产品生命周期中的主要关键任务。 ⑶制定项目时间表和预算。 二、实验环境 1.硬件环境 P4以上的个人计算机环境,要求内存不少于512MB,硬盘不小于20G.。 2.软件环境 操作系统:Windows XP 数据库:Sql Server 2000以上或Access 2003以上 3.通用工具软件 通用绘图工具:MicroSoft V isio 2003以上 文本编辑工具:MicroSoft Word 2003以上 4.CASE工具 UML建模工具:Rational Rose 2000 三、实验要求、实验内容 1、实验要求: 在进行实验之前,必须掌握软件开发过程的一些基础知识,准备参考资料和阅读相关的过程模型的文档。 2、实验内容 熟悉RUP(Rational Unified Process)软件开发统一过程的思想,RUP(Rational Unified Process)是由Rational公司(现已是IBM公司的一部分)提出的过程模型,它软件工程史上最完整、最成熟、最优秀的过程模型之一。 学习软件开发的组织和管理,将项目开发各阶段的任务明确,掌握各阶段的里程碑,并熟悉相应的工具。

四、思考题 1、项目开发首先要做的事是什么? 答:进行需求分析和定义,了解客户或用户的需求,然后再进行后续。 2、你认为该软件应具备的最重要的特性是什么。 答:安全性、实用性、灵活性。 3、你认为怎样分工是最合理的? 答:该项目已经采取项目经理制,但是在具体开发过程中,情况也许会比预计的复杂,因此,在了解了各组员的工作风格的情况下,根据性格类型进行工作分配,比如:外向而且善于交流的,可以给他安排和客户交流沟通,让客户随时了解我们 的工作情况,并且反应客户的需求改变;为了让项目更好的组织和管理,可以采取 主程序员负责制;这样,在项目经理的带领下,内部安排主程序员和副程序员,工 作员有问题的话,内部自己解决,只要按时汇报工作就可以了。 五、实验内容: 项目背景 项目名称:银行计算机储蓄系统 随着社会经济的发展,XX银行的业务不断增长,传统的依靠手工的存取款业务办理方式已经不能满足不断增长的业务需求。其一,业务需求的增加需要消耗大量人力物力资源;其二,业务复杂化导致人工处理方式出错率增加,从而引起储户不满。一方面可以减轻银行业务员的工作量,另一方面可以减少工作的出错率,从而提高工作效率。现在计算机网络的告诉发现使越来越多的人更喜欢在网购物、在家存款取款。在这样的背景下,很明显现在的银行储蓄系统已经不能满足人们越益增长的需求,急切需要建立一个新的、高效的、方便的、互联的计算机储蓄系统。为解决此问题,拟为其开发计算机储蓄系统。 项目进度: 项目在项目经理的制度下,在整个开发过程中,树立“里程碑”,而且严格按照计划进行,各阶段任务必须完成,现把任务进度历程绘制如下:

数据结构-迷宫实验报告

云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 实验难度 A □ B □ C □ 承担任务 (难度为C时填写) 指导教师评分(签名) 【实验题目】 实验4.数组的表示极其应用 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 【基本要求】 首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如;对于下列数据的迷宫,输出的一条通路为:(l,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),…。?

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识) 本实验的目的是设计一个程序,实现手动或者自动生成一个n×m矩阵的迷宫,寻找一条从入口点到出口点的通路。我们将其简化成具体实验内容如下:选择手动或者自动生成一个n×m的迷宫,将迷宫的左上角作入口,右下角作出口,设“0”为通路,“1”为墙,即无法穿越。假设从起点出发,目的为右下角终点,可向“上、下、左、右、左上、左下、右上、右下”8个方向行走。如果迷宫可以走通,则用“■”代表“1”,用“□”代表“0”,用“→”代表行走迷宫的路径。输出迷宫原型图、迷宫路线图以及迷宫行走路径。如果迷宫为死迷宫,输出信息。 可以二维数组存储迷宫数据,用户指定入口下标和出口下标。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。? 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 1. 设定迷宫的抽象数据类型定义: ADT Maze { 数据对象:D = { a i, j | a i, j ∈ { ‘■’、‘□’、‘※’、‘→’、‘←’、 ‘↑’、‘↓’ } , 0≤ i≤row+1, 0≤j≤col+1, row, col≤18 } 数据关系:R = { ROW, COL } ROW = { < a i-1, j , a i, j > | a i-1, j , a i, j ∈D, i=1, … , row+1, j=0, … , col+1} COL = { < a i, j-1, a i, j > | a i, j-1 , a i, j ∈D, i=0, … , row+1, j=1, … , col+1} 基本操作: Init_hand_Maze( Maze, row, col) 初始条件:二维数组Maze[][]已存在。

软件工程实验报告

1.1 实验一结构化需求分析 一.实验类型 图书馆管理系统 假定校图书馆需要你设计一个图书馆管理系统,要求包括以下功能: ●图书管理员可以管理馆藏图书,包括每本图书的藏书编号、书名、编著者、 ISBN号、出版社、出版时间、入馆时间、馆藏数量(如果馆藏数量为1,则标明为孤本图书)、在馆数量、学科类别等(或其它你认为有用的信息); ●管理员可以查询、统计所有图书、每一类图书或每一本书的借阅记录; ●图书管理员可以管理所有读者的信息,包括读者类型(学生、教师、社会人 士)、姓名、图书证编号、办证时间、证件状态(正常、挂失、冻结)等信息; ●图书管理员可以查询和统计所有读者、每一类读者或每一个读者的借阅记录; ●读者可以通过本系统查询馆藏图书; ●读者可以通过本系统借阅读书。但对于孤本图书或在馆数量为1的图书则不 准外借; ●管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年 不归还图书的读者冻结其图书证; ●读者可以通地本系统归还图书。如果图书超期,则自动计算罚款金额。二.实验目的 1.掌握数据流的分析技术 2.掌握软件需求分析的过程和方法。 3.熟悉项目开发计划和需求规格说明书的制定方法。 三.实验内容和要求 1.用结构化数据流分析技术进行软件系统需求分析,得出系统的数据流图和数据字典。 2.正确运用图表工具进行表示。 3.按规范正确编写软件文档。

四.实验步骤 1.理解所承担项目的业务流程和业务内容。 本软件项目是面向中小型学校、单位机构对于图书管理的基于服务的一款便捷式软件。能满足一系列常用图书管理的功能模块,提供简介、准确的操作性,可以很大程度减少人为因素带来的数据错误,统计错误,系统逻辑错误。并且规模小,很容易进行推广。 ●本项目的参与对象有图书管理员及读者。 ●对于读者,能通过该软件浏览馆藏的所有图书。读者在图书馆找到自己喜欢 的书后,能自行通过该软件操作完成借阅操作。若读者是第一次借书,必须通过图书管理员进行添加读者记录,登记读者信息。读者在登陆后方能完成借阅操作,对于孤本图书(即图书馆中馆藏只有一本的图书)则拒绝进行借阅操作。在规定期限内,读者可以通过该软件完成还书操作,对于超期的图书,应将扣除一定罚款金额,对于超期一年不归还图书的读者冻结其图书证。 并且读者能修改个人信息。 ●对于图书管理员,能管理自己和比自己低一级管理权限的管理员。一级管理 员能完成维护管理员的基本信息和二级管理员的一切操作。二级管理员则能维护自己的信息和添加读者、添加图书的功能。管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年不归还图书的读者冻结其图书证; 2.按照系统的功能及性能要求,系统的作业范围等,确定软件系统的开发环境(操作系统、开发工具、程序设计语言等)。 根据软件编程经验,本系统将采用面向对象的设计方法,使用Eclipse开发工具,java窗体应用程序,操作系统使用Win8。 3.绘制数据流图、功能分析图等。

云南大学软件学院软件工程复习题

云南大学软件学院软件工程期中复习汇总 第0章 1. 以软件构件技术为基础,结合信息安全技术、网络服务技术、人机交互技术已经成为目前各类应用软件的支撑技术 2. 软件构件技术集中体现了软件的构造性有力地支持了软件的演化性是解决软件危机的重要途径 3.软件发展方向:(1)从单机环境发展到网络环境 (2)从以个体计算过程为反映对象向以群体合作过程为反映对象的发展 (3)从以产品为中心向以服务为中心的发展 (4)从以正面功能为核心向兼顾侧面约束的发展 (5)从被动反应向主动操作的发展 第1章 1.软件工程致力于专业的软件开发理论、方法和工具,同时着眼于(costeffective)低成本的软件开发方法; 2.软件是计算机程序和相关文档; 3.开发新软件包括开发新程序,配置通用软件和对已经存在的软件进行再利用; 4.软件工程是一个工程学科,包括软件产品的各个方面; 5.计算机科学和软件工程的不同? 答:计算机科学关注理论和基础;软件工程关注实际的开发别切生成有用的软件产品; 计算机科学理论并不能完全为软件工程提供支撑(它有别于物理学和电子工程的关系)6.系统工程和软件工程有什么区别? 系统工程关注的计算机基础系统发展的各个方面,涵盖软件,硬件以及(process engineering),软件工程是这些过程的一部分,他涉及到开发软件基础结构,软件的控制,软件的应用及系统中的数据库; 系统工程师涉及到系统规格说明(系统规约),系统架构的设计整合和开发; 7:什么是软件过程? 软件过程是一系列活动的集合,并且这些活动的目的是开发或演化软件 8.软件过程的通用活动包括哪几方面? (1)Specification:系统应该做什么,和开发约束(development constrains) (2)Development:软件系统的产品 (3)Validation:检查产品是否是客户想要的 (4)Evolution:根据需求的改变来修改软件; 9.什么是软件过程模型? 是从一个特定的角度得到的软件过程的简化的表示; 10.通用软件过程模型 瀑布模型 增量式开发 面向复用的软件工程 11.什么是软件工程方法? 软件开发的结构化方法包括系统模型,符号,规则,设计忠告和设计指导 12.What are the attributes of good software? ?The software should deliver the required functionality and performance to the user

云南大学软件学院数据结构实验4

实验难度: A □ B □ C □ 学期:2017秋季学期 任课教师: 实验题目: 组员及组长: 承担工作: 联系电话: 电子邮件: 完成提交时间:年月日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 首先输入迷宫数据,在计算机的屏幕上显示一个8行8列的矩阵表示迷宫。矩阵中的每个数据或为通路(以0表示),或为墙(以1表示),所求路径必须是简单路径,即在求得的路径上不能重复出现同一道块。假设以栈S记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作为“当前位置入栈”;从当前路径删除前一通道块的操作为“出栈”。若找到出口,则从栈中弹出数据,在屏幕上显示从入口到出口的路径坐标。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) 1、定义坐标(X,Y): struct Coor { int row; int column; int direction; }; 2、定义方向: struct Move { int row; int column; }; 3、定义/链表结点: struct LinkNode { Coor data; LinkNode *next; }; 4、定义栈: class stack { private: LinkNode *top; public:

云南大学大学物理实验5

云南大学软件学院 实验报告 课程: 大学物理实验 学期: 2014-2015学年 第一学期 任课教师: 许红星 序号: 39 专业: 网络工程 学号: 姓名: 成绩: 实验5 静电场 一、实验目的 了解同心圆静电场的电势及电场的分布状况,更深的理解电势及电场的性质,更深层次的理解静电场。 二、实验原理 根据高斯定理推导出电场及电势的分布公式;利用数据分析软件,如Microsoft Excel 绘制电场及电势的分布图。 场强分布: 当r < R 1时, 001=?=???E dS E S 当R 1 < r < R 2时, ?=???01εq dS E S 210241 r q E επ= 当R 2 < r < R 3时, 003=?=???E dS E S 当r > R 3时, 021*******εεπεq q E q q dS E S +=?+=??? 电势分布: 根据电势的定义,可以求得电势的分布。

当r < R 1时, 3210210110143211414141332211R q q R q R q U dr E dr E dr E dr E dr E U R R R R R R r r ++ -=?+?+?+?=?=?????∞∞επεπεπ 当R 1 < r < R 2时, 321021010143214141413322R q q R q r q U dr E dr E dr E dr E U R R R R r r ++ -=?+?+?=?=????∞∞επεπεπ 当R 2 < r < R 3时, 3 2101431413 3 R q q U dr E dr E dr E U R R r r +=?+?=?=???∞∞επ 当r > R 3时, r q q U dr E dr E U r r 21014141+=?=?=??∞ ∞επ 三、实验任务 1. 选取相关参数,截图如下: 同心圆半径和电荷量:

软件工程实验(四个实验)

武汉轻工大学 软件工程实验报告 院系:数学与计算机学院 班级:软件工程1504 姓名: 赵佳璐 学号: 1508100065 实验一结构化分析实验 1实验目得: 通过此实验了解结构化分析得特点与步骤,以及结构化分析所采用得基本图形工具。 2、实验内容: 假设您在一所职业高中工作,负责该校信息系统得建设与维护。财务科长请您研究用学校拥有得pc机生成工资明细表与各种财务报表得可能性。 3、实验要求: 1.问题定义:请在这个阶段描述您需要解决得问题。包括用户面临得问题与预期得项目规模。最后生成一份问题定义报告书。 2.可行性研究:在这个阶段产生处理工资事务得大致过程,画出高层逻辑模型,并且画出相应得数据流图,建立数据字典。 3.对此系统进行成本效益分析。

4、实验步骤: 4、1问题定义报告书 1、项目名称:工资支付 2、问题描述: 该校一直由会计人工计算工资并编制财务报表,随着学校规模扩大工作量也越来越大。目前每个月都需要两名会计紧张工作半个月才能完成,不仅效率低而且成本高。今后学校规模将进一步扩大,人工计算工资得成本还会进一步提高。 3、项目目标: 1)研究开发费用较低得新工资支付系统得可能性。 4项目规模: 1)开发成本应该不超过7、2万元 5、初步设想: 1)用学校自己得计算机系统生成工资明细表与财务报表 6、可行性研究: 为了更全面地研究工资支付项目得可能性,建议进行大约历时两周得可行性研究。这个研究得成本不超过4000元。 4、2可行性研究: 1、处理工资事务得大致过程: 1)每月月末教师把她们当月实际授课时数登记在课时表上,由各系汇总后交给 财务科,职工把她们当月完成承包任务得情况登记在任务表上,汇总后交给财务科。 2)两名会计根据这些原始数据计算每名教职工得工资,编制工资表、工资明细表 与财务报表。然后,把记有每名教职工工资总额得工资表报送银行。 3)由银行把钱打到每名教职工得工资存折上,同时把工资明细表发给每名教职 工。 2高层逻辑模型: 3、数据流图:

云南大学软件学院计算机网络原理期中试卷 王世普

云南大学2015至2016学年上学期软件学院2014级 《计算机网络原理》期中考试试卷(闭卷)答案 满分:100分考试时间:100分钟任课教师:王世普 第一题答题卡: 第二题答题卡: 1.(1)is the protocol suite for the current Internet.. (1)A. NCP B. TCP/IP C.UNIX D.ACM 2.A GIF image is sent as email ,What is the content-type (2) . (2)A.multipart/mixed B.multipart/image C.image/JPEG D.image/gif 3.A user want to send some forms(表单)to Web server using HTTP protocol, the request line method is (3). (3)A.GET B.PA TCH C.MOVE D.POST 4.If a TCP segment carries data along with an acknowledgment, this technology is called (4)acknowledgment. (4)A. backpacking B. piggybacking C. piggying D. mother’s help 5.TCP is a (5)transport layer protocol that ensure data to be exchanged reliably by(6). So it requires set up connection before data exchanged by ( 7 )-way handshaking. (5)A.connection B.connectionless C.join D.disconnection (6)A.datagrams B.acknowledgements C.data D.segment (7)A.one B.two C.three D.four 6.A user requests a Web page that consists of a basic HTML file and 5 JPEG image files. d trans denoting the time to transfer a file. The total time is (8) to request the Web page in Nonpersistent connections mode?

云南大学应用物理专业教学计划(学校印刷)

物理学院 学院简介…… 应用物理专业本科人才培养方案 一、培养目标及要求 本专业培养掌握物理学的基本理论与方法,具有良好的数学基础和科学素养,受到应用基础研究、技术开发、计算机应用以及工程技术和实验技能的系统训练,适应高新技术发展的需要,具备较强的知识更新能力和较广泛的科技适应能力的宽口径应用型高级专门人才。 毕业生应获得以下几方面的知识和能力: 1) 掌握系统的数学、计算机等方面的基本原理、基本知识; 2) 掌握较坚实的物理学基础理论、较广泛的应用物理知识、基本实验方法和技能;具备运用物理学中某一专门方面的知识和技能进行技术开发、应用研究、教学和相应管理工作的能力; 3) 了解相近专业以及应用领域的一般原理和知识; 4) 了解我国科学技术、知识产权等方面的方针、政策和法规; 5) 了解应用物理的理论前沿、应用前景和最新发展动态以及相关高新技术产业的发展状况; 6) 掌握资料查询、文献检索及运用现代信息技术获取最新参考文献的基本方法;具有一定的实验设计,创造实验条件,归纳、整理、分析实验结果,撰写论文,参与学术交流的能力。 本专业毕业生能在物理学或相关的科学技术领域中从事科研、教学、技术开发和相关的管理工作,也可攻读相关学科理工类硕士研究生。 二、学分要求及分配 应用物理专业人才培养方案修读学分分布表 课程类别总学分 学分类型分配 备注讲授实验实训 公共必修课39 总学分161 综合素质教育选修课22 学科基础课29 专业核心(必修)课34 23 11 校印版有错20, 专业选修课48 10

综合实践12 2 10 三、修业年限:四年 四、授予学位:理学学士 五、课程设置及学时、学分分配表 (一)通识教育课程61学分 1.公共必修课程39学分 课程名称开 课 学 期 总 学 分 总 学 时 学分类型分 配 学时类型分配 周 学 时 副 修 课 程 双 学 位 课 程 备注讲 授 实 验 实 训 讲 授 实 验 实 训 大学生心理健康教育 1 1 18 1 18 1 计算机基础(一) 1 2 64 1 1 36 28 4 思想道德修养与法律基础 1 3 54 3 54 3 体育(1) 1 1 36 1 36 2 形势与政策(1) 1 18 18 1 英语读写(1) 1 2 72 2 72 4 英语听说(1) 1 1 36 1 36 2 计算机基础(二) 2 2 64 1 1 36 28 4 军训和军事理论 2 2 0 2 0 0 2周体育(2) 2 1 36 1 36 2 形势与政策(2) 2 18 18 1 英语读写(2) 2 2 72 2 72 4 英语听说(2) 2 1 36 1 36 2 马克思主义基本原理概论 2 3 54 3 54 3 中国近现代史纲要 3 2 36 2 36 2 毛泽东思想和中国特色社 会主义理论体系概论(上) 3 3 5 4 3 54 3 体育(3) 3 1 36 1 36 2 形势与政策(3) 3 18 18 1 英语读写(3) 3 2 36 2 36 2 英语听说(3) 3 1 36 1 36 2 毛泽东思想和中国特色社 会主义理论体系概论(下) 4 3 54 3 54 3 体育(4)4136 136 2形势与政策(4)418 18 1 英语读写(4) 4 2 36 2 36 2 英语听说(4) 4 1 36 1 36 2

数据结构实验报告[3]

云南大学 数据结构实验报告 第三次实验 学号: 姓名: 一、实验目的 1、复习结构体、指针; 2、掌握链表的创建、遍历等操作; 3、了解函数指针。 二、实验内容 1、(必做题)每个学生的成绩信息包括:学号、语文、数学、英语、总分、加权平均分;采用链表存储若干学生的成绩信息;输入学生的学号、语文、数学、英语成绩;计算学生的总分和加权平均分(语文占30%,数学占50%,英语占20%);输出学生的成绩信息。 三、算法描述 (采用自然语言描述) 首先创建链表存储n个学生的成绩信息,再通过键盘输入学生的信息,创建指针p所指结点存储学生的成绩信息,从键盘读入学生人数,求出学生的总分和加权平均分,输出结果。 四、详细设计 (画出程序流程图)

五、程序代码 (给出必要注释) #include #include typedef struct score {int number; int chinese; int math; int english; int total; float average; struct score *next; } student; //创建链表存储n个学生的信息,通过键盘输入信息student*input_score(int n) {int i; student*stu,*p; for(i=0,stu=NULL;inumber);

云南大学 软件学院 计网实验2

云南大学软件学院 实验报告 课程:计算机网络原理实验任课教师: 姓名:学号:专业:成绩: 实验二、应用层协议分析实验报告 1.实验目的: 分析HTTP协议报文的首部格式,理解HTTP协议的工作过程;分析DNS的工作过程。 2.实验环境: (1)连入Internet的主机一台 (2)主机安装Ethereal软件 3.实验步骤: a.下载一个非常简单的HTML文件(该文件不嵌入任何对象),利用Ethereal软件分析HTTP 协议。 (1)启动Web browser。清空浏览器的缓存。 (2)启动Ethereal,开始Ethereal分组俘获。 (3)在打开的Web browser窗口中可输入下列地址之一 浏览器中将显示一个只有一行或多行文字的非常简单的HTML文件。 (4)停止分组俘获。在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所俘获到的HTTP报文。将捕获结果保存为test1。 (5)根据结果回答下列问题回答实验a的问题。 实验b.下载一个含多个嵌入对象的网页,利用Ethereal软件分析HTTP协议。 (1)启动浏览器,将浏览器的缓存清空。 (2)启动Ethereal分组俘获器。开始Ethereal分组俘获。 (3)在浏览器的地址栏中输入某个地址,(需要满足该地址下的网页是包含多个内嵌对象即可)。 (4)停止Ethereal分组俘获,在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所俘获到的HTTP报文。将捕获结果保存为test2 (5)重新启动Web browser。启动Ethereal分组俘获器,进行分组捕获。在Web browser 当中重新输入相同的URL或单击浏览器中的“刷新”按钮。 (6)步骤同(5)。将捕获结果保存为test3 (7)根据结果回答下列问题回答实验b的问题。 实验c. DNS 实验 (1)在ms-dos 下,键入ipconfig/flushdns,清理并重设定DNS客户解析器缓存的内容。

软件工程实验指导

软件工程实验指导书 适用专业:计算机科学与技术、软件工程、编写人: 信息技术学院 2012年8月

前言 软件工程实验是为计算机相关专业本科《软件工程》课程配套设置的,是《软件工程》课程讲授中一个重要的、不可或缺的实践环节。其目的是使学生能够针对具体软件工程项目,全面掌握软件工程管理、软件需求分析、软件初步设计、软件详细设计、软件测试等阶段的方法和技术,通过该课程设计使学生进一步理解和掌握软件开发模型、软件生命周期、软件过程等理论在软件项目开发过程中的意义和作用,培养学生按照软件工程的原理、方法、技术、标准和规范,进行软件开发的能力,培养学生的合作意识和团队精神,培养学生对技术文档的编写能力,从而使学生提高软件工程的综合能力,提高软件项目的管理能力。 按该课程的特点,实验内容包括软件开发的两大方法学的专题训练,即结构化(生命周期学)的方法学和面向对象的方法学,通过对一个简单项目,要求学生利用结构化软件开发技术或面向对象的软件开发技术完成对该项目的开发。因此设置五个实验项目,从项目发的准备工作,系统分析过程,系统设计过程,软件测试到系统实施,覆盖软件开发的整个过程,此外又引入我国国家《计算机开发规范》,以规范技术文档的书写标准,提高实验教学质量。 通过实验训练,达到如下目的: 使学生进一步了解和掌握软件工程原理,提高对实际项目的分析和设计能力,通过实验课程,熟悉和基本掌握软件工程方法学、软件开发的过程,文档资料的编写格式及规范,全面领会和贯通所学习的理论知识,从而培养学生综合运用所学课程知识,分析解决问题的能力,培养学生理论联系实际作风,实事求是,严肃认真的科学态度和良好的工作作风,为今后从事科学研究工作打下基础。

(精选)云南大学软件学院数据结构实验3

实验难度: A □ B □ C □序号学号姓名成绩 指导教师(签名) 学期:2017秋季学期 任课教师: 实验题目: 组员及组长: 承担工作: 联系电话: 电子邮件: 完成提交时间:年月日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 魔王语言的解释规则: 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 在 A 的基础上,(根据产生式)自定义规则,将一段魔王的话翻译为有意义的人类语言(中文):输入wasjg,则魔王语言解释为“我爱数据结构”。 运用了离散数学的一些基本知识及程序设计知识。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) //---------------抽象数据类型的定义------------------// #define STACK_INIT_SIZE 50 #define STACKINCREMENT 10 #define OVERLOW -2 #define ERROR -1 typedef struct { char *base; //顺序栈的栈底指针 int top; //顺序栈的栈顶 int size; //栈元素空间的大小 }SqStack; //结构体类型顺序栈 typedef struct { char *base; int front; int rear; }SqQueue; //结构体类型队列 //---------------各个模块功能的描述------------------// void Init_SqStack(SqStack &s) //初始化顺序桟 void Push_SqStack(SqStack &s, char c) //压入数据 int Pop_SqStack(SqStack &s, char &e) //出桟 char GetTop_SqStack(SqStack s)//或得栈顶

软件工程实验(四个实验)

武汉轻工大学软件工程实验报告 院系:数学和计算机学院 班级:软件工程1504 姓名:赵佳璐 学号:1508100065

实验一结构化分析实验 1实验目的: 通过此实验了解结构化分析的特点和步骤,以及结构化分析所采用的基本图形工具。 2.实验内容: 假设你在一所职业高中工作,负责该校信息系统的建设和维护。财务科长请你研究用学校拥有的pc机生成工资明细表和各种财务报表的可能性。 3.实验要求: 1.问题定义:请在这个阶段描述你需要解决的问题。包括用户面临的问题和预期的项目规模。最后生成一份问题定义报告书。 2.可行性研究:在这个阶段产生处理工资事务的大致过程,画出高层逻辑模型,并且画出相应的数据流图,建立数据字典。 3.对此系统进行成本效益分析。 4.实验步骤: 4.1问题定义报告书 1.项目名称:工资支付 2.问题描述: 该校一直由会计人工计算工资并编制财务报表,随着学校规模扩大工作量也越来越大。目前每个月都需要两名会计紧张工作半个月才能完成,不仅效率低而且成本高。今后学校规模将进一步扩大,人工计算工资的成本还会进一步提高。 3.项目目标: 1)研究开发费用较低的新工资支付系统的可能性。 4项目规模: 1)开发成本应该不超过7.2万元 5.初步设想: 1)用学校自己的计算机系统生成工资明细表和财务报表 6.可行性研究: 为了更全面地研究工资支付项目的可能性,建议进行大约历时两周的可行性研究。这个研究的成本不超过4000元。

4.2可行性研究: 1.处理工资事务的大致过程: 1)每月月末教师把他们当月实际授课时数登记在课时表上,由各系汇总后交给 财务科,职工把他们当月完成承包任务的情况登记在任务表上,汇总后交给财务科。 2)两名会计根据这些原始数据计算每名教职工的工资,编制工资表、工资明细 表和财务报表。然后,把记有每名教职工工资总额的工资表报送银行。3)由银行把钱打到每名教职工的工资存折上,同时把工资明细表发给每名教职 工。 2高层逻辑模型: 3.数据流图: 4.数据字典: 1) 名字:授课情况登记表 别名: 描述:记录每个教师的当月完成的课时及任务。 定义:授课情况登记表=教职工编号+姓名+职务+职称+基本工资+生活补贴+书报费+交通费+洗理费 位置:输出到打印机 2)

数据结构实验二链表

云南大学数学与统计学实验教学中心 实 验 报 告 一、实验目的: 通过实验掌握线性链表的建立及基本操作,巩固课堂内容,练习其程序的设计与实现。 由于顺序存储结构的操作相对比较简单,而且在前期课程《高级语言程序设计》中使用得也多, 所以本次实验侧重于对线性链表存储结构上的操作及应用的实现。 二、实验内容: 本实验包含以下几个子问题: 1、 采用表尾挂入法建立一个以LA 为头指针的单链表: 2、 3、 就地逆转以LB 为头指针的单链表,即得到如下形式的单链表: 4、 将逆转后的LB 表接到LA 表之尾并构成循环链: LA 二、实验要求: 1. 每一个子问题用一个C 语言的函数来完成。 2. 对每一个子问题的结果用一个打印函数输出其结果以验证程序运行是否正确。 打印函数必须是公共的,即:用一个输出函数,既可以对单链表又可对循环链表实现,

打印输出。 3.用主函数调用各个子函数,以完成题目要求。 4.程序设计时应尽量考虑通用性,若改变题给数据仍能实现要求。 [实现提示]: .第3小题题中的“就地逆转”即只允许引入除LB外的两个工作指针来实现。 即可以以循环方式从链表首部起逐个地修改各个结点的指针:从NEXT(向后)指针改变为PRIOR(向前)的指针,并注意保存搜索时的指针。 三、实验环境 Windows win7 程序设计语言C 四、实验过程(请学生认真填写): 1. 实验设计的(各)流程图:

2. 程序设计的代码及解释(必须给出): /*----------------------------------LinkList-------------------------------------*/ /*基本要求---------------------------------------------------------------------*/ /*采用表尾挂入法建立一个以LA为头指针的单链表--------------*/ /*采用表首插入法建立一个以LB为头指针的单链表.---------------*/ /*就地逆转以LB为头指针的单链表,即得到如下形式的单链表.*/ /*将逆转后的LB表接到LA表之尾并构成循环链-------------------*/ /*每一个子问题用一个C语言的函数来完成--------------------------*/ /* 打印函数必须是公共的-------------------------------------------------*/ /*-------------------------------------Start-------------------------------------*/ /*--------------------------------------------------------------------------------*/ #include #include #include #define LIST_SIZE 10 /*--------------------------------------------------------------------------------*/ /*定义链表类型--------------------------------------------------------------*/ typedef struct LNode{ int data; struct LNode *next; }LinkList; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ main(){ LinkList *InitialList1(); LinkList *InitialList2(); LinkList *reverse(LinkList *L); void connect(LinkList *L1,LinkList *L2); void putList(LinkList *L); LinkList *L1,*L2; L1=InitialList1(); L2=InitialList2(); printf("The original of list L1:\n"); putList(L1); printf("The original of list L2:\n");

相关主题