课程设计 - 全国交通咨询系统 试验报告

更新时间:2023-11-11 01:21:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

分类号 编 号

华北水利水电大学

North China Institute of Water Conservancy and Hydroelectric Power

课 程 设 计

题目 全国交通咨询系统

院 系 信息工程学院 专 业 计算机科学与技术 姓 名 周桂华、史佳 王小飞 学 号 201320825、201320808、201320806 指 导 教 师 杨斌

2014年6月27日

目录

1

1 需求分析 ............................................... 3 1.1 问题描述 ...................................................................................... 3 1.2 基本要求 ...................................................................................... 3 2 概要设计 ............................................... 4 2.1数据结构 ....................................................................................... 4 2.2 程序模块 .................................................................................... 8 2.2.1 管理员模块 ..................................................................... 8 2.2.2 客户查询 .......................................................................... 8 2.3各模块之间的调用关系以及算法设计 ....................................... 8 2.3.1各个模块之间的调用关系 ................................................. 8 3 详细设计 .............................................. 9 3.1 管理员模块 ................................................................................ 9 3.2 用户查询模块 ............................................................................ 10 3.3 函数调用关系图 ........................................................................ 10 4 测试与分析 ............................................ 12 4.1合法数据的测试 ......................................................................... 12 4.1.1 测试截图 .......................................................................... 12 4.2 非法数据的测试 ........................................................................ 17 五.总结 ................................................ 18 参考文献 ................................................ 21 附录 .................................................... 21

2

全国交通咨询系统

1 需求分析

1.1 问题描述

随着我国交通系统的发展,从一个城市到另一个城市可以选择多个交通工具,比如火车,飞机。不同的交通工具的价格,所用的时间也不一样。

对旅客来说,可以根据自己的时间安排,资金的情况选择不能的交通工具和不同的乘车路线。本系统就是主要完成这个的功能,旅客在出发前可以根据出发地和到达地查询不同的路线,旅客可以有三个决策方案,第一个是时间最短,第二个是费用最小,第三个是中转次数最少。

对管理员来说,可以对城市进行增加,可以对列车时刻表和飞机航班表的信息进行的增加。

1.2 基本要求

① 输入的形式和输入值的范围

在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。

② 输出的形式

程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

③ 程序所能达到的功能

(1)管理员可以细化为对城市信息的管理,对列车时刻表的管理,对飞机航班表的信息的管理,初始化交通图;

3

(2)用户可以查询两个城市之间的航班和车次。用户只需要选择起始城市和目的城市,就可以选择时间最短、费用最少和中转次数最少的方案; (3)用户可以按照自己的需求选择乘坐飞机和火车。 (4)退出系统。

2 概要设计

2.1数据结构

(1)本程序运用了关于图这种数据结构。图的存储结构采用邻接表的结

构抽象数据类型定义。

typedef struct {int number; float expenditure; int begintime[2]; int arrivetime[2]; }Vehide; typedef struct

{Vehide stata[MAX_ROUTE_NUM]; int last; }infolist;

typedef struct ArcNode {int adjvex;

struct ArcNode *nextarc;

4

infolist info; }ArcNode;

typedef struct VNode {char cityname[10];

ArcNode *planefirstarc,*trainfirstarc; }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct {AdjList vertices;

int vexnum,planearcnum,trainarcnum; }ALGraph; typedef struct Node {int adjvex; int route; struct Node *next; }Node;

typedef struct QNode {int adjvex; struct QNode *next; }QNode; typedef struct {QNode *front; QNode *rear;

5

Main()

createcityfile createplanefile initgraph createtrainfile CreateGraph cityedit Administer EnterVertex flightedit EnterplaneArc trainedit EntertrainArc ExpenditureDispose MinExpenditure MinTime UserDemand TimeDispose TimeTreeDispose InitQueue TransferDispose EnterQueue DeleteQueue 图2

11

TimeTreeDispose InitQueue EnterQueue DeleteQueue CreateTimeTree CopyTimeTree

VisitTimeTree DestoryTimeTree 4 测试与分析

4.1合法数据的测试

4.1.1 测试截图

图3

(1)输入菜单号“1”,进入管理员模块。

12

图4

(2)输入菜单号“1”,初始化交通系统。选择“1”进行键盘录入,选择“2”直接导入录好的图。

图5

选择”2”城市编辑,可以添加城市:

图6

13

可在用户咨询界面查询到添加的城市:

图7

选择”3”可以添加航班信息:

图8

在用户咨询页面可以查询到:

图9

14

图10

(3)输入菜单号“2”,进入用户咨询界面

图11

(4) 输入“1”,选择最少费用的方案。

图12

图13

15

(5) 输入“1”,选择乘坐列车。

图14

(6) 在用户咨询界面输入“2”,按上述操作,则可以咨询最少旅行时间的方案。

图15

(7)在用户界面输入“3”,按上述操作,可以查询最少转车次数的方案。

图16

(8)若在选择交通工具界面选择“2”,飞机,则可以选择最少花费,最省时和最少中转次数的乘坐飞机的方案。

图17

图18

16

图19

4.2 非法数据的测试

4.2.1 在主菜单中输入错误号码后,系统自动跳转到主菜单,继续让用户输入。

图20

4.1.2 选择用户咨询界面后,选择没有的城市,系统会让用户重新入。

17

图21

4.1.3 在输入航班信息有误的时候会出现提示。

图22

五.总结

周桂华:

⑴ 调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:

18

在调试的过程中碰到了一下问题: a. 引用形参应用不当;

b. 文件操作中遇到读入错误或找不到文件; 解决方案:

a. 对引用形参了解的不是很透彻,导致错误,通过查阅相关书籍如《C++ Primer》和请教编程能力较高的人,最终解决问题。

b. 通过参考谭浩强编著的《C程序设计》中的文件操作,文件格式和相关文件路径的设置,最终解决问题。

⑵ 算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想: ⑶ 经验和体会:

通过本次课程设计,我学到了一种程序设计方法,就是结构化程序设计方法,在程序设计过程中,我尝试按如下方法进行结构化程序设计:(1)自顶向下;(2)逐步细化;(3)模块化设计(4)结构化编码。这种设计方法的过程是将问题求解由抽象逐步具体化的过程,而且,用这种方法便于验证算法的正确性。 本次课程设计所使用的是较为复杂的抽象数据类型——图,而且在弧的基础上增加了许多信息,如添加了时间,费用等等,这无疑给编程加大了难度,同时也是相当的具有挑战性。

在编程的过程中,我用到了全局数组,我将数组放在工程的头文件里面,编译的时候报错,说是多重定义。最终放弃了创建工程,而选择了单个文件进行编译和运行,结果顺利通过。

同时,在文件操作方面我也曾遇到问题,就是在程序对文件进行读取的时候报错,无法读取文件,最后查询有关C的工具书,原来是文件路径问题,借助工具书最终解决了文件操作方面的问题。

总之,这次课程设计是对这一个学期以来对数据结构学习成果的一个验证,同时也是理论与实践很好的结合,既对学过的数据结构进行了巩固,也对我的编程能力奠定了坚实的基础。

通过本次的实验,了解了自己比较薄弱的环节,对图的应用不够灵活,以后需要加强图这种抽象数据类型的应用。

19

史佳:

这次实验我负责的是管理员界面的城市编辑、航班编辑和列车编辑,就是实现的增加城市、增加航班、增加列次的功能。还有用户查询界面的最小转乘函数中的空队列的建立,元素入队、出队的功能。

刚看到系统名字的时候认为系统很简单,就是把所有的城市之间的航线和列次建立为图,利用图的最小路径就可以实现最少花费、最少时间和最少换乘次数。在需求分析阶段,我们很容易的判断出来系统所需要的功能,但在概念设计阶段和详细设计阶段我们遇到了很多问题。比如如何利用函数实现图的广度优先遍历,怎样用树计算出最少的旅途时间,在这些问题上我们遇到了很多困难。老师在课堂上只是简单的讲解了图,书上也没有详细的代码,我们只好从网上翻阅各种资料,但网上的代码会有很多错误,需要大量的时间理解和修改代码。

在创建文件上我们也遇到了很多问题,大量的数据给文件的录入增加了难度,一个很小的差错就能导致半个小时的录入付诸东流。

这两周课程设计虽然花费了我们很多时间,但我对队列、图和图的应用都有了更深的理解,对函数调用也更加的熟练,在对代码的理解和编写时,我们不停的翻阅课本和网络,自己C语言的编程能力也有了很大提高。不停的修改界面而是系统更加美观也锻炼了我的审美能力。这次做系统在考察了我对知识的掌握的同时,也让我学到了很多知识,长时间的专注于程序使我的专注能力也有所提高,希望通过以后的学习,会对数据结构有更好的掌握。

王小飞:

本次课程设计,我们小组的题目是全国交通咨询系统,在本系统中,我负责的模块是,创建系统所需要的几个重要文件,有创建城市文件、航班文件、列车文件,创建时间树,以及最少中转次数中的广度优先遍历。

在编写自己所负责模块的代码时,遇到了很多是问题和困难,比如函数之间的相互调用,经常会出现问题,在做系统中中最少转次数的广度优先遍历时,对其算法了解的不够透彻,还有自己对文件的操作也没有很熟练的掌握,经常需要翻书以及请教同学,去查找一些基本的语法。这都是因为自己数据结构的基础知识欠缺,学的不够扎实,以及平时的编程练习太少,代码输入不熟练,眼高手低的结果。

20

通过这两周的课程设计,自己不仅巩固了之前所学的理论知识,并且在此基础上,对数据结构的特点以及算法, 有了更深入的了解。另外这两周的课程设计,培养了自己灵活运用所学到的知识及技能来分析、解决实际问题的能力,使自己体会到把理论知识和实践相结合的重要性。

总之,两周的课程设计使自己获益匪浅,虽然为此花费了很多的时间和精力,但是却让自己深刻认识到了自己在学习方面的不足之处。经过本次课程设计,自己不仅学到了很多的知识和技能,更重要的是学会了如何运用所学知识去解决实际问题,为自己以后的学习和工作奠定了基础。

参考文献

【1】C语言程序设计/谭浩强著.-4版.-北京:清华大学出版社,2010.6 【2】数据结构:C语言版/严蔚敏,吴伟民编著.-北京:清华大学出版社,2007 【3】网上相关资料

附录

#define MAX_VERTEX_NUM 18 #define NULL 0

#define MAX_ARC_SIZE 100 #define MAX_ROUTE_NUM 5 #include #include #include #include #define False 0 #define True 1

#define INFINITY 10000 typedef struct

21

{

int number; float expenditure;

int begintime[2]; int arrivetime[2]; }Vehide;

typedef struct {

Vehide stata[MAX_ROUTE_NUM];

int last; }infolist;

typedef struct ArcNode {

int adjvex;

struct ArcNode *nextarc;

infolist info; }ArcNode;

typedef struct VNode {

char cityname[10];

ArcNode *planefirstarc,*trainfirstarc;

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct {

AdjList vertices;

22

int vexnum,planearcnum,trainarcnum;

}ALGraph;

typedef struct Node {

int adjvex;

int route; struct Node *next; }Node;

typedef struct QNode {

int adjvex;

struct QNode *next; }QNode;

typedef struct {

QNode *front;

QNode *rear; }LinkQueue;

typedef struct TimeNode {

int adjvex;

int route; int begintime[2]; int arrivetime[2];

struct TimeNode *child[MAX_ROUTE_NUM]; }TimeNode,*TimeTree;

23

struct arc {

int co;

char vt[10]; char vh[10]; int bt[2]; int at[2]; float mo; }a[MAX_ARC_SIZE];

char city[MAX_VERTEX_NUM][10]; int TTime[2]; int time[2]; int time1[2]; int time2[2];

int c[MAX_VERTEX_NUM]; int d[MAX_VERTEX_NUM]; /******函数声明*******/ void Administer(ALGraph *G); void cityedit(ALGraph *G);

void CopyTimeTree(TimeTree p,TimeTree q); void createcityfile();

void CreateGraph(ALGraph *G); void createplanefile(); void

CreateTimeTree(TimeTree

p,int

(*arcs)[MAX_VERTEX_NUM]); void createtrainfile();

void DeleteQueue(LinkQueue *Q,int *x); void DemandDispose(int n,ALGraph G); void DestoryTimeTree(TimeTree p); void EnterplaneArc(ALGraph *G);

24

i,int

j,LinkQueue

*Q,infolist

void EnterQueue(LinkQueue *Q,int x); void EntertrainArc(ALGraph *G); void EnterVertex(ALGraph *G);

void ExpenditureDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,float *M,int *final); void flightedit(ALGraph *G); void initgraph(ALGraph *G); void InitQueue(LinkQueue *Q); int IsEmpty(LinkQueue *Q);

int LocateVertex(ALGraph *G,char *v);

void MinExpenditure(infolist arcs,float *expenditure,int *route); void MinTime(infolist arcs,int *time,int *route); void PrintGraph(ALGraph *G); int save(ALGraph *G);

void TimeDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,int (*T)[2],int *final);

void TimeTreeDispose(Node *head,infolist (*arcs)[MAX_VERTEX_NUM]); void trainedit(ALGraph *G);

void TransferDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1);

void UserDemand(ALGraph G); void VisitTimeTree(TimeTree p);

void quitSystem() {

printf(\ $$$$$$$$$$欢迎再次使用

$$$$$$$$$\\n\ }

void main() {

25

exit(0);

ALGraph G; int i; while(i!=3) {

system(\

printf(\ 请选择程序功

能:\\n\

printf(\

*************************************\\n\

printf(\ ** 1=管理员管理

**\\n\

printf(\ ** 2=用户咨询

**\\n\

printf(\ ** 3=退出

**\\n\

printf(\

*************************************\\n\ }

26

printf(\ 选择?\scanf(\getchar();

switch(i) {

case 1:Administer(&G);

break;

case 2:UserDemand(G);

break;

case 3:quitSystem();break; }

}

//管理人员菜单

void Administer(ALGraph *G) {

int i; system(\

printf(\ 请选择管理项

目:\\n\

printf(\

*************************************\\n\

printf(\ ** **\\n\

printf(\ ** **\\n\

printf(\ ** **\\n\

printf(\ ** **\\n\

printf(\ ** **\\n\

printf(\

*************************************\\n\

printf(\ scanf(\ getchar(); switch(i) {

case 1:initgraph(G);

break;

case 2:cityedit(G);

27

1=初始化交通系统 2=城市编辑 3=飞机航班编辑 4=列车车次编辑 5=返回上一级菜单选择?\ break;

case 3:flightedit(G); break;

case 4:trainedit(G); break; }

}

//创建图的方式

void initgraph(ALGraph *G) {

int i; system(\

printf(\ 式:\\n\

printf(\

**************************************\\n\

printf(\ ** **\\n\

printf(\ ** **\\n\

printf(\

**************************************\\n\

printf(\ scanf(\ getchar(); switch(i)

{

28

请选择初始化方 1=键盘 2=文档选择?\ case 1:createcityfile();

createplanefile(); createtrainfile(); CreateGraph(G); break;

case 2:CreateGraph(G);

break; }

//创建城市文件 void createcityfile() {

int i=0; }

int j; char flag='y'; FILE *fp;

printf(\请输入城市名称的信息:\\n\ while(flag=='y'||flag=='Y')

{

printf(\城市名称:\gets(city[i]); i++;

printf(\继续输入?(Y/N)\scanf(\

getchar();

}

printf(\

if((fp=fopen(\

{

29

}

printf(\无法打开文件!\\n\return;

for(j=0;j

fprintf(fp,\

fclose(fp); }

//创建飞机航班文件 void createplanefile() {

int code,bt[2],at[2];

float money; int i; int count;

char vt[10],vh[10],flag; FILE *fp; flag='y'; count=0;

while(flag=='Y'||flag=='y')

{

printf(\请输入飞机航班的信息:\\n\ printf(\飞机航班编号:\ scanf(\

getchar();

printf(\起始城市:\ gets(vt);

printf(\目的城市:\ gets(vh);

30

printf(\起飞时间:\ scanf(\ getchar();

while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) {

printf(\时间输入有误,请重新输入\\n\

scanf(\ getchar();

}

printf(\到达时间:\

scanf(\ getchar();

while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60)

{

printf(\时间输入有误,请重新输入\\n\

scanf(\ getchar();

}

printf(\航班费用:\

scanf(\ getchar();

a[count].co=code;

strcpy(a[count].vt,vt); strcpy(a[count].vh,vh); a[count].bt[0]=bt[0]; a[count].bt[1]=bt[1]; a[count].at[0]=at[0]; a[count].at[1]=at[1]; a[count].mo=money; count++;

31

printf(\继续输入?(Y/N)\ scanf(\ getchar(); printf(\ }

//创建列车文件 void createtrainfile() {

int code,bt[2],at[2]; }

if((fp=fopen(\

printf(\无法打开文件!\\n\

fprintf(fp,\ for(i=0;i

if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)

printf(\文件写入错误!\\n\

fclose(fp);

float money; int i; int count;

char vt[10],vh[10],flag; FILE *fp; flag='y'; count=0;

while(flag=='y'||flag=='Y')

{

printf(\请输入列车车次的信息:\\n\

printf(\列车车次编号:\ scanf(\

32

getchar();

printf(\起始城市:\ gets(vt);

printf(\目的城市:\ gets(vh);

printf(\车次费用:\ scanf(\ getchar();

printf(\发车时间:\

scanf(\ getchar();

while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60)

{

printf(\时间输入有误,请重新输入\\n\

scanf(\ getchar();

}

printf(\到达时间:\

scanf(\ getchar();

while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60)

{

printf(\时间输入有误,请重新输入\\n\

scanf(\ getchar();

}

a[count].co=code;

strcpy(a[count].vt,vt); strcpy(a[count].vh,vh); a[count].bt[0]=bt[0];

33

a[count].bt[1]=bt[1]; a[count].at[0]=at[0]; a[count].at[1]=at[1]; a[count].mo=money; count++;

printf(\继续输入?(Y/N)\ scanf(\ getchar(); printf(\

}

if((fp=fopen(\

printf(\无法打开文件!\\n\ fprintf(fp,\ for(i=0;i

//找到v在图的位置

int LocateVertex(ALGraph *G,char *v) {

int j,k;

if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)

printf(\文件写入错误!\\n\

fclose(fp);

j=-1;

for(k=0;kvexnum;k++)

if(strcmp(G->vertices[k].cityname,v)==0)

{

j=k;

break;

}

34

}

return(j);

//创建图

void CreateGraph(ALGraph *G) {

int i,j,k;

int arc_num; int count1,count2; int m,t; ArcNode *p,*q; FILE *fp; i=0;

if((fp=fopen(\

{

printf(\无法打开文件!\\n\

return;

}

while(!feof(fp)) {

fscanf(fp,\

i++;

}

fclose(fp);

j=0; while(j

{

strcpy(G->vertices[j].cityname,city[j]);

G->vertices[j].planefirstarc=NULL; G->vertices[j].trainfirstarc=NULL; j++;

35

}

G->vexnum=i;

if((fp=fopen(\

printf(\无法打开文件!\\n\

k=0;

fscanf(fp,\ while(k

{

if(fread(&a[k],sizeof(struct arc),1,fp)!=1)

printf(\文件读入错误!\\n\

k++;

}

fclose(fp);

k=0; arc_num=0;

while(k

i=LocateVertex(G,a[k].vt);

j=LocateVertex(G,a[k].vh); q=G->vertices[i].planefirstarc; m=0;

while(q!=NULL) {

if(q->adjvex==j) {

t=q->info.last+1;

q->info.stata[t].number=a[k].co; q->info.stata[t].expenditure=a[k].mo; q->info.stata[t].begintime[0]=a[k].bt[0]; q->info.stata[t].begintime[1]=a[k].bt[1];

36

q->info.stata[t].arrivetime[0]=a[k].at[0]; q->info.stata[t].arrivetime[1]=a[k].at[1]; q->info.last=t; m=1; break;

} if(m==0) {

p=(ArcNode*)malloc(sizeof(ArcNode)); }

q=q->nextarc;

p->adjvex=j;

p->info.stata[0].number=a[k].co; p->info.stata[0].expenditure=a[k].mo; p->info.stata[0].begintime[0]=a[k].bt[0]; p->info.stata[0].begintime[1]=a[k].bt[1]; p->info.stata[0].arrivetime[0]=a[k].at[0]; p->info.stata[0].arrivetime[1]=a[k].at[1]; p->info.last=0;

p->nextarc=G->vertices[i].planefirstarc; G->vertices[i].planefirstarc=p; arc_num++;

}

G->planearcnum=arc_num;

} k++;

if((fp=fopen(\

{

printf(\无法打开文件!\\n\

37

return;

} k=0;

fscanf(fp,\ while(k

{

if(fread(&a[k],sizeof(struct arc),1,fp)!=1)

printf(\文件读入错误!\\n\

k++;

}

fclose(fp);

k=0; arc_num=0; while(k

{

i=LocateVertex(G,a[k].vt);

j=LocateVertex(G,a[k].vh); q=G->vertices[i].trainfirstarc; m=0;

while(q!=NULL)

{

if(q->adjvex==j) {

t=q->info.last+1;

q->info.stata[t].number=a[k].co; q->info.stata[t].expenditure=a[k].mo; q->info.stata[t].begintime[0]=a[k].bt[0]; q->info.stata[t].begintime[1]=a[k].bt[1]; q->info.stata[t].arrivetime[0]=a[k].at[0]; q->info.stata[t].arrivetime[1]=a[k].at[1]; q->info.last=t;

38

m=1; break;

} if(m==0) {

p=(ArcNode*)malloc(sizeof(ArcNode)); }

q=q->nextarc;

p->adjvex=j;

p->info.stata[0].number=a[k].co; p->info.stata[0].expenditure=a[k].mo; p->info.stata[0].begintime[0]=a[k].bt[0]; p->info.stata[0].begintime[1]=a[k].bt[1]; p->info.stata[0].arrivetime[0]=a[k].at[0]; p->info.stata[0].arrivetime[1]=a[k].at[1]; p->info.last=0;

p->nextarc=G->vertices[i].trainfirstarc; G->vertices[i].trainfirstarc=p; arc_num++; } //保存图

int save(ALGraph *G) {

int i,j,k,t; }

G->trainarcnum=arc_num;

} k++;

ArcNode *q; FILE *fp;

39

j=0;

while(jvexnum)

{

strcpy(city[j],G->vertices[j].cityname);

j++;

} i=0;

if((fp=fopen(\

printf(\错误,无法打开文件!\\n\

while(ivexnum) {

fprintf(fp,\

i++;

} fclose(fp);

k=0;

for(i=0;ivexnum;i++)

{

q=G->vertices[i].planefirstarc;

while(q!=NULL)

{

for(t=0;t<=q->info.last;t++) {

strcpy(a[k].vt,G->vertices[i].cityname);

strcpy(a[k].vh,G->vertices[q->adjvex].cityname); a[k].co=q->info.stata[t].number; a[k].mo=q->info.stata[t].expenditure; a[k].bt[0]=q->info.stata[t].begintime[0]; a[k].bt[1]=q->info.stata[t].begintime[1]; a[k].at[0]=q->info.stata[t].arrivetime[0];

40

a[k].at[1]=q->info.stata[t].arrivetime[1]; k++;

}

if((fp=fopen(\{

printf(\无法打开文件!\\n\ }

}

q=q->nextarc;

return 0;

} i=0;

fprintf(fp,\ while(i

{ } fclose(fp);

if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)

printf(\文件写入错误!\\n\

i++;

k=0;

for(i=0;ivexnum;i++)

{

q=G->vertices[i].trainfirstarc; while(q!=NULL) {

for(t=0;t<=q->info.last;t++) {

strcpy(a[k].vt,G->vertices[i].cityname);

41

strcpy(a[k].vh,G->vertices[q->adjvex].cityname);

a[k].co=q->info.stata[t].number; a[k].mo=q->info.stata[t].expenditure; a[k].bt[0]=q->info.stata[t].begintime[0]; a[k].bt[1]=q->info.stata[t].begintime[1]; a[k].at[0]=q->info.stata[t].arrivetime[0]; a[k].at[1]=q->info.stata[t].arrivetime[1]; k++;

}

if((fp=fopen(\{ } i=0;

printf(\无法打开文件!\\n\return 0; }

}

q=q->nextarc;

fprintf(fp,\ while(i

{ }

fclose(fp);

if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)

printf(\文件写入错误!\\n\

i++;

return 1; }

void cityedit(ALGraph *G)

42

{

int i;

printf(\请选择城市编辑项目:\\n\printf(\

*************************************\

printf(\ 1=增加城市\\n\ printf(\选择?\ scanf(\ getchar(); if(i==1) }

void EnterVertex(ALGraph *G) {

char v[10],c;

EnterVertex(G);

int i;

printf(\请输入新增城市的名称:\ gets(v);

i=LocateVertex(G,v); if(i>=0&&ivexnum)

{

printf(\错误!此城市已存在\\n\

return;

} else {

43

printf(\确认?(Y/N)\

c=getchar(); getchar(); if(c=='Y'||c=='y') {

i=G->vexnum;

strcpy(G->vertices[i].cityname,v); G->vertices[i].planefirstarc=NULL; G->vertices[i].trainfirstarc=NULL; G->vexnum=i+1; save(G); } else

return;

}

}

void flightedit(ALGraph *G) {

int i; printf(\请选择飞机航班编辑项目:\\n\

printf(\

*************************************\

printf(\ 增航班\\n\ printf(\选择?\ scanf(\ getchar(); if(i==1)

EnterplaneArc(G);

44

新 1= }

void trainedit(ALGraph *G) {

int i;

printf(\请选择列车车次编辑项目:\\n\

printf(\

*************************************\

printf(\ 车次\\n\

printf(\选择?\ scanf(\ getchar(); if(i==1)

EntertrainArc(G);

}

void EnterplaneArc(ALGraph *G) {

int i,j,bt[2],at[2]; int code; float money; int m,t;

char vt[10],vh[10],c; ArcNode *p,*q;

printf(\请输入新增飞机航班的信息:\\n\ printf(\飞机航班编号:\ scanf(\ getchar();

45

新增 1=

本文来源:https://www.bwwdw.com/article/ng0v.html

Top