void CSHreader() //初始化读者库函数
{
file_reader.open("readerfile.txt", ios::in); //打开文件
file_reader.read((char*)&readerzlk[0], sizeof(readerzlk[0]));//将文件内容读到读者库数组的第一个对象
if (strlen(readerzlk[0].getcode()) == 0)//判断第一个对象的内容是否为空,如为空,则文件为空
{
cout<<"读者库信息为空,请建立读者信息。"<<endl;
}
else
{
while(!file_reader.eof())//否则将文件后面的内容读到读者库数组后面的对象之中,从而达到初始化的效果
{
r++;
file_reader.read((char*)&readerzlk[r], sizeof(readerzlk[r]));
if (r >= 50)
{
cout<<"读者库已满!"<<endl;
break;
}
}
cout<<"初始化读者库成功……"<<endl;
}
file_reader.close();
}
void CSHbook() //初始化书籍库函数(注释同读者库一样)
{
file_book.open("bookfile.txt", ios::in);
file_book.read((char*)&library[0], sizeof(library[0]));
if (strlen(library[0].getcode()) == 0)
{
cout<<"书籍库信息为空,请建立书籍信息。"<<endl;
}
else
{
while(!file_book.eof())
{
b++;
file_book.read((char*)&library[b], sizeof(library[b]));
if (b >= 100)
{
cout<<"书籍库已满!"<<endl;
break;
}
}
cout<<"初始化书籍库成功……"<<endl;
}
file_book.close();
}
void CSHrbb() //初始化借书库
{
file_rbb.open("rbb.txt", ios::in);
file_rbb.read((char*)&rbb[0], sizeof(rbb[0]));
if (strlen(rbb[0].readercode) == 0)
{
cout<<"借书库信息为空,暂时无借书情况。"<<endl;
}
else
{
while (!file_rbb.eof())
{
t++;
file_rbb.read((char*)&rbb[t], sizeof(rbb[t]));
if (t >= 100)
{
cout<<"借书库已满,请速让读者归还书籍。"<<endl;
break;
}
}
cout<<"初始化借书库成功……"<<endl;
}
file_rbb.close();
}
void borrowbook() //借书函数
{
int d = 0; //逻辑判断值
int i = 0;
char flag = 'y';
readerborrowbook temp;
while (flag == 'y' || flag == 'Y')
{
temp.borrowbook();
for (i = 0; i < r; i++)//判断有无此读者编号
{
if (strcmp(temp.readercode, readerzlk[i].getcode()) == 0)
{
d = 1; //为1则有此编号,否则无此编号
break;
}
}
if (d == 0)
{
cout<<"对不起!您的编号不存在!"<<endl;
return;
}
d = 0, i = 0; //恢复初始值,进行书的编号的判断
for (i = 0; i < b; i++) //判断有无此书籍编号
{
if (strcmp(temp.bookcode, library[i].getcode()) == 0)
{
d = 1; //同上
break;
}
}
if (d == 0)
{
cout<<"对不起!我们这里没有此书籍!"<<endl;
return;
}
//判断书籍是否借出,本意是想通过".flag"是否等于'Y'或'y'来判断书是否借出的,可是总是判断不成功。
//本意是if (library[i].flag == 'Y' || library[i].flag == 'y')
// {cout<<"非常抱歉,此书已经租出。"<<endl;return;}
int j = 0;
for (j = 0; j < t; j++)
{
if (strcmp(temp.bookcode, rbb[j].bookcode) == 0)
{
cout<<"非常抱歉,此书已经租出。"<<endl;
return;
}
}
library[i].getflag();
if (library[i].flag == 'Y' || library[i].flag == 'y')
{
file_rbb.open("rbb.txt", ios::app);
library[i].print();
rbb[t] = temp;
file_rbb.write((char*)&rbb[t], sizeof(rbb[t]));
t++;
cout<<"借书成功!请按时归还!"<<endl;
file_rbb.close();
}
else
{
cout<<"您不中意此书吗?借书未成功。"<<endl;
}
cout<<"要继续租书吗?[Y/N]";
cin>>flag;
}
}
void Printborrowbook() //查看借书情况函数
{
int i = 0;
for (i = 0; i < t; i++)
{
rbb[i].print();
cout<<endl;
}
}
void borrow()
{
char ch;
cout<<"1.凭证借书 2.查看借书情况 3.退出"<<endl;
cout<<"请输入功能代码:";
cin>>ch;
switch (ch)
{
case '1':
borrowbook();
break;
case '2':
Printborrowbook();
break;
case '3':
return;
break;
default:
cout<<"输入错误,请重新输入:"<<endl;
}
}
void replacebook() //还书模块
{
char bookcode[4];
int i = 0, d = 0;
cout<<"您要还的书籍的编号是:";
cin>>bookcode;
for (i = 0; i < t; i++)
{
if (strcmp(bookcode, rbb[i].bookcode) == 0)
{
d = 1; //逻辑判断,为1则租出,否则没有租出
break; //因为书籍编号具有唯一性,故退出循环
}
}
if (d == 0)
{
cout<<"此书尚未租出或者不存在。"<<endl;
return;
}
else
{
cout<<"此书租出情况如下:"<<endl;
rbb[i].print();
}
char flag;
cout<<"确认要还此书吗?[Y/N]";
cin>>flag;
if (flag == 'y' || flag == 'Y')
{
int p, j = 0;
p = t - i; //P为要循环的次数
for (j = 0; j <= p; j++)
{
rbb[i] = rbb[i + 1];
i++;
}
t--;
//以下为观察借书数组变化的代码
for (i = 0; i < t; i++)
{
rbb[i].print();
cout<<endl;
}
}
}
void rbbwritefile() //将借书库删除内容后的数组写入文件,以达到还书的效果,在程序结束之前调用即可
{
int i = 0;
file_rbb.open("rbb.txt", ios::out);
for (i = 0; i < t; i++)
{
file_rbb.write((char*)&rbb[i], sizeof(rbb[i]));
}
file_rbb.close();
}
void addreader() //增加读者函数
{
if (r >= 50)
{
cout<<"读者库已经满,无法添加!"<<endl;
return;
}
char f = 'y';
int j = 0;
int p = 0; //逻辑判断值
reader temp;
file_reader.open("readerfile.txt", ios::app);
while (f == 'Y' || f == 'y')
{
p = 0; //假设编号为不存在
temp.get();
for (j = 0; j < r; j++)//判断读者编号是否重复
{
if (strcmp(temp.getcode(), readerzlk[j].getcode()) == 0)
{
cout<<"对不起!此读者编号已经存在!"<<endl;
p = 1;//为1则存在,为0则不存在
}
}
if (p == 0)
{
readerzlk[r] = temp;
file_reader.write((char*)&readerzlk[r], sizeof(readerzlk[r])); //写入读者库
cout<<"写入读者库成功……"<<endl;
r++;
}
cout<<"要继续吗?[Y/N]";
cin>>f;
}
file_reader.close();
}
void addbook() //增加书籍函数
{
if (b >= 100)
{
cout<<"读者库已经满,无法添加!"<<endl;
return;
}
char f = 'Y';
int j = 0;
int p = 0;
book temp;
file_book.open("bookfile.txt", ios::app);
while (f == 'Y' || f == 'y')
{
p = 0;
temp.get();
for (j = 0; j < b; j++)
{
if (strcmp(temp.getcode(), library[j].getcode()) == 0)
{
cout<<"对不起!此书籍编号已经存在!"<<endl;
p = 1;
}
}
if (p == 0)
{
library[b] = temp;
file_book.write((char*)&library[b], sizeof(library[b]));
cout<<"写入书籍库成功……"<<endl;
b++;
}
cout<<"要继续吗?[Y/N]";
cin>>f;
}
file_book.close();
}
void readerLC() //列出所有读者
{
for (int j = 0; j < r; j++)
{
readerzlk[j].print();
cout<<endl;
}
}
void bookLC() //列出所有书籍
{
for (int j = 0; j < b; j++)
{
library[j].print();
cout<<endl;
}
}
void readFind_code() //读者编号查找函数
{
int j = 0;
int p = 0; //保存对象下标
int d = 0; //逻辑判断值
char flag = 'Y';
char code[4];
while (flag == 'Y' || flag == 'y')
{
d = 0; //默认为没有找到
cout<<"请输入要查找的读者的编号:";
cin>>code;
for (j = 0; j < r; j++)
{
if (strcmp(code, readerzlk[j].getcode()) == 0)
{
p = j; //将下标传给p
d = 1; //为1则找到对象
break; //因为code具有唯一性,故后面的不用找了,所以跳出循环.
}
}
if (d == 1)
{
readerzlk[p].print();
}
else
{
cout<<"非常抱歉!没有找到你想要的!"<<endl;
}
cout<<"要继续查找吗?[Y/N]";
cin>>flag;
}
}
void bookFind_code() //书籍编号查找函数
{
int j = 0;
int p = 0; //保存对象
int d = 0; //逻辑判断值
char flag = 'Y';
char code[4];
while (flag == 'Y' || flag == 'y')
{
d = 0; //默认为没有找到
cout<<"请输入要查找的书籍的编号:";
cin>>code;
for (j = 0; j < b; j++)
{
if (strcmp(code, library[j].getcode()) == 0)
{
p = j; //将下标传给p
d = 1; //为1则找到对象
break; //因为code具有唯一性,故后面的不用找了,所以跳出循环.
}
}
if (d == 1)
{
library[p].print();
}
else
{
cout<<"非常抱歉!没有找到你想要的!"<<endl;
}
cout<<"要继续查找吗?[Y/N]";
cin>>flag;
}
}
void readFind_name() //读者姓名查找模块
{
char name[10];
char flag = 'Y';
int d = 0; //逻辑判断值
while (flag == 'Y'|| flag == 'y')
{
d = 0; //默认为没有找到.
cout<<"请输入要查找读者的姓名:";
cin>>name;
for (int i = 0; i < r; i++)
{
if (strcmp(name, readerzlk[i].getname()) == 0)
{
d = 1; //找到记录,将d值变为1
readerzlk[i].print(); //因为姓名不具有唯一性,所以得循环完.
cout<<endl;
}
}
if (d == 0)
{
cout<<"非常抱歉!没有找到你想要的!"<<endl;
}
cout<<"要继续查找吗?[Y/N]";
cin>>flag;
}
}
void bookFind_name() //书籍名称查找模块
{
char name[10];
char flag = 'Y';
int d = 0;
while (flag == 'Y'|| flag == 'y')
{
d = 0;
cout<<"请输入要查找书籍的名称:";
cin>>name;
for (int i = 0; i < b; i++)
{
if (strcmp(name, library[i].getname()) == 0)
{
d = 1;
library[i].print();
cout<<endl;
}
}
if (d == 0)
{
cout<<"非常抱歉!没有找到你想要的!"<<endl;
}
cout<<"要继续查找吗?[Y/N]";
cin>>flag;
}
}
void readerFind() //读者查找
{
char flag;
while (1)
{
cout<<"1.按读者编号查找 2.按读者姓名查找 3.退出"<<endl;
cout<<"请输入功能代码:";
cin>>flag;
switch (flag)
{
case '1':
//编号查找模块
readFind_code();
break;
case '2':
//姓名查找模块
readFind_name();
break;
case '3':
return;
break;
default:
cout<<"输入错误,请重新输入:"<<endl;
}
}
}