Fgets使用以前一定要清除键盘缓冲区 fflush(stdin)

#include

#include

#include

 

void inputData (FILE *fPtr);

void updateData (FILE *fPtr);

void delData (FILE *fPtr);

void printData (FILE *fPtr);

int exist ( int num,FILE *fPtr); /*determine if the rec exist*/

int choice (void);

 

struct hardWareData

{

    int recNum;

    char toolName[30];

    int toolNum;

    double toolCost;

};

 

int main ( void )

{

    int choose;

    FILE *fPtr;

 

    if( (fPtr=fopen("client.dat","rb++"))==NULL)

        printf("File not exist/n");

    else

    {

        while ( (choose=choice() )!=5)

        {

            switch (choose)

            {

                case 1:

                inputData(fPtr);

                break;

                case 2:

                updateData(fPtr);

                break;

                case 3:

                delData(fPtr);

                break;

                case 4:

                printData(fPtr);

                break;

                default:

                printf("Please input correct number!/n/n");

            }

        }

        fclose(fPtr);

    }

}

 

int choice(void)

{

    int choose;

    printf("1 - Input New Data in /"client.dat/"./n"

         "2 - Update record/n"

         "3 - Delete record/n"

         "4 - Print records/n"

         "5 - Exit/n? ");

 

    scanf ("%d",&choose);

    return choose;

}

 

void inputData(FILE *fPtr)

{

    int newRec;

    struct hardWareData hardWare={ 0, "", 0, 0.00};

    char a[100]={0};

    

    printf("Enter New Record Number:/n? ");

    scanf("%d", &newRec);

    

    if( exist(newRec,fPtr) )

    {

        printf("The record has already exist.Use /"Update Record/"/n");

    }

    else

    {

        hardWare.recNum=newRec;

        

        printf("/n***Enter toolName toolNum toolCost:/n? ");

        fflush(stdin); //如果这里不写,那么gets(a)将直接跳过!!!!

        gets(a);

        sscanf(a,"%[^0-9]%d%lf",hardWare.toolName, &hardWare.toolNum, &hardWare.toolCost);

        

        fseek(fPtr, (newRec-1) * sizeof( struct hardWareData), SEEK_SET);

        fwrite( &hardWare, sizeof( struct hardWareData), 1, fPtr);

    }

}

void updateData(FILE *fPtr)

{

    int upNum;

    struct hardWareData hardWare= {0, "", 0, 0.00};

 

    printf("Enter Update Recourd Number:/n? ");

    scanf("%d", &upNum);

 

    if(!exist(upNum,fPtr))

    {

        printf("The record do not exist.Use /"Input Data/"/n");

    }

    else

    {

        fseek( fPtr,(upNum - 1) *sizeof (struct hardWareData), SEEK_SET);

        fread( &hardWare,sizeof(struct hardWareData),1,fPtr);

        printf("The current data is :/n");

        hardWare.recNum = upNum;

        printf("/n%-5d%-15s%-8d%.2lf/n/n",hardWare.recNum,hardWare.toolName,hardWare.toolNum,hardWare.toolCost);

        printf("Enter New ToolName TollNum ToolCost:/n? ");

 

 

        scanf("%s%d%lf",hardWare.toolName, &hardWare.toolNum, &hardWare.toolCost);

 

        fseek( fPtr,(upNum - 1) *sizeof (struct hardWareData), SEEK_SET);

        fwrite( &hardWare,sizeof(struct hardWareData),1,fPtr);

    }

}

 

void delData(FILE *fPtr)

{

    int delNum;

    struct hardWareData empty={0,"",0,0.00};

 

    printf("Enter the record to delete./n? ");

    scanf("%d", &delNum);

    

    if(!exist(delNum,fPtr))

    {

        printf("Record do not exist!/n");

    }

    else

    {

        fseek(fPtr,(delNum-1) * sizeof (struct hardWareData), SEEK_SET);

        fwrite(&empty, sizeof(struct hardWareData),1,fPtr);

    }

 

}

void printData(FILE *fPtr)

{

    struct hardWareData H={0,"",0,0.00};

    int verify=0;

 

    rewind(fPtr);

 

    printf("/n/n*****************************************/n");

    while (!feof(fPtr))

    {    

        fread( &H,sizeof(struct hardWareData), 1 , fPtr);

        if(verify!=H.recNum && H.recNum !=0)

        {

            printf("%-5d%-15s%-8d%.2lf/n",H.recNum,H.toolName,H.toolNum,H.toolCost);

            verify=H.recNum;

        }

    }

    printf("*****************************************/n/n");

    }

int exist (int num,FILE *fPtr)

{

    struct hardWareData hardWare={0,"",0,0.00};

 

    fseek(fPtr, (num - 1) * sizeof( struct hardWareData), SEEK_SET);

 

    fread(&hardWare, sizeof(struct hardWareData), 1, fPtr);

 

    if (hardWare.recNum == 0)

        return 0;

    else

        return 1;

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值