界面
#include
#include
#include
#include
#include"Analysis.h"
#include"Search.h"
#include"Sort.h"
#include"Update.h"
Road *road=(Road*)malloc(MAX*sizeof(Road));
int main()
{
system("color 30");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
while(1)
{
char a[2];
static int cout=1;
printf("\n请选择服务的种类:\n");
printf(" 1.文件读取.\n");
printf(" 2.文件排序.\n");
printf(" 3.文件检索.\n");
printf(" 4.文件更新.\n");
printf(" 0.退出.\n");
printf("请选择:");
scanf("%1s",a);
if(cout>1)
{
goto loop;
}
else
{
if(a[0]=='0')
{
return 0;
}
if(a[0]=='1')
{
cout+=1;
loop: switch(a[0])
{
case '1':
{
printf("文件读取中.....\n");
Analysis(road); //文件读取
printf("文件已转存到analysis.txt中!\n");
}break;
case '2':
{
Sort(road);//文件排序
}break;
case '3':
{
Search(road);//文件检索
}break;
case '4':
{
printf("文件更新中.....\n");
Update(road);//文件更新
printf("更新完成!\n");
}break;
case '0':
{
return 0;
}break;
default:
{
printf("您输入的为非法选项!请重新选择:\n");
}break;
}
}
else
{
printf("文件没有加载!请重新选择:\n");
}
}
fflush(stdin);
}
}
排序
void BubbleSort(Road *a, int n)
{
int i,j;
Road x;
for(i=1;iBigtoLittle32(a[j+1].LinkID))
{
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
}
}
}
void InsertSort(Road *a,int n)
{
int i,j;
Road temp;
for(i=1;i=0&&temp.LinkIDBigtoLittle32(temp.LinkID))
{
j--;
}
if(i1)
{
printf("排序已完成!时间为:%.5f秒!\n",(T2-T1)/1000);
}
else
{
T1=clock();
int s=0;
int t=MAX-1;
QuickSort(a,0,MAX-1);
T2=clock();
printf("排序完成.时间为:%.5f秒!\n",(T2-T1)/1000);
count++;
}
}break;
default:
{
printf("您输入的为非法选项!请重新选择:\n");
}break;
}
FILE *fp;
fp=fopen("sort.txt","w");
for(i=0;i>7),(BigtoLittle16(a[i].info)>>4)&7,BigtoLittle16(a[i].info)>>15,a[i].RoadName);
}
fflush(stdin);
fclose(fp);
fp=NULL;
}
return 0;
}
插入
int Search( Road *proad)
{
int n,i,flag=0,count=0;
int ret,m=0;
char filename[20];
FILE *fp;
Road *roadagain;
roadagain=(Road*)malloc(sizeof(Road)*MAX);
while(1)
{
printf("请选择检索方式:\n");
printf(" 1:指定LinkID检索\n");
printf(" 2:指定岔路数检索\n");
printf(" 3:指定道路名称检索\n");
printf(" 4:指定交叉Link列表示Class番号检索\n");
printf(" 0:返回\n");
printf("请选择:");
scanf("%d",&n);
if((n!=1)&&(n!=2)&&(n!=3)&&(n!=4)&&(n!=0))
{
printf("输入有误! 请重新选择\n");
printf("\n");
}
if(n==1)
{
unsigned int LinkID;
printf("请输入要查找的LinkID:");
scanf("%d",&LinkID);
for(i=0;i>7,(BigtoLittle32(proad[i].info)>>4)&7,BigtoLittle32(proad[i].info)&15,proad[i].RoadName);
break;
}
if(BigtoLittle32(proad[i].LinkID)!=LinkID)
{
flag=0;
}
}
if(flag==0)
{
printf("没有找到你所要检索的信息!\n");
}
}
if(n==2)
{
flag=0;
unsigned int RoadNode;
printf("请输入要查找的岔路数:");
scanf("%d",&RoadNode);
for(i=0;i>4)&7)==RoadNode)
{
flag=1;
count++;
roadagain[count-1].RecordSize=BigtoLittle16(proad[i].RecordSize);
roadagain[count-1].LinkID=BigtoLittle32(proad[i].LinkID);
roadagain[count-1].RoadFlag=BigtoLittle32(proad[i].info)>>7;
roadagain[count-1].RoadNode=(BigtoLittle32(proad[i].info)>>4)&7;
roadagain[count-1].LinkClass=BigtoLittle32(proad[i].info)&15;
strcpy(roadagain[count-1].RoadName,proad[i].RoadName);
}
}
if(flag==1)
{
printf("检索成功!\n");
if(count<=5)
{
for(i=0;i5)
{
printf("检中数目大于5(共%d条),将其转存到一个文本文件。\n",count);
printf("请输入该文本文件的名称:");
scanf("%s",filename);
printf("检索的信息已经成功输出到文本文件中,敬请查看。\n");
fp=fopen(filename,"w");
for(i=0;i>7;
roadagain[count-1].RoadNode=(BigtoLittle32(proad[i].info)>>4)&7;
roadagain[count-1].LinkClass=BigtoLittle32(proad[i].info)&15;
strcpy(roadagain[count-1].RoadName,proad[i].RoadName);
}
}
if(m==1)
{
printf("检索成功! \n");
if(count<=5)
{
for(i=0;i5)
{
printf("检中数目大于5(共%d条),将其转存到一个文本文件.\n",count);
printf("请输入该文本文件的名称:");
scanf("%s",filename);
printf("检索的信息已经成功输出到文本文件中,敬请查看!\n");
fp=fopen(filename,"w");
for(i=0;i>7;
roadagain[count-1].RoadNode=(BigtoLittle32(proad[i].info)>>4)&7;
roadagain[count-1].LinkClass=BigtoLittle32(proad[i].info)&15;
strcpy(roadagain[count-1].RoadName,proad[i].RoadName);
}
}
if(flag==1)
{
printf("检索成功!\n");
if(count<=5)
{
for(i=0;i5)
{
printf("检中数目大于5(共%d条),将其转存到一个文本文件。\n",count);
printf("请输入该文本文件的名称:");
scanf("%s",filename);
printf("检索的信息已经成功输出到文本文件中,敬请查看。\n");
fp=fopen(filename,"w");
for(i=0;i> 8) | (((uint16)(A) &
0x00ff) << 8))
#define BigtoLittle32(A) ((((uint32)(A) &
0xff000000) >>24) | (((uint32)(A)
& 0x00ff0000) >> 8) |
(((uint32)(A) & 0x0000ff00)
<< 8) | (((uint32)(A)
& 0x000000ff) <<
24))
typedef struct {
uint16 RecordSize; //道路信息大小
uint32 LinkID; //道路标号
uint16 RoadSize; //道路名称大小
uint16 RoadFlag; //道路标志位
uint32 RoadNode; //道路岔路数
uint16 LinkClass; //道路番号
uint32 info; //道路信息起始点情报
char RoadName[30]; //道路名称
}Road;
void Analysis(Road *road)
{
int i=0,zero=0;
uint32 temp=0;
memset(road,0,MAX*sizeof(Road));
FILE *fp,*fp1;
fp1=fopen("analysis.txt","w");
if((fp=fopen("GTBL.DAT","rb"))==NULL)
printf("源文件不存在!\n");
while(i>7);//道路标志位
fprintf(fp1," 道路岔路数:
]",(BigtoLittle16(road[i].info)>>4)&7);//道路岔路数
if((road[i].RecordSize-12)==0)
{
fprintf(fp1," 道路名称大小: ]",zero);
fprintf(fp1," 道路名称: 该道路无名称! \n");
}
else
{
fprintf(fp1," 道路名称大小:
]",BigtoLittle16(road[i].RoadSize));
fprintf(fp1," 道路名称:
%5s\n",&road[i].RoadName);
}
i++;
}
fclose(fp);
fclose(fp1);
fp=NULL;
fp1=NULL;
}
更新
void Update(Road *b)
{
FILE *fp2;
fp2=fopen("update.dat","w");
int i=0;
while(i