`
ldb2741
  • 浏览: 31825 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

数据结构课程设计(2)

阅读更多

void searchtime(Mgraph *mg)
{
char city1[20],city2[20];
int money;
int sum=0;
int time,zz=0; //zz为中转时间
int j=2,i,cha;
int k[max];
int num1,num2;
for(int aa=0;aa
k[aa]=0;


cout<<"请输入起点站和终点站:"<
cin>>city1>>city2;
for(int count=1;count<=mg->vexnum;count++)
{
if(strcmp(mg->vexs[count],city1)==0)
{
num1=count;
break;
}
}

for(count=1;count<=mg->vexnum;count++)
{
if(strcmp(mg->vexs[count],city2)==0)
{
num2=count;
break;
}
}


k[1]=num1;
for(count=1; mg->arcs[num1][num2].road[count]!=0; count++)
{
k[count+1]=mg->arcs[num1][num2].road[count];
}

k[++count]=num2;
cout<<"从"< <"到"<<city2<<"具体路径和时间为:"<<endl;

for(i=1;k[j]!=0;i++)
{
cout<vexs[k[i]]<<"至"<vexs[k[j]]<<": ";
mg->arcs[k[i]][k[j]].tstarttime.showvalue();
cout<<"-> ";
mg->arcs[k[i]][k[j]].tendtime.showvalue();
cha=distime(mg->arcs[k[i]][k[j]].tstarttime,mg->arcs[k[i]][k[j]].tendtime);
if(k[i-1]!=0)
{
zz=distime(mg->arcs[k[i-1]][k[i]].tendtime,mg->arcs[k[i]][k[j]].tstarttime);
cout<<" 中转时间为";
showtime(zz);
}

cout<<" 耗费时间 ";
showtime(cha+zz);
cout<
sum+=cha;
sum+=zz;
j++;
}

money=35.0/480*sum;
cout<<"路径长度为: "<arcs[num1][num2].length<
cout<<"耗费总时间为: ";
showtime(sum);
cout<<"耗费金额"<<MONEY<<"元!"<<ENDL;
cout<< FONT>

}

setup.cpp
#include
#include
#include "function.h"
using namespace std;

Mgraph *create()
{
int i,j,k,m,w;
int hour,minute;
char city1[20],city2[20];
Mgraph *mg;
mg = new Mgraph;
cout<<"输入城市个数:"<
cin>>mg->vexnum;

cout<<"输入城市边数:"<
cin>>mg->arcnum;
cin.ignore();
for(i=1;i<=mg->vexnum;i++)
{
cout<<"输入第"< <"个城市的名称:"<<endl;
mg->vexs[i]=new char [20];
cin>>mg->vexs[i];
cin.ignore();
}
for(i=1;i<=mg->vexnum;i++)
for(j=1;j<=mg->vexnum;j++)
{
if(i==j)
mg->arcs[i][j].weight=0;
else
mg->arcs[i][j].weight=lim_max;
}



cout< <"输入城市之间的距离(先输入两个城市的名称,再输入距离,再分别输入火车从第一个城市出发和到达第二个城市的时间,以空格分隔):"<<endl;
for(k=1;k<=mg->arcnum;k++)
{
cin>>city1>>city2;
cin>>w;
cin>>hour>>minute;
for(m=1;m<=mg->vexnum;m++)
if(strcmp(mg->vexs[m],city1)==0)
{
i=m;
break;
}
for(m=1;m<=mg->vexnum;m++)
if(strcmp(mg->vexs[m],city2)==0)
{
j=m;
break;
}
mg->arcs[i][j].weight=mg->arcs[j][i].weight=w;

mg->arcs[i][j].tstarttime.givevalue(hour,minute);
cin>>hour>>minute;
mg->arcs[i][j].tendtime.givevalue(hour,minute);


cout<<"输入"< <"到"<<city1<<"的火车出发及到达时间:"<<endl;
cin>>hour>>minute;
mg->arcs[j][i].tstarttime.givevalue(hour,minute);
cin>>hour>>minute;
mg->arcs[j][i].tendtime.givevalue(hour,minute);
}
return mg;
}

short.cpp
#include
#include
#include
#include "function.h"
using namespace std;

void floyd(Mgraph *mg)
{

char *s[max];
int i,j,k,p,a;
int num=1;
int count=1;
int length[max][max];
int path[max][max];
for(i=1;i<=mg->vexnum;i++)
for(j=1;j<=mg->vexnum;j++)
{
length[i][j]=mg->arcs[i][j].weight;
path[i][j]=0;

}

for(k=1;k<=mg->vexnum;k++) //最短路径算法
for(i=1;i<=mg->vexnum;i++)
for(j=1;j<=mg->vexnum;j++)
if(length[i][j]>length[i][k]+length[k][j])
{
length[i][j]=length[i][k]+length[k][j];
path[i][j]=k;

}

cout<<"最短路径矩阵为:"<
for(i=1;i<=mg->vexnum;i++)
{
for(j=1;j<=mg->vexnum;j++)
cout<<<LENGTH[I][J];
cout<
}


cout<<"最短路径具体为:"<
for(i=1;i<=mg->vexnum;i++)
for(j=1;j<=mg->vexnum;j++)
if(path[i][j])
{
s[count]=new char [20];
strcpy(s[count++],mg->vexs[j]);
p=path[i][j];
while(p)
{
s[count]=new char [20];
strcpy(s[count++],mg->vexs[p]);
p=path[i][p];
}
cout<vexs[i];

for(count=count-1;count;count--)
{
cout<<" --> "<
for(a=1;a<=mg->vexnum;a++)
if(strcmp(mg->vexs[a],s[count])==0)
{
mg->arcs[i][j].road[num++]=a; //保存路途经过的城市的顶点
break;
}
}
mg->arcs[i][j].road[--num]=0;
cout<<" 路径长度为 "<
mg->arcs[i][j].length=length[i][j];
count=1;
num=1;
cout<
}

else if(path[i][j]==0&&length[i][j]>0&&length[i][j]
{
cout<vexs[i]<<" --> "<vexs[j]<<" 路径长度为 "<<<ENDL;
mg->arcs[i][j].road[num]=0;
mg->arcs[i][j].length=length[i][j];
}

else if(i!=j)
cout<vexs[i]<<"到"<vexs[j]<<"之间没有路径!"<

}

user.cpp
#include
#include
#include
#include "function.h"
using namespace std;

int logo()
{

char u[20];
char p[20];
char c;
int count=0,i;
cout<<"请输入管理员帐号和密码:(限三次)"<
for(i=1;i<=3;i++)
{
cout<<"username:";
cin>>u;
cin.ignore();
cout<<"password:";
while((c=getch())!='\r') //屏幕上不显示
{//处理退格键
if(count && c=='\b')
count--;
if(c!='\b')
p[count++]=c;
}
p[count]='\0';
if(strcmp(u,"admin")==0&&strcmp(p,"taiyangshen")==0)
return 1;
else if(i<3)
{
count=0;
cout<<"ERORR! again!?<<endl;

}

}
return 0;
}


int logoclient()
{

char u[20];
char p[20];
char c;
int count=0,i;
cout<<"请输入用户名和密码:(限三次)"<
for(i=1;i<=3;i++)
{
cout<<"username:";
cin>>u;
cin.ignore();
cout<<"password:";
while((c=getch())!='\r') //屏幕上不显示
{//处理退格键
if(count && c=='\b')
count--;
if(c!='\b')
p[count++]=c;
}
p[count]='\0';
if(strcmp(u,"user")==0&&strcmp(p,"user")==0)
return 1;
else if(i<3)
{
count=0;
cout<<"ERORR! again!?<<endl;

}

}
return 0;
}

welcome.cpp
#include
#include //用于生成时间随机数
#include "function.h"
using namespace std;


void list()
{
cout<
cout<<" ************** 1 查询城市之间交通信息 ********************"<
cout<<" ************** 2 查询列车行驶时间 ********************"<
cout<<" ************** 3 查询最短路径信息 ********************"<
cout<
}



void picture()
{
double i=GetTickCount(); //定义在
int time;
time=(int )(i)%8+2; //生成随机数
if(time==2)
pic2();
else if(time==3)
pic3();
else if(time==4)
pic4();
else if(time==5)
pic5();
else if(time==6)
pic6();
else if(time==7)
pic7();
else if(time==8)
pic8();
else
pic9();
}
traffic.txt
c b 20 10 0 12 0 9 0 11 0
d c 30 12 30 14 40 13 0 15 0
e d 40 13 0 17 0 9 30 13 0
e a 50 8 0 13 30 7 0 14 0

注:void pic1()到void pic2()为自定义的图形界面函数。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics