图书管理系统的相关问题我无法解决,不知道为何无法运行,可能问题较多,希望大家能帮我修改修改

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

这是我今年暑假关于图书管理系统,,但是我不知道为什么会运行失败,可能代码里的问题比较多,希望大家帮我看看,我一开始会在c盘建立一个book.txt文件,里面会放10本书的相关资料,
麻烦大家帮我修改修改

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
    int id;
    char bookname[30];
    float money;
    char year[12];
    char press[30];
    int strock;
}books[20],books1[20],books2[20],books3[20],books4[20];
void page_title(char *menu_item)
{
    printf("\n图书管理系统\n-%s-\n",menu_item);
}
int main()
{
    int book_add();
    int book_show();
    int book_modify();
    int book_delete();
    int book_search();
    page_title("操作选单");
    printf("用数字选择操作\n");
    printf("\t1图书信息录入\t2显示图书\n");
    printf("\t3修改图书信息\t4图书信息删除\n");
    printf("\t5图书信息查询\t6退出\n");
    switch(getchar())
    {
    case 1:book_add();
        break;
    case 2:book_show();
        break;
    case 3:book_modify();
        break;
    case 4:book_delete();
        break;
    case 5:book_search();
        break;
    case 6:exit(0);
    }
    return 0;
}
//图书信息录入
int book_add()
{
    FILE *fp;
    int i,n;
    page_title("图书信息录入");
    printf("需要录入几本书\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("id:");
        scanf("%d",&books[i].id);
        printf("bookname:");
        scanf("%s",books[i].bookname);
        printf("money:");
        scanf("%f",&books[i].money);
        printf("year:");
        scanf("%s",books[i].year);
        printf("press:");
        scanf("%s",books[i].press);
        printf("strock:");
        scanf("%d",&books[i].strock);
    }
    if((fp=fopen("c:\\book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    fwrite(books,sizeof(struct stu),1,fp);
    fclose(fp);
    return 0;
}
//图书显示
int book_show()
{
    FILE *fp;
    int i;
    page_title("图书显示");
    if((fp=fopen("c:\\book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    printf("编号 书名 价格 出版日期 出版社 库存\n");
    for(i=0;i<20;i++)
    {
        fread(&books1[i],sizeof(struct stu),1,fp);
         printf("\n%2d %s %.2f %s %s %4d\n",books1[i].id,books1[i].bookname,books1[i].money,books1[i].year,books1[i].press,books1[i].strock);
    }
    fclose(fp);
    return 0;
}
//图书修改
int book_modify()
{
    FILE *fp;
    int i,id_change;
    page_title("图书修改");
    if((fp=fopen("c:\\book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    for(i=0;i<20;i++)
        fread(&books2[i],sizeof(struct stu),1,fp);
    printf("输入要修改的图书的id:");
    scanf("%d",&id_change);
    for(i=0;i<20;i++)
    {
        if(books2[i].id==id_change)
        {
            printf("修改书名:");
            scanf("%s",books2[i].bookname);
            printf("修改价钱:");
            scanf("%f",books2[i].money);
            printf("修改出版日期:");
            scanf("%s",books2[i].year);
            printf("修改出版社:");
            scanf("%s",books2[i].press);
            printf("修改库存:");
            scanf("%d",books2[i].strock);
        }
    }
    fwrite(books2,sizeof(struct stu),1,fp);
    fclose(fp);
    return 0;
}
//图书删除
int books_delete()
{
    FILE *fp;
    int i,id_delete,j;
    page_title("图书删除");
    if((fp=fopen("c:\\book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    for(i=0;i<20;i++)
        fread(&books3[i],sizeof(struct stu),1,fp);
    printf("输入要删除的图书的编号:");
    scanf("%d",&id_delete);
    for(i=0;i<20;i++)
    {
        if(books3[i].id==id_delete)
        {
            for(j=i;j<20;j++)
            {
                books3[j].id=books3[j+1].id;
                strcpy(books3[j].bookname,books3[j+1].bookname);
                books3[j].money=books3[j+1].money;
                strcpy(books3[j].year,books3[j].year);
                strcpy(books3[j].press,books3[j].press);
                books3[j].strock=books3[j+1].strock;
            }
        }
    }
    printf("此书已删除\n");
    fwrite(books3,sizeof(struct stu),1,fp);
    return 0;
}
//图书搜索
int book_search()
{
    FILE *fp;
    int i,flag=0;
    char num[30];
    page_title("图书搜索");
    printf("请输入书名:\n");
    scanf("%s",num);
    if((fp=fopen("c:\\book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    for(i=0;i<20;i++)
        fread(&books4[i],sizeof(struct stu),1,fp);
    for(i=0;i<20&&flag==0;i++)
    {
        if(strcmp(books4[i].bookname,num)==0)
        {
            printf("图书编号:%d\t",books4[i].id);
            printf("书名:%s\t",books4[i].bookname);
            printf("价格:%.2f\t",books4[i].money);
            printf("出版日期:%s\t",books4[i].year);
            printf("出版社:%s\t",books4[i].press);
            printf("库存:%d\t",books4[i].strock);
            flag=1;
        }
    }
    return 0;
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

133行books_delete改成book_delete

img

把main函数写到最下方,现在问题是main函数调用的函数都在下边,main调不了。c语言只能调用当前函数上方声明或者实现的函数

你把文件目录改为其他目录试试,可能在c盘写文件权限不够。
修改了一下,代码如下:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
    int id;
    char bookname[30];
    float money;
    char year[12];
    char press[30];
    int strock;
}books[20],books1[20],books2[20],books3[20],books4[20];
void page_title(char *menu_item)
{
    printf("\n图书管理系统\n-%s-\n",menu_item);
}
//https://ask.csdn.net/questions/7752414?spm=1005.2025.3001.5141
//图书信息录入
int book_add()
{
    FILE *fp;
    int i=0,n;
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    
    char ch;
    fscanf(fp,"%c",&ch);
    fclose(fp);
    
    
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    if(ch!=0){
        printf("编号\t书名\t价格\t出版日期\t出版社\t库存\n");
        while(feof(fp)==0)
        {
            //fread(&books1[i],sizeof(struct stu),1,fp);
            fscanf(fp,"%d %s %f %s %s %d ",
               &books[i].id,books[i].bookname,
               &books[i].money,books[i].year,
               books[i].press,&books[i].strock
               );
           // printf("%d\t%s\t%.2f\t%s\t%s\t%d\n",books[i].id,books[i].bookname,books[i].money,books[i].year,books[i].press,books[i].strock);
            i++;
        }
    }
//printf("ch=%d,i=%d\n",ch,i); 
        
    
    fclose(fp);
   
    if((fp=fopen("book.txt","w"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    
    page_title("图书信息录入");
    printf("需要录入几本书\n");
    scanf("%d",&n);
    
    int k=i;
    for(;i<k+n;i++)
    {
        printf("id:");
        scanf("%d",&books[i].id);
        printf("bookname:");
        scanf("%s",books[i].bookname);
        printf("money:");
        scanf("%f",&books[i].money);
        printf("year:");
        scanf("%s",books[i].year);
        printf("press:");
        scanf("%s",books[i].press);
        printf("strock:");
        scanf("%d",&books[i].strock);
      
    }
    
//    printf("需要写入的数据为:\n");
//    for(i=0;i<k+n;i++)
//    {
//        
//           printf("%d %s %f %s %s %d\n",
//           books[i].id,books[i].bookname,
//           books[i].money,books[i].year,
//           books[i].press,books[i].strock
//           );
//    }
//    
    for(i=0;i<k+n;i++)
    {
        
           fprintf(fp,"%d %s %f %s %s %d ",
           books[i].id,books[i].bookname,
           books[i].money,books[i].year,
           books[i].press,books[i].strock
           );
    }
    
    fclose(fp);
    printf("图书已录入!\n");
    
    //fwrite(&books[0],sizeof(struct stu),i,fp);
    
     
    
    return 0;
}

//图书显示
int book_show()
{
    FILE *fp;
    int i=0;
    page_title("图书显示");
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    
    char ch;
    fscanf(fp,"%c",&ch);
    fclose(fp);
    
    
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    if(ch!=0){
        printf("%8s\t%8s\t%8s\t%8s\t%8s\t%8s\t\n", "编号","书名","价格","出版日期","出版社","库存");
        while(feof(fp)==0)
        {
            //fread(&books1[i],sizeof(struct stu),1,fp);
            fscanf(fp,"%d %s %f %s %s %d ",
               &books1[i].id,books1[i].bookname,
               &books1[i].money,books1[i].year,
               books1[i].press,&books1[i].strock
               );
            printf("%8d\t%8s\t%8.2f\t%8s\t%8s\t%8d\n",books1[i].id,books1[i].bookname,books1[i].money,books1[i].year,books1[i].press,books1[i].strock);
            i++;
        }
    }
   
    fclose(fp);
    return 0;
}
//图书修改
int book_modify()
{
    FILE *fp;
    int i,id_change;
    page_title("图书修改");
    printf("输入要修改的图书的id:");
    scanf("%d",&id_change);
    
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    
    char ch;
    fscanf(fp,"%c",&ch);
    fclose(fp);
    
    
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    
    fpos_t pos=0; 
    if(ch!=0){
        
        i=0;
        while(feof(fp)==0){
            
            fgetpos(fp,&pos);
            fscanf(fp,"%d %s %f %s %s %d ",
               &books2[i].id,books2[i].bookname,
               &books2[i].money,books2[i].year,
               books2[i].press,&books2[i].strock
            );
            
            if(books2[i].id==id_change)
            {    
                printf("输入要修改的图书的id:");
                   scanf("%d",&books2[i].id);                       
                printf("修改书名:");
                scanf("%s",books2[i].bookname);
                printf("修改价钱:");
                scanf("%f",&books2[i].money);
                printf("修改出版日期:");
                scanf("%s",books2[i].year);
                printf("修改出版社:");
                scanf("%s",books2[i].press);
                printf("修改库存:");
                scanf("%d",&books2[i].strock);
                
            }
            i++;
        }    
        
    }
    fclose(fp);
    
   // fpos_t findpos=0;
    
   
    
    
    if((fp=fopen("book.txt","w"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    //fsetpos(fp,&findpos);  
    
    int k=i;
    for(i=0;i<k;i++)
    {
        
           fprintf(fp,"%d %s %f %s %s %d ",
           books2[i].id,books2[i].bookname,
           books2[i].money,books2[i].year,
           books2[i].press,books2[i].strock
           );
    }
           
    fclose(fp);    
   

    return 0;
}

//图书删除
int book_delete()
{
    FILE *fp;
    int i,id_delete,j;
    page_title("图书删除");
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    
    char ch;
    fscanf(fp,"%c",&ch);
    fclose(fp);
    
    
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    printf("输入要删除的图书的编号:");
    scanf("%d",&id_delete);
    
    int find=0; 
    if(ch!=0){
        i=0;
        while(feof(fp)==0){
            
            //fgetpos(fp,&pos);
            fscanf(fp,"%d %s %f %s %s %d ",
               &books3[i].id,books3[i].bookname,
               &books3[i].money,books3[i].year,
               books3[i].press,&books3[i].strock
            );
            
            if(books3[i].id==id_delete)
            {    
                find=1;
                continue;
                
            }
            i++;
        }    
    }
    fclose(fp);
    
    
    if(find==1){
        if((fp=fopen("book.txt","w"))==NULL)
        {
            printf("\n文件打开失败\n");
            exit(0);
        }
        
        int k=i;
        for(i=0;i<k;i++)
        {
            
               fprintf(fp,"%d %s %f %s %s %d ",
               books3[i].id,books3[i].bookname,
               books3[i].money,books3[i].year,
               books3[i].press,books3[i].strock
               );
        }
        fclose(fp); 
        printf("此书已删除\n");
    }else{
        printf("没有找到id=%d的图书。\n",id_delete);
    }
    
   
   
    return 0;
}

//图书搜索
int book_search()
{
    FILE *fp;
    int i,flag=0;
    char num[30];
    page_title("图书搜索");
    printf("请输入书名:\n");
    scanf("%s",num);
    
    
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
    
    char ch;
    fscanf(fp,"%c",&ch);
    fclose(fp);
    
    
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n文件打开失败\n");
        exit(0);
    }
   
    
    if(ch!=0){
        i=0;
        while(feof(fp)==0){
            
            //fgetpos(fp,&pos);
            fscanf(fp,"%d %s %f %s %s %d ",
               &books4[i].id,books4[i].bookname,
               &books4[i].money,books4[i].year,
               books4[i].press,&books4[i].strock
            );
            
            if(strcmp(books4[i].bookname,num)==0)
            {
                printf("图书编号:%d\t",books4[i].id);
                printf("书名:%s\t",books4[i].bookname);
                printf("价格:%.2f\t",books4[i].money);
                printf("出版日期:%s\t",books4[i].year);
                printf("出版社:%s\t",books4[i].press);
                printf("库存:%d\t",books4[i].strock);
                flag=1;
                break;
            }     
            i++;
        }    
    }
    fclose(fp);
    
    
    
   
    return 0;
}

int main()
{
    int book_add();
    int book_show();
    int book_modify();
    int book_delete();
    int book_search();
    
    while(1){
        page_title("操作选单");
        printf("用数字选择操作\n");
        printf("\t1图书信息录入\t2显示图书\n");
        printf("\t3修改图书信息\t4图书信息删除\n");
        printf("\t5图书信息查询\t6退出\n");
        int choice;
        scanf("%d",&choice);
        switch(choice)
        {
        case 1:book_add();
            break;
        case 2:book_show();
            break;
        case 3:book_modify();
            break;
        case 4:book_delete();
            break;
        case 5:book_search();
            break;
        case 6:exit(0);
        }
    }
    return 0;
}

 
 

img