Check.c

#include "macro.h"

static UINT4 count = 1;

void Show(RoadInfor *proadInfor)
{
 if(NULL == proadInfor->roadName)
 {
  printf("#linkid=%d;roadnameflag=%d;brunch=%d;dispclass=%d#/n",
   MC_GET_LONG(proadInfor->linkID),proadInfor->nodeInfor.flag,
   proadInfor->nodeInfor.brunch,proadInfor->nodeInfor.dispclass);
 }
 else
 {
  printf("#linkid=%d;roadnameflag=%d;brunch=%d;dispclass=%d;roadname=%s#/n",
   MC_GET_LONG(proadInfor->linkID),proadInfor->nodeInfor.flag,proadInfor->nodeInfor.brunch,
   proadInfor->nodeInfor.dispclass,proadInfor->roadName+4);
 }
 return;
}

//计算字符串长度
UINT4 StringLenth(const char* pch)
{
 UINT4 n = 0;
 while(*pch != '/0' && *pch != '/n')//fgets中输入的名称中也接收了回车/n,所以对于输入的数据只算到 /n 之前的长度
 {
  pch++;
  n++;
 }

 return n;
}

//比较两个字符串大小
UINT1 StringComepare(const char* pch1, const char* pch2)
{
 if(StringLenth(pch1) == StringLenth(pch2))
 {
  while(*pch1 != '/0')
  {
   if(*pch1 != *pch2)
   {
    break;
   }

   pch1++;
   pch2++;
  }
  return 0;
 }
 return 1;
}

//指定linkID检索,返回值中有负值,所以定义为int类型
int CheckLinkID(RoadInfor roadInfor[],UINT4 first,UINT4 last,UINT4 num,UINT4 linkID)
 {
 RoadInfor left = roadInfor[first],right = roadInfor[last-1],middle = roadInfor[last/2];
 if(linkID < MC_GET_LONG(roadInfor[0].linkID))
 {
  return -1;
 }
 if(linkID > MC_GET_LONG(roadInfor[num-1].linkID))
 {
  return -2;
 }

 if(linkID < MC_GET_LONG(left.linkID) || linkID > MC_GET_LONG(right.linkID))
 {
  printf("没有对应linkID为%d的记录!/n",linkID);
  printf("/n按键继续...");
  getch();
  if(linkID < MC_GET_LONG(left.linkID))
  {
   return first;
  }
  else
  {
   return last;
  }
 }
 if(MC_GET_LONG(left.linkID) == linkID)
 {
  Show(&left);
  printf("/n按键继续...");
  getch();
  return first;
 }
 if(MC_GET_LONG(right.linkID) == linkID)
 {
  Show(&right);
  printf("/n按键继续...");
  getch();
  return last;
 }
 if(MC_GET_LONG(middle.linkID) == linkID)
 {
  Show(&middle);
  printf("/n按键继续...");
  getch();
  return last/2;
 }

 if(linkID > MC_GET_LONG(left.linkID) && linkID < MC_GET_LONG(middle.linkID))
 {
  last = (first+last)/2;
  if((last-first)==1)
  {
   return last;
  }
  CheckLinkID(roadInfor,first,last,num,linkID);
 }
 if(linkID < MC_GET_LONG(right.linkID) && linkID > MC_GET_LONG(middle.linkID))
 {
  first = (first+last)/2;
  if((last-first)==1)
  {
   return last;
  }
  CheckLinkID(roadInfor,first,last,num,linkID);
 }
 }

//获取每次的text文件名称
void GetTxtPath(char* path, UINT4 count)
{
 UINT2 counter = count%1000;
 char ch[7]={0,0,0,'.','t','x','t'};
 ch[0] = (counter/100)%1 + '0';
 ch[1] = (counter/10)%10 + '0';
 ch[2] = counter%100 + '0';
 strncat(path,ch,7);
}

//将数据写入text文件
void WriteTxt(RoadInfor *proadInfor, UINT4 n, FILE *fp)
{
 UINT4 i = 0;
 UINT4 linkID = 0;//linkID的值
 while( i < n)
 {
  linkID = MC_GET_LONG(proadInfor->linkID);//计算linkID的值
  if(proadInfor->roadName!=NULL)//有道路名称则写入
  {
   fprintf(fp,"#linkid=%d;roadnameflag=%d;brunch=%d;dispclass=%d;roadname=%s#/n",
     linkID, proadInfor->nodeInfor.flag, proadInfor->nodeInfor.brunch,
     proadInfor->nodeInfor.dispclass,(proadInfor->roadName+4));//+4是为了去掉字符'1 = ',只显示道路名称
  }
  else//否则去掉该项
  {
   fprintf(fp,"#linkid=%d;roadnameflag=%d;brunch=%d;dispclass=%d#/n",
     linkID, proadInfor->nodeInfor.flag, proadInfor->nodeInfor.brunch,
     proadInfor->nodeInfor.dispclass);
  }
  proadInfor++;
  i++;
 }
 return;
}

//指定交叉Link列表示Class番号 检索
void CheckDispClass(RoadInfor roadInfor[], UINT4 num, UINT4 dispClass)
{
 UINT4 i = 0;
 UINT1 counter = 0;
 FILE *fp;
 RoadInfor localRoadInfor[6];
 char path[20] = "searchresult";

 while(i < num && counter < 6)
 {
  if(dispClass == roadInfor[i].nodeInfor.dispclass)
  {
   localRoadInfor[counter] = roadInfor[i];
   Show(&roadInfor[i]);
   counter++;
  }
  i++;
 }

 if(counter == 0)
 {
  printf("没有符合您输入条件的数据!/n");
 }

 //记录数大于5个时,写入文件
 if( counter > 5)
 {
  GetTxtPath(path,count);
  if(NULL==(fp=fopen(path,"w+")))
  {
   printf("打开文件失败!/n");
   return;
  }
  WriteTxt(localRoadInfor,6,fp);

  while(i < num)
  {
   if(dispClass == roadInfor[i].nodeInfor.dispclass)
   {
    Show(&roadInfor[i]);
    WriteTxt(&roadInfor[i],1,fp);
   }
   i++;
  }
  fclose(fp);
 }
 printf("/n按键继续...");
 getch();
 count++;
}

//指定查找岔路数 检索
void CheckBrunch(RoadInfor roadInfor[],UINT4 num,UINT4 brunch)
{
 UINT4 i = 0;
 UINT1 counter = 0;
 FILE *fp = NULL;
 RoadInfor localRoadInfor[6];
 char path[20] = "searchresult";

 while(i < num && counter < 6)
 {
  if(roadInfor[i].nodeInfor.brunch > brunch)
  {
   localRoadInfor[counter] = roadInfor[i];
   Show(&roadInfor[i]);
   counter++;
  }
  i++;
 }

 if(counter == 0)
 {
  printf("没有符合您输入条件的数据!/n");
 }

 if( counter > 5)
 {
  GetTxtPath(path, count);
  if(NULL==(fp=fopen(path,"w+")))
  {
   printf("文件打开失败!/n");
   return;
  }
  WriteTxt(localRoadInfor,6,fp);

  while(i < num)
  {
   if(roadInfor[i].nodeInfor.brunch > brunch)
   {
    Show(&roadInfor[i]);
    WriteTxt(&roadInfor[i],1,fp);
   }
   i++;
  }
  fclose(fp);
 }
 printf("/n按键继续...");
 getch();
 count++;
}

//指定道路名称 检索
void CheckRoadName(RoadInfor roadInfor[], UINT4 num, char roadName[40])
{
 UINT4 i = 0;
 UINT1 counter = 0;
 FILE *fp = NULL;
 RoadInfor localRoadInfor[6];
 char path[20] = "searchresult";

 while(i < num && counter < 6)
 {
  if(roadInfor[i].roadName!=NULL)
  {
   if(StringComepare((roadInfor[i].roadName+4),roadName) == 0)
   {
    localRoadInfor[counter] = roadInfor[i];
    Show(&roadInfor[i]);
    counter++;
   }
  }
  i++;
 }

 if(counter == 0)
 {
  printf("没有符合您输入条件的数据!/n");
 }

 if( counter > 5)
 {
  GetTxtPath(path,count);
  if(NULL==(fp=fopen(path,"w+")))
  {
   printf("文件打开失败!/n");
   return;
  }
  WriteTxt(localRoadInfor,6,fp);
  
  while(i < num)
  {
   if(roadInfor[i].roadName!=NULL)
   {
    if(strcmp(roadInfor[i].roadName,roadName) == 0)
    {
     Show(&roadInfor[i]);
     WriteTxt(&roadInfor[i],1,fp);
    }
   }
   i++;
  }
  fclose(fp);
 }
 printf("/n按键继续...");
 getch();
 count++;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值