650 likes | 796 Views
公交线路查询算法与实现. 上章回顾. 数据实体层 (Model) 的实现 表示层 (Web) 的实现: 线路信息管理页面设计 线路信息管理页面代码 业务逻辑层 (BLL) 的实现 数据操作 -- 存储过程实现 数据访问层 (OracleDAL) 的实现 数据访问工厂层 (DALFactory) 的实现 数据访问接口层 (IDAL) 的实现. 本章目标. 查询算法 : 理解算法思路 了解 oracle 包、游标、临时表、用户函数、存储过程的概念 理解算法的实现 查询实现 : 理解直达线路查询概念,实现方法 理解一次转乘查询概念,实现方法
E N D
上章回顾 • 数据实体层(Model)的实现 • 表示层(Web)的实现: • 线路信息管理页面设计 • 线路信息管理页面代码 • 业务逻辑层(BLL)的实现 • 数据操作--存储过程实现 • 数据访问层(OracleDAL)的实现 • 数据访问工厂层(DALFactory)的实现 • 数据访问接口层(IDAL)的实现
本章目标 • 查询算法 : • 理解算法思路 • 了解oracle包、游标、临时表、用户函数、存储过程的概念 • 理解算法的实现 • 查询实现 : • 理解直达线路查询概念,实现方法 • 理解一次转乘查询概念,实现方法 • 理解车次查询概念,实现方法 • 理解站点查询概念,实现方法
查询算法 • 算法思路 • 直达 • 一次换乘
算法实现 --包 • 包(package)由两部分组成: • 包说明(规范、包头) • 包体(主体) • 函数(function)以及过程(procedure)单独运行与将其放入包(package)中有何不同 • 包的作用
算法实现 --包 • 包头创建语法格式:
算法实现 --包 • 包头语法格式说明: • Schema:指定将要创建的包所属用户方案。 • Package_name : 将要创建的包的名称。 • pl/sql_package_spec:变量、常量及数据类型定义;游标定义;函数、过程定义和参数列表返回类型。
算法实现 --包 • 在定义包头时,要遵循以下规则: • 包元素的位置可以任意安排。然而,在声明部分,对象必须在引用前进行声明。 • 包头可以不对任何类型的元素进行说明。例如,包头可以只带过程和函数说明语句,而不声明任何异常和类型。 • 对过程和函数的任何声明都必须只对子程序和其参数(如果有的话)进行描述,但不带任何代码的说明,实现代码则只能在包体中。它不同于块声明,在块声明中,过程或函数的代码同时出现在其声明部分。
算法实现 --包 • 包体创建语法格式:
算法实现 --包 • 包体语法格式说明 : • Schema:指定将要创建的包所属用户方案。 • pl/sql_package_body: 标、函数、过程的具体定义。
算法实现 --包 • 包头部分的代码实现:
算法实现 --包 • 包体部分的代码实现:
算法实现 --游标 • 为什么用游标? • 什么时候需要显式游标 ?
算法实现 --游标 • 定义游标: • 开启游标:
算法实现 --临时表 • 临时表空间(Temporary tablespace )的概念 • 临时表特点
算法实现 --临时表 • 语法结构 :
算法实现 --临时表 • 语法结构说明: • --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) • --ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
算法实现 --临时表 • 其它操作表的语法 :
算法实现 --临时表 • 创建临时表-存放查询出来的第一次转乘线路 :
算法实现 --临时表 • 创建临时表-存放查询出来的第二次转乘线路 :
算法实现 --临时表 • 创建临时表 --存放查询出来的第一次转乘线路集合 :
算法实现 --临时表 • 创建临时表 --存放查询出来的第二次转乘线路集合 :
算法实现 --临时表 • 创建临时表 --存放查询出来的转乘线路 :
算法实现 --用户函数 • 将指定字段的行记录组成字符串的函数,示例:
算法实现 --存储过程 • 语法结构
算法实现 --存储过程 • 参数类型 : • in 参数:输入参数,主程序向过程传递参数值。 • out 参数:输出参数,过程向主程序传递参数值。 • in out 参数:双向(输入输出)参数,过程与主程序双向交流数据。
算法实现 --存储过程 • 存储过程的实现 –线路直达: 代码:
算法实现 --存储过程 • 存储过程的实现 –一次转乘: 代码:
查询实现 • 起止站查询—站点筛选
查询实现--起止站点筛选 • 数据实体层 --BusStation.cs对应代码:
查询实现--起止站点筛选 • 表示层--SearchStartEndStation.aspx代码 1.所有符合条件的起始站点 :
查询实现--起止站点筛选 • 表示层--SearchStartEndStation.aspx代码 2.所有符合条件的终止站点:
查询实现--起止站点筛选 • 表示层--SearchStartEndStation.aspx.cs 1. Page_Load事件代码
查询实现--起止站点筛选 • 表示层--SearchStartEndStation.aspx.cs 2. 点击查看按钮的Click事件1
查询实现--起止站点筛选 • 表示层--SearchStartEndStation.aspx.cs 2. 点击查看按钮的Click事件2
查询实现--起止站点筛选 • 表示层--SearchStartEndStation.aspx.cs 3. 起始站点RadioButtonList的DataBound事件
查询实现--起止站点筛选 • 表示层--SearchStartEndStation.aspx.cs 4. 终止站点RadioButtonList的DataBound事件
查询实现--起止站点筛选 • 业务逻辑层--BusStation.cs对应代码1:
查询实现--起止站点筛选 • 业务逻辑层--BusStation.cs对应代码2:
查询实现--起止站点筛选 • 接口访问层 --IBusStation.cs对应代码:
查询实现--起止站点筛选 • 数据访问层 --BusStation.cs对应代码: 1. 获得数据列表1
查询实现--起止站点筛选 • 数据访问层 --BusStation.cs对应代码: 1. 获得数据列表 2
查询实现--起止站点筛选 • 数据访问层 --BusStation.cs对应代码: 1. 获得数据列表3
查询实现--起止站点筛选 • 数据访问层 --BusStation.cs对应代码: 2. 查询单条数据1
查询实现--起止站点筛选 • 数据访问层 --BusStation.cs对应代码: 2. 查询单条数据2
查询实现--起止站点筛选 • 数据访问层 --BusStation.cs对应代码: 2. 查询单条数据3
查询实现--直达线路查询 • 表示层--SearchThrough.aspx代码 1
查询实现--直达线路查询 • 表示层--SearchThrough.aspx代码2