?? book.c
字號:
#include "list.h"
void addbook() /* 新增圖書*/
{
FILE *fp;
int i=0;
char choice='y';
fp=fopen("book.txt","a+");
while(choice=='y'||choice=='Y')
{
printf("請你輸入第%d本書的序號\n",i+1);
scanf("%d",&book[i].booknum);
printf("請你輸入書名\n");
scanf("%s",book[i].bookname);
printf("請你輸入書的作者\n");
scanf("%s",book[i].bookcreat);
printf("請設為1或0,1代表書還沒人借,0表示書已經借出,設其他值,程序運行時無法得出正常結果\n");
printf("請你設定書的狀態\n");
scanf("%d",&book[i].turefalse);
fwrite(&book[i],sizeof(struct book),1,fp);
printf("是否要輸入下本書'Y/N'\n");
scanf("%s",&choice);
}
fclose(fp);
}
void bookcount() /* 圖書統計*/
{
FILE *fp;
int i,n=0;
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(book[i].booknum!=0&&strlen(book[i].bookname)!=0&&strlen(book[i].bookcreat)!=0)
{
printf("第%d本書<序號:%d 書名:%s 作者:%s 狀態:%d>\n",i+1,book[i].booknum,book[i].bookname,book[i].bookcreat,book[i].turefalse);
n=n+1;
}
}
fclose(fp);
printf("目前共有%d本書\n",n);
printf("按任意鍵\n");
}
void delbook() /* 刪除圖書*/
{
FILE *fp,*fp2;
int i;
char bookname[10],choice;
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w"); //臨時文件
printf("請輸入你要刪除的書名\n");
printf("如果你輸入的書名存在,系統自動刪除該信息!如果不存在,系統不做任何改動\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{//讀文件成功
if(strcmp(bookname,book[i].bookname)!=0)
{ //不是被刪除圖書 寫入臨時文件
fwrite(&book[i],sizeof(struct book),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf("是否真的要刪除該書籍?刪除后該書籍的所有信息將無法恢復《Y/N》\n");
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{//將臨時文件 寫入book文件
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("bookl.txt","w");//清空臨時文件
fclose(fp2);
printf("按任意鍵返回\n");
getch();
return;
}
else
{
fp2=fopen("bookl.txt","w");//清空臨時文件
fclose(fp2);
printf("按任意鍵返回\n");
getch();
return;
}
}
void findbook() /* 按書名查找圖書*/
{
FILE *fp;
char bookname[10];
int i;
fp=fopen("book.txt","r");
printf("請輸入你要查找的書名\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("這本書的詳細資料是:%d %s %s 此書現在無人借閱\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else
{
printf("這本書已經有人借出\n");
fclose(fp);
return;
}
fclose(fp);
return;
}
}
printf("沒有你要查詢的書籍\n");
fclose(fp);
return;
}
void findbook1() /* 按作者查找圖書*/
{
FILE *fp;
char bookcreat[10];
int i;
fp=fopen("book.txt","r");
printf("請輸入你要查找的書的作者\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf("這本書的詳細資料是:%d %s %s 此書現在無人借閱\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else
{
printf("這本書已經有人借出\n");
fclose(fp);
return;
}
fclose(fp);
return;
}
}
printf("沒有你要查詢的書籍\n");
fclose(fp);
return;
}
void lendbook() /* 借閱圖書*/
{
FILE *fp,*fp2; /*定義兩個文件指針,fp2用于修改數據時設立臨時文件用,防止數據遭破壞*/
int i,n;
int carnum;
printf("請你輸入你的卡號\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r"); /*讀取卡號記錄*/
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{ //核對卡號是否正確
if(car[i].carnum==carnum)
{
n=i; //記錄卡號位置
fclose(fp);
printf("請輸入你要借閱的書的名字\n");
scanf("%s",student[n].lendbook);
fp=fopen("book.txt","r"); //讀取圖書記錄
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{ //若找到該書
if(book[i].turefalse==0)
{//判斷是否被借出
printf("對不起,此書有人借出,請借其他書\n");
fclose(fp);
getch();
return;
}
else
fclose(fp);
fp=fopen("record.txt","a+"); //讀取借書記錄
student[n].carnum=carnum; //記錄借書學生卡號
fwrite(&student[n],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
book[i].turefalse=0; //設置被借出標志
fwrite(&book[i],sizeof(struct book),1,fp2);
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2); //保存圖書副本
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp); //更新被借圖書
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); //清空臨時文件book1
fclose(fp2);
printf("借書完畢,按任意鍵返回\n");
getch();
return;
} //end if 查找圖書
} //end for
printf("不存在這樣的書,任意鍵返回\n");
fclose(fp);
getch();
return;
} //end if 查找卡號
} //end for
printf("你的卡號不存在,請申請新卡,按任意鍵返回\n");
fclose(fp);
getch();
}
void huanbook() /*還書函數*/
{
FILE *fp,*fp2; /*定義兩個文件指針,fp2用于修改數據時設立臨時文件用,防止數據遭破壞*/
int i,n;
int carnum;
char lendbook[10];
printf("請你輸入你的卡號\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r"); /*讀取卡號記錄*/
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) /*for循環判斷卡號是否存在*/
{
if(car[i].carnum==carnum) /*卡號存在,進入下一循環*/
{
n=i;
fclose(fp);
printf("請輸入你要還的書的名字\n");
scanf("%s",lendbook);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{ /*判斷是否借閱了輸入的書*/
if(strcmp(student[i].lendbook,lendbook)==0)
{ /*借閱了該書,進入下一循環,否則出錯顯示*/
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue; /*刪除還掉的書的借書記錄*/
}
fwrite(&student[i],sizeof(struct student),1,fp2); /*寫入原來沒還的書的記錄*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++)
{
fwrite(&student[i],sizeof(struct student),1,fp); /*將借書記錄信息寫回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清臨時文件的記錄*/
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{ /*將書的記錄寫入臨時文件,防止因為修改信息破壞以前的記錄*/
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(struct book),1,fp2); /*將還的書的原來狀態設為無人借閱的*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp); /*將臨時文件寫回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清臨時文件*/
fclose(fp2);
printf("還書完畢,按任意鍵返回\n");
getch();
return;
}
}
printf("你沒有借這樣的書,不要耍我,任意鍵返回\n"); /*出錯提示*/
fclose(fp);
getch();
return;
}
}
printf("系統沒這樣的卡,和管理員聯系,按任意鍵返回\n"); /*出錯提示*/
fclose(fp);
getch();
}
void changebook() /* 修改圖書信息*/
{
FILE *fp,*fp2;
char bookname[10],choice;
int i;
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
printf("請你輸入要修改的書籍的書字\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,bookname)==0)
{
printf("你所要修改的書的資料如下,請選擇你要修改的內容\n");
printf("序號:〈%d〉 書名:〈%s〉 作者:〈%s〉 \n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("1:修改書的序號\n");
printf("2:修改書名\n");
printf("3:修改作者\n");
printf("請輸入1-3:");
scanf("%s",&choice);
switch(choice)
{
case '1':
{
printf("請輸入新的序號\n");
scanf("%d",&book[i].booknum);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
case '2':
{
printf("請輸入新的書名\n");
scanf("%s",book[i].bookname);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
case '3':
{
printf("請輸入新的作者\n");
scanf("%s",book[i].bookcreat);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
default:printf("沒有這樣的操作");break;
}
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("按任意鍵返回\n");
getchar();
return;
}
void lendcount() /* 借書統計 */
{
FILE *fp;
int i,n=0;
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
printf("卡號:%d 借出的書籍:%s \n",student[i].carnum,student[i].lendbook);
n=n+1;
}
fclose(fp);
printf("目前共有%d本書借出\n",n);
printf("按任意鍵\n");
getch();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -