📄 function.cpp
字号:
#include <iostream.h>
#include "function.h"
#include <stdlib.h>
Library::Library()
{
itemNum = 0;
magNum = 0;
readerNum = 0;
loanNum = 0;
managerNum = 0;
}
void Library::Run()
{
int choice;
char c;
do{
choice = ShowMainMenu();
switch(choice){
case 1:
CreateBibliotheca();
break;
case 2:
CreateReader();
break;
case 3:
CreateManager();
break;
case 4:
do{
Borrow();
cout<<"继续吗?Y(y)es/N(n)o\n";
cin>>c;
cin.get();
}while(c=='Y'||c=='y');
break;
case 5:
do{
Return();
cout<<"继续吗?Y(y)es/N(n)o\n";
cin>>c;
cin.get();
}while(c=='Y'||c=='y');
break;
case 6:
do{
Require();
cout<<"继续吗?Y(y)es/N(n)o\n";
cin>>c;
cin.get();
}while(c=='Y'||c=='y');
break;
case 0: //
exit(0);
break;
default:
cout<<"请重新选择!"<<endl;
break;
}
}while(1);
}
void Library::CreateBibliotheca() // 创建书目的成员函数
{
char s1[40],s2[20],s3[10],c;
long code;
int type,vol;
Item it;
Magazine mz;
int i = itemNum;
int j = magNum;
do{
cout<<"创建书目,请选择1: 书\t2: 杂志\n";
cin>>type;
cin.get();
switch (type){
case 1:
cout<<"输入书目,用回车符间隔:书名 作者 分类号 条码 \n";
cout<<"书名:"; cin.getline(s1,40);
cout<<"作者:"; cin.getline(s2,20);
cout<<"分类号:"; cin.getline(s3,10);
cout<<"条码:"; cin>>code;
it.SetTitle(s1);
it.SetAuthor(s2);
it.SetIndexCode(s3);
it.SetCode(code);
it.SetType(0);
item.Insert(it);
itemNum = i++;
break;
case 2:
cout<<"输入杂志,用回车符间隔:杂志名称 语言 卷号 条码 \n";
cout<<"杂志名称:"; cin.get(); cin.getline(s1,40);
cout<<"语言:1 中文, 2 英文:"; cin>>type;
cout<<"卷号:"; cin>>vol;
cout<<"条码:"; cin>>code;
mz.SetTitle(s1);
mz.SetLang(type);
mz.SetVolume(vol);
mz.SetCode(code);
mz.SetType(1);
mag.Insert(mz);
magNum = j++;
break;
default:
cin.get();
continue;
}
cout<<"继续吗?Y(y)es/N(n)o\n";
cin>>c;
cin.get();
}while(c=='Y'||c=='y');
//可用下面的程序段取代创建书目的输入过程
/* Item item1("aaa","aa","a",11),item2("bbb","bb","b",12);
Magazine mag1("zzz",23,Magazine::LANG(2),13),mag2("ggg",25,Magazine::LANG(1),14);
item.Insert(item1);item.Insert(item2);
mag.Insert(mag1);mag.Insert(mag2);
*/ return ;
}
void Library::CreateReader() // 创建读者库的成员函数
{
char s1[40],s2[20];
char c;
Reader rd;
int j = readerNum,age;
long code;
do{
cout<<"创建读者:\n";
cout<<"输入读者信息,用回车符间隔:姓名 职务 年龄 借书证号 \n";
cout<<"姓名:"; cin.getline(s1,40);
cout<<"职务:"; cin.getline(s2,20);
cout<<"年龄:"; cin>>age;
cout<<"借书证号:"; cin>>code;
rd.SetName(s1);
rd.SetPosition(s2);
rd.SetAge(age);
rd.SetCode(code);
reader.Insert(rd);
cout<<"继续吗?Y(y)es/N(n)o\n";
cin>>c;
cin.get();
j++;
}while(c=='Y'||c=='y');
readerNum = j;
//可用下面的程序段取代创建读者的输入过程
/*Reader rd;
rd.SetName("Lin");
rd.SetPosition("ss");
rd.SetAge(22);
rd.SetCode(2001);
reader.Insert(rd);
*/return ;
}
void Library::CreateManager()
{
char c;
int j = managerNum;
Manager mgr;
do{
cout<<"创建管理员:\n";
cout<<"输入管理员信息,用回车符间隔:姓名 年龄 工号 \n";
cout<<"姓名:"; cin>>mgr.Name;
cout<<"年龄:"; cin>>mgr.Age;
cout<<"工号:"; cin>>mgr.Code;
manager.Insert(mgr);
cout<<"继续吗?Y(y)es/N(n)o\n";
cin>>c;
cin.get();
j++;
}while(c=='Y'||c=='y');
managerNum = j;
//可用下面的程序段取代创建管理员的输入过程
// Manager mgr("Ma",33,3001);
// manager.Insert(mgr);
}
int Library::ShowMainMenu() // 显示主菜单
{
int c;
cout<<"请选择: 首次使用,建议先依次选择1,2,3:\n";
cout<<"1: 创建书目\n2: 创建读者库\n3: 创建管理员库\n4:借书\n5: 还书\n6: 查询\n0: 退出\n";
cin>>c;
cin.get();
return c;
}
void Library::Borrow() // 借书操作
{
int code,barcode,type;
Loan ln;
DblNode<Item> *ti=NULL;
DblNode<Manager> *tm=NULL;
DblNode<Reader> *tr=NULL;
DblNode<Magazine> *mz=NULL;
cout<<"请输入借书证号\n";
cin>>code;
tr = reader.Find(code);
if(tr){ //若找到读者
do{
cout<<"借书,请选择1: 书\t2: 杂志\n";
cin>>type;
cin.get();
cout<<"请输入书本条码:\n";
switch(type){
case 1: //借书
cout<<"书名\t作者\t分类号\t条码\n";
item.ShowList(); //显示可借阅书
cin>>barcode;
ti = item.Find(barcode); // 查找书
break;
case 2: //借杂志
cout<<"杂志名\t卷号\t语言\t条码\n";
mag.ShowList(); //显示可借阅杂志
cin>>barcode;
mz = mag.Find(barcode); // 查找杂志
break;
}
}while(type!=1&&type!=2);
if(ti||mz) // 若与书目中某本书条码相同
{
cout<<"请选择管理员工号:\n";
cout<<"姓名\t年龄\t工号\n";
manager.ShowList();
cin>>code;
tm = manager.Find(code); // 查找管理员
if(tm){ //若找到
if(ti){
tr->Info.AddBook(ti->GetInfo()); // 添加到读者所借书
item.Remove(ti); // 从可借阅书中删除借出书
itemNum--;
}
else {
tr->Info.AddBook(mz->GetInfo()); // 添加到读者所借书
mag.Remove(mz); // 从可借阅杂志中删除借出杂志
magNum--;
}
ln.reader = tr->GetInfo(); // 添加借阅信息
if(ti){
ln.Type = 0;
ln.item = ti->GetInfo();
ln.Code = ti->GetInfo().GetCode();
}
else if(mz) {
ln.Type = 1;
ln.mag = mz->GetInfo();
ln.Code = mz->GetInfo().GetCode();
}
ln.manager = tm->GetInfo();
loan.Insert(ln);
}
else {
cout<<"没有此工号,请重新输入!";
return;
}
}
else { cout<<"没有此条码,请重新输入!"; return;}
}
else { cout<<"没有此借书证号,请重新输入!";return;}
return ;
}
void Library::Return() // 还书操作
{
int code,barcode;
DblNode<Loan> *tl=NULL;
DblNode<Reader> *tr=NULL;
cout<<"还书,请输入借书证号\n";
cin>>code;
tr = reader.Find(code);
if(tr)
{
cout<<"这是您所借书,请选择待还书的条码\n";
tr->Info.ShowBooks();
}
else{ cout<<"没有此号码,请重新选择!\n"; return;}
cin>>barcode;
tl = loan.Find(barcode); //查找借阅信息
if(tl) {
if(tl->Info.GetCode()==barcode&&tl->Info.reader.GetCode()==code)
{
switch(tl->Info.Type){
case 0:
tr->Info.DelBook(tl->Info.item); // 从读者所借书中删除所还书
item.Insert(Item(tl->Info.item)); // 添加到可借阅书中
itemNum++;
break;
case 1:
tr->Info.DelBook(tl->GetInfo().mag); // 从读者所借书中删除所还书
mag.Insert(Magazine(tl->GetInfo().mag)); // 添加到可借阅杂志中
magNum++;
break;
}
loan.Remove(tl); // 删除借阅信息
loanNum--;
}
} else{ cout<<"此书未借出,请重新选择!\n"; return;}
return;
}
void Library::Require() // 通过借书证号查询所借书
{
int code;
cout<<"查询,请输入借书证号\n";
cin>>code;
DblNode<Reader> *tr=NULL;
tr = reader.Find(code);
if(tr)
{
cout<<"这是您的借阅情况:\n";
tr->Info.ShowBooks();
}
else{ cout<<"没有此号码,请重新选择!\n"; return;}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -