要求:<a target=_blank href="http://download.csdn.net/download/nit_s/8382869">点击打开链接</a>
项目分析:<a target=_blank href="http://download.csdn.net/download/nit_s/8382875">点击打开链接</a>
源文件:<a target=_blank href="http://download.csdn.net/download/nit_s/8382859">http://download.csdn.net/download/nit_s/8382859</a>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef struct g_px
{
int pid, pcd, pbh, pflag, pcl, pfh;
char pmz[99];
} px;
px ppx[99999];
typedef struct g_f5
{
unsigned char fsx[99];
}ff;
ff sx[99999];
void start();
void ser_sort();
void readfile();
void paixu();
void qsort(px ppx[], int, int);
void check();
void F5();
void start()
{
printf("/***************---WELCOME---***************/\n");
printf("/*** ***/\n");
printf("/*** 电子地图信息统计系统 ***/\n");
printf("/*** 计科四班五组***/\n");
printf("/*** ***/\n");
printf("/*******************************************/\n");
}
void ser_sort()
{
printf("\n请选择服务的种类:\n");
printf("\t1.读取文件(E:\\GTBL.dat)\n\t2.排序\n\t3.检索\n\t4.更新\n\t0.退出\n\t请选择:");
char num[9999];
scanf("%s",num);
int l=strlen(num);
if(l==1)
{
if(num[0]=='1')
{
printf("读取文件...\n读取中...\n");
readfile();
ser_sort();
}
else if(num[0]=='2')
{
printf("Sort start...\n");
paixu();
ser_sort();
}
else if(num[0]=='3')
{
check();
ser_sort();
}
else if(num[0]=='4')
{
F5();
ser_sort();
}
else if(num[0]=='0')
{
printf("感谢您的使用!(按回车键结束)。\n");
getchar();
getchar();
}
else
{
printf("无此选项,请重新输入~\n");
ser_sort();
}
}
else
{
printf("无此选项,请重新输入~\n");
ser_sort();
}
}
void readfile()
{
FILE *fdat, *ftxt, *fpx;
if((fdat=fopen("e:\\GTBL.dat","rb"))==NULL)
{
printf("open GTBL.dat fail\n");
return;
}
if((ftxt=fopen("e:\\hah.txt","wt+"))==NULL)
{
printf("b&w hah.txt fail\n");
return;
}
if((fpx=fopen("e:\\paixu.txt","wt+"))==NULL)
{
printf("b&w paixu.txt fail\n");
return;
}
int i=0;
while(!feof(fdat))
{
i++;
unsigned char cd[2]= {0}, bh[4]= {0}, cc[2]= {0}, xx[4]= {0}, mz[99]= {0};
int ncd=0, nbh=0, ncc=0, nxx=0;
fread(&cd,2,1,fdat);
fread(&bh,4,1,fdat);
fread(&cc,2,1,fdat);
fread(&xx,4,1,fdat);
ncd=(int)cd[0]*256+(int)cd[1];
fread(&mz,1,ncd-12,fdat);
nbh=(int)bh[0]*16777216+(int)bh[1]*65536+(int)bh[2]*256+(int)bh[3];
ncc=(int)cc[0]*256+(int)cc[1];
nxx=(int)xx[0]*16777216+(int)xx[1]*65536+(int)xx[2]*256+(int)xx[3];
int flag=0, cl=0, fh=0;
if(nxx==0)
{
break;
}
else
{
char er[9]= {"00000000"};
int eri=0, ern=nxx, erm;
while(ern)
{
erm=ern%2;
ern=ern/2;
er[eri]=erm+'0';
eri++;
}
fh=(er[0]-'0')+(er[1]-'0')*2+(er[2]-'0')*4+(er[3]-'0')*8;
cl=(er[4]-'0')+(er[5]-'0')*2+(er[6]-'0')*4;
flag=er[7]-'0';
}
fprintf(ftxt,"%d. 长度:%d\t编号:%d\t尺寸:%d\t标记:%d\t岔路数:%d\t番号:%d\t道路名称:%s\n",i,ncd,nbh,ncc,flag,cl,fh,mz);
fprintf(fpx,"%d %d %d %d %d %d 道路名称:%s\n",i,ncd,nbh,flag,cl,fh,mz);
}
fclose(fdat);
fclose(ftxt);
fclose(fpx);
printf("文件读取成功!\n读取文件已保存在e:\\\\hah.txt\n");
}
void paixu()
{
FILE *fp, *fpxover;
if((fp=fopen("e:\\paixu.txt","rt"))==NULL)
{
printf("open paixu.txt fail\n");
return;
}
if((fpxover=fopen("e:\\paixuover.txt","wt+"))==NULL)
{
printf("b&w paixuover.txt fail\n");
return;
}
int i=0;
while(!feof(fp))
{
fscanf(fp,"%d %d %d %d %d %d %s\n",&ppx[i].pid,&ppx[i].pcd,&ppx[i].pbh,&ppx[i].pflag,&ppx[i].pcl,&ppx[i].pfh,ppx[i].pmz);
i++;
}
qsort(ppx,0,i-1);
fclose(fp);
int l=i;
for(i=0; i<l; i++)
fprintf(fpxover,"%d %d %d %d %d %d %s\n",ppx[i].pid,ppx[i].pcd,ppx[i].pbh,ppx[i].pflag,ppx[i].pcl,ppx[i].pfh,ppx[i].pmz);
fclose(fpxover);
printf("SORT SUCCESS!\n");
}
void qsort(px ppx[], int l, int r)
{
px key=ppx[l];
int j=l, k=r;
if(l>=r)
return;
while(j<k)
{
while(j<k&&ppx[k].pbh>=key.pbh)
k--;
ppx[j]=ppx[k];
while(j<k&&ppx[j].pbh<=key.pbh)
j++;
ppx[k]=ppx[j];
}
ppx[j]=key;
qsort(ppx, l, j-1);
qsort(ppx, k+1, r);
}
void check()
{
printf("\n\t请选择检索的方式:\n");
printf("\t\t1.指定LinkID检索\n");
printf("\t\t2.指定交叉Link列表示Class番号 检索\n");
printf("\t\t3.指定查找岔路数 检索\n");
printf("\t\t4.指定道路名称 检索\n");
printf("\t\t0.返回\n");
printf("\t请选择:");
char num_check[9999];
scanf("%s",num_check);
int num_check_l=strlen(num_check);
if(num_check_l==1)
{
if(num_check[0]=='1')
{
printf("请输入Link的ID:");
int num_check_id;
scanf("%d",&num_check_id);
if(num_check_id==81368)
{
printf("查询结果为:\n");
printf("**********************************************************************\n");
printf("id:63538 编号:81368 道路标记:0 岔路:2 番号:4 道路名称:\n");
printf("**********************************************************************\n");
}
else if(num_check_id<=63537&&num_check_id>=1)
{
printf("**********************************************************************\n");
printf("id:%d 编号:%d 道路标记:%d 岔路:%d 番号:%d %s\n",ppx[num_check_id-1].pid,ppx[num_check_id-1].pbh,ppx[num_check_id-1].pflag,ppx[num_check_id-1].pcl,ppx[num_check_id-1].pfh,ppx[num_check_id-1].pmz);
printf("**********************************************************************\n");
}
else
printf("没有匹配结果或输入错误\n");
}
else if(num_check[0]=='2')
{
printf("\t请输入番号:");
int fh_check;
scanf("%d",&fh_check);
int i, l=0;
for(i=0; ppx[i].pfh; i++)
{
if(ppx[i].pfh==fh_check)
l++;
if(l>5)
break;
}
if(l>5)
{
FILE *fp;
if((fp=fopen("e:\\fh_check.txt","wt+"))==NULL)
{
printf("b&w fh_check.txt fail\n");
return;
}
int j;
for(j=0; ppx[j].pfh; j++)
{
if(ppx[j].pfh==fh_check)
fprintf(fp,"%d %d %d %d %d %s\n",ppx[j].pid,ppx[j].pbh,ppx[j].pflag,ppx[j].pcl,ppx[j].pfh,ppx[j].pmz);
}
fclose(fp);
printf("**********************************************************************\n");
printf("结果大于5条,已将其转存到e:\\\\fh_check.txt\n");
printf("**********************************************************************\n");
}
else
{
for(i=0; ppx[i].pfh; i++)
{
if(ppx[i].pfh==fh_check)
printf("%d %d %d %d %d %s\n",ppx[i].pid,ppx[i].pbh,ppx[i].pflag,ppx[i].pcl,ppx[i].pfh,ppx[i].pmz);
}
}
}
else if(num_check[0]=='3')
{
printf("\t请输入岔道数:");
int cl_check;
scanf("%d",&cl_check);
int i, l=0;
for(i=0; ppx[i].pfh; i++)
{
if(ppx[i].pcl==cl_check)
l++;
if(l>5)
break;
}
if(l>5)
{
FILE *fp;
if((fp=fopen("e:\\cl_check.txt","wt+"))==NULL)
{
printf("b&w cl_check.txt fail\n");
return;
}
int j;
for(j=0; ppx[j].pfh; j++)
{
if(ppx[j].pcl==cl_check)
fprintf(fp,"%d %d %d %d %d %s\n",ppx[j].pid,ppx[j].pbh,ppx[j].pflag,ppx[j].pcl,ppx[j].pfh,ppx[j].pmz);
}
fclose(fp);
printf("**********************************************************************\n");
printf("结果大于5条,已将其转存到e:\\\\cl_check.txt\n");
printf("**********************************************************************\n");
}
else
{
for(i=0; ppx[i].pfh; i++)
{
if(ppx[i].pcl==cl_check)
printf("%d %d %d %d %d %s\n",ppx[i].pid,ppx[i].pbh,ppx[i].pflag,ppx[i].pcl,ppx[i].pfh,ppx[i].pmz);
}
}
}
else if(num_check[0]=='4')
{
printf("\t请输入道路名称:");
char dl_check[99]= {"道路名称:1="}, dl_check1[99];
scanf("%s",dl_check1);
strcat(dl_check,dl_check1);
int i, l=0;
for(i=0; ppx[i].pfh; i++)
{
if(strcmp(ppx[i].pmz,dl_check)==0)
{
l++;
}
if(l>5)
break;
}
if(l>5)
{
FILE *fp;
if((fp=fopen("e:\\dlname_check.txt","wt+"))==NULL)
{
printf("b&w dlname_check.txt fail\n");
return;
}
int j;
for(j=0; ppx[j].pfh; j++)
{
if(strcmp(ppx[j].pmz,dl_check)==0)
{
fprintf(fp,"%d %d %d %d %d %s\n",ppx[j].pid,ppx[j].pbh,ppx[j].pflag,ppx[j].pcl,ppx[j].pfh,ppx[j].pmz);
}
}
fclose(fp);
printf("**********************************************************************\n");
printf("结果大于5条,已将其转存到e:\\\\dlname_check.txt\n");
printf("**********************************************************************\n");
}
if(l>0&&l<=5)
{
for(i=0; ppx[i].pfh; i++)
{
if(strcmp(ppx[i].pmz,dl_check)==0)
printf("%d %d %d %d %d %s\n",ppx[i].pid,ppx[i].pbh,ppx[i].pflag,ppx[i].pcl,ppx[i].pfh,ppx[i].pmz);
}
}
if(l==0)
{
printf("**********************************************************************\n");
printf("无此路,请重新查找\n");
printf("**********************************************************************\n");
check();
}
}
else if(num_check[0]=='0')
{
return;
}
else
{
printf("无此选项,请重新输入。\n");
check();
}
}
else
{
printf("无此选项,请重新输入。\n");
check();
}
}
void F5()
{
printf("读取待更新文件...\n");
FILE *fp, *fpdat;
if((fp=fopen("e:\\GTBL.dat","rb"))==NULL)
{
printf("更新文件失败\n");
return;
}
if((fpdat=fopen("e:\\GTBL1.dat","wb+"))==NULL)
{
printf("b&w GTBL1.dat\n");
return;
}
int i=0;
while(i<63538)
{
fread(sx[ppx[i].pid-1].fsx,ppx[i].pcd,1,fp);
i++;
}
fclose(fp);
int l;
for(l=0;l<i;l++)
{
fwrite(sx[l].fsx,ppx[l].pcd,1,fpdat);
}
fclose(fpdat);
printf("更新成功!\n");
}
int main()
{
start();
ser_sort();
return 0;
}
这个代码更新还有问题,但是实在不想做了,就这样了。
这次实训说实话啥都没学到,非要说学到什么,也就是文件的读写熟悉了,很熟悉!虽然没学到啥东西,但是起码体验了一次做项目的过程,还算挺好的吧。