当前位置: 首页 > article >正文

基于QT(C++)+MySQL实现的旅行模拟器

基于Qt实现的旅行模拟器

一、设计任务的描述

城市之间有三种交通工具(汽车、火车和飞机)相连,某旅客于某一时刻向系统提出旅行要求,系统根据该旅客的要求为其设计一条旅行线路并输出;系统能查询当前时刻旅客所处的地点和状态(停留城市/所在交通工具)。

二、功能需求说明及分析

  • 城市总数不少于10个(13个)
  • 建立汽车、火车和飞机的时刻表(航班表)
    • 有沿途到站及票价信息
    • 不能太简单(不能总只是1班车次相连)
  • 旅客的要求包括:起点、终点、途经某些城市和旅行策略
  • 旅行策略有:
    • 最少费用策略:无时间限制,费用最少即可
    • 最少时间策略:无费用限制,时间最少即可
    • 限时最少费用策略:在规定的时间内所需费用最省

三、总体方案设计说明

软件开发环境、总体结构和模块划分等。

Windows下开发,使用Qt Creator作为IDE,MySQL数据库进行时刻表调用,C++语言编程。

目前为单一窗口,如果需要显示地图,可以增加一个窗口。

模块:

  • Main:调用其他各个模块
  • Widget:主窗口,其上有输入信息和输出信息
  • Route:地图窗口,可以显示地图以及当前的位置,预计路径行程等
  • Passenger:储存输入的信息,当前状态,计算后的预计行程等
  • LogFile:记录日志
  • TimeTable:进行数据库的访问,将访问数据库封装成该类的方法

应该还有一个计时器来模拟时间流动。

四、数据结构说明和数据字典

struct Status//保存当前状态
{
    char transport;//当前交通工具
    QString curCity;//当前城市
    QString nextMove;//下一步
};

class Passenger//当前乘客的信息
{
public:
    Passenger();
    enum POLICY{minTime,minCost,timeLimitCost};
    void setStart(QString s);
    QString getStart();
    void setEnd(QString e);
    QString getEnd();
    void setPolicy(int p);
    int getPolicy();
    void setLimitTime(double L);
    double getLimitTime();
    void setWayCities(QList<QPair<QString, double>> W);
    QList<QPair<QString, double>> getWayCities();
    void setSequence(bool checked);
    bool isSequence();

private:
    QString start;//起点
    QString end;//终点
    int policy;//策略
    double limitTime;//限时最低价格的限制时间
    QList<QPair<QString, double>> wayCities;//途经城市
    bool sequence;//是否有顺序
    Status curStatus;//暂时打算用作储存当前状态
};
struct EdgeType {
    int cost = A_BIG_INT;
};

//邻接矩阵
class Graph //
{
public:
    Graph();
    void CreateGraph_MinCost();//根据数据库建立最低价格的矩阵
    int Dijkstra(QString start_city, QString end_city, vector<QString> &out); //迪杰斯特拉求最短路径
    int LeastCost(QString start_city, QString end_city, vector<QString> &mid_city, int isOrdered, vector<QString> &rout); //求总路径

private:
    vector<QString> vertex;//城市名表
    EdgeType arc_MinCost[100][100];//邻接矩阵,可看作边表
    int numVertex;//图中当前的顶点数
    int numEdge; //图中当前的边数
};

struct Info//数据库中一条数据
{
    QString trainnumber;
    QString departcity;
    QString arrivecity;
    QTime departtime;
    QTime arrivetime;
    int price;
    int id;
};

class TimeTable
{
public:
    TimeTable();
    ~TimeTable();
    static int getMinPrice(QString start, QString goal); //根据起点终点从数据库中寻找最少价格
    static Info getInfo_MinCost(QString start, QString goal); //根据起点终点从数据库中提取最少价格的那一条数据
private:
    QSqlDatabase db;
    static QMap<QString,QString> full2Short; //全名映射到简称
};

五、各模块设计说明

在widget窗口中输入,即时设定好passenger的成员变量,点击开始后,执行算法。

最少费用:价格作为有向网的权值,利用迪杰斯特拉算法设计出路线。


http://www.kler.cn/a/453569.html

相关文章:

  • YashanDB 23.2 YAC -单库多实例架构多活共享集群安装部署指南
  • 商品线上个性定制,并实时预览3D定制效果,是如何实现的?
  • [论文笔记] 从生成到评估:LLM-as-a-judge 的机遇与挑战
  • WebXR
  • 音视频入门知识(二)、图像篇
  • Vue.use()和Vue.component()
  • Idea 添加tomcat 并发布到tomcat
  • ubuntu22.04安装PPOCRLabel
  • 踏踏实实练SQLday1-2 lead/lag使用(股票波峰波谷)
  • cesium通过经纬度获取3dtiles 得feature信息
  • Eclipse 修改项目栏字体大小
  • ADB 上传文件并使用脚本监控上传百分比
  • USB Hub 检测设备
  • Android APP 集成本地大模型 LLM
  • datax ubuntu安装
  • 华为 AI Agent:企业内部管理的智能变革引擎(11/30)
  • E-commerce .net+React(一)——项目初始化
  • Mac上Stable Diffusion的环境搭建(还算比较简单)
  • DevOps 中的 AI:测试始终是一个关键领域
  • 【ES6复习笔记】Promise对象详解(12)
  • cad学习 day7-9
  • 数据结构 C/C++(实验六:查找)
  • 35. TCP网络编程
  • 2024国赛A题第一问
  • 【ubuntu基础软件安装】
  • Weex购物车长列表横滑操作优化“编年史”