社会网络分析系统的设计和实现数据结构课程设计.doc
《社会网络分析系统的设计和实现数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《社会网络分析系统的设计和实现数据结构课程设计.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流社会网络分析系统的设计和实现数据结构课程设计.精品文档.上海电力学院数据结构(C+)课程设计题目: 综合实验16 社会网络分析系统的设计和实现(*)姓 名: XXX 学 号: 2012XXXX 院系: 计算机科学与技术学院 专业年级: 信息安全 2012XXX 2014年 07月 08日目 录一、 设计题目1二、需求分析11)运行环境(软、硬件环境)12)输入的形式和输入值的范围13)输出的形式描述14)功能描述15)测试数据2三、概要设计21)抽象数据类型定义描述22)功能模块设计(如主程序模块设计)53)模块层次调用关系图5四、详细设计6
2、五、调试分析12 问题&改进&补充12 算法的时间空间复杂性分析14 心得体会14六、测试结果15七 、附录:程序设计源代码16一、 设计题目社会网络分析系统的设计和实现二、需求分析1)运行环境(软、硬件环境)软件:Microsoft Visual C+ 6.0硬件:能运行Microsoft Visual C+ 6.0的硬件平台如CPU:Intel 酷睿i3 3217U;内存4G;操作系统Windows 72)输入的形式和输入值的范围数据类型: 整型(int)、字符型(char) 范围:1. 总人数(1100)2. 人员名称(AZ)3. 人员数字代码(1100)4. 关系总数(1100)5.
3、某条关系(人员数字代码 人员数字代码 权值)注:权值(1100)即email数据举例:总人数8个、人员名称ABCDEFGH、人员数字代码12345678、关系总数15条、具体某一条关系1 2 9。3)输出的形式描述1. 该社会网络的邻接矩阵2. 该社会网络中的核心人物、活跃人物、边缘人物3. 该社会网络中的小团体、桥接人物4. 查找任何人的交往圈子4)功能描述 1. 对email数据进行预处理,利用数据结构课程中图中的理论,建立社会网络的邻接矩阵。2. 利用度的概念,找出社会网络中核心人物、活跃人物和边缘人物。3. 利用子图概念,分析社会网络的结构,找出小团体和联系小团体的桥接人物。4. 能查
4、找任何人的交往圈子。5)测试数据三、概要设计1)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)ADTMgraphisData存放图中社会网络人物的一维数组vertexmaxsize存放图中社会网络人物的关系的二维数组arcmaxsizemaxsize图中人物总数vertexnum和关系总数,arcnum标志数组visitedOperationu Mgraph (构造函数)初始化值:社会网络中 a人员名称,n总人数,e总关系数;标志顶点访问的数组visitedi置0。 动作:将键盘输入的值带入,调用有向网的创建函数CreateHW。u CreateHW(创建有向
5、网)输入:图的人数和关系数、存放图中人的数组、存放图中关系的数组前置条件:构造函数调用功能:创建有向网输出:无后置条件:有向网建立u PrintGraph(输出邻接矩阵)输入:无前置条件:有向网已经建立功能:输出邻接矩阵输出:邻接矩阵后置条件:无u Centre(核心人物)输入:无前置条件:有向网已经建立,设定核心人物的域值yu=20功能:找出社会网络的核心人物(计算每个顶点的入度,找度数大于域值的人物)输出:若找到则输出社会网络的核心人物,没有找到则输出“无”。后置条件:无u Huoyue(活跃人物)输入:无前置条件:有向网已经建立,设定活跃人物的域值yu=10功能:找出社会网络的活跃人物(
6、计算每个顶点的出度,找度数大于域值的人物)输出:若找到则输出社会网络的活跃人物,没有找到则输出“无”。后置条件:无u Bianyuan(边缘人物)输入:无前置条件:有向网已经建立,设定边缘人物的域值yu=5功能:找出社会网络的边缘人物(计算每个顶点的出入度之和,找度数小于域值的人物)输出:若找到则输出社会网络的边缘人物,没有找到则输出“无”。后置条件:无u quanzi(交往圈子)输入:输入一个人员的数字代码(用于查找该人员的交往圈子)前置条件:有向网已经建立功能:查找交往圈子(与指定人物之间有边的人物就是与该人物有联系的,这些人就构成了一个交往圈子)。输出:输出指定人物的交往圈子后置条件:无
7、u ADD(计算人员两两间的关系数)输入:无前置条件:有向网已经建立,给出两个人物的数字代码功能:计算指定人员两两间的联系数并返回(为查找小团体、桥接人做准备)输出:返回指定人员两两间的联系数后置条件:无u BY(返回边缘人物数字代码)输入:无前置条件:有向网已经建立功能:找边缘人物并返回该人物数字代码(为查找小团体、桥接人做准备)输出:返回边缘人物的数字代码后置条件:无u DFS(小团体)输入:无前置条件:有向网、ADD函数、BY函数都已经建立,初始化顶点标记矩阵(全部置0)功能:查找小团体,从指定的顶点开始进行深度优先遍历(如果当前人物没有被访问过,并且也不是边缘人物,输出该人物;再从该人
8、物开始进行深度遍历,如果找到与该人物交往密切的人物则输出,继续找下一个)输出:输出小团体后置条件:对访问过的顶点置1u DFS2(桥接人)输入:无前置条件:有向网、ADD函数、BY函数都已经建立功能:查找桥接人,从指定的顶点开始进行深度优先遍历输出:两个小团体中,有联系,但没有达到域值的人物后置条件:无end ADT Mgraph2)功能模块设计(如主程序模块设计)1. 主程序模块:连接各种功能子模块,完成程序的基本操作实现功能2. 构造社会网络模块:按照要求构建有向网3. 输出邻接矩阵模块:根据用户输入的社会网络,输出该网络图的邻接矩阵4. 核心人物模块:根据用户输入的社会网络,计算得出该社
9、会网络中的核心人物5. 活跃人物模块:根据用户输入的社会网络,计算得出该社会网络中的活跃人物6. 边缘人物模块:根据用户输入的社会网络,计算得出该社会网络中的边缘人物7. 交往圈子模块:根据用户输入的社会网络,计算得出该网络中指定人物的交往圈子8. 人物两两联系数模块:根据用户输入的社会网络,返回指定人员两两间的联系数9. 判断边缘人物模块:根据用户输入的社会网络,返回边缘人物的数字代码10. 小团体模块:根据用户输入的社会网络,深度优先遍历得出该网络中的所有小团体11. 桥接人物模块:根据用户输入的社会网络,深度优先遍历得出小团体间的桥接人物3)模块层次调用关系图桥接人DFS2 小团体DFS
10、 交往圈子quanzi边缘人物bianyuanMain( )Mgraph活跃人物huoyue核心人物centre输出邻接矩阵PrintGraph构建有向网CreateHW人员两两联系数ADD判断边缘人物BY四、 详细设计实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。#include#include#includeconst int maxsize=100;const int INFINITY=0;/最大值无穷定义一个Mgraph类,用来实现基本功能:构造函数初始化值,根据用户输入的社会网络图构建有向网(邻接矩阵存储形式),查找该社会网络中的核心人物、活跃人物、边
11、缘人物、小团体、桥接人物,查找任何人的交往圈子。templateclass Mgraphpublic: Mgraph(T a,int n,int e);/构造函数,a结点数组,n顶点个数,e边数 void PrintGraph();/输出邻接矩阵 void centre(int n); /核心人物成员函数 void huoyue(int n);/活跃人物成员函数 void bianyuan(int n);/边缘人物成员函数 void quanzi(int v); /查找交往圈子函数 int ADD(int s,int t) ;/计算人员两两间联系数 int BY(int n) ; void D
12、FS(int v,int n) ; /查找小团体函数(深度优先遍历) void DFS2(int v,int n) ; /查找桥接人函数(深度优先遍历)private:T vertexmaxsize;/存放顶点int arcmaxsizemaxsize; /存放边int vertexnum,arcnum;/顶点数,边数void CreateHW(T a,int n,int e);/构建有向网int *visited;Mgraph 构造函数初始化值:社会网络中 a人员名称,n总人数,e总关系数;标志顶点访问的数组visitedi置0;调用有向网的创建函数CreateHW。templateMgra
13、ph:Mgraph(T a,int n,int e) visited=new intvertexnum; for(int i=0;ivertexnum;i+) visitedi=0; CreateHW(a,n,e); /创建/CreateHW 构建有向网将用户输入的值带入,并完成存储:人物名称放入一维数组vertexi,人物间的Email发送数(权值)放入二维数组arci-1j-1。template void Mgraph:CreateHW(T a,int n,int e) int w; /权值 vertexnum=n; /顶点数 arcnum=e; /边数 int i,j,k;cout注意!
14、请将人名对应到数字代码输入endl;cout输入格式为:人员1 人员2 权值endl;for (i=0; ivertexnum; i+) vertexi=ai;/顶点数组赋初值(放入一维数组)for (i=0; ivertexnum; i+) /初始化邻接矩阵for (j=0; jvertexnum; j+)arcij=0; for (k=0; karcnum; k+) /依次输入每一条边,并修改邻接矩阵的相应元素cout请输入第k+1ijw; /边依附的两个顶点的序号arci-1j-1=w; /置有边标志,存放权值/PrintGraph 输 出通过二重循环输出社会网络对应的邻接矩阵存储图te
15、mplate void Mgraph:PrintGraph()/输出邻接矩阵int i,j;for(i=0;ivertexnum;i+) for(j=0;jvertexnum;j+) coutarcijt;coutendl;/centre核心人物若人物收到的Email总数大于20封,我认为就是核心人物,所以我设置了域为20,centre函数要完成的功能是找入度大于域值的人物,并输出。 templatevoid Mgraph:centre(int n) vertexnum=n;int i,j,count=0;int xmaxsize=0;for(i=0;ivertexnum;i+)for(j=0
16、;jvertexnum;j+)/计算每个顶点的入度xi+=arcji;/xj存放入度数cout核心人物是:; int yu=20; /找度数大于域值的人物, 域=20for(i=0;iyu)coutvertexi ; count+ ;if(count=0) cout无;coutendl;/huoyue活跃人物若人物发出的Email总数大于10封,我认为就是活跃人物,所以我设置了域为10,huoyue函数要完成的功能是找出度大于域值的人物,并输出。 templatevoid Mgraph:huoyue(int n) vertexnum=n;int i,j,count=0;int ymaxsize
17、=0;for(i=0;ivertexnum;i+)/计算每个顶点的出度for( j=0;jvertexnum;j+)yi+=arcij;/yi存放出度数cout活跃人物是:;int yu=10; /找度数大于域值的人物, 域=10for (i=0; iyu) coutvertexi ; count+ ;if(count=0) cout无;coutendl;/bianyuan边缘人物若人物收到和发出的Email总数小于5封,我认为就是边缘人物,所以我设置了域为5,bianyuan函数要完成的功能是找入度与出度之和小于域值的人物,并输出。 templatevoid Mgraph:bianyuan(
18、int n) vertexnum=n;int i,j,count=0;int zmaxsize=0;for(i=0;ivertexnum;i+)/计算每个顶点的度数for(j=0;jvertexnum;j+)zi=zi+arcij+arcji; /zi存放入度+出度之和 cout边缘人物是:;int yu=5; /找度数小于域值的人物, 域=5for (i=0; ivertexnum; i+) if(ziyu) coutvertexi ; count+ ;if(count=0) cout无;coutendl;/quanzi查找交往圈子根据用户输入的一个人员的数字代码,查找该人员的交往圈子,我认
19、为与指定人物之间有边的人物就是与该人物有联系的,这些人就构成了一个交往圈子。template void Mgraph:quanzi(int v) int count=0;coutvertexv-1的交往圈子是:;for (int j=0; jvertexnum; j+) if (arcv-1j!=INFINITY|arcjv-1!=INFINITY) /交往圈子:与指定人物之间有边就算 coutvertexj ; count+;if(count=0) cout无;coutendl;/ADD 计算人员间两两间联系数计算指定人员两两间的联系数并返回(为查找小团体、桥接人做准备)template i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 社会 网络分析 系统 设计 实现 数据结构 课程设计
限制150内