这是我今年暑假关于图书管理系统,,但是我不知道为什么会运行失败,可能代码里的问题比较多,希望大家帮我看看,我一开始会在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
把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;
}