改代码 不知道哪里有问题

// 图书信息管理系统
//
//
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10

int menu(void);//总菜单
int append_book(int n);//新增图书
void delete_book(int n);//删除图书
void modify_book();//修改图书
void find_book(int n);//查找图书
void print_book(int n);//显示图书
void empty_book(int m);//清空图书
void quit(char t);//退出系统
int readData(int n);//读取图书信息
void searchName(int n,char *pFindName);//读取图书信息

struct book //定义图书结构体类型
{
char book_num[10];
char book_name[30];
char first_author[10];
char publisher[20];
int publication_year;
float book_price;
}sBook[N];

int menu(void)
{
int item=-1;
printf("\n");
printf("\t\t================================\n");
printf("\t\t \n");
printf(" \t图书信息管理系统\n");
printf("\t\t 图书信息管理系统 \n");
printf("\t\t \n");
printf("\t\t 1.新增图书 \n");
printf("\t\t 2.删除图书 \n");
printf("\t\t 3.修改图书 \n");
printf("\t\t 4.查找图书 \n");
printf("\t\t 5.显示图书 \n");
printf("\t\t 6.清空图书 \n");
printf("\t\t 0.退出系统 \n");
printf("\t\t \n");
printf("\t\t================================\n");

while (item==-1)
{
    printf("请输入选项(0-6):");
    scanf("%d",&item);
    if (item==-1)
    {
        printf("\n非法输入,程序退出!\n");
        exit(0);
    }
    else if (item<0||item>6)
    {
        item=-1;
        printf("\n输入错误");
    }
}
return item;

}

int append_book(int n)
{
int i;
FILE *fp;
if((fp=fopen("/Users/Desktop/JIN/字符型数据字节大小/字符型数据字节大小/角度计算/角度计算/图书信息管理系统/图书信息管理系统/book_system_data.txt","a"))==NULL)
{
printf("打开文件失败!\n");
exit(1);
}
printf("\n请输入新增图书数量:");
scanf("%d",&n);
printf("请按如下顺序录入数据:\n");
printf("%-10s%-20s%-20s%-20s%-10s%-10s\n","书号","书名","首作","出版社","出版年","价格");
for(i=0;i<n;i++)
{
printf("请输入第%d本图书信息:\n",i+1);
printf("\t请输入新增图书的书号:");
scanf("%d",&sBook[i].book_num);
printf("\t请输入新增图书的书名:");
scanf("%20s",&sBook[i].book_name);
printf("\t请输入新增图书的首作:");
scanf("%10s",&sBook[i].first_author);
printf("\t请输入新增图书的出版社:");
scanf("%d",&sBook[i].publisher);
printf("\t请输入新增图书的出版年:");
scanf("%d",&sBook[i].publication_year);
printf("\t请输入新增图书的价格:");
scanf("%d",&sBook[i].book_price);

    fwrite(&sBook[i],sizeof(struct book),1,fp);
}
fclose(fp);
return n;

}

void delete_book(int n)
{
FILE *fp;
char number;
int i=0,j;
if((fp=fopen("/Users/Desktop/JIN/字符型数据字节大小/字符型数据字节大小/角度计算/角度计算/图书信息管理系统/图书信息管理系统/book_system_data.txt","a"))==NULL)
{
printf("打开文件失败!\n");
exit(1);
}

for(i=0;i<n;i++)
{
    fread(&sBook[i],sizeof(struct book),1,fp);
}
fclose(fp);

printf("\n请输入需要删除图书的书号:");
scanf("%c",&number);
for(i=0;i<n;i++)
{
    if (number==sBook[i].book_num)
    {
        break;
    }
    if(i<n)
        for(j=i;j<n-1;j++)
        {
            sBook[j]=sBook[j+1];
        }
    else
        printf("不存在此图书\n");
    fp=fopen("/Users/Desktop/JIN/字符型数据字节大小/字符型数据字节大小/角度计算/角度计算/图书信息管理系统/图书信息管理系统/book_system_data.txt","w");
    if(fp==NULL)
    {
        printf("打开文件失败!\n");
        exit(1);
    }
    
    for(i=0;i<n-1;i++)
    {
        fwrite(&sBook[i],sizeof(struct book),1,fp);
    }
    fclose(fp);
}

}

void modify_book()
{
int i,j,k;
char s[20];
FILE *fp,*fq;
if (fp=fopen("tab.txt","w")==NULL)
{
printf("文件无法打开!\n");
exit(1);
}
if (fq=fopen("tab.txt","w")==NULL)
{
printf("文件无法打开!\n");
exit(1);
}
for(i=0;!feof(fp)&&i<N;i++)
{
fread(&sBook[i],sizeof(struct book),1,fp);
}
fclose(fp);
printf("\n\t请输入需要修改的图书的书名:");
scanf("%s",s);
for(j=0;j<i;j++)
if(strcmp(sBook[j].book_name,s)==0)
{
k=j;
break;
}
if(j>i||j==i)
{
printf("未找到此书!\n");
exit(0);
}
printf("\t请输入修改后新的 书号 书名 首作 出版社 出版年 价格:\n");
scanf("%s%s%s%s%d%f",sBook[i].book_num,sBook[i].book_name,sBook[i].first_author, sBook[i].publisher,&sBook[i].publication_year,&sBook[i].book_price);
for(i=0;i<j+1;i++)
{
fwrite(&sBook[i],sizeof(struct book),1,fq);
}
fclose(fq);
printf("修改成功!\n");
if (fq=fopen("tab.txt","w")==NULL)
{
printf("文件无法打开!\n");
exit(1);
}
for(i=0;!feof(fq)&&i<N;i++)
{
fwrite(&sBook[i],sizeof(struct book),1,fq);
}
fclose(fq);

}

void find_book(int n)
{

char findName[30];
printf("请输入图书数量:\n");
scanf("%d",&n);
readData(n);
printf("请输入书名:");
scanf("%s",findName);
searchName(n,findName);

}

int readData(int n)
{
FILE *fp;
int i;
if((fp=fopen("/Users/Desktop/JIN/字符型数据字节大小/字符型数据字节大小/角度计算/角度计算/图书信息管理系统/图书信息管理系统/book_system_data.txt","r"))==NULL)
{
printf("打开文件失败!\n");
exit(1);
}
for(i=0;i<n;i++)
fread(&sBook[i],sizeof(struct book),1,fp);
fclose(fp);
return 0;
}

void searchName(int n,char *pFindName)
{
int i,flag=0;
for(i=0;i<n-1;i++)
{
if(strcmp(sBook[i].book_name,pFindName)==0)
{
if (flag==0)
{
printf("%-5s%-20s%-20s%-20s%-7s%-5s\n","书号","书名","首作","出版社","出版年","价格");
flag=1;
}
printf("%-5s%-20s%-20s%-20s%-7d%-5f\n",sBook[i].book_num,sBook[i].book_name,sBook[i].first_author, sBook[i].publisher,&sBook[i].publication_year,&sBook[i].book_price);
}
}
if(flag==0)
printf("\n查无此书!\n");
}

void print_book(int n)
{
FILE *fp;
int i;
if((fp=fopen("/Users/Desktop/JIN/字符型数据字节大小/字符型数据字节大小/角度计算/角度计算/图书信息管理系统/图书信息管理系统/book_system_data.txt","r"))==NULL)
{
printf("打开文件失败!\n");
exit(1);
}
for(i=0;i<N;i++)
{
fread(&sBook[i],sizeof(struct book),1,fp);
printf("%-5s%-20s%-20s%-20s%-7s%-5s\n","书号","书名","首作","出版社","出版年","价格");
}
fclose(fp);

}

void empty_book(int m)
{
FILE *fp;

printf("||确定要清空图书吗?||\n");
printf("||1.是  2.否||\n");
scanf("%d",&m);
if(m==1)
{
    fp=fopen("/Users/Desktop/JIN/字符型数据字节大小/字符型数据字节大小/角度计算/角度计算/图书信息管理系统/图书信息管理系统/book_system_data.txt","w");
}
else
{
    menu();
}

}

void quit(char t)
{

printf("||确定要退出系统吗?||\n");
printf("||1.是  2.否||\n");
while(1)
{
    t=getchar();
    switch(t)
    {
        case'1':
            printf("已退出系统

img
\n");
exit(0);
break;
case'2':
menu();
break;
default:
break;
}
}

}

int main(void)
{
int item,n,m;
char t;
while(1)
{
item=menu();
switch(item)
{
case 1:
append_book(n);
break;
case 2:
delete_book(n);
break;
case 3:
modify_book();
break;
case 4:
find_book(n);
break;
case 5:
print_book(n);
break;
case 6:
empty_book(m);
break;
case 0:
quit(t);
break;

    }
}
return 0;

}

img

if((fp=fopen("/Users/Desktop/JIN/字符型数据字节大小/字符型数据字节大小/角度计算/角度计算/图书信息管理系统/图书信息管理系统/book_system_data.txt","r"))==NULL)
改成
if((fp=fopen("\Users\Desktop\JIN\字符型数据字节大小\字符型数据字节大小\角度计算\角度计算\图书信息管理系统\图书信息管理系统\book_system_data.txt","r"))==NULL)
路径中的斜杠必须用\替代,因为斜杠在字符串中是转义字符

scanf("%d",&sBook[i].book_num);
改成
scanf("%d",sBook[i].book_num); //字符串输入不需要取地址,其它地方都要类似修改

scanf("%d",&sBook[i].book_price);
改为
scanf("%f",&sBook[i].book_price); //价格是浮点数,要用%f