C++城市公交车查询系统是一款利用C++语言开发的应用程序,旨在为用户提供便捷的城市公交线路、站点及车辆到站时间等信息查询服务。
在设计一个C++城市公交查询系统时会遇到一些问题:
1. 设有一个文件对象`in_file`,若在while循环中使用`in_file>>`每次从文件中读取一个字符串直到文件结束,如果用`in_file.eof()`来判断是否到达文件末尾,则可以得到正确的结果。而直接使用`in_file`来判断则会导致最后一个字符串被读取两次。
2. 使用 `delete []` 释放字符串空间时经常出现问题的原因之一是原来申请的空间不够大,后来向这个空间中添加了过多的内容导致越界访问,在运行时会引发错误。
3. 当把一个对象作为参数传递给另一个对象的成员函数时,程序可能无法正常结束;这可能是由于在系统删除该对象的时候出现了问题。然而使用指针或者引用传递参数则可以避免这个问题,并且能够手动释放资源。我认为这很可能是因为值传递的原因:当将一个对象以实参的形式传入到函数中时,形参会复制实参的值。如果这个对象包含有指向动态内存的指针,则形参和实参的指针成员会指向相同的地址空间。因此,在函数调用结束的时候,形参会被销毁并释放其持有的资源;而此时在外部作为实参的对象中的相应指针已经被置为非法状态,导致当程序最终结束时尝试再次清理这块内存会导致错误。
公交线路的数据存储在一个文件夹中,每个文件对应一条具体的路线,并以该路名命名(忽略前缀“k”)。每条记录的格式如下:共有六行信息,用换行符分隔。
- 第一行:“线路名称:####”,其中 “####” 是实际的车名;
- 第二行:“上行站点:####”。
- 第三行:“下行站点:####。”
- 第四行:“首班车时间:####”
- 第五行:“末班车时间:####”
- 第六行:“票价:####”
如果线路不分上下方向,则第二行为“站点名称: ####”,第三行为空。