| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 481 人关注过本帖
标题:C语言问题:关于fwrite
只看楼主 加入收藏
Jro
Rank: 1
来 自:安徽黄山
等 级:新手上路
帖 子:4
专家分:7
注 册:2012-12-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
C语言问题:关于fwrite
在C里面使用了fwrite函数,确定都是用二进制方式打开的,不过为什么输入新的前面的还是会变成0?
另外不能连续写入,否则前面那个会被覆盖,可我用的是ab的打开方式啊。
求高手帮忙啊!!!
源程序:
程序代码:
/*办公用品库管员
用于办公用品的管理,办公用品的入库应在库房账目上加入货物的入库日期,货物型号,数量,种类等,
在货物出库时应登记出库日期,数量种类等指标,手续经办人签名等。并有库房盘点功能。
基本要求:
       办公用品入库登记功能
       办公用品出库登记功能
       盘点功能:库中实际的办公用品存量
       办公用品超出存储范围,或没有办公用品的预警功能*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_size 1001//最多录入的用品数为1000,最后一个为输入的暂存区
#define ON inf[i].model,inf[i].kind,inf[i].amount,inf[i].dt.in_y,inf[i].dt.in_m,inf[i].dt.in_d,inf[i].dt.out_y,inf[i].dt.out_m,inf[i].dt.out_d,inf[i].name

typedef struct
{char model[20];
char kind[20];
int amount;
struct
{int in_y,in_m,in_d;//入库日期
int out_y,out_m,out_d;//出库日期
}dt;
char name[20];
}list;
list inf[MAX_size];

void menu()//菜单
{printf("\n\n\t\t**********************************");
printf("\n\t\t\t1.入库登记");
printf("\n\t\t\t2.出库登记");
printf("\n\t\t\t3.盘点");
printf("\n\t\t\t0.退出");
printf("\n\n\t\t**********************************");
}

void in()//入库登记
{
    int i,m=0,num,flag=0;
    char ch[2]="Y";
    FILE *fp;
    if((fp=fopen("TC.txt","rb"))==NULL)//查看文件是否存在
    {
        printf("无法打开文件!");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&inf[m],sizeof(list),1,fp)==1)//将数据读入内存 
            m++;
    }
    fclose(fp);
    num=m;
    while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
    {
        if(num>MAX_size)//当超出范围时发出警告
        {
            printf("超出储存范围!");
            return;
        }
        printf("请输入日期:");
        scanf("%4d.%2d.%2d",&inf[1000].dt.in_y,&inf[1000].dt.in_m,&inf[1000].dt.in_d);
        printf("请输入货物型号:");scanf("%s",inf[1000].model);
        printf("请输入货物种类:");scanf("%s",inf[1000].kind);
        printf("请输入入库货物数量:");scanf("%d",&inf[1000].amount);
        strcpy(inf[1000].name,"--");
        inf[1000].dt.out_y=inf[1000].dt.out_m=inf[1000].dt.out_d=0;
        for(i=0;i<num;i++)//判断是否为原有的物品
            if(strcmp(inf[1000].model,inf[i].model)==0)
            {
                flag=1;
                break;
            }
           
        if(flag=1)//原有物品则只加数量
        {
            fp=fopen("TC.txt","wb");
            fseek(fp,sizeof(list)*i,0);
            inf[i].amount+=inf[1000].amount;
            inf[1000].amount=inf[i].amount;
            inf[1000].dt.out_y=inf[i].dt.out_y;
            inf[1000].dt.out_m=inf[i].dt.out_m;
            inf[1000].dt.out_d=inf[i].dt.out_d;
            inf[i]=inf[1000];
            if(fwrite(&inf[i],sizeof(list),1,fp)!=1)
                printf("数据写入错误!");
            fclose(fp);
        }
        else//非原有物品录入全部新信息
        {
            fp=fopen("TC.txt","ab");
            num++;
            if(fwrite(&inf[1000],sizeof(list),1,fp)!=1)
                printf("数据写入错误!");
            fclose(fp);
        }
        printf("是否继续存入货物?(y/n)");
        scanf("%s",ch);
        getchar();system("cls");
    }
}

void out()
{
    int i,m=0,num,flag=0;
    char ch[2]="Y";
    FILE *fp;
    if((fp=fopen("TC.txt","rb"))==NULL)
    {
        printf("无法打开文件!");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&inf[m],sizeof(list),1,fp)==1)//将数据读入内存
            m++;
    }
    printf("当前仓库中共有%d种货物。",m);
    fclose(fp);
    num=m;
    while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
    {
        printf("请输入货物型号:");scanf("%s",inf[1000].model);
        for(i=0;i<m;i++)
        {
            if(strcmp(inf[1000].model,inf[i].model)==0)
                break;
            else
            {
                printf("无此货物!\n");return;
            }
        }
        strcmp(inf[i].model,inf[1000].model);
        printf("请输入日期:");
        scanf("%4d.%2d.%2d",&inf[i].dt.out_y,&inf[i].dt.out_m,&inf[i].dt.out_d);
        printf("请输入取出的货物数量:");scanf("%d",&inf[1000].amount);
        if(inf[1000].amount>inf[i].amount)
        {
            printf("库存不足!");
            return;
        }
        inf[i].amount=inf[i].amount-inf[1000].amount;
        printf("请输入经办人姓名:");scanf("%s",inf[i].name);
        fp=fopen("TC.txt","wb");
        fseek(fp,sizeof(list)*i,0);
        if(fwrite(&inf[i],sizeof(list),1,fp)!=1)
                printf("数据写入错误!");
            fclose(fp);
        printf("是否继续存入货物?(y/n)");
        scanf("%s",ch);
        getchar();system("cls");
    }
}

void check()
{
    int i,m=0;
    FILE *fp;
    if((fp=fopen("TC.txt","rb"))==NULL)
    {
        printf("无法打开文件!");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&inf[m],sizeof(list),1,fp)==1)//将数据读入内存 
            m++;
    }
    printf("当前仓库中共有%d种货物。",m);
    fclose(fp);
    printf("\n\n货物型号  货物种类  库存量    进货时间      出货时间    经办人\n");
    for(i=0;i<m;i++)
        printf("%-10s%-10s%-8d    %d.%d.%d    %d.%d.%d%10s\n",ON);
    getchar();system("cls");
    return;
}


void main()
{int n;
menu();
scanf("%d",&n);
getchar();system("cls");
while(n)
{
    switch(n)
    {case 1:in();break;
    case 2:out();break;
    case 3:check();break;
    case 0:printf("谢谢使用!\n");return;
    default:printf("操作错误!\n");
    }
    menu();
    scanf("%d",&n);
    getchar();system("cls");
}
}

     
搜索更多相关主题的帖子: 二进制 办公用品 C语言 经办人 
2012-12-08 11:00
Jro
Rank: 1
来 自:安徽黄山
等 级:新手上路
帖 子:4
专家分:7
注 册:2012-12-8
收藏
得分:0 
只要看in()函数模块就行
2012-12-08 12:23
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
又是这种蛋疼的错误,楼主,细心哪!!!
程序代码:
if(strcmp(inf[1000].model,inf[i].model)==0)
{
    flag=1;
    break;
}
if(flag==1)//原有物品则只加数量        //这里是‘==’不是 ‘=’
{
    fp=fopen("TC.txt","wb");
    fseek(fp,sizeof(list)*i,0);
    inf[i].amount+=inf[1000].amount;
    inf[1000].amount=inf[i].amount;
    inf[1000].dt.out_y=inf[i].dt.out_y;
    inf[1000].dt.out_m=inf[i].dt.out_m;
    inf[1000].dt.out_d=inf[i].dt.out_d;
    inf[i]=inf[1000];




[fly]存在即是合理[/fly]
2012-12-08 12:36
Jro
Rank: 1
来 自:安徽黄山
等 级:新手上路
帖 子:4
专家分:7
注 册:2012-12-8
收藏
得分:0 
真的是蛋都碎掉了。。。问题就在这!!!谢了
2012-12-09 22:50
快速回复:C语言问题:关于fwrite
数据加载中...
 
   



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

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