淮海工学院计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:高校专用通信网络建设姓名:陈韦迪学号:2014122778专业班级:计算机科学与技术计算机142系(院):计算机工程学院设计时间:2014.12.22~2015.1.4设计地点:计算机实验室、教室指导教师评语:签名:年月日成绩:数据结构课程设计报告第1页,共页1.课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。2、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3、提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4、训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2.课程设计任务与要求:任务根据教材《数据结构-C语言描述》(耿国华主编)和参考书《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过2人。学生自选课题。学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。学生自选课题需在18周前报课程设计指导教师批准方可生效。要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。2、设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。3.课程设计说明书数据结构课程设计报告第2页,共页一需求分析[问题描述]中国移动公司正在积极推广3G通信应用,计划在江苏高校之间建立一个专用通信网络,请为其规划一个投资最省的通信线路架设方案。[基本要求](1)用无向网模拟该系统,顶点表示各高校,边表示线路建设成本(2)高校数量不少于10个,覆盖苏南、苏中、苏北、南京等地的高校(3)输出方案的结果直观、明确(4)交互式改变某些线路的建设成本,可重新输出新方案二概要设计3.课程设计说明书二概要设计voidmenu(graph*g);//菜单voidEditgraph(graph*g);//编辑通信网络系统intCreategraph(graph*g)//创建通信网络系统intInsertVex(graph*g,stringv)//添加高校voidChangeVex(graph*g,stringv)//修改高校名intInsertArc(graph*g,stringv,stringw)//添加高校间的路线intDeleteArc(graph*g,stringv,stringw)//删除高校间的路线voidChangeWeight(graph*g,stringv,stringw)//修改高校间的路线及其成本intDestroygraph(graph*g)//销毁通信网络系统intDisplay(graph*g)//输出通信网络系统voidsave(graph*g)//保存通信网络系统数据结构课程设计报告第3页,共页基本操作:InitList(L)初始化L为空表DestoryList(L)销毁LClearList(L)将L置为空表ListLength(L)若L为空表则返回0,否则返回表中元素个数Locate(L,e)若L中存在元素e则将当前指针指向e所在位置并返回真GetData(L,i)返回L中第i个元素的值InsList(L,I,e)在L中第i个位置插入e,L的长度增加1DelList(L,I,&e)删除L的第i个元素,并用e返回其值,L长度减少1数据定义:typedefstructArcNode{intadj;//权值}ArcNode;typedefstruct{stringvexs[MAX_VERTEX_NUM];//顶点ArcNodearcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵intvexnum,arcnum;//顶点数和边数}graph;//图的类型typedefstruct{stringadjvex;intlowcost;}minside;//求最小生成树时的辅助数组的类三详细设计数据结构课程设计报告第4页,共页创建通信系统intCreategraph(graph*g){inti,j,k,w;stringva,vb;读取文件通信网络.txtif(未找到文件){coutopenerror!endl;return0;}从文件读入顶点数从文件读入边数顶点向量infile(*g).vexs[i];初始化邻接矩阵for(j=0;j(*g).vexnum;++j){(*g).arcs[i][j].adj=INFINITY;//网}for(k=0;k(*g).arcnum;++k){infilevavbw;i=LocateVex(g,va);j=LocateVex(g,vb);无向网}infile.close();return1;}添加高校intInsertVex(graph*g,stringv){//在图g中增添新顶点vif(顶点数为0){cout未建立通信网络系统!\n;system(暂停);Editgraph(g);}cout请输入要添加的高校名:;cinv;intn=LocateVex(g,v);if(高校名重复){cout该高校已存在!\n;数据结构课程设计报告第5页,共页system(暂停);Editgraph(g);}inti;构造新顶点向量for(i=0;i=(*g).vexnum;i++){初始化该行邻接矩阵的值初始化该列邻接矩阵的值}图g的顶点数加1return1;}删除学校intDeleteVex(graph*g,stringv){//删除g中顶点v及其相关的弧if(顶点数为0){cout未建立通信网络系统!\n;system(暂停);Editgraph(g);}intk=LocateVex(g,v);if(k0){cout不存在该学校!\n;system(暂停);Editgraph(g);}inti,j;intm=0;if(v不是图g的顶点)return0;m=无限;for(j=0;j(*g).vexnum;j++)if(有入弧或边){修改弧数}for(序号k后面的顶点向量依次前移)(*g).vexs[j-1]=(*g).vexs[j];for(i=0;i(*g).vexnum;i++)for(j=k+1;j(*g).vexnum;j++)移动待删除顶点之后的矩阵元素数据结构课程设计报告第6页,共页for(i=0;i(*g).vexnum;i++)for(j=k+1;j(*g).vexnum;j++)移动待删除顶点之下的矩阵元素更新图的顶点数return1;}修改高校名voidChangeVex(graph*g,stringv)//修改高校名{cout请输入要修改的高校名:;cinv;intn=LocateVex(g,v);if(n0){cout不存在该学校!\n;system(暂停);Editgraph(g);}strings;cout请输入修改后的高校名:;cins;g-vexs[n]=s;}添加路线intInsertArc(graph*g,stringv,stringw){//在g中增添弧v,w,若g是无向的,则还增添对称弧w,vif(顶点数为0){cout未建立通信网络系统!\n;system(暂停);Editgraph(g);}cout请输入要添加的线路的两端的高校名:;cinvw;intv1,w1;v1=LocateVex(g,v);//尾w1=LocateVex(g,w);//头if(v10||w10||v1==w1){cout高校名输入错误!\n;system(暂停);Editgraph(g);}elseif(路线两头高校名重复){数据结构课程设计报告第7页,共页cout该线路已存在!\n;system(暂停);Editgraph(g);}弧或边数加1cout请输入该条线路的建设费用:;cin(*g).arcs[v1][w1].adj;boolbRet=cin.good();if(!bRet){cout输入的成本不是整型的!\n;system(暂停);exit(0);}(*g).arcs[w1][v1].adj=(*g).arcs[v1][w1].adj;return1;}删除线路intDeleteArc(graph*g,stringv,stringw){//在g中删除弧v,w,若g是无向的,则还删除对称弧w,vif(顶点数为0){cout未建立通信网络系统!\n;system(暂停);Editgraph(g);}cout请输入要删除的线路的两端的高校名:;cinvw;intn=LocateVex(g,v);intm=LocateVex(g,w);if(m0||n0||m==n){cout学校名输入错误!\n;system(暂停);Editgraph(g);}elseif(花费无限){cout不存在该线路!\n;system(暂停);编辑}g-arcs[n][m].adj=INFINITY;(*g).arcs[m][n].adj=(*g).arcs[n][m].adj;(*g).arcnum--;return1;数据结构课程设计报告第8页,共页}四程序设计与调试分析1.因为前期需求分析的准备工作不充分,程序运行功能不全,程序中运用到大多的插入与删除,比如查找时关于线路的信息不能全部显示出来,并且添加删除时线路的变化不能直接显示出来。程序的健壮性不能达到预期的结果,这些都是需要改进的。2.在编写程序过程中,因为函数调用不准确,使得循环进不去,在程序中的函数调用是个非常重要的部分,也是经常需要用到的,为了达到了预期结果,后来改变函数的调用关系,。五用户手册【使用说明】1.使用高校专用通信网络系统2.选择1.构造通信网络系统,则显示出10个高校45条线路的通信系统矩阵。3.创建成功,选择2.编辑通信网络系统,显示出功能1~8。4.销毁系统,选择1.销毁通信网络系统。5.添加高校,选择2.添加一个高校,并输入要添加的高校名。6.删除高校,选择3.删除一个高校,并输入要删除的高校名。若输入的高校名不存在,则显示不存在该学校。7.修改高校名,选择4.修改高校名,并输入要修改的高校名。若输入的高校名不存在,则显示不存在该学校。8.添加高校间的线路,选择5.添加一条高线间的线路,输入要添加线路两端的高校名。若输入的高校名错误在则显示学校名输入错误。9.删除高线间的线路,选择6.删除一条高校间的线路,并输入要删除线路两端的高校名。若输入的高校名不存在则显示学校名输入错误。10.修改线路的成本,选择7.修改线路的成本,并输入要删除线路连段的高校名。若输入的高校名不存在则显示学校名输入错误。11.推出编辑通信网络系统,选择8.退出。回到高校专用通信网络建设系统。12.生成最佳方案,选择3.生成最佳方案。并输入起始学校和要保存的文件名。13.输出通信网络系统,选择4.输出通信网络系统。1