2015-1-4~2015-1-20青岛光谷软件园实训

来源:互联网 发布:淘宝上的捉猫猫是什么 编辑:程序博客网 时间:2024/04/29 07:12
要求:<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;}

这个代码更新还有问题,但是实在不想做了,就这样了。

这次实训说实话啥都没学到,非要说学到什么,也就是文件的读写熟悉了,很熟悉!虽然没学到啥东西,但是起码体验了一次做项目的过程,还算挺好的吧。

0 0
原创粉丝点击