我想用c++实现一个交通咨询系统,数据项包括起始站城市的名称,终点站名称,两个城市间的距离,时间,价钱,能够实现添加两个城市间的信息,且能查询两个城市间的最少花费并将输入的两个城市间的信息写入到文本文件中
时间: 2024-05-15 19:16:34 浏览: 17
这是一个比较复杂的项目,需要设计多个模块和数据结构。下面是一个简单的实现方案,仅供参考:
1. 定义数据结构
我们需要定义一个结构体来存储每个城市之间的信息,包括起点城市、终点城市、距离、时间和价格:
```c
typedef struct CityInfo {
char start[20];
char end[20];
int distance;
int time;
int price;
} CityInfo;
```
2. 添加城市信息
我们可以使用一个数组来存储所有的城市信息,然后通过用户输入来添加新的城市信息。这里假设数组的最大长度为100:
```c
CityInfo cityInfo[100];
int numCities = 0;
void addCityInfo() {
printf("Enter start city: ");
scanf("%s", cityInfo[numCities].start);
printf("Enter end city: ");
scanf("%s", cityInfo[numCities].end);
printf("Enter distance: ");
scanf("%d", &cityInfo[numCities].distance);
printf("Enter time: ");
scanf("%d", &cityInfo[numCities].time);
printf("Enter price: ");
scanf("%d", &cityInfo[numCities].price);
numCities++;
}
```
3. 查询最少花费
我们可以使用迪杰斯特拉算法来计算两个城市之间的最短路径。这里假设所有城市之间都是连通的,因此可以使用邻接矩阵来存储城市之间的距离。另外,我们可以使用一个数组来存储每个城市的最小花费和前驱节点:
```c
int dist[100];
int pred[100];
bool visited[100];
void dijkstra(int start, int end) {
// 初始化数组
for (int i = 0; i < numCities; i++) {
dist[i] = INT_MAX;
pred[i] = -1;
visited[i] = false;
}
dist[start] = 0;
// 计算最小花费
for (int i = 0; i < numCities - 1; i++) {
int u = -1;
for (int j = 0; j < numCities; j++) {
if (!visited[j] && (u == -1 || dist[j] < dist[u])) {
u = j;
}
}
visited[u] = true;
for (int v = 0; v < numCities; v++) {
if (!visited[v] && cityMap[u][v] != -1) {
int newDist = dist[u] + cityMap[u][v];
if (newDist < dist[v]) {
dist[v] = newDist;
pred[v] = u;
}
}
}
}
// 输出结果
printf("Shortest path from %s to %s: ", cityInfo[start].start, cityInfo[end].end);
int path[100], len = 0;
for (int i = end; i != -1; i = pred[i]) {
path[len++] = i;
}
for (int i = len - 1; i >= 0; i--) {
printf("%s ", cityInfo[path[i]].start);
}
printf("%s\n", cityInfo[end].end);
printf("Minimum cost: %d\n", dist[end]);
}
```
4. 写入文本文件
我们可以使用标准库函数`fopen()`和`fprintf()`来打开一个文本文件并将数据写入其中。这里假设文件名为`cityinfo.txt`:
```c
void writeToFile() {
FILE *fp = fopen("cityinfo.txt", "w");
for (int i = 0; i < numCities; i++) {
fprintf(fp, "%s %s %d %d %d\n", cityInfo[i].start, cityInfo[i].end, cityInfo[i].distance, cityInfo[i].time, cityInfo[i].price);
}
fclose(fp);
}
```
完整代码如下:
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)