flyˇever 2021-12-26 11:42 采纳率: 60%
浏览 16
已结题

图书管理系统还书功能出现数据覆盖问题

问题遇到的现象和发生背景

我使用下面的还书函数进行还书,如果同一个人借阅了两本书,例如张三,借阅了物理和数学;我先归还物理,然后结束程序再按学号查询张三所借阅的书时,会显示张三借阅了数学和数学。问题就是在这个时候数据重复写了一次,我不知道问题出在哪里?

问题相关代码,请勿粘贴截图
void retunr()
{
    int ii=0,jj=0;
    char *dstxuehao=malloc(50);
    char *dbookname=malloc(50);
    if((fpr=(fopen("student.txt","r")))==0)
    {
        printf("文件打开失败!\n");
        return;
    }
    for(ii=0;ii<STN;ii++)                    //读取文件中数据并存入结构体数组中 
    {
        fscanf(fpr,"姓名:%8s    班级:%8s    学号:%15s    借阅图书名:%8s\n",&std[ii].stname\
                    ,&std[ii].mjdcls,&std[ii].xuehao,&std[ii].sbookname);           
      }
      printf("请输入借阅人学号:\n");
      scanf("%s",dstxuehao);
      for(ii=0;ii<STN;ii++)                     
    {
        if((strcmp(std[ii].xuehao,dstxuehao))==0)        
        {
            jj=jj+1;    
        }
      }
      if(jj==0)
      {
          printf("未检索到学生借阅信息------\n");
        printf("3s后返回主菜单------------\n");
        sleep(3);
        return;
    }
      for(ii=0;ii<STN;ii++)                     
    {
        if((strcmp(std[ii].xuehao,dstxuehao))==0)
        {
            printf("姓名:%8s    班级:%8s    学号:%15s    借阅图书名:%8s\n",std[ii].stname\
                    ,std[ii].mjdcls,std[ii].xuehao,std[ii].sbookname);           
        }
      }
      printf("请输入需要归还的图书名:\n");
      scanf("%s",dbookname);
      printf("开始检索中(未找到目标文件自动结束)-------\n"); 
      for(ii=0;ii<STN;ii++)
      {
          if((strcmp(std[ii].sbookname,dbookname))==0)            //将输入的书名与已入库的书名进行对比        
        {
            printf("删除中----------\n"); 
            strcpy(std[ii].sbookname,""),strcpy(std[ii].mjdcls,""),strcpy(std[ii].stname,""),strcpy(std[ii].xuehao,"");    
            printf("删除成功^_^!------\n"); 
        }    
    }
    fpr=fopen("student.txt","w");
    for(ii=0;ii<STN;ii++)        //将数据重新写入txt文本 
    {
        if((strcmp(std[ii].stname,""))!=0)
        fprintf(fpr,"姓名:%8s    班级:%8s    学号:%15s    借阅图书名:%8s\n",std[ii].stname\
                ,std[ii].mjdcls,std[ii].xuehao,std[ii].sbookname);
    }
    fflush(fpr);
    printf("3s后返回主菜单-----\n");
    free(dstxuehao),free(dbookname);
    sleep(3);
    return;
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

我感觉是文件写入有问题,使用文件操作的一些函数没注意到一些点,望帮助解决

我想要达到的结果

归还完第一本书后,不会重复显示张三剩余的那本书
感谢

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月3日
    • 创建了问题 12月26日

    悬赏问题

    • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
    • ¥20 关于#c++#的问题:(2)运算二叉树·表达式一般由一个运算符和两个操作数组成:(相关搜索:二叉树遍历)
    • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
    • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
    • ¥45 求17位带符号原码乘法器verilog代码
    • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
    • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
    • ¥15 怎么看我在bios每次修改的日志
    • ¥15 python+mysql图书管理系统
    • ¥15 Questasim Error: (vcom-13)