注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

图书管理系统的加强版----好难啊;文件的添加。改变数量都必须全部改变才可以  

2014-09-14 16:40:30|  分类: 短学期---自己 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#ifndef NULL
#define NULL 0
#endif

/**************************************/
/*1--record.txt 保存借书的信息*/
/*2--car.txt 保存申请借书卡的信息*/
/*3--book.txt保存储存书的信息*/
/*4--book1.txt 是用来转换文件的,用来更新我们的信息 自己建立好!*/
/***************************************/


struct student/*定义学生借书的数据*/
{
char cnum;
char lentbook[30];
}studentin[30] ;
struct book/*定义书籍的类型*/
{
char name[30];
char author[30];
int number;
int price;
char isbn[17];
}bookin[100000];
struct car/*定义借书卡的类型*/
{
int cnum;
char name[30];
char cclass[30];
}carin[100];

void huanshu()/*还书*/
{


FILE *fp,*fp1;
char lentbook[30];
int i,n;/*n 使用来标记我们的选中的图书*/
int carnum;
printf("请输入你的卡号:\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&carin[i],sizeof(struct car),1,fp)!=NULL;i++)
{
if(carin[i].cnum==carnum)
{
fclose(fp);
printf("请输入你要还的书籍:\n");
scanf("%s",lentbook);
fp=fopen("record.txt","r");
for(i=0;fread(&studentin[i],sizeof(struct student),1,fp)!=NULL;i++)
{
if(strcmp(studentin[i].lentbook,lentbook)==0)
{
fclose(fp);
fp=fopen("book.txt","r");
fp1=fopen("book1.txt","w");
for(i=0;fread(&bookin[i],sizeof(struct book),1,fp)!=NULL;i++)
{
if(strcmp(bookin[i].name,lentbook)==0)/*现在还得更新我们图书管里的图书的信息*/
{ /*图书馆中的知识改变了数量*/
bookin[i].number++;/*更新我们的数量*/
fwrite(&bookin[i],sizeof(struct book),1,fp1);
continue;
}
fwrite(&bookin[i],sizeof(struct book),1,fp1);
}
fclose(fp1);
fclose(fp);
fp=fopen("book.txt","w");
fp1=fopen("book1.txt","r");
for(i=0;(fread(&bookin[i],sizeof(struct book),1,fp1))!=NULL;i++)
{
fwrite(&bookin[i],sizeof(struct book),1 ,fp);
}
fclose(fp);
fclose(fp1);
fp=fopen("book1.txt","w");/*清除我们的缓存文件*/
fclose(fp);


/*此时删除 借书的record的记录的信息*/
fp=fopen("record.txt","r");
fp1=fopen("book1.txt","w");
for(i=0;fread(&studentin[i],sizeof(struct student),1,fp)!=NULL;i++)
{
if(strcmp(studentin[i].lentbook,lentbook)!=0)
{
fwrite(&studentin[i],sizeof(struct student),1,fp1);
}
}
fclose(fp);
fclose(fp1);
fp=fopen("record.txt","w");
fp1=fopen("book1.txt","r");
for(i=0;fread(&studentin[i],sizeof(struct student),1,fp1)!=NULL;i++)
{
fwrite(&bookin[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp1);
fp=fopen("book1.txt","w");
fclose(fp);
printf("还书完毕\n");
return;

}
}
printf("你没有借这样的书\n"); /*出错提示*/
return;

}
}
printf("你的卡号不存在,请申请新卡或联系管理员\n");
fclose(fp);
}




void findbookbyname()/*找书的方式1*/
{
FILE *fp;
if((fp=fopen("book.txt","r"))==NULL)
{
printf("库文件打开失败,无法查找书籍\n") ;
return;
}
int i;
char name[200];
printf("请输入您要查找的书名:\n");
scanf("%s",name);
for(i=0;(fread(&bookin[i],sizeof(struct book ),1,fp))!=NULL;i++)
{
if(strcmp(bookin[i].name,name)==0)
{
if(bookin[i].number==0)
{
printf("你查找的书籍已经借完了\n");
fclose(fp) ;
return;
}
printf("下面是书籍的详细资料:\n");
printf("作者:%s\n书名:%s\n数量:%d\n",bookin[i].author,bookin[i].name,bookin[i].number);
fclose(fp);
return;
}
}
printf("你所查找的书籍本图书管里没有收藏\n");
fclose(fp);
return;


}
void findbookbyauthor() /*找书的方式2*/
{
FILE *fp;
if((fp=fopen("book.txt","r"))==NULL)
{
printf("库文件打开失败,无法查找书籍\n") ;
return;
}
int i;
char author[200];
printf("请输入您要查找的作者:\n");
scanf("%s",author);
for(i=0;fread(&bookin[i],sizeof(struct book ),1,fp)!=NULL;i++)
{
if(strcmp(bookin[i].author,author)==0)
{
if(bookin[i].number==0)
{
printf("你查找的书籍已经借完了\n");
fclose(fp) ;
return;
}
printf("下面是书籍的详细资料:\n");
printf("作者:%s\n书名:%s\n数量:%d\n",bookin[i].author,bookin[i].name,bookin[i].number);
fclose(fp);
return;
}
}

printf("你所查找的书籍本图书管里没有收藏\n");
fclose(fp);
return;

}
void record()
{
FILE *fp;
int total=0,i;
fp=fopen("record.txt","r");
for(i=0;fread(&studentin[i],sizeof(struct student),1,fp)!=NULL;i++)
{
total+=1;
printf("第%d张卡:\n卡号为:%d\n借的书籍为:%s\n",total,studentin[i].cnum,studentin[i].lentbook);
}
printf("目前共有%d本书被借出\n",total);

}
void lenbook()/*借书*/
{
FILE *fp,*fp1;
int cnum;
printf("请输入你的卡号:\n");
scanf("%d",&cnum);
int i,x=0;
if((fp=fopen("car.txt","r"))==NULL)
{

printf("打开储存借书卡的数据失败,不能借书\n");
return;
}
for(i=0;fread(&carin[i],sizeof(struct car),1,fp)!=NULL;i++)
{
if(carin[i].cnum==cnum)
{
fclose(fp);
fp=fopen("record.txt","r");
while(!feof(fp))
{
fread(&studentin[x],sizeof(struct student),1,fp);
x++;
}
fclose(fp);

/*储存第x个卡的学生借书的信息*/
printf("请输入你要查找的书籍的名字:\n");
scanf("%s",studentin[x].lentbook);
fp=fopen("book.txt","r");
for(i=0;fread(&bookin[i],sizeof(struct book),1,fp)!=NULL;i++)
{
if(strcmp(bookin[i].name,studentin[x].lentbook)==0)
{

if(bookin[i].number==0)
{
printf("此书已经被借完了,下次再来吧\n");
fclose(fp);
return;
}
printf("借书完毕\n");
fclose(fp);
fp=fopen("record.txt","a+");/*在已经存在的文件后面追加数据*/
studentin[x]. cnum=cnum;
fwrite(&studentin[x],sizeof(struct student),1,fp);/*追加在我们的卡号的X的位置*/
fclose(fp);

/*现在我们的把我们的存书的信息改变哈哈,立即采用使用两个文件之间的转换的方式*/
fp=fopen("book.txt","r");
fp1=fopen("book1.txt","w");
for(i=0;fread(&bookin[i],sizeof(struct book),1,fp)!=NULL;i++)
{

if(strcmp(bookin[i].name,studentin[x].lentbook)==0)
{
bookin[i].number--;
fwrite(&bookin[i],sizeof(struct book),1,fp1);
}
else
{
fwrite(&bookin[i],sizeof(struct book),1,fp1);
}

}
fclose(fp);
fclose(fp1);
fp=fopen("book.txt","w");/*刷新原来的数据,清空*/
fp1=fopen("book1.txt","r");
for(i=0;fread(&bookin[i],sizeof(struct book),1,fp1)!=NULL;i++)
{
fwrite(&bookin[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp1);
fp=fopen("book1.txt","w");
fclose(fp1);
return;

}
}
printf("你找的书不存在\n");
return;
}
}

printf("你的卡号不存在,请申请新卡或联系管理员\n");
fclose(fp);
return;

}
void chashu()/*找书的大纲*/
{
char ww;
do
{
printf("---------------欢迎进入图书查询系统!--------------\n");
printf(" 1:<按书名查找>\n");
printf(" 2:<按作者查找>\n");
printf(" 0:<返回>\n");
printf("请输入0--2,其他输入非法!\n");
scanf("%s",&ww);
switch(ww)
{
case '1':findbookbyname();break;
case '2':findbookbyauthor();break;
case '0':break;
default:printf("无此操作\n");
break;
}
}while(ww!='0');
return;
}
void totalcar()/*借书卡的数量*/
{
FILE *fp;
int total=0,i;
fp=fopen("car.txt","r");
for(i=0;fread(&carin[i],sizeof(struct car),1,fp)!=NULL;i++)
{
total+=1;
printf("第%d张卡:\n卡号为:%d\n姓名:%s\n班级:%s\n",total,carin[i].cnum,carin[i].name,carin[i].cclass);
}
printf("目前共有%d张卡",total);
}

void delcar()/*删除卡号函数*/
{
FILE *fp,*fp1;
int a,i;
printf("请输入你要删除的卡号:\n");
scanf("%d",&a);
fp=fopen("car.txt","r");
fp1=fopen("book1.txt","w");
printf("如果卡号存在会被删除,没有系统不做任何的处理的\n");
for(i=0;fread(&carin[i],sizeof(struct car),1,fp)!=NULL;i++)/*删除一个元素的典范的代表*/
{
if(a!=carin[i].cnum)
{
fwrite(&carin[i],sizeof(struct car),1,fp1);

}
}
fclose(fp);
fclose(fp1);
printf("是否要删除Y or N\n");
char choice;
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("car.txt","w");
fp1=fopen("book1.txt","r");
for(i=0;(fread(&carin[i],sizeof(struct car),1, fp1))!=NULL;i++)
{
fwrite(&carin[i],sizeof(struct car ),1,fp);
}
fclose(fp);
fclose(fp1);
fp=fopen("book1.txt","w");
fclose(fp);
}
return;

}
void addcar()/*增加卡号函数*/
{
FILE *fp;
int n=0;
fp=fopen("car.txt","r");
while(!feof(fp))/*feof 为文件结尾的函数,如果到了结尾返回1*/
{
fread(&carin[n],sizeof(struct car),1,fp);
n++;
}
fclose(fp);
int i=n;
fp=fopen("car.txt","a+");
printf("请输入学生的卡号:\n");
scanf("%d",&carin[i].cnum);
printf("请输入学生的姓名:\n");
scanf("%s",carin[i].name);
printf("请输入学生的班级:\n");
scanf("%s",carin[i].cclass) ;
fwrite(&carin[i],sizeof(struct car),1,fp);
fclose(fp);
printf("输入完毕\n");
return;



}

void add()
{
int i;
int n;
int x=0;
printf("请输入你要添加的书本数\n");
scanf("%d",&n);


FILE *fp;
if((fp=fopen("book.txt","r+"))==NULL)
{
printf("无法打开文件\n");
return;
}
while(!feof(fp))/*feof 为文件结尾的函数,如果到了结尾返回1*/
{
fread(&bookin[x],sizeof(struct book),1,fp);
x++;
}
fclose(fp);
fp=fopen("book.txt","r+");
if(x==1)
{
for(i=0;i<n;i++)
{
printf("ISBN:\n");
scanf("%s",bookin[i].isbn);
printf("书本名称:\n");
scanf("%s",bookin[i].name);
printf("书的作者:\n") ;
scanf("%s",bookin[i].author);
printf("书的数量:\n") ;
scanf("%d",&bookin[i].number);
printf("书的价格:\n") ;
scanf("%d",&bookin[i].price);
}
for(i=0;i<n;i++)
{

if(fwrite(&bookin[i],sizeof(struct book),1,fp)!=1)
{
printf("写入文件失败\n");
}
}
fclose(fp);
//printf("文件读入成功\n");
return ;
}
else
{
fclose(fp);
fp=fopen("book.txt","a+");
for(i=x-1;i<n+x-1;i++)
{
printf("ISBN:\n");
scanf("%s",bookin[i].isbn);
printf("书本名称:\n");
scanf("%s",bookin[i].name);
printf("书的作者:\n") ;
scanf("%s",bookin[i].author);
printf("书的数量:\n") ;
scanf("%d",&bookin[i].number);
printf("书的价格:\n") ;
scanf("%d",&bookin[i].price);
}
for(i=0;i<n;i++)
{
fwrite(&bookin[x-1],sizeof(struct book),1,fp);
x++;
}
fclose(fp);

}

}
void del()
{
int i,tn;
FILE *fp,*fp1;
if((fp=fopen("book.txt","r"))==NULL)
{
printf("文件打开不成功\n");
return;
}
char bookname[30];
printf("输入你要删除的书名:\n");
scanf("%s",bookname);
for(i=0;fread(&bookin[i],sizeof(struct book),1,fp)!=NULL;i++)
{
if(strcmp(bookin[i].name,bookname)==0)
{
fclose(fp);
fp=fopen("book.txt","r");
fp1=fopen("book1.txt","w");
for(i=0;fread(&bookin[i],sizeof(struct book),1,fp)!=NULL;i++)
{

if(strcmp(bookin[i].name,bookname)==0)
{
continue;
}
fwrite(&bookin[i],sizeof(struct book),1,fp1);
}
fclose(fp);
fclose(fp1);
fp=fopen("book.txt","w");
fp1=fopen("book1.txt","r");
for(i=0;fread(&bookin[i],sizeof(struct book),1,fp1);i++)
{
fwrite(&bookin[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose (fp1);
fp1=fopen("book1.txt","w");
fclose(fp1);
printf("删书成功\n");
return;
}
printf("此书不再我们的图书馆中\n");
}

}
void modify()
{
int i;
int n=0;
char b;
char bookname[30];
FILE *fp;
if((fp=fopen("book.txt","r+"))==NULL)
{
printf("无法打开文件\n");
return;
}
while(!feof(fp))/*feof 为文件结尾的函数,如果到了结尾返回1*/
{
fread(&bookin[n],sizeof(struct book),1,fp);
n++;
}
printf("输入您要修改图书的书名:\n");
scanf("%s",bookname) ;
for(i=0;i<n;i++)
{
if(strcmp(bookin[i].name,bookname)==0)
{
printf("你确定要修改此书信息?Y or N\n");
scanf("%s",&b);
if(b=='y'||b=='Y')
{
printf("这本书的详细资料是:\n书名:%s\n作者:%s\n价格:%d\n数量:%d\n",bookin[i].name,bookin[i].author,bookin[i].price,bookin[i].number);
printf("请输入你要修改的信息:\n");
printf("ISBN:\n");
scanf("%s",bookin[i].isbn);
printf("书名:\n");
scanf("%s",bookin[i].name);
printf("作者:\n");
scanf("%s",bookin[i].author);
printf("数量:\n");
scanf("%d",&bookin[i].number);
printf("价格:\n");
scanf("%d",&bookin[i].price);
break;
}


}
}
if(i==n) printf("没有找到你要修改的书本\n");
else
{
FILE *fp;
if((fp=fopen("book.txt","r+"))==NULL)
{
printf("无法打开文件\n");
return;
}
for(i=0;i<n;i++)
{
if(fwrite(&bookin[i],sizeof(struct book),1,fp)!=1)
{
printf("写入文件失败\n");
}
}
fclose(fp);
//printf("文件读入成功\n")

}
return;

}

void count()
{
//int totalprice=0,totalnumber=0;
int i=0;
int x=0;
FILE *fp;
if((fp=fopen("book.txt","r+"))==NULL)
{
printf("打开文件失败\n");
return;
}
while(!feof(fp))
{
fread(&bookin[x],sizeof(struct book),1,fp);
x++;
}
fclose(fp) ;
x=x-1;
if(x!=0)
{
for(i=0;i<x;i++)
{
printf("第%d本书\n作者:%s\n书名:%s\nISBN:%s\n数量:%d\n\n",i+1,bookin[i].author,bookin[i].name,bookin[i].isbn,bookin[i].number);
// totalnumber=bookin[i].number+totalnumber;
}
// printf("图书的总册:%d\n",totalnumber);
return;
}
printf("没有书\n");
}
int main()
{
int a;
while(1)
{
printf(" 欢迎登陆图书管理系统 \n");
printf("**************************\n");
printf("* 1.添加图书 2.删除图书 * \n");
printf("* 3.修改图书 4.查询图书 *\n");
printf("* 5.借书 6.还书 *\n");
printf("* 7.注册借书卡 8.删除借书卡*\n");
printf("* 9.借书卡全部列表 10.图书的全部列表 \n");
printf("* 11.借出的书列表 12.退出\n");
printf("**************************\n");
printf("请输入你的选择\n");
scanf("%d",&a);
switch(a)
{
case 1:add();break;
case 2:del();break;
case 3:modify();break;
case 4:chashu();break;
case 5:lenbook();break;
case 6:huanshu();break;
case 7:addcar();break;
case 8:delcar();break;
case 9:totalcar();break;
case 10:count();break;
case 11:record();break;
case 12:exit(1);
default:printf("你的输入有误,请从新输入\n");
}

}
return 0;
}

图书管理系统的加强版----好难啊;文件的添加。改变数量都必须全部改变才可以 - 983433479 -  告别迷茫
 
  评论这张
 
阅读(15)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017