功能展示運行效果:
主界面:
圖書管理界面:
讀者管理界面:文章來源:http://www.zghlxwxcb.cn/news/detail-508694.html
借還書管理界面:文章來源地址http://www.zghlxwxcb.cn/news/detail-508694.html
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<Windows.h>
#include<conio.h>
using namespace std;
#define BOOK_NUM 200
#define READER_NUM 100
#define LEN_BOOK sizeof(Book)
#define LEN_READER sizeof(Reader)
//圖書結(jié)構(gòu)體
typedef struct Book
{
int Num;//圖書編號
char Name[15];//圖書名稱
char Auther[15];//圖書作者
char Press[15];//圖書出版社
int Amount;//圖書數(shù)量
}Book;
//讀者結(jié)構(gòu)體
typedef struct Reader
{
int Num;//讀者編號
char Name[15];//讀者姓名
char Sex[4];//讀者性別
int Max;//讀者最大可借閱數(shù)量
int Amount;//讀者當前可借閱的數(shù)量
int BookId[20];//讀者已經(jīng)借閱的圖書列表
}Reader;
//全局結(jié)構(gòu)體記錄所有圖書信息和讀者信息
Book astBook[BOOK_NUM];
Reader astReader[READER_NUM];
void Menu()
{
system("cls");//清屏
cout << "\t\t" << "*********** -圖書管理主菜單- ***********" << endl << endl;
cout << "\t\t" << "*********** 1.圖書管理 ***********" << endl;
cout << "\t\t" << "*********** 2.讀者管理 ***********" << endl;
cout << "\t\t" << "*********** 3.借還書登記 ***********" << endl;
cout << "\t\t" << "*********** 0.退出系統(tǒng) ***********" << endl << endl;
cout << "\t\t" << "請選擇項目:";
}
void ShowBookMenu()
{
system("cls");//清屏
cout << "\t\t" << "*********** -圖書管理子菜單- ***********" << endl << endl;
cout << "\t\t" << "*********** 1.顯示圖書 ***********" << endl;
cout << "\t\t" << "*********** 2.添加圖書 ***********" << endl;
cout << "\t\t" << "*********** 3.查找圖書 ***********" << endl;
cout << "\t\t" << "*********** 4.刪除圖書 ***********" << endl;
cout << "\t\t" << "*********** 5.修改圖書 ***********" << endl;
cout << "\t\t" << "*********** 0.返回主菜單 ***********" << endl << endl;
cout << "\t\t" << "請選擇項目:";
}
void ShowReaderMenu()
{
system("cls");//清屏
cout << "\t\t" << "*********** -讀者管理子菜單- ***********" << endl << endl;
cout << "\t\t" << "*********** 1.顯示讀者 ***********" << endl;
cout << "\t\t" << "*********** 2.添加讀者 ***********" << endl;
cout << "\t\t" << "*********** 3.查找讀者 ***********" << endl;
cout << "\t\t" << "*********** 4.刪除讀者 ***********" << endl;
cout << "\t\t" << "*********** 5.修改讀者 ***********" << endl;
cout << "\t\t" << "*********** 0.返回主菜單 ***********" << endl << endl;
cout << "\t\t" << "請選擇項目:";
}
void ShowBorrowReturnMenu()
{
system("cls");//清屏
cout << "\t\t" << "*********** -借還書子菜單- ***********" << endl << endl;
cout << "\t\t" << "*********** 1.借書登記 ***********" << endl;
cout << "\t\t" << "*********** 2.還書登記 ***********" << endl;
cout << "\t\t" << "*********** 0.返回主菜單 ***********" << endl << endl;
cout << "\t\t" << "請選擇項目:";
}
//讀文件到內(nèi)存中,再內(nèi)存中操作
int ReadBookFile(const char* pcMode)
{
int BookRecond = 0;
FILE* pfBook;//文件指針
pfBook = fopen("G:\\book.txt", pcMode);
if (pfBook == NULL)
{
return -1;
}
while (!feof(pfBook))//讀文件末尾
{
if (fread(&astBook[BookRecond], LEN_BOOK, 1, pfBook))
{
BookRecond++;
}
}
fclose(pfBook);
return BookRecond;
}
//顯示圖書信息
void ShowBook()
{
int BookRecord;//記錄條數(shù)
system("cls");
BookRecord = ReadBookFile("rb");//讀文件
if (BookRecord == -1)
{
cout << "\t文件打開失敗,請?zhí)砑訄D書信息" << endl;
}
if (BookRecord == 0)
{
cout << "\t文件中沒有圖書信息" << endl;
}
else
{
cout << endl << "\t**********************************************************" << endl << endl << endl;
cout << "\t\t" << "編號" << "\t書名" << "\t作者" << "\t出版社" << "\t庫存" << endl;
for (int i = 0; i < BookRecord; i++)
{
cout << "\t\t" << astBook[i].Num << "\t" << astBook[i].Name << "\t" << astBook[i].Auther << "\t" << astBook[i].Press << "\t" << astBook[i].Amount << endl;
}
cout << endl << endl << "\t**********************************************************" << endl;
}
}
//添加圖書信息
void AddBook()
{
FILE* pfBook;
int BookRecord;
int FlagExist;//圖書編號存在標記
char Flag;//記錄y/n選項
system("cls");
BookRecord = ReadBookFile("ab+");//ab+追加方式打開或新建二進制文件
if (BookRecord == -1)
{
cout << "\t文件打開失敗" << endl;
return;
}
else if (BookRecord == 0)
{
cout << "\t沒有圖書信息" << endl;
}
else
{
ShowBook();//如果圖書記錄不為0則顯示所有圖書
}
//循環(huán)錄入圖書信息
cout << "\t是否輸入信息(y/n)";
cin >> Flag;
cout << endl;
if (Flag == 'n')
{
return;
}
pfBook = fopen("G:\\book.txt", "ab+");
if (pfBook == NULL)
{
cout << "\t文件打開失敗" << endl;
return;
}
while (Flag == 'y')
{
//錄入數(shù)據(jù)
if (BookRecord >= BOOK_NUM)
{
cout << "\t錄入已滿" << endl;
fclose(pfBook);
return;
}
//圖書編號不能重復
cout << "\t請輸入圖書編號:";
do {
FlagExist = 0;
cin >> astBook[BookRecord].Num;
cout << endl;
for (int i = 0; i < BookRecord; i++)//循環(huán)判斷圖書編號,直到編號不重復為止
{
if (astBook[i].Num == astBook[BookRecord].Num)
{
FlagExist = 1;
cout << "\t該圖書編號已經(jīng)存在,請重新輸入編號:";
break;
}
}
} while (FlagExist == 1);
cout << "\t請輸入圖書名稱:";
cin >> astBook[BookRecord].Name;
cout << endl;
cout << "\t請輸入圖書作者:";
cin >> astBook[BookRecord].Auther;
cout << endl;
cout << "\t請輸入圖書出版社:";
cin >> astBook[BookRecord].Press;
cout << endl;
cout << "\t請輸入圖書庫存量:";
cin >> astBook[BookRecord].Amount;
cout << endl;
//將新增的圖書信息寫入到文件中
if (fwrite(&astBook[BookRecord], LEN_BOOK, 1, pfBook) != 1)
{
cout << "\t無法保存該信息" << endl;
return;
}
else
{
cout << "\t" << astBook[BookRecord].Num << "號圖書信息已經(jīng)保存" << endl;
BookRecord++;
}
cout << endl;
cout << "\t是否繼續(xù)輸入信息(y/n):";
cin >> Flag;
cout << endl;
}
fclose(pfBook);
if (Flag != 'y' && Flag != 'n')
{
cout << "\t輸入錯誤,請退出重新輸入" << endl;
}
else
{
cout << "\t成功添加圖書" << endl;
}
}
//查找圖書信息
int SearchBook()
{
int i;
int BookRecord;
int BookNum;//需要查找的ID
int BookID = 0;//查找到的ID
system("cls");
BookRecord = ReadBookFile("rb");
if (BookRecord == -1)
{
cout << "\t文件打開失敗" << endl;
cout << endl << "按任意鍵返回" << endl;
_getch();
return -2;//文件打開失敗,返回-2
}
else if (BookRecord == 0)
{
cout << "\t沒有圖書記錄" << endl;
cout << endl << "按任意鍵返回" << endl;
_getch();
return -3;//文件打開失敗,返回-3
}
//進行查找
cout << "\t請輸入圖書編號:";
cin >> BookNum;
cout << endl;
for (i = 0; i < BookRecord; i++)
{
if (BookNum == astBook[i].Num)
{
BookID = i;//找到后返回記錄編號
cout << "\t\t" << "編號" << "\t書名" << "\t作者" << "\t出版社" << "\t庫存" << endl;
cout << "\t\t" << astBook[i].Num << "\t" << astBook[i].Name << "\t" << astBook[i].Auther << "\t" << astBook[i].Press << "\t" << astBook[i].Amount << endl;
break;
}
}
if (i == BookRecord)
{
cout << "\t找不到" << BookNum << "號圖書信息";
BookID = -1;
}
return BookID;
}
//刪除圖書信息
void DeleteBook()
{
FILE* pfbook;
int BookID;
int BookRecord;
char Flag;
system("cls");
BookID = SearchBook();
cout << endl;
//文件打開失敗
if (BookID == -1)
{
return;
}
if (BookID == -3)
{
return;
}
BookRecord = ReadBookFile("rb");
cout << "\t已經(jīng)找到該圖書,是否刪除(y/n):";
cin >> Flag;
cout << endl;
int index = astBook[BookID].Num;//刪除的信息編號
//把要刪除的記錄后的數(shù)組全部向前移動一位,然后再寫入文件中
if (Flag == 'n')
{
return;
}
else if (Flag == 'y')
{
for (int i = BookID; i < BookRecord - 1; i++)
{
astBook[i] = astBook[i + 1];
}
BookRecord--;
}
//寫入文件
if (Flag == 'y')
{
pfbook = fopen("G:\\book.txt", "wb");
if (pfbook != NULL)
{
for (int i = 0; i < BookRecord; i++)
{
if (fwrite(&astBook[i], LEN_BOOK, 1, pfbook) != 1)
{
cout << "\t無法保存該信息" << endl;
return;
}
}
fclose(pfbook);
cout << "\t" << index << "號圖書信息已經(jīng)成功刪除" << endl;
}
}
else
{
cout << "\t輸入錯誤,請退出重新輸入" << endl;
}
}
//保存到文件中
void SaveBookFile(int BookID)
{
FILE* pfbook;
pfbook = fopen("G:\\book.txt", "rb+");
if (pfbook != NULL)
{
fseek(pfbook, LEN_BOOK * BookID, SEEK_SET);
if (fwrite(&astBook[BookID], LEN_BOOK, 1, pfbook) != 1)
{
cout << "\t無法保存該信息";
}
}
fclose(pfbook);
}
//修改圖書信息
void ModifyBook()
{
int BookID, BookRecord;
int FlagExist;//圖書編號存在標記
int item, Num;
system("cls");
BookID = SearchBook();
cout << endl;
//文件打開失敗
if (BookID == -1)
{
return;
}
if (BookID == -3)
{
return;
}
//找到該序號的圖書,可以進行修改操作
BookRecord = ReadBookFile("rb");
//顯示修改選項的子菜單
cout << endl << "\t1.編號 " << "2.書名 " << "3.作者 " << "4.出版社 " << "5.圖書庫存量" << endl << endl;
cout << "\t請輸入需要修改的相應信息(輸入相應數(shù)字):";
cin >> item;
if (item > 5 || item < 1)
{
cout << endl << "\t輸入數(shù)字有誤,請退出重新輸入";
return;
}
switch (item)
{
case 1:
do {
FlagExist = 0;
cout << endl << "\t請輸入修改后的圖書編號:";
cin >> Num;
cout << endl;
for (int i = 0; i < BookRecord; i++)
{
if (Num == astBook[i].Num && i != BookID)//數(shù)字和已有編號重復不行,更改的編號原來一樣可以
{
FlagExist = 1;
cout << "\t輸入錯誤,該圖書編號已經(jīng)存在,請重新輸入" << endl;
break;
}
}
} while (FlagExist == 1);
astBook[BookID].Num = Num;
break;
case 2:
cout << endl << "\t請輸入修改后的圖書名稱:";
cin >> astBook[BookID].Name;
cout << endl;
break;
case 3:
cout << endl << "\t請輸入修改后的圖書作者:";
cin >> astBook[BookID].Auther;
cout << endl;
break;
case 4:
cout << endl << "\t請輸入修改后的圖書出版社:";
cin >> astBook[BookID].Press;
cout << endl;
break;
case 5:
cout << endl << "\t請輸入修改后的圖書庫存量:";
cin >> astBook[BookID].Amount;
cout << endl;
break;
}
//保存到文件中
SaveBookFile(BookID);
cout << "\t圖書信息修改成功";
}
//書籍管理系統(tǒng)
void MangaeBook()
{
int item;
ShowBookMenu();
cin >> item;
while (item)
{
switch (item)
{
case 1:
ShowBook();//顯示圖書信息
break;
case 2:
AddBook();//添加圖書信息
break;
case 3:
SearchBook();//查找圖書信息
break;
case 4:
DeleteBook();//刪除圖書信息
break;
case 5:
ModifyBook();//修改圖書信息
break;
default:
cout << "\t\t" << "輸入錯誤,請重新輸入" << endl;
Sleep(1500);
break;
}
cout << endl << "按任意鍵返回" << endl;
_getch();//從控件中獲取字符而無需顯示
ShowBookMenu();
cin >> item;
}
}
int ReadReaderFile(const char*fopenMode)
{
int ReaderRecord = 0;
FILE* pfReader;
pfReader = fopen("G:\\reader.txt", fopenMode);
if (pfReader == NULL)
{
return -1;
}
while (!feof(pfReader))//feof讀文件的末尾
{
if (fread(&astReader[ReaderRecord], LEN_READER, 1, pfReader))
{
ReaderRecord++;
}
}
fclose(pfReader);
return ReaderRecord;
}
//顯示讀者信息
void ShowReader()
{
int ReaderRecord;//記錄條數(shù)
system("cls");
ReaderRecord = ReadReaderFile("rb");//讀文件
if (ReaderRecord == -1)
{
cout << "\t文件打開失敗,請?zhí)砑幼x者信息" << endl;
}
if (ReaderRecord == 0)
{
cout << "\t文件中沒有讀者信息" << endl;
}
else
{
cout << endl << "\t*******************************************************************" << endl << endl << endl;
cout << "\t\t" << "編號" << "\t姓名" << "\t性別" << "\t最大可借閱量" << "\t當前可借閱量" << endl;
for (int i = 0; i < ReaderRecord; i++)
{
cout << "\t\t" << astReader[i].Num << "\t" << astReader[i].Name << "\t" << astReader[i].Sex << "\t" << astReader[i].Max << "\t\t" << astReader[i].Amount << endl;
}
cout << endl << endl << "\t*******************************************************************" << endl;
}
}
//添加讀者信息
void AddReader()
{
FILE* pfReader;
int ReaderRecord;
int FlagExist;//讀者編號存在標記
char Flag;//記錄y/n選項
system("cls");
ReaderRecord = ReadReaderFile("ab+");//ab+追加方式打開或新建二進制文件
if (ReaderRecord == -1)
{
cout << "\t文件打開失敗" << endl;
return;
}
else if (ReaderRecord == 0)
{
cout << "\t沒有讀者信息" << endl;
}
else
{
ShowReader();//如果圖書記錄不為0則顯示所有讀者信息
}
//循環(huán)錄入圖書信息
cout << "\t是否輸入信息(y/n)";
cin >> Flag;
cout << endl;
if (Flag == 'n')
{
return;
}
pfReader = fopen("G:\\reader.txt", "ab+");
if (pfReader == NULL)
{
cout << "\t文件打開失敗" << endl;
return;
}
while (Flag == 'y')
{
//錄入數(shù)據(jù)
if (ReaderRecord >= READER_NUM)
{
cout << "\t錄入已滿" << endl;
fclose(pfReader);
return;
}
//圖書編號不能重復
cout << "\t請輸入讀者編號:";
do {
FlagExist = 0;
cin >> astReader[ReaderRecord].Num;
cout << endl;
for (int i = 0; i < ReaderRecord; i++)//循環(huán)判斷圖書編號,直到編號不重復為止
{
if (astReader[i].Num == astReader[ReaderRecord].Num)
{
FlagExist = 1;
cout << "\t該讀者編號已經(jīng)存在,請重新輸入編號:";
break;
}
}
} while (FlagExist == 1);
cout << "\t請輸入讀者姓名:";
cin >> astReader[ReaderRecord].Name;
cout << endl;
cout << "\t請輸入讀者性別(F/M):";
cin >> astReader[ReaderRecord].Sex;
cout << endl;
while (astReader[ReaderRecord].Sex != 0)
{
if (strcmp(astReader[ReaderRecord].Sex, "F") == 0 || strcmp(astReader[ReaderRecord].Sex, "M") == 0)
{
break;
}
cout << "\t輸入錯誤,只許輸入'F'或'M',請重新輸入";
cin >> astReader[ReaderRecord].Sex;
cout << endl;
}
cout << "\t請輸入讀者最大可借閱數(shù)量:";//todo可細化判斷數(shù)量
cin >> astReader[ReaderRecord].Max;
cout << endl;
cout << "\t請輸入讀者當前可借閱數(shù)量:";//兩種一開始是相等的
cin >> astReader[ReaderRecord].Amount;
cout << endl;
//將新增的讀者信息寫入到文件中
if (fwrite(&astReader[ReaderRecord], LEN_READER, 1, pfReader) != 1)
{
cout << "\t無法保存該信息" << endl;
return;
}
else
{
cout << "\t" << astReader[ReaderRecord].Num << "號讀者信息已經(jīng)保存" << endl;
ReaderRecord++;
}
cout << endl;
cout << "\t是否繼續(xù)輸入信息(y/n):";
cin >> Flag;
cout << endl;
}
fclose(pfReader);
if (Flag != 'y' && Flag != 'n')
{
cout << "\t輸入錯誤,請退出重新輸入" << endl;
}
else
{
cout << "\t成功添加讀者信息" << endl;
}
}
//查找圖讀者信息
int SearchReader()
{
int i;
int ReaderRecord;
int ReaderNum;//需要查找的ID
int ReaderID = 0;//查找到的ID
system("cls");
ReaderRecord = ReadReaderFile("rb");
if (ReaderRecord == -1)
{
cout << "\t文件打開失敗" << endl;
cout << endl << "按任意鍵返回" << endl;
_getch();
return -2;//文件打開失敗,返回-2
}
else if (ReaderRecord == 0)
{
cout << "\t沒有讀者記錄" << endl;
cout << endl << "按任意鍵返回" << endl;
_getch();
return -3;//文件打開失敗,返回-3
}
//進行查找
cout << "\t請輸入讀者編號:";
cin >> ReaderNum;
cout << endl;
for (i = 0; i < ReaderRecord; i++)
{
if (ReaderNum == astReader[i].Num)
{
ReaderID = i;//找到后返回記錄編號
cout << "\t\t" << "編號" << "\t姓名" << "\t性別" << "\t最大可借閱數(shù)量" << "\t當前可借閱的數(shù)量" << endl;
cout << "\t\t" << astReader[i].Num << "\t" << astReader[i].Name << "\t" << astReader[i].Sex << "\t" << astReader[i].Max << "\t\t" << astReader[i].Amount << endl;
break;
}
}
if (i == ReaderRecord)
{
cout << "\t找不到" << ReaderNum << "號讀者信息";
ReaderID = -1;
}
return ReaderID;
}
//刪除讀者信息
void DeleteReader()
{
FILE* pfReader;
int ReaderID;
int ReaderRecord;
char Flag;
system("cls");
ReaderID = SearchReader();
cout << endl;
//文件打開失敗
if (ReaderID == -1)
{
return;
}
if (ReaderID == -3)
{
return;
}
ReaderRecord = ReadReaderFile("rb");
cout << "\t已經(jīng)找到該讀者,是否刪除(y/n):";
cin >> Flag;
cout << endl;
int index = astReader[ReaderID].Num;//刪除的信息編號
//把要刪除的記錄后的數(shù)組全部向前移動一位,然后再寫入文件中
if (Flag == 'n')
{
return;
}
else if (Flag == 'y')
{
for (int i = ReaderID; i < ReaderRecord - 1; i++)
{
astReader[i] = astReader[i + 1];
}
ReaderRecord--;
}
//寫入文件
if (Flag == 'y')
{
pfReader = fopen("G:\\reader.txt", "wb");
if (pfReader != NULL)
{
for (int i = 0; i < ReaderRecord; i++)
{
if (fwrite(&astReader[i], LEN_READER, 1, pfReader) != 1)
{
cout << "\t無法保存該信息" << endl;
return;
}
}
fclose(pfReader);
cout << "\t" << index << "號圖書信息已經(jīng)成功刪除" << endl;
}
}
else
{
cout << "\t輸入錯誤,請退出重新輸入" << endl;
}
}
//保存到文件中
void SaveReaderFile(int ReaderID)
{
FILE* pfReader;
pfReader = fopen("G:\\reader.txt", "rb+");
if (pfReader != NULL)
{
fseek(pfReader, LEN_READER * ReaderID, SEEK_SET);
if (fwrite(&astReader[ReaderID], LEN_READER, 1, pfReader) != 1)
{
cout << "\t無法保存該信息";
}
}
fclose(pfReader);
}
//修改讀者信息
void ModifyReader()
{
int ReaderID, ReaderRecord;
int item, Num, Max;
int FlagExist;
int Borrow;//已經(jīng)借閱的書數(shù)目
system("cls");
ReaderID = SearchReader();
cout << endl;
if (ReaderID == -1)
{
return;
}
if (ReaderID == -3)
{
return;
}
//找到該序號讀者后進行修改
ReaderRecord = ReadReaderFile("rb");
//顯示修改選項的子菜單
cout << endl << "\t\t" << "1.編號" << "\t2.姓名" << "\t3.性別" << "\t4.最大可借閱數(shù)量" << endl;
cout << endl << "\t請輸入需要修改的相應信息(輸入相應數(shù)字):";
cin >> item;
if (item > 4 || item < 1)
{
cout << endl << "\t輸入數(shù)字有誤,請退出重新輸入";
return;
}
switch (item)
{
case 1:
do {
FlagExist = 0;
cout << endl << "\t請輸入修改后的讀者編號:";
cin >> Num;
cout << endl;
for (int i = 0; i < ReaderRecord; i++)
{
if (Num == astReader[i].Num && i != ReaderID)//數(shù)字和已有編號重復不行,更改的編號原來一樣可以
{
FlagExist = 1;
cout << "\t輸入錯誤,該讀者編號已經(jīng)存在,請重新輸入" << endl;
break;
}
}
} while (FlagExist == 1);
astReader[ReaderID].Num = Num;
break;
case 2:
cout << endl << "\t請輸入修改后的讀者名稱:";
cin >> astReader[ReaderID].Name;
cout << endl;
break;
case 3:
cout << endl << "\t請輸入修改后的讀者性別(F/M):";
cin >> astReader[ReaderID].Sex;
cout << endl;
while (astReader[ReaderID].Sex != 0)
{
if (strcmp(astReader[ReaderID].Sex, "F") == 0 || strcmp(astReader[ReaderID].Sex, "M") == 0)
{
break;
}
cout << "\t輸入錯誤,只許輸入'F'或'M',請重新輸入";
cin >> astReader[ReaderID].Sex;
cout << endl;
}
break;
case 4:
Borrow = astReader[ReaderID].Max - astReader[ReaderID].Amount;
cout << endl << "\t請輸入讀者最大可借閱的數(shù)量(范圍為20以內(nèi)):";
cin >> Max;
cout << endl;
while (Max != -1)//bug輸入-1會退出
{
if (Max >= 0 && Max <= 20)
{
if (Borrow > Max)
{
cout << "\t請先還書!" << endl;
return;
}
else
{
astReader[ReaderID].Max = Max;
astReader[ReaderID].Amount = Max - Borrow;
for (int i = Borrow; i < Max; i++)
{
astReader[ReaderID].BookId[i] = 0;
}
break;
}
}
cout << "\t錯誤,讀者最大可借閱的書的范圍為20以內(nèi),請重新輸入:";
cin >> Max;
cout << endl;
}
break;
}
//保存到文件中
SaveReaderFile(ReaderID);
cout << "\t讀者信息修改成功";
}
//讀者管理模塊
//讀者已借閱的數(shù)量=Max-Amount
void MangaeReader()
{
int item;
ShowReaderMenu();
cin >> item;
while (item)
{
switch (item)
{
case 1:
ShowReader();//顯示讀者信息
break;
case 2:
AddReader();//添加讀者信息
break;
case 3:
SearchReader();//查找圖讀者信息
break;
case 4:
DeleteReader();//刪除讀者信息
break;
case 5:
ModifyReader();//修改讀者信息
break;
default:
cout << "\t\t" << "輸入錯誤,請重新輸入" << endl;
Sleep(1500);
break;
}
cout << endl << "按任意鍵返回" << endl;
_getch();//從控件中獲取字符而無需顯示
ShowReaderMenu();
cin >> item;
}
}
//借書模塊
void BorrowBook()
{
//讀者是否可以借書
int BookID,ReaderID;
int Borrow;//讀者當前借閱的書數(shù)
system("cls");
//輸入要借書的讀者編號,判斷編號是否存在,如果再顯示讀者的借閱的圖書信息
ReaderID = SearchReader();
cout << endl;
if (ReaderID == -1)
{
return;
}
if (ReaderID == -3)
{
return;
}
Borrow = astReader[ReaderID].Max - astReader[ReaderID].Amount;
if (Borrow == 0)
{
cout << "\t該讀者沒有借閱任何書" << endl;
}
else
{
cout << "\t該讀者借閱的圖書為:" << endl;
for (int i = 0; i < Borrow; i++)
{
cout << "\t" << astReader[ReaderID].BookId[i] << endl;
}
}
if (astReader[ReaderID].Amount == 0)
{
cout << "\t該讀者可借閱書數(shù)目為0,不能繼續(xù)借書" << endl;
}
//圖書是否可借閱
cout << "\t按任意鍵進入選擇借閱圖書環(huán)節(jié):";
_getch();
BookID = SearchBook();
if (BookID == -1)
{
return;
}
if (BookID == -3)
{
return;
}
if (astBook[BookID].Amount == 0)
{
cout << "\t該圖書庫存量為0,圖書不可借閱" << endl;
}
//借書
astReader[ReaderID].BookId[Borrow] = astBook[BookID].Num;
//圖書庫存-1
astBook[BookID].Amount--;
//當前讀者可借閱數(shù)量-1
astReader[ReaderID].Amount--;
SaveBookFile(BookID);
SaveReaderFile(ReaderID);
cout << "\t借書成功";
}
//還書模塊
void ReturnBook()
{
int BookID, ReaderID;
int Borrow;//讀者當前借閱的書數(shù)
system("cls");
//讀者
ReaderID = SearchReader();
cout << endl;
if (ReaderID == -1)
{
return;
}
if (ReaderID == -3)
{
return;
}
Borrow = astReader[ReaderID].Max - astReader[ReaderID].Amount;
if (Borrow == 0)
{
cout << "\t該讀者沒有借閱任何書,無需歸還" << endl;
}
else
{
cout << "\t該讀者借閱的圖書為:" << endl;
for (int i = 0; i < Borrow; i++)
{
cout << "\t" << astReader[ReaderID].BookId[i] << endl;
}
}
if (astReader[ReaderID].Amount == 0)
{
cout << "\t該讀者可借閱書數(shù)目為0,不能繼續(xù)借書" << endl;
}
//圖書
cout << "\t按任意鍵進入選擇歸還圖書環(huán)節(jié):";
_getch();
BookID = SearchBook();
if (BookID == -1)
{
return;
}
if (BookID == -3)
{
return;
}
int i;
for (i = 0; i < Borrow; i++)
{
if (astReader[ReaderID].BookId[i] == astBook[BookID].Num)
{
//還書
for (int j = i; j < Borrow - 1; j++)
{
astReader[ReaderID].BookId[j] = astReader[ReaderID].BookId[j + 1];
}
astReader[ReaderID].BookId[Borrow - 1] = 0;//清除最后一個信息
//圖書庫存+1
astBook[BookID].Amount++;
//讀者可借閱數(shù)量+1
astReader[ReaderID].Amount++;
break;
}
}
//如果借書列表里面沒有這本書
if (i == Borrow)
{
cout << "\t該讀者沒有借閱這本書,無需歸還";
return;
}
SaveBookFile(BookID);
SaveReaderFile(ReaderID);
cout << "\t還書成功";
}
//借還書模塊
void BorrowReturnManger()
{
ShowBorrowReturnMenu();
int item;
cin >> item;
while (item)
{
switch (item)
{
case 1:
BorrowBook();//借書模塊
break;
case 2:
ReturnBook();//還書模塊
break;
default:
cout << "\t\t" << "輸入錯誤,請重新輸入" << endl;
Sleep(1500);
break;
}
cout << endl << "按任意鍵返回" << endl;
_getch();//從控件中獲取字符而無需顯示
ShowBorrowReturnMenu();
cin >> item;
}
}
int main()
{
Menu();
int item;
cin >> item;
while (item)
{
switch (item)
{
case 1:
MangaeBook();//圖書管理模塊
break;
case 2:
MangaeReader();//讀者管理模塊
break;
case 3:
BorrowReturnManger();//借還書模塊
break;
default:
cout << "\t\t" << "輸入錯誤,請重新輸入" << endl;
Sleep(1500);
break;
}
Menu();
cin >> item;
}
return 0;
}
到了這里,關(guān)于期末大作業(yè)圖書管理系統(tǒng)(c++)源代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!