《2022年数据结构课程设计-全国交通咨询系统.docx》由会员分享,可在线阅读,更多相关《2022年数据结构课程设计-全国交通咨询系统.docx(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - X X 学 院 计 算 机 系数据结构课程设计报告书全国交通询问模拟系统的设计与实现同学姓名 :学 号:年级专业及班级:指导老师及职称:讲师专 业: 运算机科学与技术专业提交日期: 2022 年 6 月- 1 - 名师归纳总结 - - - - - - -第 1 页,共 21 页精选学习资料 - - - - - - - - - 全国交通询问模拟系统的设计与实现学 生:指导老师: 怀化学院运算机系,怀化 418008 摘 要:该课程设计主要实现了对全国火车及飞机信息的修改和查询,其中主要包括:治理员对火车、 飞机信息的操作,其中又包含对两种交通方式
2、的增加和删除操作;旅客用户对两种交通信息的查询, 其中飞机信息和火车信息都包含了对两个站点间最短路径方式的查询、最少花费方式的查询以及城市中全部的交通信息的查询;关键词 :全国交通询问;1 前言为了完成数据结构的课程设计,为了巩固自己数据结构的学问,也是为了提高自己的编程才能和规律思维才能,我选了这道全国交通询问模拟系统的设计与实现一题;在对其需求进行分析之后,依据需求分析,逐步完成其各部分的功能实现;对于总的方面来讲,治理员功能实现并不难,而难点在于用户功能中的算法及数据结构中的知识以及编程的微小方面,下面将具体介绍本课程设计的内容;2 需求分析 2.1 范畴 1.1 标识文件状态:文件标识
3、:需求分析报告【】草稿当前版本:V1.0 【 】正式发布作 者:2022-6-12 【】正在修改完成日期:21.2 系统概述 1软件名称:全国交通询问系统 V1.0 - 2 - 名师归纳总结 - - - - - - -第 2 页,共 21 页精选学习资料 - - - - - - - - - 2软件功能:主要的功能有:治理员增删和修改城市站点信息、飞机路线信息、火车路线信息;3用户:查询最小耗费路线、查询最短时间路线、查询城市全部路线;4开发者:21.3 文档概述需求分析采纳在面对对象的方法,主要使用结构体 struct 的方法来进行实际的编程,在文档中主要采 E-R 图和对功能的简洁描述的方法
4、来表述系统的需求;本需求分 析的审查者是老师,所以主要是写给老师看的,用来说明我对这个系统的分析情形;22 引用文件 无23 需求概述 23.1 系统目标本系统的总体目标是通过使用该系统,治理员可以对飞机或者火车的信息的简洁治理,也便利外出旅客在不同的需求下(如:最少的花费和最短的路程),快速浏览到所要的信息;本系统设计的特点主要有以下几个方面:1. 具有较高的牢靠性和可用性;2. 系统易于治理保护;3 简洁、便利;23.2 运行环境 1. 系统硬件需求 Pentium4 800MHz 或更高主频 CPU 256MB以上内存;2. 系统软件需求Visual C+ 6.0或者 visual st
5、udio 6.0等编程软件;23.3 用户的特点机场工作人员或火车站工作人员以及其他具备基本的电脑操作技能和肯定的治理- 3 - 名师归纳总结 - - - - - - -第 3 页,共 21 页精选学习资料 - - - - - - - - - 权限的用户;旅客需具备基础的 运算机操作技能;24 功能需求通过对本设计的信息综合分析,得到交通信息的主要组成部分之后,我觉得本系 统功能主要分为以下两个部分:1治理员操作:可以对站点的增设和删除,对火车车次的添加与删除以及对飞机 航班的添加及删除操作;2. 旅客用户操作:对最小耗费路线的查看、最短时间路线的查看和城市全部的路 线信息的查看;24.1 操
6、作流程图增删城市信息治理员增删飞机信息增删交通路线信息 增删火车信息旅客用户增删交通路线信息退出系统增删交通路线信息增删交通路线信息24.2 系统各项功能描述1)用例 1 用例名:治理员操作 行为者:信息治理员 目的:完成对站点信息、飞机航班信息、火车列次信息的增加和删减治理 过程描述:a 挑选治理员入口;- 4 - 名师归纳总结 - - - - - - -第 4 页,共 21 页精选学习资料 - - - - - - - - - b 输出正确的密码登入系统;c 可以添加城市;d 可以删除城市;e 添加交通路线;f 删除交通路线;g 退出系统反常处理:无;2)用例 2 用例名:旅客及其它人操作行
7、为者:非治理员目的:查看交通信息过程描述:a 挑选旅客入口;b 可以查询最小耗费路线;c 可以查询最短时间路线;d 可以查询城市全部路线;e)退出系统反常处理:无25 数据下面仅列出主要实体;通过对同学治理系统的需求分析,我画出五个实体的 E-R图:(1)城市信息实体城市信息实体包括城市名,如下图所示:城市信息 城市名- 5 - 名师归纳总结 - - - - - - -第 5 页,共 21 页精选学习资料 - - - - - - - - - (2)火车信息实体 火车信息实体包括火车车次、起始站点、终止站点、耗费时间、费用,如下图所 示:火车车次起始站点火车信息终止站点费用耗费时间(3)飞机信息
8、实体 飞机信息实体包括飞机航班、起始站点、终止站点、耗费时间、费用,如下图所 示:起始站点终止站点飞机航班飞机信息费用耗费时间26 采纳的技术 采纳的技术主要包括对文件存取、数据结构和迪杰斯特拉算法等技术;3 具体设计 依据题目要求及本次课程设计的目的,按着原先的需求分析的要求,我采纳结构 体来储备每组数据,其中对每组数据进行相应的操作使用后将他们建立领结矩阵,然 后采纳迪杰斯特拉算法,在读取文件和储存文件的功能中使用了文件流的相关操作;现把相应的设计思路及各个函数解析如下;- 6 - 名师归纳总结 - - - - - - -第 6 页,共 21 页精选学习资料 - - - - - - - -
9、 - 3.1 数据结构设计分析3.1.1 储备 城市信息 的结构体城市信息包含城市名,具体结构如下:typedef short int CityType; char CityNameMAX_VERTEX_NUMMAX_STRING_NUM; 3.1.2 储备列车次信息的结构体typedef struct TrafficNode char nameMAX_STRING_NUM; int Time;/ int EndCity / 火车到达城市的编号int Cost;/ 票价 TrafficNodeDat; typedef struct VNode CityType city; / 城市编号int
10、TrainNum; / 标登记面 Train 数组里元素个数TrafficNodeDat TrainMAX_TRAFFIC_NUM; / 市、起止时间、票价和班次 VNodeDat; 3.1.3 储备航班的构体 typedef struct TrafficNode char nameMAX_STRING_NUM; /班次 int Time; int EndCity; / 火车到达城市的编号 int Cost; / 票价 TrafficNodeDat; typedef struct VNode - 7 - 数组成员为结构体,记录了到达城名师归纳总结 - - - - - - -第 7 页,共 21
11、 页精选学习资料 - - - - - - - - - CityType city; / 城市编号int FlightNum; /标登记面 Train 数组和 Flight数组里元素个数TrafficNodeDat FlightMAX_TRAFFIC_NUM; VNodeDat; 3.2 各个函数分析3.2.1 主函数和功能界面菜单函数函数原型: int mainmain 函数主要是掌握整个系统,主要功能是掌握整个程序的运行;从主函数开始调用各相关函数来达到相应的功能;由于有多个不同的选项,用 switch语句掌握每个函数调用;关键代码如下:switchCommand case 0: retur
12、n 0; case 1: Administrators;/ break; 治理员操作界面函数 case 2: User;/ break; 用户操作界面函数 default: 3.2.2 读文件函数 coutt挑选序号错误 . 请重新挑选 .n; 本系统要读入 3 个文件 . 函数原型:int InitSystem 3.2.3 系统主界面函数函数原型:int main在主函数中,展现整个系统可供用户挑选的选项,也使不同的用户进入不同的操作界面;3.2.4 显示函数显示函数要三个,按不用的排序方式进行排序和显示,如下:函数原型:void User - 8 - 名师归纳总结 - - - - - -
13、-第 8 页,共 21 页精选学习资料 - - - - - - - - - void Administrators 3.2.5 删除函数函数原型:int DelCitychar *Name /删除城市 /删除城市 int city,i,j; city=SeekCityName; fori=city;iCityNum-1;i+ strcpyCityNamei,CityNamei+1; AdjListi.FlightNum=AdjListi+1.FlightNum;AdjListi.TrainNum=AdjList i+1.TrainNum; forj=0;jAdjListi.FlightNum;
14、j+ AdjListi.Flightj.Cost=AdjListi+1.Flightj.Cost; AdjListi.Flightj.EndCity=AdjListi+1.Flightj.EndCity; strcpyAdjListi.Flightj.name,AdjListi+1.Flightj.name; AdjListi.Flightj.Time=AdjListi+1.Flightj.Time; CityNum-; return 1; int DelPathchar *name /删除路线 / 删除路线- 9 - 名师归纳总结 - - - - - - -第 9 页,共 21 页精选学习资
15、料 - - - - - - - - - int i,j,flag=0; fori=0;iCityNum;i+ forj=0;jAdjListi.FlightNum;j+ ifstrcmpAdjListi.Flightj.name,name=0 flag=1;break;/找到要删除的路线,找到跳出for 循环ifflag for;jAdjListi.FlightNum-1;j+ AdjListi.Flightj.Cost=AdjListi.Flightj+1.Cost; AdjListi.Flightj.EndCity=AdjListi.Flightj+1.EndCity; strcpyAdj
16、Listi.Flightj.name,AdjListi.Flightj+1.name; AdjListi.Flightj.Time=AdjListi.Flightj+1.Time; AdjListi.FlightNum-;/将要删除路线后面的路线全部向前移,并将总数减 1 break; forj=0;jAdjListi.TrainNum;j+ ifstrcmpAdjListi.Trainj.name,name=0 flag=1; break; ifflag for;jAdjListi.TrainNum-1;j+ - 10 - 名师归纳总结 - - - - - - -第 10 页,共 21 页精
17、选学习资料 - - - - - - - - - AdjListi.Trainj.Cost=AdjListi.Trainj+1.Cost; AdjListi.Trainj.EndCity=AdjListi.Trainj+1.EndCity; strcpyAdjListi.Trainj.name,AdjListi.Trainj+1.name; AdjListi.Trainj.Time=AdjListi.Trainj+1.Time; AdjListi.TrainNum-; break; return 1; 通过调用上面这些函数,可以删除某个城市、某航班或者某列车次的信息;3.2.6 添加函数 函数原
18、型:int InsertCitychar *Name /添加某个城市 / 添加城市 strcpyCityNameCityNum,Name; AdjListCityNum.city=CityNum;/ 设置城市编号 AdjListCityNum.FlightNum=0; AdjListCityNum.TrainNum=0;/ 新增城市火车数和飞机数初始为零CityNum+;/ 城市总数加 1 return 1; int InsertFlightchar *flight,char *StartCity,char *EndCity,int Time,int cost /添加某架航班 / 添加飞机路线
19、 int i,j; - 11 - 名师归纳总结 - - - - - - -第 11 页,共 21 页精选学习资料 - - - - - - - - - i=SeekCityStartCity;j=SeekCityEndCity; AdjListi.FlightAdjListi.FlightNum.Cost=cost;AdjListi.FlightAdjListi.FlightNum.EndCity=j; AdjListi.FlightAdjListi.FlightNum.Time=Time; strcpyAdjListi.FlightAdjListi.FlightNum.name,flight;
20、 AdjListi.FlightNum+; return 1; int InsertTrainchar *train,char *StartCity,char *EndCity,int Time,int cost /添加某次列车 / 添加火车路线 int i,j; i=SeekCityStartCity;j=SeekCityEndCity; AdjListi.TrainAdjListi.TrainNum.Cost=cost;AdjListi.TrainAd jListi.TrainNum.EndCity=j; AdjListi.TrainAdjListi.TrainNum.Time=Time;
21、 strcpyAdjListi.TrainAdjListi.TrainNum.name,train; AdjListi.TrainNum+; return 1; 3.2.7 迪杰斯特拉函数void Dijkstraint s3030,int p_start,int p_end,int TravelType int PreCity30; int i,j,min,pre,pos; fori=0;iCityNum;i+ PreCityi=-1; PreCityp_start=-2; whilePreCityp_end=-1 - 12 - 名师归纳总结 - - - - - - -第 12 页,共 21
22、 页精选学习资料 - - - - - - - - - min=-1; fori=0;iCityNum;i+ ifPreCityi.=-1/i 为起始站 forj=0;j0&min0|sijmin pre=i;pos=j;/j 为起始站中花费最小的到达站的城市编号min=sij; PreCitypos=pre; Dijkstra_Outputs,PreCity,p_end,TravelType; 3.2.8 查询最小耗费函数 int CalcMinCostint StartCity,int EndCity,int TravelType / 查询最小耗费路线 int s3030; int i,j,
23、min,end,flag1,flag2; flag1=0;flag2=0; fori=0;iCityNum;i+ forj=0;jCityNum;j+ sij=-1;/ 设空路径线中ifTravelType=0/ 判定初始城市和终点城市是否在火车交通路fori=0;iCityNum;i+ - 13 - 名师归纳总结 - - - - - - -第 13 页,共 21 页精选学习资料 - - - - - - - - - forj=0;jAdjListi.TrainNum;j+ ifAdjListi.Trainj.EndCity=StartCity flag1=1; ifAdjListi.Train
24、j.EndCity=EndCity flag2=1; 机交通路线中else ifTravelType=1/ 判定初始和终点城市是否在飞fori=0;iCityNum;i+ forj=0;jAdjListi.FlightNum;j+ ifAdjListi.Flightj.EndCity=StartCity flag1=1; ifAdjListi.Flightj.EndCity=EndCity flag2=1; ifflag1.=1&flag2.=1 printfnt 愧疚 . 没有您要查找的路 线.;return 0; ifTravelType=0 fori=0;iCityNum;i+ min=
25、32767;j=0; whilejAdjListi.TrainNum min=32767;end=AdjListi.Trainj.EndCity; whileend=AdjListi.Trainj.EndCity&jAdjListi.TrainNum - 14 - 名师归纳总结 - - - - - - -第 14 页,共 21 页精选学习资料 - - - - - - - - - ifAdjListi.Trainj.Costmin min=AdjListi.Trainj.Cost; j+; /min 为 i 城市中的最小花费, end 为其路线终点站 siend=min; else fori=0
26、;iCityNum;i+ min=32767;j=0; whilejAdjListi.FlightNum min=32767;end=AdjListi.Flightj.EndCity; whileend=AdjListi.Flightj.EndCity&jAdjListi.FlightNum ifAdjListi.Flightj.Costmin min=AdjListi.Flightj.Cost; j+; siend=min; Dijkstras,StartCity,EndCity,TravelType; - 15 - 名师归纳总结 - - - - - - -第 15 页,共 21 页精选学习
27、资料 - - - - - - - - - return 1; 3.2.9 储备数据函数 int SaveFile/ / 将火车飞机交通信息写入文件 FILE *fp; int i,j,total; iffp=fopencity.txt,wb=NULL coutnt 无法打开文件 .n; return -1; fprintffp,%dn,CityNum;/在 city文件中输入城市总数fori=0;iCityNum;i+ fprintffp,%sn,CityNamei;/ 再输入城市名fclosefp; total=0; iffp=fopentrain.txt,wb=NULL coutnt 无法
28、打开文件 .n; return -1; fori=0;iCityNum;i+ total+=AdjListi.TrainNum; fprintffp,%dn,total;/在 train文件中输入火车总数fori=0;iCityNum;i+ forj=0;jAdjListi.TrainNum;j+ fprintffp,%s %s %s ,AdjListi.Trainj.name,CityNamei, CityNameAdjListi.Trainj.EndCity; / 输入火车车次,始发站和终点站- 16 - 名师归纳总结 - - - - - - -第 16 页,共 21 页精选学习资料 -
29、- - - - - - - - fprintffp,%d %dn,AdjListi.Trainj.Time,AdjListi.Trainj.Cost;/ 输入发车时间和到站时间和费用 fclosefp; total=0; iffp=fopenflight.txt,wb=NULL coutnt 无法打开文件 .n; return -1; fori=0;iCityNum;i+ total+=AdjListi.FlightNum; fprintffp,%dn,total;/在 flight文件中输入飞机总数fori=0;iCityNum;i+ forj=0;jAdjListi.FlightNum;j
30、+ fprintffp,%s %s %s ,AdjListi.Flightj.name,CityNamei, CityNameAdjListi.Flightj.EndCity; / 输入飞机航班号,始发站和终点站fprintffp,%d %dn,AdjListi.Flightj.Time,AdjListi.Flightj.Cos t;/ 输入起飞时间,到达时间和费用 fclosefp; return 1; 3.3 算法及平台分析 本系统用到的算法主要有数据结构中的排序、和文件流的操作等基本算法和迪杰斯特拉求取最短路径算法;本系统是在 Microsoft Visual C+ 6.0上设计及运行的
31、,全部的信息显示均是在- 17 - 名师归纳总结 - - - - - - -第 17 页,共 21 页精选学习资料 - - - - - - - - - dos 界面中显示出来,利用systemcolor sf操作使主界面以绿色为背景,前景色为白色; 并且在每一步操作后, 都利用 systemcls 显示的信息清楚、整齐;4 实现方法对 dos 界面进行清屏, 使显示器通过对设计题目的深化分析, 及题目的要求, 在设计时, 主要实现的大功能模块,大致满意一个全国交通询问系统的需要,主要的流程及实现方法请看下面的报告;4.1 同学信息治理系统框架及流程如下图主界面治理员界面 同学用户界面添 加 城
32、 市删 除 城 市添 加 交 通 路 线删 除 交 通 路 线查 询 最 小 耗 费 路 线查 询 最 短 时 间 路 线查 询 城 市 所 有 路 线终止退出5 调试问题 在编程中遇到不少问题,起初由于对题目懂得不足,使得将程序的功能不足,未- 18 - 名师归纳总结 - - - - - - -第 18 页,共 21 页精选学习资料 - - - - - - - - - 能实现全部的意思;后来经过查阅相关资料后,发觉其中系统在对最短路径问题上实 现困难;一番努力后,明白了迪杰斯特拉算法,并实现了最短时间到达的问题进行了解决,后来由于老师对问题的简化,发觉在最少费用上同样可以用次算法,经过一番
33、编译调试后,基本实现了功能;仍有显示方面问题;起初,对库函数的调用并不在意,但系统完成初期才发觉,在 DOS界面下,在界面的美观上大大受影响;后来发觉调用system“ cls ” 时,就会清除屏幕信息; system“ pause” ,它会使数据显示后暂停一下,用记按键后再连续;Sleep100 可以将界面冻结一段时间后在跳转,这使得使得整个系统的界面看起来整 齐而又不失丰富;当然,在编写代码调试程序的时候,仍遇到很多的问题,但在自己一遍又一遍的 调试中改正了,从而使系统的功能更加完善,使系统的功能更从人性化,容错才能更 加强大;但是系统仍旧存在很多不足之处,这与自己的体会和学问范畴有关,在
34、老师 的指导下,信任自己以后能作出更完善、更人性化的系统;6 系统的使用说明书 对于整个系统的使用及每一次你所作出挑选和操作之后会显现什么样的界面及操 作结果,在下面的说明中作出具体的说明及展现,具体如下所示;5.1 主界面说明 当运行系统时,第一进入的是主界面,显示了用户类型的选项,挑选正确的类型 进入,在最终一行有提示让您输入你所要挑选的功能项;如下所示:- 19 - 名师归纳总结 - - - - - - -第 19 页,共 21 页精选学习资料 - - - - - - - - - 5.2 治理员操作界面说明 键入 1 后,输入正确的治理员账号和密码,进入下面界面中:有 4 个显示功能可供
35、挑选:键入 1 可以对城市进行添加操作;键入 2 可以对城市进行删除操作;键入 3 可以对交通路线进行添加操作;键入 4 可以对交通路线进行删除操作;挑选相应的选项就能进行相应的操作,具体的依据提示操作就能达到所要求的功能;5.3 其它用户界面说明共有 3 个选项可供用户进行操作,挑选任何一项都会有相应的显示:如:键入 1 可以查询最小耗费路线;键入 2 可以查询最短时间路线;键入 3 可以查询城市全部路线;- 20 - 名师归纳总结 - - - - - - -第 20 页,共 21 页精选学习资料 - - - - - - - - - 6 结论 经过这几天课程设计,懂得了编译系统是个怎么样的过
36、程,在全部课题中,我选 择了交通询问系统的课题题目;在一个多星期的设计过程中,遇到过很多困难,也从 书籍和网络中找过很多相关资料来完善自己的设计;但结果不是让人很中意,可能是 接触时间太短,对数据结构的熟悉仍不深刻;通过这次课程设计,我对用迪杰斯特拉算法运算最短路径有了更深刻的熟悉,加强了我对数据结构的明白;我知道假如要想在C+或C方面有成就,必需多想多练习;现在我仍是缺少练习,看程序可能看得懂;而当真正的编写程序起来就遇到困难了;通过这次系统的编写,我明白了编程要细心,有耐心;有些程序看起来很多很难,但只要抽丝剥茧的渐渐分析,就能明白它是怎么运行的;其实,只要踏踏实实一步一步来,你会发觉原先
37、编程难度也不过如此;同时,我懂得了要多摸索,遇到问题或不解时不能不懂装懂,要尽量去想请清其缘由,要懂得查阅有用的资料;我知道在这次的课程设计中自已仍有很多的欠缺,在以后的日子中,我肯定得更加严格要求自己,改正缺点,不断努力,不断进步;参考文献1 谭浩强 .C 程序设计 第三版 . 北京 : 清华高校出版社 ,2005 2 严蔚敏著 . 吴伟民 . 数据结构 C 语言版 . 北京 : 清华高校出版社 ,2007 3 谭浩强著 .C+程序设计 . 北京:清华高校出版社 ,2004.6 致 谢本报告是在 * 老师的尽心指导和热忱关怀下完成的,在他上课中,跟着他的节奏,一步步深化学习了数据结构整个课程,让原来很枯燥的东西变得好玩,原来很难懂得 的东西,变得简洁懂得,在此真心感谢黄隆华老师的指导及其帮忙,同时也感谢赐予 我帮忙的各位同学;- 21 - 名师归纳总结 - - - - - - -第 21 页,共 21 页