目录
一、设计任务的描述 1
二、功能需求说明及分析 1
三、总体方案设计说明 2
四、数据结构说明和数据字典 4
五、各模块设计说明 6
二、功能需求说明及分析
功能需求:
设计最省钱和最少时间的算法及其需要信息的存储:最省钱和最少的算法利用迪杰斯塔拉算法;
信息先是存储在一个文本文件中,程序可以从中读取并且存放在一个类中。
该程序所做的工作是模拟旅游交通查询,为旅客提供最有决策的交通查询。规定: 再输入城市名称时,直接输入城市的名称(汉字);输入时间时,需要输入一个整型数据,选择功能时在界面上直接选择。程序的输出信息主要是:最快需要多少时间才能到达,或者最少需要多少费用才能到达,以及在旅程途中临时改变目的地时方案也相对发生变化和在规定时间内的最省钱方案。本文转载自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();
}