qq_33503893 2016-04-14 13:24 采纳率: 0%
浏览 1501

用C++编写文件存储和读取后显示不出

输入数据->文件存储->退出程序->重新运行->文件读取->数据统计->全部显示,之后发现之前存储的数据都没有了,求大神们帮忙看一下问题在哪
void save(const BOOK *top) //文件存储
{
const BOOK *q;
FILE *fp;

if(count==0)
{
    printf("\n当前没有记录可存!");
    return;
}

if((fp=fopen("D://bookmanage1.txt","wb"))==NULL)
{
    printf("\n不能打开文件!\n");
    exit(1);
}
printf("\n文件正在存储中……\n");
q=top->next;

while(q)
{
    printf("a");
    fwrite(q,LEN,1,fp);
    printf("b");
    q=q->next;
    printf("c");
}
fclose(fp);
printf("%d条记录已经存入文件,请继续操作。\n",count);

}

BOOK *load(BOOK *top) //文件读取
{
FILE *fp;
BOOK *q,*old;
count=0;

if((fp=fopen("D://bookmanage1.txt","rb"))==NULL)
{
    printf("打不开文件!");
    exit(1);
}
printf("\t正在读取文件中……\n");
ASK(q);
top=q;
old=top;

while(!feof(fp))
{
    if(1!=fread(q,LEN,1,fp)) break;
    count=count+1;
    ASK(q->next);
    //old=q->next;
    old=q;
    q=q->next;
}
old->next=NULL;
fclose(fp);

printf("\t取出%d条记录。\n",count);
return(top);

}

int estatistical(BOOK top) //统计数据
{
BOOK *p=top;
char choose[100],input[100];
int cn=0;
int flag=0;
printf("\t
***********************************************************\n");
printf("\t**\t\t请选择按照哪种方式进行统计\t \n");
printf("\t
[1] 书名 [2] 主编\t \n");
printf("\t
[3] 出版社 [4] 出版年\t \n");
printf("\t
[5] ISBN书号 [6] 全部显示\t \n");
printf("\t
**********************************************************\n");
gets(choose);
switch(cn)
{case 6:
display(p);
}
}

void display(const BOOK *top) //显示记录
{
const BOOK *q;
if(count==0)
{
printf("\n现在还没有记录!\n");
return;
}

    q=top->next;
    printf("书籍信息如下:\n");
    printf("书名  主编  出版社  出版年  版次  ISBN书号  定价  拥有本数  现余本数  借出本数\n");
    while(q!=NULL)
    {
        printf("%s\t%s\t%s\t%d\t%s\t%s\t%.2f\t%d\t%d\t%d\n",q->name,q->editor,q->press,q->pressyear,q->vision,q->ISBN,q->price,q->own,q->left,q->borrow);
        q=q->next;
    }
}

BOOK *badd(BOOK *top) //添加数据
{
BOOK *old;
BOOK *p,*q;
FILE *fp;
int flag;

ASK(p);
old=top;
while(old->next!=NULL)
{
    old=old->next;
}
printf("输入数据,输入‘0’时结束。\n");

--count;
do
{
    ++count;

    printf("\n书名:");
    scanf("%s",&p->name);
    if(strcmp(p->name,"0")==0)
        break;
    printf("\n主编:");
    scanf("%s",&p->editor);
    printf("\n出版社:");
    scanf("%s",&p->press);
    printf("\n出版年:");
    scanf("%d",&p->pressyear);
    printf("\n版次:");
    scanf("%s",&p->vision);
    printf("\nISBN书号:");
    scanf("%s",&p->ISBN);
    printf("\n定价:");
    scanf("%lf",&p->price);
    printf("\n现余本数:");
    scanf("%d",&p->left);
    printf("\n借出本数:");
    scanf("%d",&p->borrow);
    p->own=p->borrow+p->left;
    p->next=NULL;
    if(count==0)  top=p;
    old->next=p;
    old=p;
    ASK(p);
}while(p->name[0]!='0');
old->next=NULL;
free(p);

printf("输入成功!\n");
return(top);

}

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-04-14 14:25
    关注
     fopen("D:\\bookmanage1.txt","a"); //路径是双反斜杠,后面追加内容用a(append的意思)。
    
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况