软件工程课程设计个人报告_第1页
软件工程课程设计个人报告_第2页
软件工程课程设计个人报告_第3页
软件工程课程设计个人报告_第4页
软件工程课程设计个人报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件工程课程设计个人报告课程设计题目:地铁出行帮助软件北京工业大学 计算机学院 班级:703班报告人姓名:姚开一 学号:11070328 承担角色:组长同组其他成员:高辉、孙涛、王晨鑫、马千里课程教师:杨红丽 实验指导教师:杨红丽实验地点:图书馆完成起止日期:2014.9.3-2014.11.13目录一、 课程设计概述11. 目的12. 任务13. 开发环境14. 参考资料1二、 项目需求分析2三、 项目设计的基本原理和采用的主要方法与技术2四、 本人实现项目的过程与步骤21. 程序流程的设计31.1流程图的设计:31.2程序系统的结构:41.3时序建模52. 数据库的设计和录入62.1完成数

2、据库的设计:62.2完成数据库的录入:83. 算法设计84. 图形界面设计94.1图形界面初期架构设计:94.2图形界面的最终架构以及结果输出:95. 程序开发95.1ide95.2核心算法设计105.3程序开发完成11五、 个人遇到的困难与获得的主要成就121. 开发环境的选择122.数据库的设计123.程序数据结构的设计:134.程序核心算法的选择:135. 程序核心算法的设计:146.图形界面开发的设计:17六、 测试与运行记录19七、 课程设计完成结果分析与个人小结20八、 附录211. 软件配置:212. 个人完成的程序模块:213. 文档清单:211、 课程设计概述1. 目的本软件

3、产品是一项独立的软件,而且全部内容自含。开发的意图是为了开发一款地铁出行帮助软件;应用目标是能够文字给出地铁出行建议并且图形表示;作用范围是所有地铁出行的北京居民。2. 任务输入:输入形式:下拉菜单选择;输入内容:出发线路,终点线路,出发站、目的站。输出:输出形式:对话框和图形界面;输出内容:地铁出行建议和建议路线图。用户可以选择“最快”、“最方便”和“最优”的地铁出行方案,当选择不同的出行方案时,会从数据库中读取对应不同的换乘时间以及停车时间。程序会根据用户查询的时间调用系统时间,判断当前是否是高峰时间,当前是高峰时间时,会从数据库中读取对应不同的高峰换乘时间以及高峰停车时间。3. 开发环境

4、 sql server 12、netbeans ide 7.24. 参考资料a. 软件工程课程设计指导书b. 地铁出行帮助软件需求分析书c. 地铁出行帮助软件概要设计说明书2、 项目需求分析请输入站点信息提示语起始线路判断用户是否输入完整的站点信息起始站点 图形界面显示出行线路图终点线路判断用户是否选择出行方案终点站点文本显示地铁出行线路选择方案 输入 处理 输出3、 项目设计的基本原理和采用的主要方法与技术基本原理:堆优化的dijkstra算法主要方法与技术:sql语句创建表与录入数据、java语言访问数据库、java swt 图形界面编程技术4、 本人实现项目的过程与步骤个人在小组中担任组

5、长一职,每周负责给组员们分配各自的任务,让大家在10周的时间内有条不紊的完成软件工程课程设计的程序编写以及各类报告;在程序设计方面,我也负责完成了尽可能多的部分,从数据库、程序算法的设计,到程序算法、图形界面的编写。1. 程序流程的设计1.1流程图的设计:开始线路查询否完整?输入起点终点完整信息较快捷否少换乘是是最优是否结束显示图形文本线路方案是1.2程序系统的结构:1 表现层(ui):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候用户的所见所得。在此系统中,表现层即为用户所见的软件界面,用户通过软件来获取服务。2 业务逻辑层(bll):针对具体问题的操作,也可以说是对数据层的操作,对

6、数据的业务逻辑处理。3 数据访问层(dal):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。数据库换乘站点管理线路站点管理数据访问层少换乘查询模块较快捷查询模块最优查询模块业务逻辑层用户用户用户用户 表现层1.3时序建模数据库类图形类图元类窗体类算法类 用户菜单命令()生成图元实例()将图元实例加入到图元链表()重绘图元()访问数据库()调用算法()重绘图元()2. 数据库的设计和录入2.1完成数据库的设计:2.1.1换乘表transfer_station列名数据类型是否为空简要说明numoffintnot null下车车站编号numtsfintnot null换乘车站编号s

7、tationnamevarchar(20)not null车站名称offlinenumintnot null下车线路编号transferlinenumintnot null换乘线路编号htransfertimeintnot null高峰换乘时间ltransfertimeintnot null低峰换乘时间2.1.2线路表line_one-line_nine列名数据类型是否为空简要说明numintnot null总体车站编号numberintnot null地铁线路编号 外键stationnumintnot nul线路内车站编号stationnamevarchar(20)not nul车站名称ab

8、scissaintnot nul车站横坐标ordinateintnot nul车站纵坐标laststationnumintnot nul上一站车站编号nextstationnumintnot nul下一站车站编号lastrunningtimeintnot nul到上一站运行时间nextrunningtimeintnot nul到下一站运行时间hstoptimefloatnot nul高峰停靠时间lstoptimefloatnot nul低峰停靠时间transferstationfloatnot nul是否换乘车站2.2完成数据库的录入:3. 算法设计学习了图的概念,包括点、弧、有向图、无向图等

9、等;学习了图的存储结构,包括邻接矩阵(数组表示法)、邻接表、十字链表(有向图)、邻接多重表(无向图);还学习了图的遍历,包括深度优先搜索和广度优先搜索。最后决定使用邻接多重表(无向图)的数据结构。学习了数据结构与算法教材上的最短路径(包括单源最短路径dijkstra算法、每对顶点之间的最短路径floyd算法),其中dijkstra算法用于求解固定起点到图上任意点的最短路径;floyd算法用于求解图上任意两点之间的最短路径。很明显,我们的软件中,是求解固定起点到固定终点的最短路径,无论用dijkstra算法还是floyd算法,复杂度都太高了。 在核心算法设计的选择上仍然存在问题,dijkstra

10、算法和floyd算法,用在我们的程序中复杂度都太高了,需要在其基础上进行改良优化。最后我们决定使用堆优化的dijkstra算法,dijkstra算法每次选取一个点都需要进行比较,得到所有路径中最短的一条路径,使用堆比较算法,每次只选出堆顶这个最小的元素,这样计算的复杂度会降低很多,dijkstra算法的时间复杂度是o(n3),堆优化dijkstra算法的时间复杂度是o(nlogn)。4. 图形界面设计4.1图形界面初期架构设计:4.2图形界面的最终架构以及结果输出:5. 程序开发5.1ide我安装了myeclipse,由于之前没有接触过这款编程软件,学习了myeclipse的一些相关操作,以及

11、软件的调试。5.2核心算法设计完成了核心算法的模拟,能够用控制台正确输出模拟数据的最短路径。5.3程序开发完成花费了两周多的时间,按照之前的需求与设计,进行了程序部分的编写,完成程序的所有部分,实现了所有预期的功能,不过还存在一些问题有待测试。5、 个人遇到的困难与获得的主要成就1. 开发环境的选择困难:初期,我们一致决定ide使用myeclipse。然而,在开发进入中后期的时候,出现了一个我们难以解决的问题,就是数据库与ide的连接。我们花费了几个小时来解决数据库的连接问题,最后在netbeans上调试成功了。最终我们还是使用了netbeans作为程序开发环境。主要成果:虽然没有成功的解决数

12、据库与myeclipse的连接问题,不过通过更改ide也未尝不是解决问题的一种方法。我们由此学习到,ide的选择对于程序的开发也是尤为重要的。2.数据库的设计我们率先将地铁出行帮助软件的主体分为了数据库、程序算法以及图形界面,于是便顺理成章的将工作重心放在了数据库困难:我们按照指导书上的要求粗略的设计了数据库的属性以及元组,不过在之后的算法开发过程中,我们发现数据库的设计在之后的算法中并不是非常适用,后来还进行了非常多的修改。主要成果:由此我们吸取了教训:在程序开发的过程中,不应该急于数据库的设计与开发。相反,先着手于程序的开发,根据程序的需求对数据库进行相应的更改,可以省去不少的功夫,事半功

13、倍。3.程序数据结构的设计:在对图的相关数据结构进行学习后,学习了图的概念,包括点、弧、有向图、无向图等等;学习了图的存储结构,包括邻接矩阵(数组表示法)、邻接表、十字链表(有向图)、邻接多重表(无向图);还学习了图的遍历,包括深度优先搜索和广度优先搜索。初期决定使用邻接多重表(无向图)的数据结构。困难:在决定使用邻接多重表作为我们的数据结构之后,我们发现这个数据结构的结构显得过于复杂,超出了该软件的使用范畴;并且,邻接多重表的实现也比较复杂,之后的使用我们可能也难以驾驭,最后还是决定使用较为简单的邻接表作为我们图的数据结构。主要成果:邻接表的数据结构相比邻接多重表的实现来的简单得多,简化了不

14、少程序开发的工作,加快了不少进度。让我们学习到在数据结构的选取环节上需要慎重的选择,不要好高骛远选择实现比较复杂的数据结构,可能并不适合这个程序开发。4.程序核心算法的选择:学习了数据结构与算法教材上的最短路径(包括单源最短路径dijkstra算法、每对顶点之间的最短路径floyd算法),其中dijkstra算法用于求解固定起点到图上任意点的最短路径;floyd算法用于求解图上任意两点之间的最短路径。很明显,我们的软件中,是求解固定起点到固定终点的最短路径,无论用dijkstra算法还是floyd算法,复杂度都太高了。困难:在经过多番查找资料和讨论之后,我们选择使用堆优化的dijkstra算法

15、。在dijkstra算法基础上进行改良优化,dijkstra算法每次选取一个点都需要进行比较,选出所有路径中最短的一条路径,使用堆比较算法,每次只需选出堆顶这个最小的元素,这样计算的复杂度就会大大的降低。主要成果:dijkstra算法的时间复杂度是o(n3),而堆优化dijkstra算法的时间复杂度是o(m+n)logn)。堆优化的dijkstra算法实现:1. 将与源点相连的点加入堆,并调整堆。2. 选出堆顶元素u(即代价最小的元素),从堆中删除,并对堆进行调整。3. 处理与u相邻的,未被访问过的,满足三角不等式的顶点1):若该点在堆里,更新距离,并调整该元素在堆中的位置。2):若该点不在堆

16、里,加入堆,更新堆。4. 若取到的u为终点,结束算法;否则重复步骤2、3。5. 程序核心算法的设计:5.1我们先自己对点结点、边结点、图的数据结构的内容进行了假设录入,补出了图的简单的临时数据,为了能够先在控制台测试算法的正确性。困难:对于图的数据结构的构造中,需要对图中所有点结点和边结点进行构造,但是点结点和边结点有指向下一个结点的指针引用,因此不能一次性对数据结构中所有数据进行构造。主要成果:需要先对引用以外的数据类型进行构造,然后再对引用赋值,表示出图的完整数据结构。这在我们之后的构造函数设计中同样有用。5.2完成了核心算法的模拟,能够用控制台正确输出模拟数据的最短路径,最后确定问题是在

17、minheap()类的swap()方法中,由于java中对象之间的赋值就是引用的赋值,因此进行值的修改时会出现错误,最后去掉了swap方法,直接在remove()方法中给出了对换堆元素的实现。 困难:计算出的最短路径出现问题,扩展结点出现错误,问题初步推断出现在最小堆的部分。主要成果:最后确定问题是在minheap()类的swap()方法中,由于java中对象之间的赋值就是引用的赋值,因此进行值的修改时会出现错误,最后去掉了swap方法,直接在remove()方法中给出了对换堆元素的实现,正确输出模拟数据的最短路径。加入数据库数据之后的出行方案文本显示:6.图形界面开发的设计:困难:我们组中没

18、有用java图形界面编程的经历,因此从头开始学习了图形界面。一开始提出了界面的大致构想,用html绘制了出来:不过在后面的开发过程中,发现实现这样的图形界面,需要较为复杂的框架结构设计,用java swt绘制完成是较为困难的。主要成果:在经过多番的学习之后,最终完成了较为友好的图形界面,首先将图形界面用borderlayout分为了三个部分;左下角的部分比较复杂,希望实现输入和输出的功能,于是又用gridlayout将其分成了2个部分;最后再用gridlayout窗格布局将各种组件插入了图形界面中,完成了图形界面的布局。另外我们还对图片进行了许多美工的处理,修改了界面左上角的图标以及标题,使得

19、最后的图形界面比较接近我们理想的状态。6、 测试与运行记录检测模块检测项预计输入起点站预计输入终点站检测类别测试结果是否正确地铁线路测试所用时间苹果园万寿路非换乘站非换乘站18分钟是五道口霍营非换乘站换乘站20分钟是慈寿寺苏州街换乘站非换乘站10分钟是复兴门宣武门换乘站换乘站4分钟是天安门东柳芳非换乘站换乘站非换乘站24分钟是大钟寺北土城非换乘站换乘站换乘站17分钟是国家图书馆大红门换乘站换乘站非换乘站33分钟是复兴门芍药居换乘站换乘站换乘站30分钟是西直门平安里西直门换乘站9分钟是西直门动物园西直门非换乘站2分钟是西直门和平西桥西直门换乘站非换乘站26分钟是西直门呼家楼西直门换乘站换乘站35

20、分钟是动物园积水潭非换乘站西直门非换乘站12分钟是上地灵境胡同非换乘站西直门换乘站27分钟是国家图书馆积水潭换乘站西直门非换乘站14分钟是白石桥南雍和宫换乘站西直门换乘站20分钟是7、 课程设计完成结果分析与个人小结为期十周的软件工程课程设计终于接近了尾声,我们的工作也都进入了收尾的工作。就程序开发的过程而言,我认为我们小组的效益和分工是非常不错的。我们每周都会例行会议,作为组长,我每周都会针对每一位组员的能力以及长处进行工作的分配。我们的程序条理较为清晰,大致分为数据库部分、程序算法部分以及图形界面部分,每人都有自己负责的部分,每周的报告大家也都认真的完成,每周的工作都在有条不紊、循序渐进的进行着。当然,我们在开发过程中也遇到了不少的问题,数据库与ide的连接问题、算法的输出错误以及图形界面输出路线无法调节粗细等等,不过经过大家的努力,这些问题也都一一解决了。就结果而言,我们的程序的完成度是比较高的,至少是比我们预期的效果要好很多。首先,非常好的实现了指导书上要求的所有功能,用户可以选择起始站点和终点站点,可以选择较快捷、少换乘、最优三种乘车方案,同时程序会根据系统时间来判断当前是否

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论