#include "comment.h"
int message::tokstr(char* dis,char **str)
{
int i = 0;
char* temp = NULL;
temp = *str;
while(**str != '@')
{
i ++;
*str = *str + 1;
}
memcpy(dis,temp,i);
*str = *str + 1;
return 0;
}
int message::decode(char *msg_str)
{
int cmd,i;
char cmd_str[5];
char start_str[50];
char end_str[50];
char way_str[5];
char choose_str[5];
char cityname[20];
char trainid_str[10];
char starttime[10];
char endtime[10];
char money[10];
char cityp_str[5];
char cityid_str[5];
char strc[50];
char user_str[50];
char password_str[50];
char *strtemp;
memset(cmd_str,'\0',5);
strcpy(strc,msg_str);
strtemp = strc;
tokstr(cmd_str,&strtemp);
cmd = atoi(cmd_str);
this->peple = cmd;
switch(cmd)
{
case USER:
memset(start_str,0,50);
tokstr(start_str,&strtemp);
for ( i = 0 ; i < City.shownum();i ++)
{
if (strcmp(start_str,City.ShowCityInfo(i).GetName().c_str()) == 0)
break;
}
this->require.start = i;
memset(end_str,0,50);
tokstr(end_str,&strtemp);
for ( i = 0 ; i < City.shownum();i ++)
{
if (strcmp(end_str,City.ShowCityInfo(i).GetName().c_str()) == 0)
break;
}
this->require.end = i;
memset(way_str,0,5);
tokstr(way_str,&strtemp);
this->require.way = atoi(way_str);
memset(choose_str,0,5);
tokstr(choose_str,&strtemp);
this->require.choose = atoi(choose_str);
return 0;
case MANAGE:
memset(cmd_str,'\0',5);
tokstr(cmd_str,&strtemp);
cmd = atoi(cmd_str);
this->cmd = cmd;
switch(cmd)
{
case LOGIN:
memset(user_str,'\0',50);
memset(password_str,'\0',50);
tokstr(user_str,&strtemp);
tokstr(password_str,&strtemp);
strcpy(loginuser.name,user_str);
strcpy(loginuser.password,password_str);
return 0;
case ADDCITY:
memset(cityname,'\0',20);
tokstr(cityname,&strtemp);
this->city_.SetName(cityname);
memset(cityp_str,'\0',5);
tokstr(cityp_str,&strtemp);
this->city_.SetCityP(atoi(cityp_str));
memset(cityid_str,'\0',5);
tokstr(cityid_str,&strtemp);
this->city_.SetID(atoi(cityid_str));
return 0;
case LOOKCITY:
memset(cityid_str,'\0',5);
tokstr(cityid_str,&strtemp);
this->city_.SetID(atoi(cityid_str));
return 0;
case DELETECITY:
memset(cityid_str,'\0',5);
tokstr(cityid_str,&strtemp);
this->city_.SetID(atoi(cityid_str));
return 0;
case ADDTRAIN:
this->traffic_ = new TrainInfo;
memset(trainid_str,'\0',5);
tokstr(trainid_str,&strtemp);
this->traffic_->ID= atoi(trainid_str);
memset(start_str,0,5);
tokstr(start_str,&strtemp);;
this->traffic_->Start = atoi(start_str);
memset(end_str,0,5);
tokstr(end_str,&strtemp);
this->traffic_->End = atoi(end_str);
memset(starttime,0,10);
tokstr(starttime,&strtemp);
this->traffic_->StartTime = atoi(starttime);
memset(endtime,0,10);
tokstr(endtime,&strtemp);
this->traffic_->EndTime = atoi(endtime);
memset(money,0,10);
tokstr(money,&strtemp);
this->traffic_->Money = atoi(money);
return 0;
case LOOKTRAIN:
this->traffic_ = new TrainInfo;
memset(trainid_str,'\0',5);
tokstr(trainid_str,&strtemp);
this->traffic_->ID = atoi(trainid_str);
return 0;
case DELETETRAIN:
this->traffic_ = new TrainInfo;
memset(trainid_str,'\0',5);
tokstr(trainid_str,&strtemp);
this->traffic_->ID = atoi(trainid_str);
return 0;
case ADDBUS:
this->traffic_ = new BusInfo;
memset(trainid_str,'\0',5);
tokstr(trainid_str,&strtemp);
this->traffic_->ID= atoi(trainid_str);
memset(start_str,0,5);
tokstr(start_str,&strtemp);;
this->traffic_->Start = atoi(start_str);
memset(end_str,0,5);
tokstr(end_str,&strtemp);
this->traffic_->End = atoi(end_str);
memset(starttime,0,10);
tokstr(starttime,&strtemp);
this->traffic_->StartTime = atoi(starttime);
memset(endtime,0,10);
tokstr(endtime,&strtemp);
this->traffic_->EndTime = atoi(endtime);
memset(money,0,10);
tokstr(money,&strtemp);
this->traffic_->Money = atoi(money);
return 0;
case LOOKBUS:
this->traffic_ = new BusInfo;
memset(trainid_str,'\0',5);
tokstr(trainid_str,&strtemp);
this->traffic_->ID = atoi(trainid_str);
return 0;
case DELETEBUS:
this->traffic_ = new BusInfo;
memset(trainid_str,'\0',5);
tokstr(trainid_str,&strtemp);
this->traffic_->ID = atoi(trainid_str);
return 0;
case LOGOFF:
memset(user_str,'\0',50);
tokstr(user_str,&strtemp);
strcpy(loginuser.name,user_str);
return 0;
default:
cout <<"no cmd"<< endl;
return -2;
}
default:
cout <<"no this user"<< endl;
return -1;
}
}
int message::encode()
{
char temp[100];
string txt1,txt2;
switch(this->peple)
{
case USER:
strcpy(buffer,this->res_.best);
if (this->require.choose == MONEY)
{
sprintf(temp,"all money is %d\n",this->res_.money);
}
else
{
sprintf(temp,"all time is %d\n",this->res_.time);
}
strcat(buffer,temp);
return 0;
case MANAGE:
if (flag == 1)
{
strcat(buffer," 操作OK\n");
return 0;
}
else if(flag == 2)
{
strcat(buffer,"操作NO\n");
return 0;
}
else
{
switch(cmd)
{
memset(buffer,0,sizeof(buffer));
case LOOKCITY:
if(city_.GetCityP() == 1)
txt1 = "市";
else
txt1 = "县";
sprintf(buffer,"城市名:%s\n级别:%s\n城市编号:%d",city_.GetName().c_str(),txt1.c_str(),city_.GetID());
return 0;
case LOOKTRAIN:
txt1.clear();
txt1 = City.ShowCityInfo(traffic_->Start).GetName();
txt2 = City.ShowCityInfo(traffic_->End).GetName();
sprintf(buffer,"编号:%d\n起点站:%s\n终点站:%s\n发车时间:%d\n到站时间:%d\n票价:%d",traffic_->ID,txt1.c_str(),txt2.c_str(),traffic_->StartTime,traffic_->EndTime,traffic_->Money);
return 0;
case LOOKBUS:
txt1.clear();
txt2.clear();
txt1 = City.ShowCityInfo(traffic_->Start).GetName();
txt2 = City.ShowCityInfo(traffic_->End).GetName();
sprintf(buffer,"编号:%d\n起点站:%s\n终点站:%s\n发车时间:%d\n到站时间:%d\n票价:%d",traffic_->ID,txt1.c_str(),txt2.c_str(),traffic_->StartTime,traffic_->EndTime,traffic_->Money);
return 0;
default:
return -1;
}
}
default:
return -1;
}
return -1;
}
int message::process()
{
int num = City.shownum();
int **mat;
TrafficInfo mytrain_;
int j,i,weight = MAX,u;
int k = 0;
int wait = 0;
mat = new int * [num];
for (i = 0;i <num; i++)
if ((mat[i] = new int [num]) == NULL)
return -1;
for (i = 0;i <num; i++)
for (j = 0;j < num ;j++)
mat[i][j] = MAX;
for (i = 0; i<num;i ++)
{
for (k = 0; k < Traffic.shownum(); k ++)
{
mytrain_ = Traffic.ShowTrafficInfo(k);
if (mytrain_.Start == i)
{
j = mytrain_.End;
switch(this->require.choose)
{
case MONEY:
weight = mytrain_.Money;
mat[i][j] = weight;
break;
case TIME:
weight = mytrain_.EndTime - mytrain_.StartTime;
mat[i][j] = weight;
break;
default:
break;
}
}
}
}
if (Dijkstra(mat) == -1)
return -1;
cout <<"pass "<<this->res_.best<<endl;
if (this->require.choose == MONEY)
cout <<"time "<<this->res_.money<<endl;
else
cout <<"cost"<<this->res_.time<<endl;
for (i = 0 ; i< num; i ++)
delete [] mat[i];
delete [] mat;
return 0;
}
int message::Dijkstra(int** mat)
{
int start,end,way,choose;
int num = City.shownum();
int *flag = new int [num];
int mindis,dis;
int i,j,u,k,m,s;
int *Distance = new int [num];
int *pass;
pass = new int [num];
for (i = 0;i <num; i++)
pass[i] = -1;
start = this->require.start;
end = this->require.end;
way = this->require.way;
choose = this->require.choose;
for (i = 0;i < num; i++)
{
Distance[i] = mat[start][i];
flag[i] = 0;
}
flag[start] = 1;
m = 0;
pass[m] = start;
m = 1;
for (i = 0
没有合适的资源?快使用搜索试试~ 我知道了~
一个简单的交通查询系统
共39个文件
h:17个
cpp:13个
ui:5个
3星 · 超过75%的资源 需积分: 10 15 下载量 81 浏览量
2011-07-10
18:00:49
上传
评论
收藏 437KB ZIP 举报
温馨提示
这个是我们的作业 我还是花了那个半周来些代码 有设计文档(虽然有可能里面有些东西和实际的不一样) 有测试报告 小弟求各位大神下载之后留个言 求教育 各种求
资源推荐
资源详情
资源评论
收起资源包目录
交通查询系统.zip (39个子文件)
交通查询系统
四川省交通查询系统@需求分析&设计文档.doc 312KB
客户端代码
管理员级
main.cpp 345B
c_city.h 730B
network.h 415B
manage.cpp 595B
ui_traffic.h 7KB
common.h 471B
widget.h 674B
c_city.ui 4KB
network.cpp 1003B
trainsmanage.pro 549B
manage.h 533B
widget.cpp 2KB
c_city.cpp 1KB
ui_widget.h 3KB
ui_manage.h 3KB
traffic.ui 6KB
traffic.cpp 2KB
traffic.h 958B
manage.ui 2KB
ui_c_city.h 5KB
widget.ui 2KB
用户级
trains.pro 323B
main.cpp 187B
mainwindow.h 1KB
common.h 245B
ui_mainwindow.h 6KB
mainwindow.cpp 2KB
mainwindow.ui 4KB
服务器代码
main.cpp 446B
comment.h 6KB
Tcp_Task.h 181B
fun.h 85B
comment.cpp 10KB
DataClass.h 563B
DataClass.cpp 5KB
fun.cpp 2KB
Tcp_Task.cpp 1KB
四川交通查询系统主要代码及测试.doc 472KB
共 39 条
- 1
资源评论
- vhrers_12013-01-28同求..不知道为什么我的运行不了..还是谢谢了 我是菜鸟 不会弄
zpl龙
- 粉丝: 3
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功