社会网络分析系统的设计和实现目录一、设计题目................................................................................................................1二、需求分析................................................................................................................11)运行环境(软、硬件环境).....................................................................................12)输入的形式和输入值的范围.....................................................................................13)输出的形式描述.........................................................................................................24)功能描述.....................................................................................................................25)测试数据.....................................................................................................................2三、概要设计................................................................................................................31)抽象数据类型定义描述.............................................................................................32)功能模块设计(如主程序模块设计).....................................................................43)模块层次调用关系图.................................................................................................4四、详细设计................................................................................................................5五、调试分析..............................................................................................................111)问题和改进...............................................................................................................112)时间&空间复杂度....................................................................................................12六、测试结果..............................................................................................................13七、结论......................................................................................................................15八、附录:程序设计源代码......................................................................................161一、设计题目【实验题目】社会网络分析系统的设计和实现【问题描述】实现一个社会网络分析系统。【基本要求】系统功能主要包括:1)对email数据进行预处理,利用数据结构课程中图中的理论,建立社会网络的邻接矩阵。2)利用度的概念,找出社会网络中核心人物、活跃人物和边缘人物。3)利用子图概念分析社会网络的结构,找出小团体和联系小团体的桥接人物。4)能查找任何人的交往圈子。二、需求分析1)运行环境(软、硬件环境)软件:MyEclipseProfessional2014硬件:能运行MyEclipseProfessional2014的硬件平台如CPU:Intel酷睿i5;内存4G;操作系统Windows82)输入的形式和输入值的范围数据类型:文本(txt)范围:在txt文本的最大存储范围内23)输出的形式描述采用界面形式输出1.该社会网络中个人的收发邮件数量2.该社会网络中的核心人物、活跃人物、边缘人物3.该社会网络中的小团体、桥接人物4.该社会网络中单个人的交往圈子4)功能描述1.对email数据进行预处理,利用数据结构课程中图中的理论,建立社会网络的邻接矩阵2.利用度的概念,找出社会网络中核心人物、活跃人物和边缘人物3.利用子图概念分析社会网络的结构,找出小团体和联系小团体的桥接人物4.能查找任何人的交往圈子5)测试数据3三、概要设计1)抽象数据类型定义描述publicSeqList(intsize){//数组构造函数publicEdge(intstart,intdest,intweight){//边构造函数publicAdjMatrixGraph(intsize){//建立邻接矩阵publicAdjMatrixGraph(T[]vertices,Edge[]edges){//建立邻接矩阵publicintvertexCount(){//邻接矩阵中顶点的个数publicTget(inti){//取出第i个顶点的内容publicStringtoString(){//输出邻接矩阵publicintinsertVertex(Tx){//插入邻接矩阵的顶点publicvoidinsertEdge(Edgeedge){//插入邻接矩阵的度publicvoidinsertEdge(inti,intj,intweight){//插入邻接矩阵的度4publicint[]outdegres(){//邻接矩阵中每个对象的出度总和publicint[]indegres(){//邻接矩阵中每个对象的入度总和2)功能模块设计(如主程序模块设计)publicStringactiveperson(){//活跃人物publicStringmainperson(){//核心人物publicStringmarginalperson(){//边缘人物publicbooleanisExist(String[]temp,Stringstr,intt){//是否存在该人publicString[]group_one(String[]vertices,Stringstr){//个人的圈子publicString[]Connecter(){//桥接人publicString[]group(String[]vertices,Stringstr){//圈子publicString[][]teamgroup(){//小团体publicint[][]team(){//团体publicbooleanisConnection(int[][]temp,inti,intj,intt){//是否与其他人有联系3)模块层次调用关系图5四、详细设计在程序内定义一个AdjMatrixGraph的类来实现程序的基本操作。定义import_email这个类来实现文本的读取。定义MainFrm来实现数据的输出。AdjMatrixGraph类:protectedSeqListTvertexlist;protectedint[][]adjmatrix;protectedint[]visit;privatefinalintMAX_WEIGHT=99999;*********************************************************************publicStringactiveperson(){//活跃人物intmax=-1;intline=-1;for(inti=0;ithis.outdegres().length;i++){if(this.outdegres()[i]max){max=this.outdegres()[i];line=i;}}return(String)this.get(line);}利用AdjMatrixGraph中的某个人的出度总和函数,来计算每个人的出度总和也就是某个人发出邮件的数量,找出其中发送邮件数量最大的人作为活跃人物。*********************************************************************publicStringmainperson(){//核心人物int[]temp=newint[this.outdegres().length];intmax=-1;intline=-1;for(inti=0;ithis.outdegres().length;i++)temp[i]=this.outdegres()[i]+this.indegres()[i];for(inti=0;itemp.length;i++){if(temp[i]max){max=this.outdegres()[i];6line=i;}}return(String)this.get(line);}利用AdjMatrixGraph中的某个人的出度和入度总和函数,来计算每个人的出度和入度总和也就是某个人发出和接收邮件的数量,找出其中发送和接收邮件数量最大的人作为活跃人物。*********************************************************************publicStringmarginalperson(){//边缘人物int[]temp=newint[this.outdegres().length];intmin=99999;intline=-1;for(inti=0;ithis.outdegres().length;i++)temp[i]=this.outdegres()[i]+this.indegres()[i];for(inti=0;itemp.length;i++){if(temp[i]min){min=temp[i];line=i;}}return(String)this.get(line);}利用AdjMatrixGraph中的某个人的出度和入度总和函数,来计算每个人的出度和入度总和也就是某个人发出和接收邮件的数量,找出其中发送和接收邮件数量最小的人作为活跃人物。*************