C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)_第1頁
C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)_第2頁
C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)_第3頁
C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)_第4頁
C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)本文實例為大家分享了C語言實現(xiàn)圖書管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

c語言的一個大作業(yè),發(fā)上來紀(jì)念下嘿嘿。寫的不是很好,很多東西都揉在一起來,不過注釋寫的也挺多,希望能幫到有需要的朋友。

簡單文件數(shù)據(jù)庫-模擬圖書館管理系統(tǒng)

涉及知識點:文件讀寫、內(nèi)存管理、結(jié)構(gòu)體定義、基本數(shù)據(jù)結(jié)構(gòu)、高級格式化輸入輸出

要求:

編寫一個程序模擬圖書管理系統(tǒng)。用戶分為管理員和讀者兩類,分別顯示不同文本格式菜單,通過菜單項對應(yīng)數(shù)字進(jìn)行選擇。讀者菜單包括借書、還書、查詢等功能。管理員菜單包括圖書和讀者信息錄入、修改和刪除。圖書信息至少應(yīng)包括:編號、書名、數(shù)量,讀者信息至少應(yīng)包括:編號、姓名、所借圖書??筛鶕?jù)圖書名稱或編號進(jìn)行圖書信息查詢,可查詢某本書現(xiàn)在被哪些讀者借走。

命令行參數(shù)如下:

Libsima(-u)xxxx

第一個參數(shù)為可執(zhí)行程序名稱;第二個參數(shù)為用戶身份,-a表示管理員,-u表示讀者;第三個參數(shù)為用戶名

實現(xiàn)的功能

1.管理員:

對圖書進(jìn)行管理:添加圖書,修改圖書名稱、數(shù)量,刪除圖書。對讀者進(jìn)行管理:添加讀者,修改讀者名稱,刪除讀者.一鍵查看全部書籍信息(序號,書名,剩余數(shù)量)一鍵查看全部讀者信息(序號,讀者名,所借閱書籍)單本圖書詳情查詢:可根據(jù)序號和書名查找,向管理員展示圖書序號、名稱、剩余數(shù)量和借閱了此書的讀者。

2.讀者:

借閱圖書(只能同時借閱一本書)還回圖書一鍵查看全部書籍信息(序號,書名,剩余數(shù)量)

readme

需要從cmd命令行運行程序,如圖(注意格式)

管理員名:Zhang

進(jìn)入管理員菜單格式:可執(zhí)行程序名-aZhang(只設(shè)置了一個管理員,沒有添加管理員的功能)

進(jìn)入讀者菜單格式:可執(zhí)行程序名-u讀者名(需要先通過管理員添加讀者)

默認(rèn)生成的文件放在d盤根目錄下(有時中間的過渡文件可能會沒有被刪除)

Book.txt:存放書籍信息Users.txt:存放讀者信息

#includestdio.h

#includeio.h

intbookNumber=1;

//全局變量表示圖書的序號

intusersNumber=1;

//表示讀者編號

charenter;

//接收換行符

//添加圖書的函數(shù)

voidaddBook(FILE*Book)

FILE*Book1;

//當(dāng)文件和書本都存在時需要新建文件來更改信息

intjudgeName=0;

//判斷此書是否已經(jīng)被存放

intnum=1,readNum,readNumber;

//書本的數(shù)量

存放讀到的書本數(shù)量

讀到的書本序號

charname[20]={0},readName[20]={0};

//存放圖書名字

暫時存放讀到的字符串名

printf("請輸入要添加的圖書名:");

for(inti=0;ii++)

//從輸入流取得需要添加的書本名字

{

if(i==0)

scanf("%c%c",enter,name[i]);

else

scanf("%c",name[i]);

if(name[i]==10)

//將最后的換行符改為空

{

name[i]=0;

break;

}

}

if(access("d:/Book.txt",F_OK)==0)

//access函數(shù)判斷文件是否存在,存在返回值為0使用的頭文件為io

{

judgeName=1;

FILE*judge=fopen("d:/Book.txt","r");

//讀取數(shù)據(jù)文件,查找是否已經(jīng)存在此書

while(!feof(judge))

{

fscanf(judge,"%d%s%d",readNumber,readName,readNum);//由于readName已經(jīng)表示地址,不需要取地址符

fscanf(judge,"\n");

//讀入換行符,準(zhǔn)備下一行的讀取

if(strcmp(name,readName)==0)

//發(fā)現(xiàn)已經(jīng)存在此書后跳出循環(huán)

{

judgeName=2;

//為2時表示已經(jīng)存在此書,需要新建一個文件來更改信息

break;

}

}

fclose(judge);

//關(guān)閉用于判斷而打開的文件

bookNumber=readNumber+1;

if(judgeName==1)

Book=fopen("d:/Book.txt","a");

//文件存在且不存在相同書名時向后追加內(nèi)容

elseif(judgeName==2)

{

Book1=fopen("d:/Book1.txt","w");

//新建一個文件暫存Book中的信息,最后再返回源文件中

Book=fopen("d:/Book.txt","r");

//只讀打開原本的文件

}

}

else

Book=fopen("d:/Book.txt","w");

//文件不存在時新建一個文件

if(judgeName2)

{

fprintf(Book,"%d%s%d\n",bookNumber,name,num);

//寫入序號書名數(shù)量和換行符

bookNumber++;

fclose(Book);

}

else

{

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",readNumber,readName,readNum);

if(strcmp(name,readName)==0)

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum+1);

//寫入序號書名數(shù)量+1和換行符

else

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum);

//寫入序號書名數(shù)量和換行符

}

bookNumber++;

fclose(Book);

//關(guān)閉文件

fclose(Book1);

Book1=fopen("d:/Book1.txt","r");

Book=fopen("d:/Book.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Book1))

{

fscanf(Book1,"%d%s%d\n",readNumber,readName,readNum);

fprintf(Book,"%d%s%d\n",readNumber,readName,readNum);

}

fclose(Book);

fclose(Book1);

remove("d:/Book1.txt");

//刪除原文件

//rename("d:/Book1.txt","d:/Book.txt");

//將更改后的文件改名為原數(shù)據(jù)文件

}

printf("添加成功!\n");

//修改圖書信息函數(shù)

voidchangeBook(FILE*Book)

while(1)

{

charname[20]={0},readName[20]={0};

printf("

EditBookInformation

\n");

printf("[------------------------------------------]\n");

printf("\t請選擇需要修改的信息:\n

1.修改圖書名稱\n

2.修改圖書數(shù)量\n

3.返回主菜單\n");

printf("[------------------------------------------]\n");

intfunction,readNumber,readNum,find=0;

//功能選擇讀取到的序號讀取到的數(shù)量是否找到此書

//判斷修改后的書名是否和原有的重復(fù)

Book=fopen("d:/Book.txt","r");

//只讀打開原文件

intifNumber,ifNum;

charifName[20]={0};

FILE*ifUserExisted=fopen("d:/Users1.txt","w");

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",ifNumber,ifName,ifNum);

fprintf(ifUserExisted,"%d%s%d\n",ifNumber,ifName,ifNum);

}

fclose(ifUserExisted);

fclose(Book);

scanf("%d",function);

if(function==3)

{

remove("d:/Book1.txt");

//有時會多余創(chuàng)造了文件,需要刪除

return;

}

Book=fopen("d:/Book.txt","r");

//只讀打開原文件

FILE*Book1=fopen("d:/Book1.txt","w");

//先新建一個文件存儲更改后的信息

printf("請輸入需要更改的圖書名:");

for(inti=0;ii++)

//從輸入流取得需要添加的書本名字

{

if(i==0)

scanf("%c%c",enter,name[i]);

else

scanf("%c",name[i]);

if(name[i]==10)

//將最后的換行符改為空

{

name[i]=0;

break;

}

}

if(function==1)

{

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",readNumber,readName,readNum);

if(strcmp(name,readName)==0)

{

find=1;

//找到了此書

printf("您要將書名%s更改為:",name);

charchangeName[20]={0};

for(inti=0;ii++)

//從輸入流取得需要更改的書本名字

{

if(i==0)

scanf("%c",changeName[i]);

else

scanf("%c",changeName[i]);

if(changeName[i]==10)

//將最后的換行符改為空

{

changeName[i]=0;

break;

}

}

ifUserExisted=fopen("d:/Users1.txt","r");

//判斷更改后的名字是否會和已存在的書名沖突

while(!feof(ifUserExisted))

{

fscanf(ifUserExisted,"%d%s%d\n",ifNumber,ifName,ifNum);

if(strcmp(changeName,ifName)==0)

{

printf("更改失?。阂汛嬖诿Q為%s的圖書\n",changeName);

fclose(ifUserExisted);

fclose(Book);

//關(guān)閉文件

fclose(Book1);

return;

}

}

fprintf(Book1,"%d%s%d\n",readNumber,changeName,readNum);

//寫入序號更改后的書名數(shù)量和換行符

}

else

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum);

//寫入序號書名數(shù)量和換行符

}

if(find==0)

//若沒找到此書

{

printf("沒有找到此書!請重新輸入\n");

break;

}

fclose(Book);

//關(guān)閉文件

fclose(Book1);

Book1=fopen("d:/Book1.txt","r");

Book=fopen("d:/Book.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Book1))

{

fscanf(Book1,"%d%s%d\n",readNumber,readName,readNum);

fprintf(Book,"%d%s%d\n",readNumber,readName,readNum);

}

fclose(Book);

fclose(Book1);

remove("d:/Book1.txt");

//刪除原文件

//rename("d:/Book1.txt","d:/Book.txt");

//將更改后的文件改名為原數(shù)據(jù)文件

此方法成功率低!??!

printf("更改成功!\n");

}

elseif(function==2)

{

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",readNumber,readName,readNum);

if(strcmp(name,readName)==0)

{

find=1;

//找到了此書

printf("您要將數(shù)量%d更改為:",readNum);

intnewNum=0;

scanf("%d",newNum);

fprintf(Book1,"%d%s%d\n",readNumber,readName,newNum);

//寫入序號書名更改后的數(shù)量和換行符

}

else

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum);

//寫入序號書名數(shù)量和換行符

}

if(find==0)

//若沒找到此書

{

printf("沒有找到此書!請重新輸入");

break;

}

fclose(Book);

//關(guān)閉文件

fclose(Book1);

Book1=fopen("d:/Book1.txt","r");

Book=fopen("d:/Book.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Book1))

{

fscanf(Book1,"%d%s%d\n",readNumber,readName,readNum);

fprintf(Book,"%d%s%d\n",readNumber,readName,readNum);

}

fclose(Book);

fclose(Book1);

remove("d:/Book1.txt");

//刪除原文件

//rename("d:/Book1.txt","d:/Book.txt");

//將更改后的文件改名為原數(shù)據(jù)文件

此方法易出現(xiàn)問題!?。?/p>

printf("更改成功!\n");

}

else

{

printf("輸入格式有誤,請重新輸入!");

break;

}

}

//刪除書籍的函數(shù)

voiddelBook(FILE*Book)

while(1)

{

printf("請輸入您想刪除的圖書名:(輸入\"-r\"返回上一級)");

chardelName[20]={0};

for(inti=0;ii++)

//從輸入流取得需要刪除的書本名字

{

//if(i==0)

//

scanf("%c%c",enter,delName[i]);

//else

scanf("%c",delName[i]);

if(delName[i]==10)

//將最后的換行符改為空

{

delName[i]=0;

break;

}

}

if(strcmp(delName,"-r")==0)

//輸入返回上一級的指示后返回

return;

intreadNumber,readNum,find=0;

charreadName[20]={0};

Book=fopen("d:/Book.txt","r");

FILE*Book1=fopen("d:/Book1.txt","w");

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",readNumber,readName,readNum);

if(strcmp(delName,readName)==0)

{

find=1;

//找到了此書

//因為要刪除此條信息,所以不再向新文件中輸出它

}

else

{

if(find==1)

fprintf(Book1,"%d%s%d\n",readNumber-1,readName,readNum);

//排在刪除后的寫入-1的序號書名數(shù)量和換行符

else

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum);

//刪除前的寫入的序號書名數(shù)量和換行符

}

}

if(find==0)

//若沒找到此書

{

printf("沒有找到此書!請重新輸入\n");

continue;

}

fclose(Book);

fclose(Book1);

Book1=fopen("d:/Book1.txt","r");

Book=fopen("d:/Book.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Book1))

{

fscanf(Book1,"%d%s%d\n",readNumber,readName,readNum);

fprintf(Book,"%d%s%d\n",readNumber,readName,readNum);

}

fclose(Book);

fclose(Book1);

remove("d:/Book1.txt");

//刪除原文件

printf("刪除成功!\n");

}

//展示全部圖書的函數(shù)

voidshowBook(FILE*Book)

printf("

Library

\n");

printf("[------------------------------------------]\n");

printf("\t序號\t書名\t\t數(shù)量\n");

charreadName[20]={0};

intreadNumber,readNum;

Book=fopen("d:/Book.txt","r");

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",readNumber,readName,readNum);

printf("\t%d\t%s\t\t%d\n",readNumber,readName,readNum);

}

fclose(Book);

printf("[------------------------------------------]\n");

//向管理員展示全部用戶的函數(shù)

voidshowUsers(FILE*Users)

printf("

Users

\n");

printf("[------------------------------------------]\n");

printf("\t序號\t姓名\t所借閱圖書\n");

charreadName[20]={0},borrowBook[20]={0};

intreadNumber;

Users=fopen("d:/Users.txt","r");

while(!feof(Users))

{

fscanf(Users,"%d%s%s\n",readNumber,readName,borrowBook);

printf("\t%d\t%s\t%s\n",readNumber,readName,borrowBook);

}

fclose(Users);

printf("[------------------------------------------]\n");

//添加用戶函數(shù)

voidaddUsers(FILE*Users)

FILE*Users1;

//當(dāng)文件和用戶都存在時需要新建文件來更改信息

intjudgeName=0;

//判斷此用戶是否已經(jīng)存在

intnum=1,readNumber;

//

存放讀到的書本數(shù)量

讀到的用戶序號

charname[20]={0},readName[20]={0},borrowBook[20]={"None"},readBorrowBook[20]={"None"};

//存放用戶名字

暫時存放讀到的字符串名

printf("請輸入要添加的用戶名:");

for(inti=0;ii++)

//從輸入流取得需要添加的用戶名

{

if(i==0)

scanf("%c%c",enter,name[i]);

else

scanf("%c",name[i]);

if(name[i]==10)

//將最后的換行符改為空

{

name[i]=0;

break;

}

}

if(access("d:/Users.txt",F_OK)==0)

//access函數(shù)判斷文件是否存在,存在返回值為0使用的頭文件為io

{

judgeName=1;

FILE*judge=fopen("d:/Users.txt","r");

//讀取數(shù)據(jù)文件,查找是否已經(jīng)存在此用戶

while(!feof(judge))

{

fscanf(judge,"%d%s%s",readNumber,readName,readBorrowBook);//由于readName已經(jīng)表示地址,不需要取地址符

fscanf(judge,"\n");

//讀入換行符,準(zhǔn)備下一行的讀取

if(strcmp(name,readName)==0)

//發(fā)現(xiàn)已經(jīng)存在此用戶后跳出循環(huán)

{

printf("已經(jīng)存在此用戶,無法添加。");

//已經(jīng)存在此用戶,返回

return;

}

}

fclose(judge);

//關(guān)閉用于判斷而打開的文件

usersNumber=readNumber+1;

if(judgeName==1)

Users=fopen("d:/Users.txt","a");

//文件存在且不存在相同用戶時向后追加內(nèi)容

}

else

Users=fopen("d:/Users.txt","w");

//文件不存在時新建一個文件

fprintf(Users,"%d%s%s\n",usersNumber,name,borrowBook);

//寫入序號用戶名所借書和換行符

usersNumber++;

fclose(Users);

printf("添加成功!\n");

//修改讀者信息函數(shù)

voidchangeUsers(FILE*Users)

while(1)

{

charname[20]={0},readName[20]={0},borrowBook[20]={"None"};

printf("

EditReaderName

\n");

printf("[------------------------------------------]\n");

printf("\t請選擇需要修改的信息:\n

1.修改讀者名稱\n

2.返回主菜單\n");

printf("[------------------------------------------]\n");

intfunction,readNumber,find=0;

//功能選擇讀取到的序號

是否找到此書

Users=fopen("d:/Users.txt","r");

//只讀打開原文件

//此處創(chuàng)建ifUserExisted,一會用于查找是否存在相同的名字

intifNumber;

charifName[20]={0},ifBorrow[20]={0};

FILE*ifUserExisted=fopen("d:/Book1.txt","w");

while(!feof(Users))

{

fscanf(Users,"%d%s%s\n",ifNumber,ifName,ifBorrow);

fprintf(ifUserExisted,"%d%s%s\n",ifNumber,ifName,ifBorrow);

}

fclose(ifUserExisted);

fclose(Users);

Users=fopen("d:/Users.txt","r");

//只讀打開原文件

scanf("%d",function);

if(function==2)

{

remove("d:/Users1.txt");

//有時會多余創(chuàng)造了文件,需要刪除

return;

}

FILE*Users1=fopen("d:/Users1.txt","w");

//先新建一個文件存儲更改后的信息

printf("請輸入需要更改的用戶名:");

for(inti=0;ii++)

//從輸入流取得需要更改的讀者名字

{

if(i==0)

scanf("%c%c",enter,name[i]);

else

scanf("%c",name[i]);

if(name[i]==10)

//將最后的換行符改為空

{

name[i]=0;

break;

}

}

if(function==1)

{

while(!feof(Users))

{

fscanf(Users,"%d%s%s\n",readNumber,readName,borrowBook);

if(strcmp(name,readName)==0)

{

find=1;

//找到了此讀者

printf("您要將讀者名\"%s\"更改為:",name);

charchangeName[20]={0};

for(inti=0;ii++)

//從輸入流取得需要更改的用戶名字

{

if(i==0)

scanf("%c",changeName[i]);

else

scanf("%c",changeName[i]);

if(changeName[i]==10)

//將最后的換行符改為空

{

changeName[i]=0;

break;

}

}

ifUserExisted=fopen("d:/Book1.txt","r");

//判斷更改后的名字是否會和存在的用戶名沖突

while(!feof(ifUserExisted))

{

fscanf(ifUserExisted,"%d%s%s\n",ifNumber,ifName,ifBorrow);

if(strcmp(changeName,ifName)==0)

{

printf("更改失敗:已存在名稱為%s的讀者\n",changeName);

fclose(ifUserExisted);

fclose(Users);

//關(guān)閉文件

fclose(Users1);

return;

}

}

fprintf(Users1,"%d%s%s\n",readNumber,changeName,borrowBook);

//寫入序號更改后的讀者名所借書籍和換行符

}

else

fprintf(Users1,"%d%s%s\n",readNumber,readName,borrowBook);

//寫入序號書名數(shù)量和換行符

}

if(find==0)

//若沒找到此讀者

{

printf("沒有找到此讀者!請重新輸入\n");

break;

}

fclose(Users);

//關(guān)閉文件

fclose(Users1);

Users1=fopen("d:/Users1.txt","r");

Users=fopen("d:/Users.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Users1))

{

fscanf(Users1,"%d%s%s\n",readNumber,readName,borrowBook);

fprintf(Users,"%d%s%s\n",readNumber,readName,borrowBook);

}

fclose(Users);

fclose(Users1);

remove("d:/Users1.txt");

//刪除原文件

//rename("d:/Book1.txt","d:/Book.txt");

//將更改后的文件改名為原數(shù)據(jù)文件

此方法成功率低?。?!

printf("更改成功!\n");

}

else

{

printf("輸入格式有誤,請重新輸入!\n");

break;

}

}

//刪除用戶的函數(shù)

voiddelUsers(FILE*Users)

while(1)

{

printf("請輸入您想刪除的讀者名:(輸入\"-r\"返回上一級)");

chardelName[20]={0};

for(inti=0;ii++)

//從輸入流取得需要刪除的用戶名字

{

//if(i==0)

//

scanf("%c%c",enter,delName[i]);

//else

scanf("%c",delName[i]);

if(delName[i]==10)

//將最后的換行符改為空

{

delName[i]=0;

break;

}

}

if(strcmp(delName,"-r")==0)

//輸入返回上一級的指示后返回

return;

intreadNumber,find=0;

charreadName[20]={0},borrowBook[20]={"None"};

Users=fopen("d:/Users.txt","r");

FILE*Users1=fopen("d:/Users1.txt","w");

while(!feof(Users))

{

fscanf(Users,"%d%s%s\n",readNumber,readName,borrowBook);

if(strcmp(delName,readName)==0)

{

find=1;

//找到了此讀者

//因為要刪除此條信息,所以不再向新文件中輸出它

}

else

{

if(find==1)

fprintf(Users1,"%d%s%s\n",readNumber-1,readName,borrowBook);

//排在刪除后的寫入-1的序號讀者名所借書和換行符

else

fprintf(Users1,"%d%s%s\n",readNumber,readName,borrowBook);

//刪除前的寫入的序號讀者名所借書和換行符

}

}

if(find==0)

//若沒找到此讀者

{

printf("沒有找到此讀者!請重新輸入\n");

continue;

}

fclose(Users1);

fclose(Users);

Users1=fopen("d:/Users1.txt","r");

Users=fopen("d:/Users.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Users1))

{

fscanf(Users1,"%d%s%s\n",readNumber,readName,borrowBook);

fprintf(Users,"%d%s%s\n",readNumber,readName,borrowBook);

}

fclose(Users1);

fclose(Users);

remove("d:/Users1.txt");

//刪除原文件

printf("刪除成功!\n");

}

//借閱函數(shù)

voidborrowBooking(charreaderName[])

printf("請輸入您想借閱的圖書名:");

charname[20]={0};

for(inti=0;ii++)

//從輸入流取得圖書名

{

if(i==0)

scanf("%c%c",enter,name[i]);

else

scanf("%c",name[i]);

if(name[i]==10)

//將最后的換行符改為空

{

name[i]=0;

break;

}

}

charreadName[20]={0};

intreadNumber,readNum,find=0;

//更改被借閱的圖書的信息

FILE*Book=fopen("d:/Book.txt","r");

FILE*Book1=fopen("d:/Book1.txt","w");

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",readNumber,readName,readNum);

if(strcmp(name,readName)==0)

{

find=1;

if(readNum1)

{

printf("借閱失敗:無剩余可借閱的%s!\n",readName);

return;

}

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum-1);//若找到需要借閱的圖書,則在此書數(shù)量上減1

}

else

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum);

//刪除前的寫入的序號讀者名所借書和換行符

}

if(find==0)

//若沒找到此書

{

printf("借閱失敗:沒有找到此書!\n");

return;

}

fclose(Book);

fclose(Book1);

Book1=fopen("d:/Book1.txt","r");

Book=fopen("d:/Book.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Book1))

{

fscanf(Book1,"%d%s%d\n",readNumber,readName,readNum);

fprintf(Book,"%d%s%d\n",readNumber,readName,readNum);

}

fclose(Book1);

fclose(Book);

remove("d:/Book1.txt");

//刪除原文件

//更改讀者的信息

FILE*Users=fopen("d:/Users.txt","r");

FILE*Users1=fopen("d:/Users1.txt","w");

charborrowBook[20]={"None"};

while(!feof(Users))

{

fscanf(Users,"%d%s%s\n",readNumber,readName,borrowBook);

if(strcmp(readerName,readName)==0)

fprintf(Users1,"%d%s%s\n",readNumber,readName,name);//在讀者的借閱圖書上寫上所借閱的圖書名

else

fprintf(Users1,"%d%s%s\n",readNumber,readName,borrowBook);

}

fclose(Users1);

fclose(Users);

Users1=fopen("d:/Users1.txt","r");

Users=fopen("d:/Users.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Users1))

{

fscanf(Users1,"%d%s%s\n",readNumber,readName,borrowBook);

fprintf(Users,"%d%s%s\n",readNumber,readName,borrowBook);

}

fclose(Users1);

fclose(Users);

remove("d:/Users1.txt");

//刪除原文件

有時候還是刪不掉

printf("借閱成功!\n");

//還書函數(shù)

voidreturnBooking(charreaderName[],charborrowBook[])

charreadName[20]={0};

intreadNumber,readNum,find=0;

//更改被還回的圖書的信息

FILE*Book=fopen("d:/Book.txt","r");

FILE*Book1=fopen("d:/Book1.txt","w");

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",readNumber,readName,readNum);

if(strcmp(borrowBook,readName)==0)

{

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum+1);//若找到被還的圖書,則在此書數(shù)量上加1

find=1;

}

else

fprintf(Book1,"%d%s%d\n",readNumber,readName,readNum);//不是還回的書

}

fclose(Book);

fclose(Book1);

Book1=fopen("d:/Book1.txt","r");

Book=fopen("d:/Book.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Book1))

{

fscanf(Book1,"%d%s%d\n",readNumber,readName,readNum);

fprintf(Book,"%d%s%d\n",readNumber,readName,readNum);

}

bookNumber=readNumber+1;

fclose(Book1);

fclose(Book);

remove("d:/Book1.txt");

//刪除原文件

if(find==0)

//還書時沒有書城中沒有此書,直接添加一本

{

FILE*Book;

Book=fopen("d:/Book.txt","a");

fprintf(Book,"%d%s1\n",bookNumber,borrowBook);

//寫入序號書名數(shù)量和換行符

bookNumber++;

fclose(Book);

}

//更改讀者的信息

FILE*Users=fopen("d:/Users.txt","r");

FILE*Users1=fopen("d:/Users1.txt","w");

charrborrowBook[20]={"None"};

while(!feof(Users))

{

fscanf(Users,"%d%s%s\n",readNumber,readName,rborrowBook);

if(strcmp(readerName,readName)==0)

fprintf(Users1,"%d%s%s\n",readNumber,readName,"None");//還回書后所借閱圖書變?yōu)?None"

else

fprintf(Users1,"%d%s%s\n",readNumber,readName,rborrowBook);

}

fclose(Users1);

fclose(Users);

Users1=fopen("d:/Users1.txt","r");

Users=fopen("d:/Users.txt","w+");

//刷新原文件,再次寫入正確數(shù)據(jù)

while(!feof(Users1))

{

fscanf(Users1,"%d%s%s\n",readNumber,readName,rborrowBook);

fprintf(Users,"%d%s%s\n",readNumber,readName,rborrowBook);

}

fclose(Users1);

fclose(Users);

remove("d:/Users1.txt");

//刪除原文件

有時候還是刪不掉

printf("成功還回%s\n",borrowBook);

//單獨查詢功能,根據(jù)編號或書名查詢書被哪些人借走

voidsearchBook()

while(1)

{

intfunction=0;

FILE*Book=fopen("d:/Book.txt","r");

FILE*Users=fopen("d:/Users.txt","r");

charreaderName[20]={0},bookName[20]={0},borrowBook[20]={0},name[20]={0};

intbookNumber,bookNum,find=0,readerNumber;

printf("

Search

\n");

printf("[------------------------------------------]\n");

printf("\t\t請選擇查詢功能:\n\t1.根據(jù)編號查詢\n\t2.根據(jù)書名查詢\n\t3.返回主界面\n");

printf("[------------------------------------------]\n");

scanf("%d",function);//輸入需要的功能

switch(function)

{

case1:

printf("您要查找的書序號是:");

scanf("%d",function);//輸入需要查找的圖書編號

while(!feof(Book))

{

fscanf(Book,"%d%s%d\n",bookNumber,bookName,bookNum);//由于bookName已經(jīng)表示地址,不需要取地址符

if(bookNumber==function)

//發(fā)現(xiàn)查找的書后跳出循環(huán)

{

find=1;//找到書

break;

}

}

if(find==0)

{

printf("沒有找到編號為%d的圖書。\n",function);

break;

}

printf("

SearchResult

\n");

printf("[------------------------------------------]\n");

find=0;//需要在查找誰借閱時再次使用

printf("\t編號:\t\t%d\n\t書名:\t\t%s\n\t剩余數(shù)量:\t%d\n\t",bookNumber,bookName,bookNum);

while(!feof(Users))

{

fscanf(Users,"%d%s%s\n",readerNumber,readerName,borrowBook);//遍歷讀者查找誰借閱了這本書

if(strcmp(borrowBook,bookName)==0)

{

if(find==0)

{

find=1;

printf("借閱此書的讀者:");

printf("%s",readerName);

}

else

printf(",%s",readerName);

}

}

if(find==0)

printf("還沒有讀者借閱此書。\n");

else

printf("\n");

printf("[------------------------------------------]\n");

printf("輸入回車返回...\n");

enter=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論