⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dml.h

📁 c语言编写的微型数据库 实现了插入、删除、更新等基本功能
💻 H
📖 第 1 页 / 共 4 页
字号:
            case 5 :  /* 浮点型 */

           if(strcmp(Compare_F(f,Condition),Condition.OPTR)==0)
            
            {
                fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);

                for(j=1;j<=WA[0]->FldNum;j++)
                
                {
                    if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
                    
                    {
                        fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
                        
                        if(strlen(CmdRec.Range)==1)
                        
                        printf("%-10s",ch1);
                        
                        else if(strstr(CmdRec.Range,strupr(WA[0]->FldInfor_P[j-1].FldName)))
                        
                        printf("%-10s",ch1);
                        
                        
                    }
                    else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
                    
                    {
                        fread(&f,sizeof(float),1,WA[0]->DbFi_P);
                        
                        if(strlen(CmdRec.Range)==1)
                        
                        printf("%-10f",f);
                        
                        else if(strstr(CmdRec.Range,strupr(WA[0]->FldInfor_P[j-1].FldName)))
                        
                        printf("%-10f",f);
                        
                        
                        
                    }
                    else 
                    {
                        fread(&k,sizeof(int),1,WA[0]->DbFi_P);
                        
                        if(strlen(CmdRec.Range)==1)
                        
                        printf("%-10d",k);
                        
                        else if(strstr(CmdRec.Range,strupr(WA[0]->FldInfor_P[j-1].FldName)))
                        
                        printf("%-10d",k);
                        
                        
                        
                    }
                }
                
                printf("\n");
                
            }
            break ;


            default :  break ;
          }
        
    }
       fclose( WA[0]->DbFi_P);

       WA[0]->DbFi_P=NULL; /* 关关闭数据文件*/

       WA[0]=NULL;
}
/* ---------------------------------------------------------------------------------- */

Do_Delete(CmdRec_Type CmdRec,char*Token)/* 删除记录值,将满足删除条件的记录值显示在屏幕上,其它记录值保存在原文件上 */
{
    FILE*fp ;
    
    Condition_Type Condition ;
    
    int k,j,i,m,n,w,handle,len,length=0,f1,f2,HeadSize,Tem[20];
    
    float f ;
    
    char ch[20],ch1[20],cha[6],Range[150];

     clrscr();

     textbackground(BLUE);

     textcolor(YELLOW);

    strcpy(Tem,CmdRec.UserStr);
    
    ChangeExt(Tem,".TXT");

    if((WA[0]->DbFi_P=fopen(Tem,"r+b"))==NULL) /* 打开数据文件 */
    {
        printf("File open error!\n");
        
        return ;
    }
    
    fseek(WA[0]->DbFi_P,0,SEEK_SET);
    
    fread(WA[0],2,3,WA[0]->DbFi_P);
    
    fread(&WA[0]->FldInfor_P[0],(WA[0]->FldNum)*sizeof(struct FldInforStruct),1,WA[0]->DbFi_P);
    

    if((fp=fopen("TEP.TXT","w+b"))==NULL) /* 打开新文件,供中转数据用 */
    {
        printf("File open error!\n");
        
        return ;
    }
    
    fwrite(WA[0],(6+(WA[0]->FldNum)*sizeof(struct FldInforStruct)),1,fp);
    
    HeadSize=6+(WA[0]->FldNum)*sizeof(struct FldInforStruct);
    
    CutBlank_Head_Tail(Token);
    
    strncpy(Token,&Token[5],strlen(Token)-4);
    
    CutBlank_Head_Tail(Token);
    
    for(i=0;i<strlen(Token);i++)
    
    {
        if(Token[i]=='='||Token[i]=='<'||Token[i]=='>')
        
        break ;
        
    }
    
    k=i ;
    
    strncpy(Condition.WhichFld,Token,k);   Condition.WhichFld[k] = '\0';

    Condition.WhichFld[k] = '\0';

    if(Token[k+1]=='>'||Token[k+1]=='<')
    
    {
        strcpy(Condition.OPTR,"<>");

        strncpy(Condition.Value,&Token[k+2],strlen(Token)-k-1);
    }
    
    else 
    {
        Condition.OPTR[0]=Token[k];

        strncpy(Condition.Value,&Token[k+1],strlen(Token)-k);

    }
    
    for(i=0;i<WA[0]->FldNum;i++)
    
    {
        if(strcmp(WA[0]->FldInfor_P[i].FldName,Condition.WhichFld)==0)
        
        {
            strcpy(cha,WA[0]->FldInfor_P[i].FldClass);
            
            break ;
        }
    }
    
    n=++i ;
    
    for(i=0;i<n-1;i++)
    {
        if(!strcmp("float",WA[0]->FldInfor_P[i].FldClass))
        
        length+=sizeof(float);
        
        else if(!strcmp("int",WA[0]->FldInfor_P[i].FldClass))
        length+=sizeof(int);
        
        else if(!strcmp("char",WA[0]->FldInfor_P[i].FldClass))
        length+=(WA[0]->FldInfor_P[i].FldLen);
    }
    w=i ;

 for(i=1;i<=WA[0]->FldNum;i++)
    
    {
        printf("%-10s",WA[0]->FldInfor_P[i-1].FldName);
        
        strcat(Range,WA[0]->FldInfor_P[i-1].FldName);
        
        strcat(Range,",");
    }
    printf("\n");
    
    for(m=1;m<=WA[0]->TotalRec;m++)
    
    {
        fseek(WA[0]->DbFi_P,HeadSize+length+(m-1)*WA[0]->RecLen,SEEK_SET);
        
        if(strcmp(cha,"char")==0)
        
        {
            
            fread(ch,1,WA[0]->FldInfor_P[w].FldLen,WA[0]->DbFi_P);
        }
        
        else if(strcmp(cha,"float")==0)
        
        {
            
            fread(&f,sizeof(float),1,WA[0]->DbFi_P);

        }
        
        else if(strcmp(cha,"int")==0)
        
        {
            
            fread(&k,sizeof(int),1,WA[0]->DbFi_P);

        }
        switch(strlen(cha))  /* 根据删除条件字段的类型,分流处理 */
        {
            case 3 :  /* 满足删除条件显示在屏幕上 */

            if(strcmp(Compare_I(k,Condition),Condition.OPTR)==0)
            {
                fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
                
                for(j=1;j<=WA[0]->FldNum;j++)
                
                {
                    if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
                    
                    {
                        fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
                        
                        printf("%-10s",ch1);
                        
                    }
                    else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
                    
                    {
                        fread(&f,sizeof(float),1,WA[0]->DbFi_P);
                        
                        printf("%-10f",f);
                        
                    }
                    else 
                    {
                        fread(&k,sizeof(int),1,WA[0]->DbFi_P);
                        
                        printf("%-10d",k);
                    }
                }
                
                printf("\n");
                
            }
            else   /* 不满足删除条件的写入临时新文件 */
            {
                fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
                
                for(j=1;j<=WA[0]->FldNum;j++)
                
                {
                    if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
                    
                    {
                        fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);

                        fwrite(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,fp);
                        
                    }
                    else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
                    
                    {
                        fread(&f,sizeof(float),1,WA[0]->DbFi_P);

                        fwrite(&f,sizeof(float),1,fp);
                        
                    }
                    else 
                    {
                        fread(&k,sizeof(int),1,WA[0]->DbFi_P);

                        fwrite(&k,sizeof(int),1,fp);
                    }
                }
            }
            
            break ;

            case 4 :
            
            if(strcmp(Compare_C(ch,Condition),Condition.OPTR)==0)
            
            {
                
                fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
                
                for(j=1;j<=WA[0]->FldNum;j++)
                
                {
                    if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
                    
                    {
                        fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
                        
                        printf("%-10s",ch1);
                        
                        
                    }
                    else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
                    
                    {
                        fread(&f,sizeof(float),1,WA[0]->DbFi_P);
                        
                        printf("%-10f",f);
                        
                        
                    }
                    else 
                    {
                        fread(&k,sizeof(int),1,WA[0]->DbFi_P);
                        
                        printf("%-10d",k);
                        
                    }
                }
                
                printf("\n");
                
            }
            
            else 
            {
                fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
                
                for(j=1;j<=WA[0]->FldNum;j++)
                
                {
                    if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
                    
                    {
                        fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);

                        fwrite(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,fp);
                        
                        
                    }
                    else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
                    
                    {
                        fread(&f,sizeof(float),1,WA[0]->DbFi_P);

                        fwrite(&f,sizeof(float),1,fp);
                        
                        
                    }
                    else 
                    {
                        fread(&k,sizeof(int),1,WA[0]->DbFi_P);

                        fwrite(&k,sizeof(int),1,fp);
                        
                    }
                }
            }
            
            break ;
            
            case 5 :
            
            if(strcmp(Compare_F(f,Condition),Condition.OPTR)==0)
            
            {
                fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
                
                for(j=1;j<=WA[0]->FldNum;j++)
                
                {
                    if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
                    
                    {
                        fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
                        
                        printf("%-10s",ch1);
                        
                        
                    }
                    else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
                    
                    {
                        fread(&f,sizeof(float),1,WA[0]->DbFi_P);
                        
                        printf("%-10f",f);
                    }
                    else 
                    {
                        fread(&k,sizeof(int),1,WA[0]->DbFi_P);
                        
                        printf("%-10d",k);
                        
                        
                        
                    }
                }
                
                printf("\n");
                
            }
            
            else 
            {
                fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
                
                for(j=1;j<=WA[0]->FldNum;j++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -