• 基于Qt的旅行最优时间费用模拟系统


    目录
    一、设计任务的描述 1
    二、功能需求说明及分析 1
    三、总体方案设计说明 2
    四、数据结构说明和数据字典 4
    五、各模块设计说明 6

    1. Schedule 6
    2. Traveler 7
    3. Widget 8
    4. Mapwidget 9
    5. Log 9
      六、范例执行结果及测试情况说明 10
      七、评价和改进意见 12
      八,用户使用说明 12
      一、设计任务的描述
      系统目标:
      本软件旨在根据旅客的要求设计出行路线并输出,同时系统能模拟旅所在的地点和状态,目标是为旅客提供能完美出行的计划。处于对不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省。编制一个全国城市间的交通咨询程序,为旅客提供最优决策的交通咨询。

    二、功能需求说明及分析
    功能需求:
    设计最省钱和最少时间的算法及其需要信息的存储:最省钱和最少的算法利用迪杰斯塔拉算法;
    信息先是存储在一个文本文件中,程序可以从中读取并且存放在一个类中。
    该程序所做的工作是模拟旅游交通查询,为旅客提供最有决策的交通查询。规定: 再输入城市名称时,直接输入城市的名称(汉字);输入时间时,需要输入一个整型数据,选择功能时在界面上直接选择。程序的输出信息主要是:最快需要多少时间才能到达,或者最少需要多少费用才能到达,以及在旅程途中临时改变目的地时方案也相对发生变化和在规定时间内的最省钱方案。本文转载自http://www.biyezuopin.vip/onews.asp?id=15097模拟旅游交通查询系统,能实现现实生活中旅客的各种需求做出相应的程序,能实现选择功能。

    1)城市总数不少于 10 个,即不能过于简单
    2)建立汽车,火车,飞机的航班表包含沿途到站、票价信息
    并且要求两个城市之间不能只有一班车次
    3)旅客的需求包含:起点、中点、途经城市、在某个城市的停留时间、旅行策略(旅客可以中途改变旅行方案)
    4)旅行策略包含:
    最少费用:不考虑时间,只需费用最少
    最少时间:不考虑费用,只需时间最短
    限时最少费用:在规定的时间内,让费用最少
    5)旅行查询系统以 10s :1h 的速度推进时间轴(非查询状态不计时)
    6)不考虑城市内换乘交通工具所需时间
    7)系统的时间精确到小时
    8)建立日志文件,对旅客状态变化和键入等信息进行记录
    9)旅客在旅途中可更改旅行计划,系统做出相应的操作
    10)用图形绘制地图,并在地图上反映出旅客的旅行过程

    三、总体方案设计说明

    开发环境:
    版 本 库 :Qt 5.12.2 IDE:Qt Creator 4.8.2 编译器:MinGW 64-bit 系统:Windows 10

    概要设计:
    本系统整体上分为存储系统,编辑列车城市信息以及求最小费用,最短时间,存储系统运用到数组和类。存储系统分别存储火车,飞机,汽车列次,始发地和终点站以及需要的费用。最短时间和最小费用使用迪杰斯塔拉算法编程。该算法主要分为三步:1,起始点(V0)与其相邻点的权值(即当前最短路径)。2,求出当前最短路径中的最小值即是该起始点(V0)与另一点(Vi)的最短路径。3,
    V0 到 Vi 的距离加上 Vi 到 Vj 的距离小于 V0 到 Vj 则将 V0 到 Vi 的距离加上 Vi 到 Vj 的距离记为 V0 到 Vj 当前最短路径,循环第二,三步。如此得到 V0 到各点的最短路径,进而可以得到最想要的一条。时间复杂度为 O(n2),空间复杂度 O(n)。

    #include "widget.h"
    #include "log.h"
    
    #include 
    #include 
    #include
    #include
    
    //日志函数
    void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
    {
    
        QDateTime time = QDateTime::currentDateTime();
        QString timestr = time.toString("yyyy-MM-dd hh:mm:ss ddd");
    
        QFile file("log.txt");
        //file.resize(0);
        file.open(QFile::WriteOnly| QIODevice::Append);
        QTextStream out(&file);
    
        switch (type) {
        case QtDebugMsg:
            out << "Debug: "  << msg << " (" << timestr << ") " << "\r\n";
            break;
        case QtWarningMsg:
            out << "warning: "<< msg << " (" << timestr << ") " << "\r\n";
            break;
        case QtCriticalMsg:
            out << "critical: "<< msg << " (" << timestr << ") " << "\r\n";
            break;
        case QtFatalMsg:
            out << "fatal: "<< msg << " (" << timestr << ") " << "\r\n";
            abort();
        }
    }
    
    
    
    
    void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
    {
        static QMutex mutex;
        mutex.lock();
    
        QString text;
        switch(type)
        {
        case QtDebugMsg:
            text = QString("Debug:");
            break;
    
        case QtWarningMsg:
            text = QString("Warning:");
            break;
    
        case QtCriticalMsg:
            text = QString("Critical:");
            break;
    
        case QtFatalMsg:
            text = QString("Fatal:");
        }
    
        QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
        QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
        QString current_date = QString("(%1)").arg(current_date_time);
        QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
    
        QFile file("log.txt");
        file.open(QIODevice::WriteOnly | QIODevice::Append);
        QTextStream text_stream(&file);
        text_stream << message << "\r\n";
        file.flush();
        file.close();
    
        mutex.unlock();
    }
    
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        //输出log.txt文件
    
        //支持中文编码
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");
        QTextCodec::setCodecForLocale(codec);
    
        qInstallMessageHandler(myMessageOutput);
    
        Widget window;
        window.show();
    
        return a.exec();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    使用 diffusers 训练你自己的 ControlNet 🧨
    基于JAVA学校运动会信息管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    俄罗斯方块游戏开发教程7:消除判断和处理
    SpringBoot项目启动时预加载
    加密解密实例分析
    「Java开发指南」如何利用MyEclipse启用Spring DSL?(二)
    Polygon zkEVM Arithmetic状态机
    【正点原子STM32连载】第四章 STM32初体验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
    【大麦小米学量化】什么是量化交易?哪些人适合做量化交易?
    cesium示例教程100+目录
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/126848905