数据结构课设城市公交查询系统(C语言) | 您所在的位置:网站首页 › 571路公交车线路查询表 › 数据结构课设城市公交查询系统(C语言) |
公交线路图
一. 设计要求:
1、需要用到多个文件,例如文本文件,文件名stations.txt,保存站点信息,格式可以自行设计,例如:编号 站名。等等 2、设计公交线路所需的存储结构,将文件中的数据读入内存。 3、提供用户操作的菜单和界面实现添加、删除、修改公交、站点、线路信息,注意数据间的关联性。 4、将修改后的信息保存回文件。 5、其他查询操作参见教程。 二. 设计内容:1、 数据格式**:** 在这个课设中我设计的是两个文件,一个文件用来存放公交车站名的“stations.txt”,一个用来存放公交线路“bus.txt”。 (1)**“stations.txt”**文件的第一行,记录的为公交车站的数量,依次往下,为所存的公交车站名,其格式为: ① 公交车站数 ② 公交车站名 ③ 公交车站名 ④ 公交车站名 (2)**“bus.txt****”**文件的第一行,记录的为公交车每个站之间有几条线路,就是一站算一条线路(例如:公交车从仙来广场到庆丰苑是走了一条线路,从仙来广场到金三角,就要先从仙来广场到庆丰苑,再从庆丰苑到金三角,这样看,是走了两条线路) 第二行开始记录公交名,公交车的一条线路的起点和终点,还有两站之间的距离,其格式为: ① 公交线路数量 ② 公交车名 起始站 终点站 距离 ③ 公交车名 起始站 终点站 距离 ④ 公交车名 起始站 终点站 距离 ………………………… 例如: 公交车名 起始站 终点站 距离 105 图书馆 人民政府 432 105 人民政府 万达广场 856 这就说明105路公交车,会经过图书馆–>人民广场–>万达广场。 2、 数据结构**:**将文件中的数据读入内存,建立图的存储结构,,以下为存储结构的C语言定义: typedef int StationsType;//StationsType 定义整形的变量 typedef struct TrafficNode { char name[MAX_STRING_NUM]; //公交号 int EndCity; //该有向边指向的顶点在数组中的位置,即该公交站编号 int Number ; //用于记录每站之间的距离 } TrafficNodeDat; typedef struct VNode { StationsType stations; int BusNum; // 标记下面 Bus 数组里元素个数 TrafficNodeDat Bus[MAX_TRAFFIC_NUM]; // 数组成员为结构体,记录了到达的终点站、距离、和公交号 } VNodeDat; VNodeDat AdjList[MAX_VERTEX_NUM]; 3、 查询公交线路:当输入公交号后,就会输出公交线路的信息如下图: 4、 添加公交站: 输入公交站名存储成功后会输出Save OK 5、 删除公交站: 输入公交需要删除的公交站成功会提醒: 6、 添加公交线路: 输入所规定的起始,终点站,公交号和两站之间的距离: 7、 删除公交: 输入公交号删除成功则输出OK: 二. 系统子程序及功能设计**:**int ShowMenu() int SeekStations(char *name) // 寻找公交站 int SearchBus(char *name)// 查询公交站 int InsertStations(char *Name) // 添加公交站 int DelStations(char *Name) // 删除公交站 int SaveSysInfo() // 向程序输入数据 int InsertBus(char *bus, char *StartCity, char *EndStations, int number)//添加公交 int DelPath(char *name)// 删除公交 int InitSysData(); 三.实验总结:1. 在做课设的时候,起初我设计的是一个公交一次性输入许多路线,这样也十分的符合公交的特性,但是在做到最优路径的是吧,出现了大量的bug,于是我进行了查阅资料,于是我就改成了现在的这样,两站两站的输入信息和存储信息,只要起始站和终点站,这样设计。虽然这样麻烦许多,但是在设计的时候自己对于这种方法掌握的更快一点,于是终于设计出来了这个课设。 2. 这个课设还是有很大的完善空间,在继续最优路径搜索的时候,在某些情况下会出现无法输出的情况,在进行了测试后,发现对于一些不存在的公交站查询的时候,不会报错,同时在输出的时候,不是很人性化,同时该程序的一些地方写的代码十分的繁琐,从而影响了运行速度。这些都是在之后的学习中,需要改进和完善的地方。 四.程序代码** #include #include #include #define ERR 0 #define OK 1 #define Dij_MAXN 100 #define MAX_VERTEX_NUM 100 #define MAX_STRING_NUM 100 #define MAX_TRAFFIC_NUM 100 const char StationsFile[] = "stations.txt"; const char BusFile[] = "bus.txt"; typedef int StationsType;//StationsType 定义整形的变量 typedef struct TrafficNode { char name[MAX_STRING_NUM]; // 公交号 //MAX_STRING_NUM 最为 10 int EndStations; // 该有向边指向的顶点在数组中的位置,即该公交站编号 int Number ; // 用于记录每站之间的距离 } TrafficNodeDat; typedef struct VNode { StationsType stations; int BusNum; // 标记下面 Bus 数组里元素个数 TrafficNodeDat Bus[MAX_TRAFFIC_NUM]; // 数组成员为结构体,记录了到达的终点站、距离0、和公交号 } VNodeDat; VNodeDat AdjList[MAX_VERTEX_NUM]; char StationsName[MAX_VERTEX_NUM][MAX_STRING_NUM]; // 公交站名,采用第一下标为该城市在本程序中的编号 int StationsNum; // 公交站数目 int ShowMenu() { printf("\n|****************** 欢迎使用城市交通系统 *******|\n"); printf("\n|------------------1: 添加公交站 --------------|"); printf("\n|------------------2: 删除公交线路 ------------|"); printf("\n|------------------3: 添加交通路线 ------------|"); printf("\n|------------------4: 删除公交 ----------------|"); printf("\n|------------------5: 查询最短的路线 ----------|"); printf("\n|------------------6: 查询公交线路 ------------|"); printf("\n|------------------7: 清除屏幕 ----------------|"); printf("\n|------------------0: 退出 --------------------|"); printf("\n|***********************************************|\n"); printf("\n 请输入你的选择 :"); return 0; } int SeekStations(char *name) // 寻找公交站 { int i; for (i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |