版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 永豐鎮(zhèn)衛(wèi)生院請銷假制度
- 餐飲場所衛(wèi)生制度
- 雞場衛(wèi)生防疫工作制度
- 規(guī)范網(wǎng)約車運營管理制度
- 小學(xué)食品衛(wèi)生檢查制度
- 餐廳食品衛(wèi)生獎懲制度
- 交管站財務(wù)制度
- 村衛(wèi)生室醫(yī)師定考制度
- 汽車大修廠運營管理制度
- 婦幼衛(wèi)生上報制度
- T-CCTAS 237-2025 城市軌道交通市域快線車輛運營技術(shù)規(guī)范
- 園林環(huán)衛(wèi)安全培訓(xùn)內(nèi)容課件
- 軟件系統(tǒng)上線測試與驗收報告
- 冬季交通安全測試題及答案解析
- 2025年國家能源局系統(tǒng)公務(wù)員面試模擬題及備考指南
- (2025年標(biāo)準(zhǔn))圈內(nèi)認(rèn)主協(xié)議書
- 2025年安徽省中考化學(xué)真題及答案
- 2025年軍隊文職人員統(tǒng)一招聘面試( 臨床醫(yī)學(xué))題庫附答案
- 海馬體核磁掃描課件
- 某電力股份企業(yè)同熱三期2×100萬千瓦項目環(huán)評報告書
- 2026屆上海市部分區(qū)中考一模語文試題含解析
評論
0/150
提交評論