| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 876 人关注过本帖
标题:帮帮忙吧,这问题困扰我很久了
只看楼主 加入收藏
ljl123970
Rank: 2
等 级:论坛游民
帖 子:31
专家分:42
注 册:2012-1-30
收藏
得分:3 
迷糊
2012-02-21 11:25
陪你看雪ly
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2012-2-16
收藏
得分:0 
回复 10楼 hnuhsg1226
好。。。只把有关的贴出来
2012-02-21 12:29
陪你看雪ly
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2012-2-16
收藏
得分:0 
{
FILE *fp;
struct student dele_stu[10];
struct student temp_date;
char filename[20], dele_name[10][20];
char choose;
int i, j, k=0, m=0;
int done=0, index;
int date_sum;
long dele_num[10];

system("cls");

printf("<       1      >        <       2      >\n");
printf("<  按学号删除  >        <  按姓名删除  >\n");
printf("----------------------------------------------\n");

choose=getch();
printf("请输入操作的文件名:");
gets(filename);

if(choose=='1')// 输入要删除的学号
{
    printf("请输入需要删除的学号,以0结束\n");
    for(k=0; k<10; k++)
    {
        printf("NO.%d: ",k+1);
        scanf("%ld",&dele_num[k]);
        if(dele_num[k]==0)
        {
            index=k;
            break;
        }
    }

}
    else if(choose=='2')// 这里是输入需要删除的姓名,以字符数组储存
    {
        printf("请输入姓名,以0结束\n");
        for(k=0; k<10; k++)
        {
            printf("NO.%d: ",k+1);
            gets(dele_name[k]);
            if(strcmp(dele_name[k], "0")==0)
            {
                index=k;
                break;
            }
        }
    }

    else
    {
        printf("请正确选择!");
        return 0;
    }

if(choose=='1'||choose=='2')
{
    if((fp=fopen(filename,"rb"))==NULL)
    {
    printf("无法打开文件:%s",filename);
    return 0;
    }

        fseek(fp,-sizeof(struct student), SEEK_END); //读出数据总量,移动指针来读取flag的值
        fread(&temp_date,sizeof(struct student), 1, fp);//(我用最后一个数据的变量flag来保存数据总量)
        date_sum=temp_date.flag;
        rewind(fp);


    for(i=0; i<date_sum; i++)//读数据
    {
        if(fread(&stu[i], sizeof(struct student), 1, fp)==NULL)
            printf("error");   
    }
    fclose(fp);

    if((fp=fopen(filename,"wb"))==NULL)
    {
    printf("无法打开文件:%s",filename);
    return 0;
    }
   
    for(i=0; i<date_sum; i++)
    {
        if(choose=='1')
        {
            for(j=0; j<index; j++)
            {   if(dele_num[j]!=stu[i].num)//不是要删除的就写进文件
                {   
                    stu[i].flag=stu[i].flag-done; //同步记录flag的值
                    if(fwrite(&stu[i], sizeof(struct student), 1, fp)!=1) //二进制读写
                    {
                        printf("error!");
                        fclose(fp);
                    }
            
                }
                else
                {
                    dele_stu[m++]=stu[i];   
                    date_sum--;//同步记录数据
                    done++;
                }
            }
        }

        if(choose=='2')
        {
            for(j=0; j<index; j++)
            {   
                if(strcmp(stu[i].name, dele_name[j])!=0)
                {
                    stu[i].flag=stu[i].flag-done; //同步记录flag的值
                    if(fwrite(&stu[i], sizeof(struct student), 1, fp)!=1) //二进制读写
                    {
                        printf("error!");
                        fclose(fp);
                    }
                }
                else
                {
                    dele_stu[m++]=stu[i];               
                    date_sum--;//同步记录数据
                    done++;
                }
            }
        
        }
    }
fclose(fp);

    if(m>0)//判断已经有数据被删除   (下面应该不会出错)
    {   
        printf("已删除信息:\n\n");
        print_model1();

        for(i=0; i<m; i++)
        {
            printf("   %-4d",dele_stu[i].num);
            printf("   %-10s",dele_stu[i].name);

            for(j=0; j<3; j++)
                printf("%-10.2f",dele_stu[i].score[j]);

            printf("%-10.2f\n",dele_stu[i].aver);

        }

    }

    else
    {
        if(choose=='1')
        printf("不存在的数据:NO.%ld",dele_num);
        if(choose=='2')
        printf("不存在的数据:name:%s",dele_name);        
    }

}
/////
2012-02-21 12:34
快速回复:帮帮忙吧,这问题困扰我很久了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043673 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved