公交线路查询系统 ——数据搜集和基于web的后台数据管理-毕业论文_第1页
公交线路查询系统 ——数据搜集和基于web的后台数据管理-毕业论文_第2页
公交线路查询系统 ——数据搜集和基于web的后台数据管理-毕业论文_第3页
公交线路查询系统 ——数据搜集和基于web的后台数据管理-毕业论文_第4页
公交线路查询系统 ——数据搜集和基于web的后台数据管理-毕业论文_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

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

文档简介

厦门市公交查询系统 厦门市公交线路查询系统数据搜集和基于web的后台数据管理摘要:本文首先对本系统做了简要的描述,然后总结了一下本次开发中用到的主要背景知识。功能表述部分,主要包括三大块内容:大量数据搜集、地图数据转化、基于Web的后台数据管理。大量数据搜集部分较详细的介绍了如何用程序实现大量数据导入数据库;地图数据的转化部分由于实现不够好,工作单一,只简略介绍了一下;后面重点介绍了基于Web的后台数据管理这个功能模块,这部分主要介绍了两大块:如何利用JSP/BEAN实现网络的多层开发和多人合作开发;如何具体实现在Web上对站点数据、地点数据和线路数据的基本操作和维护,包括管理员的管理,对每部分的功能实现后面还做出了评价并提出部分改进的方案。在文章的结尾部分对本次毕业设计项目做出总结。关键词:JAVA SQL JSPAbstract: This article describes the whole system at first, than I summarizes the main background knowledge in this exploitation. In the part of function description, three parts are included: searching abundance of data, translating the geographical data and managing the background data from browser. In part of searching abundance of data, I introduces how to insert abundance of data into the database with the help of programs. Because of the simpleness, the part of translating the geographical data are presented curtly. Than I particularly describes the part of managing the background data from browser, which contains two parts : how to implement the multilayer and cooperate development in network, and how to concretely implement managing and maintenancing the station data, location data and line data in the browser. I also evaluate every part and and offer some ameliorate funtionAt last , I summarizes this exploitation and get the result.KeyWords: JAVA SQL JSP目 录一、前言:5二、产品描述:51.系统描述:52.项目可行性分析:63开发工具和平台6三、主要背景知识:61Java对文件的读写操作:62Java对数据库的操作:73JSP与Servlet:7四、功能实现描述:81.数据搜集-大量数据导入:81.1概述:81.2设计思路:81.2.1背景:81.2.2分析:101.2.3实现思路:101.3评价及改进:142数据搜集-地图数据搜集:142.1主要工作:142.2背景:142.3难点分析:152.4评价及改进:153基于Web的后台数据管理系统:153.1概述:153.2设计思路:153.3功能实现流程:153.4界面结构:173.5主要接口:173.5.1类名:Admin.java173.5.2类名:Station.java183.5.3类名:Location.java183.5.4类名:Line.java193.6各模块具体实现流程203.6.1管理主页面:203.6.2管理员身份验证和密码的管理:203.6.3站点的添加删除和修改:213.6.4地点的添加删除和修改:223.6.5线路的添加删除和修改:243.7评价及改进:26五、小结:26六、致谢语:27七、参考文献:27一、前言:本小组共五人,开发项目为厦门市公交线路查询系统。本系统分为前台应用和基于web的后台数据管理和维护两大部分。本人在系统开发的过程中主要负责实现数据搜集,包括大量数据的导入,地图数据的转化;基于web的后台数据管理系统,包括:对站点数据的添加、修改、删除;对地点的添加、修改和删除;对线路的添加、修改和删除。这几个功能模块主要围绕数据库的操作,属于整个系统的后台部分,是十分重要的。这些功能的详细描述会在后面的功能描述中体现出来。这次开发过程中,知识主要涉及JAVA的数据库开发,JAVA文件流操作,和JSP开发方面的知识,通过这次开发,我在这几个方面的知识得到了进一步的提高,认识更加的透彻了。另外在整个项目的合作开发过程中,对于项目层次结构的理解,对于合作中接口的开发调用有了更深的了解,对今后类似的团队项目开发设计有很大的指导意义。二、产品描述:1.系统描述:本公交查询系统是针对厦门市实际路况开发的一套公交线路查询系统,主要分为前台应用和基于web的后台数据管理和维护两大部分。前台应用分为三个部分,即:基于移动电话的应用、基于个人PDA的应用,基于个人PC上的web浏览器应用。每一种平台上均提供以下几个主要功能:按车次查询(输入公交车次查询获得该线路的所有站点状况)、按站点/地点查询(输入站点或者输入地点检索最近的站点进行查询)、按起点/终点查询(输入起点和终点获得所有可到达的线路方案,包括转车方案,并推荐最优方案)基于web的后台管理与维护包括对站点、地点与线路的数据操作,包括添加、修改、删除等基本操作。2.项目可行性分析:本系统的开发针对厦门市的具体路况,有一定的实际价值,但由于时间和技术熟练度的问题,要直接用于商用还有一定的难度,如进行优化做好市场,用于商业运用还是可行的。3开发工具和平台服务器:Tomcat;开发语言和工具:JAVA/JSP;JBuilder/Dreamware/UltraEdit;数据库:SQL Server开发平台:Win XP三、主要背景知识: 1Java对文件的读写操作:通常是用 InputStream & OutputStream 这两个基类来进行读写操作的。InputStream 中的 FileInputStream 类似一个文件句柄,通过它来对文件进行操作,类似的,在OutputStream 中我们有 FileOutputStream 这个对象。用FileInputStream 来读取数据的常用方法是:FileInputStream fstream = new FileInputStream(args0);BufferedReader br = new BufferedReader(fr); 用 br.readLing() 来读出数据,然后用br.close() 关闭缓存,用fr.close() 关闭文件。FileInputStream和FileOutputStream对一个磁盘文件涉及的数据流进行输入输出处理,是字节级的读写操作;Java的流不具备预读和缓冲功能,需要额外处理,BufferInputStram对流进行缓冲处理;文本流,即通过主机环境的工具,人眼能够辨别的文件内容,由于windows的字串写入是ASCII格式的,人眼无法辨别文件内容,Java提供一套流过滤器弥补Unicode编码和本机操作系统采用字符编码的裂缝。InputStreamReader 特殊的编码方案输入字节流转换为Unicode字符;这个类采用主机默认编码,在windows中使用ISO8859-1编码,即“ASNI”编码,若想识别中文,要在此处转换编码方式;2Java对数据库的操作:JDBC常被认为是代表 “Java 数据库连接 (Java Database Connectivity)”。它由一组用 Java 编程语言编写的类和接口组成。简单地说,JDBC 可做三件事:与数据库建立连接,发送 SQL 语句,处理结果。目前,Microsoft 的 ODBC(开放式数据库连接)API 可能是使用最广的、用于访问关系数据库的编程接口。它能在几乎所有平台上连接几乎所有的数据库。但Java 不使用 ODBC,本试验中在 JDBC 的帮助下使用JDBC-ODBC 桥使 ODBC 驱动程序可被用作 JDBC 驱动程序。3JSP与Servlet:从网络三层结构的角度看,一个网络项目最少分三层:data layer,business layer, presentation layer,也可以更复杂。SERVLET用来写business layer是很强大的,但是对于写presentation layer就很不方便,且很容易造成两层混杂。在本项目中考虑JSP存放与presentation layer有关的东西,而所有的数据计算,数据分析,数据库联结处理,统统是属于business layer,放在JAVA BEANS中。通过JSP调用JAVA BEANS,实现两层的整合。JSP+BAEN,用JSP写presentation layer,用BAEN写business layer。四、功能实现描述:1.数据搜集-大量数据导入:1.1概述:建立公交线路和公交站台的数据库表格,然后将数据导入到数据库表中。这些表格的数据为整个公交查询系统的核心数据。1.2设计思路:1.2.1背景:与小组其他成员交流,根据搜索方法,需首先建立如下几个表格述:表1:数据库结构表名:Station_DB字段名字段类型主键可以重复可以为空字段意义Station_IDInt是否否自动编号Station_NameString否否每个站台的名称,如“厦大站”,该字段填入“厦大”Station_Name_enString是是站台的英文名,用于英文查找使用,该处采用拼音,如“厦大站”填入“xiada”Station_XInt是是站点的坐标X(留至“地图地点转换”时详细说明)Station_YInt是是站点的坐标Y(留至“地图地点转换”时详细说明)表名:Line_DB字段名字段类型主键可以重复可以为空外键及相关表字段意义Line_IDInt是否否自动编号Bus_NumInt是否公交路数Station_IDInt是否Station_DB表Station_ID字段站台的IDStation_NumInt是否Station_DB表Station_Num字段在某条线路中,某公交车经历的站台的次序举例说明:一路车依次经过厦大站,博物馆站,大生里站二路车依次经过湖里山站,西村站,博物馆站在Station_DB表格里存在唯一ID的几个纪录,Station_Name为“厦大”,“博物馆”,“大生里”,“湖里山”,“西村”Station_Name_en为“xiada”,“bowuguan”,“dashengli”,“hulishan”,“xicun”假设Station_ID依次为“1”,“2”,“3”,“4”,“5”于是可以输入Line记录,Bus_Num:1(一路车),Station_Num:1(一路车经过的第一站),Station_ID:1(厦大站);Bus_Num:1(一路车),Station_Num:2(一路车经过的第二站),Station_ID:2(博物馆);Bus_Num:1(一路车),Station_Num:3(一路车经过的第三站),Station_ID:3(大生里);Bus_Num:2(二路车),Station_Num:1(二路车经过的第一站),Station_ID:4(湖里山);Bus_Num:2(二路车),Station_Num:2(二路车经过的第二站),Station_ID:5(西村);Bus_Num:2(二路车),Station_Num:3(二路车经过的第三站),Station_ID:2(博物馆);1.2.2分析:由于数据量相当大,且Line_DB中有两个为Station_DB中的相关字段,直接手工输入几乎是不可能的,必须通过程序导入。主要涉及技术:JAVA的文件流操作,数据库操作,中文操作;1.2.3实现思路:图1:UML图:stationDatabase.java该类主要实现对Station_DB表的操作: 构造函数:实现数据库的连接 getConn():获取这个连接; FindRecord(String stationName):判断站点是否存在,传入参数stationName表示站点名称,存在就返回true,不存在返回false; AddRecord(String stationName):调用FindRecord(String stationName)方法,若该站点不存在,即还没有添加,则传入参数stationName表示站点名称,添加成功就返回1,添加失败就返回0,若该站点已存在,则不添加站点,返回0; GetStationID(String stationName):查询该站点名称并获取站点的Station_ID,传入参数stationName表示站点名称;图2:UML图:stationRead.java 该类构造函数中首先实现调用java.io类库中的FileInputStream按中文编码utf-8格式读取文本文件,然后转化为BufferReader。根据文本文件中的关键字符间隔,读取站点名称,进行一定的转换后调用StationDatabase.java中的AddRecord(String stationName)方法添加站点记录图3:UML图:LineDatabase.java该类主要实现对Line_DB表的操作: 构造函数:建立StationDatabase的一个实例,创建一个连接,使其等于StationDatabase的连接; AddRecord(String lineID,String stationName,String busNum,String stationNum):添加一条记录到Line_DB表,传入参数lineID为顺序编号,每次递增1;stationName表示站点名称,busNum表示公交车的路数,stationNum为第几站,当busNum相同时为顺序编号,每次加1;图4:UML图:LineRead.java 该类构造函数中首先实现调用java.io类库中的FileInputStream按中文编码utf-8格式读取文本文件,然后转化为BufferReader。根据文本文件中的关键字符间隔,读取关键字段,每读出一个关键字段进行一些游标计算,最终调用LineDatabase.java中的AddRecord(String lineID,String stationName,String busNum,String stationNum)方法添加一条线路记录1.3评价及改进:优点:可扩展性比较好,适用于数据量较大,搜集的原始数据格式比较统一的情况。对于大数据量输入速度比较快,输入的正确率比较高。缺点:要单独编写程序比较麻烦,对原始数据的格式也比较高。2数据搜集-地图数据搜集:2.1主要工作:分割地图,获取地图上的关键地点的坐标,存入数据库。2.2背景:表2:Location_DB表结构字段名字段类型主键可以重复可以为空Location _IDInt是否否Location _NameString否否Location _Name_enString是是Location _XInt是是Location _YInt是是2.3难点分析:这里最重要的是地图的分割:分割太小,数据量较多,划分比较复杂,而搜索起来也很麻烦,还可能导致搜索不到;比如本来某个地点距离站点很近,可是由于分割很细,导致地点和站点间的坐标相差很大,系统就认为两个地点距离太远,不应搜索到,于是导致错误的结果。但是如果分割太大,地点集中在同样的坐标范围内,比如两个站点本来应该在较远的两个个区域内,可是由于划分过粗,导致某个地点距离这两个站点的距离差距不明显,好像哪个站点到该地点的距离值都是1,这样就搜索不到最优结果了。2.4评价及改进:这样只适合数据量不大的情况,由于时间有限,只选取了关键的一些地点,所以手工输入还是可以实现的。后来查阅资料,若使用软件,自动生成空间数据似乎可行,可是由于资料不够充分,缺少电子地图和时间有限,并没能实现。3基于Web的后台数据管理系统:3.1概述:在web上实现对数据库的基本管理功能。主要功能有:管理员登陆,管理员密码修改,站点数据操作,地点数据操作,线路数据操作。3.2设计思路:设计语言:JAVA,JSP;数据库:SQL SERVER;关键技术:基于JSP/Bean的web程序开发;3.3功能实现流程:主要由如下几层结构组成,一个数据处理流程可如此表示:表示层提供数据操作的条件输入和数据操作的选择,此处对数据的基本格式,将相关条件传送到JSP处理程序,先由这样做的好处主要是方便集体开发,分工合作;结构清晰,便于修改,便于重用;图5:功能层次结构图3.4界面结构:图6:功能层次结构图3.5主要接口:3.5.1类名:Admin.java主要功能: checkUserPwd(String username,String userpwd):检测用户名和密码是否正确,传入参数username 表示用户名,userpwd表示密码,如果用户和密码都正确返回true,否则返回false; 修改用户密码; modifyUserPwd(String username,String userpwd):修改用户密码,传入参数username表示用户名,userpwd表示新密码,如果修改成功返回true,否则返回false;3.5.2类名:Station.java主要功能: checkStation(String station):提供站点查询,传入的参数station是一个站点名,站点存在返回true,不存在返回false; Station(String station):根据站名取得站点信息,传入参数station_name 为站点名,返回结果是一个记录集,为空表示查询出错或没有结果; addStation(String station,int station_x,int station_y,String station_en):往表station_db里添加一条新记录,传入参数station(站点名),station_x(x坐标),station_y(y坐标),station_en(英文站点名)添加成功返回true,否则返回false; modStation(int id,String station_name,int station_x,int station_y,String station_name_en):修改station_db表记录,传入参数id(站点id),station 站点名,station_x(x坐标),station_y(y坐标),修改成功返回true,否则返回false; delStation(String station_name):从表station_db里删除记录,传入参数station 站点名,删除成功返回true,否则返回false;3.5.3类名:Location.java主要功能: checkLocation(String location):提供地点查询,传入的参数location是一个地点名,地点存在返回true,不存在返回false Location(String location):根据地名取得站点信息,传入参数location_name 为地点名,返回结果是一个记录集,为空表示查询出错或没有结果 addLocation(String location,int location_x,int location_y,String location_en):往表location_db里添加一条新记录,传入参数location(地点名),location_x(x坐标),location_y(y坐标),location_en(英文地点名)添加成功返回true,否则返回false modLocation(int id,String location_name,int location_x,int location_y,String location_name_en):修改location_db表记录,传入参数id(站点id),location 地点名,location_x(x坐标),location_y(y坐标),修改成功返回true,否则返回false delLocation(String location_name):从表location_db里删除记录,传入参数location 地点名,删除成功返回true,否则返回false3.5.4类名:Line.java主要功能: getStation_id(String station_name):由站点名获取站点标识,传入参数station_name站点名,返回值为station_id,若返回-1表示站点不存在 checkLine(int bus_num,String station_name):查询公交车是否经过某一站,如果bus_num经过station_name 这一站则返回true getLine(String bus_num):查询bus_num路车经过的所有站点,返回结果是一个记录集,为空表示查询出错或没有结果,记录按station_num从小到大排序 modLine(int line_id,int station_num):根据Line_id 修改Line_db表中station_num字段,修改成功返回true,否则返回false addLine(int bus_num,String station_name,int station_num):在line_db表里添加一条记录,传入参数bus_num(几路车),station_name(站点名),station_num(第几站),添加成功返回true,否则返回false delLine(int bus_num,String station_name):删除line_db 里的一条记录,传入参数bus_num(几路车),station_name(站点名),删除成功返回true,否则返回false modLine(int id,int bus_num,String station_name,int station_num):修改Line_db表的的第id条记录,bus_num(几路车),station_name (站点名字), station_num(第几站),修改成功则返回true3.6各模块具体实现流程3.6.1管理主页面:manager.htm;top.htm;about.htm图7:管理界面 采用框架结构,框架上方为top.htm,显示功能链接,链接的页面显示在中间的框架里;about.htm显示一些版本信息3.6.2管理员身份验证和密码的管理:login.jsp;logincheck.jsp;modpwd.jsp 身份验证:login.jsp中显示管理员登陆界面,需输入用户名和密码,点击确定后提交给logincheck.jsp处理,logincheck.jsp中接受login.jsp的表单中提交的用户名和密码,调用Admin.java中的checkUserPwd(String username,String userpwd)方法,若返回为true时就转到about.htm页面,且将用户名和密码放至session中,将session值logined至为1;若返回false,就转回login.jsp页面,并传递msg参数说明用户名或密码出错,需重新登陆; 密码修改:modpwd.jsp先判断logined值是否为1,若没有登陆,直接跳回login.jsp页面;否则显示修改密码界面,表单提交新密码,脚本先判断输入的有效性,正确时交给本页程序部分处理,程序部分取得session中的用户名和提交的合法新密码,调用Admin.java中的modifyUserPwd(String username,newpwd)方法验证密码,若返回true则说明修改成功并跳转到登陆页面,要求用新密码登陆;若返回为false,则跳回登陆页面用旧密码登陆;3.6.3站点的添加删除和修改:addStation.jsp;Station.jsp;mgrStation.jsp;delStation.jsp;modStation.jsp;modStation2.jsp; 点击站点管理功能时首先链接到Station.jsp,先判断logined值是否为1,若没有登陆,直接跳回login.jsp页面;若合法登陆了,显示如下界面:图8:站点操作界面上方显示添加站点的表单,有站点名,站点英文名,站点位置X,站点位置Y,脚本对输入的合法性检测后,递交给addStation.jsp处理;Station.jsp下方表单提供输入站点名称,脚本检验后给mgrStation.jsp对输入的站点进行相应的处理; addStation.jsp获取表单提交的字段后,调用Station.java中的addStation(String station,int station_x,int station_y,String station_en)方法处理,若添加成功返回Station.jsp做其它站点处理;若添加失败则返回 Station.jsp重新添加; mgrStation.jsp获取表单提交的站点名称,调用Station.java中的Station(String stationName)方法获取该站点的记录集,获取各个字段值后分类显示出来,且在每条记录处提供对该记录的删除和修改操作链接,修改链接还要传递站点ID参数; 修改站点操作链接到modStation.jsp,先调用SetandGet.java函数中的setStationID(String stationID)方法存入站点ID;显示修改表单,提供站点名称,站点位置X,站点位置Y,站点英文名的修改,脚本对输入的合法性检验后提交到modStation2.jsp处理; modStation2.jsp接受表单参数,再通过SetandGet.java中的getStationID()方法获取站点ID,调用Station.java中的modStation(String stationID, String stationName, String stationX, String stationY, String eName)方法修改站点记录,然后跳转到Station.jsp进行其它操作; 删除站点操作链接到delStation.jsp,接受到mgrStation.jsp的站点名称,调用Station.java中的delStation(String stationName)方法删除站点,并返回Station.jsp选择其它操作;3.6.4地点的添加删除和修改:addLocation.jsp;Location.jsp;mgrLocation.jsp;delLocation.jsp;modLocation.jsp;modLocation2.jsp 点击地点管理功能时首先链接到Location .jsp,先判断logined值是否为1,若没有登陆,直接跳回login.jsp页面;若合法登陆了,显示如下界面:图9:地点操作界面上方显示添加地点的表单,有地点名,地点英文名,地点位置X,地点位置Y,脚本对输入的合法性检测后,递交给addLocation .jsp处理;Location .jsp下方表单提供输入地点名称,脚本检验后给mgrLocation .jsp对输入的地点进行相应的处理; addLocation .jsp获取表单提交的字段后,调用Location .java中的addLocation (String location ,int location _x,int location _y,String location _en)方法处理,若添加成功返回Location .jsp做其它地点处理;若添加失败则返回 Location .jsp重新添加; mgrLocation .jsp获取表单提交的地点名称,调用Location .java中的Location (String location Name)方法获取该地点的记录集,获取各个字段值后分类显示出来,且在每条记录处提供对该记录的删除和修改操作链接,修改链接还要传递地点ID参数; 修改地点操作链接到modLocation .jsp,先调用SetandGet.java函数中的setLocation ID(String location ID)方法存入地点ID;显示修改表单,提供地点名称,地点位置X,地点位置Y,地点英文名的修改,脚本对输入的合法性检验后提交到modLocation 2.jsp处理; modLocation 2.jsp接受表单参数,再通过SetandGet.java中的getLocation ID()方法获取地点ID,调用Location .java中的modLocation (String location ID, String location Name, String location X, String location Y, String eName)方法修改地点记录,然后跳转到Location .jsp进行其它操作; 删除地点操作链接到delLocation .jsp,接受到mgrLocation .jsp的地点名称,调用Location .java中的delLocation (String location Name)方法删除地点,并返回Location .jsp选择其它操作;3.6.5线路的添加删除和修改:addLine.jsp;addLine2.jsp;Line.jsp;mgrLine.jsp;delLine.jsp;modLine.jsp;modLine2.jsp 点击线路管理后直链接到Line.jsp,先判断logined值是否为1,若没有登陆,直接跳回login.jsp页面;若合法登陆了,显示如下公交路数输入框,决定选择几路车的线路进行处理:图10:线路操作界面1若输入的线路合法,则转至mgrLine.jsp,否则给出错误信息,并停留在本页; mgrLine.jsp接收到Bus Number,调用Line.java中的getLine(String busNum)方法获取该车次的相关记录集,获取各个字段值后分类显示出来,且在每条记录处提供对该记录的添加,删除和修改操作链接;如要操作一路车的某段线路:图11:线路操作界面2添加时传递该Bus_Number和Station_Number+1,即表示在该路车通过时,本线路站台后添加一个站台,其他站台依次向后一个;修改链接传递该线路ID;删除链接传递Bus_Number和Station_Name参数; 添加线路操作链接到addLine.jsp,先调用SetandGet.java函数中的setBusNum(String busNum)和setStationNum(String stationNum)方法保存公交车次和站台次序,然后显示站点名称输入框,输入在该线路上要添加的站点,脚本验证后提交给addLine2.jsp; addLine2.jsp先通过SetandGet.java函数中的get方法获得公交车次和站台次序,然后接收addLine.jsp传递的站点名称,首先调用Station.java中的checkStation(String station

温馨提示

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

评论

0/150

提交评论