计算机科学与技术毕业文,计算机科学与技术毕业设计

点赞:5389 浏览:12682 近期更新时间:2024-01-09 作者:网友分享原创网站原创

计算机科学与技术专业本科毕业论文

题目:公交查询系统

学号:021220753

姓名:尹翔

学校:开放教育学院

指导教师:赵业军

答辩日期:2004年9月

论文成绩:

湖南广播电视大学

目录

摘 要3

第一章绪论4

1.1数据库技术4

1.1.1数据库的体系结构4

1.1.2数据库管理系统(DBMS)4

1.2公交查询系统5

1.2.1计算机网络5

1.2.2系统功能6

1.2.3系统运行环境6

1.2.4系统开发工具6

1.2.5现状与前景6

1.3本文所作工作7

第二章数据库理论基础8

2.1关系型数据库8

2.1.1关系模型的基本概念8

2.1.2数据库的设计理论9

2.2SQL语言介绍10

2.2.1SQL的组成11

2.2.2SQL的数据查询11

2.2.3SQL的数据更新12

第三章技术背景介绍144

3.1JSP技术介绍144

3.1.1JSP与ASP的简单比较144

3.1.2JSP运行环境3.1.1JSP与ASP的简单比较144

3.1.3JSP页面示例145

3.2B/S系统介绍188

3.2.1B/S架构具备极大的优越性:19

3.2.2采用JA语言实现20

第四章公交查询系统设计分析211

4.1应用需求分析211

4.2系统功能模块划分211

4.3系统数据库设计212

4.3.1概念设计212

4.3.2逻辑设计214

第五章公交查询系统应用程序设计(部分)25

5.1查询模块的功能实现255

5.2管理更新的功能实现288

5.2.1公交站点管理288

5.2.2公交线路管理311

第六章结束语366

摘 要 本文结合系统的实际需要,通过对/S模式,开发工具,数据库以及SQL语言的深入学习及实践,主要完成了系统的需求分析,数据库设计,应用程序设计的工作.

关 键 词:/S结构,,数据库,SQL语言,

第一章绪论 1.1数据库技术 数据库技术作为数据管理技术,是计算机软件领域的一个重要分支,产生于60年代末.现已形成相当规模的理论体系和实用技术.优秀的数据库设计是应用成功的基石.万万丈高楼平地起,数据库设计如同高楼的基石,是开发高品质应用的前提. 1.1.1数据库的体系结构 数据的体系结构分成:内部级(Internal),概念级(Conceptual)和外部级(External).这个结构有时也称为"模式结构". 外部级:最接近用户,是单个用户所能看到的数据特性.单个用户使用的数据视图的描述称为"外模式". 概念级:涉及到所有用户的数据定义,是全局的数据视图.全局视图的描述称为"概念模式". 内部级:最接近于物理存储设备,涉及到实际数据存储的结构物理存储数据视图的描述称为"内模式". 数据库的模式结构是数据的三个抽象级别.它把数据的具体组织留给DBMS去做,用户只要抽象地处理数据,而不必关心数据在计算机中的表示和存储,这样就减轻了用户使用系统的负担. 1.1.2数据库管理系统(DBMS) 数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统.DBMS是数据库系统的核心组成部分.对数据库的一切操作,包括定义,查询,更新及各种控制,都是通过DBMS进行的. 在不同的计算机系统中,由于缺乏统一的标准,即使同种数据模型的DBMS,它们在用户接口,系统功能方面也常常是不相同的. 用户对数据库进行操作,是由DBMS把操作从应用程序带到外部级,概念级,再导向内部级,进而操作存储器中的数据.DBMS的主要目标,是使数据作为一种可管理的资源处理. DBMS的主要功能为: 数据库定义功能:DBMS提供数据定义语言(DDL)定义数据库的结构,包括外模式,概念模式,内模式及基相互之间的映象,定义数据的完整性,安全控制等约束.因此,在DBMS中应包括DDL的编译程序. 数据库的操纵功能:DBMS提供数据操纵语言(DML)实现对数据库中数据的操作.基本的数据操作分成两类四种: 检索(查询)更新(插入,删除,修改) 数据库的保护功能:数据库中的数据是信息社会的战略资源,对数据的保护是至关重要的大事.DBMS对数据库的保护主要通过四个方面实现: 数据库的恢复:在数据库被破坏或数据不正确时,系统有能力把数据库恢复到正确的状态. 数据库的并发控制:DBMS的并发控制子系统能防止错误发生,正确处理好多用户,多任务环境下的并发操作. 数据库的完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作. 数据库的安全性控制:防止未经授权的用户蓄谋或无意地存取数据库中的数据,以免数据的泄露,更改或破坏. 数据库的存储管理:把各种DML语句转换成低层的文件系统命令,起到数据的存储,检索和更新的作用. 数据库的维护功能:它有许多实用程序提供给数据库管理员: 数据装载程序 备份程序 文件重组织程序 性能监控程序 数据字典:数据库系统中存放结构定义的数据库称为数据字典(DD).对数据库的操作都要通过访问DD才能实现,通常DD中还存放数据库运行时的统计信息. 1.2公交查询系统 1.2.1 计算机网络是指将多台具有独立功能的计算机,通过通信线路和通信设备连接起来,在网络软件的支持下实现数据通信和资源共享的计算机系统. 计算机网络的规模有大有小,大的可以覆盖全球,小的仅局限于一个办公室.现在一般按照网络覆盖的地理范围将计算机网络分为三类:局域网(LAN),城域网(MAN),广域网(WAN). 1.2.2系统功能 分类查询 2,数据的录入,修改添加删除 1.2.3系统运行环境 该系统采用/Server模式进行设计:怎么写作器上运行怎么写作器程序,操作系统为indowsNT/2000/XP/2003server,客户机操作为Windows92000/XP/2003,其上运行程序. 1.2.4系统开发工具 该系统采用进行开发,数据库怎么写作器为SQL,WEB务器为TomcatServer,客户端,整个系统调试成.1.2.5现状与前景

公交查询系统现状分析:鉴于中国目前的经济发展状况,中国人出行还是以公交车为主,所以每个城市的公交系统都比较庞大发达.公交查询系统是近两年出现的新生事物,每个城市的发展状况也是良莠不齐.目前的公交查询系统,基本上具备一下功能:采用车站站点查询,车次查询,路线分析查询三种查询形式,不仅能够查询到各条线路的起停站点,同时还能够分析出换乘车辆情况. 1.3本文所作工作 首先介绍了城市公交查询系统的应用背景,开发环境以及选用的开发工具与数据库的关系,阐明了的概念.并对数据库的体系结构,DBMS进行了介绍介绍关系型数据库的基本概念,着重说明了几个关键概念的定义,然后对SQL语言作了一个介绍说明从特点和功能入手,介绍,并且介绍了/S模式的概念,特点用软件工程的方法分析城市公交查询系统,对整个系统进行了需求分析,功能模块划分,并通过ER图对数据库进行概念设计对城市公交查询系统的具体设计描述了查询,模块实现过程最后,在结束语的总结部分指出了系统的亮点以及不足之处简单介绍了自己开发过程中的体会与心得:在摸索中实践,在实践中摸索.第二章数据库理论基础 2.1关系型数据库 2.1.1关系模型的基本概念 用二维表格结构表示实体集,外键表示实体间联系的数据模型称为关系模型. 1.二维表格 表2-1是一张职工登记表,这是二维表格 工号姓名年龄性别工资 0001Zhang26男1000 0002Li25女1500 0003Liu29男1000 0004Wang22女1500 表1二维表格实例 为简单起见,对表格数学化,用字母表示表格的内容.表1可用图1 ABCDE A1A2A3A4B1B2B3B4C1C2C3D1D2D3D4E1E2E3E4

图12.键(KEY) 键由一个或几个属性组成,在实际使用中,有下列几种键: 1)超键(SuperKey):在关系中能惟一标识元组的属性集称为关系模式的超键. 2)候选键(CandidateKey):不含有多余属性的超键称为候选键.也就是在候选键中,若要再删除属性,就不是键了. 3)主键:(PrimaryKey):用户选作元组标识的一个侯选键称为主键.一般,如不加说明,则键是指主键. 3.关系的定义和性质 我们可以用集合的观点定义关系.关系是一个元数为K(K>,等于1)的元组的集合. 把关系看成是一个集合,集合中的元素是元组,每个元组的属性个数应相同.在关系模型中,对关系作了下列规范性限制: 1)关系中每一个属性值都是不可分解的. 2)关系中允许出现相同的元组(没有重复元组) 3)由于关系是一个集合,因此不考虑元组间的顺序,即没有行序. 4)元组中,属性在理论上也是无序的,但在使用时按习惯考虑列的顺序. 2.1.2数据库的设计理论 关系数据库的设计理论主要包括三个方面的内容:数据依赖,范式,模式设计方法.其中数据依赖起着核心的作用. 1.函数依赖(Functionaldependency,FD)的定义 设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集.对于R(U)的任何一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称"Y函数依赖于X",记作X→Y.如果X→Y,并且对于X的任一真子集X',都有Y不函数依赖于X',则称"Y完全函数依赖于X",记作XfY.若X→Y,但Y不完全函数依赖于X,则称"Y部分函数依赖于X",记作XPY.如果X→Y,Y→Z,且YX,X不函数依赖于Y,则称"Z传递函数依赖于X". 2.范式 在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式.在这五种范式中,一般只用前三种,对于常用系统就足够了.而且这五种范式是"向上兼容"的,即满足第五范式的数据结构自动满足一,二,三,四范式,满足第四范式的数据结构自动满足第一,二,三范式,等,依此类推. 第一范式(firstnormalform,简称1stNF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉.这个去掉重复项的过程就称之为规范化处理.在本文所讨论的开发方法里,1stNF实际上是没有什么意义的.因为我们按规范化建立的指标体系和表的过程都自动保证了所有表都满足1stNF. 第二范式(secondnormalform,简称2ndNF)是指每个表必须有一个(而且仅一个)数据元素为主关键字(primarykey),其它数据元素与主关键字一一对应.例如,在图l9.7中如果我们将合同号定义为主关键字(其它数据元素中的记录数据都有可能重名,故不能作为主关键字),故只要知道了一个合同记录的合同号,就可以唯一地在同一行中找到该合同的任何一项具体信息.通常我们称这种关系为函数依赖(functionaldepEndence)关系.即表中其它数据元素都依赖于主关键字,或称该数据元素唯一地被主关键字所标识. 第三范式(thirdnormalform,简称3rdNF)就是指表中的所有数据元素不但要能够唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其它的函数关系.也就是说对于一个满足了2ndNF的数据结构来说,表中有可能存在某些数据元素依赖于其它非关键宇数据元素的现象,必须加以消除. 为防止数据库出现更新异常,插入异常,删除异常,数据冗余太大等现象,关系型数据库要尽量按关系规范化要求进行数据库设计.下面以教务管理信息系统为例来进行分析. 3.模式设计方法 一个好的模式设计方法应符合下列三条原则: 表达性:涉及到两个数据库模式的等价性问题,即数据等价和依赖等价,分别用无损联接和保持函数依赖来衡量. 分离性:是指属性间的"独立关系"应该用不同的关系模式表达.独立联系是我们所考虑的"基本信息单位".实际上分离就是清除存储异常和数据冗余现象.如果能达到这个目的,就分离.分离的基准就是一系列范式,分离与依赖等价有时是不可兼容的. 最小冗余性:要求在分解后的数据库能表达原来数据库的所有信息这个前提下实现.目的就是节省存储空间,提高对关系的操作效率,清除不必要的冗余.但要注意,在实际使用中,并不一定要达到最小宙余.因为有时带点冗余对于查询处理是有好处的. 关系模式的方法基本上可以分为分解与合成两大类.分解型算法要求输入一个 初始模式集和依赖集,而结果满足数据等价要求.对于合成型算法只要求输入初始依赖集,结果满足依赖等要求.但它们依据的基本思想是共同的,即独立的联系独立表示.

2.2SQL语言介绍 SQL(StructuredQueryLanguage)即"结构式查询语言".SQL虽然名为查询语 言,但实际上具有定义,查询,更新和控制等多种功能.由于它使用方便,功能丰富,语言简单易学,很快得到应用和推广.从20世纪70年代末起,在推出的关系数据库系统产品ORACLE,SQL/DS,DB2,SYBASE上实现了SQL语言.很快,SQL语言被整个计算机界认可.1987年6月,国际标准化组织(ISO)采纳为国际标准.随后,ISO对标准进行了大量的修改和扩充.在1992年推出了新的标准-SQL2.SQL的标准化工作还在继续,新的标准已被命名为SQL3,将包括许多新的数据库概念,正在不征求意见和进行修改 这里将简单介绍基于SQL89和SQL2的语言使用概貌: 2.2.1SQL的组成 SQL主要分成四个部分: 1)数据定义:这一部分也称为"SQLDDL",用于定义SQL模式,基本表,视图和索引. 2)数据操纵:这一部分也称为"SQLDML".它分为数据查询和数据更新两类.其中数据更新又分成插入,删除,和修改三种操作. 3)数据控制:这一部分包括对基本表和视图的授权,完整性规则的描述,事务控制等内容. 4)嵌入式SQL的使用规定:这一部分内容涉及到SQL语句嵌入在宿主语言程序中使用的规则. 2.2.2SQL的数据查询 nSELECT语句的语法 SELECT目标表的列名或列表达式序列 FROM基本表和(或)视图序列 [WHERE行条件表达式] [GROUPBY列名序列 [HING组条件表达式]] [ORDERBY列名[ASC|DESC]等] 句法中[]表示该成分可有,也可无. 整个语句的执行过程如下: a)读取FROM子句中基本表,视图的数据,执行笛卡尔积操作. b)读取满足WHERE子句中给出的条件表达式的元组. c)按GROUP子句中指定列的值分组,同时提取满足HING子句中组条件表达式的那些组. d)按SELECT子句中给出的列名或列表达式求值输出. e)ORDER子句对输出的目标表进行排序,按附加说明ASC升序排列,或按DESC降序排列. SELECT语句中,WHERE子句称为"行条件子句",GROUP子句称为"分组 子句",HING子句称为"组条件子句",ORDER子句称为"排序子句". 2.2.3SQL的数据更新 SQL的数据更新包括数据插入,删除和修改等三种操作 1)数据插入 a)元组值的插入 INSERTINTO基本表名(列名表) VALUES(元组值) 或者INSERTINTO基本表名(列名表) (TABLE(元组值), (元组值), 等) 前一种格式只能插入一个元组,后一种格式可以插入多个元组. 2)数据删除 SQL的删除操作是指从基本表删除元组,其语法如下: DELETEFROM基本表名 [WHERE条件表达式] 其语义是从基本表中删除满足条件表达式的元组. 3)数据修改 当需要修改基本表中元组的某些列值时,可以用UPDATE语句实现,其句法如下: UPDATE基本表名 SET列名等于值表达式[,列名等于值表达式等] [WHERE条件表达式] 其语义是:修改基本表中满足条件表达式的那些元组中的列值,需修改的列值在SET子句中指出.

3.1JSP技术介绍

在Sun正式发布JSP(JaServerPages)之后,这种新的Web应用开发技术很快引起了人们的关注.JSP为创建高度动态的Web应用提供了一个独特的开发环境.按照Sun的说法,JSP能够适应市场上包括ApacheWebServer,IIS4.0在内的85%的怎么写作器产品.3.1.1JSP与ASP的简单比较 JSP与Microsoft的ASP技术非常相似.两者都提供在HTML代码中混合某种程序代码,由语言引擎解释执行程序代码的能力.在ASP或JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑.普通的HTML页面只依赖于Web怎么写作器,而ASP和JSP页面需要附加的语言引擎分析和执行程序代码.程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器.ASP和JSP都是面向Web怎么写作器的技术,客户端浏览器不需要任何附加的软件支持. ASP的编程语言是VBScript之类的脚本语言,JSP使用的是Ja,这是两者最明显的区别.此外,ASP与JSP还有一个更为本质的区别:两种语言引擎用完全不同的方式处理页面中嵌入的程序代码.在ASP下,VBScript代码被ASP引擎解释执行,在JSP下,代码被编译成Servlet并由Ja虚拟机执行,这种编译操作仅在对JSP页面的第一次请求时发生. 3.1.2JSP运行环境 Sun公司的JSP主页在jasoft./products/jsp/index.,从这里还可以下载JSP规范,这些规范定义了供应商在创建JSP引擎时所必须遵从的一些规则. 在运行JSP示例页面之前,请注意一下安装JSWDK的目录,特别是"work"子目录下的内容.执行示例页面时,可以在这里看到JSP页面如何被转换成Ja源文件,然后又被编译成class文件(即Servlet).JSWDK软件包中的示例页面分为两类,它们或者是JSP文件,或者是包含一个表单的HTML文件,这些表单均由JSP代码处理.与ASP一样,JSP中的Ja代码均在怎么写作器端执行.因此,在浏览器中使用"查看源文件"菜单是无法看到JSP源代码的,只能看到结果HTML代码.所有示例的源代码均通过一个单独的"examples"页面提供. 3.1.3JSP页面示例 下面我们分析一个简单的JSP页面.您可以在JSWDK的examples目录下创建另外一个目录存放此文件,文件名字可以任意,但扩展名必须为.jsp.从下面的代码清单中可以看到,JSP页面除了比普通HTML页面多一些Ja代码外,两者具有基本相同的结构.Ja代码是通过<,%和%>,符号加入到HTML代码中间的,它的主要功能是生成并显示一个从0到9的字符串.在这个字符串的前面和后面都是一些通过HTML代码输出的文本. <,HTML>, <,HEAD>,<,TITLE>,JSP页面<,/TITLE>,<,/HEAD>, <,BODY>, <,%@pagelanguage等于"ja"%>, <,%!Stringstr等于"0",%>, <,%for(inti等于1,i<,10,i++){ str等于str+i, }%>, JSP输出之前. <,P>, <,%等于str%>, <,P>, JSP输出之后. <,/BODY>, <,/HTML>, 这个JSP页面可以分成几个部分来分析. 首先是JSP指令.它描述的是页面的基本信息,如所使用的语言,是否维持会话状态,是否使用缓冲等.JSP指令由<,%@开始,%>,结束.在本例中,指令"<,%@pagelanguage等于"ja"%>,"只简单地定义了本例使用的是Ja语言(当前,在JSP规范中Ja是唯一被支持的语言). 接下来的是JSP声明.JSP声明可以看成是定义类这一层次的变量和方法的地方.JSP声明由<,%!开始,%>,结束.如本例中的"<,%!Stringstr等于"0",%>,"定义了一个字符串变量.在每一项声明的后面都必须有一个分号,就象在普通Ja类中声明成员变量一样. 位于<,%和%>,之间的代码块是描述JSP页面处理逻辑的Ja代码,如本例中的for循环所示. 最后,位于<,%等于和%>,之间的代码称为JSP表达式,如本例中的"<,%等于str%>,"所示.JSP表达式提供了一种将JSP生成的数值嵌入HTML页面的简单方法.会话状态维持是Web应用开发者必须面对的问题.有多种方法可以用来解决这个问题,如使用Cookies,隐藏的表单输入域,或直接将状态信息附加到URL中.JaServlet提供了一个在多个请求之间持续有效的会话对象,该对象允许用户存储和提取会话状态信息.JSP也同样支持Servlet中的这个概念 在Sun的JSP指南中可以看到许多有关隐含对象的说明(隐含的含义是,这些对象可以直接引用,不需要显式地声明,也不需要专门的代码创建其实例).例如request对象,它是HttpServletRequest的一个子类.该对象包含了所有有关当前浏览器请求的信息,包括Cookies,HTML表单变量等等.session对象也是这样一个隐含对象.这个对象在第一个JSP页面被装载时自动创建,并被关联到request对象上.与ASP中的会话对象相似,JSP中的session对象对于那些希望通过多个页面完成一个事务的应用是非常有用的. 为说明session对象的具体应用,接下来我们用三个页面模拟一个多页面的Web应用.第一个页面(q1.)仅包含一个要求输入用户名字的HTML表单,代码如下: <,HTML>, <,BODY>, <,FORMMETHOD等于POSTACTION等于"q2.jsp">, 请输入您的姓名: <,INPE等于TEXTNAME等于"thename">, <,INPE等于SUBMITVALUE等于"SUBMIT">, <,/FORM>, <,/BODY>, <,/HTML>, 第二个页面是一个JSP页面(q2.jsp),它通过request对象提取q1.表单中的thename值,将它存储为name变量,然后将这个name值保存到session对象中.session对象是一个名字/值对的集合,在这里,名字/值对中的名字为"thename",值即为name变量的值.由于session对象在会话期间是一直有效的,因此这里保存的变量对后继的页面也有效.q2.jsp的另外一个任务是询问第二个问题.下面是它的代码: <,HTML>, <,BODY>, <,%@pagelanguage等于"ja"%>, <,%!Stringname等于"",%>, <,% name等于request.getParameter("thename"), session.putValue("thename",name), %>, 您的姓名是:<,%等于name%>, <,p>, <,FORMMETHOD等于POSTACTION等于"q3.jsp">, 您喜欢吃什么 <,INPE等于TEXTNAME等于"food">, <,P>, <,INPE等于SUBMITVALUE等于"SUBMIT">, <,/FORM>, <,/BODY>, <,/HTML>, 第三个页面也是一个JSP页面(q3.jsp),主要任务是显示问答结果.它从session对象提取thename的值并显示它,以此证明虽然该值在第一个页面输入,但通过session对象得以保留.q3.jsp的另外一个任务是提取在第二个页面中的用户输入并显示它: <,HTML>, <,BODY>, <,%@pagelanguage等于"ja"%>, <,%!Stringfood等于"",%>, <,% food等于request.getParameter("food"), Stringname等于(String)session.getValue("thename"), %>, 您的姓名是:<,%等于name%>, <,P>, 您喜欢吃:<,%等于food%>, <,/BODY>, <,/HTML>, 3.2B/S系统介绍

传统的C/S架构(客户机/怎么写作器,Client/Server)方式中,业务逻辑位于客户端,每完成一项事务,都要频繁地访问数据库,使得网络上数据流量非常大,对于慢速连接的用户,甚至无法使用.

为弥补上述C/S架构的缺陷,人们发展出了三层或多层架构:客户机—中间件(应用怎么写作器)—数据库怎么写作器(Client—Middleware—DatabaseServer).在这种架构中,业务逻辑放置于中间件怎么写作器上,大量的数据流也位于中间件和数据库之间,而客户机只是简单地发出请求,中间件接受请求后进行事务处理并将处理的结果返回给客户机,这一类型的客户机也称之为"廋客户".B/S架构实际上是三层架构的一种,所不同的是客户端就是目前几乎每台电脑中都有的网络浏览器,而中间件则是Web应用怎么写作器.注意到主要的业务逻辑均由位于Web应用怎么写作器上的Servlet和JSP程序或EJB来处理.

.2.1B/S架构具备极大的优越性面向电子商务时代的技术

将来所有的应用系统几乎都在互联网或企业内部广域网上运行,发展电子商务成为企业不可避免的信息化道路.B/S架构的软件正是电子商务的基石,正是这类软件使得移动办公和分布式协同工作真正成为现实.无论在世界的那个角落,只需要一台可以联网的设备(计算机,PDA甚至手机)都可以方便地与客户联系和与他人协同工作.

软件操作,维护和升级方式的革命

软件系统的改进和升级越来越频繁,B/S架构的产品在维护和升级方面具备显着的优势.无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只对怎么写作器进行,通过远程连接怎么写作器,异地的运维人员甚至于可以做到远程维护和升级,这对人力,时间,费用的节省是相当惊人的.

所有的客户端只是浏览器,所有的操作都和上网浏览网页类似,使用者接受的培训也仅限于业务逻辑而无需将大量精力浪费学习软件操作上.

系统整合

无论是办公自动化(OA)系统,人力资源(HR)系统,客户关系管理(CRM)系统,ERP等等,发展的趋势是不断融合.而采用统一的B/S结构开发的产品无论是现在还是将来都是最好的选择,它提供了真正意义上无缝地与其它系统进行整合的方案.

.2.2采用JA语言实现

跨越平台的限制

尽管目前Windows桌面系统一统天下,但是怎么写作器系统采用的操作系统却具有多样性,包括Linux,Unix,WindowsNT/2000Server等系统都可以实现企业级应用.即便是桌面系统,中国政府出于安全和国家战略的考虑,希望有自己的操作系统,Linux的出现使这种想法变成了现实,不久也许国产的Linux系统将占据更多桌面系统的市场份额.

传统的C/S架构的软件需要针对不同的操作系统开发不同版本的软件,面对众多的操作系统和软件快速的升级换代,采用这一架构开发软件,对于企业的IT投资无疑是一种巨大的风险.而采用Ja语言实现的B/S架构的软件产品真正做到了"一次编写处处运行(WriteOnce,RunAnywhere)",对企业而言,可以规避将来更换操作系统所带来的风险.

健壮的系统

Ja语言实现的软件具有天然的健壮性.这是Ja语言自身的特性保证的.利用Ja写成的软件几乎不可能造成系统崩溃,这正是安全性要求很高的企业级应用所不可或缺的特性.

第四章公交查询系统设计分析 根据数据库系统生存期的设计方法,从数据库应用系统和开发的全过程来考虑,将数据库应用系统设计分为以下几个阶段 1)规划, 2)需求分析, 3)概念设计, 4)逻辑设计 5)物理设计 4.1应用需求分析 要设计一个良好的公交查询系统,就必须首先明确该应用环境对系统的要求.公交查询系统的应用背景为:.因此,该系统需满足以下几方面需求: 查询功能:系统需要提供几种不同方式的查询手段,以实现灵活方便地管理整个系统. 更新: 更新:系统允许用户对修改并且存盘 编辑:系统允许用户对进行,删除的操作,保证现库的真实性与实时性. 打印输出:系统可以将用户查询到的内容动态地生成报表,并打印输出.

4.2系统功能模块划分 查询系统功能划分模块如下: 该模块实现数据的录入,修改,删除功能.该模块由公交站点管理与公交线路管理两部分组成, 4.3系统数据库设计 4.3.1概念设计 概念设计的目标是产生反映城市公交查询系统需求的数据库概念结构,即概念模式.概念模式是独立于数据库逻辑结构,独立于支持数据库的DBMS,不依赖于计算机系统的. ER模型 ER模型是对现实世界的一种抽象.它的主要成分是实体,联系和属性.使 用这三种成分,我们可以建立许多应用环境的ER模型. ER模型的操作 在利用ER模型进行数据库概念设计的过程中,常常需要对ER图进行种种 变换.这些变换又称为ER模型的操作,包括实体类型,联系类型和属性的分裂,合并和增删等等. 利用ER方法的数据库概念设计 利用ER方法进行数据库的概念设计,可以分成三步进行:首先设计局部ER模式,然后把各局部ER模式综合成一个全局ER模式,最后对全局ER模式进行优化,得到最终的ER模式,即概念模式. 设计局部的ER模式 通常,一个数据库系统都是为多个不同用户怎么写作的.各个用户对数据的观点可能不一样,信息处理需求也可能不同.在设计数据库概念结构时,为了更好地模拟现实世界,一个有效的策略是"分而治之",即先分别考虑各个用户的信息需求,形成局部概念结构,然后再综合成全局结构.在ER方法中,局部概念结构又称为局部ER模式,其图形表示称为ER图. 实体和属性的定义如下: (编号,名称,类别) (编号,,,) (,)

E/R图表示

4,联系定义 ER模型的"联系"用于刻画实体之间的关联.一种完整的方式是对局部结构中任意两个实体类型,依据需求分析的结果,考察局部结构中任意两个实体类型之间是否存在联系.若有联系,进一步确定是1:N,M:N,还是1:1等.还要考察一个实体类型内部是否存在联系,两个实体类型之间是否存在联系,多个实体类型之间是否存在联系,等等.设计全局ER模式 所有局部ER模式都设计好了后,接下来就是把它们综合成单一的全局概念结构.全局概念结构不仅要支持所有局部ER模式,而且必须合理地表示一个完整,一致的数据库概念结构. 确定公共实体类型 为了给多个局部ER模式的合并提供开始合并的基础,首先要确定各局部结构中的公共实体类型.在这一步中我们仅根据实体类型名和键枕认定公共实体类型.一般把同名实体类型作为公共实体类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一类候选. 2)局部ER模式的合并 合并的原则是:首先进行两两合并,先和合并那些现实世界中有联系的局部结构,合并从公共实体类型开始,最后再加入独立的局部结构. 3)消除冲突 冲突分为三类:属性冲突,结构冲突,命名冲突. 设计全局ER模式的目的不在于把若干局部ER模式形式上合并为一个ER模式,而在于消除冲突,使之成为能够被所有用户共同理解和接受的同一的概念模型. 全局ER模式的优化 在得到全局ER模式后,为了提高数据库系统的效率,还应进一步依据处理需求对ER模式进行优化.一个好的全局ER模式,除能准确,全面地反映用户功能需求外,还应满足下列条件:实体类型的个数要尽可能的少,实体类型所含属性个数尽可能少,实体类型间联系无冗余. 4.3.2逻辑设计 由于概念设计的结果是ER图,DBMS一般采用关系型,因此数据库的逻辑设计过程就是把ER图转化为关系模式的过程.由于关系模型古有的优点,逻辑设计可以充分运用关系数据库规范化理论,使设计过程形式化地进行.设计结果是一组关系模式的定义. 1)导出初始关系模式 2)关系子模式 子模式是用户所用到的那部分数据的描述.除了指出用户用到的数据外,还应指出数据与概念模式中相应数据的联系,即指出概念模式与子模式之间的对应性.


公交查询系统应用程序设计 5.1查询模块的功能实现

<,%@pagecontentType等于"text/,charset等于ISO8859_1"%>,

计算机科学与技术毕业文,计算机科学与技术毕业设计参考属性评定
有关论文范文主题研究: 关于数据库的论文范文素材 大学生适用: 硕士论文、专升本论文
相关参考文献下载数量: 24 写作解决问题: 如何怎么撰写
毕业论文开题报告: 论文任务书、论文总结 职称论文适用: 职称评定、初级职称
所属大学生专业类别: 如何怎么撰写 论文题目推荐度: 优质选题

<,%@pageimport等于"ja.sql.*,ja.util.*lanyuer.util.*,"%>,

<,%

Listroutes等于null,

Connectionconnection,

.lanyuer.route.route_Managerroute_Manager等于.lanyuer.route.route_Manager.getInstance(),

connection等于DataConnectionManager.getInstance().getConnection(),

try{

routes等于route_Manager.selectes(connection),

}catch(Exceptione){

throwe,

}finally{

if(connection!等于null){

connection.close(),

connection等于null,

}

}

%>,

<,>,

<,head>,

<,title>,公交查询<,/title>,

<,metahttp-equiv等于"Content-Type"content等于"text/,charset等于ISO8859_1">,

<,/head>,

<,SCRIPTlanguage等于JASCRIPTtype等于text/jascript>,

<,!--

functionloginSubmit(theObj)

{

if(theObj.fromStep.value等于等于""&,&,theObj.toStep.value!等于"")

{

alert("始发站不能为空"),

theObj.fromStep.focus(),

returnfalse,

}

elseif(theObj.fromStep.value!等于""&,&,theObj.toStep.value等于等于"")

{

alert("终点站不能为空"),

theObj.toStep.focus(),

returnfalse,

}

elseif(theObj.fromStep.value等于等于""&,&,theObj.toStep.value等于等于"")

{

alert("始发站和终点站不能为空"),

theObj.fromStep.focus(),

returnfalse,

}

returntrue,

}

//-->,

<,/SCRIPT>,

<,linkrel等于"STYLESHEET"type等于"text/css"href等于"../css/all.css">,

<,styletype等于"text/css">,

<,!--

body{font-size:9pt}

table{font-size:9pt}

a:active{font-size:9pt,color:#000000,}

A:hover{font-size:9pt,COLOR:#000000,TEXT-DECORATION:none}

a:link{font-size:9pt,color:#000000,}

a:visited{font-size:9pt,color:#000000,}

-->,

<,/style>,

<,bodybgcolor等于"#000000"text等于"#000000"topmargin等于"0"leftmargin等于"0"background等于"../image/back.gif">,

<,tablewidth等于"100%"height等于"100%"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,tr>,

<,tdwidth等于"100%"height等于"100%"align等于"center">,

<,tablewidth等于"600"height等于"400"border等于"0"cellspacing等于"0"cellpadding等于"0"background等于"../image/login_bg.jpg">,

<,tr>,

<,tdheight等于"100%"width等于"100%"align等于"center"valign等于"top">,

<,tablewidth等于"200"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,formname等于"login"method等于"post"action等于"selectStep.jsp"target等于"_parent"onsubmit等于"returnloginSubmit(this)">,

<,tr>,

<,tdheight等于"120"align等于"center"colspan等于"2">,

<,/td>,

<,/tr>,

<,tr>,

<,tdheight等于"24">,始发站<,/td>,

<,tdheight等于"24">,<,fontcolor等于"#FFFFFF">,

<,inpe等于"text"name等于"fromStep"size等于"16"maxlength等于"16"class等于myinput2value等于"">,

<,/font>,<,/td>,

<,/tr>,

<,tr>,

<,tdheight等于"24">,终点站<,/td>,

<,tdheight等于"24">,<,fontcolor等于"#FFFFFF">,

<,inputname等于"toStep"type等于"text"size等于"16"maxlength等于"16"class等于myinput2value等于"">,

<,/font>,<,/td>,

<,/tr>,

<,tr>,

<,tdheight等于"30">,&,nbsp,<,/td>,

<,tdheight等于"30">,

<,inpe等于"submit"value等于"提交"class等于"myinput">,

<,inpe等于"reset"value等于"重填"class等于"myinput">,

<,/td>,

<,/tr>,

<,/form>,

<,formname等于"login"method等于"get"action等于"route.jsp"target等于"_parent">,

<,tr>,

<,tdheight等于"24">,线路<,/td>,

<,tdheight等于"24">,

<,selectname等于"cRouteCode"style等于"width:110px">,

<,%

Iteratoriterator等于routes.iterator(),

while(iterator.hasNext()){

.lanyuer.route.routeroute等于(.lanyuer.route.route)iterator.next(),

%>,

<,optionvalue等于"<,%等于route.getcRouteCode()%>,">,<,%等于route.getcRouteCode()%>,路<,/option>,

<,%

}

%>,

<,/select>,

<,/td>,

<,/tr>,

<,tr>,

<,tdheight等于"30">,&,nbsp,<,/td>,

<,tdheight等于"30">,

<,inpe等于"submit"value等于"提交"class等于"myinput">,

<,/td>,

<,/tr>,

<,/form>,

<,/table>,

<,/td>,

<,/tr>,

<,tr>,

<,tdheight等于"180"align等于"center">,

<,/td>,

<,/tr>,

<,/table>,

<,/td>,

<,/tr>,

<,/table>,

<,/body>,

<,/>,

5.2管理更新的功能实现

5.2.1公交站点管理

<,%@pagecontentType等于"text/,charset等于ISO8859_1"%>,

<,%@pageimport等于"ja.util.*,ja.sql.*lanyuer.util.*,"%>,

<,jsp:useBeanid等于"reader"scope等于"request"class等于".lanyuer.util.JspParamReader"/>,

<,%

reader.setRequest(request),

Liststopsets等于null,

Connectionconnection,

.lanyuer.route.stopset_Managerstopset_Manager等于.lanyuer.route.stopset_Manager.getInstance(),

.lanyuer.route.stopsetstopset1等于null,

connection等于DataConnectionManager.getInstance().getConnection(),

try{

if(reader.getString("delRoute_Pk","").length()>,0)stopset_Manager.deleteByPk(connectionlanyuer.route.stopset_Pk.valueOf(reader.getString("delRoute_Pk",""))),

stopsets等于stopset_Manager.selectes(connection),

if(reader.getString("stopset_Pk","").length()>,0)stopset1等于stopset_Manager.selectByPk(connectionlanyuer.route.stopset_Pk.valueOf(reader.getString("stopset_Pk",""))),

}catch(Exceptione){

throwe,

}finally{

if(connection!等于null){

connection.close(),

connection等于null,

}

}

%>,

<,>,

<,head>,

<,title>,公交查询<,/title>,

<,metahttp-equiv等于"Content-Type"content等于"text/,charset等于ISO8859_1">,

<,/head>,

<,linkrel等于"STYLESHEET"type等于"text/css"href等于"../css/all.css">,

<,styletype等于"text/css">,

<,!--

body{font-size:9pt}

table{font-size:9pt}

a:active{font-size:9pt,color:#000000,}

A:hover{font-size:9pt,COLOR:#000000,TEXT-DECORATION:none}

a:link{font-size:9pt,color:#000000,}

a:visited{font-size:9pt,color:#000000,}

-->,

<,/style>,

<,bodybgcolor等于"#000000"text等于"#000000"topmargin等于"0"leftmargin等于"0"background等于"../image/back.gif">,

<,tablewidth等于"100%"height等于"100%"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,tr>,

<,tdwidth等于"100%"height等于"100%"align等于"center">,

<,tablewidth等于"600"height等于"400"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,tr>,

<,tdheight等于"100%"width等于"100%"align等于"center"valign等于"top">,

<,tablewidth等于"500"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,tr>,

<,tdheight等于"24">,编号<,/td>,

<,tdalign等于"center">,名称<,/td>,

<,tdalign等于"center">,类型1/0<,/td>,

<,tdalign等于"center">,操作<,/td>,

<,/tr>,

<,tr>,

<,formaction等于"stopset_se.jsp">,

<,%

if(stopset1!等于null){

%>,

<,tdheight等于"24">,<,inpe等于"hidden"name等于"pkValue"value等于"<,%等于stopset1.getPrimaryKey().toString()%>,">,<,inpe等于"text"name等于"iStopNo"value等于"<,%等于stopset1.getiStopNo()%>,">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"cStopName"value等于"<,%等于stopset1.getcStopName()%>,">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"iType"value等于"<,%等于stopset1.getiType()%>,">,<,/td>,

<,tdalign等于"center">,<,inpe等于"submit"value等于"保存">,<,/td>,

<,%

}else{

%>,

<,tdheight等于"24">,<,inpe等于"hidden"name等于"pkValue"value等于"">,<,inpe等于"text"name等于"iStopNo"value等于"">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"cStopName"value等于"">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"iType"value等于"">,<,/td>,

<,tdalign等于"center">,<,inpe等于"submit"value等于"保存">,<,/td>,

<,%

}

%>,

<,/form>,

<,/tr>,

<,%

Iteratoriterator等于stopsets.iterator(),

while(iterator.hasNext()){

.lanyuer.route.stopsetstopset等于(.lanyuer.route.stopset)iterator.next(),

%>,

<,tr>,

<,tdheight等于"24">,<,ahref等于"stopset_Pk等于<,%等于ja..URLEncoder.encode(stopset.getPrimaryKey().toString())%>,">,<,%等于stopset.getiStopNo()%>,<,/a>,<,/td>,

<,tdalign等于"center">,<,%等于stopset.getcStopName()%>,<,/td>,

<,tdalign等于"center">,<,%等于stopset.getiType()%>,<,/td>,

<,tdalign等于"center">,<,ahref等于"delRoute_Pk等于<,%等于ja..URLEncoder.encode(stopset.getPrimaryKey().toString())%>,">,删除<,/a>,<,/td>,

<,/tr>,

<,%

}

%>,

<,/table>,

<,/td>,

<,/tr>,

<,tr>,

<,tdheight等于"180"align等于"center">,

<,Astyle等于"cursor:hand"onclick等于jascript:history.back()>,<,IMGheight等于34src等于"../image/back1.gif">,<,/A>,

<,/td>,

<,/tr>,

<,/table>,

<,/td>,

<,/tr>,

<,/table>,

<,/body>,

<,/>,

5.2.2公交线路管理

<,%@pagecontentType等于"text/,charset等于ISO8859_1"%>,

<,%@pageimport等于"ja.util.*,ja.sql.*lanyuer.util.*,"%>,

<,jsp:useBeanid等于"reader"scope等于"request"class等于".lanyuer.util.JspParamReader"/>,

<,%

reader.setRequest(request),

Listroutes等于null,

Connectionconnection,

.lanyuer.route.route_Managerroute_Manager等于.lanyuer.route.route_Manager.getInstance(),

.lanyuer.route.routeroute1等于null,

connection等于DataConnectionManager.getInstance().getConnection(),

try{

if(reader.getString("delRoute_Pk","").length()>,0)route_Manager.deleteByPk(connectionlanyuer.route.route_Pk.valueOf(reader.getString("delRoute_Pk",""))),

routes等于route_Manager.selectes(connection),

if(reader.getString("route_Pk","").length()>,0)route1等于route_Manager.selectByPk(connectionlanyuer.route.route_Pk.valueOf(reader.getString("route_Pk",""))),

}catch(Exceptione){

throwe,

}finally{

if(connection!等于null){

connection.close(),

connection等于null,

}

}

%>,

<,>,

<,head>,

<,title>,公交查询<,/title>,

<,metahttp-equiv等于"Content-Type"content等于"text/,charset等于ISO8859_1">,

<,/head>,

<,linkrel等于"STYLESHEET"type等于"text/css"href等于"../css/all.css">,

<,styletype等于"text/css">,

<,!--

body{font-size:9pt}

table{font-size:9pt}

a:active{font-size:9pt,color:#000000,}

A:hover{font-size:9pt,COLOR:#000000,TEXT-DECORATION:none}

a:link{font-size:9pt,color:#000000,}

a:visited{font-size:9pt,color:#000000,}

-->,

<,/style>,

<,bodybgcolor等于"#000000"text等于"#000000"topmargin等于"0"leftmargin等于"0"background等于"../image/back.gif">,

<,tablewidth等于"100%"height等于"100%"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,tr>,

<,tdwidth等于"100%"height等于"100%"align等于"center">,

<,tablewidth等于"600"height等于"400"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,tr>,

<,tdheight等于"100%"width等于"100%"align等于"center"valign等于"top">,

<,tablewidth等于"500"border等于"0"cellspacing等于"0"cellpadding等于"0">,

<,tr>,

<,tdheight等于"24">,编号<,/td>,

<,tdalign等于"center">,起始时间<,/td>,

<,tdalign等于"center">,结束时间<,/td>,

<,tdalign等于"center">,备注<,/td>,

<,tdalign等于"center">,操作<,/td>,

<,/tr>,

<,tr>,

<,formaction等于"route_se.jsp">,

<,%

if(route1!等于null){

%>,

<,tdheight等于"24">,<,inpe等于"hidden"name等于"pkValue"value等于"<,%等于route1.getPrimaryKey().toString()%>,">,<,inpe等于"text"name等于"cRouteCode"value等于"<,%等于route1.getcRouteCode()%>,">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"iStartTime"value等于"<,%等于route1.getiStartTime()%>,">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"iEndTime"value等于"<,%等于route1.getiEndTime()%>,">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"cNote"value等于"<,%等于route1.getcNote()%>,">,<,/td>,

<,tdalign等于"center">,<,inpe等于"submit"value等于"保存">,<,/td>,

<,%

}else{

%>,

<,tdheight等于"24">,<,inpe等于"hidden"name等于"pkValue"value等于"">,<,inpe等于"text"name等于"cRouteCode"value等于"">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"iStartTime"value等于"">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"iEndTime"value等于"">,<,/td>,

<,tdalign等于"center">,<,inpe等于"text"name等于"cNote"value等于"">,<,/td>,

<,tdalign等于"center">,<,inpe等于"submit"value等于"保存">,<,/td>,

<,%

}

%>,

<,/form>,

<,/tr>,

<,%

Iteratoriterator等于routes.iterator(),

while(iterator.hasNext()){

.lanyuer.route.routeroute等于(.lanyuer.route.route)iterator.next(),

%>,

<,tr>,

<,tdheight等于"24">,<,ahref等于"route_Pk等于<,%等于ja..URLEncoder.encode(route.getPrimaryKey().toString())%>,">,<,%等于route.getcRouteCode()%>,<,/a>,<,/td>,

<,tdalign等于"center">,<,%等于route.getiStartTime()%>,<,/td>,

<,tdalign等于"center">,<,%等于route.getiEndTime()%>,<,/td>,

<,tdalign等于"center">,<,%等于route.getcNote()%>,<,/td>,

<,tdalign等于"center">,<,ahref等于"delRoute_Pk等于<,%等于ja..URLEncoder.encode(route.getPrimaryKey().toString())%>,">,删除<,/a>,<,/td>,

<,/tr>,

<,%

}

%>,

<,/table>,

<,/td>,

<,/tr>,

<,tr>,

<,tdheight等于"180"align等于"center">,

<,Astyle等于"cursor:hand"onclick等于jascript:history.back()>,<,IMGheight等于34src等于"../image/back1.gif">,<,/A>,

<,/td>,

<,/tr>,

<,/table>,

<,/td>,

<,/tr>,

<,/table>,

<,/body>,

<,/>,

第六章结束语 一个应用程序设计开发的好坏,与设计人员对开发工具的掌握程度息息相关. 在本系统的开发设计过程中,由于本人对开发工具的掌握有限,又是完全独立完成,可以说整个的开发过程是一边摸索一边实践出来的.但令人高兴的是,通过这样一个边学习边应用的过程,本人完成公交查询系统的开发工作,并实现了该应用程序背景所要求的功能.但总的来说,程序仍然存在许多不足之处, 在整个开发过程中本人一直本着认真,虚心,刻苦,积极的态度,坚持自己独立完成设计,并基本达到了应用设计的功能要求.希望该系统在日后能够得到不断改进,发挥出它应有的作用.致谢 在本系统的开发设计过程中,本人得到了父母,老师,朋友,以及同事们的大力支持与帮助.感谢老师在具体设计过程中给予的悉心指导,感谢同事们在环境上与时间上的支持,特别是感谢父母在生活上和精神上给予的支持,这是我能够坚持下来的源动力. 再次向所有在本人设计过程中给予过帮助与关怀的所有朋友表示深深的感谢!作者:[美]霍斯特曼等着,程峰等译作者:杜江,管佩森编着作者:孙一林,编着作者:CayS.Horstmann作者:[美]贾西诺斯基着,盖江南等译作者:(美)布朗(Brown,s.)着,白雁等译

-1-

站点

站点编号

站点类别

线路

始发时间

终发时间

备注

线路站点对应

线路编号

站点名称