C++实现的公交查询系统与课程设计报告

需积分: 10 11 下载量 60 浏览量 更新于2024-07-27 2 收藏 1017KB DOC 举报
"公交查询系统是一个使用C++编程语言实现的课程设计项目,目标是创建一个能够处理公交车线路和站点信息的查询系统。系统需要具备存储、读取文本文件、按关键字查找以及解决换乘问题的功能。设计要求采用结构体存储节点信息,并通过双向链表组织数据。" 在公交查询系统的设计中,主要涉及以下几个关键知识点: 1. **数据结构的选择**:为了存储公交线路和站点信息,选择了自定义的结构体类型`station`。每个`station`结构包含主线路`mainline`、站点名称`station_name`以及一个`line`数组,用来存储经过该站点的其他辅助线路。如果某个站点没有其他线路经过,数组中的相应位置用-1填充。此外,还定义了一个头结点`Headpoint`,用于存储所有公交线路的链表。 2. **双向链表的使用**:双向链表被用于连接各个站点节点,使得可以在链表中方便地进行前后查找和插入操作。每个节点都有`forward`和`next`指针,分别指向下一个和上一个节点,支持双向遍历。 3. **文件读取**:系统需要从文本文件中读取公交线路和站点数据,这涉及到文件I/O操作。C++中的`fstream`库可以用来打开、读取和写入文件,将数据存入到链表中。 4. **查找算法**:系统需要根据路线或站点进行查找,可能采用线性搜索或者更高效的搜索算法,如二分查找。具体选择哪种算法取决于数据规模和性能要求。考虑到公交查询系统的特性,线性搜索可能是简单且足够有效的解决方案。 5. **换乘问题**:解决换乘问题需要找出两个站点之间所有可能的路线组合,这通常涉及图论中的路径查找算法,如深度优先搜索(DFS)或广度优先搜索(BFS)。在这个系统中,换乘问题可以通过调用查找函数来确定中转站点和路线。 6. **函数模块设计**:系统包含不同的功能模块,如文件读取模块、查找模块、换乘计算模块等。每个模块应有清晰的职责,通过函数接口相互协作。 7. **主函数与菜单驱动**:主函数是整个程序的入口点,它将调用上述各模块实现系统的功能。同时,系统设计有屏幕输出的菜单,引导用户进行操作,提高交互性。 8. **流程图设计**:系统提供了流程图,帮助理解和设计程序的执行流程。流程图包括总流程图、站点查询流程图、线路查询流程图以及换乘查询流程图,这些图形化表示有助于逻辑的可视化。 公交查询系统的设计和实现涵盖了数据结构、文件操作、算法应用等多个核心IT知识点,特别是结构体、链表、文件I/O和搜索算法在实际问题中的应用。
2003-11-03 上传
c++城市公交查询系统 1.设有一文件对象in_file,若在while循环中用in_file>> 每次从文件中得到一个字符串直到文件结束, 如果用in_file直接来判断文件是否结束, 则文件末的那个字符串会得到两次。 而用文件in_file.eof()来判断则会得到正确的结果。 2.用delete []释放字符串空间时,老是有问题, 其中的原因之一是你原来申请的空间不够大, 后来往这个空间中放了过多的内容以至越界, 这时候会发生运行时的错误。 3.把一个对象作为参数传给另一个对象的成员函数时, 程序不能正常结束,即系统删除对象时有问题; 而使用指针或者引用传递参数时不仅不会出现问题, 而且可以人为的删除对象。 我个人认为这很有可能是值传递的原因, 当把一个对象作为实参传给一个函数时,函数形参拷贝了实参的值, 这时,如果对象有指针成员,那么形参的指针成员的值和 实参的指针成员的值将完全一样, 即它们指向的是同一块内存,所以当函数调用结束的时候, 函数的形参将会被系统撤消, 这时,形参调用析构函数,释放用new动态申请的内存。在函数的外面, 作为实参的对象的指针成员其实已经被撤消了,所以当程序结束, 系统撤消这个对象时,这个对象又要调用析构函数来释放指针成员, 但这时指针其实已经指向了非法的空间,导致出错。 bus 文件夹的内容记录的是每条线路的信息,对应于bus 类。 每个文件以线路名称(即车名,忽略前面的k)命名。 每个文件的内容组织如下:(共分为6行,以回车键作为行结束标志) 第一行为“线路名称:#### ”,其中####用具体的线路名称代替; 第二行为“上行站点:####”。 第三行为“下行站点:####”。 第四行为“首班车时间:####”。 第五行为“末班车时间:####”。 第六行为“票价:####”。 注:若不分“上行站点”和“下行站点”, 则第二行为“站点名称:####”, 第三行为空行;