基于Qt实现的旅行模拟器

Collapser

发布日期: 2019-06-30 10:37:22 浏览量: 192
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、设计任务的描述

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

二、功能需求说明及分析

  • 城市总数不少于10个(13个)

  • 建立汽车、火车和飞机的时刻表(航班表)

    • 有沿途到站及票价信息
    • 不能太简单(不能总只是1班车次相连)
  • 旅客的要求包括:起点、终点、途经某些城市和旅行策略

  • 旅行策略有:

    • 最少费用策略:无时间限制,费用最少即可
    • 最少时间策略:无费用限制,时间最少即可
    • 限时最少费用策略:在规定的时间内所需费用最省

三、总体方案设计说明

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

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

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

模块:

  • Main:调用其他各个模块

  • Widget:主窗口,其上有输入信息和输出信息

  • Route:地图窗口,可以显示地图以及当前的位置,预计路径行程等

  • Passenger:储存输入的信息,当前状态,计算后的预计行程等

  • LogFile:记录日志

  • TimeTable:进行数据库的访问,将访问数据库封装成该类的方法

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

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

  1. struct Status//保存当前状态
  2. {
  3. char transport;//当前交通工具
  4. QString curCity;//当前城市
  5. QString nextMove;//下一步
  6. };
  7. class Passenger//当前乘客的信息
  8. {
  9. public:
  10. Passenger();
  11. enum POLICY{minTime,minCost,timeLimitCost};
  12. void setStart(QString s);
  13. QString getStart();
  14. void setEnd(QString e);
  15. QString getEnd();
  16. void setPolicy(int p);
  17. int getPolicy();
  18. void setLimitTime(double L);
  19. double getLimitTime();
  20. void setWayCities(QList<QPair<QString, double>> W);
  21. QList<QPair<QString, double>> getWayCities();
  22. void setSequence(bool checked);
  23. bool isSequence();
  24. private:
  25. QString start;//起点
  26. QString end;//终点
  27. int policy;//策略
  28. double limitTime;//限时最低价格的限制时间
  29. QList<QPair<QString, double>> wayCities;//途经城市
  30. bool sequence;//是否有顺序
  31. Status curStatus;//暂时打算用作储存当前状态
  32. };
  33. struct EdgeType {
  34. int cost = A_BIG_INT;
  35. };
  36. //邻接矩阵
  37. class Graph //
  38. {
  39. public:
  40. Graph();
  41. void CreateGraph_MinCost();//根据数据库建立最低价格的矩阵
  42. int Dijkstra(QString start_city, QString end_city, vector<QString> &out); //迪杰斯特拉求最短路径
  43. int LeastCost(QString start_city, QString end_city, vector<QString> &mid_city, int isOrdered, vector<QString> &rout); //求总路径
  44. private:
  45. vector<QString> vertex;//城市名表
  46. EdgeType arc_MinCost[100][100];//邻接矩阵,可看作边表
  47. int numVertex;//图中当前的顶点数
  48. int numEdge; //图中当前的边数
  49. };
  50. struct Info//数据库中一条数据
  51. {
  52. QString trainnumber;
  53. QString departcity;
  54. QString arrivecity;
  55. QTime departtime;
  56. QTime arrivetime;
  57. int price;
  58. int id;
  59. };
  60. class TimeTable
  61. {
  62. public:
  63. TimeTable();
  64. ~TimeTable();
  65. static int getMinPrice(QString start, QString goal); //根据起点终点从数据库中寻找最少价格
  66. static Info getInfo_MinCost(QString start, QString goal); //根据起点终点从数据库中提取最少价格的那一条数据
  67. private:
  68. QSqlDatabase db;
  69. static QMap<QString,QString> full2Short; //全名映射到简称
  70. };

五、各模块设计说明

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

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

上传的附件 cloud_download 基于Qt实现的旅行模拟器.7z ( 733.81kb, 2次下载 )
error_outline 下载需要9点积分

发送私信

三观不同不适合做朋友

10
文章数
11
评论数
最近文章
eject