数据结构课程设计社会网络分析系统的设计和实现.doc
- 文档编号:1262888
- 上传时间:2022-10-19
- 格式:DOC
- 页数:23
- 大小:676.28KB
数据结构课程设计社会网络分析系统的设计和实现.doc
《数据结构课程设计社会网络分析系统的设计和实现.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计社会网络分析系统的设计和实现.doc(23页珍藏版)》请在冰豆网上搜索。
上海电力学院
数据结构(C++)课程设计
题 目:
综合实验16
社会网络分析系统的设计和实现(*)
姓名:
XXX
学号:
2012XXXX
院 系:
计算机科学与技术学院
专业年级:
信息安全2012XXX
2014年 07月 08日
目录
一、设计题目 1
二、需求分析 1
1)运行环境(软、硬件环境) 1
2)输入的形式和输入值的范围 1
3)输出的形式描述 1
4)功能描述 1
5)测试数据 2
三、概要设计 2
1)抽象数据类型定义描述 2
2)功能模块设计(如主程序模块设计) 5
3)模块层次调用关系图 5
四、详细设计 6
五、调试分析 12
Ø问题&改进&补充 12
Ø算法的时间空间复杂性分析 14
Ø心得体会 14
六、测试结果 15
七、附录:
程序设计源代码 16
一、设计题目
社会网络分析系统的设计和实现
二、需求分析
1)运行环境(软、硬件环境)
软件:
MicrosoftVisualC++6.0
硬件:
能运行MicrosoftVisualC++6.0的硬件平台
如CPU:
Intel酷睿i33217U;内存4G;操作系统Windows7
2)输入的形式和输入值的范围
数据类型:
整型(int)、字符型(char)
范围:
1.总人数(1~100)
2.人员名称(A~Z)
3.人员数字代码(1~100)
4.关系总数(1~100)
5.某条关系(人员数字代码人员数字代码权值)注:
权值(1~100)即email数据
举例:
总人数8个、人员名称ABCDEFGH、人员数字代码12345678、关系总数15条、具体某一条关系129。
3)输出的形式描述
1.该社会网络的邻接矩阵
2.该社会网络中的核心人物、活跃人物、边缘人物
3.该社会网络中的小团体、桥接人物
4.查找任何人的交往圈子
4)功能描述
1.对email数据进行预处理,利用数据结构课程中图中的理论,建立社会网络的邻接矩阵。
2.利用度的概念,找出社会网络中核心人物、活跃人物和边缘人物。
3.利用子图概念,分析社会网络的结构,找出小团体和联系小团体的桥接人物。
4.能查找任何人的交往圈子。
5)测试数据
三、概要设计
1)抽象数据类型定义描述
(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)
ADT Mgraph is
Data
存放图中社会网络人物的一维数组vertex[maxsize]
存放图中社会网络人物的关系的二维数组arc[maxsize][maxsize]
图中人物总数vertexnum和关系总数,arcnum
标志数组visited
Operation
uMgraph(构造函数)
初始化值:
社会网络中a[]人员名称,n总人数,e总关系数;标志顶点访问的数组visited[i]置0。
动作:
将键盘输入的值带入,调用有向网的创建函数CreateHW。
uCreateHW(创建有向网)
输入:
图的人数和关系数、存放图中人的数组、存放图中关系的数组
前置条件:
构造函数调用
功能:
创建有向网
输出:
无
后置条件:
有向网建立
uPrintGraph(输出邻接矩阵)
输入:
无
前置条件:
有向网已经建立
功能:
输出邻接矩阵
输出:
邻接矩阵
后置条件:
无
uCentre(核心人物)
输入:
无
前置条件:
有向网已经建立,设定核心人物的域值yu=20
功能:
找出社会网络的核心人物(计算每个顶点的入度,找度数大于域值的人物)
输出:
若找到则输出社会网络的核心人物,没有找到则输出“无”。
后置条件:
无
uHuoyue(活跃人物)
输入:
无
前置条件:
有向网已经建立,设定活跃人物的域值yu=10
功能:
找出社会网络的活跃人物(计算每个顶点的出度,找度数大于域值的人物)
输出:
若找到则输出社会网络的活跃人物,没有找到则输出“无”。
后置条件:
无
uBianyuan(边缘人物)
输入:
无
前置条件:
有向网已经建立,设定边缘人物的域值yu=5
功能:
找出社会网络的边缘人物(计算每个顶点的出入度之和,找度数小于域值的人物)
输出:
若找到则输出社会网络的边缘人物,没有找到则输出“无”。
后置条件:
无
uquanzi(交往圈子)
输入:
输入一个人员的数字代码(用于查找该人员的交往圈子)
前置条件:
有向网已经建立
功能:
查找交往圈子(与指定人物之间有边的人物就是与该人物有联系的,这些人就构成了一个交往圈子)。
输出:
输出指定人物的交往圈子
后置条件:
无
uADD(计算人员两两间的关系数)
输入:
无
前置条件:
有向网已经建立,给出两个人物的数字代码
功能:
计算指定人员两两间的联系数并返回(为查找小团体、桥接人做准备)
输出:
返回指定人员两两间的联系数
后置条件:
无
uBY(返回边缘人物数字代码)
输入:
无
前置条件:
有向网已经建立
功能:
找边缘人物并返回该人物数字代码(为查找小团体、桥接人做准备)
输出:
返回边缘人物的数字代码
后置条件:
无
uDFS(小团体)
输入:
无
前置条件:
有向网、ADD函数、BY函数都已经建立,初始化顶点标记矩阵(全部置0)
功能:
查找小团体,从指定的顶点开始进行深度优先遍历(如果当前人物没有被访问过,并且也不是边缘人物,输出该人物;再从该人物开始进行深度遍历,如果找到与该人物交往密切的人物则输出,继续找下一个)
输出:
输出小团体
后置条件:
对访问过的顶点置1
uDFS2(桥接人)
输入:
无
前置条件:
有向网、ADD函数、BY函数都已经建立
功能:
查找桥接人,从指定的顶点开始进行深度优先遍历
输出:
两个小团体中,有联系,但没有达到域值的人物
后置条件:
无
endADTMgraph
2)功能模块设计(如主程序模块设计)
1.主程序模块:
连接各种功能子模块,完成程序的基本操作实现功能
2.构造社会网络模块:
按照要求构建有向网
3.输出邻接矩阵模块:
根据用户输入的社会网络,输出该网络图的邻接矩阵
4.核心人物模块:
根据用户输入的社会网络,计算得出该社会网络中的核心人物
5.活跃人物模块:
根据用户输入的社会网络,计算得出该社会网络中的活跃人物
6.边缘人物模块:
根据用户输入的社会网络,计算得出该社会网络中的边缘人物
7.交往圈子模块:
根据用户输入的社会网络,计算得出该网络中指定人物的交往圈子
8.人物两两联系数模块:
根据用户输入的社会网络,返回指定人员两两间的联系数
9.判断边缘人物模块:
根据用户输入的社会网络,返回边缘人物的数字代码
10.小团体模块:
根据用户输入的社会网络,深度优先遍历得出该网络中的所有小团体
11.桥接人物模块:
根据用户输入的社会网络,深度优先遍历得出小团体间的桥接人物
3)模块层次调用关系图
桥接人
DFS2
小团体
DFS
交往圈子
quanzi
边缘人物
bianyuan
Main()
Mgraph
活跃人物
huoyue
核心人物
centre
输出邻接矩阵PrintGraph
构建有向网CreateHW
人员两两联系数ADD
判断边缘人物
BY
四、详细设计
实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。
#include
#include
#include
constintmaxsize=100;
constintINFINITY=0;//最大值无穷
定义一个Mgraph类,用来实现基本功能:
构造函数初始化值,根据用户输入的社会网络图构建有向网(邻接矩阵存储形式),查找该社会网络中的核心人物、活跃人物、边缘人物、小团体、桥接人物,查找任何人的交往圈子。
template
classMgraph
{
public:
Mgraph(Ta[],intn,inte);//构造函数,a[]结点数组,n顶点个数,e边数
voidPrintGraph();//输出邻接矩阵
voidcentre(intn);//核心人物成员函数
voidhuoyue(intn);//活跃人物成员函数
voidbianyuan(intn);//边缘人物成员函数
voidquanzi(intv);//查找交往圈子函数
intADD(ints,intt);//计算人员两两间联系数
intBY(intn);
voidDFS(intv,intn);//查找小团体函数(深度优先遍历)
voidDFS2(intv,intn);//查找桥接人函数(深度优先遍历)
private:
Tvertex[maxsize];//存放顶点
intarc[maxsize][maxsize];//存放边
intvertexnum,arcnum;//顶点数,边数
voidCreateHW(Ta[],intn,inte);//构建有向网
int*visited;
};
————————Mgraph构造函数————————
初始化值:
社会网络中a[]人员名称,n总人数,e总关系数;标志顶点访问的数组visited[i]置0;调用有向网的创建函数CreateHW。
template
Mgraph
:
Mgraph(Ta[],intn,inte)
{visited=newint[vertexnum];
for(inti=0;i visited[i]=0; CreateHW(a,n,e);//创建 } //————————CreateHW构建有向网———————— 将用户输入的值带入,并完成存储: 人物名称放入一维数组vertex[i],人物间的Email发送数(权值)放入二维数组arc[i-1][j-1]。 template voidMgraph : CreateHW(Ta[],intn,inte) {intw;//权值 vertexnum=n;//顶点数 arcnum=e;//边数 inti,j,k; cout<<" 注意! 请将人名对应到数字代码输入"< cout<<" 输入格式为: 人员1人员2权值"< for(i=0;i vertex[i]=a[i];//顶点数组赋初值(放入一维数组) for(i=0;i for(j=0;j arc[i][j]=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 社会 网络分析 系统 设计 实现