NoShaniya 2014-10-05 12:06 采纳率: 0%
浏览 1172

怎么编写这个界面和代码。c++的

                第1题 地铁出行帮助软件

【问题描述】
当今的北京,地铁已经成为绝大多数人出行的首选。截至2014年1月,北京地铁共有17条运营线路。组成覆盖北京市11个市辖区,拥有231座运营车站、总长467千米运营线路的轨道交通系统,工作日均客流约1000万人次,峰值日客运量1155.92万人次。随着地铁线路的增加,地铁规模越来越大,人们愈发的感觉到地铁的便利。特别地从出发地到目的地的乘车方案的选择也越来越多。因此,需要提供一个软件能够为人们提供出发到目的地之间“最快”或“最方便”的地铁出行方案。其中,“最快”指用时最少,“最方便”则指在换乘车少的基础上用时最少。
【基本要求】
请设计一个地铁出行帮助系统,为北京市居民提供地铁出行方案(仅限地铁出行)。提供出发地和目的地地铁站的输入窗口,提供出行建议,并图形显示出线路。
出行建议信息:
• 出发站, 站名, 几号线
• 第2站, 站名, 几号线
• …
• 第i站, 站名, 几号线
• …
• [换乘站, 站名, 换乘几号线]* ,
• 第m站, 站名, 几号线
• 目的站, 站名, 几号线
• 总用时, X分钟,换乘次数:N
一 、输入数据要求
地铁线路基础信息数据通过一个名为“BaseInfo.txt”的文本文件读入。
该数据文件格式如下:
• 第0行:当前系统中地铁线路的条数n(n > 0)
• 第1行:第1条地铁线路名称(如:1号线),第1站(如:四惠东站),图上坐标(如:X1,Y1) ,运行时间(如:3),第2站(如:四惠站),图上坐标(如:X2,Y2),运行时间(如:4),…, 第23站(如:苹果园站),图上坐标(如:Xn,Yn)
• …
• 第i行:第i条地铁线路名称, 第1站,运行时间,第2站,运行时间,…, 第n站
• …
• 第n行:第n条地铁线路名称, 第1站,运行时间,第2站,运行时间,…, 第n站
• 第n+1行:换乘站数目m(m > 0)
• 换乘编号1#:换乘站名称1(如:四惠东站),(下车线路(如:1号线),换乘线路(如:八通线),换乘时间 (如:5))+
• …
• 换乘编号i#:换乘站名称i,下车线路,换乘线路,换乘时间
• …
• 换乘编号m#:换乘站名称m,下车线路,换乘线路,换乘时间

用户查询信息通过图形界面的对话框提供:
包括起始站,目的站的输入框。
二、输出画面的要求

用图形方式显示北京市地铁图,并根据客户的输入提供建议(文字展示)并以加粗的两端带红点的绿色线路形式绘制在地铁图上。
三、题目约定
 题目中的时间单位为分钟;
 地铁一般一站运行时间3分钟,个别长的站为5分钟。
 最短距离以所用时间表示

四、 题目实现要求
 应用最短路径算法,求任意两站间的“最快”,“最方便”的出行方案。特别需要注意换乘站的处理。
【数据样例】
界面输入:
出发站:潘家园
目的站:东大桥

图 1 输入界面
界面输出:

图 2 地铁出行建议(对话框)

图 3出行建议线路图(局部图)
【实现提示】
1. 需要将基础数据信息转换为一张带权无向图(虽然有些地铁站的各个方向换乘时间不一致,但这种均不予以考虑,简化问题),权值为地铁运行时间和换乘时间。
2. 需要为无向图选用易于操作的存储方式。
3. 需要根据自己采用的地图尺寸,为各个地铁站赋予相应的坐标,存入BaseInfo.txt文件中。
4. 可以适当简化地铁运行图,但至少要包括1、2、4、5、6、8、9、10、13号线这9条地铁线

备注:
地铁相关信息可以去网上查,地铁地图可在wiki百科下载,也可以根据情况自己绘制,但至少包括之前所要求的9条线路。

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-26 22:51
    关注

    该回答引用ChatGPT-3.5

    根据题目要求,需要设计一个地铁出行帮助系统,提供地铁出行方案。以下是一个示例的界面和代码实现,你可以根据需要进行修改和完善。


    界面设计:
    你可以使用C++的图形库(如Qt、MFC)来实现图形界面,或者使用控制台窗口来展示界面。下面是一个基本的控制台窗口界面示例:

    -------------------
    地铁出行帮助系统
    -------------------
    
    请输入出发站:潘家园
    请输入目的站:东大桥
    
    -------------------
    出行建议:
    - 出发站:潘家园,10号线
    - 第1站:劲松,10号线
    - 第2站:双井,10号线
    - [换乘站]:双井,10号线->7号线,换乘时间:5分钟
    - 第3站:九龙山,7号线
    - 第4站:大郊亭,7号线
    - 第5站:百子湾,7号线
    - [换乘站]:百子湾,7号线->6号线,换乘时间:3分钟
    - 第6站:化工,6号线
    - 第7站:南楼梓庄,6号线
    - 第8站:欢乐谷景区,6号线
    - 第9站:垡头,6号线
    - 第10站:北京南站,6号线
    - 第11站:马家堡,6号线
    - 第12站:角门西,6号线
    - 第13站:角门东,6号线
    - [换乘站]:角门东,6号线->4号线,换乘时间:2分钟
    - 第14站:大红门,4号线
    - 第15站:西红门,4号线
    - 第16站:新宫,4号线
    - 第17站:公益西桥,4号线
    - 第18站:角门西,4号线
    - 第19站:马家堡,4号线
    - 第20站:北京南站,4号线
    - 第21站:陶然桥,4号线
    - 第22站:菜市口,4号线
    - 第23站:宣武门,4号线
    - 第24站:西单,4号线
    - 第25站:灵境胡同,4号线
    - 第26站:西四,4号线
    - 第27站:平安里,4号线
    - 第28站:新街口,4号线
    - 第29站:西直门,4号线
    - 第30站:动物园,4号线
    - 第31站:国家图书馆,4号线
    - 第32站:魏公村,4号线
    - 第33站:人民大学,4号线
    - 第34站:海淀黄庄,4号线
    - 第35站:中关
    
    村,4号线
    - 第36站:北京大学东门,4号线
    - 第37站:圆明园,4号线
    - [换乘站]:圆明园,4号线->10号线,换乘时间:2分钟
    - 第38站:西苑,10号线
    - 第39站:北宫门,10号线
    - 第40站:安河桥北,10号线
    - 目的站:东大桥,10号线
    
    总用时:62分钟,换乘次数:4
    

    代码实现:
    以下是一个简化的示例代码,使用邻接矩阵表示地铁线路的图结构,并使用Dijkstra算法求解最短路径。请注意,这只是一个基本的实现示例,你可以根据需要进行修改和优化。

    #include <iostream>
    #include <vector>
    #include <queue>
    using namespace std;
    
    const int INF = 1000000; // 代表无穷大
    
    // 地铁站点结构体
    struct Station {
        string name; // 站名
        int line;    // 所属线路
    };
    
    // 地铁图类
    class SubwayMap {
    private:
        vector<vector<int>> adjacencyMatrix; // 邻接矩阵表示地铁线路图
        vector<Station> stations;            // 站点信息
    
    public:
        // 构造函数
        SubwayMap(int numLines) {
            adjacencyMatrix.resize(numLines, vector<int>(numLines, INF));
        }
    
        // 添加地铁站点
        void addStation(const string& name, int line) {
            Station station;
            station.name = name;
            station.line = line;
            stations.push_back(station);
        }
    
        // 添加地铁线路连接
        void addConnection(int line1, int station1, int line2, int station2, int time) {
            adjacencyMatrix[line1][line2] = time;
            adjacencyMatrix[line2][line1] = time;
        }
    
        // 获取地铁站点名称
        string getStationName(int line, int station) {
            return stations[station].name;
        }
    
        // 获取地铁站点所属线路
        int getStationLine(int line, int station) {
            return stations[station].line;
        }
    
        // 使用Dijkstra算法求解最短路径
        void findShortestPath(int startLine, int startStation, int endLine, int endStation) {
            int numLines = adjacencyMatrix.size();
    
            vector<int> dist(numLines, INF); // 记录起始站到各站点的最短距离
            vector<int> prev(numLines, -1);  // 记录最短路径上每个站点的前一个站点
            vector<bool> visited(numLines, false);
    
            dist[startLine] = 0;
    
            for (int i = 0; i < numLines - 1; i++) {
                int u = -1;
                int minDist = INF;
    
                // 选择当前最短距离的站点
                for (int j = 0; j < numLines; j++) {
                    if (!visited[j] && dist[j] < minDist) {
                       
    
     minDist = dist[j];
                        u = j;
                    }
                }
    
                visited[u] = true;
    
                // 更新与当前站点相邻的站点的最短距离
                for (int v = 0; v < numLines; v++) {
                    if (!visited[v] && adjacencyMatrix[u][v] != INF && dist[u] + adjacencyMatrix[u][v] < dist[v]) {
                        dist[v] = dist[u] + adjacencyMatrix[u][v];
                        prev[v] = u;
                    }
                }
            }
    
            // 构建路径
            vector<int> path;
            int currentLine = endLine;
            int currentStation = endStation;
    
            while (currentStation != startStation || currentLine != startLine) {
                path.push_back(currentLine);
                int temp = prev[currentLine];
                currentLine = temp;
            }
    
            // 输出结果
            cout << "出行建议:" << endl;
            cout << "- 出发站:" << getStationName(startLine, startStation) << "," << getStationLine(startLine, startStation) << "号线" << endl;
    
            for (int i = path.size() - 1; i >= 0; i--) {
                int line = path[i];
                cout << "- 第" << i + 1 << "站:" << getStationName(line, currentStation) << "," << getStationLine(line, currentStation) << "号线" << endl;
                currentStation = prev[line];
            }
    
            cout << "- 目的站:" << getStationName(endLine, endStation) << "," << getStationLine(endLine, endStation) << "号线" << endl;
            cout << "总用时:" << dist[endLine] << "分钟,换乘次数:" << path.size() - 1 << endl;
        }
    };
    
    int main() {
        // 创建地铁图对象
        SubwayMap subway(9);
    
        // 添加地铁站点
        subway.addStation("潘家园", 0);
        subway.addStation("劲松", 0);
        subway.addStation("双井", 0);
        subway.addStation("九龙山", 1);
        subway.addStation("大郊亭", 1);
        subway.addStation("百子湾", 1);
        subway.addStation("化工", 2);
        subway.addStation("南楼梓庄", 2);
        subway.addStation("欢乐谷景区", 2);
        subway.addStation("垡头", 2);
        subway.addStation("北京南站", 2);
        subway.addStation("马家堡", 2);
        subway.addStation("角门西", 2);
        subway.addStation("角门东", 2);
        subway.addStation("大红门", 3);
        subway.addStation("西红门", 3);
        subway.addStation("新宫", 3);
        subway.addStation("公益西桥", 3);
        subway.addStation("西苑", 4);
        subway.addStation("北宫门", 4);
        subway.addStation("安河桥北", 4);
        subway.addStation("东大桥", 0);
    
        // 添加地铁线路连接
        subway.addConnection(0, 0, 0, 1, 3);
        subway.addConnection(0,
    
     1, 0, 2, 4);
        subway.addConnection(0, 2, 1, 3, 5);
        subway.addConnection(1, 3, 1, 4, 5);
        subway.addConnection(1, 4, 1, 5, 4);
        subway.addConnection(1, 5, 2, 6, 3);
        subway.addConnection(2, 6, 2, 7, 4);
        subway.addConnection(2, 7, 2, 8, 4);
        subway.addConnection(2, 8, 2, 9, 3);
        subway.addConnection(2, 9, 2, 10, 4);
        subway.addConnection(2, 10, 2, 11, 3);
        subway.addConnection(2, 11, 2, 12, 3);
        subway.addConnection(2, 12, 2, 13, 2);
        subway.addConnection(2, 13, 3, 14, 2);
        subway.addConnection(3, 14, 3, 15, 3);
        subway.addConnection(3, 15, 3, 16, 3);
        subway.addConnection(3, 16, 3, 17, 3);
        subway.addConnection(4, 18, 4, 19, 3);
        subway.addConnection(4, 19, 4, 20, 3);
        subway.addConnection(4, 20, 0, 21, 2);
    
        // 查找最短路径并输出结果
        subway.findShortestPath(0, 0, 0, 21);
    
        return 0;
    }
    

    这个示例中,我们创建了一个9条线路的地铁图对象,然后添加了各个站点和线路之间的连接关系。最后使用Dijkstra算法查找最短路径,并输出结果。


    请注意,这只是一个基本的实现示例,实际的地铁线路和站点信息可能更复杂,需要根据实际情况进行适当的修改和扩展。另外,你还可以考虑使用更高级的算法(如A*算法)来优化路径搜索的效率。

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序