首页 徐州公交查询系统实验报告

徐州公交查询系统实验报告

举报
开通vip

徐州公交查询系统实验报告徐州公交查询系统实验报告 徐州公交查询系统 实验报告 专 业: 班 级: 姓 名: 指导教师: 日期:2011.10.20 目录 需求分析说明书............................................................................................................................... 1 1需求分析概述 ..............................................

徐州公交查询系统实验报告
徐州公交查询系统实验报告 徐州公交查询系统 实验报告 专 业: 班 级: 姓 名: 指导教师: 日期:2011.10.20 目录 需求 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 说明书............................................................................................................................... 1 1需求分析概述 ................................................................................................................................ 1 2数据流图........................................................................................................................................ 1 2.1 顶层数据流图 .................................................................................................................... 1 2.2 分层数据流图 .................................................................................................................... 1 2.2.1 一层数据流图 ......................................................................................................... 1 2.2.2 二层数据流图 ......................................................................................................... 2 2.2.3 三层数据流图 ......................................................................................................... 2 3 数据字典....................................................................................................................................... 2 3.1 静态数据............................................................................................................................ 2 3.2 数据流................................................................................................................................ 3 3.3 数据存储............................................................................................................................ 5 4加工逻辑........................................................................................................................................ 6 概要设计说明书............................................................................................................................... 7 引言................................................................................................................................................... 7 编写目的................................................................................................................................... 7 总体设计........................................................................................................................................... 7 需求规定................................................................................................................................... 7 运行环境................................................................................................................................... 7 基本设计概念和处理流程 ....................................................................................................... 7 总体结构................................................................................................................................... 8 功能分配................................................................................................................................... 8 接口设计........................................................................................................................................... 9 用户接口................................................................................................................................... 9 运行设计......................................................................................................................................... 11 运行控制................................................................................................................................. 11 出错处理设计 ................................................................................................................................. 11 出错输出信息 ......................................................................................................................... 11 详细设计说明书............................................................................................................................. 12 1引言.............................................................................................................................................. 12 1.1编写目的........................................................................................................................... 12 1.2背景................................................................................................................................... 12 1.3定义................................................................................................................................... 12 1.4参考资料........................................................................................................................... 12 2程序系统的结构 .......................................................................................................................... 13 3站点查询模块设计说明 .............................................................................................................. 13 4线路查询模块设计说明 .............................................................................................................. 19 5换乘查询模块设计说明 .............................................................................................................. 24 测试报告 ........................................................................................................................................ 46 个人总结 .................................................................................................... 错误~未定义书签。53 徐州公交查询系统 需求分析说明书 1需求分析概述 项目内容要求的徐州公交站点查询、徐州公交线路查询、公交换乘查询。 开发过程中通过优化数据的逻辑模型设计和物理模型设计,以便提高运行速度、降低存储空间,且能满足数据一致性要求。充分考虑行为的合理划分,提高软件使用的便利性。 站点查询根据用户输入的站点名称,系统给出该站点经过的公交线路,站点名称具有模糊搜索功能,系统可以列出与用户输入的站点名称相似的公交站点以供用户选择 公交线路查询根据用户输入的公交线路名称,系统给出该条线路的具体信息,包括途径站点、始末班时间、始末站点、总共里程及站点总数。 公交换乘查询根据用户输入的起点及终点,给出公交换乘的具体 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,起点及终点的输入同样具有模糊搜索功能,可以列出与用户输入的站点名称相似的公交站点以供用户选择,系统给出所有可供选择的公交换乘方案及各自的换乘次数与总共里程数,并提供以换乘次数最少及总里程最少进行排序。 2数据流图 2.1 顶层数据流图 查询操作用户徐州公交查询系统反馈结果 2.2 分层数据流图 2.2.1 一层数据流图 查询操作1客户端用户数据库反馈结果 2.2.2 二层数据流图 站点查询结果换乘查询结果用户站点名称始末站点 线路名称线路查询结果 1.2线路查询1.3换乘查询1.1站点查询 数据库 2.2.3 三层数据流图 1.3换乘查询 用户 换乘查询结果换乘查询结果 始末站点始末站点 少里程少换乘 数据库 3 数据字典 3.1 静态数据 名称 别取值类长描述 位置 名 型 度 站点名SN Char 4-20 公交站点名称 公交线路名称表 称 线路名LN Char 1-3 公交线路名称 公交线路名称表,公交线路里程表,公称 交线路概况表 始发时ST Char 3-4 公交车始发时公交线路概况表 间 间 末班时ET Char 3-4 公交车末班时公交线路概况表 间 间 总里程 SL Int 3-4 公交车线路总公交线路概况表 里程 始发站 SS Char 4-20 公交车线路始公交线路概况表 发站点 终点站 ES Char 4-20 公交车线路终公交线路概况表 点站点 里程 EL Int 3-4 公交车每站里公交线路里程表 程 3.2 数据流 “站点名称” 名称 站点名称 描述 用户查询某个站点经过的公交线路时输入的站点名称 来源 用户 去处 公交线路名称表 组成 站点名称 流程量 “站点查询结果” 名称 站点查询结果 描述 将经过的公交线路名称反馈给用户 来源 公交线路名称表 去处 用户 组成 各条公交线路名称 流程量 “线路名称” 名称 线路名称 描述 用户查询某条公交线路途经的站点时输入的线路名称 来源 用户 去处 公交线路名称表 组成 公交线路名称 流程量 “线路查询结果” 名称 线路查询结果 描述 将公交线路经过的站点名称反馈给用户 来源 公交线路名称表 去处 用户 组成 公交线路各站点名称 流程量 “始末站点” 名称 始末站点 描述 用户查询起点与终点的换乘线路时输入的起始与终点站点名称 来源 用户 去处 公交线路名称表 组成 起始站点名称+终点站点名称 流程量 “换乘查询结果” 名称 换乘查询结果 描述 将换乘的具体线路反馈给用户 来源 公交线路名称表 去处 用户 组成 各条公交线路名称+途经站点 流程量 3.3 数据存储 “公交线路名称表” 名称 公交线路名称表 输入数据流 用户的各项必要信息 输出数据流 反馈结果 描述 存储各公交线路途经站点的表 组成 公交线路名称+站点名称 组织方式 按线路号从小到大排列 “公交线路里程表” 名称 公交线路里程表 输入数据流 起始站点 输出数据流 反馈信息 描述 用以提供换乘线路的总里程 组成 公交线路名称+站点里程 组织方式 按线路号的从小到大排列 “公交线路概况表” 名称 公交线路概况表 输入数据流 线路名称 输出数据流 反馈信息 描述 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 公交线路始末班时间,总里程,始末站点等信息的表 组成 公交线路名称+始发时间+末班时间+总里程+始发站+终点站 组织方式 4加工逻辑 “站点查询” 名称 站点查询 编号 1.1 输入 站点名称 输出 站点查询结果 功能描述 处理用户站点查询操作,并给出结果 加工处理 将用户输入的站点名称与公交线路名称表内的站点名称进行比较,模 糊选出相似的站点供用户选择,根据用户的选择在表中查找出包含该 站点的公交线路并在界面中显示出来。 “线路查询” 名称 线路查询 编号 1.2 输入 线路名称 输出 线路查询结果 功能描述 处理用户线路查询操作,并给出结果 加工处理 将用户输入的线路名称与公交线路名称表内的线路名称进行比较,找 出该线路途经的站点,再与公交线路概况表内的线路名称进行比较, 找出该线路的概况,一并在界面中显示出来。 “换乘查询” 名称 换乘查询 编号 1.3 输入 始末站点 输出 换乘查询结果 功能描述 处理用户换乘线路查询操作,并给出结果 加工处理 将用户输入的起始站点与目的站点与公交线路名称表内的线路名称进 行比较,根据查找算法,找出二次换乘以内的线路名称以及途经站点, 并在界面显示出来。 徐州公交查询系统 概要设计说明书 引言 编写目的 即将开始“公交查询系统”的开发,为了更好地 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 、指导、 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 开发过程,特制定徐州公交查询系统概要设计说明书。 总体设计 需求规定 徐州公交查询系统的总体目标是为用户提供一个离线单机情况下查询徐州公交站点、线路及换乘信息的系统。 需要实现以下一些基本功能: 1、站点查询:根据用户输入的站点名称,系统给出该站点经过的公交线路,站点名称具有模糊搜索功能,系统可以列出与用户输入的站点名称相似的公交站点以供用户选择 2、线路查询:公交线路查询根据用户输入的公交线路名称,系统给出该条线路的具体信息,包括途径站点、始末班时间、始末站点、总共里程及站点总数。 3、换乘查询:公交换乘查询根据用户输入的起点及终点,给出公交换乘的具体方案,起点及终点的输入同样具有模糊搜索功能,可以列出与用户输入的站点名称相似的公交站点以供用户选择,系统给出所有可供选择的公交换乘方案及各自的换乘次数与总共里程数,并提供以换乘次数最少及总里程最少进行排序。 运行环境 Windows 9x/2000/xp/vista/7 基本设计概念和处理流程 本系统运用C++开发,系统分为三个模块,站点查询、线路查询和换乘查询。根据用户输入的信息给出相应的查询结果。 系统主体的处理流程: 开始 选择模块标签 输入所需信息 显示查询结果 结束 图2-1系统主体处理流程图 总体结构 徐州公交查询系统 站点查询站点查询站点查询 图2-2系统模块结构图 功能分配 显示可供选择的站点 站点查询 显示包含站点的线路 图2-3 站点查询模块功能树图 显示线路概况信息 线路查询 显示线路沿途站点 图2-4 线路查询模块功能树图 显示可选始末站点 换乘查询显示换乘排序方案 显示里程排序方案 图2-5 换乘查询模块功能树图 接口设计 用户接口 提供一个用户操作界面:包括一个有三个标签的标签页,可以提供站点查询、线路查询 和换乘查询的操作界面。 图3-1 站点查询界面 图3-2 线路查询界面 图3-3换乘查询界面 运行设计 运行控制 软件运行有较友好的界面,能实现用户会话交互的要求。 出错处理设计 出错输出信息 错误原因 处理方法 在用户没有输入站点名称 系统给出提示:“请输入站点名称”, 用户没有输入线路名称 系统给出提示:“请输入线路名称” 系统给出提示:“请输入起点站名称” 用户没有输入起点站 系统给出提示:“请输入终点站名称” 用户没有输入终点站 徐州公交查询系统 详细设计说明书 1引言 1.1编写目的 本文档详细描述组成系统的各个软件组成部分,包括每个软件模块(或类)的属性、方法、事件,各软件模块的外部接口说明,测试要点等内容。 本文档由项目组维护,供项目组使用 本文档为“徐州公交查询系统详细设计说明书”,主要用于为实现系统的功能而进行的系统详细设计说明,详细的说明了系统各软件组成模块的实现流程、功能、接口、编译、测试要点等内容,便于对系统的编码进行指导和约束。本文档供项目组全体成员及项目组领导,单元测试人员阅读。 1.2背景 a( 待开发的软件系统的名称:徐州公交查询系统; b( 本项目的任务提出者:辛兆君 1.3定义 徐州公交查询系统:基本元素为构成公交查询相关行为所必需的各种部分。 1.4参考资料 a( 《软件需求说明书》、《概要设计说明书》; b( 《软件工程教程》北京航空航天大学出版社03年第一版; 《软件工程》 李代平编著 冶金工业出版社。 2程序系统的结构 显示可供选择的站点 站点查询 显示包含站点的线路 显示线路概况信息徐州公交查询系统线路查询 显示线路沿途站点 显示可选始末站点 换乘查询显示换乘排序方案 显示里程排序方案 3站点查询模块设计说明 3.1显示可供选择的站点 3.1.1功能 此功能用根据用户输入的站点名称模糊搜索出数据库中存在的相类似站点,全部在界面中列出,由用户选择自己的目标站点。 3.1.2性能 3.1.3输入项 站点名称 3.1.4输出项 主界面中显示可供选择的站点 3.1.5算法 UpdateData(1); if(m_stationname!="") { m_showname.DeleteAllItems(); int iCount; iCount = m_showname.GetHeaderCtrl()->GetItemCount(); for(int n = 0; n < iCount; n++) { m_showname.DeleteColumn(0); } for( n = 0; n < iCount; n++) { m_showname.GetHeaderCtrl()->DeleteItem(0); } if(m_stationname=="中国矿业大学"||m_stationname=="中国矿大"||m_stationname=="矿业大学") m_stationname="矿大"; if(m_stationname=="徐州师范大学"||m_stationname=="徐师") m_stationname="师大"; if(m_stationname=="徐州医学院"||m_stationname=="徐医") m_stationname="医学院"; m_recordset1.CreateInstance(_uuidof(Recordset)); CString strquery; _bstr_t query; strquery.Format("select * from 公交线路名称"); query=strquery; m_recordset1->Open(query,_variant_t((IDispatch*)m_connection,true),adOpenStatic,adLock Optimistic,adCmdText); m_showname.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); CString result[100],temp,temp2; int count=0,i=1,none=1; _variant_t var; while(!m_recordset1->adoEOF) { i=1; var=m_recordset1->GetCollect((long)1); while(var.vt!=VT_NULL) { temp=m_stationname; temp2=(char*)((_bstr_t)m_recordset1->GetCollect((long)i)); if(temp2.GetLength()=0&&temp!="") { temp2.Delete(temp2.Find(temp.Left(2)),2);temp.Delete(0,2); } if(temp=="") { for(int j=0;jGetCollect((long)i))) {none=0;break;} } if(none==1) {result[count]=(char*)((_bstr_t)m_recordset1->GetCollect((long)i));count++;} else none=1; } i++; var=m_recordset1->GetCollect((long)i); } m_recordset1->MoveNext(); } CRect rc; m_showname.GetClientRect(&rc); m_showname.InsertColumn(0,"",LVCFMT_CENTER,0); m_showname.InsertColumn(1,"您要选择的站点是",LVCFMT_CENTER,rc.Width()); for(int j=0;j=0&&clicktime==0) { CString result[100]; int count=0,j; _variant_t var; CString aim=m_showname.GetItemText(i,1); m_recordset1->MoveFirst(); while(!m_recordset1->adoEOF) { j=1; var=m_recordset1->GetCollect((long)1); while(var.vt!=VT_NULL) { if(aim==(char*)((_bstr_t)m_recordset1->GetCollect((long)j))) {result[count]=(char*)((_bstr_t)m_recordset1->GetCollect((long)0));count++;break;} j++; var=m_recordset1->GetCollect((long)j); } m_recordset1->MoveNext(); } m_showname.DeleteAllItems(); m_showname.DeleteColumn(0); m_showname.DeleteColumn(0); m_showname.DeleteColumn(0); CRect rc; m_showname.GetClientRect(&rc); m_showname.InsertColumn(0,"",LVCFMT_CENTER,0); m_showname.InsertColumn(1,"您选择的站点是",LVCFMT_CENTER,175); m_showname.InsertColumn(2,"包含该站点的公交线路有 ",LVCFMT_CENTER,rc.Width()-175); m_showname.InsertItem(0,""); m_showname.SetItemText(0,1,aim); m_showname.SetItemText(0,2,result[0]); for(int k=1;k=0&&clicktime==1) { ((CTabCtrl*)GetParent())->SetCurSel(1); CString busline=m_showname.GetItemText(i,2); m_page2.m_linename=busline; m_page1.ShowWindow(SW_HIDE); m_page2.ShowWindow(SW_SHOW); m_page2.UpdateData(0); m_page2.OnOk(); clicktime=2; } *pResult = 0; } 3.2.6程序逻辑 a. 程序流程图; 开始 用户双击列表 双击位置在有效 位置 是 显示包含站点否的线路 结束 3.2.7接口 3.2.8存储分配 列表控件 m_showname 4线路查询模块设计说明 4.1显示线路概况信息 4.1.1功能 根据用户输入的线路名称搜索公交线路概况表,并在界面中显示该线路概况信息 4.1.2性能 4.1.3输入项 线路名称 4.1.4输出项 列表控件中显示线路概况信息 4.1.5算法 void CPage2::OnOk() { // TODO: Add your control notification handler code here UpdateData(1); if(m_linename!="") { pshow=FALSE; m_status.DeleteAllItems(); m_showdetail.DeleteAllItems(); int iCount; iCount = m_status.GetHeaderCtrl()->GetItemCount(); for(int n = 0; n < iCount; n++) { m_status.DeleteColumn(0); } iCount = m_showdetail.GetHeaderCtrl()->GetItemCount(); for(n = 0; n < iCount; n++) { m_showdetail.DeleteColumn(0); } m_recordset2.CreateInstance(_uuidof(Recordset)); CString strquery; _bstr_t query; strquery.Format("select * from 公交线路名称"); query=strquery; m_recordset2->Open(query,_variant_t((IDispatch*)m_connection,true),adOpenStatic,adLock Optimistic,adCmdText); _RecordsetPtr m_record; m_record.CreateInstance(_uuidof(Recordset)); strquery.Format("select * from 公交线路概况"); query=strquery; m_record->Open(query,_variant_t((IDispatch*)m_connection,true),adOpenStatic,adLockOpti mistic,adCmdText); m_status.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_showdetail.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); CString result[5][3],temp,temp2; int count=0; while(!m_recordset2->adoEOF) { temp=(char*)((_bstr_t)m_recordset2->GetCollect((long)0)); if(m_linename!=temp) { for(int j=0;j='0'&&temp[j]<='9') temp2+=temp[j]; } } if((atoi(m_linename)==atoi(temp2))||m_linename==temp) { result[count][0]=temp;count++; while(!m_record->adoEOF) { if(temp==(char*)((_bstr_t)m_record->GetCollect((long)0))) {result[count-1][1]=(char*)((_bstr_t)m_record->GetCollect((long)1));result[count-1][2]=(char*)(( _bstr_t)m_record->GetCollect((long)2));break;} m_record->MoveNext(); } } m_recordset2->MoveNext(); temp2=""; } if(count>0) { m_status.InsertColumn(0,"",LVCFMT_CENTER,120); m_status.InsertColumn(1,"",LVCFMT_CENTER,295); for(int i=0;i=0&&onceclick==TRUE) { CString aim=m_status.GetItemText(i,0); m_status.DeleteAllItems(); int iCount; iCount = m_status.GetHeaderCtrl()->GetItemCount(); for(int n = 0; n < iCount; n++) { m_status.DeleteColumn(0); } m_recordset2->MoveFirst(); while(!m_recordset2->adoEOF) { if(aim==(char*)((_bstr_t)m_recordset2->GetCollect((long)0))) break; m_recordset2->MoveNext(); } _RecordsetPtr m_record; m_record.CreateInstance(_uuidof(Recordset)); CString strquery; _bstr_t query; strquery.Format("select * from 公交线路概况"); query=strquery; m_record->Open(query,_variant_t((IDispatch*)m_connection,true),adOpenStatic,adLockOpti mistic,adCmdText); while(!m_record->adoEOF) { if(aim==(char*)((_bstr_t)m_record->GetCollect((long)0))) break; m_record->MoveNext(); } m_status.InsertColumn(0,"",LVCFMT_CENTER,210); m_status.InsertColumn(1,"",LVCFMT_CENTER,205); CString showaim=aim+" ("+((char*)((_bstr_t)m_record->GetCollect((long)1)))+"-"+((char*)((_bstr_t)m_record->GetColle ct((long)2)))+")"; m_status.InsertItem(0,showaim); m_status.InsertItem(1,"起点站首车时间"); m_status.InsertItem(2,"终点站末车时间"); m_status.SetItemText(1,1,(char*)((_bstr_t)m_record->GetCollect((long)3))); m_status.SetItemText(2,1,(char*)((_bstr_t)m_record->GetCollect((long)4))); pshow=TRUE; onceclick=FALSE; } *pResult = 0; } 4.1.6程序逻辑 a. 程序流程图; 开始 输入线路名称 线路名称不为空否 是 显示线路概况提示错误信息 结束 4.1.7接口 4.1.8存储分配 线路名称 m_linename 4.2显示线路沿途站点 4.2.1功能 根据用户输入的线路名称搜索公交线路名称表,并在界面中显示出该线路的沿途站点 4.2.2性能 4.2.3输入项 线路名称 m_linename 4.2.4输出项 列表控件中显示线路沿途站点 4.2.5算法 int j=1,k=0; _variant_t var; var=m_recordset2->GetCollect((long)1); m_showdetail.InsertColumn(0,"",LVCFMT_CENTER,120); m_showdetail.InsertColumn(1,"",LVCFMT_CENTER,295); while(var.vt!=VT_NULL) { m_showdetail.InsertItem(k,(char*)((_bstr_t)m_recordset2->GetFields()->GetItem ((long)j)->Name)); m_showdetail.SetItemText(k,1,(char*)((_bstr_t)m_recordset2->GetCollect((long) j))); j++; k++; var=m_recordset2->GetCollect((long)j); } 4.2.6程序逻辑 a. 程序流程图; 开始 输入线路名称 线路名称不为空否 是 显示线路沿途提示错误信息站点 结束 4.2.7接口 4.2.8存储分配 5换乘查询模块设计说明 5.1显示可选始末站点 5.1.1功能 根据用户输入的起点站和终点站搜索公交线路名称表,选出相类似站点并在界面中显示 出来供用户选择 5.1.2性能 5.1.3输入项 起点站:m_sstation 终点站:m_estation 5.1.4输出项 列表控件中显示可供选择的起点站和终点站 5.1.5算法 void CPage3::OnOk() { // TODO: Add your control notification handler code here UpdateData(1); n=0; if(m_sstation!=""&&m_estation!="") { m_chooselist.DeleteAllItems(); m_showlist.DeleteAllItems(); int iCount; iCount = m_chooselist.GetHeaderCtrl()->GetItemCount(); for(int n = 0; n < iCount; n++) { m_chooselist.DeleteColumn(0); } iCount = m_showlist.GetHeaderCtrl()->GetItemCount(); for(n = 0; n < iCount; n++) { m_showlist.DeleteColumn(0); } if(m_sstation=="中国矿业大学"||m_sstation=="中国矿大"||m_sstation=="矿业大学") m_sstation="矿大"; if(m_sstation=="徐州师范大学"||m_sstation=="徐师") m_sstation="师大"; if(m_sstation=="徐州医学院"||m_sstation=="徐医") m_sstation="医学院"; if(m_estation=="中国矿业大学"||m_estation=="中国矿大"||m_estation=="矿业大学") m_estation="矿大"; if(m_estation=="徐州师范大学"||m_estation=="徐师") m_estation="师大"; if(m_estation=="徐州医学院"||m_estation=="徐医") m_estation="医学院"; m_recordset3.CreateInstance(_uuidof(Recordset)); CString strquery; _bstr_t query; strquery.Format("select * from 公交线路名称"); query=strquery; m_recordset3->Open(query,_variant_t((IDispatch*)m_connection,true),adOpenStatic,adLock Optimistic,adCmdText); m_chooselist.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_showlist.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); CString result[100],temp,temp2; int count=0,i=1,none=1; _variant_t var; while(!m_recordset3->adoEOF) { i=1; var=m_recordset3->GetCollect((long)1); while(var.vt!=VT_NULL) { temp=m_sstation; temp2=(char*)((_bstr_t)m_recordset3->GetCollect((long)i)); if(temp2.GetLength()=0&&temp!="") { temp2.Delete(temp2.Find(temp.Left(2)),2);temp.Delete(0,2); } if(temp=="") { for(int j=0;jGetCollect((long)i))) {none=0;break;} } if(none==1) {result[count]=(char*)((_bstr_t)m_recordset3->GetCollect((long)i));count++;} else none=1; } i++; var=m_recordset3->GetCollect((long)i); } m_recordset3->MoveNext(); } CRect rc; m_chooselist.GetClientRect(&rc); m_chooselist.InsertColumn(0,"",LVCFMT_CENTER,0); m_chooselist.InsertColumn(1,"您要选择的起始站是",LVCFMT_CENTER,rc.Width()); for(int j=0;j=0&&clicktime==0) { start=m_chooselist.GetItemText(i,1); CString aim=m_estation; m_recordset3->MoveFirst(); m_chooselist.DeleteAllItems(); int iCount; iCount = m_chooselist.GetHeaderCtrl()->GetItemCount(); for(int n = 0; n < iCount; n++) { m_chooselist.DeleteColumn(0); } CString result[100],temp,temp2; int count=0,i=1,none=1; _variant_t var; while(!m_recordset3->adoEOF) { i=1; var=m_recordset3->GetCollect((long)1); while(var.vt!=VT_NULL) { temp=m_estation; temp2=(char*)((_bstr_t)m_recordset3->GetCollect((long)i)); if(temp2.GetLength()=0&&temp!="") { temp2.Delete(temp2.Find(temp.Left(2)),2);temp.Delete(0,2); } if(temp=="") { for(int j=0;jGetCollect((long)i))) {none=0;break;} } if(none==1) {result[count]=(char*)((_bstr_t)m_recordset3->GetCollect((long)i));count++;} else none=1; } i++; var=m_recordset3->GetCollect((long)i); } m_recordset3->MoveNext(); } CRect rc; m_chooselist.GetClientRect(&rc); m_chooselist.InsertColumn(0,"",LVCFMT_CENTER,0); m_chooselist.InsertColumn(1,"您要选择的终点站是",LVCFMT_CENTER,rc.Width()); for(int j=0;j=0&&clicktime==1) { end=m_chooselist.GetItemText(i,1); clicktime=2; _RecordsetPtr m_rs[4]; CString strquery; _bstr_t query; strquery.Format("select * from 公交线路名称"); query=strquery; int j,count=0,m=1,k; _variant_t var,var1,var2; int ct[3]; CString tp; bool right1=0,right2=1,right3=1; for(i=0;i<=3;i++) { m_rs[i].CreateInstance(_uuidof(Recordset)); m_rs[i]->Open(query,_variant_t((IDispatch*)m_connection,true),adOpenStatic,adLockOptim istic,adCmdText); } _RecordsetPtr m_rsdis[4]; strquery.Format("select * from 公交线路里程"); query=strquery; for(i=0;i<=3;i++) { m_rsdis[i].CreateInstance(_uuidof(Recordset)); m_rsdis[i]->Open(query,_variant_t((IDispatch*)m_connection,true),adOpenStatic,adLockOpt imistic,adCmdText); } while(!m_rs[1]->adoEOF) { j=1; var=m_rs[1]->GetCollect((long)1); while(var.vt!=VT_NULL) { if(start==(char*)((_bstr_t)m_rs[1]->GetCollect((long)j))) { st1[count].linename=(char*)((_bstr_t)m_rs[1]->GetCollect((long)0));//取得包含起始站的线路 st1[count].dis=atof((char*)((_bstr_t)m_rsdis[1]->GetCollect((long)j)));// 取得该站的里程 st1[count].pos=j; count++; break; } j++; var=m_rs[1]->GetCollect((long)j); } m_rs[1]->MoveNext(); m_rsdis[1]->MoveNext(); } ct[0]=count; count=0; for(i=0;iadoEOF) { if(st1[i].linename==(char*)((_bstr_t)m_rs[0]->GetCollect((long)0))) break; m_rs[0]->MoveNext(); m_rsdis[0]->MoveNext(); } ////////////////////////////////////////// //判断该线路是否还包含终点站 var=m_rs[0]->GetCollect((long)(st1[i].pos+1)); while(var.vt!=VT_NULL) { tp=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+m))); if(tp==end) { for(int p=0;pGetCollect((long)(st1[i].pos+m))))-atof((c har*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos))); result[n].stationname[0][0]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos))); result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+m))); result[n].num[0]=m; result[n].exnum=1; n++; right1=TRUE; break; } else {right2=1;right1=TRUE;break;} } m++; var=m_rs[0]->GetCollect((long)(st1[i].pos+m)); } if(right1==TRUE) {right1=0;m=1;continue;} m=1; while(st1[i].pos-m>0) { tp=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos-m))); if(tp==end) { for(int p=0;pGetCollect((long)(st1[i].pos))))-atof((char *)((_bstr_t)m_rsdis[0]->GetCollect((long)(st1[i].pos-m)))); result[n].stationname[0][0]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos))); result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos-m))); result[n].num[0]=m; result[n].exnum=1; n++; right1=TRUE; break; } else {right2=1;right1=TRUE;break;} } m++; } if(right1==TRUE) {right1=0;m=1;continue;} m=1; ///////////////////////////////////////////// //向右及向左搜索每一站 var1=m_rs[0]->GetCollect((long)(st1[i].pos+1)); int mm=1,des=0; while(1) { //得到向左或向右的每一站 if(var1.vt!=VT_NULL&&des==0) { tp=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm))); mm++; var1=m_rs[0]->GetCollect((long)(st1[i].pos+mm)); } else if(var1.vt==VT_NULL&&des==0) {mm=-1;des=1;tp=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm)));mm--;} else if(des==1&&st1[i].pos+mm>=0) { tp=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm))); mm--; } if(st1[i].pos+mm<0) break; //////////////////////////////////////// //寻找包含该站的线路 while(!m_rs[2]->adoEOF) { j=1; var=m_rs[2]->GetCollect((long)1); while(var.vt!=VT_NULL) { if((tp==(char*)((_bstr_t)m_rs[2]->GetCollect((long)j)))&&(st1[i].linename!=(char*)((_bstr_t )m_rs[2]->GetCollect((long)0)))) { st2[count].linename=(char*)((_bstr_t)m_rs[2]->GetCollect((long)0)); st2[count].dis=atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)j)));//取得该站的里程 st2[count].pos=j; count++; break; } j++; var=m_rs[2]->GetCollect((long)j); } m_rs[2]->MoveNext(); m_rsdis[2]->MoveNext(); } ct[1]=count; count=0; ///////////////////////////////////////////// m_rs[2]->MoveFirst(); m_rsdis[2]->MoveFirst(); for(j=0;jadoEOF) { if(st2[j].linename==(char*)((_bstr_t)m_rs[2]->GetCollect((long)0))) break; m_rs[2]->MoveNext(); m_rsdis[2]->MoveNext(); } ////////////////////////////////////////// //判断该线路是否还包含终点站 var=m_rs[2]->GetCollect((long)(st2[j].pos+1)); while(var.vt!=VT_NULL) { tp=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+m))); if(tp==end) { for(int p=0;pGetCollect((long)(st1[i].pos+mm+1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); else result[n].dis[0]=fabs(atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)(st1[i].pos+mm-1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); result[n].dis[1]=atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)(st2[j].pos+m))))-atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)st2[j].pos))); result[n].dis[3]=result[n].dis[0]+result[n].dis[1]; result[n].stationname[0][0]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos))); if(mm<0) result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm+1))); else result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm-1))); result[n].stationname[1][0]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos))); result[n].stationname[1][1]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+m))); if(mm<0) result[n].num[0]=abs(mm+1); else result[n].num[0]=abs(mm-1); result[n].num[1]=m; result[n].exnum=2; n++; right1=TRUE; break; } else {right2=1;right1=TRUE;break;} } m++; var=m_rs[2]->GetCollect((long)(st2[j].pos+m)); } if(right1==TRUE) {right1=0;m=1;continue;} m=1; while(st2[j].pos-m>0) { tp=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos-m))); if(tp==end) { for(int p=0;pGetCollect((long)(st1[i].pos+mm+1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); else result[n].dis[0]=fabs(atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)(st1[i].pos+mm-1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); result[n].dis[1]=atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)(st2[j].pos))))-atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)(st2[j].pos-m)))); result[n].dis[3]=result[n].dis[0]+result[n].dis[1]; result[n].stationname[0][0]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos))); if(mm<0) result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm+1))); else result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm-1))); result[n].stationname[1][0]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos))); result[n].stationname[1][1]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos-m))); if(mm<0) result[n].num[0]=abs(mm+1); else result[n].num[0]=abs(mm-1); result[n].num[1]=m; result[n].exnum=2; n++; right1=TRUE; break; } else {right2=1;right1=TRUE;break;} } m++; } if(right1==TRUE) {right1=0;m=1;continue;} m=1; ///////////////////////////////////////////// /* if(n<=5) { //向右及向左搜索每一站 var2=m_rs[2]->GetCollect((long)(st2[j].pos+1)); int mmm=1,des1=0; while(1) { //得到向左或向右的每一站 if(var2.vt!=VT_NULL&&des1==0) { tp=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+mmm))); mmm++; var2=m_rs[2]->GetCollect((long)(st2[j].pos+mmm)); } else if(var2.vt==VT_NULL&&des1==0) {mmm=-1;des1=1;tp=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+mmm)));mmm--;} else if(des1==1&&st2[j].pos+mmm>=0) { tp=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+mmm))); mmm--; } if(st2[j].pos+mmm<0) break; //////////////////////////////////////// //寻找包含该站的线路 while(!m_rs[3]->adoEOF) { k=1; var=m_rs[3]->GetCollect((long)1); while(var.vt!=VT_NULL) { if((tp==(char*)((_bstr_t)m_rs[3]->GetCollect((long)k)))&&(st2[j].linename!=(char*)((_bstr_ t)m_rs[3]->GetCollect((long)0)))) { st3[count].linename=(char*)((_bstr_t)m_rs[3]->GetCollect((long)0)); st3[count].dis=atof((char*)((_bstr_t)m_rsdis[3]->GetCollect((long)k)));//取得该站的里程 st3[count].pos=k; count++; break; } k++; var=m_rs[3]->GetCollect((long)k); } m_rs[3]->MoveNext(); m_rsdis[3]->MoveNext(); } ct[2]=count; count=0; ///////////////////////////////////////////// m_rs[3]->MoveFirst(); m_rsdis[3]->MoveFirst(); for(k=0;kadoEOF) { if(st3[k].linename==(char*)((_bstr_t)m_rs[3]->GetCollect((long)0))) break; m_rs[3]->MoveNext(); m_rsdis[3]->MoveNext(); } ////////////////////////////////////////// //判断该线路是否还包含终点站 var=m_rs[3]->GetCollect((long)(st3[k].pos+1)); while(var.vt!=VT_NULL) { tp=(char*)((_bstr_t)m_rs[3]->GetCollect((long)(st3[k].pos+m))); if(tp==end) { for(int p=0;pGetCollect((long)(st1[i].pos+mm+1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); else result[n].dis[0]=fabs(atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)(st1[i].pos+mm-1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); if(mmm<0) result[n].dis[1]=fabs(atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)(st2[j].pos+mmm+1))))-atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)st2[j].pos)))); else result[n].dis[1]=fabs(atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)(st2[j].pos+mmm-1))))-atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)st2[j].pos)))); result[n].dis[2]=atof((char*)((_bstr_t)m_rsdis[3]->GetCollect((long)(st3[k].pos+m))))-atof((char*)((_bstr_t)m_rsdis[3]->GetCollect((long)st3[k].pos))); result[n].dis[3]=result[n].dis[0]+result[n].dis[1]+result[n].dis[2]; result[n].stationname[0][0]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos))); if(mm<0) result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm+1))); else result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm-1))); result[n].stationname[1][0]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos))); if(mmm<0) result[n].stationname[1][1]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+mmm+1))); else result[n].stationname[1][1]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+mmm-1))); result[n].stationname[2][0]=(char*)((_bstr_t)m_rs[3]->GetCollect((long)(st3[k].pos))); result[n].stationname[2][1]=(char*)((_bstr_t)m_rs[3]->GetCollect((long)(st3[k].pos+m))); if(mm<0) result[n].num[0]=abs(mm+1); else result[n].num[0]=abs(mm-1); if(mmm<0) result[n].num[1]=abs(mmm+1); else result[n].num[1]=abs(mmm-1); result[n].num[2]=m; result[n].exnum=3; n++; right1=TRUE; break; } else {right3=1;right1=TRUE;break;} } m++; var=m_rs[3]->GetCollect((long)(st3[k].pos+m)); } if(right1==TRUE) {right1=0;m=1;continue;} m=1; while(st3[k].pos-m>0) { tp=(char*)((_bstr_t)m_rs[3]->GetCollect((long)(st3[k].pos-m))); if(tp==end) { for(int p=0;pGetCollect((long)(st1[i].pos+mm+1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); else result[n].dis[0]=fabs(atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)(st1[i].pos+mm-1))))-atof((char*)((_bstr_t)m_rsdis[0]->GetCollect((long)st1[i].pos)))); if(mmm<0) result[n].dis[1]=fabs(atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)(st2[j].pos+mmm+1))))-atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)st2[j].pos)))); else result[n].dis[1]=fabs(atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)(st2[j].pos+mmm-1))))-atof((char*)((_bstr_t)m_rsdis[2]->GetCollect((long)st2[j].pos)))); result[n].dis[2]=atof((char*)((_bstr_t)m_rsdis[3]->GetCollect((long)(st3[k].pos))))-atof((char*)((_bstr_t)m_rsdis[3]->GetCollect((long)(st3[k].pos-m)))); result[n].dis[3]=result[n].dis[0]+result[n].dis[1]+result[n].dis[2]; result[n].stationname[0][0]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos))); if(mm<0) result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm+1))); else result[n].stationname[0][1]=(char*)((_bstr_t)m_rs[0]->GetCollect((long)(st1[i].pos+mm-1))); result[n].stationname[1][0]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos))); if(mmm<0) result[n].stationname[1][1]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+mmm+1))); else result[n].stationname[1][1]=(char*)((_bstr_t)m_rs[2]->GetCollect((long)(st2[j].pos+mmm-1))); result[n].stationname[2][0]=(char*)((_bstr_t)m_rs[3]->GetCollect((long)(st3[k].pos))); result[n].stationname[2][1]=(char*)((_bstr_t)m_rs[3]->GetCollect((long)(st3[k].pos-m))); if(mm<0) result[n].num[0]=abs(mm+1); else result[n].num[0]=abs(mm-1); if(mmm<0) result[n].num[1]=abs(mmm+1); else result[n].num[1]=abs(mmm-1); result[n].num[2]=m; result[n].exnum=3; n++; right1=TRUE; break; } else {right3=1;right1=TRUE;break;} } m++; } if(right1==TRUE) {right1=0;m=1;continue;} m=1; ///////////////////////////////////////////// } } }*/ } } } CRect rc1; m_showlist.GetClientRect(&rc1); m_showlist.InsertColumn(0,"",LVCFMT_CENTER,0); m_showlist.InsertColumn(1,"",LVCFMT_CENTER,rc1.Width()); int row=0,q; CString number,context,sn,cdis; for(i=0;iresult[j].exnum) {rtemp=result[i];result[i]=result[j];result[j]=rtemp;} } } m_chooselist.DeleteAllItems(); int iCount; iCount = m_chooselist.GetHeaderCtrl()->GetItemCount(); for( q = 0; q < iCount; q++) { m_chooselist.DeleteColumn(0); } CRect rct; m_chooselist.GetClientRect(&rct); m_chooselist.InsertColumn(0,"",LVCFMT_CENTER,0); m_chooselist.InsertColumn(1,"",LVCFMT_CENTER,140); m_chooselist.InsertColumn(2,"",LVCFMT_CENTER,rct.Width()-140); m_chooselist.InsertItem(0,""); m_chooselist.SetItemText(0,1,"起点站"); m_chooselist.SetItemText(0,2,start); m_chooselist.InsertItem(1,""); m_chooselist.SetItemText(1,1,"终点站"); m_chooselist.SetItemText(1,2,end); for(i=0;iGetItemCount(); for(int q = 0; q < iCount; q++) { m_showlist.DeleteColumn(0); } CRect rc1; m_showlist.GetClientRect(&rc1); m_showlist.InsertColumn(0,"",LVCFMT_CENTER,0); m_showlist.InsertColumn(1,"",LVCFMT_CENTER,rc1.Width()); int row=0,i,j; CString number,context,sn,cdis; for(i=0;iresult[j].dis[3]) {rtemp=result[i];result[i]=result[j];result[j]=rtemp;} } } for(i=0;i
本文档为【徐州公交查询系统实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_314871
暂无简介~
格式:doc
大小:292KB
软件:Word
页数:73
分类:互联网
上传时间:2017-09-01
浏览量:35